cvs: php4(PHP_4_2_0) /ext/mbstring mbstring.c /main SAPI.c SAPI.h
| From: | Rui Hirokawa | Date: | Sat, 27 Jul 2002 13:15:42 +0000 |
| Subject: | cvs: php4(PHP_4_2_0) /ext/mbstring mbstring.c /main SAPI.c SAPI.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-13002@lists.php.net to get a copy of this message | ||
hirokawa Sat Jul 27 09:15:42 2002 EDT
Modified files: (Branch: PHP_4_2_0)
/php4/ext/mbstring mbstring.c
/php4/main SAPI.c SAPI.h
Log:
fixed: output encoding translation by mb_output_handler() in ext/mbstring was not usable when
Content-Type is set by header().
Index: php4/ext/mbstring/mbstring.c
diff -u php4/ext/mbstring/mbstring.c:1.48.2.10 php4/ext/mbstring/mbstring.c:1.48.2.11
--- php4/ext/mbstring/mbstring.c:1.48.2.10 Mon Jul 15 14:02:09 2002
+++ php4/ext/mbstring/mbstring.c Sat Jul 27 09:15:39 2002
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mbstring.c,v 1.48.2.10 2002/07/15 18:02:09 edink Exp $ */
+/* $Id: mbstring.c,v 1.48.2.11 2002/07/27 13:15:39 hirokawa Exp $ */
/*
* PHP4 Multibyte String module "mbstring" (currently only for Japanese)
@@ -1489,10 +1489,12 @@
size_t arg_string_len;
long arg_status;
mbfl_string string, result;
- const char *mimetype, *charset;
+ 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) {
WRONG_PARAM_COUNT;
@@ -1510,9 +1512,23 @@
if (encoding == mbfl_no_encoding_pass) {
RETURN_STRINGL(arg_string, arg_string_len, 1);
}
- /* if content-type is not yet set, set it and activate the converter */
- if (SG(sapi_headers).send_default_content_type ) {
+
+ /* 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 or text mimetype is 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 = (sizeof ("Content-Type:")-1) + strlen(mimetype) + (sizeof
(";charset=")-1) + strlen(charset) + 1;
@@ -1526,6 +1542,9 @@
}
/* activate the converter */
MBSTRG(outconv) = mbfl_buffer_converter_new(MBSTRG(current_internal_encoding), encoding, 0);
+ if (send_text_mimetype){
+ efree(mimetype);
+ }
}
}
Index: php4/main/SAPI.c
diff -u php4/main/SAPI.c:1.129.2.2 php4/main/SAPI.c:1.129.2.3
--- php4/main/SAPI.c:1.129.2.2 Wed Jul 24 06:01:31 2002
+++ php4/main/SAPI.c Sat Jul 27 09:15:42 2002
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: SAPI.c,v 1.129.2.2 2002/07/24 10:01:31 derick Exp $ */
+/* $Id: SAPI.c,v 1.129.2.3 2002/07/27 13:15:42 hirokawa Exp $ */
#include <ctype.h>
#include <sys/stat.h>
@@ -284,6 +284,7 @@
SG(sapi_headers).http_response_code = 200;
*/
SG(sapi_headers).http_status_line = NULL;
+ SG(sapi_headers).mimetype = NULL;
SG(headers_sent) = 0;
SG(read_post_bytes) = 0;
SG(request_info).post_data = NULL;
@@ -448,6 +449,10 @@
}
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);
@@ -459,6 +464,7 @@
*colon_offset = '\0';
efree(header_line);
}
+
efree(mimetype);
SG(sapi_headers).send_default_content_type = 0;
} else if (!STRCASECMP(header_line, "Location")) {
@@ -627,6 +633,9 @@
if (SG(sapi_headers).http_status_line) {
efree(SG(sapi_headers).http_status_line);
+ }
+ if (SG(sapi_headers).mimetype) {
+ efree(SG(sapi_headers).mimetype);
}
return ret;
Index: php4/main/SAPI.h
diff -u php4/main/SAPI.h:1.80 php4/main/SAPI.h:1.80.2.1
--- php4/main/SAPI.h:1.80 Thu Feb 28 03:27:02 2002
+++ php4/main/SAPI.h Sat Jul 27 09:15:42 2002
@@ -51,6 +51,7 @@
zend_llist headers;
int http_response_code;
unsigned char send_default_content_type;
+ char *mimetype;
char *http_status_line;
} sapi_headers_struct;