andrei Wed Aug 9 20:03:22 2006 UTC
Modified files:
/php-src/ext/standard string.c
/php-src unicode-progress.txt
Log:
Upgrade str_rot13() to work with IS_UNICODE type.
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.570&r2=1.571&diff_format=u
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.570 php-src/ext/standard/string.c:1.571
--- php-src/ext/standard/string.c:1.570 Wed Aug 9 18:15:06 2006
+++ php-src/ext/standard/string.c Wed Aug 9 20:03:21 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: string.c,v 1.570 2006/08/09 18:15:06 fmk Exp $ */
+/* $Id: string.c,v 1.571 2006/08/09 20:03:21 andrei Exp $ */
/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
@@ -3741,7 +3741,9 @@
}
for (i = 0; i < len; i++) {
- tmp_str[i] = xlat[str[i]];
+ if (str[i] < 256) {
+ tmp_str[i] = xlat[str[i]];
+ }
}
*outlen = len;
@@ -3753,13 +3755,15 @@
HashTable *tmp_hash;
int minlen = 128*1024, maxlen;
zval *tmp;
+ UChar x[2] = { 0, };
tmp_hash = emalloc(sizeof(HashTable));
zend_hash_init(tmp_hash, 0, NULL, NULL, 0);
/* Loop over the two strings and prepare the hash entries */
MAKE_STD_ZVAL(tmp);
- ZVAL_UNICODEL(tmp, "X", 1, 1);
+ x[0] = (UChar) 0x58 /*'X'*/;
+ ZVAL_UNICODEL(tmp, x, 1, 1);
minlen = maxlen = 1;
zend_u_hash_add(tmp_hash, IS_UNICODE, ZSTR("a"), 2, &tmp,
sizeof(zval *), NULL);
@@ -6783,21 +6787,36 @@
static char rot13_from[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
static char rot13_to[] =
"nopqrstuvwxyzabcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLM";
+U_STRING_DECL(u_rot13_from, rot13_from, sizeof(rot13_from)-1);
+U_STRING_DECL(u_rot13_to, rot13_to, sizeof(rot13_to)-1);
-/* {{{ proto string str_rot13(string str)
+/* {{{ proto string str_rot13(string str) U
Perform the rot13 transform on a string */
PHP_FUNCTION(str_rot13)
{
- zval **arg;
+ static int did_init_strings = FALSE;
+ zstr str;
+ int str_len;
+ zend_uchar str_type;
- if (ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &arg)) {
- WRONG_PARAM_COUNT;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t", &str,
&str_len, &str_type) == FAILURE) {
+ return;
+ }
+
+ if (!did_init_strings) {
+ U_STRING_INIT(u_rot13_from, rot13_from, sizeof(rot13_from)-1);
+ U_STRING_INIT(u_rot13_to, rot13_to, sizeof(rot13_to)-1);
+ did_init_strings = TRUE;
}
- convert_to_string_ex(arg);
- RETVAL_ZVAL(*arg, 1, 0);
- php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value),
rot13_from, rot13_to, 52);
+ if (str_type == IS_UNICODE) {
+ RETVAL_UNICODEL(str.u, str_len, 0);
+ Z_USTRVAL_P(return_value) =
php_u_strtr(Z_USTRVAL_P(return_value), Z_USTRLEN_P(return_value), u_rot13_from,
52, u_rot13_to, 52, 52, &Z_USTRLEN_P(return_value));
+ } else {
+ RETVAL_STRINGL(str.s, str_len, 1);
+ php_strtr(Z_STRVAL_P(return_value), Z_STRLEN_P(return_value),
rot13_from, rot13_to, 52);
+ }
}
/* }}} */
http://cvs.php.net/viewvc.cgi/php-src/unicode-progress.txt?r1=1.39&r2=1.40&diff_format=u
Index: php-src/unicode-progress.txt
diff -u php-src/unicode-progress.txt:1.39 php-src/unicode-progress.txt:1.40
--- php-src/unicode-progress.txt:1.39 Wed Aug 9 17:40:21 2006
+++ php-src/unicode-progress.txt Wed Aug 9 20:03:22 2006
@@ -52,9 +52,6 @@
Params API, IS_UNICODE upgrade. Case-folding should be handled
similar to stristr().
- str_rot13()
- Params API, IS_UNICODE support
-
str_shuffle()
Params API, IS_UNICODE support
@@ -196,6 +193,7 @@
similar_text()
str_pad()
str_repeat()
+ str_rot13()
strcspn()
strip_tags()
stripcslashes()
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php