cvs: php4(PHP_4_2_0) /ext/mbstring mbstring.c /main SAPI.c SAPI.h

From: 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;

« previous php.cvs (#13002) next »