ZEND_API int zend_print_zval_ex(zend_write_func_t write_func, zval *expr, int indent TSRMLS_DC) /* {{{ */
{
- zend_string *str = zval_get_string(expr TSRMLS_CC);
+ zend_string *str = zval_get_string(expr);
int len = str->len;
if (len != 0) {
} else if (Z_TYPE_P(scope_arg) == IS_NULL) {
ce = NULL;
} else {
- zend_string *class_name = zval_get_string(scope_arg TSRMLS_CC);
+ zend_string *class_name = zval_get_string(scope_arg);
if ((class_name->len == sizeof("static") - 1) &&
(memcmp("static", class_name->val, sizeof("static") - 1) == 0)) {
ce = closure->func.common.scope;
}
/* }}} */
-ZEND_API zend_string *zval_get_string(zval *op TSRMLS_DC) /* {{{ */
+ZEND_API zend_string *_zval_get_string_func(zval *op TSRMLS_DC) /* {{{ */
{
+try_again:
switch (Z_TYPE_P(op)) {
case IS_NULL:
return STR_EMPTY_ALLOC();
return STR_EMPTY_ALLOC();
}
case IS_RESOURCE: {
- char *str;
- int len = zend_spprintf(&str, 0, "Resource id #%ld", Z_RES_HANDLE_P(op));
- zend_string *retval = STR_INIT(str, len, 0);
- efree(str);
- return retval;
+ char buf[sizeof("Resource id #") + MAX_LENGTH_OF_LONG];
+ int len;
+
+ len = snprintf(buf, sizeof(buf), "Resource id #%ld", Z_RES_HANDLE_P(op));
+ return STR_INIT(buf, len, 0);
}
case IS_LONG: {
- char *str;
- int len = zend_spprintf(&str, 0, "%ld", Z_LVAL_P(op));
- zend_string *retval = STR_INIT(str, len, 0);
- efree(str);
- return retval;
+ char buf[MAX_LENGTH_OF_LONG + 1];
+ int len;
+
+ len = snprintf(buf, sizeof(buf), "%ld", Z_LVAL_P(op));
+ return STR_INIT(buf, len, 0);
}
case IS_DOUBLE: {
char *str;
} else if (Z_OBJ_HT_P(op)->get) {
zval *z = Z_OBJ_HT_P(op)->get(op, &tmp TSRMLS_CC);
if (Z_TYPE_P(z) != IS_OBJECT) {
- zend_string *str = zval_get_string(z TSRMLS_CC);
+ zend_string *str = zval_get_string(z);
zval_ptr_dtor(z);
return str;
}
return STR_EMPTY_ALLOC();
}
case IS_REFERENCE:
- return zval_get_string(Z_REFVAL_P(op));
+ op = Z_REFVAL_P(op);
+ goto try_again;
default:
//??? original code returns bool(0)
return STR_EMPTY_ALLOC();
ZEND_API int string_compare_function_ex(zval *result, zval *op1, zval *op2, zend_bool case_insensitive TSRMLS_DC) /* {{{ */
{
- zend_string *str1 = zval_get_string(op1 TSRMLS_CC),
- *str2 = zval_get_string(op2 TSRMLS_CC);
+ zend_string *str1 = zval_get_string(op1);
+ zend_string *str2 = zval_get_string(op2);
if (case_insensitive) {
ZVAL_LONG(result, zend_binary_strcasecmp_l(str1->val, str1->len, str2->val, str1->len));
#if HAVE_STRCOLL
ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC) /* {{{ */
{
- zend_string *str1 = zval_get_string(op1 TSRMLS_CC),
- *str2 = zval_get_string(op2 TSRMLS_CC);
+ zend_string *str1 = zval_get_string(op1);
+ zend_string *str2 = zval_get_string(op2);
ZVAL_LONG(result, strcoll(str1->val, str2->val));
ZEND_API long zval_get_long(zval *op TSRMLS_DC);
ZEND_API double zval_get_double(zval *op TSRMLS_DC);
-ZEND_API zend_string *zval_get_string(zval *op TSRMLS_DC);
+ZEND_API zend_string *_zval_get_string_func(zval *op TSRMLS_DC);
+
+#define zval_get_string(op) ((Z_TYPE_P(op) == IS_STRING) ? \
+ STR_COPY(Z_STR_P(op)) : _zval_get_string_func((op) TSRMLS_CC))
ZEND_API int add_char_to_string(zval *result, const zval *op1, const zval *op2);
ZEND_API int add_string_to_string(zval *result, const zval *op1, const zval *op2);
node_list_unlink(attrp->children TSRMLS_CC);
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
xmlNodeSetContentLen((xmlNodePtr) attrp, str->val, str->len + 1);
return FAILURE;
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
return FAILURE;
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
handler = xmlFindCharEncodingHandler(Z_STRVAL_P(newval));
xmlFree((xmlChar *) docp->version );
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
docp->version = xmlStrdup((const xmlChar *) str->val);
xmlFree((xmlChar *) docp->URL);
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
docp->URL = xmlStrdup((const xmlChar *) str->val);
case XML_CDATA_SECTION_NODE:
case XML_PI_NODE:
{
- zend_string *str = zval_get_string(newval TSRMLS_CC);
+ zend_string *str = zval_get_string(newval);
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
STR_RELEASE(str);
break;
nsnode = xmlDocGetRootElement(nodep->doc);
}
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
prefix = str->val;
if (nsnode && nodep->ns != NULL && !xmlStrEqual(nodep->ns->prefix, (xmlChar *)prefix)) {
strURI = (char *) nodep->ns->href;
static zval *dom_get_property_ptr_ptr(zval *object, zval *member, int type, zend_uint cache_slot TSRMLS_DC) /* {{{ */
{
dom_object *obj = Z_DOMOBJ_P(object);
- zend_string *member_str = zval_get_string(member TSRMLS_CC);
+ zend_string *member_str = zval_get_string(member);
zval *retval = NULL;
if (!obj->prop_handler || !zend_hash_exists(obj->prop_handler, member_str)) {
zval *dom_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC)
{
dom_object *obj = Z_DOMOBJ_P(object);
- zend_string *member_str = zval_get_string(member TSRMLS_CC);
+ zend_string *member_str = zval_get_string(member);
zval *retval;
dom_prop_handler *hnd = NULL;
void dom_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC)
{
dom_object *obj = Z_DOMOBJ_P(object);
- zend_string *member_str = zval_get_string(member TSRMLS_CC);
+ zend_string *member_str = zval_get_string(member);
dom_prop_handler *hnd = NULL;
if (obj->prop_handler != NULL) {
static int dom_property_exists(zval *object, zval *member, int check_empty, zend_uint cache_slot TSRMLS_DC)
{
dom_object *obj = Z_DOMOBJ_P(object);
- zend_string *member_str = zval_get_string(member TSRMLS_CC);
+ zend_string *member_str = zval_get_string(member);
dom_prop_handler *hnd = NULL;
int retval = 0;
return FAILURE;
}
- str = zval_get_string(newval TSRMLS_CC);
+ str = zval_get_string(newval);
xmlNodeSetContentLen(nodep, str->val, str->len + 1);
intern = Z_XPATHOBJ_P(id);
zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value));
while ((entry = zend_hash_get_current_data(Z_ARRVAL_P(array_value)))) {
- zend_string *str = zval_get_string(entry TSRMLS_CC);
+ zend_string *str = zval_get_string(entry);
ZVAL_LONG(&new_string,1);
zend_hash_update(intern->registered_phpfunctions, str, &new_string);
zend_hash_move_forward(Z_ARRVAL_P(array_value));
static void _const_string(string *str, char *name, zval *value, char *indent TSRMLS_DC)
{
char *type = zend_zval_type_name(value);
- zend_string *value_str = zval_get_string(value TSRMLS_CC);
+ zend_string *value_str = zval_get_string(value);
string_printf(str, "%s Constant [ %s %s ] { %s }\n",
indent, type, name, value_str->val);
switch (format[inpos]) {
case 's': {
- zend_string *str = zval_get_string(&tmp TSRMLS_CC);
+ zend_string *str = zval_get_string(&tmp);
php_sprintf_appendstring(&result, &outpos,
str->val,
width, precision, padding,
PHPAPI int string_natural_compare_function_ex(zval *result, zval *op1, zval *op2, zend_bool case_insensitive TSRMLS_DC) /* {{{ */
{
- zend_string *str1 = zval_get_string(op1 TSRMLS_CC),
- *str2 = zval_get_string(op2 TSRMLS_CC);
+ zend_string *str1 = zval_get_string(op1);
+ zend_string *str2 = zval_get_string(op2);
ZVAL_LONG(result, strnatcmp_ex(str1->val, str1->len, str2->val, str2->len, case_insensitive));