RPA Toolkit
modified the returned error.
authorMartin Stoilov <martin@rpasearch.com>
Wed, 22 Jun 2011 04:39:42 +0000 (21:39 -0700)
committerMartin Stoilov <martin@rpasearch.com>
Wed, 22 Jun 2011 04:39:42 +0000 (21:39 -0700)
phpext/prpa/prpa.c
phpext/prpa/tests/009.phpt
phpext/prpa/tests/010.phpt
phpext/prpa/tests/011.phpt
phpext/prpa/tests/012.phpt

index d752c1a..69dd949 100644 (file)
@@ -432,79 +432,81 @@ static rchar *statmsg[] = {
 };
 
 
-static void rpa_dbex_geterrorstr(rpadbex_t *dbex, char *buffer, size_t size)
+static zval *rpa_zvalerror(rpa_errinfo_t *errorinfo)
 {
        long n = 0;
+       char buffer[1000];
        char *ptr = buffer;
-       rpa_errinfo_t errorinfo;
-
-       memset(&errorinfo, 0, sizeof(errorinfo));
-    rpa_dbex_lasterrorinfo(dbex, &errorinfo);
-    if (!errorinfo.code)
-       return;
-    if (errorinfo.mask & RPA_ERRINFO_CODE) {
-       if (errorinfo.code >= 1000 && errorinfo.code < 1010)
-               n += snprintf(ptr + n, size - n, "%s Code: %ld. ", dbexmsg[errorinfo.code - 1000], errorinfo.code);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_LINE) {
-        n += snprintf(ptr + n, size - n, "Line: %ld. ", errorinfo.line);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_OFFSET) {
-        n += snprintf(ptr + n, size - n, "Offset: %ld. ", errorinfo.offset);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_RULEID) {
-        n += snprintf(ptr + n, size - n, "RuleId: %ld. ", errorinfo.ruleid);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_NAME) {
-        n += snprintf(ptr + n, size - n, "Name: %s. ", errorinfo.name);
-    }
+       size_t size = sizeof(buffer) - 1;
+       zval *zerror = NULL;
 
+       memset(buffer, 0, sizeof(buffer));
+       ALLOC_INIT_ZVAL(zerror);
+       array_init(zerror);
+    if (errorinfo->mask & RPA_ERRINFO_CODE) {
+       if (errorinfo->code >= 1000 && errorinfo->code < 1010)
+               n += snprintf(ptr + n, size - n, "%s Code: %ld. ", dbexmsg[errorinfo->code - 1000], errorinfo->code);
+       else if (errorinfo->code >= 2000 && errorinfo->code < 2010)
+               n += snprintf(ptr + n, size - n, "%s Code: %ld. ", statmsg[errorinfo->code - 2000], errorinfo->code);
+       else
+               n += snprintf(ptr + n, size - n, "Error Code: %ld. ", errorinfo->code);
+       add_assoc_long(zerror, "code", errorinfo->code);
+    }
+    if (errorinfo->mask & RPA_ERRINFO_LINE) {
+        n += snprintf(ptr + n, size - n, "Line: %ld. ", errorinfo->line);
+       add_assoc_long(zerror, "line", errorinfo->line);
+    }
+    if (errorinfo->mask & RPA_ERRINFO_OFFSET) {
+        n += snprintf(ptr + n, size - n, "Offset: %ld. ", errorinfo->offset);
+       add_assoc_long(zerror, "offset", errorinfo->offset);
+    }
+    if (errorinfo->mask & RPA_ERRINFO_RULEID) {
+        n += snprintf(ptr + n, size - n, "RuleId: %ld. ", errorinfo->ruleid);
+       add_assoc_long(zerror, "rid", errorinfo->ruleid);
+    }
+    if (errorinfo->mask & RPA_ERRINFO_NAME) {
+        n += snprintf(ptr + n, size - n, "Name: %s. ", errorinfo->name);
+       add_assoc_string(zerror, "name", errorinfo->name, 1);
+    }
+       add_assoc_stringl(zerror, "message", buffer, n, 1);
+    return zerror;
 }
 
 
 PHP_FUNCTION(rpa_dbex_error)
 {
        zval *zres;
-       char buffer[1000];
     php_rpa_dbex *phpdbex;
+    zval *zerror = NULL;
+    rpa_errinfo_t errorinfo;
 
-       memset(buffer, 0, sizeof(buffer));
+       memset(&errorinfo, 0, sizeof(errorinfo));
     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres) == FAILURE) {
                RETURN_LONG(-1);
     }
     ZEND_FETCH_RESOURCE(phpdbex, php_rpa_dbex*, &zres, -1, PHP_RPA_DBEX_RES_NAME, le_rpa_dbex);
-    rpa_dbex_geterrorstr(phpdbex->dbex, buffer, sizeof(buffer) - 1);
-       RETURN_STRING(buffer, 1);
+    rpa_dbex_lasterrorinfo(phpdbex->dbex, &errorinfo);
+    zerror = rpa_zvalerror(&errorinfo);
+       RETURN_ZVAL(zerror, 1, 0);
 }
 
 
