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