scottmac Thu, 13 Jan 2011 07:46:59 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=307433
Log:
intl: Add Spoofchecker cloning, fix typo in prototype, rename some variables
and tidy syntax.
Changed paths:
U php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_class.c
U php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_create.c
U php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_main.c
Modified: php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_class.c
===================================================================
--- php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_class.c
2011-01-13 07:27:46 UTC (rev 307432)
+++ php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_class.c
2011-01-13 07:46:59 UTC (rev 307433)
@@ -117,6 +117,31 @@
};
/* }}} */
+static zend_object_value spoofchecker_clone_obj(zval *object TSRMLS_DC) /* {{{
*/
+{
+ zend_object_value new_obj_val;
+ zend_object_handle handle = Z_OBJ_HANDLE_P(object);
+ Spoofchecker_object *sfo, *new_sfo;
+
+ sfo = (Spoofchecker_object *) zend_object_store_get_object(object
TSRMLS_CC);
+ intl_error_reset(SPOOFCHECKER_ERROR_P(sfo) TSRMLS_CC);
+
+ new_obj_val = Spoofchecker_ce_ptr->create_object(Spoofchecker_ce_ptr
TSRMLS_CC);
+ new_sfo = (Spoofchecker_object
*)zend_object_store_get_object_by_handle(new_obj_val.handle TSRMLS_CC);
+ /* clone standard parts */
+ zend_objects_clone_members(&new_sfo->zo, new_obj_val, &sfo->zo, handle
TSRMLS_CC);
+ /* clone internal object */
+ new_sfo->uspoof = uspoof_clone(sfo->uspoof,
SPOOFCHECKER_ERROR_CODE_P(new_sfo));
+ if(U_FAILURE(SPOOFCHECKER_ERROR_CODE(new_sfo))) {
+ /* set up error in case error handler is interested */
+ intl_error_set( NULL, SPOOFCHECKER_ERROR_CODE(new_sfo), "Failed
to clone SpoofChecker object", 0 TSRMLS_CC );
+ Spoofchecker_objects_dtor(new_sfo, new_obj_val.handle
TSRMLS_CC); /* free new object */
+ zend_error(E_ERROR, "Failed to clone SpoofChecker object");
+ }
+ return new_obj_val;
+}
+/* }}} */
+
/* {{{ spoofchecker_register_Spoofchecker_class
* Initialize 'Spoofchecker' class
*/
@@ -131,8 +156,7 @@
memcpy(&Spoofchecker_handlers, zend_get_std_object_handlers(),
sizeof Spoofchecker_handlers);
- /* Doesn't make sense to clone */
- Spoofchecker_handlers.clone_obj = NULL;
+ Spoofchecker_handlers.clone_obj = spoofchecker_clone_obj;
if (!Spoofchecker_ce_ptr) {
zend_error(E_ERROR,
Modified: php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_create.c
===================================================================
--- php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_create.c
2011-01-13 07:27:46 UTC (rev 307432)
+++ php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_create.c
2011-01-13 07:46:59 UTC (rev 307433)
@@ -29,13 +29,13 @@
PHP_METHOD(Spoofchecker, __construct)
{
int checks;
- SPOOFCHECKER_METHOD_INIT_VARS
+ SPOOFCHECKER_METHOD_INIT_VARS;
if (zend_parse_parameters_none() == FAILURE) {
return;
}
- SPOOFCHECKER_METHOD_FETCH_OBJECT
+ SPOOFCHECKER_METHOD_FETCH_OBJECT;
co->uspoof = uspoof_open(SPOOFCHECKER_ERROR_CODE_P(co));
INTL_CTOR_CHECK_STATUS(co, "spoofchecker: unable to open ICU Spoof
Checker");
Modified: php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_main.c
===================================================================
--- php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_main.c 2011-01-13
07:27:46 UTC (rev 307432)
+++ php/php-src/trunk/ext/intl/spoofchecker/spoofchecker_main.c 2011-01-13
07:46:59 UTC (rev 307433)
@@ -21,7 +21,7 @@
#include "php_intl.h"
#include "spoofchecker_class.h"
-/* {{{ proto void Spoofchecker::isSuspicious( string $text[, int $error_code ]
)
+/* {{{ proto bool Spoofchecker::isSuspicious( string $text[, int $error_code ]
)
* Checks if a given text contains any suspicious characters
*/
PHP_METHOD(Spoofchecker, isSuspicious)
@@ -29,14 +29,14 @@
int ret;
char *text;
int text_len;
- zval *issued_found = NULL;
- SPOOFCHECKER_METHOD_INIT_VARS
+ zval *error_code = NULL;
+ SPOOFCHECKER_METHOD_INIT_VARS;
- if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z",
&text, &text_len, &issued_found)) {
+ if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z",
&text, &text_len, &error_code)) {
return;
}
- SPOOFCHECKER_METHOD_FETCH_OBJECT
+ SPOOFCHECKER_METHOD_FETCH_OBJECT;
ret = uspoof_checkUTF8(co->uspoof, text, text_len, NULL,
SPOOFCHECKER_ERROR_CODE_P(co));
@@ -45,15 +45,15 @@
return;
}
- if (issued_found) {
- zval_dtor(issued_found);
- ZVAL_LONG(issued_found, ret);
+ if (error_code) {
+ zval_dtor(error_code);
+ ZVAL_LONG(error_code, ret);
}
RETVAL_BOOL(ret != 0);
}
/* }}} */
-/* {{{ proto void Spoofchecker::areConfusable( string $str1, string $str2[,
int $error_code ] )
+/* {{{ proto bool Spoofchecker::areConfusable( string $str1, string $str2[,
int $error_code ] )
* Checks if a given text contains any confusable characters
*/
PHP_METHOD(Spoofchecker, areConfusable)
@@ -61,15 +61,15 @@
int ret;
char *s1, *s2;
int s1_len, s2_len;
- zval *issued_found = NULL;
- SPOOFCHECKER_METHOD_INIT_VARS
+ zval *error_code = NULL;
+ SPOOFCHECKER_METHOD_INIT_VARS;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|z",
&s1, &s1_len,
-
&s2, &s2_len, &issued_found)) {
+
&s2, &s2_len, &error_code)) {
return;
}
- SPOOFCHECKER_METHOD_FETCH_OBJECT
+ SPOOFCHECKER_METHOD_FETCH_OBJECT;
ret = uspoof_areConfusableUTF8(co->uspoof, s1, s1_len, s2, s2_len,
SPOOFCHECKER_ERROR_CODE_P(co));
@@ -78,9 +78,9 @@
return;
}
- if (issued_found) {
- zval_dtor(issued_found);
- ZVAL_LONG(issued_found, ret);
+ if (error_code) {
+ zval_dtor(error_code);
+ ZVAL_LONG(error_code, ret);
}
RETVAL_BOOL(ret != 0);
}
@@ -94,13 +94,13 @@
int ret;
char *locales;
int locales_len;
- SPOOFCHECKER_METHOD_INIT_VARS
+ SPOOFCHECKER_METHOD_INIT_VARS;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s",
&locales, &locales_len)) {
return;
}
- SPOOFCHECKER_METHOD_FETCH_OBJECT
+ SPOOFCHECKER_METHOD_FETCH_OBJECT;
uspoof_setAllowedLocales(co->uspoof, locales,
SPOOFCHECKER_ERROR_CODE_P(co));
@@ -118,13 +118,13 @@
{
int ret;
long checks;
- SPOOFCHECKER_METHOD_INIT_VARS
+ SPOOFCHECKER_METHOD_INIT_VARS;
if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l",
&checks)) {
return;
}
- SPOOFCHECKER_METHOD_FETCH_OBJECT
+ SPOOFCHECKER_METHOD_FETCH_OBJECT;
uspoof_setChecks(co->uspoof, checks, SPOOFCHECKER_ERROR_CODE_P(co));
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php