summaryrefslogtreecommitdiff
path: root/ext/recode
diff options
context:
space:
mode:
Diffstat (limited to 'ext/recode')
-rw-r--r--ext/recode/php_recode.h9
-rw-r--r--ext/recode/recode.c54
-rw-r--r--ext/recode/tests/001.phpt38
-rw-r--r--ext/recode/tests/002.phpt32
-rw-r--r--ext/recode/tests/html.raw1
5 files changed, 104 insertions, 30 deletions
diff --git a/ext/recode/php_recode.h b/ext/recode/php_recode.h
index dd15e657af..24ee0bac78 100644
--- a/ext/recode/php_recode.h
+++ b/ext/recode/php_recode.h
@@ -1,6 +1,6 @@
-/*
+/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -26,6 +26,9 @@
extern zend_module_entry recode_module_entry;
#define phpext_recode_ptr &recode_module_entry
+#include "php_version.h"
+#define PHP_RECODE_VERSION PHP_VERSION
+
PHP_MINIT_FUNCTION(recode);
PHP_MSHUTDOWN_FUNCTION(recode);
PHP_MINFO_FUNCTION(recode);
@@ -35,5 +38,5 @@ PHP_FUNCTION(recode_file);
#else
#define phpext_recode_ptr NULL
#endif
-
+
#endif /* PHP_RECODE_H */
diff --git a/ext/recode/recode.c b/ext/recode/recode.c
index 7d141e7928..8db0435105 100644
--- a/ext/recode/recode.c
+++ b/ext/recode/recode.c
@@ -1,6 +1,6 @@
/*
+----------------------------------------------------------------------+
- | PHP Version 5 |
+ | PHP Version 7 |
+----------------------------------------------------------------------+
| Copyright (c) 1997-2016 The PHP Group |
+----------------------------------------------------------------------+
@@ -15,7 +15,7 @@
| Author: Kristian Koehntopp <kris@koehntopp.de> |
+----------------------------------------------------------------------+
*/
-
+
/* $Id$ */
/* {{{ includes & prototypes */
@@ -62,7 +62,7 @@ ZEND_END_MODULE_GLOBALS(recode)
#else
# define ReSG(v) (recode_globals.v)
#endif
-
+
ZEND_DECLARE_MODULE_GLOBALS(recode)
static PHP_GINIT_FUNCTION(recode);
@@ -85,18 +85,18 @@ static const zend_function_entry php_recode_functions[] = {
PHP_FE(recode_file, arginfo_recode_file)
PHP_FALIAS(recode, recode_string, arginfo_recode_string)
PHP_FE_END
-};
+}; /* }}} */
zend_module_entry recode_module_entry = {
STANDARD_MODULE_HEADER,
- "recode",
- php_recode_functions,
- PHP_MINIT(recode),
- PHP_MSHUTDOWN(recode),
+ "recode",
+ php_recode_functions,
+ PHP_MINIT(recode),
+ PHP_MSHUTDOWN(recode),
+ NULL,
NULL,
- NULL,
- PHP_MINFO(recode),
- NO_VERSION_YET,
+ PHP_MINFO(recode),
+ PHP_RECODE_VERSION,
PHP_MODULE_GLOBALS(recode),
PHP_GINIT(recode),
NULL,
@@ -146,32 +146,32 @@ PHP_FUNCTION(recode_string)
RECODE_REQUEST request = NULL;
char *r = NULL;
size_t r_len = 0, r_alen = 0;
- int req_len, str_len;
+ size_t req_len, str_len;
char *req, *str;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &req, &req_len, &str, &str_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &req, &req_len, &str, &str_len) == FAILURE) {
return;
}
request = recode_new_request(ReSG(outer));
if (request == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure");
+ php_error_docref(NULL, E_WARNING, "Cannot allocate request structure");
RETURN_FALSE;
}
if (!recode_scan_request(request, req)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", req);
+ php_error_docref(NULL, E_WARNING, "Illegal recode request '%s'", req);
goto error_exit;
}
-
+
recode_buffer_to_buffer(request, str, str_len, &r, &r_len, &r_alen);
if (!r) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed.");
+ php_error_docref(NULL, E_WARNING, "Recoding failed.");
error_exit:
RETVAL_FALSE;
} else {
- RETVAL_STRINGL(r, r_len, 1);
+ RETVAL_STRINGL(r, r_len);
free(r);
}
@@ -187,39 +187,39 @@ PHP_FUNCTION(recode_file)
{
RECODE_REQUEST request = NULL;
char *req;
- int req_len;
+ size_t req_len;
zval *input, *output;
php_stream *instream, *outstream;
FILE *in_fp, *out_fp;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "srr", &req, &req_len, &input, &output) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS(), "srr", &req, &req_len, &input, &output) == FAILURE) {
return;
}
- php_stream_from_zval(instream, &input);
- php_stream_from_zval(outstream, &output);
+ php_stream_from_zval(instream, input);
+ php_stream_from_zval(outstream, output);
if (FAILURE == php_stream_cast(instream, PHP_STREAM_AS_STDIO, (void**)&in_fp, REPORT_ERRORS)) {
RETURN_FALSE;
}
-
+
if (FAILURE == php_stream_cast(outstream, PHP_STREAM_AS_STDIO, (void**)&out_fp, REPORT_ERRORS)) {
RETURN_FALSE;
}
request = recode_new_request(ReSG(outer));
if (request == NULL) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot allocate request structure");
+ php_error_docref(NULL, E_WARNING, "Cannot allocate request structure");
RETURN_FALSE;
}
if (!recode_scan_request(request, req)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Illegal recode request '%s'", req);
+ php_error_docref(NULL, E_WARNING, "Illegal recode request '%s'", req);
goto error_exit;
}
-
+
if (!recode_file_to_file(request, in_fp, out_fp)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Recoding failed.");
+ php_error_docref(NULL, E_WARNING, "Recoding failed.");
goto error_exit;
}
diff --git a/ext/recode/tests/001.phpt b/ext/recode/tests/001.phpt
new file mode 100644
index 0000000000..c03b44a811
--- /dev/null
+++ b/ext/recode/tests/001.phpt
@@ -0,0 +1,38 @@
+--TEST--
+recode_string() function - Testing string conversions between latin1, UTF-8 and html
+--SKIPIF--
+<?php if (!extension_loaded("recode")) print "skip"; ?>
+--FILE--
+<?php
+function ascii2hex($ascii) {
+ $hex = '';
+ for ($i = 0; $i < strlen($ascii); $i++) {
+ $byte = dechex(ord($ascii{$i}));
+ $byte = str_repeat('0', 2 - strlen($byte)).$byte;
+ $hex .= $byte . " ";
+ }
+ return $hex;
+}
+
+function hex2ascii($hex){
+ $ascii='';
+ $hex=str_replace(" ", "", $hex);
+ for($i=0; $i<strlen($hex); $i=$i+2) {
+ $ascii .= chr(hexdec(substr($hex, $i, 2)));
+ }
+ return($ascii);
+}
+
+$lat1_hex_org = '31 32 33 e5 e4 f6 61 62 63';
+$utf8_hex = ascii2hex(recode_string('lat1..utf-8', hex2ascii($lat1_hex_org)));
+$html = recode_string('utf-8..html', hex2ascii($utf8_hex));
+$lat1_hex = ascii2hex(recode_string('html..lat1', $html));
+
+echo "#" . $utf8_hex . "#\n";
+echo "#" . $html . "#\n";
+echo "#" . $lat1_hex . "#\n";
+?>
+--EXPECT--
+#31 32 33 c3 a5 c3 a4 c3 b6 61 62 63 #
+#123&aring;&auml;&ouml;abc#
+#31 32 33 e5 e4 f6 61 62 63 # \ No newline at end of file
diff --git a/ext/recode/tests/002.phpt b/ext/recode/tests/002.phpt
new file mode 100644
index 0000000000..fb9f286422
--- /dev/null
+++ b/ext/recode/tests/002.phpt
@@ -0,0 +1,32 @@
+--TEST--
+recode_string() function - Testing string conversions between latin1, UTF-8 and html
+--SKIPIF--
+<?php if (!extension_loaded("recode")) print "skip"; ?>
+--FILE--
+<?php
+function ascii2hex($ascii) {
+ $hex = '';
+ for ($i = 0; $i < strlen($ascii); $i++) {
+ $byte = dechex(ord($ascii{$i}));
+ $byte = str_repeat('0', 2 - strlen($byte)).$byte;
+ $hex .= $byte . " ";
+ }
+ return $hex;
+}
+
+$html_file = fopen(realpath(dirname(__FILE__)) . '/html.raw', 'r');
+$utf_8_filepath = realpath(dirname(__FILE__)) . '/utf8.raw';
+$utf_8_file = fopen($utf_8_filepath, 'w+');
+
+recode_file('html..utf8', $html_file, $utf_8_file);
+
+rewind($utf_8_file);
+echo '#' . ascii2hex(fread($utf_8_file, filesize($utf_8_filepath))) . "#\n";
+
+fclose($html_file);
+fclose($utf_8_file);
+
+unlink($utf_8_filepath);
+?>
+--EXPECT--
+#31 32 33 c3 a5 c3 a4 c3 b6 61 62 63 #
diff --git a/ext/recode/tests/html.raw b/ext/recode/tests/html.raw
new file mode 100644
index 0000000000..64ecf1331f
--- /dev/null
+++ b/ext/recode/tests/html.raw
@@ -0,0 +1 @@
+123&aring;&auml;&ouml;abc \ No newline at end of file