zend_class_entry *ce;
} autoload_func_info;
-static void autoload_func_info_dtor(autoload_func_info *alfi)
+static void autoload_func_info_dtor(zval *element)
{
+ autoload_func_info *alfi = (autoload_func_info*)Z_PTR_P(element);
if (alfi->obj) {
zval_ptr_dtor(alfi->obj);
}
if (alfi->closure) {
zval_ptr_dtor(alfi->closure);
}
+ efree(alfi);
}
/* {{{ proto void spl_autoload_call(string class_name)
alfi.closure = zcallable;
Z_ADDREF_P(zcallable);
- lc_name = STR_ALLOC(func_name_len + 2 + sizeof(zend_uint), 0);
+ lc_name = STR_ALLOC(func_name_len + sizeof(zend_uint), 0);
zend_str_tolower_copy(lc_name->val, func_name, func_name_len);
memcpy(lc_name->val + func_name_len, &Z_OBJ_HANDLE_P(zcallable), sizeof(zend_uint));
- lc_name->len += sizeof(zend_uint);
lc_name->val[lc_name->len] = '\0';
} else {
lc_name = STR_ALLOC(func_name_len, 0);
spl_alfi.ce = NULL;
spl_alfi.closure = NULL;
zend_hash_str_add_mem(SPL_G(autoload_functions), "spl_autoload", sizeof("spl_autoload") - 1,
- (void *)&spl_alfi, sizeof(autoload_func_info));
+ &spl_alfi, sizeof(autoload_func_info));
if (prepend && SPL_G(autoload_functions)->nNumOfElements > 1) {
/* Move the newly created element to the head of the hashtable */
HT_MOVE_TAIL_TO_HEAD(SPL_G(autoload_functions));
}
}
- if (zend_hash_add_mem(SPL_G(autoload_functions), lc_name, &alfi.func_ptr, sizeof(autoload_func_info)) == NULL) {
+ if (zend_hash_add_mem(SPL_G(autoload_functions), lc_name, &alfi, sizeof(autoload_func_info)) == NULL) {
if (obj_ptr && !(alfi.func_ptr->common.fn_flags & ZEND_ACC_STATIC)) {
Z_DELREF_P(alfi.obj);
}
if (!php_var_unserialize(&data, p, max, var_hash TSRMLS_CC)) {
zval_dtor(&key);
- zval_dtor(&data);
return 0;
}
-#line 449 "ext/standard/var_unserializer.c"
+#line 448 "ext/standard/var_unserializer.c"
{
YYCTYPE yych;
static const unsigned char yybm[] = {
yych = *(YYMARKER = ++YYCURSOR);
if (yych == ':') goto yy95;
yy3:
-#line 786 "ext/standard/var_unserializer.re"
+#line 785 "ext/standard/var_unserializer.re"
{ return 0; }
-#line 511 "ext/standard/var_unserializer.c"
+#line 510 "ext/standard/var_unserializer.c"
yy4:
yych = *(YYMARKER = ++YYCURSOR);
if (yych == ':') goto yy89;
goto yy3;
yy14:
++YYCURSOR;
-#line 780 "ext/standard/var_unserializer.re"
+#line 779 "ext/standard/var_unserializer.re"
{
/* this is the case where we have less data than planned */
php_error_docref(NULL TSRMLS_CC, E_NOTICE, "Unexpected end of serialized data");
return 0; /* not sure if it should be 0 or 1 here? */
}
-#line 560 "ext/standard/var_unserializer.c"
+#line 559 "ext/standard/var_unserializer.c"
yy16:
yych = *++YYCURSOR;
goto yy3;
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 641 "ext/standard/var_unserializer.re"
+#line 640 "ext/standard/var_unserializer.re"
{
size_t len, len2, len3, maxlen;
long elements;
return object_common2(UNSERIALIZE_PASSTHRU, elements);
}
-#line 729 "ext/standard/var_unserializer.c"
+#line 728 "ext/standard/var_unserializer.c"
yy25:
yych = *++YYCURSOR;
if (yych <= ',') {
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 633 "ext/standard/var_unserializer.re"
+#line 632 "ext/standard/var_unserializer.re"
{
//??? INIT_PZVAL(rval);
return object_common2(UNSERIALIZE_PASSTHRU,
object_common1(UNSERIALIZE_PASSTHRU, ZEND_STANDARD_CLASS_DEF_PTR));
}
-#line 762 "ext/standard/var_unserializer.c"
+#line 761 "ext/standard/var_unserializer.c"
yy32:
yych = *++YYCURSOR;
if (yych == '+') goto yy33;
yych = *++YYCURSOR;
if (yych != '{') goto yy18;
++YYCURSOR;
-#line 615 "ext/standard/var_unserializer.re"
+#line 614 "ext/standard/var_unserializer.re"
{
long elements = parse_iv(start + 2);
/* use iv() not uiv() in order to check data range */
return finish_nested_data(UNSERIALIZE_PASSTHRU);
}
-#line 801 "ext/standard/var_unserializer.c"
+#line 800 "ext/standard/var_unserializer.c"
yy39:
yych = *++YYCURSOR;
if (yych == '+') goto yy40;
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 586 "ext/standard/var_unserializer.re"
+#line 585 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
char *str;
ZVAL_STRINGL(rval, str, len);
return 1;
}
-#line 851 "ext/standard/var_unserializer.c"
+#line 850 "ext/standard/var_unserializer.c"
yy46:
yych = *++YYCURSOR;
if (yych == '+') goto yy47;
yych = *++YYCURSOR;
if (yych != '"') goto yy18;
++YYCURSOR;
-#line 559 "ext/standard/var_unserializer.re"
+#line 558 "ext/standard/var_unserializer.re"
{
size_t len, maxlen;
char *str;
ZVAL_STRINGL(rval, str, len);
return 1;
}
-#line 899 "ext/standard/var_unserializer.c"
+#line 898 "ext/standard/var_unserializer.c"
yy53:
yych = *++YYCURSOR;
if (yych <= '/') {
}
yy63:
++YYCURSOR;
-#line 550 "ext/standard/var_unserializer.re"
+#line 549 "ext/standard/var_unserializer.re"
{
#if SIZEOF_LONG == 4
use_double:
ZVAL_DOUBLE(rval, zend_strtod((const char *)start + 2, NULL));
return 1;
}
-#line 996 "ext/standard/var_unserializer.c"
+#line 995 "ext/standard/var_unserializer.c"
yy65:
yych = *++YYCURSOR;
if (yych <= ',') {
yych = *++YYCURSOR;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 534 "ext/standard/var_unserializer.re"
+#line 533 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
return 1;
}
-#line 1071 "ext/standard/var_unserializer.c"
+#line 1070 "ext/standard/var_unserializer.c"
yy76:
yych = *++YYCURSOR;
if (yych == 'N') goto yy73;
if (yych <= '9') goto yy79;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 508 "ext/standard/var_unserializer.re"
+#line 507 "ext/standard/var_unserializer.re"
{
#if SIZEOF_LONG == 4
int digits = YYCURSOR - start - 3;
ZVAL_LONG(rval, parse_iv(start + 2));
return 1;
}
-#line 1124 "ext/standard/var_unserializer.c"
+#line 1123 "ext/standard/var_unserializer.c"
yy83:
yych = *++YYCURSOR;
if (yych <= '/') goto yy18;
yych = *++YYCURSOR;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 502 "ext/standard/var_unserializer.re"
+#line 501 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
ZVAL_BOOL(rval, parse_iv(start + 2));
return 1;
}
-#line 1138 "ext/standard/var_unserializer.c"
+#line 1137 "ext/standard/var_unserializer.c"
yy87:
++YYCURSOR;
-#line 496 "ext/standard/var_unserializer.re"
+#line 495 "ext/standard/var_unserializer.re"
{
*p = YYCURSOR;
ZVAL_NULL(rval);
return 1;
}
-#line 1147 "ext/standard/var_unserializer.c"
+#line 1146 "ext/standard/var_unserializer.c"
yy89:
yych = *++YYCURSOR;
if (yych <= ',') {
if (yych <= '9') goto yy91;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 473 "ext/standard/var_unserializer.re"
+#line 472 "ext/standard/var_unserializer.re"
{
long id;
return 1;
}
-#line 1193 "ext/standard/var_unserializer.c"
+#line 1192 "ext/standard/var_unserializer.c"
yy95:
yych = *++YYCURSOR;
if (yych <= ',') {
if (yych <= '9') goto yy97;
if (yych != ';') goto yy18;
++YYCURSOR;
-#line 453 "ext/standard/var_unserializer.re"
+#line 452 "ext/standard/var_unserializer.re"
{
long id;
return 1;
}
-#line 1236 "ext/standard/var_unserializer.c"
+#line 1235 "ext/standard/var_unserializer.c"
}
-#line 788 "ext/standard/var_unserializer.re"
+#line 787 "ext/standard/var_unserializer.re"
return 0;