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

Reply via email to