help request: passing return value

php.internals

netcat

22 years ago
Hi internals. [background] I'm newbie here and with php extensions. Working on php extension. It should give access to librep. I have very little experience with C. [problem] zval f1(some_args) { zval r; ... return r; } /* f1 can return many different types */ ZEND_FUNCTION(f2) { /* working on some_args here */ ... ... /* here i need to return what f1(some_args) returns */ } What's the best way to pass the result ? Any macro that would ? [tried] To look at another modules. Make f1 be (zval *) and "*return_value=*rep_data_converter(result);" in f2. Since zval is not very simple structure - it doesn't work. P.S. Posting this message to php.internals seems to fail.
-- NetCat --------------------------------------------------- FREE 10MB Email + AntiSpam + POP3 + more. Get it at http://www.doal.co.il:81/free/?c=antispam

Wez Furlong

22 years ago
PHP_FUNCTION (or ZEND_FUNCTION - they are the same) includes the function paramters; one of those is: zval *return_value; which already contains an allocated zval (set to NULL). If you want to change this in one of your own functions, you could do something like this: int f1(zval *return_value, ...) { ... change the return_value here ... return SUCCESS; } PHP_FUNCTION(my_func) { if (f1(return_value) == SUCCESS) { /* it worked */ return; } else { /* it didn't work */ php_error(....) } } Also take a look in Zend/zend.h at the definitions for INTERNAL_FUNCTION_PARAMETERS and INTERNAL_FUNCTION_PARAM_PASSTHRU which can be used in you own function declarations to handle the php function paramters. Hope that helps, --Wez. PS: You're welcome to join the PHP Extension Community Library, or PECL, on pecl-dev@lists.php.net ----- Original Message ----- From: "netcat" <netcat@abox.co.il> To: "PHP Development" <internals@lists.php.net> Sent: Tuesday, October 07, 2003 9:43 AM Subject: [PHP-DEV] help request: passing return value

netcat

22 years ago
Wez Furlong wrote:
>PHP_FUNCTION (or ZEND_FUNCTION - they are the same) >includes the function paramters; one of those is: > >zval *return_value; > >which already contains an allocated zval (set to NULL). > >If you want to change this in one of your own functions, you could >do something like this: > >int f1(zval *return_value, ...) >{ > ... change the return_value here ... > return SUCCESS; >} > >PHP_FUNCTION(my_func) >{ > if (f1(return_value) == SUCCESS) { > /* it worked */ > return; > } else { > /* it didn't work */ > php_error(....) > } >} > > >
Thanks a lot, it seems to work.
>Also take a look in Zend/zend.h at the definitions for >INTERNAL_FUNCTION_PARAMETERS and >INTERNAL_FUNCTION_PARAM_PASSTHRU > >
I will. Thanks again.
>which can be used in you own function declarations to handle >the php function paramters. > >Hope that helps, > >--Wez. > >PS: You're welcome to join the PHP Extension Community Library, >or PECL, on pecl-dev@lists.php.net > >----- Original Message ----- >From: "netcat" <netcat@abox.co.il> >To: "PHP Development" <internals@lists.php.net> >Sent: Tuesday, October 07, 2003 9:43 AM >Subject: [PHP-DEV] help request: passing return value > > > > >>Hi internals. >> >>[background] >>I'm newbie here and with php extensions. >>Working on php extension. >>It should give access to librep. >>I have very little experience with C. >> >>[problem] >> >>zval f1(some_args) { >> zval r; >> ... >> return r; >>} >> >>/* f1 can return many different types */ >> >>ZEND_FUNCTION(f2) { >> /* working on some_args here */ >> ... >> ... >> /* here i need to return what >> f1(some_args) returns */ >>} >> >>What's the best way to pass the result ? >>Any macro that would ? >>[tried] >> >>To look at another modules. >> >>Make f1 be (zval *) and >>"*return_value=*rep_data_converter(result);" >>in f2. >>Since zval is not very simple structure - it doesn't work. >> >> > > >
-- NetCat ------------------------------------------------------ SPAM-Free 10mb Free email + Antivirus + POP3 + more... Get it at http://www.doal.co.il:81/free/?c=all-spam