moriyoshi Fri Oct 25 09:12:05 2002 EDT
Modified files:
/php4/ext/standard html.c
Log:
Fix build if mbstring is enabled as shared extension.
Index: php4/ext/standard/html.c
diff -u php4/ext/standard/html.c:1.59 php4/ext/standard/html.c:1.60
--- php4/ext/standard/html.c:1.59 Thu Oct 24 18:04:28 2002
+++ php4/ext/standard/html.c Fri Oct 25 09:12:05 2002
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: html.c,v 1.59 2002/10/24 22:04:28 moriyoshi Exp $ */
+/* $Id: html.c,v 1.60 2002/10/25 13:12:05 moriyoshi Exp $ */
#include "php.h"
#include "reg.h"
@@ -282,9 +282,12 @@
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 },
{ "BIG5", cs_big5 },
{ "GB2312", cs_gb2312 },
{ "BIG5-HKSCS", cs_big5hkscs },
@@ -525,82 +528,108 @@
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) {
+ 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(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;
+ 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;
+ }
+#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) {
- /* try to detect the charset for the locale */
+
+ 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);
+ charset_hint = nl_langinfo(CODESET);
+ if (charset_hint != NULL && (len=strlen(charset_hint)) != 0) {
+ goto det_charset;
+ }
#endif
+
#if HAVE_LOCALE_H
- if (charset_hint == NULL) {
- /* 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);
- }
- } else {
- len = strlen(charset_hint);
- }
-#endif
+ /* 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;
@@ -616,6 +645,9 @@
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 CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php