Re: Help, please! The Zend API is driving me mad!!!
| From: | Joao Prado Maia | Date: | Tue, 17 Jun 2003 17:56:41 +0000 |
| Subject: | Re: Help, please! The Zend API is driving me mad!!! | ||
| References: | 1 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-2353@lists.php.net to get a copy of this message | ||
My code is just as bad, but I remember that it used to work:
PHP_FUNCTION(jtemplate_set_root)
{
zval **z_root_dir;
char *root_dir = NULL;
int argc = ZEND_NUM_ARGS();
zval func;
zval *retval = NULL;
zval *args[1];
if (argc < 0 || argc > 1 ||
zend_get_parameters_ex(argc, &z_root_dir) == FAILURE) {
WRONG_PARAM_COUNT;
}
if (argc > 0) {
convert_to_string_ex(z_root_dir);
root_dir = estrndup(Z_STRVAL_PP(z_root_dir),
Z_STRLEN_PP(z_root_dir));
} else {
root_dir = estrndup(".", sizeof(".") - 1);
}
INIT_ZVAL(func);
ZVAL_STRING(&func, "is_dir", 1);
MAKE_STD_ZVAL(args[0]);
ZVAL_STRING(args[0], root_dir, 1);
MAKE_STD_ZVAL(retval);
/* check to see if the directory really exists and that is a real
directory */
if (call_user_function(EG(function_table), NULL, &func, retval, 1,
args TSRMLS_CC) == FAILURE) {
zend_error(E_ERROR, "%s(): could not call is_dir().",
get_active_function_name(TSRMLS_C));
}
if (Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) {
ZVAL_STRING(&func, "halt", 1);
ZVAL_STRING(args[0], "no such directory", 1);
call_user_function(NULL, &getThis(), &func, retval, 1,
args TSRMLS_CC);
zval_dtor(&func);
}
efree(root_dir);
zval_dtor(retval);
zval_ptr_dtor(&args[0]);
add_property_stringl(getThis(), "root", Z_STRVAL_PP(z_root_dir),
Z_STRLEN_PP(z_root_dir), 1);
ZEND_PUTS(get_active_function_name(TSRMLS_C));
RETURN_TRUE;
}
Yes, this _is_ nasty ;)
Cheers,
Joao