-static void rpa_stat_geterrorstr(rpastat_t *stat, char *buffer, size_t size)
+PHP_FUNCTION(rpa_stat_error)
 {
-       long n = 0;
-       char *ptr = buffer;
-       rpa_errinfo_t errorinfo;
+       zval *zres;
+       char buffer[1000];
+    php_rpa_stat *phpstat;
+    zval *zerror = NULL;
+    rpa_errinfo_t errorinfo;
 
        memset(&errorinfo, 0, sizeof(errorinfo));
-    rpa_stat_lasterrorinfo(stat, &errorinfo);
-    if (!errorinfo.code)
-       return;
-    if (errorinfo.mask & RPA_ERRINFO_CODE) {
-       if (errorinfo.code >= 2000 && errorinfo.code < 2010)
-               n += snprintf(ptr + n, size - n, "%s Code: %ld. ", statmsg[errorinfo.code - 2000], errorinfo.code);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_LINE) {
-        n += snprintf(ptr + n, size - n, "Line: %ld. ", errorinfo.line);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_OFFSET) {
-        n += snprintf(ptr + n, size - n, "Offset: %ld. ", errorinfo.offset);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_RULEID) {
-        n += snprintf(ptr + n, size - n, "RuleId: %ld. ", errorinfo.ruleid);
-    }
-    if (errorinfo.mask & RPA_ERRINFO_NAME) {
-        n += snprintf(ptr + n, size - n, "Name: %s. ", errorinfo.name);
+    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres) == FAILURE) {
+               RETURN_LONG(-1);
     }
-
+    ZEND_FETCH_RESOURCE(phpstat, php_rpa_stat*, &zres, -1, PHP_RPA_STAT_RES_NAME, le_rpa_stat);
+    rpa_stat_lasterrorinfo(phpstat->stat, &errorinfo);
+    zerror = rpa_zvalerror(&errorinfo);
+       RETURN_ZVAL(zerror, 1, 0);
 }
 
 
@@ -529,21 +531,6 @@ static void rpa_records2array(const rchar *input, rarray_t *records, zval *zreco
        }
 }
 
