I've written an extension which needs to accept a Resource which is an SQLite
database handle, and call a C function which will be using that db handle to
issue queries. What I've done works, but is kinda nasty because there doesn't
appear to be a clean way to obtain that database handle nor, from what I can
tell, determine the resource type to expect. Is there a nicer way of doing
this?
PHP_FUNCTION(my_PHP_function)
{
int id;
int dataLen;
int resourceType;
char * pData;
zval * zdb;
void * hDB;
void ** phDB;
/* Ensure we got the correct number of parameters */
if (ZEND_NUM_ARGS() != 2)
{
WRONG_PARAM_COUNT;
}
/* Retrieve the parameters */
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
"rs",
&zdb, &pData, &dataLen) == FAILURE)
{
return;
}
/*
* Voodoo to retrieve the sqlite database handle from the resource.
* How do I validate that resourceType is reasonable?
*/
id = zdb->value.lval;
if ((phDB = zend_list_find(id, &resourceType)) == NULL)
{
return;
}
/*
* This is nasty too. We "know" that the first field in the private
* structure is the database handle. Just extract it.
*/
hDB = *phDB;
RETURN_STRING(my_C_function(hDB, pData), TRUE);
}
Thanks,
Derrell
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php