Hi,
I have an internal function defined that returns an array zval:
zval *pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_DC);
When I call it like this, return_value is NULL
in userland.
return_value = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator,
count, 0 TSRMLS_CC);
But when I call it like this, it works as expected and an array is returned
to userland
array = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_CC);
*return_value = *array;
I'm sure there is an obvious answer, but given my background (or lack
thereof) in C, I can't figure it out.
How does the temporary assignment change things inside the engine?
Bob
Bob Silva wrote:
Hi,
I have an internal function defined that returns an array zval:
zval *pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_DC);When I call it like this, return_value is
NULL
in userland.return_value = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator,
count, 0 TSRMLS_CC);
The outta world doesn't care if you let return_value point else where in
your function. Look up the chapter pointers in your book. Short version:
You need a pointer to a pointer so that the caller gets another pointer.
But when I call it like this, it works as expected and an array is returned
to userlandarray = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_CC);*return_value = *array;
Yes, because you change the members of the struct the pointer points at and
the pointer is still the same of that of the "outta world".
I'm sure there is an obvious answer, but given my background (or lack
thereof) in C, I can't figure it out.How does the temporary assignment change things inside the engine?
Hä? :)
Regards,
Michael - <mike(@)php.net> http://dev.iworks.at/ext-http/http-functions.html.gz
Hello Bob,
look at RETURN_ZVAL() again.
Tuesday, November 1, 2005, 7:47:45 AM, you wrote:
Hi,
I have an internal function defined that returns an array zval:
zval *pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_DC);
When I call it like this, return_value is
NULL
in userland.
return_value = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator,
count, 0 TSRMLS_CC);
But when I call it like this, it works as expected and an array is returned
to userland
array = pow_zstring_internal_split(Z_STRVAL_P(ivalue), separator, count, 0
TSRMLS_CC);
*return_value = *array;
I'm sure there is an obvious answer, but given my background (or lack
thereof) in C, I can't figure it out.
How does the temporary assignment change things inside the engine?
Bob
Best regards,
Marcus