add_((next_)?index|assoc)_(ascii|rt)_stringl?(_ex)?
and
(ZVAL|RETVAL|RETURN)_(ASCII|RT|U)_STRINGL?
#define ZSTR_DUPLICATE (1<<0)
#define ZSTR_AUTOFREE (1<<1)
Duplicate keeps traditional value of '1', additional bit '2' tells
unicode mode conversion to automatically free the original string
in order to avoid leaks due to conversion on a value otherwise being
"given" to the engine.
/* Uses s as-is for non-unicode, or frees s after converting to unicode */
{
char *s = estrdup("Hello");
ZVAL_RT_STRING(pzv, s, ZSTR_AUTOFREE);
}
/* Duplicates for non-unicode, or converts (but doesn't free original) */
{
char *s = "Hello";
ZVAL_RT_STRING(pzv, s, ZSTR_DUPLICATE);
}
/* Uses as-is for non-unicode, or converts (but doesn't free original) */
{
char *s = "Hello";
zval zv;
ZVAL_RT_STRING(&zv, s, 0);
/* use zv for some temporary purpose */
/* It's now necessary to manually free this generated value */
if (UG(unicode)) {
zval_dtor(&zv);
}
}
- use the same type (int) for zval.value.usr.len and zval.value.str.len
- use union "zstr" as char*/UChar* mixture instead of void*
- Z_UNISTR() and Z_UNILEN() no longer check for Z_TYPE()
- nuke int32_t from ZE (not finisned)
Now IS_BINRAY data type is removed and IS_STRING starts behave as IS_BINARY in unicode mode. IS_STRING is incompatible with IS_UNICODE, so ALL functions should be improved to support unicode mode.
and zend_make_callable on it. This functions allows to check if a php
variable is a callable function and returns its function pointer as well
as object if possible.
# Commit this now so we can use it in 5.1.* series as discussed with Andi.
- Extensions which delete global variables need to use new special function
- delete_global_variable() (I'm about to rename it) to remove them.
- Will post to internals@ or via commit messages if there's anything else.