summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2004-02-04 07:24:08 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2004-02-04 07:24:08 +0000
commit24eb1f6eb26417bfbaa300fdcd639ab0b4e1cc0c (patch)
tree6e18639906c7327b5386317af33ec5f346900905
parentc4ec00a46d7afff75e50d182699db58bf809ec36 (diff)
downloadphp-git-24eb1f6eb26417bfbaa300fdcd639ab0b4e1cc0c.tar.gz
- Update libmbfl to the latest. This fixes several serious issues in the html
entity encoder and the encoding detection facility. There should be no problem with mailparse() as API change was made so carefully that it would be as small as possible.
-rw-r--r--ext/mbstring/libmbfl/AUTHORS10
-rw-r--r--ext/mbstring/libmbfl/Makefile.am5
-rw-r--r--ext/mbstring/libmbfl/Makefile.bcc328
-rw-r--r--ext/mbstring/libmbfl/README2
-rw-r--r--ext/mbstring/libmbfl/config.h.in9
-rw-r--r--ext/mbstring/libmbfl/configure.in11
-rw-r--r--ext/mbstring/libmbfl/filters/Makefile.am4
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.c8
-rw-r--r--ext/mbstring/libmbfl/filters/html_entities.h7
-rw-r--r--ext/mbstring/libmbfl/filters/mbfilter_htmlent.c73
-rw-r--r--ext/mbstring/libmbfl/mbfl/Makefile.am4
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.c68
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter.h18
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_pass.h4
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h2
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.c32
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_convert.h1
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.c58
-rw-r--r--ext/mbstring/libmbfl/mbfl/mbfl_ident.h4
-rw-r--r--ext/mbstring/libmbfl/nls/Makefile.am4
21 files changed, 168 insertions, 166 deletions
diff --git a/ext/mbstring/libmbfl/AUTHORS b/ext/mbstring/libmbfl/AUTHORS
index 8e6eb49264..e606231518 100644
--- a/ext/mbstring/libmbfl/AUTHORS
+++ b/ext/mbstring/libmbfl/AUTHORS
@@ -1,8 +1,10 @@
+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>
-U. Kenkichi <kenkichi@axes.co.jp>
Tateyama <tateyan@amy.hi-ho.ne.jp>
-Moriyoshi Koizumi <moriyoshi@php.net>
-Rui Hirokawa <hirokawa@php.net>
-Other gracious contributors
+U. Kenkichi <kenkichi@axes.co.jp>
+Wez Furlong <wez@thebrainroom.com>
diff --git a/ext/mbstring/libmbfl/Makefile.am b/ext/mbstring/libmbfl/Makefile.am
index 72c855eec6..7f60683435 100644
--- a/ext/mbstring/libmbfl/Makefile.am
+++ b/ext/mbstring/libmbfl/Makefile.am
@@ -1,2 +1,5 @@
-EXTRA_DIST=AUTHORS DISCLAIMER
+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
index a740f256ed..6dde6b8384 100644
--- a/ext/mbstring/libmbfl/Makefile.bcc32
+++ b/ext/mbstring/libmbfl/Makefile.bcc32
@@ -5,12 +5,12 @@ SUBDIRS=mbfl nls filters
all: mbfl.dll mbfl.lib
mbfl.lib: mbfl.dll
- implib mbfl.lib mbfl.dll
+ implib -a mbfl.lib mbfl.dll
-mbfl.dll: compile mbfl.def mbfl.res
+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.def,mbfl.res
+ ilink32 $(LDFLAGS) @linker.rsp,mbfl.dll,,$(LIBS),,mbfl.res
del linker.rsp
mbfl.res: mbfl.rc
@@ -22,6 +22,8 @@ prepare: config.h.bcc32
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
diff --git a/ext/mbstring/libmbfl/README b/ext/mbstring/libmbfl/README
index d8debc6750..5a3255560e 100644
--- a/ext/mbstring/libmbfl/README
+++ b/ext/mbstring/libmbfl/README
@@ -5,4 +5,4 @@ See LICENSE and DISCLAIMER for licensing information.
See the file INSTALL for building and installation instructions.
-# $Id: README,v 1.1.2.2 2003/08/24 18:18:51 moriyoshi Exp
+# $Id$
diff --git a/ext/mbstring/libmbfl/config.h.in b/ext/mbstring/libmbfl/config.h.in
index 17458c857b..8e7493257e 100644
--- a/ext/mbstring/libmbfl/config.h.in
+++ b/ext/mbstring/libmbfl/config.h.in
@@ -3,6 +3,9 @@
/* 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
@@ -47,6 +50,9 @@
/* 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
@@ -65,6 +71,9 @@
/* 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
diff --git a/ext/mbstring/libmbfl/configure.in b/ext/mbstring/libmbfl/configure.in
index 96da1e85a3..b6e5ab581a 100644
--- a/ext/mbstring/libmbfl/configure.in
+++ b/ext/mbstring/libmbfl/configure.in
@@ -1,8 +1,11 @@
# Process this file with autoconf to produce a configure script.
-AC_INIT([libmbfl],[1.0.0])
-AM_INIT_AUTOMAKE
-AC_CONFIG_SRCDIR([mbfl/mbfilter.c])
-AC_CONFIG_HEADER([config.h])
+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
diff --git a/ext/mbstring/libmbfl/filters/Makefile.am b/ext/mbstring/libmbfl/filters/Makefile.am
index b8d8b7926a..d3e5cfd257 100644
--- a/ext/mbstring/libmbfl/filters/Makefile.am
+++ b/ext/mbstring/libmbfl/filters/Makefile.am
@@ -1,3 +1,5 @@
+EXTRA_DIST=Makefile.bcc32
noinst_LTLIBRARIES=libmbfl_filters.la
INCLUDES=-I../mbfl
-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
+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/html_entities.c b/ext/mbstring/libmbfl/filters/html_entities.c
index 0fc0476b9f..59eb1818d0 100644
--- a/ext/mbstring/libmbfl/filters/html_entities.c
+++ b/ext/mbstring/libmbfl/filters/html_entities.c
@@ -32,13 +32,13 @@
#endif
#include "mbfilter.h"
-#include <string.h>
+#include "html_entities.h"
-const mbfl_html_entity mbfl_html_entity_list[] = { /*
- {"quot", 34}, DO NOT CONVERT THESE AUTOMATICALLY
+const mbfl_html_entity_entry mbfl_html_entity_list[] = {
+ {"quot", 34},
{"amp", 38},
{"lt", 60},
- {"gt", 62}, */
+ {"gt", 62},
{"nbsp", 160},
{"iexcl", 161},
{"cent", 162},
diff --git a/ext/mbstring/libmbfl/filters/html_entities.h b/ext/mbstring/libmbfl/filters/html_entities.h
index 99dbfe2630..a73b9d5bbd 100644
--- a/ext/mbstring/libmbfl/filters/html_entities.h
+++ b/ext/mbstring/libmbfl/filters/html_entities.h
@@ -30,9 +30,12 @@
#ifndef MBFL_HTML_ENTITIES_H
#define MBFL_HTML_ENTITIES_H
-#include "mbfilter.h"
+typedef struct _mbfl_html_entity_entry {
+ char * name;
+ int code;
+} mbfl_html_entity_entry;
-extern mbfl_html_entity mbfl_html_entity_list[];
+extern const mbfl_html_entity_entry mbfl_html_entity_list[];
#endif /* MBFL_HTML_ENTITIES_H */
diff --git a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
index 44071fbb26..f7e7896be6 100644
--- a/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
+++ b/ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
@@ -43,7 +43,15 @@
#include "mbfilter_htmlent.h"
#include "html_entities.h"
-static const unsigned char mblen_table_html[] = { /* 0x00, 0x80 - 0xFF, only valid for numeric entities */
+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,
@@ -51,15 +59,7 @@ static const unsigned char mblen_table_html[] = { /* 0x00, 0x80 - 0xFF, only val
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6
+ 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};
@@ -67,9 +67,9 @@ 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",
- "US-ASCII",
+ "HTML-ENTITIES",
(const char *(*)[])&mbfl_encoding_html_ent_aliases,
- NULL, /* mblen_table_html, Do not use table instead calulate length based on entities actually used */
+ NULL,
MBFL_ENCTYPE_HTML_ENT
};
@@ -98,40 +98,45 @@ const struct mbfl_convert_vtbl vtbl_html_wchar = {
*/
int mbfl_filt_conv_html_enc(int c, mbfl_convert_filter *filter)
{
- int tmp[10];
- int i = 0, p = 0, e;
+ int tmp[64];
+ int i;
unsigned int uc;
+ const mbfl_html_entity_entry *e;
- if (c<256 && mblen_table_html[c]==1) {
+ if (c < sizeof(htmlentitifieds) / sizeof(htmlentitifieds[0]) &&
+ htmlentitifieds[c] != 1) {
CK((*filter->output_function)(c, filter->data));
} else {
- /*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbfl_filt_conv_html_enc(0x%08X = %d)", c, c);*/
CK((*filter->output_function)('&', filter->data));
- while (1) {
- e = mbfl_html_entity_list[i].code;
- if (c < e || e == -1) {
- break;
- }
- if (c == e) {
- while(mbfl_html_entity_list[i].name[p]) {
- CK((*filter->output_function)((int)mbfl_html_entity_list[i].name[p++], 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));
}
- break;
+ goto last;
}
- i++;
}
- i=0;
- if (!p) {
+
+ {
+ int *p = tmp + sizeof(tmp);
+
CK((*filter->output_function)('#', filter->data));
+
uc = (unsigned int)c;
+
+ *(--p) = '\0';
do {
- tmp[i++] = '0'+uc%10;
+ *(--p) = "0123456789"[uc % 10];
uc /= 10;
} while (uc);
- do {
- CK((*filter->output_function)(tmp[--i], filter->data));
- } while (i);
+
+ for (; *p != '\0'; p++) {
+ CK((*filter->output_function)(*p, filter->data));
+ }
}
+ last:
CK((*filter->output_function)(';', filter->data));
}
return c;
@@ -169,7 +174,7 @@ void mbfl_filt_conv_html_dec_dtor(mbfl_convert_filter *filter)
int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
{
int pos, ent = 0;
- mbfl_html_entity *entity;
+ mbfl_html_entity_entry *entity;
char *buffer = (char*)filter->cache;
if (!filter->status) {
@@ -192,7 +197,7 @@ int mbfl_filt_conv_html_dec(int c, mbfl_convert_filter *filter)
/*php_error_docref("ref.mbstring" TSRMLS_CC, E_NOTICE, "mbstring decoded '%s'=%d", buffer, ent);*/
} else {
/* named entity */
- entity = (mbfl_html_entity *)mbfl_html_entity_list;
+ entity = (mbfl_html_entity_entry *)mbfl_html_entity_list;
while (entity->name) {
if (!strcmp(buffer+1, entity->name)) {
ent = entity->code;
diff --git a/ext/mbstring/libmbfl/mbfl/Makefile.am b/ext/mbstring/libmbfl/mbfl/Makefile.am
index 1b9bdcada1..6f817feba2 100644
--- a/ext/mbstring/libmbfl/mbfl/Makefile.am
+++ b/ext/mbstring/libmbfl/mbfl/Makefile.am
@@ -1,10 +1,12 @@
+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
+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)`
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.c b/ext/mbstring/libmbfl/mbfl/mbfilter.c
index 640100f0c4..7984f30931 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.c
@@ -334,14 +334,14 @@ mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *str
* encoding detector
*/
mbfl_encoding_detector *
-mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz)
+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 || eliztsz <= 0) {
+ if (elist == NULL || elistsz <= 0) {
return NULL;
}
@@ -350,7 +350,7 @@ mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz)
if (identd == NULL) {
return NULL;
}
- identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter *));
+ identd->filter_list = (mbfl_identify_filter **)mbfl_calloc(elistsz, sizeof(mbfl_identify_filter *));
if (identd->filter_list == NULL) {
mbfl_free(identd);
return NULL;
@@ -359,7 +359,7 @@ mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz)
/* create filters */
i = 0;
num = 0;
- while (i < eliztsz) {
+ while (i < elistsz) {
filter = mbfl_identify_filter_new(elist[i]);
if (filter != NULL) {
identd->filter_list[num] = filter;
@@ -522,49 +522,41 @@ mbfl_convert_encoding(
* identify encoding
*/
const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict)
+mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz, int strict)
{
int i, n, num, bad;
unsigned char *p;
- const struct mbfl_identify_vtbl *vtbl;
mbfl_identify_filter *flist, *filter;
const mbfl_encoding *encoding;
- /* initialize */
- flist = (mbfl_identify_filter *)mbfl_calloc(eliztsz, sizeof(mbfl_identify_filter));
+ /* 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;
}
- i = 0;
+
num = 0;
if (elist != NULL) {
- while (i < eliztsz) {
- vtbl = mbfl_identify_filter_get_vtbl(elist[i]);
- if (vtbl != NULL) {
- filter = &flist[num];
- mbfl_identify_filter_set_vtbl(filter, vtbl);
- filter->encoding = mbfl_no2encoding(vtbl->encoding);
- (*filter->filter_ctor)(filter);
+ for (i = 0; i < elistsz; i++) {
+ if (!mbfl_identify_filter_init(&flist[num], elist[i])) {
num++;
}
- i++;
}
}
/* feed data */
n = string->len;
p = string->val;
+
if (p != NULL) {
+ bad = 0;
while (n > 0) {
- i = 0;
- bad = 0;
- while (i < num) {
+ for (i = 0; i < num; i++) {
filter = &flist[i];
(*filter->filter_function)(*p, filter);
if (filter->flag) {
bad++;
}
- i++;
}
if ((num - 1) <= bad && !strict) {
break;
@@ -575,41 +567,33 @@ mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int el
}
/* judge */
- i = num - 1;
- bad = 1;
encoding = NULL;
- while (i >= 0) {
+
+ for (i = 0; i < num; i++) {
filter = &flist[i];
- if (filter->flag) {
- bad++;
- } else {
+ if (!filter->flag) {
encoding = filter->encoding;
+ break;
}
- i--;
}
-#if 0
- if (bad < num) {
- encoding = NULL;
- }
-#endif
- i = 0;
- while (i < num) {
- filter = &flist[i];
- (*filter->filter_dtor)(filter);
- i++;
+ /* 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 eliztsz, int strict)
+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, eliztsz, strict);
+ 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) {
@@ -620,11 +604,11 @@ mbfl_identify_encoding_name(mbfl_string *string, enum mbfl_no_encoding *elist, i
}
const enum mbfl_no_encoding
-mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz)
+mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz)
{
const mbfl_encoding *encoding;
- encoding = mbfl_identify_encoding(string, elist, eliztsz, 0);
+ 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) {
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter.h b/ext/mbstring/libmbfl/mbfl/mbfilter.h
index 949a5e626c..eadae7b3f4 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter.h
@@ -140,7 +140,7 @@ struct _mbfl_encoding_detector {
int filter_list_size;
};
-MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(enum mbfl_no_encoding *elist, int eliztsz);
+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);
@@ -157,13 +157,13 @@ mbfl_convert_encoding(mbfl_string *string, mbfl_string *result, enum mbfl_no_enc
* identify encoding
*/
MBFLAPI extern const mbfl_encoding *
-mbfl_identify_encoding(mbfl_string *string, enum mbfl_no_encoding *elist, int eliztsz, int strict);
+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 eliztsz, int strict);
+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 eliztsz);
+mbfl_identify_encoding_no(mbfl_string *string, enum mbfl_no_encoding *elist, int elistsz);
/*
* strlen
@@ -265,26 +265,16 @@ mbfl_mime_header_decode(
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);
-/*
- * HTML Entity table
- */
-typedef struct _mbfl_html_entity {
- char * name;
- int code;
-} mbfl_html_entity;
-
#endif /* MBFL_MBFILTER_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
index 4fc8922605..a87c564616 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
@@ -34,6 +34,6 @@
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_8bit;
+MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit;
#endif /* MBFL_MBFILTER_8BIT_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
index 087aa2c3be..49d169c668 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
@@ -33,8 +33,8 @@
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_pass;
-extern const struct mbfl_convert_vtbl vtbl_pass;
+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);
diff --git a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
index 24bf7473c1..9e9396a77f 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
@@ -34,6 +34,6 @@
#include "mbfl_defs.h"
#include "mbfilter.h"
-extern const mbfl_encoding mbfl_encoding_wchar;
+MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar;
#endif /* MBFL_MBFILTER_WCHAR_H */
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
index 2b9090eb59..9dd27ff595 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.c
@@ -89,6 +89,8 @@
#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
@@ -247,7 +249,7 @@ mbfl_convert_filter_new(
filter->illegal_substchar = 0x3f; /* '?' */
/* setup the function table */
- mbfl_convert_filter_select_vtbl(filter);
+ mbfl_convert_filter_reset_vtbl(filter);
/* constructor */
(*filter->filter_ctor)(filter);
@@ -277,11 +279,8 @@ mbfl_convert_filter_flush(mbfl_convert_filter *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)
+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);
@@ -291,7 +290,7 @@ mbfl_convert_filter_reset(
filter->to = mbfl_no2encoding(to);
/* set the vtbl */
- mbfl_convert_filter_select_vtbl(filter);
+ mbfl_convert_filter_reset_vtbl(filter);
/* construct new filter */
(*filter->filter_ctor)(filter);
@@ -434,17 +433,6 @@ mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter)
return ret;
}
-void mbfl_convert_filter_set_vtbl(mbfl_convert_filter *filter, const struct mbfl_convert_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- filter->filter_flush = vtbl->filter_flush;
- }
-}
-
-
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;
@@ -471,7 +459,7 @@ const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(enum mbfl_no_encod
}
-void mbfl_convert_filter_select_vtbl(mbfl_convert_filter *filter)
+static void mbfl_convert_filter_reset_vtbl(mbfl_convert_filter *filter)
{
const struct mbfl_convert_vtbl *vtbl;
@@ -479,7 +467,11 @@ void mbfl_convert_filter_select_vtbl(mbfl_convert_filter *filter)
if (vtbl == NULL) {
vtbl = &vtbl_pass;
}
- mbfl_convert_filter_set_vtbl(filter, vtbl);
+
+ filter->filter_ctor = vtbl->filter_ctor;
+ filter->filter_dtor = vtbl->filter_dtor;
+ filter->filter_function = vtbl->filter_function;
+ filter->filter_flush = vtbl->filter_flush;
}
/*
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
index 9499448677..0bc06209c1 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_convert.h
@@ -76,7 +76,6 @@ 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 void mbfl_convert_filter_select_vtbl(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);
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
index 5b581bf566..619b9cfc10 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.c
@@ -139,16 +139,6 @@ static const struct mbfl_identify_vtbl *mbfl_identify_filter_list[] = {
/*
* identify filter
*/
-
-void mbfl_identify_filter_set_vtbl(mbfl_identify_filter *filter, const struct mbfl_identify_vtbl *vtbl)
-{
- if (filter && vtbl) {
- filter->filter_ctor = vtbl->filter_ctor;
- filter->filter_dtor = vtbl->filter_dtor;
- filter->filter_function = vtbl->filter_function;
- }
-}
-
const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding)
{
const struct mbfl_identify_vtbl * vtbl;
@@ -164,20 +154,9 @@ const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_enc
return vtbl;
}
-void mbfl_identify_filter_select_vtbl(mbfl_identify_filter *filter)
-{
- const struct mbfl_identify_vtbl *vtbl;
-
- vtbl = mbfl_identify_filter_get_vtbl(filter->encoding->no_encoding);
- if (vtbl == NULL) {
- vtbl = &vtbl_identify_false;
- }
- mbfl_identify_filter_set_vtbl(filter, vtbl);
-}
-
mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
{
- mbfl_identify_filter * filter;
+ mbfl_identify_filter *filter;
/* allocate */
filter = (mbfl_identify_filter *)mbfl_malloc(sizeof(mbfl_identify_filter));
@@ -185,6 +164,18 @@ mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
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) {
@@ -196,20 +187,33 @@ mbfl_identify_filter *mbfl_identify_filter_new(enum mbfl_no_encoding encoding)
filter->score = 0;
/* setup the function table */
- mbfl_identify_filter_select_vtbl(filter);
+ 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 filter;
+ return 0;
}
void mbfl_identify_filter_delete(mbfl_identify_filter *filter)
{
- if (filter) {
- (*filter->filter_dtor)(filter);
- mbfl_free((void*)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)
diff --git a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
index e66513bd71..730ed00b59 100644
--- a/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
+++ b/ext/mbstring/libmbfl/mbfl/mbfl_ident.h
@@ -56,11 +56,11 @@ struct mbfl_identify_vtbl {
int (*filter_function)(int c, mbfl_identify_filter *filter);
};
-MBFLAPI extern void mbfl_identify_filter_set_vtbl(mbfl_identify_filter *filter, const struct mbfl_identify_vtbl *vtbl);
MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding);
-MBFLAPI extern void mbfl_identify_filter_select_vtbl(mbfl_identify_filter *filter);
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 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);
diff --git a/ext/mbstring/libmbfl/nls/Makefile.am b/ext/mbstring/libmbfl/nls/Makefile.am
index 14ddba733f..ab2ea9d3cc 100644
--- a/ext/mbstring/libmbfl/nls/Makefile.am
+++ b/ext/mbstring/libmbfl/nls/Makefile.am
@@ -1,3 +1,5 @@
+EXTRA_DIST=Makefile.bcc32
noinst_LTLIBRARIES=libmbfl_nls.la
INCLUDES=-I../mbfl
-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
+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