diff options
Diffstat (limited to 'ext/iconv/iconv.c')
-rw-r--r-- | ext/iconv/iconv.c | 296 |
1 files changed, 0 insertions, 296 deletions
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c deleted file mode 100644 index d1b4d494cb..0000000000 --- a/ext/iconv/iconv.c +++ /dev/null @@ -1,296 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP version 4.0 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2001 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 2.02 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available at through the world-wide-web at | - | http://www.php.net/license/2_02.txt. | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Authors: Rui Hirokawa <louis@cityfujisawa.ne.jp> | - | Stig Bakken <ssb@fast.no> | - +----------------------------------------------------------------------+ - */ - -/* $Id$ */ - -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "php.h" - -#if HAVE_ICONV - -#include <iconv.h> - -#include "php_globals.h" -#include "php_iconv.h" -#include "ext/standard/info.h" -#include "main/php_output.h" -#include "SAPI.h" -#include "php_ini.h" - - -#if HAVE_LIBICONV -#define icv_open(a,b) libiconv_open(a,b) -#define icv_close(a) libiconv_close(a) -#define icv(a,b,c,d,e) libiconv(a,b,c,d,e) -#else -#define icv_open(a,b) iconv_open(a,b) -#define icv_close(a) iconv_close(a) -#define icv(a,b,c,d,e) iconv(a,b,c,d,e) -#endif - - -/* {{{ iconv_functions[] - */ -function_entry iconv_functions[] = { - PHP_FE(iconv, NULL) - PHP_FE(ob_iconv_handler, NULL) - PHP_FE(iconv_get_encoding, NULL) - PHP_FE(iconv_set_encoding, NULL) - {NULL, NULL, NULL} -}; -/* }}} */ - -/* {{{ iconv_module_entry - */ -zend_module_entry iconv_module_entry = { - "iconv", - iconv_functions, - PHP_MINIT(miconv), - PHP_MSHUTDOWN(miconv), - NULL, - NULL, - PHP_MINFO(miconv), - STANDARD_MODULE_PROPERTIES -}; -/* }}} */ - -ZEND_DECLARE_MODULE_GLOBALS(iconv) - -#ifdef COMPILE_DL_ICONV -ZEND_GET_MODULE(iconv) -#endif - -int php_iconv_string(char *, char **, char *, char *); - -/* {{{ PHP_INI - */ -PHP_INI_BEGIN() - STD_PHP_INI_ENTRY("iconv.input_encoding", ICONV_INPUT_ENCODING, PHP_INI_ALL, OnUpdateString, input_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.output_encoding", ICONV_OUTPUT_ENCODING, PHP_INI_ALL, OnUpdateString, output_encoding, zend_iconv_globals, iconv_globals) - STD_PHP_INI_ENTRY("iconv.internal_encoding", ICONV_INTERNAL_ENCODING, PHP_INI_ALL, OnUpdateString, internal_encoding, zend_iconv_globals, iconv_globals) -PHP_INI_END() -/* }}} */ - -static void -php_iconv_init_globals(zend_iconv_globals *iconv_globals) -{ - iconv_globals->input_encoding = NULL; - iconv_globals->output_encoding = NULL; - iconv_globals->internal_encoding = NULL; -} - -PHP_MINIT_FUNCTION(miconv) -{ - ZEND_INIT_MODULE_GLOBALS(iconv, php_iconv_init_globals, NULL); - REGISTER_INI_ENTRIES(); - return SUCCESS; -} - -PHP_MSHUTDOWN_FUNCTION(miconv) -{ - UNREGISTER_INI_ENTRIES(); - return SUCCESS; -} - -PHP_MINFO_FUNCTION(miconv) -{ - php_info_print_table_start(); - php_info_print_table_header(2, "iconv support", "enabled"); - php_info_print_table_end(); - - DISPLAY_INI_ENTRIES(); -} - -/* {{{ php_iconv_string - */ -int php_iconv_string(char *in_p, char **out, char *in_charset, char *out_charset) -{ - unsigned int in_size, out_size; - char *out_buffer, *out_p; - iconv_t cd; - size_t result; - typedef unsigned int ucs4_t; - - in_size = strlen(in_p) * sizeof(char) + 1; - out_size = strlen(in_p) * sizeof(ucs4_t) + 1; - - out_buffer = (char *) emalloc(out_size); - *out = out_buffer; - out_p = out_buffer; - - cd = icv_open(out_charset, in_charset); - - if (cd == (iconv_t)(-1)) { - php_error(E_WARNING, "iconv: cannot convert from `%s' to `%s'", - in_charset, out_charset); - efree(out_buffer); - return FAILURE; - } - - result = icv(cd, (const char **) &in_p, &in_size, (char **) - &out_p, &out_size); - - if (result == (size_t)(-1)) { - efree(out_buffer); - return FAILURE; - } - - icv_close(cd); - - return SUCCESS; -} -/* }}} */ - -/* {{{ proto string iconv(string in_charset, string out_charset, string str) - Returns str converted to the out_charset character set */ -PHP_FUNCTION(iconv) -{ - zval **in_charset, **out_charset, **in_buffer; - char *out_buffer; - - if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &in_charset, &out_charset, &in_buffer) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(in_charset); - convert_to_string_ex(out_charset); - convert_to_string_ex(in_buffer); - - if (php_iconv_string(Z_STRVAL_PP(in_buffer), &out_buffer, Z_STRVAL_PP(in_charset), Z_STRVAL_PP(out_charset)) == SUCCESS) { - RETVAL_STRING(out_buffer, 0); - } else { - RETURN_FALSE; - } -} -/* }}} */ - -/* {{{ proto string ob_iconv_handler(string contents, int status) - Returns str in output buffer converted to the iconv.output_encoding character set */ -PHP_FUNCTION(ob_iconv_handler) -{ - char *out_buffer; - zval **zv_string, **zv_status; - - if (ZEND_NUM_ARGS()!=2 || zend_get_parameters_ex(2, &zv_string, &zv_status)==FAILURE) { - ZEND_WRONG_PARAM_COUNT(); - } - - convert_to_string_ex(zv_string); - convert_to_long_ex(zv_status); - - if (SG(sapi_headers).send_default_content_type && - php_iconv_string(Z_STRVAL_PP(zv_string), &out_buffer, - ICONVG(internal_encoding), - ICONVG(output_encoding))==SUCCESS) { - RETVAL_STRING(out_buffer, 0); - } else { - zval_dtor(return_value); - *return_value = **zv_string; - zval_copy_ctor(return_value); - } - -} -/* }}} */ - -/* {{{ proto bool iconv_set_encoding(string type, string charset) - Sets internal encoding and output encoding for ob_iconv_handler() */ -PHP_FUNCTION(iconv_set_encoding) -{ - zval **type, **charset; - int argc = ZEND_NUM_ARGS(); - - if (argc != 2 || zend_get_parameters_ex(2, &type, &charset) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(type); - convert_to_string_ex(charset); - - if(!strcasecmp("input_encoding",Z_STRVAL_PP(type))) { - if (ICONVG(input_encoding)) { - free(ICONVG(input_encoding)); - } - ICONVG(input_encoding) = estrndup(Z_STRVAL_PP(charset), Z_STRLEN_PP(charset)); - } else if(!strcasecmp("output_encoding",Z_STRVAL_PP(type))) { - if (ICONVG(output_encoding)) { - free(ICONVG(output_encoding)); - } - ICONVG(output_encoding) = estrndup(Z_STRVAL_PP(charset), Z_STRLEN_PP(charset)); - } else if(!strcasecmp("internal_encoding",Z_STRVAL_PP(type))) { - if (ICONVG(internal_encoding)) { - free(ICONVG(internal_encoding)); - } - ICONVG(internal_encoding) = estrndup(Z_STRVAL_PP(charset), Z_STRLEN_PP(charset)); - } else { - RETURN_FALSE; - } - - RETURN_TRUE; -} -/* }}} */ - -/* {{{ proto array iconv_get_encoding([string type]) - Get internal encoding and output encoding for ob_iconv_handler() */ -PHP_FUNCTION(iconv_get_encoding) -{ - zval **type; - int argc = ZEND_NUM_ARGS(); - - if (argc < 0 || argc > 1 || zend_get_parameters_ex(1, &type) == FAILURE) { - WRONG_PARAM_COUNT; - } - - convert_to_string_ex(type); - - if (argc == 0 || !strcasecmp("all",Z_STRVAL_PP(type))) { - if (array_init(return_value) == FAILURE) { - RETURN_FALSE; - } - add_assoc_string(return_value, "input_encoding", - ICONVG(input_encoding), 1); - add_assoc_string(return_value, "output_encoding", - ICONVG(output_encoding), 1); - add_assoc_string(return_value, "internal_encoding", - ICONVG(internal_encoding), 1); - } else if (!strcasecmp("input_encoding",Z_STRVAL_PP(type))) { - RETVAL_STRING(ICONVG(input_encoding), 1); - } else if (!strcasecmp("output_encoding",Z_STRVAL_PP(type))) { - RETVAL_STRING(ICONVG(output_encoding), 1); - } else if (!strcasecmp("internal_encoding",Z_STRVAL_PP(type))) { - RETVAL_STRING(ICONVG(internal_encoding), 1); - } else { - RETURN_FALSE; - } - -} -/* }}} */ - -#endif - -/* - * Local variables: - * tab-width: 4 - * c-basic-offset: 4 - * End: - * vim600: sw=4 ts=4 tw=78 fdm=marker - * vim<600: sw=4 ts=4 tw=78 - */ |