Hello Oriol,
Tuesday, June 17, 2003, 6:29:14 PM, you wrote:
O> Aaaaaaaaaaargh!
O> When I run the following code...
O> ----------------------------------------------
O> char fname[256];
O> zval **retval;
O> zval *zfname;
O> strcpy(fname, "rand");
O> zend_printf("Step 1...\n");
O> MAKE_STD_ZVAL(zfname);
O> zend_printf("Step 2...\n");
O> ZVAL_STRING(zfname, fname, 1);
O> zend_printf("Step 3...\n");
O> TSRMLS_FETCH();
O> zend_printf("Step 4...\n");
O> if (call_user_function_ex(CG(function_table), NULL,
O> zfname, retval, 0, NULL, 0,
O> NULL TSRMLS_DC) == SUCCESS)
O> {
O> zend_printf("The function has ben called.\n");
O> }
O> -----------------------------------------------
O> ... i get:
O> Step 1...
O> Step 2...
O> Step 3...
O> Step 4...
O> Segmentation fault
O> Could someone tell me what I'm doing wrong?
O> Thank you very much,
- The line TSRMLS_FETCH() must be the last line after all local variable
declarations.
- TSRMLS_DC must be replaced with TSRMLS_CC in the
call_user_function_ex() call.
- CG means Compiler Globals so i guess you want the corresponging
Executor Global_ EG(function_table)
- If the third parameter to ZVAL_STRING() is a non zero value the
string value is copied to the zval. Since it must be freeable by the
zval destructor it must be a value stroed in memory allocated by
emalloc(). Where this happens doesn't matter so the following is
enough: ZVAL_STRING(zfname, "rand", 1);
--
Best regards,
Marcus mailto:[EMAIL PROTECTED]
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php