#define PHP_RPA_DBEX_RES_NAME "php rpa dbex"
-typedef struct _php_rpa_pattern {
- rlong hPattern;
-} php_rpa_pattern;
+typedef struct _php_rpa_stat {
+ rpastat_t* stat;
+ zval *zinput;
+#ifdef ZTS
+ TSRMLS_D;
+#endif
+} php_rpa_stat;
-#define PHP_RPA_PATTERN_RES_NAME "php rpa pattern"
+#define PHP_RPA_STAT_RES_NAME "php rpa stat"
-typedef struct _php_cbinfo {
- php_rpa_dbex *pPhpDbex;
- char *php_callback;
- zval *userdata;
-} php_cbinfo;
-
static int le_rpa;
static int le_rpa_dbex;
+static int le_rpa_stat;
static int le_rpa_pattern;
static void php_rpa_dbex_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_rpa_pattern_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
+static void php_rpa_stat_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
/* If you declare any globals in php_prpa.h uncomment this:
ZEND_DECLARE_MODULE_GLOBALS(prpa)
*/
zend_function_entry prpa_functions[] = {
PHP_FE(rpa_dbex_version, NULL)
-#if 0
- PHP_FE(rpa_dbex_strmatch, NULL)
PHP_FE(rpa_dbex_create, NULL)
- PHP_FE(rpa_dbex_load_string, NULL)
- PHP_FE(rpa_dbex_load, NULL)
PHP_FE(rpa_dbex_open, NULL)
PHP_FE(rpa_dbex_close, NULL)
+ PHP_FE(rpa_dbex_load, NULL)
+ PHP_FE(rpa_dbex_compile, NULL)
+
+#if 0
+ PHP_FE(rpa_dbex_strmatch, NULL)
PHP_FE(rpa_dbex_set_encoding, NULL)
PHP_FE(rpa_dbex_match, NULL)
PHP_FE(rpa_dbex_parse, NULL)
/* If you have INI entries, uncomment these lines
REGISTER_INI_ENTRIES();
*/
-// le_rpa_dbex = zend_register_list_destructors_ex(php_rpa_dbex_dtor, NULL, PHP_RPA_DBEX_RES_NAME, module_number);
-// le_rpa_pattern = zend_register_list_destructors_ex(php_rpa_pattern_dtor, NULL, PHP_RPA_PATTERN_RES_NAME, module_number);
+ le_rpa_dbex = zend_register_list_destructors_ex(php_rpa_dbex_dtor, NULL, PHP_RPA_DBEX_RES_NAME, module_number);
+ le_rpa_stat = zend_register_list_destructors_ex(php_rpa_stat_dtor, NULL, PHP_RPA_STAT_RES_NAME, module_number);
REGISTER_LONG_CONSTANT("RPA_ENCODING_BYTE", RPA_ENCODING_BYTE, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("RPA_ENCODING_UTF8", RPA_ENCODING_UTF8, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("RPA_ENCODING_ICASE_UTF8", RPA_ENCODING_ICASE_UTF8, CONST_CS | CONST_PERSISTENT);
RETURN_STRING(rpa_dbex_version(), 1);
}
-#if 0
-static php_cbinfo *php_cbinfo_create(php_rpa_dbex *pPhpDbex, const char *php_callback, zval *userdata)
-{
- php_cbinfo *pCbInfo;
-
- if ((pCbInfo = emalloc(sizeof(php_cbinfo))) == NULL)
- return NULL;
-
- pCbInfo->pPhpDbex = pPhpDbex;
- pCbInfo->php_callback = estrdup(php_callback);
- pCbInfo->userdata = userdata;
- if (userdata) {
- ZVAL_ADDREF(userdata);
-// Z_SET_ISREF_P(userdata);
- }
- return pCbInfo;
-}
-
-
-static void php_cbinfo_destroy(php_cbinfo *pCbInfo)
-{
- if (!pCbInfo)
- return;
- if (pCbInfo->php_callback)
- efree(pCbInfo->php_callback);
- if (pCbInfo->userdata) {
- if (ZVAL_REFCOUNT(pCbInfo->userdata) == 1) {
- zval_ptr_dtor(&pCbInfo->userdata);
- } else {
- ZVAL_DELREF(pCbInfo->userdata);
- }
- }
- efree(pCbInfo);
-}
-
-
-static void php_do_rpa_dbex_strmatch(INTERNAL_FUNCTION_PARAMETERS, int global) /* {{{ */
-{
- /* parameters */
- char *subject; /* String to match against */
- char *regex; /* Regular expression */
- int subject_len;
- int regex_len;
- int ret = 0;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &subject,
- &subject_len,
- ®ex,
- ®ex_len) == FAILURE) {
- RETURN_LONG(-1);
- }
-/*
- ret = emalloc(subject_len + regex_len + 100);
- php_sprintf(ret, "Hello from rpalib, subject: %s, regex: %s", subject, regex);
- RETURN_STRING(ret, 0);
-*/
- ret = rpa_dbex_strmatch(subject, regex);
- RETURN_LONG(ret);
-}
-
-/* {{{ proto int rpa_dbex_strmatch(string subject, string pattern)
- Perform a regular expression match */
-PHP_FUNCTION(rpa_dbex_strmatch)
+static void php_rpa_stat_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
- php_do_rpa_dbex_strmatch(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
-}
+ php_rpa_stat *phpstat = (php_rpa_stat*)rsrc->ptr;
-
-PHP_FUNCTION(rpa_dbex_greetme)
-{
- zval *zname;
-
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zname) == FAILURE) {
- RETURN_NULL();
- }
-
- convert_to_string(zname);
-
- php_printf("Hello ");
- PHPWRITE(Z_STRVAL_P(zname), Z_STRLEN_P(zname));
- php_printf(" ");
-
- RETURN_TRUE;
-}
-
-
-static void php_rpa_pattern_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
-{
- php_rpa_pattern *pPhpPattern = (php_rpa_pattern*)rsrc->ptr;
-
- if (pPhpPattern) {
- efree(pPhpPattern);
+ if (phpstat) {
+ rpa_stat_destroy(phpstat->stat);
+ efree(phpstat);
}
}
static void php_rpa_dbex_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
{
php_rpa_dbex *pPhpDbex = (php_rpa_dbex*)rsrc->ptr;
- rpa_callback_handle hCallback;
- php_cbinfo *pCbInfo;
if (pPhpDbex) {
- if (pPhpDbex->hDbex) {
- for (hCallback = rpa_dbex_first_callback(pPhpDbex->hDbex); hCallback; hCallback = rpa_dbex_next_callback(pPhpDbex->hDbex, hCallback)) {
- pCbInfo = (php_cbinfo*)rpa_dbex_callback_userdata(pPhpDbex->hDbex, hCallback);
- php_cbinfo_destroy(pCbInfo);
- }
- }
-
rpa_dbex_destroy(pPhpDbex->hDbex);
/*
zval_dtor(pPhpDbex->zcallbacks);
pPhpDbex = emalloc(sizeof(php_rpa_dbex));
pPhpDbex->hDbex = rpa_dbex_create();
-/*
+/*
ALLOC_INIT_ZVAL(pPhpDbex->zcallbacks);
Z_ADDREF_P(pPhpDbex->zcallbacks);
array_init(pPhpDbex->zcallbacks);
}
+PHP_FUNCTION(rpa_dbex_compile)
+{
+ zval *zres;
+ php_rpa_dbex *pPhpDbex;
+ char *patterns;
+ int patterns_len;
+ int ret;
+
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &zres) == FAILURE) {
+ RETURN_LONG(-1);
+ }
+
+ ZEND_FETCH_RESOURCE(pPhpDbex, php_rpa_dbex*, &zres, -1, PHP_RPA_DBEX_RES_NAME, le_rpa_dbex);
+
+ ret = rpa_dbex_compile(pPhpDbex->hDbex);
+ RETURN_LONG(ret);
+}
+
+
+#if 0
+static php_cbinfo *php_cbinfo_create(php_rpa_dbex *pPhpDbex, const char *php_callback, zval *userdata)
+{
+ php_cbinfo *pCbInfo;
+
+ if ((pCbInfo = emalloc(sizeof(php_cbinfo))) == NULL)
+ return NULL;
+
+ pCbInfo->pPhpDbex = pPhpDbex;
+ pCbInfo->php_callback = estrdup(php_callback);
+ pCbInfo->userdata = userdata;
+ if (userdata) {
+ ZVAL_ADDREF(userdata);
+// Z_SET_ISREF_P(userdata);
+ }
+ return pCbInfo;
+}
+
+
+static void php_cbinfo_destroy(php_cbinfo *pCbInfo)
+{
+ if (!pCbInfo)
+ return;
+ if (pCbInfo->php_callback)
+ efree(pCbInfo->php_callback);
+ if (pCbInfo->userdata) {
+ if (ZVAL_REFCOUNT(pCbInfo->userdata) == 1) {
+ zval_ptr_dtor(&pCbInfo->userdata);
+ } else {
+ ZVAL_DELREF(pCbInfo->userdata);
+ }
+ }
+ efree(pCbInfo);
+}
+
+
+static void php_do_rpa_dbex_strmatch(INTERNAL_FUNCTION_PARAMETERS, int global) /* {{{ */
+{
+ /* parameters */
+ char *subject; /* String to match against */
+ char *regex; /* Regular expression */
+ int subject_len;
+ int regex_len;
+ int ret = 0;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &subject,
+ &subject_len,
+ ®ex,
+ ®ex_len) == FAILURE) {
+ RETURN_LONG(-1);
+ }
+/*
+ ret = emalloc(subject_len + regex_len + 100);
+ php_sprintf(ret, "Hello from rpalib, subject: %s, regex: %s", subject, regex);
+ RETURN_STRING(ret, 0);
+*/
+ ret = rpa_dbex_strmatch(subject, regex);
+ RETURN_LONG(ret);
+}
+
+
+/* {{{ proto int rpa_dbex_strmatch(string subject, string pattern)
+ Perform a regular expression match */
+PHP_FUNCTION(rpa_dbex_strmatch)
+{
+ php_do_rpa_dbex_strmatch(INTERNAL_FUNCTION_PARAM_PASSTHRU, 0);
+}
+
+
+PHP_FUNCTION(rpa_dbex_greetme)
+{
+ zval *zname;
+
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &zname) == FAILURE) {
+ RETURN_NULL();
+ }
+
+ convert_to_string(zname);
+
+ php_printf("Hello ");
+ PHPWRITE(Z_STRVAL_P(zname), Z_STRLEN_P(zname));
+ php_printf(" ");
+
+ RETURN_TRUE;
+}
+
+
+
+
+
+
PHP_FUNCTION(rpa_dbex_load_string)
{
zval *zres;