]> granicus.if.org Git - php/commitdiff
- Update libmbfl to the latest. This fixes several serious issues in the html
authorMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 4 Feb 2004 07:24:08 +0000 (07:24 +0000)
committerMoriyoshi Koizumi <moriyoshi@php.net>
Wed, 4 Feb 2004 07:24:08 +0000 (07:24 +0000)
  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.

21 files changed:
ext/mbstring/libmbfl/AUTHORS
ext/mbstring/libmbfl/Makefile.am
ext/mbstring/libmbfl/Makefile.bcc32
ext/mbstring/libmbfl/README
ext/mbstring/libmbfl/config.h.in
ext/mbstring/libmbfl/configure.in
ext/mbstring/libmbfl/filters/Makefile.am
ext/mbstring/libmbfl/filters/html_entities.c
ext/mbstring/libmbfl/filters/html_entities.h
ext/mbstring/libmbfl/filters/mbfilter_htmlent.c
ext/mbstring/libmbfl/mbfl/Makefile.am
ext/mbstring/libmbfl/mbfl/mbfilter.c
ext/mbstring/libmbfl/mbfl/mbfilter.h
ext/mbstring/libmbfl/mbfl/mbfilter_8bit.h
ext/mbstring/libmbfl/mbfl/mbfilter_pass.h
ext/mbstring/libmbfl/mbfl/mbfilter_wchar.h
ext/mbstring/libmbfl/mbfl/mbfl_convert.c
ext/mbstring/libmbfl/mbfl/mbfl_convert.h
ext/mbstring/libmbfl/mbfl/mbfl_ident.c
ext/mbstring/libmbfl/mbfl/mbfl_ident.h
ext/mbstring/libmbfl/nls/Makefile.am

index 8e6eb49264a817283331312834a01f0d01b71362..e6062315182a91970d888bdec8cff7fc5a14ecb2 100644 (file)
@@ -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>
index 72c855eec616e7494d6b60bcb6e55bb2cbce3f44..7f60683435c741b4d4a1a81554c033f8d094b511 100644 (file)
@@ -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
index a740f256ed001a0f389b24690798b51fcbcff678..6dde6b8384f44a6d45060fccf09f073581690e8a 100644 (file)
@@ -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
index d8debc67507c6269e48d1a4eb80291d2c3db9ba8..5a3255560e8dac47d7e47c99891995d8d8a33abd 100644 (file)
@@ -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$
index 17458c857bf8ab818b9d4509554f78fd9ff42b8b..8e7493257e7c552a044baa53003f20288dcd3eb3 100644 (file)
@@ -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
 
index 96da1e85a3a7206f57c9ecb111ce7fe9d667b804..b6e5ab581a464cec9668f67d3092fa142ec91743 100644 (file)
@@ -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
index b8d8b7926a3f59e67e7277ee2f4d386bbebc1af2..d3e5cfd257e161a9885afb2ad7a4d0bc3a99f0ae 100644 (file)
@@ -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
index 0fc0476b9f5c290a6019e9644f74547e6cad0646..59eb1818d08aace9a10dd0526678443487c04115 100644 (file)
 #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},
index 99dbfe263075b08206556bad27d4618780f7db44..a73b9d5bbd62996517a66fa1a0ff0669ac7d178b 100644 (file)
 #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 */
 
index 44071fbb26ad043c6dcdbecb8613a8a73a303df4..f7e7896be6f0345a7ddb765f599c0c9cf020e8be 100644 (file)
 #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;
index 1b9bdcada10796986167202322d45cb5e180b433..6f817feba2482affbf8e226f379e67c8f0f679c6 100644 (file)
@@ -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)`
index 640100f0c40251294b7924a025d65f66bc059a77..7984f30931e33be17d200359bca52d53a4f0efd6 100644 (file)
@@ -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) {
index 949a5e626c882a644da6c4bdd6009e989c01181b..eadae7b3f4fdb8c6e1f7adaedad9cff35e90a1e7 100644 (file)
@@ -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 */
index 4fc89226059e3b8c82f6f9257c57bb8e59fc733e..a87c5646162ce97f0f3ac14ca50b34051043e385 100644 (file)
@@ -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 */
index 087aa2c3be5aaab6251db2770e42544197abbb49..49d169c66899d6a86b3b5861b1abfc65ec5e0abf 100644 (file)
@@ -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);
 
index 24bf7473c134f1f393db30fef84fea0a3266a46f..9e9396a77f716662586a7097cc0247c1a557538c 100644 (file)
@@ -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 */
index 2b9090eb59e6884c0a6e06c5719714a501d9261e..9dd27ff5956ad79e8644f43e303612a4ae21a1f6 100644 (file)
@@ -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;
 }
 
 /*
index 9499448677e1c40b91a2507a278df4cc84fcdfb6..0bc06209c178c83e211f950757e37f034358a4b7 100644 (file)
@@ -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);
index 5b581bf5669f53183e926bfb5dc9f921a5ff2940..619b9cfc109b2cf8437b9dc37499542c38a02d7e 100644 (file)
@@ -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)
index e66513bd7181b92b00729f8146d3c1bbe19371f7..730ed00b5988943d42c6c5536e889667c576015f 100644 (file)
@@ -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);
index 14ddba733ff8436c9bf768365778f5372d88323f..ab2ea9d3cc6c10bcf89178fc58af8b9ff09d8032 100644 (file)
@@ -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