]> granicus.if.org Git - php/commitdiff
intl: Add Spoofchecker cloning, fix typo in prototype, rename some variables and...
authorScott MacVicar <scottmac@php.net>
Thu, 13 Jan 2011 07:46:59 +0000 (07:46 +0000)
committerScott MacVicar <scottmac@php.net>
Thu, 13 Jan 2011 07:46:59 +0000 (07:46 +0000)
ext/intl/spoofchecker/spoofchecker_class.c
ext/intl/spoofchecker/spoofchecker_create.c
ext/intl/spoofchecker/spoofchecker_main.c

index 1b7b5573bdea281ae14a6f20758df8fa93a06322..3f00cdf15fe9d32e722d45117e494b2f5b3df6c1 100755 (executable)
@@ -117,6 +117,31 @@ zend_function_entry Spoofchecker_class_functions[] = {
 };
 /* }}} */
 
+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 @@ void spoofchecker_register_Spoofchecker_class(TSRMLS_D)
 
        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,
index 91c06ec55d8c6722a666d851a47e6e3e32e4f4bf..3659551ede64fcc6cc5b051d05c29a86119c49fa 100755 (executable)
 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");
index f6010a326f177ede395b93dc44606f0d266039d3..1db1b1a508355f9355448febc17c8364668eb066 100755 (executable)
@@ -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 @@ PHP_METHOD(Spoofchecker, isSuspicious)
        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 @@ PHP_METHOD(Spoofchecker, isSuspicious)
                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 @@ PHP_METHOD(Spoofchecker, areConfusable)
        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 @@ PHP_METHOD(Spoofchecker, areConfusable)
                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 @@ PHP_METHOD(Spoofchecker, setAllowedLocales)
        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 @@ PHP_METHOD(Spoofchecker, setChecks)
 {
        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));