andrei Tue Dec 12 18:17:57 2006 UTC
Modified files:
/php-src/ext/standard string.c
Log:
Make hebrev(c) support only binary strings.
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/string.c?r1=1.620&r2=1.621&diff_format=u
Index: php-src/ext/standard/string.c
diff -u php-src/ext/standard/string.c:1.620 php-src/ext/standard/string.c:1.621
--- php-src/ext/standard/string.c:1.620 Wed Dec 6 23:14:15 2006
+++ php-src/ext/standard/string.c Tue Dec 12 18:17:56 2006
@@ -18,7 +18,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: string.c,v 1.620 2006/12/06 23:14:15 pollita Exp $ */
+/* $Id: string.c,v 1.621 2006/12/12 18:17:56 andrei Exp $ */
/* Synced with php 3.0 revision 1.193 1999-06-16 [ssb] */
@@ -5659,42 +5659,27 @@
*/
static void php_hebrev(INTERNAL_FUNCTION_PARAMETERS, int convert_newlines)
{
- zval **str, **max_chars_per_line;
+ char *str;
+ int str_len;
char *heb_str, *tmp, *target, *broken_str;
int block_start, block_end, block_type, block_length, i;
long max_chars=0;
int begin, end, char_count, orig_begin;
- switch (ZEND_NUM_ARGS()) {
- case 1:
- if (zend_get_parameters_ex(1, &str) == FAILURE) {
- RETURN_FALSE;
- }
- break;
- case 2:
- if (zend_get_parameters_ex(2, &str,
&max_chars_per_line) == FAILURE) {
- RETURN_FALSE;
- }
- convert_to_long_ex(max_chars_per_line);
- max_chars = Z_LVAL_PP(max_chars_per_line);
- break;
- default:
- WRONG_PARAM_COUNT;
- break;
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|l", &str,
&str_len, &max_chars) == FAILURE) {
+ return;
}
-
- convert_to_string_ex(str);
-
- if (Z_STRLEN_PP(str) == 0) {
+
+ if (str_len == 0) {
RETURN_FALSE;
}
- tmp = Z_STRVAL_PP(str);
+ tmp = str;
block_start=block_end=0;
- heb_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- target = heb_str+Z_STRLEN_PP(str);
+ heb_str = (char *) emalloc(str_len+1);
+ target = heb_str+str_len;
*target = 0;
target--;
@@ -5708,13 +5693,13 @@
do {
if (block_type == _HEB_BLOCK_TYPE_HEB) {
- while ((isheb((int)*(tmp+1)) || _isblank((int)*(tmp+1))
|| ispunct((int)*(tmp+1)) || (int)*(tmp+1)=='\n' ) &&
block_end<Z_STRLEN_PP(str)-1) {
+ while ((isheb((int)*(tmp+1)) || _isblank((int)*(tmp+1))
|| ispunct((int)*(tmp+1)) || (int)*(tmp+1)=='\n' ) && block_end<str_len-1) {
tmp++;
block_end++;
block_length++;
}
for (i = block_start; i<= block_end; i++) {
- *target = Z_STRVAL_PP(str)[i];
+ *target = str[i];
switch (*target) {
case '(':
*target = ')';
@@ -5753,7 +5738,7 @@
}
block_type = _HEB_BLOCK_TYPE_ENG;
} else {
- while (!isheb(*(tmp+1)) && (int)*(tmp+1)!='\n' &&
block_end < Z_STRLEN_PP(str)-1) {
+ while (!isheb(*(tmp+1)) && (int)*(tmp+1)!='\n' &&
block_end < str_len-1) {
tmp++;
block_end++;
block_length++;
@@ -5763,17 +5748,17 @@
block_end--;
}
for (i = block_end; i >= block_start; i--) {
- *target = Z_STRVAL_PP(str)[i];
+ *target = str[i];
target--;
}
block_type = _HEB_BLOCK_TYPE_HEB;
}
block_start=block_end+1;
- } while (block_end < Z_STRLEN_PP(str)-1);
+ } while (block_end < str_len-1);
- broken_str = (char *) emalloc(Z_STRLEN_PP(str)+1);
- begin=end=Z_STRLEN_PP(str)-1;
+ broken_str = (char *) emalloc(str_len+1);
+ begin=end=str_len-1;
target = broken_str;
while (1) {
@@ -5832,17 +5817,17 @@
efree(heb_str);
if (convert_newlines) {
- php_char_to_str(broken_str, Z_STRLEN_PP(str),'\n', "<br />\n",
7, return_value);
+ php_char_to_str(broken_str, str_len,'\n', "<br />\n", 7,
return_value);
efree(broken_str);
} else {
Z_STRVAL_P(return_value) = broken_str;
- Z_STRLEN_P(return_value) = Z_STRLEN_PP(str);
+ Z_STRLEN_P(return_value) = str_len;
Z_TYPE_P(return_value) = IS_STRING;
}
}
/* }}} */
-/* {{{ proto string hebrev(string str [, int max_chars_per_line])
+/* {{{ proto string hebrev(string str [, int max_chars_per_line]) U
Converts logical Hebrew text to visual text */
PHP_FUNCTION(hebrev)
{
@@ -5850,7 +5835,7 @@
}
/* }}} */
-/* {{{ proto string hebrevc(string str [, int max_chars_per_line])
+/* {{{ proto string hebrevc(string str [, int max_chars_per_line]) U
Converts logical Hebrew text to visual text with newline conversion */
PHP_FUNCTION(hebrevc)
{
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php