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

Reply via email to