>>I'm using add_index_string and add_assoc_string to build an array, and
these
>>functions expect a 'duplicate' argument. When should I set this to 1 and
>>when to 0?
>First of all, it definitely matters. Sending the right value is extremely
>important. If you send 1 instead of 0, then you would get a memory
>leak. If you send a 0 instead of 1, you'll most likely crash. So you
>really must send the right values each time :)
> [...]
So what you're saying is
- if duplicate is set to 0, you create a reference
- if duplicate is set to 1, you increase the reference counter
so that 'duplicate' means 'I am a duplicate', instead of what I first
thought 'duplicate me' (which is why I sent a 1 first (duplicate me), and a
0 second).
OK, that's clear now.
Another question that's related to this: Am I right when I say:
when I have created and initialized a zval in a function (MAKE_STD_ZVAL) I
should also free it in this function (FREE_ZVAL), except when I add it
directly to the hashtable (zend_hash_index_update), because then it is freed
automatically?
The following code-snippet from a function (dbx_query) actually works and
doesn't crash or leak, based on this assumption
// fill each row array with fieldvalues (indexed and assoc)
row_count=0;
result=1;
while (result) {
zval * rv_row;
MAKE_STD_ZVAL(rv_row);
result = switch_dbx_getrow(&rv_row, &rv_result_handle,
DBX_RESULT_INDEX | DBX_RESULT_ASSOC, INTERNAL_FUNCTION_PARAM_PASSTHRU,
dbx_module);
if (result) {
zend_hash_index_update(data->value.ht, row_count, (void
*)&(rv_row), sizeof(zval *), NULL);
++row_count;
}
else {
FREE_ZVAL(rv_row);
}
}
And yes, as you have guessed, I've started on creating a database
abstraction module :-)
It is called 'dbx' and currently already works for mysql...
Since I want this Open Source'd (and preferably in the php-cvs-tree as
well), how would I go about doing that (this will be my first open source
code)?
Thanks, Marc.
--
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]