};
/* }}} */
+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
*/
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,
#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)
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));
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)
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));
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);
}
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));
{
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));