-PHP_FUNCTION(rpa_stat_error)
-{
-       zval *zres;
-       char buffer[1000];
-    php_rpa_stat *phpstat;
-
-       memset(buffer, 0, sizeof(buffer));
-    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres) == FAILURE) {
-               RETURN_LONG(-1);
-    }
-    ZEND_FETCH_RESOURCE(phpstat, php_rpa_stat*, &zres, -1, PHP_RPA_STAT_RES_NAME, le_rpa_stat);
-    rpa_stat_geterrorstr(phpstat->stat, buffer, sizeof(buffer) - 1);
-       RETURN_STRING(buffer, 1);
-}
-
 
 PHP_FUNCTION(rpa_stat_create)
 {
@@ -641,7 +628,6 @@ PHP_FUNCTION(rpa_stat_parse)
 
 PHP_FUNCTION(rpaparse)
 {
-       char buffer[1000];
        rpadbex_t *dbex = NULL;
        rpastat_t *stat = NULL;
        long rid;
@@ -658,7 +644,6 @@ PHP_FUNCTION(rpaparse)
     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sls|zz", &bnf, &bnf_len, &encoding, &input, &input_len, &zrecords, &zerror) == FAILURE) {
                RETURN_LONG(-1);
     }
-    memset(buffer, 0, sizeof(buffer));
     dbex = rpa_dbex_create();
     if (rpa_dbex_open(dbex) < 0)
        goto dbexerror;
@@ -685,8 +670,11 @@ PHP_FUNCTION(rpaparse)
 
 dbexerror:
        if (zerror) {
-               rpa_dbex_geterrorstr(dbex, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_dbex_lasterrorinfo(dbex, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
 //     if (zrecords)
 //             ZVAL_NULL(zrecords);
@@ -697,8 +685,11 @@ dbexerror:
 
 staterror:
        if (zerror) {
-               rpa_stat_geterrorstr(stat, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_stat_lasterrorinfo(stat, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
 //     if (zrecords)
 //             ZVAL_NULL(zrecords);
@@ -711,7 +702,6 @@ staterror:
 
 PHP_FUNCTION(rpascan)
 {
-       char buffer[1000];
        rpadbex_t *dbex = NULL;
        rpastat_t *stat = NULL;
        long rid;
@@ -728,7 +718,6 @@ PHP_FUNCTION(rpascan)
     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sls|zz", &bnf, &bnf_len, &encoding, &input, &input_len, &zwhere, &zerror) == FAILURE) {
                RETURN_LONG(-1);
     }
-    memset(buffer, 0, sizeof(buffer));
     dbex = rpa_dbex_create();
     if (rpa_dbex_open(dbex) < 0)
        goto dbexerror;
@@ -757,8 +746,11 @@ PHP_FUNCTION(rpascan)
 
 dbexerror:
        if (zerror) {
-               rpa_dbex_geterrorstr(dbex, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_dbex_lasterrorinfo(dbex, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
        rpa_stat_destroy(stat);
        rpa_dbex_destroy(dbex);
@@ -766,19 +758,20 @@ dbexerror:
 
 staterror:
        if (zerror) {
-               rpa_stat_geterrorstr(stat, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_stat_lasterrorinfo(stat, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
        rpa_stat_destroy(stat);
        rpa_dbex_destroy(dbex);
        RETURN_LONG(-1);
-
 }
 
 
 PHP_FUNCTION(rpamatch)
 {
-       char buffer[1000];
        rpadbex_t *dbex = NULL;
        rpastat_t *stat = NULL;
        long rid;
@@ -793,7 +786,6 @@ PHP_FUNCTION(rpamatch)
     if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sls|z", &bnf, &bnf_len, &encoding, &input, &input_len, &zerror) == FAILURE) {
                RETURN_LONG(-1);
     }
-    memset(buffer, 0, sizeof(buffer));
     dbex = rpa_dbex_create();
     if (rpa_dbex_open(dbex) < 0)
        goto dbexerror;
@@ -815,8 +807,11 @@ PHP_FUNCTION(rpamatch)
 
 dbexerror:
        if (zerror) {
-               rpa_dbex_geterrorstr(dbex, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_dbex_lasterrorinfo(dbex, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
        rpa_stat_destroy(stat);
        rpa_dbex_destroy(dbex);
@@ -824,12 +819,14 @@ dbexerror:
 
 staterror:
        if (zerror) {
-               rpa_stat_geterrorstr(stat, buffer, sizeof(buffer) - 1);
-               ZVAL_STRING(zerror, buffer, 1);
+               rpa_errinfo_t errorinfo;
+               memset(&errorinfo, 0, sizeof(errorinfo));
+               rpa_stat_lasterrorinfo(stat, &errorinfo);
+               zval *temp = rpa_zvalerror(&errorinfo);
+               ZVAL_ZVAL(zerror, temp, 0, 1);
        }
        rpa_stat_destroy(stat);
        rpa_dbex_destroy(dbex);
        RETURN_LONG(-1);
-
 }
 
index 6db0b65..1896c6e 100644 (file)
@@ -16,12 +16,14 @@ rpa_dbex_parse($hDbex, $pattern, $myname)
        "name ::= <first> ' '+ <last>\n";
        if (rpa_dbex_load($hDbex, $bnf) < 0) {
                echo("rpa_dbex_load failed.\n");
-               echo(rpa_dbex_error($hDbex) . "\n");
+               $error = rpa_dbex_error($hDbex);
+               die($error['message'] . "LINE: " . $error['line'] . "\n");
        }
        
        rpa_dbex_close($hDbex);
        if (rpa_dbex_compile($hDbex) < 0) {
-               die(rpa_dbex_error($hDbex). "\n");      
+               $error = rpa_dbex_error($hDbex);
+               die($error['message'] . "LINE: " . $error['line'] . "\n");      
        }
        $pattern = rpa_dbex_lookup($hDbex, "name");
        if ($pattern == -1) {
index bd3a2e0..570c3eb 100644 (file)
@@ -14,8 +14,12 @@ rpaparse($bnf, $input, $records, $error);
        "name ::= <first> ' '+ <last>\n";
        $myname = "John Smith"; 
        $ret = rpaparse($bnf, RPA_ENCODING_ICASE_UTF8, $myname, $records, $error);
-       if ($ret < 0)
-               die($error . "\n");
+       if ($ret < 0) {
+               if (is_array($error)) 
+                       die($error['message'] . "\n");
+               else
+                       die("praparse error.\n");
+       }
        $matched = "matched: " . substr($myname, 0, $ret) . "\n";
        echo($matched);
        
index 5ebfba0..2780b57 100644 (file)
@@ -14,7 +14,7 @@ rpascan($bnf, $input, $where, $error);
        "name ::= <first> ' '+ <last>\n";
        $myname = "     : John Smith";  
        if (($ret = rpascan($bnf, RPA_ENCODING_ICASE_UTF8, $myname, $where, $error)) < 0)
-               die($error . "\n");
+               die($error['message'] . "\n");
        echo("matched: " . substr($myname, $where, $ret) . " @ " . $where . "\n");
 ?>
 --EXPECT--
index 7e515e0..a04bc35 100644 (file)
@@ -12,8 +12,8 @@ rpamatch($bnf, $input, $error);
        "last ::= [a-z]+\n" .
        "name ::= <first> ' '+ <last>\n";
        $myname = "John Smith"; 
-       if (($ret = rpascan($bnf, RPA_ENCODING_ICASE_UTF8, $myname, $error)) < 0)
-               die($error . "\n");
+       if (($ret = rpamatch($bnf, RPA_ENCODING_ICASE_UTF8, $myname, $error)) < 0)
+               die($error['message'] . "\n");
        echo("matched: " . substr($myname, 0, $ret) . "\n");
 ?>
 --EXPECT--