From f860486de5805eefd63af5d750c913e1515970c8 Mon Sep 17 00:00:00 2001 From: Stanislav Malyshev Date: Mon, 21 Oct 2013 00:01:24 -0700 Subject: fix memory leak on error (from Coverity scan) --- ext/date/php_date.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 70960b161f..7e4de09c1e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1362,6 +1362,7 @@ PHPAPI signed long php_parse_date(char *string, signed long *now) parsed_time = timelib_strtotime(string, strlen(string), &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); if (error->error_count) { + timelib_time_dtor(parsed_time); timelib_error_container_dtor(error); return -1; } -- cgit v1.2.1 From 23ab2575e1be062c2d5e3f80d3ff40cabe14fa2c Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 27 Nov 2013 21:59:46 +0000 Subject: Fixed bug #53879 (DateTime::createFromFormat() fails to parse cookie expiration date) --- ext/date/php_date.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 7e4de09c1e..b7da07c7bd 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -752,6 +752,14 @@ PHP_RSHUTDOWN_FUNCTION(date) #define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO" +/* + * This comes from various sources that like to contradict. I'm going with the + * format here because of: + * http://msdn.microsoft.com/en-us/library/windows/desktop/aa384321%28v=vs.85%29.aspx + * and http://curl.haxx.se/rfc/cookie_spec.html + */ +#define DATE_FORMAT_COOKIE "l, d-M-Y H:i:s T" + #define DATE_TZ_ERRMSG \ "It is not safe to rely on the system's timezone settings. You are " \ "*required* to use the date.timezone setting or the " \ @@ -783,7 +791,7 @@ PHP_MINIT_FUNCTION(date) * with the variations that the only legal time zone is GMT * and the separators between the elements of the date must be dashes." */ - REGISTER_STRING_CONSTANT("DATE_COOKIE", DATE_FORMAT_RFC850, CONST_CS | CONST_PERSISTENT); + REGISTER_STRING_CONSTANT("DATE_COOKIE", DATE_FORMAT_COOKIE, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_ISO8601", DATE_FORMAT_ISO8601, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC822", DATE_FORMAT_RFC822, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_RFC850", DATE_FORMAT_RFC850, CONST_CS | CONST_PERSISTENT); @@ -1948,7 +1956,7 @@ static void date_register_classes(TSRMLS_D) zend_declare_class_constant_stringl(date_ce_date, const_name, sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC); REGISTER_DATE_CLASS_CONST_STRING("ATOM", DATE_FORMAT_RFC3339); - REGISTER_DATE_CLASS_CONST_STRING("COOKIE", DATE_FORMAT_RFC850); + REGISTER_DATE_CLASS_CONST_STRING("COOKIE", DATE_FORMAT_COOKIE); REGISTER_DATE_CLASS_CONST_STRING("ISO8601", DATE_FORMAT_ISO8601); REGISTER_DATE_CLASS_CONST_STRING("RFC822", DATE_FORMAT_RFC822); REGISTER_DATE_CLASS_CONST_STRING("RFC850", DATE_FORMAT_RFC850); -- cgit v1.2.1 From 44a9e6b4843de686eab2e2bfa66bdf17ed685d7e Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sun, 31 Mar 2013 18:11:35 +0100 Subject: Fixed "Forward Transition" construction of DateTime objects. This fixes the issue in https://wiki.php.net/rfc/datetime_and_daylight_saving_time#forward_transitions There is a period during transition to DST where a time (such as 02:30) does not exist. PHP already calculated the correct timestamp for this, but failed to "rounded forward" to the existing correct hour value. --- ext/date/php_date.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index b7da07c7bd..05ac67216b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2487,6 +2487,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, timelib_fill_holes(dateobj->time, now, TIMELIB_NO_CLONE); timelib_update_ts(dateobj->time, tzi); + timelib_update_from_sse(dateobj->time); dateobj->time->have_relative = 0; -- cgit v1.2.1 From 5d0c526199add0e4f054a57db29d882c8ad89a23 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 16 Apr 2013 16:31:10 +0100 Subject: Move add/sub to timelib. --- ext/date/php_date.c | 49 ++++++++----------------------------------------- 1 file changed, 8 insertions(+), 41 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 05ac67216b..2bb555a68b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2889,7 +2889,7 @@ PHP_FUNCTION(date_add) zval *object, *interval; php_date_obj *dateobj; php_interval_obj *intobj; - int bias = 1; + timelib_time *new_time; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; @@ -2899,27 +2899,9 @@ PHP_FUNCTION(date_add) intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); - - if (intobj->diff->have_weekday_relative || intobj->diff->have_special_relative) { - memcpy(&dateobj->time->relative, intobj->diff, sizeof(struct timelib_rel_time)); - } else { - if (intobj->diff->invert) { - bias = -1; - } - memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); - dateobj->time->relative.y = intobj->diff->y * bias; - dateobj->time->relative.m = intobj->diff->m * bias; - dateobj->time->relative.d = intobj->diff->d * bias; - dateobj->time->relative.h = intobj->diff->h * bias; - dateobj->time->relative.i = intobj->diff->i * bias; - dateobj->time->relative.s = intobj->diff->s * bias; - } - dateobj->time->have_relative = 1; - dateobj->time->sse_uptodate = 0; - - timelib_update_ts(dateobj->time, NULL); - timelib_update_from_sse(dateobj->time); - dateobj->time->have_relative = 0; + new_time = timelib_add(dateobj->time, intobj->diff); + timelib_time_dtor(dateobj->time); + dateobj->time = new_time; RETURN_ZVAL(object, 1, 0); } @@ -2933,7 +2915,7 @@ PHP_FUNCTION(date_sub) zval *object, *interval; php_date_obj *dateobj; php_interval_obj *intobj; - int bias = 1; + timelib_time *new_time; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_date, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; @@ -2948,24 +2930,9 @@ PHP_FUNCTION(date_sub) return; } - if (intobj->diff->invert) { - bias = -1; - } - - memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); - dateobj->time->relative.y = 0 - (intobj->diff->y * bias); - dateobj->time->relative.m = 0 - (intobj->diff->m * bias); - dateobj->time->relative.d = 0 - (intobj->diff->d * bias); - dateobj->time->relative.h = 0 - (intobj->diff->h * bias); - dateobj->time->relative.i = 0 - (intobj->diff->i * bias); - dateobj->time->relative.s = 0 - (intobj->diff->s * bias); - dateobj->time->have_relative = 1; - dateobj->time->sse_uptodate = 0; - - timelib_update_ts(dateobj->time, NULL); - timelib_update_from_sse(dateobj->time); - - dateobj->time->have_relative = 0; + new_time = timelib_sub(dateobj->time, intobj->diff); + timelib_time_dtor(dateobj->time); + dateobj->time = new_time; RETURN_ZVAL(object, 1, 0); } -- cgit v1.2.1 From 5f09944662e09ea0b3f93cfab8702f188955e68c Mon Sep 17 00:00:00 2001 From: nikita2206 Date: Tue, 29 Oct 2013 19:40:17 +0400 Subject: Fixed bug #65768: DateTimeImmutable::diff does not work This commit also prevents user classes from directly implementing DateTimeInterface, because ext/date relies on classes implementing it to support certain internal structures. --- ext/date/php_date.c | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 742a2f60c3..cd3bf745dc 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1989,12 +1989,25 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval return (zend_object_iterator*)iterator; } +static int implement_date_interface_handler(zend_class_entry *interface, zend_class_entry *implementor TSRMLS_DC) +{ + if (implementor->type == ZEND_USER_CLASS && + !instanceof_function(implementor, date_ce_date TSRMLS_CC) && + !instanceof_function(implementor, date_ce_immutable TSRMLS_CC) + ) { + zend_error(E_ERROR, "DateTimeInterface can't be implemented by user classes"); + } + + return SUCCESS; +} + static void date_register_classes(TSRMLS_D) { zend_class_entry ce_date, ce_immutable, ce_timezone, ce_interval, ce_period, ce_interface; INIT_CLASS_ENTRY(ce_interface, "DateTimeInterface", date_funcs_interface); date_ce_interface = zend_register_internal_interface(&ce_interface TSRMLS_CC); + date_ce_interface->interface_gets_implemented = implement_date_interface_handler; INIT_CLASS_ENTRY(ce_date, "DateTime", date_funcs_date); ce_date.create_object = date_object_new_date; @@ -3612,13 +3625,13 @@ PHP_FUNCTION(date_diff) php_interval_obj *interval; long absolute = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_date, &object2, date_ce_date, &absolute) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } dateobj1 = (php_date_obj *) zend_object_store_get_object(object1 TSRMLS_CC); dateobj2 = (php_date_obj *) zend_object_store_get_object(object2 TSRMLS_CC); - DATE_CHECK_INITIALIZED(dateobj1->time, DateTime); - DATE_CHECK_INITIALIZED(dateobj2->time, DateTime); + DATE_CHECK_INITIALIZED(dateobj1->time, DateTimeInterface); + DATE_CHECK_INITIALIZED(dateobj2->time, DateTimeInterface); timelib_update_ts(dateobj1->time, NULL); timelib_update_ts(dateobj2->time, NULL); @@ -4396,7 +4409,7 @@ PHP_METHOD(DatePeriod, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOl|l", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_date, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &isostr, &isostr_len, &options) == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments."); zend_restore_error_handling(&error_handling TSRMLS_CC); -- cgit v1.2.1 From 5137cb5f0ccdeb78d6db25f6045b2c520463a38f Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Thu, 2 Jan 2014 12:45:48 +0000 Subject: Fixed (some of) add/sub. This worked in PHP 5.4 already, but with the introduction of DateTimeImmutable this code was not correctly merged. --- ext/date/php_date.c | 48 ++++++++---------------------------------------- 1 file changed, 8 insertions(+), 40 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cd3bf745dc..d96428d5e5 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3137,33 +3137,16 @@ static void php_date_add(zval *object, zval *interval, zval *return_value TSRMLS { php_date_obj *dateobj; php_interval_obj *intobj; - int bias = 1; + timelib_time *new_time; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); - if (intobj->diff->have_weekday_relative || intobj->diff->have_special_relative) { - memcpy(&dateobj->time->relative, intobj->diff, sizeof(struct timelib_rel_time)); - } else { - if (intobj->diff->invert) { - bias = -1; - } - memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); - dateobj->time->relative.y = intobj->diff->y * bias; - dateobj->time->relative.m = intobj->diff->m * bias; - dateobj->time->relative.d = intobj->diff->d * bias; - dateobj->time->relative.h = intobj->diff->h * bias; - dateobj->time->relative.i = intobj->diff->i * bias; - dateobj->time->relative.s = intobj->diff->s * bias; - } - dateobj->time->have_relative = 1; - dateobj->time->sse_uptodate = 0; - - timelib_update_ts(dateobj->time, NULL); - timelib_update_from_sse(dateobj->time); - dateobj->time->have_relative = 0; + new_time = timelib_add(dateobj->time, intobj->diff); + timelib_time_dtor(dateobj->time); + dateobj->time = new_time; } /* {{{ proto DateTime date_add(DateTime object, DateInterval interval) @@ -3204,7 +3187,7 @@ static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS { php_date_obj *dateobj; php_interval_obj *intobj; - int bias = 1; + timelib_time *new_time; dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); @@ -3216,24 +3199,9 @@ static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS return; } - if (intobj->diff->invert) { - bias = -1; - } - - memset(&dateobj->time->relative, 0, sizeof(struct timelib_rel_time)); - dateobj->time->relative.y = 0 - (intobj->diff->y * bias); - dateobj->time->relative.m = 0 - (intobj->diff->m * bias); - dateobj->time->relative.d = 0 - (intobj->diff->d * bias); - dateobj->time->relative.h = 0 - (intobj->diff->h * bias); - dateobj->time->relative.i = 0 - (intobj->diff->i * bias); - dateobj->time->relative.s = 0 - (intobj->diff->s * bias); - dateobj->time->have_relative = 1; - dateobj->time->sse_uptodate = 0; - - timelib_update_ts(dateobj->time, NULL); - timelib_update_from_sse(dateobj->time); - - dateobj->time->have_relative = 0; + new_time = timelib_sub(dateobj->time, intobj->diff); + timelib_time_dtor(dateobj->time); + dateobj->time = new_time; } /* {{{ proto DateTime date_sub(DateTime object, DateInterval interval) -- cgit v1.2.1 From c0d060f5c02db168f1de895b41afffbc6e3cacfb Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 3 Jan 2014 11:04:26 +0800 Subject: Bump year --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2bb555a68b..1655057212 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | -- cgit v1.2.1 From 47c902777297ce895aa915c13efdb00881af3669 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 3 Jan 2014 11:06:16 +0800 Subject: Bump year --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index d96428d5e5..c069e0ccae 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | -- cgit v1.2.1 From c081ce628f0d76d44784d7bb8e06428b06142ac0 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 3 Jan 2014 11:08:10 +0800 Subject: Bump year --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index d96428d5e5..c069e0ccae 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | -- cgit v1.2.1 From 22dba2f5f3211efe6c3b9bb24734c811ca64c68c Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sun, 26 Jan 2014 13:58:13 +0100 Subject: Fixed bug #45543: DateTime::setTimezone can not set timezones without ID. --- ext/date/php_date.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1655057212..c0566334db 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2992,11 +2992,18 @@ PHP_FUNCTION(date_timezone_set) dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); - if (tzobj->type != TIMELIB_ZONETYPE_ID) { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this for zones with ID for now"); - return; + + switch (tzobj->type) { + case TIMELIB_ZONETYPE_OFFSET: + timelib_set_timezone_from_offset(dateobj->time, tzobj->tzi.utc_offset); + break; + case TIMELIB_ZONETYPE_ABBR: + timelib_set_timezone_from_abbr(dateobj->time, tzobj->tzi.z); + break; + case TIMELIB_ZONETYPE_ID: + timelib_set_timezone(dateobj->time, tzobj->tzi.tz); + break; } - timelib_set_timezone(dateobj->time, tzobj->tzi.tz); timelib_unixtime2local(dateobj->time, dateobj->time->sse); RETURN_ZVAL(object, 1, 0); -- cgit v1.2.1 From d67639643598781d70452f690a645dc8ce6bd3c3 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Wed, 5 Feb 2014 21:00:13 -0500 Subject: Implemented feature #45528: Allow the DateTimeZone constructor to accept timezones per offset too. --- ext/date/php_date.c | 112 +++++++++++++++++++--------------------------------- 1 file changed, 40 insertions(+), 72 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 0e21baffa6..a61d9db3c1 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2297,7 +2297,7 @@ static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC) case TIMELIB_ZONETYPE_ABBR: new_obj->tzi.z.utc_offset = old_obj->tzi.z.utc_offset; new_obj->tzi.z.dst = old_obj->tzi.z.dst; - new_obj->tzi.z.abbr = old_obj->tzi.z.abbr; + new_obj->tzi.z.abbr = strdup(old_obj->tzi.z.abbr); break; } @@ -3238,6 +3238,26 @@ PHP_METHOD(DateTimeImmutable, sub) } /* }}} */ +static void set_timezone_from_timelib_time(php_timezone_obj *tzobj, timelib_time *t) +{ + tzobj->initialized = 1; + tzobj->type = t->zone_type; + switch (t->zone_type) { + case TIMELIB_ZONETYPE_ID: + tzobj->tzi.tz = t->tz_info; + break; + case TIMELIB_ZONETYPE_OFFSET: + tzobj->tzi.utc_offset = t->z; + break; + case TIMELIB_ZONETYPE_ABBR: + tzobj->tzi.z.utc_offset = t->z; + tzobj->tzi.z.dst = t->dst; + tzobj->tzi.z.abbr = strdup(t->tz_abbr); + break; + } +} + + /* {{{ proto DateTimeZone date_timezone_get(DateTimeInterface object) Return new DateTimeZone object relative to give DateTime */ @@ -3255,21 +3275,7 @@ PHP_FUNCTION(date_timezone_get) if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - tzobj->initialized = 1; - tzobj->type = dateobj->time->zone_type; - switch (dateobj->time->zone_type) { - case TIMELIB_ZONETYPE_ID: - tzobj->tzi.tz = dateobj->time->tz_info; - break; - case TIMELIB_ZONETYPE_OFFSET: - tzobj->tzi.utc_offset = dateobj->time->z; - break; - case TIMELIB_ZONETYPE_ABBR: - tzobj->tzi.z.utc_offset = dateobj->time->z; - tzobj->tzi.z.dst = dateobj->time->dst; - tzobj->tzi.z.abbr = strdup(dateobj->time->tz_abbr); - break; - } + set_timezone_from_timelib_time(tzobj, dateobj->time); } else { RETURN_FALSE; } @@ -3620,23 +3626,21 @@ PHP_FUNCTION(date_diff) } /* }}} */ -static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_DC) +static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz TSRMLS_DC) { - char *tzid; - - *tzi = NULL; - - if ((tzid = timelib_timezone_id_from_abbr(tz, -1, 0))) { - *tzi = php_date_parse_tzfile(tzid, DATE_TIMEZONEDB TSRMLS_CC); + timelib_time *dummy_t = ecalloc(1, sizeof(timelib_time)); + int dst, not_found; + char *orig_tz = tz; + + dummy_t->z = timelib_parse_zone(&tz, &dst, dummy_t, ¬_found, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); + if (not_found) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", orig_tz); + efree(dummy_t); + return FAILURE; } else { - *tzi = php_date_parse_tzfile(tz, DATE_TIMEZONEDB TSRMLS_CC); - } - - if (*tzi) { + set_timezone_from_timelib_time(tzobj, dummy_t TSRMLS_CC); + efree(dummy_t); return SUCCESS; - } else { - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", tz); - return FAILURE; } } @@ -3647,19 +3651,15 @@ PHP_FUNCTION(timezone_open) { char *tz; int tz_len; - timelib_tzinfo *tzi = NULL; php_timezone_obj *tzobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len) == FAILURE) { RETURN_FALSE; } - if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) { + tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); + if (SUCCESS != timezone_initialize(tzobj, tz TSRMLS_CC)) { RETURN_FALSE; } - tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); - tzobj->type = TIMELIB_ZONETYPE_ID; - tzobj->tzi.tz = tzi; - tzobj->initialized = 1; } /* }}} */ @@ -3670,18 +3670,13 @@ PHP_METHOD(DateTimeZone, __construct) { char *tz; int tz_len; - timelib_tzinfo *tzi = NULL; php_timezone_obj *tzobj; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { - if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) { - tzobj = zend_object_store_get_object(getThis() TSRMLS_CC); - tzobj->type = TIMELIB_ZONETYPE_ID; - tzobj->tzi.tz = tzi; - tzobj->initialized = 1; - } else { + tzobj = zend_object_store_get_object(getThis() TSRMLS_CC); + if (FAILURE == timezone_initialize(tzobj, tz TSRMLS_CC)) { ZVAL_NULL(getThis()); } } @@ -3693,39 +3688,12 @@ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timez { zval **z_timezone = NULL; zval **z_timezone_type = NULL; - timelib_tzinfo *tzi; if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS) { if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS) { convert_to_long(*z_timezone_type); - switch (Z_LVAL_PP(z_timezone_type)) { - case TIMELIB_ZONETYPE_OFFSET: { - char *offset, *offset_start; - - offset = emalloc(sizeof(char) * (Z_STRLEN_PP(z_timezone) + 1)); - memmove(offset, Z_STRVAL_PP(z_timezone), Z_STRLEN_PP(z_timezone)+1); - offset_start = offset; - - ++offset; - if(*offset_start == '+'){ - (*tzobj)->tzi.utc_offset = -1 * timelib_parse_tz_cor(&offset); - } else { - (*tzobj)->tzi.utc_offset = timelib_parse_tz_cor(&offset); - } - efree(offset_start); - (*tzobj)->type = TIMELIB_ZONETYPE_OFFSET; - (*tzobj)->initialized = 1; - return SUCCESS; - break; - } - case TIMELIB_ZONETYPE_ABBR: - case TIMELIB_ZONETYPE_ID: - if (SUCCESS == timezone_initialize(&tzi, Z_STRVAL_PP(z_timezone) TSRMLS_CC)) { - (*tzobj)->type = TIMELIB_ZONETYPE_ID; - (*tzobj)->tzi.tz = tzi; - (*tzobj)->initialized = 1; - return SUCCESS; - } + if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_PP(z_timezone) TSRMLS_CC)) { + return SUCCESS; } } } -- cgit v1.2.1 From f4cfaf36e23ca47da3e352e1c60909104c059647 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 10 Feb 2014 10:04:30 +0400 Subject: Use better data structures (incomplete) --- ext/date/php_date.c | 779 +++++++++++++++++++++++++--------------------------- 1 file changed, 372 insertions(+), 407 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index c069e0ccae..105d0ad6d4 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -600,7 +600,7 @@ static zend_object_handlers date_object_handlers_period; RETURN_FALSE; \ } \ } \ - obj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); \ + obj = (php_date_obj *) Z_OBJ_P(object); \ #define DATE_CHECK_INITIALIZED(member, class_name) \ if (!(member)) { \ @@ -608,30 +608,30 @@ static zend_object_handlers date_object_handlers_period; RETURN_FALSE; \ } -static void date_object_free_storage_date(void *object TSRMLS_DC); -static void date_object_free_storage_timezone(void *object TSRMLS_DC); -static void date_object_free_storage_interval(void *object TSRMLS_DC); -static void date_object_free_storage_period(void *object TSRMLS_DC); +static void date_object_free_storage_date(zend_object *object TSRMLS_DC); +static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC); +static void date_object_free_storage_interval(zend_object *object TSRMLS_DC); +static void date_object_free_storage_period(zend_object *object TSRMLS_DC); -static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_new_interval(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_new_period(zend_class_entry *class_type TSRMLS_DC); +static zend_object *date_object_new_date(zend_class_entry *class_type TSRMLS_DC); +static zend_object *date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC); +static zend_object *date_object_new_interval(zend_class_entry *class_type TSRMLS_DC); +static zend_object *date_object_new_period(zend_class_entry *class_type TSRMLS_DC); -static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC); -static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC); -static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC); -static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC); +static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC); +static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC); +static zend_object *date_object_clone_interval(zval *this_ptr TSRMLS_DC); +static zend_object *date_object_clone_period(zval *this_ptr TSRMLS_DC); static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC); -static HashTable *date_object_get_gc(zval *object, zval ***table, int *n TSRMLS_DC); +static HashTable *date_object_get_gc(zval *object, zval **table, int *n TSRMLS_DC); static HashTable *date_object_get_properties(zval *object TSRMLS_DC); -static HashTable *date_object_get_gc_interval(zval *object, zval ***table, int *n TSRMLS_DC); +static HashTable *date_object_get_gc_interval(zval *object, zval **table, int *n TSRMLS_DC); static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC); -static HashTable *date_object_get_gc_period(zval *object, zval ***table, int *n TSRMLS_DC); +static HashTable *date_object_get_gc_period(zval *object, zval **table, int *n TSRMLS_DC); static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC); static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC); -static HashTable *date_object_get_gc_timezone(zval *object, zval ***table, int *n TSRMLS_DC); +static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC); zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC); void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); @@ -671,11 +671,11 @@ static PHP_GINIT_FUNCTION(date) /* }}} */ -static void _php_date_tzinfo_dtor(void *tzinfo) +static void _php_date_tzinfo_dtor(zval *zv) { - timelib_tzinfo **tzi = (timelib_tzinfo **)tzinfo; + timelib_tzinfo *tzi = (timelib_tzinfo*)Z_PTR_P(zv); - timelib_tzinfo_dtor(*tzi); + timelib_tzinfo_dtor(tzi); } /* {{{ PHP_RINIT_FUNCTION */ @@ -894,20 +894,20 @@ PHP_MINFO_FUNCTION(date) /* {{{ Timezone Cache functions */ static timelib_tzinfo *php_date_parse_tzfile(char *formal_tzname, const timelib_tzdb *tzdb TSRMLS_DC) { - timelib_tzinfo *tzi, **ptzi; + timelib_tzinfo *tzi; if(!DATEG(tzcache)) { ALLOC_HASHTABLE(DATEG(tzcache)); zend_hash_init(DATEG(tzcache), 4, NULL, _php_date_tzinfo_dtor, 0); } - if (zend_hash_find(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void **) &ptzi) == SUCCESS) { - return *ptzi; + if ((tzi = zend_hash_str_find_ptr(DATEG(tzcache), formal_tzname, strlen(formal_tzname))) != NULL) { + return tzi; } tzi = timelib_parse_tzfile(formal_tzname, tzdb); if (tzi) { - zend_hash_add(DATEG(tzcache), formal_tzname, strlen(formal_tzname) + 1, (void *) &tzi, sizeof(timelib_tzinfo*), NULL); + zend_hash_str_add_ptr(DATEG(tzcache), formal_tzname, strlen(formal_tzname), tzi); } return tzi; } @@ -1220,7 +1220,8 @@ static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) string = php_format_date(format, format_len, ts, localtime TSRMLS_CC); - RETVAL_STRING(string, 0); +//??? RETVAL_STRING(string, 0); + RETVAL_STRING(string); } /* }}} */ @@ -1702,7 +1703,8 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) if (real_len && real_len != buf_len) { buf = (char *) erealloc(buf, real_len + 1); - RETURN_STRINGL(buf, real_len, 0); +//??? RETURN_STRINGL(buf, real_len, 0); + RETURN_STRINGL(buf, real_len); } efree(buf); RETURN_FALSE; @@ -1839,7 +1841,7 @@ PHP_FUNCTION(getdate) typedef struct { zend_object_iterator intern; zval *date_period_zval; - zval *current; + zval current; php_period_obj *object; int current_index; } date_period_it; @@ -1849,9 +1851,9 @@ static void date_period_it_invalidate_current(zend_object_iterator *iter TSRMLS_ { date_period_it *iterator = (date_period_it *)iter; - if (iterator->current) { + if (Z_TYPE(iterator->current) != IS_UNDEF) { zval_ptr_dtor(&iterator->current); - iterator->current = NULL; + ZVAL_UNDEF(&iterator->current); } } /* }}} */ @@ -1864,7 +1866,7 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) date_period_it_invalidate_current(iter TSRMLS_CC); - zval_ptr_dtor(&iterator->date_period_zval); + zval_ptr_dtor(iterator->date_period_zval); efree(iterator); } @@ -1897,7 +1899,7 @@ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) /* {{{ date_period_it_current_data */ -static void date_period_it_current_data(zend_object_iterator *iter, zval ***data TSRMLS_DC) +static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; php_period_obj *object = iterator->object; @@ -1905,9 +1907,8 @@ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data php_date_obj *newdateobj; /* Create new object */ - MAKE_STD_ZVAL(iterator->current); - php_date_instantiate(object->start_ce, iterator->current TSRMLS_CC); - newdateobj = (php_date_obj *) zend_object_store_get_object(iterator->current TSRMLS_CC); + php_date_instantiate(object->start_ce, &iterator->current TSRMLS_CC); + newdateobj = (php_date_obj *) Z_OBJ(iterator->current); newdateobj->time = timelib_time_ctor(); *newdateobj->time = *it_time; if (it_time->tz_abbr) { @@ -1917,7 +1918,7 @@ static void date_period_it_current_data(zend_object_iterator *iter, zval ***data newdateobj->time->tz_info = it_time->tz_info; } - *data = &iterator->current; + return &iterator->current; } /* }}} */ @@ -1973,7 +1974,7 @@ zend_object_iterator_funcs date_period_it_funcs = { zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { date_period_it *iterator = emalloc(sizeof(date_period_it)); - php_period_obj *dpobj = (php_period_obj *)zend_object_store_get_object(object TSRMLS_CC); + php_period_obj *dpobj = (php_period_obj *)Z_OBJ_P(object); if (by_ref) { zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); @@ -1984,7 +1985,7 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval iterator->intern.funcs = &date_period_it_funcs; iterator->date_period_zval = object; iterator->object = dpobj; - iterator->current = NULL; + ZVAL_UNDEF(&iterator->current); return (zend_object_iterator*)iterator; } @@ -2011,8 +2012,9 @@ static void date_register_classes(TSRMLS_D) INIT_CLASS_ENTRY(ce_date, "DateTime", date_funcs_date); ce_date.create_object = date_object_new_date; - date_ce_date = zend_register_internal_class_ex(&ce_date, NULL, NULL TSRMLS_CC); + date_ce_date = zend_register_internal_class_ex(&ce_date, NULL TSRMLS_CC); memcpy(&date_object_handlers_date, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_date.free_obj = date_object_free_storage_date; date_object_handlers_date.clone_obj = date_object_clone_date; date_object_handlers_date.compare_objects = date_object_compare_date; date_object_handlers_date.get_properties = date_object_get_properties; @@ -2036,7 +2038,7 @@ static void date_register_classes(TSRMLS_D) INIT_CLASS_ENTRY(ce_immutable, "DateTimeImmutable", date_funcs_immutable); ce_immutable.create_object = date_object_new_date; - date_ce_immutable = zend_register_internal_class_ex(&ce_immutable, NULL, NULL TSRMLS_CC); + date_ce_immutable = zend_register_internal_class_ex(&ce_immutable, NULL TSRMLS_CC); memcpy(&date_object_handlers_immutable, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); date_object_handlers_immutable.clone_obj = date_object_clone_date; date_object_handlers_immutable.compare_objects = date_object_compare_date; @@ -2045,8 +2047,9 @@ static void date_register_classes(TSRMLS_D) INIT_CLASS_ENTRY(ce_timezone, "DateTimeZone", date_funcs_timezone); ce_timezone.create_object = date_object_new_timezone; - date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL, NULL TSRMLS_CC); + date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL TSRMLS_CC); memcpy(&date_object_handlers_timezone, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_timezone.free_obj = date_object_free_storage_timezone; date_object_handlers_timezone.clone_obj = date_object_clone_timezone; date_object_handlers_timezone.get_properties = date_object_get_properties_timezone; date_object_handlers_timezone.get_gc = date_object_get_gc_timezone; @@ -2071,8 +2074,9 @@ static void date_register_classes(TSRMLS_D) INIT_CLASS_ENTRY(ce_interval, "DateInterval", date_funcs_interval); ce_interval.create_object = date_object_new_interval; - date_ce_interval = zend_register_internal_class_ex(&ce_interval, NULL, NULL TSRMLS_CC); + date_ce_interval = zend_register_internal_class_ex(&ce_interval, NULL TSRMLS_CC); memcpy(&date_object_handlers_interval, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_interval.free_obj = date_object_free_storage_interval; date_object_handlers_interval.clone_obj = date_object_clone_interval; date_object_handlers_interval.read_property = date_interval_read_property; date_object_handlers_interval.write_property = date_interval_write_property; @@ -2082,11 +2086,12 @@ static void date_register_classes(TSRMLS_D) INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period); ce_period.create_object = date_object_new_period; - date_ce_period = zend_register_internal_class_ex(&ce_period, NULL, NULL TSRMLS_CC); + date_ce_period = zend_register_internal_class_ex(&ce_period, NULL TSRMLS_CC); date_ce_period->get_iterator = date_object_period_get_iterator; date_ce_period->iterator_funcs.funcs = &date_period_it_funcs; zend_class_implements(date_ce_period TSRMLS_CC, 1, zend_ce_traversable); memcpy(&date_object_handlers_period, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_period.free_obj = date_object_free_storage_period; date_object_handlers_period.clone_obj = date_object_clone_period; date_object_handlers_period.get_properties = date_object_get_properties_period; date_object_handlers_period.get_property_ptr_ptr = NULL; @@ -2100,40 +2105,33 @@ static void date_register_classes(TSRMLS_D) REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); } -static inline zend_object_value date_object_new_date_ex(zend_class_entry *class_type, php_date_obj **ptr TSRMLS_DC) +static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type TSRMLS_DC) { php_date_obj *intern; - zend_object_value retval; intern = emalloc(sizeof(php_date_obj)); memset(intern, 0, sizeof(php_date_obj)); - if (ptr) { - *ptr = intern; - } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); + intern->std.handlers = &date_object_handlers_date; - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_date, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_date; - - return retval; + return (zend_object*)intern; } -static zend_object_value date_object_new_date(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_date(zend_class_entry *class_type TSRMLS_DC) { - return date_object_new_date_ex(class_type, NULL TSRMLS_CC); + return date_object_new_date_ex(class_type TSRMLS_CC); } -static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) { - php_date_obj *new_obj = NULL; - php_date_obj *old_obj = (php_date_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_date_ex(old_obj->std.ce, &new_obj TSRMLS_CC); + php_date_obj *old_obj = (php_date_obj *)Z_OBJ_P(this_ptr); + php_date_obj *new_obj = (php_date_obj*)date_object_new_date_ex(old_obj->std.ce TSRMLS_CC); - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); + zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->time) { - return new_ov; + return (zend_object*)new_obj; } /* this should probably moved to a new `timelib_time *timelime_time_clone(timelib_time *)` */ @@ -2146,26 +2144,20 @@ static zend_object_value date_object_clone_date(zval *this_ptr TSRMLS_DC) new_obj->time->tz_info = old_obj->time->tz_info; } - return new_ov; + return (zend_object*)new_obj; } -static zval* date_clone_immutable(zval *object TSRMLS_DC) +static void date_clone_immutable(zval *object, zval *new_object TSRMLS_DC) { - zval *new_object; - - ALLOC_ZVAL(new_object); - Z_OBJVAL_P(new_object) = date_object_clone_date(object TSRMLS_CC); - Z_SET_REFCOUNT_P(new_object, 1); - Z_SET_ISREF_P(new_object); - Z_TYPE_P(new_object) = IS_OBJECT; - - return new_object; + ZVAL_OBJ(new_object, date_object_clone_date(object TSRMLS_CC)); +//??? Z_SET_REFCOUNT_P(new_object, 1); +//??? Z_SET_ISREF_P(new_object); } static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) { - php_date_obj *o1 = zend_object_store_get_object(d1 TSRMLS_CC); - php_date_obj *o2 = zend_object_store_get_object(d2 TSRMLS_CC); + php_date_obj *o1 = (php_date_obj *)Z_OBJ_P(d1); + php_date_obj *o2 = (php_date_obj *)Z_OBJ_P(d2); if (!o1->time || !o2->time) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to compare an incomplete DateTime or DateTimeImmutable object"); @@ -2181,14 +2173,14 @@ static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) return (o1->time->sse == o2->time->sse) ? 0 : ((o1->time->sse < o2->time->sse) ? -1 : 1); } -static HashTable *date_object_get_gc(zval *object, zval ***table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc(zval *object, zval **table, int *n TSRMLS_DC) { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); } -static HashTable *date_object_get_gc_timezone(zval *object, zval ***table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC) { *table = NULL; @@ -2199,11 +2191,11 @@ static HashTable *date_object_get_gc_timezone(zval *object, zval ***table, int * static HashTable *date_object_get_properties(zval *object TSRMLS_DC) { HashTable *props; - zval *zv; + zval zv; php_date_obj *dateobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *)Z_OBJ_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2212,20 +2204,18 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) } /* first we add the date and time in ISO format */ - MAKE_STD_ZVAL(zv); - ZVAL_STRING(zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1), 0); - zend_hash_update(props, "date", 5, &zv, sizeof(zv), NULL); +//??? ZVAL_STRING(zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1), 0); + ZVAL_STRING(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1)); + zend_hash_str_update(props, "date", sizeof("date")-1, &zv); /* then we add the timezone name (or similar) */ if (dateobj->time->is_localtime) { - MAKE_STD_ZVAL(zv); - ZVAL_LONG(zv, dateobj->time->zone_type); - zend_hash_update(props, "timezone_type", 14, &zv, sizeof(zv), NULL); + ZVAL_LONG(&zv, dateobj->time->zone_type); + zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); - MAKE_STD_ZVAL(zv); switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: - ZVAL_STRING(zv, dateobj->time->tz_info->name, 1); + ZVAL_STRING(&zv, dateobj->time->tz_info->name); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); @@ -2236,53 +2226,47 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) abs(utc_offset / 60), abs((utc_offset % 60))); - ZVAL_STRING(zv, tmpstr, 0); +//??? ZVAL_STRING(zv, tmpstr, 0); + ZVAL_STRING(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: - ZVAL_STRING(zv, dateobj->time->tz_abbr, 1); + ZVAL_STRING(&zv, dateobj->time->tz_abbr); break; } - zend_hash_update(props, "timezone", 9, &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "timezone", sizeof("timezone")-1, &zv); } return props; } -static inline zend_object_value date_object_new_timezone_ex(zend_class_entry *class_type, php_timezone_obj **ptr TSRMLS_DC) +static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_type TSRMLS_DC) { php_timezone_obj *intern; - zend_object_value retval; intern = emalloc(sizeof(php_timezone_obj)); memset(intern, 0, sizeof(php_timezone_obj)); - if (ptr) { - *ptr = intern; - } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); + intern->std.handlers = &date_object_handlers_timezone; - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_timezone, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_timezone; - - return retval; + return (zend_object*)intern; } -static zend_object_value date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) { - return date_object_new_timezone_ex(class_type, NULL TSRMLS_CC); + return date_object_new_timezone_ex(class_type TSRMLS_CC); } -static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC) { - php_timezone_obj *new_obj = NULL; - php_timezone_obj *old_obj = (php_timezone_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_timezone_ex(old_obj->std.ce, &new_obj TSRMLS_CC); + php_timezone_obj *old_obj = (php_timezone_obj *) Z_OBJ_P(this_ptr); + php_timezone_obj *new_obj = (php_timezone_obj *) date_object_new_timezone_ex(old_obj->std.ce TSRMLS_CC); - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); + zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->initialized) { - return new_ov; + return (zend_object*)new_obj; } new_obj->type = old_obj->type; @@ -2301,17 +2285,17 @@ static zend_object_value date_object_clone_timezone(zval *this_ptr TSRMLS_DC) break; } - return new_ov; + return (zend_object*)new_obj; } static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) { HashTable *props; - zval *zv; + zval zv; php_timezone_obj *tzobj; - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2319,14 +2303,12 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) return props; } - MAKE_STD_ZVAL(zv); - ZVAL_LONG(zv, tzobj->type); - zend_hash_update(props, "timezone_type", 14, &zv, sizeof(zv), NULL); + ZVAL_LONG(&zv, tzobj->type); + zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); - MAKE_STD_ZVAL(zv); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: - ZVAL_STRING(zv, tzobj->tzi.tz->name, 1); + ZVAL_STRING(&zv, tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); @@ -2336,56 +2318,50 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) abs(tzobj->tzi.utc_offset / 60), abs((tzobj->tzi.utc_offset % 60))); - ZVAL_STRING(zv, tmpstr, 0); +//??? ZVAL_STRING(zv, tmpstr, 0); + ZVAL_STRING(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: - ZVAL_STRING(zv, tzobj->tzi.z.abbr, 1); + ZVAL_STRING(&zv, tzobj->tzi.z.abbr); break; } - zend_hash_update(props, "timezone", 9, &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "timezone", sizeof("timezone")-1, &zv); return props; } -static inline zend_object_value date_object_new_interval_ex(zend_class_entry *class_type, php_interval_obj **ptr TSRMLS_DC) +static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_type TSRMLS_DC) { php_interval_obj *intern; - zend_object_value retval; intern = emalloc(sizeof(php_interval_obj)); memset(intern, 0, sizeof(php_interval_obj)); - if (ptr) { - *ptr = intern; - } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); + intern->std.handlers = &date_object_handlers_interval; - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_interval, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_interval; - - return retval; + return (zend_object*)intern; } -static zend_object_value date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) { - return date_object_new_interval_ex(class_type, NULL TSRMLS_CC); + return date_object_new_interval_ex(class_type TSRMLS_CC); } -static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_interval(zval *this_ptr TSRMLS_DC) { - php_interval_obj *new_obj = NULL; - php_interval_obj *old_obj = (php_interval_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_interval_ex(old_obj->std.ce, &new_obj TSRMLS_CC); + php_interval_obj *old_obj = (php_interval_obj *) Z_OBJ_P(this_ptr); + php_interval_obj *new_obj = (php_interval_obj *) date_object_new_interval_ex(old_obj->std.ce TSRMLS_CC); - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); + zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ - return new_ov; + return (zend_object*)new_obj; } -static HashTable *date_object_get_gc_interval(zval *object, zval ***table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_interval(zval *object, zval **table, int *n TSRMLS_DC) { *table = NULL; @@ -2396,10 +2372,10 @@ static HashTable *date_object_get_gc_interval(zval *object, zval ***table, int * static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) { HashTable *props; - zval *zv; + zval zv; php_interval_obj *intervalobj; - intervalobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); + intervalobj = (php_interval_obj *) Z_OBJ_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2408,9 +2384,8 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) } #define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ - MAKE_STD_ZVAL(zv); \ - ZVAL_LONG(zv, (long)intervalobj->diff->f); \ - zend_hash_update(props, n, strlen(n) + 1, &zv, sizeof(zv), NULL); + ZVAL_LONG(&zv, (long)intervalobj->diff->f); \ + zend_hash_str_update(props, n, sizeof(n)-1, &zv); PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); PHP_DATE_INTERVAL_ADD_PROPERTY("m", m); @@ -2425,9 +2400,8 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) if (intervalobj->diff->days != -99999) { PHP_DATE_INTERVAL_ADD_PROPERTY("days", days); } else { - MAKE_STD_ZVAL(zv); - ZVAL_FALSE(zv); - zend_hash_update(props, "days", 5, &zv, sizeof(zv), NULL); + ZVAL_FALSE(&zv); + zend_hash_str_update(props, "days", sizeof("days")-1, &zv); } PHP_DATE_INTERVAL_ADD_PROPERTY("special_type", special.type); PHP_DATE_INTERVAL_ADD_PROPERTY("special_amount", special.amount); @@ -2437,44 +2411,38 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) return props; } -static inline zend_object_value date_object_new_period_ex(zend_class_entry *class_type, php_period_obj **ptr TSRMLS_DC) +static inline zend_object *date_object_new_period_ex(zend_class_entry *class_type TSRMLS_DC) { php_period_obj *intern; - zend_object_value retval; intern = emalloc(sizeof(php_period_obj)); memset(intern, 0, sizeof(php_period_obj)); - if (ptr) { - *ptr = intern; - } zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); +//??? date_object_free_storage_period, NULL TSRMLS_CC); + intern->std.handlers = &date_object_handlers_period; - retval.handle = zend_objects_store_put(intern, (zend_objects_store_dtor_t)zend_objects_destroy_object, (zend_objects_free_object_storage_t) date_object_free_storage_period, NULL TSRMLS_CC); - retval.handlers = &date_object_handlers_period; - - return retval; + return (zend_object*)intern; } -static zend_object_value date_object_new_period(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_period(zend_class_entry *class_type TSRMLS_DC) { - return date_object_new_period_ex(class_type, NULL TSRMLS_CC); + return date_object_new_period_ex(class_type TSRMLS_CC); } -static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_period(zval *this_ptr TSRMLS_DC) { - php_period_obj *new_obj = NULL; - php_period_obj *old_obj = (php_period_obj *) zend_object_store_get_object(this_ptr TSRMLS_CC); - zend_object_value new_ov = date_object_new_period_ex(old_obj->std.ce, &new_obj TSRMLS_CC); + php_period_obj *old_obj = (php_period_obj *) Z_OBJ_P(this_ptr); + php_period_obj *new_obj = (php_period_obj *) date_object_new_period_ex(old_obj->std.ce TSRMLS_CC); - zend_objects_clone_members(&new_obj->std, new_ov, &old_obj->std, Z_OBJ_HANDLE_P(this_ptr) TSRMLS_CC); + zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ - return new_ov; + return (zend_object*)new_obj; } -static void date_object_free_storage_date(void *object TSRMLS_DC) +static void date_object_free_storage_date(zend_object *object TSRMLS_DC) { php_date_obj *intern = (php_date_obj *)object; @@ -2486,7 +2454,7 @@ static void date_object_free_storage_date(void *object TSRMLS_DC) efree(object); } -static void date_object_free_storage_timezone(void *object TSRMLS_DC) +static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) { php_timezone_obj *intern = (php_timezone_obj *)object; @@ -2497,7 +2465,7 @@ static void date_object_free_storage_timezone(void *object TSRMLS_DC) efree(object); } -static void date_object_free_storage_interval(void *object TSRMLS_DC) +static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) { php_interval_obj *intern = (php_interval_obj *)object; @@ -2506,7 +2474,7 @@ static void date_object_free_storage_interval(void *object TSRMLS_DC) efree(object); } -static void date_object_free_storage_period(void *object TSRMLS_DC) +static void date_object_free_storage_period(zend_object *object TSRMLS_DC) { php_period_obj *intern = (php_period_obj *)object; @@ -2532,9 +2500,6 @@ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) { Z_TYPE_P(object) = IS_OBJECT; object_init_ex(object, pce); - Z_SET_REFCOUNT_P(object, 1); - Z_UNSET_ISREF_P(object); - return object; } @@ -2583,7 +2548,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, if (timezone_object) { php_timezone_obj *tzobj; - tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(timezone_object); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: tzi = tzobj->tzi.tz; @@ -2646,7 +2611,7 @@ PHP_FUNCTION(date_create) } php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2666,7 +2631,7 @@ PHP_FUNCTION(date_create_immutable) } php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2686,7 +2651,7 @@ PHP_FUNCTION(date_create_from_format) } php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2706,7 +2671,7 @@ PHP_FUNCTION(date_create_immutable_from_format) } php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2724,7 +2689,7 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + php_date_initialize((php_date_obj*)Z_OBJ_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } @@ -2742,52 +2707,54 @@ PHP_METHOD(DateTimeImmutable, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + php_date_initialize((php_date_obj*)Z_OBJ_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ -static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) +static int php_date_initialize_from_hash(zval *return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) { - zval **z_date = NULL; - zval **z_timezone = NULL; - zval **z_timezone_type = NULL; - zval *tmp_obj = NULL; + zval *z_date; + zval *z_timezone; + zval *z_timezone_type; + zval tmp_obj; timelib_tzinfo *tzi; php_timezone_obj *tzobj; - if (zend_hash_find(myht, "date", 5, (void**) &z_date) == SUCCESS) { - convert_to_string(*z_date); - if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS) { - convert_to_long(*z_timezone_type); - if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS) { - convert_to_string(*z_timezone); - - switch (Z_LVAL_PP(z_timezone_type)) { + z_date = zend_hash_str_find(myht, "date", sizeof("data")-1); + if (z_date) { + convert_to_string(z_date); + z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1); + if (z_timezone_type) { + convert_to_long(z_timezone_type); + z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1); + if (z_timezone) { + convert_to_string(z_timezone); + + switch (Z_LVAL_P(z_timezone_type)) { case TIMELIB_ZONETYPE_OFFSET: case TIMELIB_ZONETYPE_ABBR: { - char *tmp = emalloc(Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2); + char *tmp = emalloc(Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2); int ret; - snprintf(tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 2, "%s %s", Z_STRVAL_PP(z_date), Z_STRVAL_PP(z_timezone)); - ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_PP(z_date) + Z_STRLEN_PP(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); + snprintf(tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2, "%s %s", Z_STRVAL_P(z_date), Z_STRVAL_P(z_timezone)); + ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); efree(tmp); return 1 == ret; } case TIMELIB_ZONETYPE_ID: { int ret; - convert_to_string(*z_timezone); + convert_to_string(z_timezone); - tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); + tzi = php_date_parse_tzfile(Z_STRVAL_P(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); - ALLOC_INIT_ZVAL(tmp_obj); - tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, tmp_obj TSRMLS_CC) TSRMLS_CC); + tzobj = (php_timezone_obj*)Z_OBJ_P(php_date_instantiate(date_ce_timezone, &tmp_obj TSRMLS_CC)); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; - ret = php_date_initialize(*dateobj, Z_STRVAL_PP(z_date), Z_STRLEN_PP(z_date), NULL, tmp_obj, 0 TSRMLS_CC); + ret = php_date_initialize(*dateobj, Z_STRVAL_P(z_date), Z_STRLEN_P(z_date), NULL, &tmp_obj, 0 TSRMLS_CC); zval_ptr_dtor(&tmp_obj); return 1 == ret; } @@ -2813,8 +2780,8 @@ PHP_METHOD(DateTime, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + dateobj = (php_date_obj *) Z_OBJ_P(return_value); + if (!php_date_initialize_from_hash(return_value, &dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } @@ -2835,8 +2802,8 @@ PHP_METHOD(DateTimeImmutable, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + dateobj = (php_date_obj *) Z_OBJ_P(return_value); + if (!php_date_initialize_from_hash(return_value, &dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTimeImmutable object"); } } @@ -2850,11 +2817,11 @@ PHP_METHOD(DateTime, __wakeup) php_date_obj *dateobj; HashTable *myht; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); myht = Z_OBJPROP_P(object); - if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + if (!php_date_initialize_from_hash(return_value, &dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } @@ -2864,23 +2831,21 @@ PHP_METHOD(DateTime, __wakeup) static void zval_from_error_container(zval *z, timelib_error_container *error) { int i; - zval *element; + zval element; add_assoc_long(z, "warning_count", error->warning_count); - MAKE_STD_ZVAL(element); - array_init(element); + array_init(&element); for (i = 0; i < error->warning_count; i++) { - add_index_string(element, error->warning_messages[i].position, error->warning_messages[i].message, 1); + add_index_string(&element, error->warning_messages[i].position, error->warning_messages[i].message, 1); } - add_assoc_zval(z, "warnings", element); + add_assoc_zval(z, "warnings", &element); add_assoc_long(z, "error_count", error->error_count); - MAKE_STD_ZVAL(element); - array_init(element); + array_init(&element); for (i = 0; i < error->error_count; i++) { - add_index_string(element, error->error_messages[i].position, error->error_messages[i].message, 1); + add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message, 1); } - add_assoc_zval(z, "errors", element); + add_assoc_zval(z, "errors", &element); } /* {{{ proto array date_get_last_errors() @@ -2899,7 +2864,7 @@ PHP_FUNCTION(date_get_last_errors) void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time *parsed_time, struct timelib_error_container *error) { - zval *element; + zval element; array_init(return_value); #define PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(name, elem) \ @@ -2950,24 +2915,23 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * } } if (parsed_time->have_relative) { - MAKE_STD_ZVAL(element); - array_init(element); - add_assoc_long(element, "year", parsed_time->relative.y); - add_assoc_long(element, "month", parsed_time->relative.m); - add_assoc_long(element, "day", parsed_time->relative.d); - add_assoc_long(element, "hour", parsed_time->relative.h); - add_assoc_long(element, "minute", parsed_time->relative.i); - add_assoc_long(element, "second", parsed_time->relative.s); + array_init(&element); + add_assoc_long(&element, "year", parsed_time->relative.y); + add_assoc_long(&element, "month", parsed_time->relative.m); + add_assoc_long(&element, "day", parsed_time->relative.d); + add_assoc_long(&element, "hour", parsed_time->relative.h); + add_assoc_long(&element, "minute", parsed_time->relative.i); + add_assoc_long(&element, "second", parsed_time->relative.s); if (parsed_time->relative.have_weekday_relative) { - add_assoc_long(element, "weekday", parsed_time->relative.weekday); + add_assoc_long(&element, "weekday", parsed_time->relative.weekday); } if (parsed_time->relative.have_special_relative && (parsed_time->relative.special.type == TIMELIB_SPECIAL_WEEKDAY)) { - add_assoc_long(element, "weekdays", parsed_time->relative.special.amount); + add_assoc_long(&element, "weekdays", parsed_time->relative.special.amount); } if (parsed_time->relative.first_last_day_of) { - add_assoc_bool(element, parsed_time->relative.first_last_day_of == 1 ? "first_day_of_month" : "last_day_of_month", 1); + add_assoc_bool(&element, parsed_time->relative.first_last_day_of == 1 ? "first_day_of_month" : "last_day_of_month", 1); } - add_assoc_zval(return_value, "relative", element); + add_assoc_zval(return_value, "relative", &element); } timelib_time_dtor(parsed_time); } @@ -3023,9 +2987,10 @@ PHP_FUNCTION(date_format) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interface, &format, &format_len) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime), 0); +//??? RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime), 0); + RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime)); } /* }}} */ @@ -3035,7 +3000,7 @@ static int php_date_modify(zval *object, char *modify, int modify_len TSRMLS_DC) timelib_time *tmp_time; timelib_error_container *err = NULL; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); if (!(dateobj->time)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The DateTime object has not been correctly initialized by its constructor"); @@ -3116,7 +3081,7 @@ PHP_FUNCTION(date_modify) */ PHP_METHOD(DateTimeImmutable, modify) { - zval *object, *new_object; + zval *object, new_object; char *modify; int modify_len; @@ -3124,9 +3089,9 @@ PHP_METHOD(DateTimeImmutable, modify) RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - if (php_date_modify(new_object, modify, modify_len TSRMLS_CC)) { - RETURN_ZVAL(new_object, 0, 1); + date_clone_immutable(object, &new_object TSRMLS_CC); + if (php_date_modify(&new_object, modify, modify_len TSRMLS_CC)) { + RETURN_ZVAL(&new_object, 0, 1); } RETURN_FALSE; @@ -3139,9 +3104,9 @@ static void php_date_add(zval *object, zval *interval, zval *return_value TSRMLS php_interval_obj *intobj; timelib_time *new_time; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); + intobj = (php_interval_obj *) Z_OBJ_P(interval); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); new_time = timelib_add(dateobj->time, intobj->diff); @@ -3170,16 +3135,16 @@ PHP_FUNCTION(date_add) */ PHP_METHOD(DateTimeImmutable, add) { - zval *object, *interval, *new_object; + zval *object, *interval, new_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_add(new_object, interval, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_add(&new_object, interval, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3189,9 +3154,9 @@ static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS php_interval_obj *intobj; timelib_time *new_time; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); + intobj = (php_interval_obj *) Z_OBJ_P(interval); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); if (intobj->diff->have_special_relative) { @@ -3225,16 +3190,16 @@ PHP_FUNCTION(date_sub) */ PHP_METHOD(DateTimeImmutable, sub) { - zval *object, *interval, *new_object; + zval *object, *interval, new_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &interval, date_ce_interval) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_sub(new_object, interval, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_sub(&new_object, interval, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3250,11 +3215,11 @@ PHP_FUNCTION(date_timezone_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); - tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(return_value); tzobj->initialized = 1; tzobj->type = dateobj->time->zone_type; switch (dateobj->time->zone_type) { @@ -3281,9 +3246,9 @@ static void php_date_timezone_set(zval *object, zval *timezone_object, zval *ret php_date_obj *dateobj; php_timezone_obj *tzobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - tzobj = (php_timezone_obj *) zend_object_store_get_object(timezone_object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(timezone_object); if (tzobj->type != TIMELIB_ZONETYPE_ID) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this for zones with ID for now"); return; @@ -3314,17 +3279,17 @@ PHP_FUNCTION(date_timezone_set) */ PHP_METHOD(DateTimeImmutable, setTimezone) { - zval *object, *new_object; + zval *object, new_object; zval *timezone_object; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_immutable, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_timezone_set(new_object, timezone_object, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_timezone_set(&new_object, timezone_object, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3340,7 +3305,7 @@ PHP_FUNCTION(date_offset_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { switch (dateobj->time->zone_type) { @@ -3367,7 +3332,7 @@ static void php_date_time_set(zval *object, long h, long i, long s, zval *return { php_date_obj *dateobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->h = h; dateobj->time->i = i; @@ -3397,17 +3362,17 @@ PHP_FUNCTION(date_time_set) */ PHP_METHOD(DateTimeImmutable, setTime) { - zval *object, *new_object; + zval *object, new_object; long h, i, s = 0; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_time_set(new_object, h, i, s, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_time_set(&new_object, h, i, s, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3415,7 +3380,7 @@ static void php_date_date_set(zval *object, long y, long m, long d, zval *return { php_date_obj *dateobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = m; @@ -3445,17 +3410,17 @@ PHP_FUNCTION(date_date_set) */ PHP_METHOD(DateTimeImmutable, setDate) { - zval *object, *new_object; + zval *object, new_object; long y, m, d; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_date_set(new_object, y, m, d, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_date_set(&new_object, y, m, d, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3463,7 +3428,7 @@ static void php_date_isodate_set(zval *object, long y, long w, long d, zval *ret { php_date_obj *dateobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = 1; @@ -3497,17 +3462,17 @@ PHP_FUNCTION(date_isodate_set) */ PHP_METHOD(DateTimeImmutable, setISODate) { - zval *object, *new_object; + zval *object, new_object; long y, w, d = 1; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_isodate_set(new_object, y, w, d, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_isodate_set(&new_object, y, w, d, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3515,7 +3480,7 @@ static void php_date_timestamp_set(zval *object, long timestamp, zval *return_va { php_date_obj *dateobj; - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp); timelib_update_ts(dateobj->time, NULL); @@ -3543,17 +3508,17 @@ PHP_FUNCTION(date_timestamp_set) */ PHP_METHOD(DateTimeImmutable, setTimestamp) { - zval *object, *new_object; + zval *object, new_object; long timestamp; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_immutable, ×tamp) == FAILURE) { RETURN_FALSE; } - new_object = date_clone_immutable(object TSRMLS_CC); - php_date_timestamp_set(new_object, timestamp, return_value TSRMLS_CC); + date_clone_immutable(object, &new_object TSRMLS_CC); + php_date_timestamp_set(&new_object, timestamp, return_value TSRMLS_CC); - RETURN_ZVAL(new_object, 0, 1); + RETURN_ZVAL(&new_object, 0, 1); } /* }}} */ @@ -3570,7 +3535,7 @@ PHP_FUNCTION(date_timestamp_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) zend_object_store_get_object(object TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_update_ts(dateobj->time, NULL); @@ -3596,15 +3561,15 @@ PHP_FUNCTION(date_diff) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } - dateobj1 = (php_date_obj *) zend_object_store_get_object(object1 TSRMLS_CC); - dateobj2 = (php_date_obj *) zend_object_store_get_object(object2 TSRMLS_CC); + dateobj1 = (php_date_obj *) Z_OBJ_P(object1 TSRMLS_CC); + dateobj2 = (php_date_obj *) Z_OBJ_P(object2 TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj1->time, DateTimeInterface); DATE_CHECK_INITIALIZED(dateobj2->time, DateTimeInterface); timelib_update_ts(dateobj1->time, NULL); timelib_update_ts(dateobj2->time, NULL); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); - interval = zend_object_store_get_object(return_value TSRMLS_CC); + interval = (php_interval_obj*)Z_OBJ_P(return_value TSRMLS_CC); interval->diff = timelib_diff(dateobj1->time, dateobj2->time); if (absolute) { interval->diff->invert = 0; @@ -3649,7 +3614,7 @@ PHP_FUNCTION(timezone_open) if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) { RETURN_FALSE; } - tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); + tzobj = (php_timezone_obj*)Z_OBJ_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -3670,7 +3635,7 @@ PHP_METHOD(DateTimeZone, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) { - tzobj = zend_object_store_get_object(getThis() TSRMLS_CC); + tzobj = (php_timezone_obj*)Z_OBJ_P(getThis()); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -3684,19 +3649,21 @@ PHP_METHOD(DateTimeZone, __construct) static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC) { - zval **z_timezone = NULL; - zval **z_timezone_type = NULL; + zval *z_timezone; + zval *z_timezone_type; timelib_tzinfo *tzi; - if (zend_hash_find(myht, "timezone_type", 14, (void**) &z_timezone_type) == SUCCESS) { - if (zend_hash_find(myht, "timezone", 9, (void**) &z_timezone) == SUCCESS) { - convert_to_long(*z_timezone_type); - switch (Z_LVAL_PP(z_timezone_type)) { + z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1); + if (z_timezone_type) { + z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1); + if (z_timezone) { + convert_to_long(z_timezone_type); + switch (Z_LVAL_P(z_timezone_type)) { case TIMELIB_ZONETYPE_OFFSET: { char *offset, *offset_start; - offset = emalloc(sizeof(char) * (Z_STRLEN_PP(z_timezone) + 1)); - memmove(offset, Z_STRVAL_PP(z_timezone), Z_STRLEN_PP(z_timezone)+1); + offset = emalloc(sizeof(char) * (Z_STRLEN_P(z_timezone) + 1)); + memmove(offset, Z_STRVAL_P(z_timezone), Z_STRLEN_P(z_timezone)+1); offset_start = offset; ++offset; @@ -3713,7 +3680,7 @@ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timez } case TIMELIB_ZONETYPE_ABBR: case TIMELIB_ZONETYPE_ID: - if (SUCCESS == timezone_initialize(&tzi, Z_STRVAL_PP(z_timezone) TSRMLS_CC)) { + if (SUCCESS == timezone_initialize(&tzi, Z_STRVAL_P(z_timezone) TSRMLS_CC)) { (*tzobj)->type = TIMELIB_ZONETYPE_ID; (*tzobj)->tzi.tz = tzi; (*tzobj)->initialized = 1; @@ -3740,7 +3707,7 @@ PHP_METHOD(DateTimeZone, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); - tzobj = (php_timezone_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(return_value); php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht TSRMLS_CC); } /* }}} */ @@ -3753,7 +3720,7 @@ PHP_METHOD(DateTimeZone, __wakeup) php_timezone_obj *tzobj; HashTable *myht; - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); myht = Z_OBJPROP_P(object); @@ -3772,12 +3739,12 @@ PHP_FUNCTION(timezone_name_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: - RETURN_STRING(tzobj->tzi.tz->name, 1); + RETURN_STRING(tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { char *tmpstr = emalloc(sizeof("UTC+05:00")); @@ -3788,11 +3755,12 @@ PHP_FUNCTION(timezone_name_get) abs(utc_offset / 60), abs((utc_offset % 60))); - RETURN_STRING(tmpstr, 0); +//??? RETURN_STRING(tmpstr, 0); + RETURN_STRING(tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: - RETURN_STRING(tzobj->tzi.z.abbr, 1); + RETURN_STRING(tzobj->tzi.z.abbr); break; } } @@ -3815,7 +3783,7 @@ PHP_FUNCTION(timezone_name_from_abbr) tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst); if (tzid) { - RETURN_STRING(tzid, 1); + RETURN_STRING(tzid); } else { RETURN_FALSE; } @@ -3835,9 +3803,9 @@ PHP_FUNCTION(timezone_offset_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_date) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); - dateobj = (php_date_obj *) zend_object_store_get_object(dateobject TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(dateobject); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); switch (tzobj->type) { @@ -3861,7 +3829,7 @@ PHP_FUNCTION(timezone_offset_get) */ PHP_FUNCTION(timezone_transitions_get) { - zval *object, *element; + zval *object, element; php_timezone_obj *tzobj; unsigned int i, begin = 0, found; long timestamp_begin = LONG_MIN, timestamp_end = LONG_MAX; @@ -3869,31 +3837,29 @@ PHP_FUNCTION(timezone_transitions_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; } #define add_nominal() \ - MAKE_STD_ZVAL(element); \ - array_init(element); \ - add_assoc_long(element, "ts", timestamp_begin); \ - add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0); \ - add_assoc_long(element, "offset", tzobj->tzi.tz->type[0].offset); \ - add_assoc_bool(element, "isdst", tzobj->tzi.tz->type[0].isdst); \ - add_assoc_string(element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \ - add_next_index_zval(return_value, element); + array_init(&element); \ + add_assoc_long(&element, "ts", timestamp_begin); \ + add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0); \ + add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \ + add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \ + add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \ + add_next_index_zval(return_value, &element); #define add(i,ts) \ - MAKE_STD_ZVAL(element); \ - array_init(element); \ - add_assoc_long(element, "ts", ts); \ - add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC), 0); \ - add_assoc_long(element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ - add_assoc_bool(element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ - add_assoc_string(element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \ - add_next_index_zval(return_value, element); + array_init(&element); \ + add_assoc_long(&element, "ts", ts); \ + add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC), 0); \ + add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ + add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ + add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \ + add_next_index_zval(return_value, &element); #define add_last() add(tzobj->tzi.tz->timecnt - 1, timestamp_begin) @@ -3949,7 +3915,7 @@ PHP_FUNCTION(timezone_location_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC); + tzobj = (php_timezone_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; @@ -4012,7 +3978,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze key = NULL; } - obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC); + obj = (php_interval_obj *)Z_OBJ_P(object); if (!obj->initialized) { retval = (zend_get_std_object_handlers())->read_property(object, member, type, key TSRMLS_CC); @@ -4046,7 +4012,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze return retval; } while(0); - ALLOC_INIT_ZVAL(retval); +//??? ALLOC_INIT_ZVAL(retval); Z_SET_REFCOUNT_P(retval, 0); if (value != -99999) { @@ -4077,7 +4043,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const key = NULL; } - obj = (php_interval_obj *)zend_objects_get_address(object TSRMLS_CC); + obj = (php_interval_obj *)Z_OBJ_P(object); if (!obj->initialized) { (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); @@ -4135,7 +4101,7 @@ PHP_METHOD(DateInterval, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &interval_string, &interval_string_length) == SUCCESS) { if (date_interval_initialize(&reltime, interval_string, interval_string_length TSRMLS_CC) == SUCCESS) { - diobj = zend_object_store_get_object(getThis() TSRMLS_CC); + diobj = (php_interval_obj *)Z_OBJ_P(getThis()); diobj->diff = reltime; diobj->initialized = 1; } else { @@ -4153,10 +4119,10 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter #define PHP_DATE_INTERVAL_READ_PROPERTY(element, member, itype, def) \ do { \ - zval **z_arg = NULL; \ - if (zend_hash_find(myht, element, strlen(element) + 1, (void**) &z_arg) == SUCCESS) { \ - convert_to_long(*z_arg); \ - (*intobj)->diff->member = (itype)Z_LVAL_PP(z_arg); \ + zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ + if (z_arg) { \ + convert_to_long(z_arg); \ + (*intobj)->diff->member = (itype)Z_LVAL_P(z_arg); \ } else { \ (*intobj)->diff->member = (itype)def; \ } \ @@ -4164,10 +4130,10 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter #define PHP_DATE_INTERVAL_READ_PROPERTY_I64(element, member) \ do { \ - zval **z_arg = NULL; \ - if (zend_hash_find(myht, element, strlen(element) + 1, (void**) &z_arg) == SUCCESS) { \ - convert_to_string(*z_arg); \ - DATE_A64I((*intobj)->diff->member, Z_STRVAL_PP(z_arg)); \ + zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ + if (z_arg) { \ + convert_to_string(z_arg); \ + DATE_A64I((*intobj)->diff->member, Z_STRVAL_P(z_arg)); \ } else { \ (*intobj)->diff->member = -1LL; \ } \ @@ -4208,7 +4174,7 @@ PHP_METHOD(DateInterval, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); - intobj = (php_interval_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + intobj = (php_interval_obj *) Z_OBJ_P(return_value); php_date_interval_initialize_from_hash(&return_value, &intobj, myht TSRMLS_CC); } /* }}} */ @@ -4221,7 +4187,7 @@ PHP_METHOD(DateInterval, __wakeup) php_interval_obj *intobj; HashTable *myht; - intobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); + intobj = (php_interval_obj *) Z_OBJ_P(object); myht = Z_OBJPROP_P(object); @@ -4246,7 +4212,7 @@ PHP_FUNCTION(date_interval_create_from_date_string) php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); time = timelib_strtotime(time_str, time_str_len, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); - diobj = (php_interval_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + diobj = (php_interval_obj *) Z_OBJ_P(return_value); diobj->diff = timelib_rel_time_clone(&time->relative); diobj->initialized = 1; timelib_time_dtor(time); @@ -4329,10 +4295,11 @@ PHP_FUNCTION(date_interval_format) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interval, &format, &format_len) == FAILURE) { RETURN_FALSE; } - diobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC); + diobj = (php_interval_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval); - RETURN_STRING(date_interval_format(format, format_len, diobj->diff), 0); +//??? RETURN_STRING(date_interval_format(format, format_len, diobj->diff), 0); + RETURN_STRING(date_interval_format(format, format_len, diobj->diff)); } /* }}} */ @@ -4386,7 +4353,7 @@ PHP_METHOD(DatePeriod, __construct) } } - dpobj = zend_object_store_get_object(getThis() TSRMLS_CC); + dpobj = (php_period_obj*)Z_OBJ_P(getThis()); dpobj->current = NULL; if (isostr) { @@ -4410,10 +4377,10 @@ PHP_METHOD(DatePeriod, __construct) dpobj->start_ce = date_ce_date; } else { /* init */ - intobj = (php_interval_obj *) zend_object_store_get_object(interval TSRMLS_CC); + intobj = (php_interval_obj *) Z_OBJ_P(interval); /* start date */ - dateobj = (php_date_obj *) zend_object_store_get_object(start TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(start); clone = timelib_time_ctor(); memcpy(clone, dateobj->time, sizeof(timelib_time)); if (dateobj->time->tz_abbr) { @@ -4430,7 +4397,7 @@ PHP_METHOD(DatePeriod, __construct) /* end date */ if (end) { - dateobj = (php_date_obj *) zend_object_store_get_object(end TSRMLS_CC); + dateobj = (php_date_obj *) Z_OBJ_P(end); clone = timelib_time_clone(dateobj->time); dpobj->end = clone; } @@ -4512,7 +4479,7 @@ PHP_FUNCTION(timezone_version_get) const timelib_tzdb *tzdb; tzdb = DATE_TIMEZONEDB; - RETURN_STRING(tzdb->version, 1); + RETURN_STRING(tzdb->version); } /* }}} */ @@ -4522,31 +4489,30 @@ PHP_FUNCTION(timezone_version_get) PHP_FUNCTION(timezone_abbreviations_list) { const timelib_tz_lookup_table *table, *entry; - zval *element, **abbr_array_pp, *abbr_array; + zval element, *abbr_array_p, abbr_array; table = timelib_timezone_abbreviations_list(); array_init(return_value); entry = table; do { - MAKE_STD_ZVAL(element); - array_init(element); - add_assoc_bool(element, "dst", entry->type); - add_assoc_long(element, "offset", entry->gmtoffset); + array_init(&element); + add_assoc_bool(&element, "dst", entry->type); + add_assoc_long(&element, "offset", entry->gmtoffset); if (entry->full_tz_name) { - add_assoc_string(element, "timezone_id", entry->full_tz_name, 1); + add_assoc_string(&element, "timezone_id", entry->full_tz_name, 1); } else { - add_assoc_null(element, "timezone_id"); + add_assoc_null(&element, "timezone_id"); } - if (zend_hash_find(HASH_OF(return_value), entry->name, strlen(entry->name) + 1, (void **) &abbr_array_pp) == FAILURE) { - MAKE_STD_ZVAL(abbr_array); - array_init(abbr_array); - add_assoc_zval(return_value, entry->name, abbr_array); + abbr_array_p = zend_hash_str_find(HASH_OF(return_value), entry->name, strlen(entry->name)); + if (!abbr_array_p) { + array_init(&abbr_array); + add_assoc_zval(return_value, entry->name, &abbr_array); } else { - abbr_array = *abbr_array_pp; + ZVAL_COPY_VALUE(&abbr_array, abbr_array_p); } - add_next_index_zval(abbr_array, element); + add_next_index_zval(&abbr_array, &element); entry++; } while (entry->name); } @@ -4582,7 +4548,7 @@ PHP_FUNCTION(date_default_timezone_get) timelib_tzinfo *default_tz; default_tz = get_timezone_info(TSRMLS_C); - RETVAL_STRING(default_tz->name, 1); + RETVAL_STRING(default_tz->name); } /* }}} */ @@ -4664,7 +4630,8 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su switch (retformat) { case SUNFUNCS_RET_STRING: spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); - RETURN_STRINGL(retstr, 5, 0); +//??? RETURN_STRINGL(retstr, 5, 0); + RETURN_STRINGL(retstr, 5); break; case SUNFUNCS_RET_DOUBLE: RETURN_DOUBLE(N); @@ -4794,7 +4761,7 @@ PHP_FUNCTION(date_sun_info) } /* }}} */ -static HashTable *date_object_get_gc_period(zval *object, zval ***table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_period(zval *object, zval **table, int *n TSRMLS_DC) { *table = NULL; *n = 0; @@ -4804,10 +4771,10 @@ static HashTable *date_object_get_gc_period(zval *object, zval ***table, int *n static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) { HashTable *props; - zval *zv; + zval zv; php_period_obj *period_obj; - period_obj = zend_object_store_get_object(object TSRMLS_CC); + period_obj = (php_period_obj*)Z_OBJ_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -4815,110 +4782,108 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) return props; } - MAKE_STD_ZVAL(zv); if (period_obj->start) { php_date_obj *date_obj; - object_init_ex(zv, date_ce_date); - date_obj = zend_object_store_get_object(zv TSRMLS_CC); + object_init_ex(&zv, date_ce_date); + date_obj = (php_date_obj*)Z_OBJ(zv); date_obj->time = timelib_time_clone(period_obj->start); } else { - ZVAL_NULL(zv); + ZVAL_NULL(&zv); } - zend_hash_update(props, "start", sizeof("start"), &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "start", sizeof("start")-1, &zv); - MAKE_STD_ZVAL(zv); if (period_obj->current) { php_date_obj *date_obj; - object_init_ex(zv, date_ce_date); - date_obj = zend_object_store_get_object(zv TSRMLS_CC); + object_init_ex(&zv, date_ce_date); + date_obj = (php_date_obj*)Z_OBJ(zv); date_obj->time = timelib_time_clone(period_obj->current); } else { - ZVAL_NULL(zv); + ZVAL_NULL(&zv); } - zend_hash_update(props, "current", sizeof("current"), &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "current", sizeof("current")-1, &zv); - MAKE_STD_ZVAL(zv); if (period_obj->end) { php_date_obj *date_obj; - object_init_ex(zv, date_ce_date); - date_obj = zend_object_store_get_object(zv TSRMLS_CC); + object_init_ex(&zv, date_ce_date); + date_obj = (php_date_obj*)Z_OBJ(zv); date_obj->time = timelib_time_clone(period_obj->end); } else { - ZVAL_NULL(zv); + ZVAL_NULL(&zv); } - zend_hash_update(props, "end", sizeof("end"), &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "end", sizeof("end")-1, &zv); - MAKE_STD_ZVAL(zv); if (period_obj->interval) { php_interval_obj *interval_obj; - object_init_ex(zv, date_ce_interval); - interval_obj = zend_object_store_get_object(zv TSRMLS_CC); + object_init_ex(&zv, date_ce_interval); + interval_obj = (php_interval_obj*)Z_OBJ(zv); interval_obj->diff = timelib_rel_time_clone(period_obj->interval); interval_obj->initialized = 1; } else { - ZVAL_NULL(zv); + ZVAL_NULL(&zv); } - zend_hash_update(props, "interval", sizeof("interval"), &zv, sizeof(zv), NULL); + zend_hash_str_update(props, "interval", sizeof("interval")-1, &zv); /* converted to larger type (int->long); must check when unserializing */ - MAKE_STD_ZVAL(zv); - ZVAL_LONG(zv, (long) period_obj->recurrences); - zend_hash_update(props, "recurrences", sizeof("recurrences"), &zv, sizeof(zv), NULL); + ZVAL_LONG(&zv, (long) period_obj->recurrences); + zend_hash_str_update(props, "recurrences", sizeof("recurrences")-1, &zv); - MAKE_STD_ZVAL(zv); - ZVAL_BOOL(zv, period_obj->include_start_date); - zend_hash_update(props, "include_start_date", sizeof("include_start_date"), &zv, sizeof(zv), NULL); + ZVAL_BOOL(&zv, period_obj->include_start_date); + zend_hash_str_update(props, "include_start_date", sizeof("include_start_date")-1, &zv); return props; } static int php_date_period_initialize_from_hash(php_period_obj *period_obj, HashTable *myht TSRMLS_DC) { - zval **ht_entry; + zval *ht_entry; /* this function does no rollback on error */ - if (zend_hash_find(myht, "start", sizeof("start"), (void**) &ht_entry) == SUCCESS) { - if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { + ht_entry = zend_hash_str_find(myht, "start", sizeof("start")-1); + if (ht_entry) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); + date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); period_obj->start = timelib_time_clone(date_obj->time); - period_obj->start_ce = Z_OBJCE_PP(ht_entry); - } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { + period_obj->start_ce = Z_OBJCE_P(ht_entry); + } else if (Z_TYPE_P(ht_entry) != IS_NULL) { return 0; } } else { return 0; } - if (zend_hash_find(myht, "end", sizeof("end"), (void**) &ht_entry) == SUCCESS) { - if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { + ht_entry = zend_hash_str_find(myht, "end", sizeof("end")-1); + if (ht_entry) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); + date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); period_obj->end = timelib_time_clone(date_obj->time); - } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { + } else if (Z_TYPE_P(ht_entry) != IS_NULL) { return 0; } } else { return 0; } - if (zend_hash_find(myht, "current", sizeof("current"), (void**) &ht_entry) == SUCCESS) { - if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_date) { + ht_entry = zend_hash_str_find(myht, "current", sizeof("current")-1); + if (ht_entry) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); + date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); period_obj->current = timelib_time_clone(date_obj->time); - } else if (Z_TYPE_PP(ht_entry) != IS_NULL) { + } else if (Z_TYPE_P(ht_entry) != IS_NULL) { return 0; } } else { return 0; } - if (zend_hash_find(myht, "interval", sizeof("interval"), (void**) &ht_entry) == SUCCESS) { - if (Z_TYPE_PP(ht_entry) == IS_OBJECT && Z_OBJCE_PP(ht_entry) == date_ce_interval) { + ht_entry = zend_hash_str_find(myht, "interval", sizeof("interval")-1); + if (ht_entry) { + if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_interval) { php_interval_obj *interval_obj; - interval_obj = zend_object_store_get_object(*ht_entry TSRMLS_CC); + interval_obj = (php_interval_obj*)Z_OBJ_P(ht_entry); period_obj->interval = timelib_rel_time_clone(interval_obj->diff); } else { /* interval is required */ return 0; @@ -4927,16 +4892,18 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash return 0; } - if (zend_hash_find(myht, "recurrences", sizeof("recurrences"), (void**) &ht_entry) == SUCCESS && - Z_TYPE_PP(ht_entry) == IS_LONG && Z_LVAL_PP(ht_entry) >= 0 && Z_LVAL_PP(ht_entry) <= INT_MAX) { - period_obj->recurrences = Z_LVAL_PP(ht_entry); + ht_entry = zend_hash_str_find(myht, "recurrences", sizeof("recurrences")-1); + if (ht_entry && + Z_TYPE_P(ht_entry) == IS_LONG && Z_LVAL_P(ht_entry) >= 0 && Z_LVAL_P(ht_entry) <= INT_MAX) { + period_obj->recurrences = Z_LVAL_P(ht_entry); } else { return 0; } - if (zend_hash_find(myht, "include_start_date", sizeof("include_start_date"), (void**) &ht_entry) == SUCCESS && - Z_TYPE_PP(ht_entry) == IS_BOOL) { - period_obj->include_start_date = Z_BVAL_PP(ht_entry); + ht_entry = zend_hash_str_find(myht, "include_start_date", sizeof("include_start_date")-1); + if (ht_entry && + Z_TYPE_P(ht_entry) == IS_BOOL) { + period_obj->include_start_date = Z_BVAL_P(ht_entry); } else { return 0; } @@ -4961,7 +4928,7 @@ PHP_METHOD(DatePeriod, __set_state) myht = Z_ARRVAL_P(array); object_init_ex(return_value, date_ce_period); - period_obj = zend_object_store_get_object(return_value TSRMLS_CC); + period_obj = (php_period_obj*)Z_OBJ_P(return_value); if (!php_date_period_initialize_from_hash(period_obj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DatePeriod object"); } @@ -4976,7 +4943,7 @@ PHP_METHOD(DatePeriod, __wakeup) php_period_obj *period_obj; HashTable *myht; - period_obj = zend_object_store_get_object(object TSRMLS_CC); + period_obj = (php_period_obj*)Z_OBJ_P(object); myht = Z_OBJPROP_P(object); @@ -4999,10 +4966,8 @@ static zval *date_period_read_property(zval *object, zval *member, int type, con zv = std_object_handlers.read_property(object, member, type, key TSRMLS_CC); if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) { /* defensive copy */ - zend_object_value zov = Z_OBJ_HANDLER_P(zv, clone_obj)(zv TSRMLS_CC); - MAKE_STD_ZVAL(zv); - Z_TYPE_P(zv) = IS_OBJECT; - Z_OBJVAL_P(zv) = zov; +//??? MAKE_STD_ZVAL(zv); + ZVAL_OBJ(zv, Z_OBJ_HANDLER_P(zv, clone_obj)(zv TSRMLS_CC)); } return zv; -- cgit v1.2.1 From 39e721cf50276e5872e445b36fefdc4eb80cdcf7 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Tue, 11 Feb 2014 11:27:01 +0000 Subject: Fixed ZTS and added fix to NEWS. --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a61d9db3c1..f6b12bc42e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3638,7 +3638,7 @@ static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz TSRML efree(dummy_t); return FAILURE; } else { - set_timezone_from_timelib_time(tzobj, dummy_t TSRMLS_CC); + set_timezone_from_timelib_time(tzobj, dummy_t); efree(dummy_t); return SUCCESS; } -- cgit v1.2.1 From 43b03c74b322d6ceb003a14a7561fdffc4e13072 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Tue, 18 Feb 2014 17:42:46 +0800 Subject: Refacting smart_str --- ext/date/php_date.c | 28 +++++++++++----------------- 1 file changed, 11 insertions(+), 17 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 105d0ad6d4..19895ee7e6 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1046,7 +1046,7 @@ char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) /* }}} */ /* {{{ date_format - (gm)date helper */ -static char *date_format(char *format, int format_len, timelib_time *t, int localtime) +static zend_string *date_format(char *format, int format_len, timelib_time *t, int localtime) { smart_str string = {0}; int i, length = 0; @@ -1057,7 +1057,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca int weekYearSet = 0; if (!format_len) { - return estrdup(""); + return STR_EMPTY_ALLOC(); } if (localtime) { @@ -1201,7 +1201,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca timelib_time_offset_dtor(offset); } - return string.c; + return string.s; } static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) @@ -1209,7 +1209,6 @@ static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) char *format; int format_len; long ts; - char *string; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; @@ -1218,18 +1217,15 @@ static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) ts = time(NULL); } - string = php_format_date(format, format_len, ts, localtime TSRMLS_CC); - -//??? RETVAL_STRING(string, 0); - RETVAL_STRING(string); + RETURN_STR(php_format_date(format, format_len, ts, localtime TSRMLS_CC)); } /* }}} */ -PHPAPI char *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */ +PHPAPI zend_string *php_format_date(char *format, int format_len, time_t ts, int localtime TSRMLS_DC) /* {{{ */ { timelib_time *t; timelib_tzinfo *tzi; - char *string; + zend_string *string; t = timelib_time_ctor(); @@ -2204,8 +2200,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) } /* first we add the date and time in ISO format */ -//??? ZVAL_STRING(zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1), 0); - ZVAL_STRING(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1)); + ZVAL_STR(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1)); zend_hash_str_update(props, "date", sizeof("date")-1, &zv); /* then we add the timezone name (or similar) */ @@ -2989,8 +2984,7 @@ PHP_FUNCTION(date_format) } dateobj = (php_date_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); -//??? RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime), 0); - RETURN_STRING(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime)); + RETURN_STR(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime)); } /* }}} */ @@ -3846,7 +3840,7 @@ PHP_FUNCTION(timezone_transitions_get) #define add_nominal() \ array_init(&element); \ add_assoc_long(&element, "ts", timestamp_begin); \ - add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0); \ + add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC)); \ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \ @@ -3855,7 +3849,7 @@ PHP_FUNCTION(timezone_transitions_get) #define add(i,ts) \ array_init(&element); \ add_assoc_long(&element, "ts", ts); \ - add_assoc_string(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC), 0); \ + add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC)); \ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \ @@ -4278,7 +4272,7 @@ static char *date_interval_format(char *format, int format_len, timelib_rel_time smart_str_0(&string); - return string.c; + return string.s; } /* }}} */ -- cgit v1.2.1 From c1c4d2681782772d41ba68f32eb71baa907e10de Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Wed, 19 Feb 2014 17:58:39 +0800 Subject: Use better data structures (incomplete) --- ext/date/php_date.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 19895ee7e6..05dccf4f8e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4215,14 +4215,14 @@ PHP_FUNCTION(date_interval_create_from_date_string) /* }}} */ /* {{{ date_interval_format - */ -static char *date_interval_format(char *format, int format_len, timelib_rel_time *t) +static zend_string *date_interval_format(char *format, int format_len, timelib_rel_time *t) { smart_str string = {0}; int i, length, have_format_spec = 0; char buffer[33]; if (!format_len) { - return estrdup(""); + return STR_EMPTY_ALLOC(); } for (i = 0; i < format_len; i++) { @@ -4292,8 +4292,7 @@ PHP_FUNCTION(date_interval_format) diobj = (php_interval_obj *) Z_OBJ_P(object); DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval); -//??? RETURN_STRING(date_interval_format(format, format_len, diobj->diff), 0); - RETURN_STRING(date_interval_format(format, format_len, diobj->diff)); + RETURN_STR(date_interval_format(format, format_len, diobj->diff)); } /* }}} */ -- cgit v1.2.1 From 495551aa8c3d66ee16ab91c1fb97329f10c0632c Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 26 Feb 2014 15:01:08 +0400 Subject: Fixed iterators API. zend_iterator_init() has to be used in each get_iterator() callback. --- ext/date/php_date.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 05dccf4f8e..1489ac8184 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1976,6 +1976,8 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); } + zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC); + Z_ADDREF_P(object); iterator->intern.data = (void*) dpobj; iterator->intern.funcs = &date_period_it_funcs; -- cgit v1.2.1 From 382b0dfdb7d2ae654f6aeba049ee80c3cd70ff9a Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Thu, 27 Feb 2014 19:19:02 +0800 Subject: Refactoring zend_iterator (incompleted) --- ext/date/php_date.c | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1489ac8184..82ee650b36 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1836,7 +1836,6 @@ PHP_FUNCTION(getdate) /* define an overloaded iterator structure */ typedef struct { zend_object_iterator intern; - zval *date_period_zval; zval current; php_period_obj *object; int current_index; @@ -1862,7 +1861,7 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) date_period_it_invalidate_current(iter TSRMLS_CC); - zval_ptr_dtor(iterator->date_period_zval); + zval_ptr_dtor(&iterator->intern.data); efree(iterator); } @@ -1873,7 +1872,7 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = iterator->object; + php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); timelib_time *it_time = object->current; /* apply modification if it's not the first iteration */ @@ -1898,7 +1897,7 @@ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = iterator->object; + php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); timelib_time *it_time = object->current; php_date_obj *newdateobj; @@ -1970,7 +1969,6 @@ zend_object_iterator_funcs date_period_it_funcs = { zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) { date_period_it *iterator = emalloc(sizeof(date_period_it)); - php_period_obj *dpobj = (php_period_obj *)Z_OBJ_P(object); if (by_ref) { zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); @@ -1978,11 +1976,8 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval zend_iterator_init((zend_object_iterator*)iterator TSRMLS_CC); - Z_ADDREF_P(object); - iterator->intern.data = (void*) dpobj; + ZVAL_COPY(&iterator->intern.data, object); iterator->intern.funcs = &date_period_it_funcs; - iterator->date_period_zval = object; - iterator->object = dpobj; ZVAL_UNDEF(&iterator->current); return (zend_object_iterator*)iterator; -- cgit v1.2.1 From 1c3ba95bb547f8d9b0bd0496238a76ef6a706b07 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 27 Feb 2014 15:40:13 +0400 Subject: Refactored read_property() and read_dimension() handlers --- ext/date/php_date.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1489ac8184..24cbbd33a7 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -633,9 +633,9 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC); static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC); -zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC); +zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC); void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); -static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC); +static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC); static void date_period_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); /* {{{ Module struct */ @@ -3959,7 +3959,7 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma } /* {{{ date_interval_read_property */ -zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) +zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) { php_interval_obj *obj; zval *retval; @@ -3977,7 +3977,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze obj = (php_interval_obj *)Z_OBJ_P(object); if (!obj->initialized) { - retval = (zend_get_std_object_handlers())->read_property(object, member, type, key TSRMLS_CC); + retval = (zend_get_std_object_handlers())->read_property(object, member, type, key, rv TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } @@ -3999,7 +3999,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze GET_VALUE_FROM_STRUCT(invert, "invert"); GET_VALUE_FROM_STRUCT(days, "days"); /* didn't find any */ - retval = (zend_get_std_object_handlers())->read_property(object, member, type, key TSRMLS_CC); + retval = (zend_get_std_object_handlers())->read_property(object, member, type, key, rv TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); @@ -4009,7 +4009,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze } while(0); //??? ALLOC_INIT_ZVAL(retval); - Z_SET_REFCOUNT_P(retval, 0); +//??? Z_SET_REFCOUNT_P(retval, 0); if (value != -99999) { ZVAL_LONG(retval, value); @@ -4949,7 +4949,7 @@ PHP_METHOD(DatePeriod, __wakeup) /* }}} */ /* {{{ date_period_read_property */ -static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) +static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) { zval *zv; if (type != BP_VAR_IS && type != BP_VAR_R) { @@ -4958,7 +4958,7 @@ static zval *date_period_read_property(zval *object, zval *member, int type, con Z_OBJPROP_P(object); /* build properties hash table */ - zv = std_object_handlers.read_property(object, member, type, key TSRMLS_CC); + zv = std_object_handlers.read_property(object, member, type, key, rv TSRMLS_CC); if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) { /* defensive copy */ //??? MAKE_STD_ZVAL(zv); -- cgit v1.2.1 From 8ced4f0ac906fd9a28b968801487630326c45bc8 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 28 Feb 2014 12:59:51 +0800 Subject: Move zend_objects_store_put out of zend_object_std_init --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index d3426f944c..869d3f659b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2108,6 +2108,7 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_date; + zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2242,6 +2243,7 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_timezone; + zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2333,6 +2335,7 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_interval; + zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2414,6 +2417,7 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ object_properties_init(&intern->std, class_type); //??? date_object_free_storage_period, NULL TSRMLS_CC); intern->std.handlers = &date_object_handlers_period; + zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } -- cgit v1.2.1 From a5ce7d526e77a7d0cce650c7b2c09a1c31ad39bb Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Fri, 28 Feb 2014 13:59:07 +0800 Subject: Revert "Move zend_objects_store_put out of zend_object_std_init" This reverts commit 8ced4f0ac906fd9a28b968801487630326c45bc8. --- ext/date/php_date.c | 4 ---- 1 file changed, 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 869d3f659b..d3426f944c 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2108,7 +2108,6 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_date; - zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2243,7 +2242,6 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_timezone; - zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2335,7 +2333,6 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_interval; - zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } @@ -2417,7 +2414,6 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ object_properties_init(&intern->std, class_type); //??? date_object_free_storage_period, NULL TSRMLS_CC); intern->std.handlers = &date_object_handlers_period; - zend_objects_store_put(&intern->std TSRMLS_CC); return (zend_object*)intern; } -- cgit v1.2.1 From 574f230d3c7076d034422c448fd58810b9b8a488 Mon Sep 17 00:00:00 2001 From: Derick Rethans Date: Sun, 2 Mar 2014 14:17:16 -0500 Subject: Added DateTimeImmutable::createFromMutable. --- ext/date/php_date.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index f6b12bc42e..5852bb2ca6 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -299,6 +299,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_date_method_timestamp_get, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_date_method_create_from_mutable, 0, 0, 1) + ZEND_ARG_INFO(0, DateTime) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_open, 0, 0, 1) ZEND_ARG_INFO(0, timezone) ZEND_END_ARG_INFO() @@ -495,6 +499,7 @@ const zend_function_entry date_funcs_immutable[] = { PHP_ME(DateTimeImmutable, setDate, arginfo_date_method_date_set, 0) PHP_ME(DateTimeImmutable, setISODate, arginfo_date_method_isodate_set, 0) PHP_ME(DateTimeImmutable, setTimestamp, arginfo_date_method_timestamp_set, 0) + PHP_ME(DateTimeImmutable, createFromMutable, arginfo_date_method_create_from_mutable, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC) PHP_FE_END }; @@ -2748,6 +2753,34 @@ PHP_METHOD(DateTimeImmutable, __construct) } /* }}} */ +/* {{{ proto DateTimeImmutable::createFromMutable(DateTimeZone object) + Creates new DateTimeImmutable object from an existing mutable DateTime object. +*/ +PHP_METHOD(DateTimeImmutable, createFromMutable) +{ + zval *datetime_object = NULL; + php_date_obj *new_obj = NULL; + php_date_obj *old_obj = NULL; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "O!", &datetime_object, date_ce_date) == FAILURE) { + return; + } + + php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); + old_obj = (php_date_obj *) zend_object_store_get_object(datetime_object TSRMLS_CC); + new_obj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); + + new_obj->time = timelib_time_ctor(); + *new_obj->time = *old_obj->time; + if (old_obj->time->tz_abbr) { + new_obj->time->tz_abbr = strdup(old_obj->time->tz_abbr); + } + if (old_obj->time->tz_info) { + new_obj->time->tz_info = old_obj->time->tz_info; + } +} +/* }}} */ + static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) { zval **z_date = NULL; -- cgit v1.2.1 From 9a81b6dea43be43c6062419d5bef361be511e78e Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Thu, 6 Mar 2014 18:51:20 +0800 Subject: Fixed memory leak in ext/standard/tests/time/strptime_parts.php --- ext/date/php_date.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index d3426f944c..cc6bab253a 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1615,7 +1615,7 @@ PHP_FUNCTION(checkdate) /* {{{ php_strftime - (gm)strftime helper */ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { - char *format, *buf; + char *format; int format_len; long timestamp = 0; struct tm ta; @@ -1624,6 +1624,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) timelib_time *ts; timelib_tzinfo *tzi; timelib_time_offset *offset = NULL; + zend_string *buf; timestamp = (long) time(NULL); @@ -1676,10 +1677,10 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) /* VS2012 crt has a bug where strftime crash with %z and %Z format when the initial buffer is too small. See http://connect.microsoft.com/VisualStudio/feedback/details/759720/vs2012-strftime-crash-with-z-formatting-code */ - buf = (char *) emalloc(buf_len); - while ((real_len=strftime(buf, buf_len, format, &ta))==buf_len || real_len==0) { + buf = STR_ALLOC(buf_len, 0); + while ((real_len = strftime(buf->val, buf_len, format, &ta)) == buf_len || real_len == 0) { buf_len *= 2; - buf = (char *) erealloc(buf, buf_len); + buf = STR_REALLOC(buf, buf_len, 0); if (!--max_reallocs) { break; } @@ -1698,11 +1699,10 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) } if (real_len && real_len != buf_len) { - buf = (char *) erealloc(buf, real_len + 1); -//??? RETURN_STRINGL(buf, real_len, 0); - RETURN_STRINGL(buf, real_len); + buf = STR_REALLOC(buf, real_len, 0); + RETURN_STR(buf); } - efree(buf); + STR_FREE(buf); RETURN_FALSE; } /* }}} */ -- cgit v1.2.1 From dfe1fd73bf127de368a3098b3e5b251e7d7397b4 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 6 Mar 2014 16:09:00 +0400 Subject: Fixed uninitialized value --- ext/date/php_date.c | 1 + 1 file changed, 1 insertion(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cc6bab253a..adfb2ca64e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4005,6 +4005,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze //??? ALLOC_INIT_ZVAL(retval); //??? Z_SET_REFCOUNT_P(retval, 0); + retval = rv; if (value != -99999) { ZVAL_LONG(retval, value); -- cgit v1.2.1 From 97156bc141fe1cd87d4b19ef71f26fc7cb3d7f90 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 7 Mar 2014 17:06:13 +0400 Subject: Fixed string length --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index adfb2ca64e..3c582b27e2 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2197,7 +2197,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) } /* first we add the date and time in ISO format */ - ZVAL_STR(&zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1)); + ZVAL_STR(&zv, date_format("Y-m-d H:i:s", sizeof("Y-m-d H:i:s")-1, dateobj->time, 1)); zend_hash_str_update(props, "date", sizeof("date")-1, &zv); /* then we add the timezone name (or similar) */ -- cgit v1.2.1 From ab3d1e0d03da10d6ca7fc43e1ebd6b04151213f8 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 7 Mar 2014 17:09:45 +0400 Subject: Temporary fix memory leaks --- ext/date/php_date.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 3c582b27e2..6fc42846a8 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2220,6 +2220,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) //??? ZVAL_STRING(zv, tmpstr, 0); ZVAL_STRING(&zv, tmpstr); + efree(tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: @@ -2312,6 +2313,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) //??? ZVAL_STRING(zv, tmpstr, 0); ZVAL_STRING(&zv, tmpstr); + efree(tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: @@ -3747,7 +3749,9 @@ PHP_FUNCTION(timezone_name_get) abs((utc_offset % 60))); //??? RETURN_STRING(tmpstr, 0); - RETURN_STRING(tmpstr); + RETVAL_STRING(tmpstr); + efree(tmpstr); + return; } break; case TIMELIB_ZONETYPE_ABBR: @@ -4622,7 +4626,9 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su case SUNFUNCS_RET_STRING: spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); //??? RETURN_STRINGL(retstr, 5, 0); - RETURN_STRINGL(retstr, 5); + RETVAL_STRINGL(retstr, 5); + efree(retstr); + return; break; case SUNFUNCS_RET_DOUBLE: RETURN_DOUBLE(N); -- cgit v1.2.1 From 6956d7e3ebe2b02466291b5c489517c322c90baf Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sun, 16 Mar 2014 17:14:31 +0800 Subject: Refactor date to fixed bug after default_properties changed --- ext/date/php_date.c | 425 +++++++++++++++++++++++++--------------------------- 1 file changed, 206 insertions(+), 219 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 6fc42846a8..b12705d330 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -600,7 +600,7 @@ static zend_object_handlers date_object_handlers_period; RETURN_FALSE; \ } \ } \ - obj = (php_date_obj *) Z_OBJ_P(object); \ + obj = Z_PHPDATE_P(object); \ #define DATE_CHECK_INITIALIZED(member, class_name) \ if (!(member)) { \ @@ -671,12 +671,12 @@ static PHP_GINIT_FUNCTION(date) /* }}} */ -static void _php_date_tzinfo_dtor(zval *zv) +static void _php_date_tzinfo_dtor(zval *zv) /* {{{ */ { timelib_tzinfo *tzi = (timelib_tzinfo*)Z_PTR_P(zv); timelib_tzinfo_dtor(tzi); -} +} /* }}} */ /* {{{ PHP_RINIT_FUNCTION */ PHP_RINIT_FUNCTION(date) @@ -1853,7 +1853,6 @@ static void date_period_it_invalidate_current(zend_object_iterator *iter TSRMLS_ } /* }}} */ - /* {{{ date_period_it_dtor */ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) { @@ -1867,12 +1866,11 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) } /* }}} */ - /* {{{ date_period_it_has_more */ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); + php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); timelib_time *it_time = object->current; /* apply modification if it's not the first iteration */ @@ -1892,18 +1890,17 @@ static int date_period_it_has_more(zend_object_iterator *iter TSRMLS_DC) } /* }}} */ - /* {{{ date_period_it_current_data */ static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - php_period_obj *object = (php_period_obj *)Z_OBJ(iterator->intern.data); + php_period_obj *object = Z_PHPPERIOD_P(&iterator->intern.data); timelib_time *it_time = object->current; php_date_obj *newdateobj; /* Create new object */ php_date_instantiate(object->start_ce, &iterator->current TSRMLS_CC); - newdateobj = (php_date_obj *) Z_OBJ(iterator->current); + newdateobj = Z_PHPDATE_P(&iterator->current); newdateobj->time = timelib_time_ctor(); *newdateobj->time = *it_time; if (it_time->tz_abbr) { @@ -1917,7 +1914,6 @@ static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) } /* }}} */ - /* {{{ date_period_it_current_key */ static void date_period_it_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) { @@ -1926,7 +1922,6 @@ static void date_period_it_current_key(zend_object_iterator *iter, zval *key TSR } /* }}} */ - /* {{{ date_period_it_move_forward */ static void date_period_it_move_forward(zend_object_iterator *iter TSRMLS_DC) { @@ -1937,11 +1932,10 @@ static void date_period_it_move_forward(zend_object_iterator *iter TSRMLS_DC) } /* }}} */ - /* {{{ date_period_it_rewind */ static void date_period_it_rewind(zend_object_iterator *iter TSRMLS_DC) { - date_period_it *iterator = (date_period_it *)iter; + date_period_it *iterator = (date_period_it *)iter; iterator->current_index = 0; if (iterator->object->current) { @@ -1952,7 +1946,6 @@ static void date_period_it_rewind(zend_object_iterator *iter TSRMLS_DC) } /* }}} */ - /* iterator handler table */ zend_object_iterator_funcs date_period_it_funcs = { date_period_it_dtor, @@ -1964,11 +1957,9 @@ zend_object_iterator_funcs date_period_it_funcs = { date_period_it_invalidate_current }; - - -zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) +zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval *object, int by_ref TSRMLS_DC) /* {{{ */ { - date_period_it *iterator = emalloc(sizeof(date_period_it)); + date_period_it *iterator = emalloc(sizeof(date_period_it)); if (by_ref) { zend_error(E_ERROR, "An iterator cannot be used with foreach by reference"); @@ -1978,12 +1969,13 @@ zend_object_iterator *date_object_period_get_iterator(zend_class_entry *ce, zval ZVAL_COPY(&iterator->intern.data, object); iterator->intern.funcs = &date_period_it_funcs; + iterator->object = Z_PHPPERIOD_P(object); ZVAL_UNDEF(&iterator->current); return (zend_object_iterator*)iterator; -} +} /* }}} */ -static int implement_date_interface_handler(zend_class_entry *interface, zend_class_entry *implementor TSRMLS_DC) +static int implement_date_interface_handler(zend_class_entry *interface, zend_class_entry *implementor TSRMLS_DC) /* {{{ */ { if (implementor->type == ZEND_USER_CLASS && !instanceof_function(implementor, date_ce_date TSRMLS_CC) && @@ -1993,9 +1985,9 @@ static int implement_date_interface_handler(zend_class_entry *interface, zend_cl } return SUCCESS; -} +} /* }}} */ -static void date_register_classes(TSRMLS_D) +static void date_register_classes(TSRMLS_D) /* {{{ */ { zend_class_entry ce_date, ce_immutable, ce_timezone, ce_interval, ce_period, ce_interface; @@ -2096,35 +2088,34 @@ static void date_register_classes(TSRMLS_D) zend_declare_class_constant_long(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); -} +} /* }}} */ -static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type TSRMLS_DC) +static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { php_date_obj *intern; - intern = emalloc(sizeof(php_date_obj)); - memset(intern, 0, sizeof(php_date_obj)); + intern = ecalloc(1, sizeof(php_date_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_date; - return (zend_object*)intern; -} + return &intern->std; +} /* }}} */ -static zend_object *date_object_new_date(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_date(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return date_object_new_date_ex(class_type TSRMLS_CC); -} +} /* }}} */ -static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) /* {{{ */ { - php_date_obj *old_obj = (php_date_obj *)Z_OBJ_P(this_ptr); - php_date_obj *new_obj = (php_date_obj*)date_object_new_date_ex(old_obj->std.ce TSRMLS_CC); + php_date_obj *old_obj = Z_PHPDATE_P(this_ptr); + php_date_obj *new_obj = php_date_obj_from_obj(date_object_new_date_ex(old_obj->std.ce TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->time) { - return (zend_object*)new_obj; + return &new_obj->std; } /* this should probably moved to a new `timelib_time *timelime_time_clone(timelib_time *)` */ @@ -2137,20 +2128,20 @@ static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) new_obj->time->tz_info = old_obj->time->tz_info; } - return (zend_object*)new_obj; -} + return &new_obj->std; +} /* }}} */ -static void date_clone_immutable(zval *object, zval *new_object TSRMLS_DC) +static void date_clone_immutable(zval *object, zval *new_object TSRMLS_DC) /* {{{ */ { ZVAL_OBJ(new_object, date_object_clone_date(object TSRMLS_CC)); //??? Z_SET_REFCOUNT_P(new_object, 1); //??? Z_SET_ISREF_P(new_object); -} +} /* }}} */ -static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) +static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) /* {{{ */ { - php_date_obj *o1 = (php_date_obj *)Z_OBJ_P(d1); - php_date_obj *o2 = (php_date_obj *)Z_OBJ_P(d2); + php_date_obj *o1 = Z_PHPDATE_P(d1); + php_date_obj *o2 = Z_PHPDATE_P(d2); if (!o1->time || !o2->time) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Trying to compare an incomplete DateTime or DateTimeImmutable object"); @@ -2164,31 +2155,30 @@ static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) } return (o1->time->sse == o2->time->sse) ? 0 : ((o1->time->sse < o2->time->sse) ? -1 : 1); -} +} /* }}} */ -static HashTable *date_object_get_gc(zval *object, zval **table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc(zval *object, zval **table, int *n TSRMLS_DC) /* {{{ */ { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); -} +} /* }}} */ -static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC) /* {{{ */ { - *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); -} +} /* }}} */ -static HashTable *date_object_get_properties(zval *object TSRMLS_DC) +static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ { HashTable *props; zval zv; php_date_obj *dateobj; - dateobj = (php_date_obj *)Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2231,35 +2221,34 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) } return props; -} +} /* }}} */ -static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_type TSRMLS_DC) +static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { php_timezone_obj *intern; - intern = emalloc(sizeof(php_timezone_obj)); - memset(intern, 0, sizeof(php_timezone_obj)); + intern = ecalloc(1, sizeof(php_timezone_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_timezone; - return (zend_object*)intern; -} + return &intern->std; +} /* }}} */ -static zend_object *date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return date_object_new_timezone_ex(class_type TSRMLS_CC); -} +} /* }}} */ -static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC) /* {{{ */ { - php_timezone_obj *old_obj = (php_timezone_obj *) Z_OBJ_P(this_ptr); - php_timezone_obj *new_obj = (php_timezone_obj *) date_object_new_timezone_ex(old_obj->std.ce TSRMLS_CC); + php_timezone_obj *old_obj = Z_PHPTIMEZONE_P(this_ptr); + php_timezone_obj *new_obj = php_timezone_obj_from_obj(date_object_new_timezone_ex(old_obj->std.ce TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->initialized) { - return (zend_object*)new_obj; + return &new_obj->std; } new_obj->type = old_obj->type; @@ -2278,17 +2267,17 @@ static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC) break; } - return (zend_object*)new_obj; -} + return &new_obj->std; +} /* }}} */ -static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) +static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* {{{ */ { HashTable *props; zval zv; php_timezone_obj *tzobj; - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2323,53 +2312,52 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) zend_hash_str_update(props, "timezone", sizeof("timezone")-1, &zv); return props; -} +} /* }}} */ -static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_type TSRMLS_DC) +static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { php_interval_obj *intern; - intern = emalloc(sizeof(php_interval_obj)); - memset(intern, 0, sizeof(php_interval_obj)); + intern = ecalloc(1, sizeof(php_interval_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); intern->std.handlers = &date_object_handlers_interval; - return (zend_object*)intern; -} + return &intern->std; +} /* }}} */ -static zend_object *date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return date_object_new_interval_ex(class_type TSRMLS_CC); -} +} /* }}} */ -static zend_object *date_object_clone_interval(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_interval(zval *this_ptr TSRMLS_DC) /* {{{ */ { - php_interval_obj *old_obj = (php_interval_obj *) Z_OBJ_P(this_ptr); - php_interval_obj *new_obj = (php_interval_obj *) date_object_new_interval_ex(old_obj->std.ce TSRMLS_CC); + php_interval_obj *old_obj = Z_PHPINTERVAL_P(this_ptr); + php_interval_obj *new_obj = php_interval_obj_from_obj(date_object_new_interval_ex(old_obj->std.ce TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ - return (zend_object*)new_obj; -} + return &new_obj->std; +} /* }}} */ -static HashTable *date_object_get_gc_interval(zval *object, zval **table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_interval(zval *object, zval **table, int *n TSRMLS_DC) /* {{{ */ { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); -} +} /* }}} */ -static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) +static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) /* {{{ */ { HashTable *props; zval zv; php_interval_obj *intervalobj; - intervalobj = (php_interval_obj *) Z_OBJ_P(object); + intervalobj = Z_PHPINTERVAL_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -2403,74 +2391,73 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) PHP_DATE_INTERVAL_ADD_PROPERTY("have_special_relative", have_special_relative); return props; -} +} /* }}} */ -static inline zend_object *date_object_new_period_ex(zend_class_entry *class_type TSRMLS_DC) +static inline zend_object *date_object_new_period_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { php_period_obj *intern; - intern = emalloc(sizeof(php_period_obj)); - memset(intern, 0, sizeof(php_period_obj)); + intern = ecalloc(1, sizeof(php_period_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); object_properties_init(&intern->std, class_type); //??? date_object_free_storage_period, NULL TSRMLS_CC); intern->std.handlers = &date_object_handlers_period; - return (zend_object*)intern; -} + return &intern->std; +} /* }}} */ -static zend_object *date_object_new_period(zend_class_entry *class_type TSRMLS_DC) +static zend_object *date_object_new_period(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { return date_object_new_period_ex(class_type TSRMLS_CC); -} +} /* }}} */ -static zend_object *date_object_clone_period(zval *this_ptr TSRMLS_DC) +static zend_object *date_object_clone_period(zval *this_ptr TSRMLS_DC) /* {{{ */ { - php_period_obj *old_obj = (php_period_obj *) Z_OBJ_P(this_ptr); - php_period_obj *new_obj = (php_period_obj *) date_object_new_period_ex(old_obj->std.ce TSRMLS_CC); + php_period_obj *old_obj = Z_PHPPERIOD_P(this_ptr); + php_period_obj *new_obj = php_period_obj_from_obj(date_object_new_period_ex(old_obj->std.ce TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); /** FIX ME ADD CLONE STUFF **/ - return (zend_object*)new_obj; -} + return &new_obj->std; +} /* }}} */ -static void date_object_free_storage_date(zend_object *object TSRMLS_DC) +static void date_object_free_storage_date(zend_object *object TSRMLS_DC) /* {{{ */ { - php_date_obj *intern = (php_date_obj *)object; + php_date_obj *intern = php_date_obj_from_obj(object); if (intern->time) { timelib_time_dtor(intern->time); } zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} + efree(intern); +} /* }}} */ -static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) +static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) /* {{{ */ { - php_timezone_obj *intern = (php_timezone_obj *)object; + php_timezone_obj *intern = php_timezone_obj_from_obj(object); if (intern->type == TIMELIB_ZONETYPE_ABBR) { free(intern->tzi.z.abbr); } zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} + efree(intern); +} /* }}} */ -static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) +static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) /* {{{ */ { - php_interval_obj *intern = (php_interval_obj *)object; + php_interval_obj *intern = php_interval_obj_from_obj(object); timelib_rel_time_dtor(intern->diff); zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} + efree(intern); +} /* }}} */ -static void date_object_free_storage_period(zend_object *object TSRMLS_DC) +static void date_object_free_storage_period(zend_object *object TSRMLS_DC) /* {{{ */ { - php_period_obj *intern = (php_period_obj *)object; + php_period_obj *intern = php_period_obj_from_obj(object); if (intern->start) { timelib_time_dtor(intern->start); @@ -2486,29 +2473,29 @@ static void date_object_free_storage_period(zend_object *object TSRMLS_DC) timelib_rel_time_dtor(intern->interval); zend_object_std_dtor(&intern->std TSRMLS_CC); - efree(object); -} + efree(intern); +} /* }}} */ /* Advanced Interface */ -PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) +PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) /* {{{ */ { Z_TYPE_P(object) = IS_OBJECT; object_init_ex(object, pce); return object; -} +} /* }}} */ /* Helper function used to store the latest found warnings and errors while * parsing, from either strtotime or parse_from_format. */ -static void update_errors_warnings(timelib_error_container *last_errors TSRMLS_DC) +static void update_errors_warnings(timelib_error_container *last_errors TSRMLS_DC) /* {{{ */ { if (DATEG(last_errors)) { timelib_error_container_dtor(DATEG(last_errors)); DATEG(last_errors) = NULL; } DATEG(last_errors) = last_errors; -} +} /* }}} */ -PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int time_str_len, char *format, zval *timezone_object, int ctor TSRMLS_DC) +PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int time_str_len, char *format, zval *timezone_object, int ctor TSRMLS_DC) /* {{{ */ { timelib_time *now; timelib_tzinfo *tzi = NULL; @@ -2542,7 +2529,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, if (timezone_object) { php_timezone_obj *tzobj; - tzobj = (php_timezone_obj *) Z_OBJ_P(timezone_object); + tzobj = Z_PHPTIMEZONE_P(timezone_object); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: tzi = tzobj->tzi.tz; @@ -2589,7 +2576,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, timelib_time_dtor(now); return 1; -} +} /* }}} */ /* {{{ proto DateTime date_create([string time[, DateTimeZone object]]) Returns new DateTime object @@ -2605,7 +2592,7 @@ PHP_FUNCTION(date_create) } php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2625,7 +2612,7 @@ PHP_FUNCTION(date_create_immutable) } php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2645,7 +2632,7 @@ PHP_FUNCTION(date_create_from_format) } php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2665,7 +2652,7 @@ PHP_FUNCTION(date_create_immutable_from_format) } php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - if (!php_date_initialize((php_date_obj*)Z_OBJ_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { RETURN_FALSE; } } @@ -2683,7 +2670,7 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize((php_date_obj*)Z_OBJ_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } @@ -2701,13 +2688,13 @@ PHP_METHOD(DateTimeImmutable, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize((php_date_obj*)Z_OBJ_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } /* }}} */ -static int php_date_initialize_from_hash(zval *return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) +static int php_date_initialize_from_hash(zval *return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) /* {{{ */ { zval *z_date; zval *z_timezone; @@ -2743,7 +2730,7 @@ static int php_date_initialize_from_hash(zval *return_value, php_date_obj **date tzi = php_date_parse_tzfile(Z_STRVAL_P(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); - tzobj = (php_timezone_obj*)Z_OBJ_P(php_date_instantiate(date_ce_timezone, &tmp_obj TSRMLS_CC)); + tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, &tmp_obj TSRMLS_CC)); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -2757,7 +2744,7 @@ static int php_date_initialize_from_hash(zval *return_value, php_date_obj **date } } return 0; -} +} /* }}} */ /* {{{ proto DateTime::__set_state() */ @@ -2774,7 +2761,7 @@ PHP_METHOD(DateTime, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - dateobj = (php_date_obj *) Z_OBJ_P(return_value); + dateobj = Z_PHPDATE_P(return_value); if (!php_date_initialize_from_hash(return_value, &dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } @@ -2796,7 +2783,7 @@ PHP_METHOD(DateTimeImmutable, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); - dateobj = (php_date_obj *) Z_OBJ_P(return_value); + dateobj = Z_PHPDATE_P(return_value); if (!php_date_initialize_from_hash(return_value, &dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTimeImmutable object"); } @@ -2811,7 +2798,7 @@ PHP_METHOD(DateTime, __wakeup) php_date_obj *dateobj; HashTable *myht; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); myht = Z_OBJPROP_P(object); @@ -2822,7 +2809,7 @@ PHP_METHOD(DateTime, __wakeup) /* }}} */ /* Helper function used to add an associative array of warnings and errors to a zval */ -static void zval_from_error_container(zval *z, timelib_error_container *error) +static void zval_from_error_container(zval *z, timelib_error_container *error) /* {{{ */ { int i; zval element; @@ -2840,7 +2827,7 @@ static void zval_from_error_container(zval *z, timelib_error_container *error) add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message, 1); } add_assoc_zval(z, "errors", &element); -} +} /* }}} */ /* {{{ proto array date_get_last_errors() Returns the warnings and errors found while parsing a date/time string. @@ -2856,7 +2843,7 @@ PHP_FUNCTION(date_get_last_errors) } /* }}} */ -void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time *parsed_time, struct timelib_error_container *error) +void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time *parsed_time, struct timelib_error_container *error) /* {{{ */ { zval element; @@ -2928,7 +2915,7 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * add_assoc_zval(return_value, "relative", &element); } timelib_time_dtor(parsed_time); -} +} /* }}} */ /* {{{ proto array date_parse(string date) Returns associative array with detailed info about given date @@ -2981,19 +2968,19 @@ PHP_FUNCTION(date_format) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interface, &format, &format_len) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); RETURN_STR(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime)); } /* }}} */ -static int php_date_modify(zval *object, char *modify, int modify_len TSRMLS_DC) +static int php_date_modify(zval *object, char *modify, int modify_len TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; timelib_time *tmp_time; timelib_error_container *err = NULL; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); if (!(dateobj->time)) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "The DateTime object has not been correctly initialized by its constructor"); @@ -3047,7 +3034,7 @@ static int php_date_modify(zval *object, char *modify, int modify_len TSRMLS_DC) dateobj->time->have_relative = 0; return 1; -} +} /* }}} */ /* {{{ proto DateTime date_modify(DateTime object, string modify) Alters the timestamp. @@ -3091,21 +3078,21 @@ PHP_METHOD(DateTimeImmutable, modify) } /* }}} */ -static void php_date_add(zval *object, zval *interval, zval *return_value TSRMLS_DC) +static void php_date_add(zval *object, zval *interval, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; php_interval_obj *intobj; timelib_time *new_time; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - intobj = (php_interval_obj *) Z_OBJ_P(interval); + intobj = Z_PHPINTERVAL_P(interval); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); new_time = timelib_add(dateobj->time, intobj->diff); timelib_time_dtor(dateobj->time); dateobj->time = new_time; -} +} /* }}} */ /* {{{ proto DateTime date_add(DateTime object, DateInterval interval) Adds an interval to the current date in object. @@ -3141,15 +3128,15 @@ PHP_METHOD(DateTimeImmutable, add) } /* }}} */ -static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS_DC) +static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; php_interval_obj *intobj; timelib_time *new_time; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - intobj = (php_interval_obj *) Z_OBJ_P(interval); + intobj = Z_PHPINTERVAL_P(interval); DATE_CHECK_INITIALIZED(intobj->initialized, DateInterval); if (intobj->diff->have_special_relative) { @@ -3160,7 +3147,7 @@ static void php_date_sub(zval *object, zval *interval, zval *return_value TSRMLS new_time = timelib_sub(dateobj->time, intobj->diff); timelib_time_dtor(dateobj->time); dateobj->time = new_time; -} +} /* }}} */ /* {{{ proto DateTime date_sub(DateTime object, DateInterval interval) Subtracts an interval to the current date in object. @@ -3208,11 +3195,11 @@ PHP_FUNCTION(date_timezone_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); - tzobj = (php_timezone_obj *) Z_OBJ_P(return_value); + tzobj = Z_PHPTIMEZONE_P(return_value); tzobj->initialized = 1; tzobj->type = dateobj->time->zone_type; switch (dateobj->time->zone_type) { @@ -3234,21 +3221,21 @@ PHP_FUNCTION(date_timezone_get) } /* }}} */ -static void php_date_timezone_set(zval *object, zval *timezone_object, zval *return_value TSRMLS_DC) +static void php_date_timezone_set(zval *object, zval *timezone_object, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; php_timezone_obj *tzobj; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - tzobj = (php_timezone_obj *) Z_OBJ_P(timezone_object); + tzobj = Z_PHPTIMEZONE_P(timezone_object); if (tzobj->type != TIMELIB_ZONETYPE_ID) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Can only do this for zones with ID for now"); return; } timelib_set_timezone(dateobj->time, tzobj->tzi.tz); timelib_unixtime2local(dateobj->time, dateobj->time->sse); -} +} /* }}} */ /* {{{ proto DateTime date_timezone_set(DateTime object, DateTimeZone object) Sets the timezone for the DateTime object. @@ -3298,7 +3285,7 @@ PHP_FUNCTION(date_offset_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); if (dateobj->time->is_localtime/* && dateobj->time->tz_info*/) { switch (dateobj->time->zone_type) { @@ -3321,17 +3308,17 @@ PHP_FUNCTION(date_offset_get) } /* }}} */ -static void php_date_time_set(zval *object, long h, long i, long s, zval *return_value TSRMLS_DC) +static void php_date_time_set(zval *object, long h, long i, long s, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->h = h; dateobj->time->i = i; dateobj->time->s = s; timelib_update_ts(dateobj->time, NULL); -} +} /* }}} */ /* {{{ proto DateTime date_time_set(DateTime object, long hour, long minute[, long second]) Sets the time. @@ -3369,17 +3356,17 @@ PHP_METHOD(DateTimeImmutable, setTime) } /* }}} */ -static void php_date_date_set(zval *object, long y, long m, long d, zval *return_value TSRMLS_DC) +static void php_date_date_set(zval *object, long y, long m, long d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = m; dateobj->time->d = d; timelib_update_ts(dateobj->time, NULL); -} +} /* }}} */ /* {{{ proto DateTime date_date_set(DateTime object, long year, long month, long day) Sets the date. @@ -3417,11 +3404,11 @@ PHP_METHOD(DateTimeImmutable, setDate) } /* }}} */ -static void php_date_isodate_set(zval *object, long y, long w, long d, zval *return_value TSRMLS_DC) +static void php_date_isodate_set(zval *object, long y, long w, long d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); dateobj->time->y = y; dateobj->time->m = 1; @@ -3431,7 +3418,7 @@ static void php_date_isodate_set(zval *object, long y, long w, long d, zval *ret dateobj->time->have_relative = 1; timelib_update_ts(dateobj->time, NULL); -} +} /* }}} */ /* {{{ proto DateTime date_isodate_set(DateTime object, long year, long week[, long day]) Sets the ISO date. @@ -3469,15 +3456,15 @@ PHP_METHOD(DateTimeImmutable, setISODate) } /* }}} */ -static void php_date_timestamp_set(zval *object, long timestamp, zval *return_value TSRMLS_DC) +static void php_date_timestamp_set(zval *object, long timestamp, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_unixtime2local(dateobj->time, (timelib_sll)timestamp); timelib_update_ts(dateobj->time, NULL); -} +} /* }}} */ /* {{{ proto DateTime date_timestamp_set(DateTime object, long unixTimestamp) Sets the date and time based on an Unix timestamp. @@ -3528,7 +3515,7 @@ PHP_FUNCTION(date_timestamp_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { RETURN_FALSE; } - dateobj = (php_date_obj *) Z_OBJ_P(object); + dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); timelib_update_ts(dateobj->time, NULL); @@ -3554,15 +3541,15 @@ PHP_FUNCTION(date_diff) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } - dateobj1 = (php_date_obj *) Z_OBJ_P(object1 TSRMLS_CC); - dateobj2 = (php_date_obj *) Z_OBJ_P(object2 TSRMLS_CC); + dateobj1 = Z_PHPDATE_P(object1 TSRMLS_CC); + dateobj2 = Z_PHPDATE_P(object2 TSRMLS_CC); DATE_CHECK_INITIALIZED(dateobj1->time, DateTimeInterface); DATE_CHECK_INITIALIZED(dateobj2->time, DateTimeInterface); timelib_update_ts(dateobj1->time, NULL); timelib_update_ts(dateobj2->time, NULL); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); - interval = (php_interval_obj*)Z_OBJ_P(return_value TSRMLS_CC); + interval = Z_PHPINTERVAL_P(return_value TSRMLS_CC); interval->diff = timelib_diff(dateobj1->time, dateobj2->time); if (absolute) { interval->diff->invert = 0; @@ -3571,7 +3558,7 @@ PHP_FUNCTION(date_diff) } /* }}} */ -static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_DC) +static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_DC) /* {{{ */ { char *tzid; @@ -3589,7 +3576,7 @@ static int timezone_initialize(timelib_tzinfo **tzi, /*const*/ char *tz TSRMLS_D php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unknown or bad timezone (%s)", tz); return FAILURE; } -} +} /* }}} */ /* {{{ proto DateTimeZone timezone_open(string timezone) Returns new DateTimeZone object @@ -3607,7 +3594,7 @@ PHP_FUNCTION(timezone_open) if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) { RETURN_FALSE; } - tzobj = (php_timezone_obj*)Z_OBJ_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); + tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -3628,7 +3615,7 @@ PHP_METHOD(DateTimeZone, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { if (SUCCESS == timezone_initialize(&tzi, tz TSRMLS_CC)) { - tzobj = (php_timezone_obj*)Z_OBJ_P(getThis()); + tzobj = Z_PHPTIMEZONE_P(getThis()); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -3640,7 +3627,7 @@ PHP_METHOD(DateTimeZone, __construct) } /* }}} */ -static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC) +static int php_date_timezone_initialize_from_hash(zval **return_value, php_timezone_obj **tzobj, HashTable *myht TSRMLS_DC) /* {{{ */ { zval *z_timezone; zval *z_timezone_type; @@ -3683,7 +3670,7 @@ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timez } } return FAILURE; -} +} /* }}} */ /* {{{ proto DateTimeZone::__set_state() * */ @@ -3700,7 +3687,7 @@ PHP_METHOD(DateTimeZone, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC); - tzobj = (php_timezone_obj *) Z_OBJ_P(return_value); + tzobj = Z_PHPTIMEZONE_P(return_value); php_date_timezone_initialize_from_hash(&return_value, &tzobj, myht TSRMLS_CC); } /* }}} */ @@ -3713,7 +3700,7 @@ PHP_METHOD(DateTimeZone, __wakeup) php_timezone_obj *tzobj; HashTable *myht; - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); myht = Z_OBJPROP_P(object); @@ -3732,7 +3719,7 @@ PHP_FUNCTION(timezone_name_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); switch (tzobj->type) { @@ -3798,9 +3785,9 @@ PHP_FUNCTION(timezone_offset_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_date) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); - dateobj = (php_date_obj *) Z_OBJ_P(dateobject); + dateobj = Z_PHPDATE_P(dateobject); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); switch (tzobj->type) { @@ -3832,7 +3819,7 @@ PHP_FUNCTION(timezone_transitions_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; @@ -3910,7 +3897,7 @@ PHP_FUNCTION(timezone_location_get) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - tzobj = (php_timezone_obj *) Z_OBJ_P(object); + tzobj = Z_PHPTIMEZONE_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); if (tzobj->type != TIMELIB_ZONETYPE_ID) { RETURN_FALSE; @@ -3924,7 +3911,7 @@ PHP_FUNCTION(timezone_location_get) } /* }}} */ -static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *format, int format_length TSRMLS_DC) +static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; @@ -3955,7 +3942,7 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma } timelib_error_container_dtor(errors); return retval; -} +} /* }}} */ /* {{{ date_interval_read_property */ zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) @@ -3973,7 +3960,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze key = NULL; } - obj = (php_interval_obj *)Z_OBJ_P(object); + obj = Z_PHPINTERVAL_P(object); if (!obj->initialized) { retval = (zend_get_std_object_handlers())->read_property(object, member, type, key, rv TSRMLS_CC); @@ -4039,7 +4026,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const key = NULL; } - obj = (php_interval_obj *)Z_OBJ_P(object); + obj = Z_PHPINTERVAL_P(object); if (!obj->initialized) { (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); @@ -4097,7 +4084,7 @@ PHP_METHOD(DateInterval, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &interval_string, &interval_string_length) == SUCCESS) { if (date_interval_initialize(&reltime, interval_string, interval_string_length TSRMLS_CC) == SUCCESS) { - diobj = (php_interval_obj *)Z_OBJ_P(getThis()); + diobj = Z_PHPINTERVAL_P(getThis()); diobj->diff = reltime; diobj->initialized = 1; } else { @@ -4109,7 +4096,7 @@ PHP_METHOD(DateInterval, __construct) /* }}} */ -static int php_date_interval_initialize_from_hash(zval **return_value, php_interval_obj **intobj, HashTable *myht TSRMLS_DC) +static int php_date_interval_initialize_from_hash(zval **return_value, php_interval_obj **intobj, HashTable *myht TSRMLS_DC) /* {{{ */ { (*intobj)->diff = timelib_rel_time_ctor(); @@ -4153,7 +4140,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter (*intobj)->initialized = 1; return 0; -} +} /* }}} */ /* {{{ proto DateInterval::__set_state() */ @@ -4170,7 +4157,7 @@ PHP_METHOD(DateInterval, __set_state) myht = HASH_OF(array); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); - intobj = (php_interval_obj *) Z_OBJ_P(return_value); + intobj = Z_PHPINTERVAL_P(return_value); php_date_interval_initialize_from_hash(&return_value, &intobj, myht TSRMLS_CC); } /* }}} */ @@ -4183,13 +4170,14 @@ PHP_METHOD(DateInterval, __wakeup) php_interval_obj *intobj; HashTable *myht; - intobj = (php_interval_obj *) Z_OBJ_P(object); + intobj = Z_PHPINTERVAL_P(object); myht = Z_OBJPROP_P(object); php_date_interval_initialize_from_hash(&return_value, &intobj, myht TSRMLS_CC); } /* }}} */ + /* {{{ proto DateInterval date_interval_create_from_date_string(string time) Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string */ @@ -4208,7 +4196,7 @@ PHP_FUNCTION(date_interval_create_from_date_string) php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); time = timelib_strtotime(time_str, time_str_len, &err, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); - diobj = (php_interval_obj *) Z_OBJ_P(return_value); + diobj = Z_PHPINTERVAL_P(return_value); diobj->diff = timelib_rel_time_clone(&time->relative); diobj->initialized = 1; timelib_time_dtor(time); @@ -4291,14 +4279,14 @@ PHP_FUNCTION(date_interval_format) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interval, &format, &format_len) == FAILURE) { RETURN_FALSE; } - diobj = (php_interval_obj *) Z_OBJ_P(object); + diobj = Z_PHPINTERVAL_P(object); DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval); RETURN_STR(date_interval_format(format, format_len, diobj->diff)); } /* }}} */ -static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) +static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; @@ -4320,7 +4308,7 @@ static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_ } timelib_error_container_dtor(errors); return retval; -} +} /* }}} */ /* {{{ proto DatePeriod::__construct(DateTime $start, DateInterval $interval, int recurrences|DateTime $end) Creates new DatePeriod object. @@ -4348,7 +4336,7 @@ PHP_METHOD(DatePeriod, __construct) } } - dpobj = (php_period_obj*)Z_OBJ_P(getThis()); + dpobj = Z_PHPPERIOD_P(getThis()); dpobj->current = NULL; if (isostr) { @@ -4372,10 +4360,10 @@ PHP_METHOD(DatePeriod, __construct) dpobj->start_ce = date_ce_date; } else { /* init */ - intobj = (php_interval_obj *) Z_OBJ_P(interval); + intobj = Z_PHPINTERVAL_P(interval); /* start date */ - dateobj = (php_date_obj *) Z_OBJ_P(start); + dateobj = Z_PHPDATE_P(start); clone = timelib_time_ctor(); memcpy(clone, dateobj->time, sizeof(timelib_time)); if (dateobj->time->tz_abbr) { @@ -4392,7 +4380,7 @@ PHP_METHOD(DatePeriod, __construct) /* end date */ if (end) { - dateobj = (php_date_obj *) Z_OBJ_P(end); + dateobj = Z_PHPDATE_P(end); clone = timelib_time_clone(dateobj->time); dpobj->end = clone; } @@ -4410,7 +4398,7 @@ PHP_METHOD(DatePeriod, __construct) } /* }}} */ -static int check_id_allowed(char *id, long what) +static int check_id_allowed(char *id, long what) /* {{{ */ { if (what & PHP_DATE_TIMEZONE_GROUP_AFRICA && strncasecmp(id, "Africa/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_AMERICA && strncasecmp(id, "America/", 8) == 0) return 1; @@ -4424,7 +4412,7 @@ static int check_id_allowed(char *id, long what) if (what & PHP_DATE_TIMEZONE_GROUP_PACIFIC && strncasecmp(id, "Pacific/", 8) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_UTC && strncasecmp(id, "UTC", 3) == 0) return 1; return 0; -} +} /* }}} */ /* {{{ proto array timezone_identifiers_list([long what[, string country]]) Returns numerically index array with all timezone identifiers. @@ -4758,20 +4746,20 @@ PHP_FUNCTION(date_sun_info) } /* }}} */ -static HashTable *date_object_get_gc_period(zval *object, zval **table, int *n TSRMLS_DC) +static HashTable *date_object_get_gc_period(zval *object, zval **table, int *n TSRMLS_DC) /* {{{ */ { *table = NULL; *n = 0; return zend_std_get_properties(object TSRMLS_CC); -} +} /* }}} */ -static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) +static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) /* {{{ */ { HashTable *props; zval zv; php_period_obj *period_obj; - period_obj = (php_period_obj*)Z_OBJ_P(object); + period_obj = Z_PHPPERIOD_P(object); props = zend_std_get_properties(object TSRMLS_CC); @@ -4782,7 +4770,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) if (period_obj->start) { php_date_obj *date_obj; object_init_ex(&zv, date_ce_date); - date_obj = (php_date_obj*)Z_OBJ(zv); + date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->start); } else { ZVAL_NULL(&zv); @@ -4792,7 +4780,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) if (period_obj->current) { php_date_obj *date_obj; object_init_ex(&zv, date_ce_date); - date_obj = (php_date_obj*)Z_OBJ(zv); + date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->current); } else { ZVAL_NULL(&zv); @@ -4802,7 +4790,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) if (period_obj->end) { php_date_obj *date_obj; object_init_ex(&zv, date_ce_date); - date_obj = (php_date_obj*)Z_OBJ(zv); + date_obj = Z_PHPDATE_P(&zv); date_obj->time = timelib_time_clone(period_obj->end); } else { ZVAL_NULL(&zv); @@ -4812,7 +4800,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) if (period_obj->interval) { php_interval_obj *interval_obj; object_init_ex(&zv, date_ce_interval); - interval_obj = (php_interval_obj*)Z_OBJ(zv); + interval_obj = Z_PHPINTERVAL_P(&zv); interval_obj->diff = timelib_rel_time_clone(period_obj->interval); interval_obj->initialized = 1; } else { @@ -4828,9 +4816,9 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) zend_hash_str_update(props, "include_start_date", sizeof("include_start_date")-1, &zv); return props; -} +} /* }}} */ -static int php_date_period_initialize_from_hash(php_period_obj *period_obj, HashTable *myht TSRMLS_DC) +static int php_date_period_initialize_from_hash(php_period_obj *period_obj, HashTable *myht TSRMLS_DC) /* {{{ */ { zval *ht_entry; @@ -4840,7 +4828,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash if (ht_entry) { if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); + date_obj = Z_PHPDATE_P(ht_entry); period_obj->start = timelib_time_clone(date_obj->time); period_obj->start_ce = Z_OBJCE_P(ht_entry); } else if (Z_TYPE_P(ht_entry) != IS_NULL) { @@ -4854,7 +4842,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash if (ht_entry) { if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); + date_obj = Z_PHPDATE_P(ht_entry); period_obj->end = timelib_time_clone(date_obj->time); } else if (Z_TYPE_P(ht_entry) != IS_NULL) { return 0; @@ -4867,7 +4855,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash if (ht_entry) { if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_date) { php_date_obj *date_obj; - date_obj = (php_date_obj*)Z_OBJ_P(ht_entry); + date_obj = Z_PHPDATE_P(ht_entry); period_obj->current = timelib_time_clone(date_obj->time); } else if (Z_TYPE_P(ht_entry) != IS_NULL) { return 0; @@ -4880,7 +4868,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash if (ht_entry) { if (Z_TYPE_P(ht_entry) == IS_OBJECT && Z_OBJCE_P(ht_entry) == date_ce_interval) { php_interval_obj *interval_obj; - interval_obj = (php_interval_obj*)Z_OBJ_P(ht_entry); + interval_obj = Z_PHPINTERVAL_P(ht_entry); period_obj->interval = timelib_rel_time_clone(interval_obj->diff); } else { /* interval is required */ return 0; @@ -4908,7 +4896,7 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash period_obj->initialized = 1; return 1; -} +} /* }}} */ /* {{{ proto DatePeriod::__set_state() */ @@ -4925,7 +4913,7 @@ PHP_METHOD(DatePeriod, __set_state) myht = Z_ARRVAL_P(array); object_init_ex(return_value, date_ce_period); - period_obj = (php_period_obj*)Z_OBJ_P(return_value); + period_obj = Z_PHPPERIOD_P(return_value); if (!php_date_period_initialize_from_hash(period_obj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DatePeriod object"); } @@ -4940,7 +4928,7 @@ PHP_METHOD(DatePeriod, __wakeup) php_period_obj *period_obj; HashTable *myht; - period_obj = (php_period_obj*)Z_OBJ_P(object); + period_obj = Z_PHPPERIOD_P(object); myht = Z_OBJPROP_P(object); @@ -4978,7 +4966,6 @@ static void date_period_write_property(zval *object, zval *member, zval *value, } /* }}} */ - /* * Local variables: * tab-width: 4 -- cgit v1.2.1 From 5ec42e9dec966e49584a2532727998532e61b9a1 Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Sun, 16 Mar 2014 18:09:27 +0800 Subject: Fixed memory leak while cloning (All tests passes now in ext/date) --- ext/date/php_date.c | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index b12705d330..65fe5c46ed 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2090,14 +2090,16 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); } /* }}} */ -static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ +static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type, int init_props TSRMLS_DC) /* {{{ */ { php_date_obj *intern; intern = ecalloc(1, sizeof(php_date_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); - object_properties_init(&intern->std, class_type); + if (init_props) { + object_properties_init(&intern->std, class_type); + } intern->std.handlers = &date_object_handlers_date; return &intern->std; @@ -2105,13 +2107,13 @@ static inline zend_object *date_object_new_date_ex(zend_class_entry *class_type static zend_object *date_object_new_date(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { - return date_object_new_date_ex(class_type TSRMLS_CC); + return date_object_new_date_ex(class_type, 1 TSRMLS_CC); } /* }}} */ static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) /* {{{ */ { php_date_obj *old_obj = Z_PHPDATE_P(this_ptr); - php_date_obj *new_obj = php_date_obj_from_obj(date_object_new_date_ex(old_obj->std.ce TSRMLS_CC)); + php_date_obj *new_obj = php_date_obj_from_obj(date_object_new_date_ex(old_obj->std.ce, 0 TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->time) { @@ -2223,14 +2225,16 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ return props; } /* }}} */ -static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ +static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_type, int init_props TSRMLS_DC) /* {{{ */ { php_timezone_obj *intern; intern = ecalloc(1, sizeof(php_timezone_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); - object_properties_init(&intern->std, class_type); + if (init_props) { + object_properties_init(&intern->std, class_type); + } intern->std.handlers = &date_object_handlers_timezone; return &intern->std; @@ -2238,13 +2242,13 @@ static inline zend_object *date_object_new_timezone_ex(zend_class_entry *class_t static zend_object *date_object_new_timezone(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { - return date_object_new_timezone_ex(class_type TSRMLS_CC); + return date_object_new_timezone_ex(class_type, 1 TSRMLS_CC); } /* }}} */ static zend_object *date_object_clone_timezone(zval *this_ptr TSRMLS_DC) /* {{{ */ { php_timezone_obj *old_obj = Z_PHPTIMEZONE_P(this_ptr); - php_timezone_obj *new_obj = php_timezone_obj_from_obj(date_object_new_timezone_ex(old_obj->std.ce TSRMLS_CC)); + php_timezone_obj *new_obj = php_timezone_obj_from_obj(date_object_new_timezone_ex(old_obj->std.ce, 0 TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); if (!old_obj->initialized) { @@ -2314,14 +2318,16 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* return props; } /* }}} */ -static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ +static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_type, int init_props TSRMLS_DC) /* {{{ */ { php_interval_obj *intern; intern = ecalloc(1, sizeof(php_interval_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); - object_properties_init(&intern->std, class_type); + if (init_props) { + object_properties_init(&intern->std, class_type); + } intern->std.handlers = &date_object_handlers_interval; return &intern->std; @@ -2329,13 +2335,13 @@ static inline zend_object *date_object_new_interval_ex(zend_class_entry *class_t static zend_object *date_object_new_interval(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { - return date_object_new_interval_ex(class_type TSRMLS_CC); + return date_object_new_interval_ex(class_type, 1 TSRMLS_CC); } /* }}} */ static zend_object *date_object_clone_interval(zval *this_ptr TSRMLS_DC) /* {{{ */ { php_interval_obj *old_obj = Z_PHPINTERVAL_P(this_ptr); - php_interval_obj *new_obj = php_interval_obj_from_obj(date_object_new_interval_ex(old_obj->std.ce TSRMLS_CC)); + php_interval_obj *new_obj = php_interval_obj_from_obj(date_object_new_interval_ex(old_obj->std.ce, 0 TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); @@ -2393,14 +2399,16 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) /* return props; } /* }}} */ -static inline zend_object *date_object_new_period_ex(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ +static inline zend_object *date_object_new_period_ex(zend_class_entry *class_type, int init_props TSRMLS_DC) /* {{{ */ { php_period_obj *intern; intern = ecalloc(1, sizeof(php_period_obj) + sizeof(zval) * (class_type->default_properties_count - 1)); zend_object_std_init(&intern->std, class_type TSRMLS_CC); - object_properties_init(&intern->std, class_type); + if (init_props) { + object_properties_init(&intern->std, class_type); + } //??? date_object_free_storage_period, NULL TSRMLS_CC); intern->std.handlers = &date_object_handlers_period; @@ -2409,13 +2417,13 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ static zend_object *date_object_new_period(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { - return date_object_new_period_ex(class_type TSRMLS_CC); + return date_object_new_period_ex(class_type, 1 TSRMLS_CC); } /* }}} */ static zend_object *date_object_clone_period(zval *this_ptr TSRMLS_DC) /* {{{ */ { php_period_obj *old_obj = Z_PHPPERIOD_P(this_ptr); - php_period_obj *new_obj = php_period_obj_from_obj(date_object_new_period_ex(old_obj->std.ce TSRMLS_CC)); + php_period_obj *new_obj = php_period_obj_from_obj(date_object_new_period_ex(old_obj->std.ce, 0 TSRMLS_CC)); zend_objects_clone_members(&new_obj->std, &old_obj->std TSRMLS_CC); -- cgit v1.2.1 From b7938ab1bd765897bd6f08a48a8aea494a961ea9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 19 Mar 2014 17:00:28 +0400 Subject: Refactored GC (incomplete) --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 65fe5c46ed..8c08ddba20 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2440,6 +2440,7 @@ static void date_object_free_storage_date(zend_object *object TSRMLS_DC) /* {{{ } zend_object_std_dtor(&intern->std TSRMLS_CC); + GC_REMOVE_FROM_BUFFER(object); efree(intern); } /* }}} */ @@ -2451,6 +2452,7 @@ static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) /* free(intern->tzi.z.abbr); } zend_object_std_dtor(&intern->std TSRMLS_CC); + GC_REMOVE_FROM_BUFFER(object); efree(intern); } /* }}} */ @@ -2460,6 +2462,7 @@ static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) /* timelib_rel_time_dtor(intern->diff); zend_object_std_dtor(&intern->std TSRMLS_CC); + GC_REMOVE_FROM_BUFFER(object); efree(intern); } /* }}} */ @@ -2481,6 +2484,7 @@ static void date_object_free_storage_period(zend_object *object TSRMLS_DC) /* {{ timelib_rel_time_dtor(intern->interval); zend_object_std_dtor(&intern->std TSRMLS_CC); + GC_REMOVE_FROM_BUFFER(object); efree(intern); } /* }}} */ -- cgit v1.2.1 From 7ce06ee5a7a216671c40169fc3326ca3f6fd92cc Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 21 Mar 2014 15:32:02 +0400 Subject: don't keep useless objects till the end of the script (destroy them immediately) --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 8c08ddba20..9070c3ba4e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2605,6 +2605,7 @@ PHP_FUNCTION(date_create) php_date_instantiate(date_ce_date, return_value TSRMLS_CC); if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(return_value); RETURN_FALSE; } } @@ -2625,6 +2626,7 @@ PHP_FUNCTION(date_create_immutable) php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(return_value); RETURN_FALSE; } } @@ -2645,6 +2647,7 @@ PHP_FUNCTION(date_create_from_format) php_date_instantiate(date_ce_date, return_value TSRMLS_CC); if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(return_value); RETURN_FALSE; } } @@ -2665,6 +2668,7 @@ PHP_FUNCTION(date_create_immutable_from_format) php_date_instantiate(date_ce_immutable, return_value TSRMLS_CC); if (!php_date_initialize(Z_PHPDATE_P(return_value), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(return_value); RETURN_FALSE; } } -- cgit v1.2.1 From ea85451b65b904d0670c4011c819a15431720432 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 28 Mar 2014 02:11:22 +0400 Subject: Refactored data structures to keep zend_object* instead of a whole zval in some places --- ext/date/php_date.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 9070c3ba4e..5164072104 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3635,8 +3635,8 @@ PHP_METHOD(DateTimeZone, __construct) tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; - } else { - ZVAL_NULL(getThis()); +//??? } else { +//??? ZVAL_NULL(getThis()); } } zend_restore_error_handling(&error_handling TSRMLS_CC); @@ -4103,8 +4103,8 @@ PHP_METHOD(DateInterval, __construct) diobj = Z_PHPINTERVAL_P(getThis()); diobj->diff = reltime; diobj->initialized = 1; - } else { - ZVAL_NULL(getThis()); +//??? } else { +//??? ZVAL_NULL(getThis()); } } zend_restore_error_handling(&error_handling TSRMLS_CC); -- cgit v1.2.1 From d8099d0468426dbee59f540048376653535270ce Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 2 Apr 2014 14:34:44 +0400 Subject: Changed data layout to allow more efficient operations --- ext/date/php_date.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 5164072104..e0cd1e3015 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -3968,7 +3968,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze zval tmp_member; timelib_sll value = -1; - if (member->type != IS_STRING) { + if (Z_TYPE_P(member) != IS_STRING) { tmp_member = *member; zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); @@ -4034,7 +4034,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const php_interval_obj *obj; zval tmp_member, tmp_value; - if (member->type != IS_STRING) { + if (Z_TYPE_P(member) != IS_STRING) { tmp_member = *member; zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); @@ -4054,7 +4054,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ - if (value->type != IS_LONG) { \ + if (Z_TYPE_P(value) != IS_LONG) { \ tmp_value = *value; \ zval_copy_ctor(&tmp_value); \ convert_to_long(&tmp_value); \ -- cgit v1.2.1 From 76cc99fe60d1e446a0250b4d778f02bcdbd7fc09 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 3 Apr 2014 15:26:23 +0400 Subject: Refactored ZVAL flags usage to simplify various checks (e.g. Z_REFCOUNTED(), candidate for GC, etc) --- ext/date/php_date.c | 1 - 1 file changed, 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e0cd1e3015..5809586a0d 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2491,7 +2491,6 @@ static void date_object_free_storage_period(zend_object *object TSRMLS_DC) /* {{ /* Advanced Interface */ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) /* {{{ */ { - Z_TYPE_P(object) = IS_OBJECT; object_init_ex(object, pce); return object; } /* }}} */ -- cgit v1.2.1 From 7402af380b3a700dda0e89470770fde15bd56204 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 9 Apr 2014 01:50:15 +0400 Subject: Fixed destruction of objects and iterators on unclean request shutdown and GC (few cases are still unfixed). Now we destroy objects it two steps. At first - object properties of all objects and only then the objects their selves. --- ext/date/php_date.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 5809586a0d..fa92c3495c 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1861,8 +1861,6 @@ static void date_period_it_dtor(zend_object_iterator *iter TSRMLS_DC) date_period_it_invalidate_current(iter TSRMLS_CC); zval_ptr_dtor(&iterator->intern.data); - - efree(iterator); } /* }}} */ @@ -1999,6 +1997,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ ce_date.create_object = date_object_new_date; date_ce_date = zend_register_internal_class_ex(&ce_date, NULL TSRMLS_CC); memcpy(&date_object_handlers_date, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_date.offset = XtOffsetOf(php_date_obj, std); date_object_handlers_date.free_obj = date_object_free_storage_date; date_object_handlers_date.clone_obj = date_object_clone_date; date_object_handlers_date.compare_objects = date_object_compare_date; @@ -2034,6 +2033,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ ce_timezone.create_object = date_object_new_timezone; date_ce_timezone = zend_register_internal_class_ex(&ce_timezone, NULL TSRMLS_CC); memcpy(&date_object_handlers_timezone, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_timezone.offset = XtOffsetOf(php_timezone_obj, std); date_object_handlers_timezone.free_obj = date_object_free_storage_timezone; date_object_handlers_timezone.clone_obj = date_object_clone_timezone; date_object_handlers_timezone.get_properties = date_object_get_properties_timezone; @@ -2061,6 +2061,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ ce_interval.create_object = date_object_new_interval; date_ce_interval = zend_register_internal_class_ex(&ce_interval, NULL TSRMLS_CC); memcpy(&date_object_handlers_interval, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_interval.offset = XtOffsetOf(php_interval_obj, std); date_object_handlers_interval.free_obj = date_object_free_storage_interval; date_object_handlers_interval.clone_obj = date_object_clone_interval; date_object_handlers_interval.read_property = date_interval_read_property; @@ -2076,6 +2077,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ date_ce_period->iterator_funcs.funcs = &date_period_it_funcs; zend_class_implements(date_ce_period TSRMLS_CC, 1, zend_ce_traversable); memcpy(&date_object_handlers_period, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); + date_object_handlers_period.offset = XtOffsetOf(php_period_obj, std); date_object_handlers_period.free_obj = date_object_free_storage_period; date_object_handlers_period.clone_obj = date_object_clone_period; date_object_handlers_period.get_properties = date_object_get_properties_period; @@ -2440,8 +2442,6 @@ static void date_object_free_storage_date(zend_object *object TSRMLS_DC) /* {{{ } zend_object_std_dtor(&intern->std TSRMLS_CC); - GC_REMOVE_FROM_BUFFER(object); - efree(intern); } /* }}} */ static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) /* {{{ */ @@ -2452,8 +2452,6 @@ static void date_object_free_storage_timezone(zend_object *object TSRMLS_DC) /* free(intern->tzi.z.abbr); } zend_object_std_dtor(&intern->std TSRMLS_CC); - GC_REMOVE_FROM_BUFFER(object); - efree(intern); } /* }}} */ static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) /* {{{ */ @@ -2462,8 +2460,6 @@ static void date_object_free_storage_interval(zend_object *object TSRMLS_DC) /* timelib_rel_time_dtor(intern->diff); zend_object_std_dtor(&intern->std TSRMLS_CC); - GC_REMOVE_FROM_BUFFER(object); - efree(intern); } /* }}} */ static void date_object_free_storage_period(zend_object *object TSRMLS_DC) /* {{{ */ @@ -2484,8 +2480,6 @@ static void date_object_free_storage_period(zend_object *object TSRMLS_DC) /* {{ timelib_rel_time_dtor(intern->interval); zend_object_std_dtor(&intern->std TSRMLS_CC); - GC_REMOVE_FROM_BUFFER(object); - efree(intern); } /* }}} */ /* Advanced Interface */ -- cgit v1.2.1 From 20f2e5986e7d9e5978eaed8d6d60cd6bf917ea37 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Wed, 9 Apr 2014 15:51:28 +0200 Subject: Fix ZTS build This only makes it compile, it doesn't actually work, presumably because interned strings are assumed in some places. --- ext/date/php_date.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index fa92c3495c..ca58fc1a4a 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1046,7 +1046,7 @@ char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) /* }}} */ /* {{{ date_format - (gm)date helper */ -static zend_string *date_format(char *format, int format_len, timelib_time *t, int localtime) +static zend_string *date_format(char *format, int format_len, timelib_time *t, int localtime TSRMLS_DC) { smart_str string = {0}; int i, length = 0; @@ -1239,7 +1239,7 @@ PHPAPI zend_string *php_format_date(char *format, int format_len, time_t ts, int timelib_unixtime2gmt(t, ts); } - string = date_format(format, format_len, t, localtime); + string = date_format(format, format_len, t, localtime TSRMLS_CC); timelib_time_dtor(t); return string; @@ -2191,7 +2191,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ } /* first we add the date and time in ISO format */ - ZVAL_STR(&zv, date_format("Y-m-d H:i:s", sizeof("Y-m-d H:i:s")-1, dateobj->time, 1)); + ZVAL_STR(&zv, date_format("Y-m-d H:i:s", sizeof("Y-m-d H:i:s")-1, dateobj->time, 1 TSRMLS_CC)); zend_hash_str_update(props, "date", sizeof("date")-1, &zv); /* then we add the timezone name (or similar) */ @@ -2979,7 +2979,7 @@ PHP_FUNCTION(date_format) } dateobj = Z_PHPDATE_P(object); DATE_CHECK_INITIALIZED(dateobj->time, DateTime); - RETURN_STR(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime)); + RETURN_STR(date_format(format, format_len, dateobj->time, dateobj->time->is_localtime TSRMLS_CC)); } /* }}} */ @@ -3550,15 +3550,15 @@ PHP_FUNCTION(date_diff) if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } - dateobj1 = Z_PHPDATE_P(object1 TSRMLS_CC); - dateobj2 = Z_PHPDATE_P(object2 TSRMLS_CC); + dateobj1 = Z_PHPDATE_P(object1); + dateobj2 = Z_PHPDATE_P(object2); DATE_CHECK_INITIALIZED(dateobj1->time, DateTimeInterface); DATE_CHECK_INITIALIZED(dateobj2->time, DateTimeInterface); timelib_update_ts(dateobj1->time, NULL); timelib_update_ts(dateobj2->time, NULL); php_date_instantiate(date_ce_interval, return_value TSRMLS_CC); - interval = Z_PHPINTERVAL_P(return_value TSRMLS_CC); + interval = Z_PHPINTERVAL_P(return_value); interval->diff = timelib_diff(dateobj1->time, dateobj2->time); if (absolute) { interval->diff->invert = 0; @@ -3603,7 +3603,7 @@ PHP_FUNCTION(timezone_open) if (SUCCESS != timezone_initialize(&tzi, tz TSRMLS_CC)) { RETURN_FALSE; } - tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC) TSRMLS_CC); + tzobj = Z_PHPTIMEZONE_P(php_date_instantiate(date_ce_timezone, return_value TSRMLS_CC)); tzobj->type = TIMELIB_ZONETYPE_ID; tzobj->tzi.tz = tzi; tzobj->initialized = 1; @@ -4214,7 +4214,7 @@ PHP_FUNCTION(date_interval_create_from_date_string) /* }}} */ /* {{{ date_interval_format - */ -static zend_string *date_interval_format(char *format, int format_len, timelib_rel_time *t) +static zend_string *date_interval_format(char *format, int format_len, timelib_rel_time *t TSRMLS_DC) { smart_str string = {0}; int i, length, have_format_spec = 0; @@ -4291,7 +4291,7 @@ PHP_FUNCTION(date_interval_format) diobj = Z_PHPINTERVAL_P(object); DATE_CHECK_INITIALIZED(diobj->initialized, DateInterval); - RETURN_STR(date_interval_format(format, format_len, diobj->diff)); + RETURN_STR(date_interval_format(format, format_len, diobj->diff TSRMLS_CC)); } /* }}} */ -- cgit v1.2.1 From 8c88b6e81c4565b0102a9022d647817845f0c18d Mon Sep 17 00:00:00 2001 From: Boro Sitnikovski Date: Mon, 17 Feb 2014 01:07:52 +0100 Subject: Fix bug #66721 Add NULL check to php_date_parse_tzfile's retval --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index c0566334db..4a37961b02 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2587,6 +2587,10 @@ static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dat tzi = php_date_parse_tzfile(Z_STRVAL_PP(z_timezone), DATE_TIMEZONEDB TSRMLS_CC); + if (tzi == NULL) { + return 0; + } + ALLOC_INIT_ZVAL(tmp_obj); tzobj = zend_object_store_get_object(php_date_instantiate(date_ce_timezone, tmp_obj TSRMLS_CC) TSRMLS_CC); tzobj->type = TIMELIB_ZONETYPE_ID; -- cgit v1.2.1 From 050d7e38ad4163e7fa65e26724d3516ce7b33601 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 15 Apr 2014 15:40:40 +0400 Subject: Cleanup (1-st round) --- ext/date/php_date.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index ca58fc1a4a..6bc2db7a71 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1807,8 +1807,8 @@ PHP_FUNCTION(getdate) add_assoc_long(return_value, "mon", ts->m); add_assoc_long(return_value, "year", ts->y); add_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); - add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d), 1); - add_assoc_string(return_value, "month", mon_full_names[ts->m - 1], 1); + add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d)); + add_assoc_string(return_value, "month", mon_full_names[ts->m - 1]); add_index_long(return_value, 0, timestamp); timelib_time_dtor(ts); @@ -2826,14 +2826,14 @@ static void zval_from_error_container(zval *z, timelib_error_container *error) / add_assoc_long(z, "warning_count", error->warning_count); array_init(&element); for (i = 0; i < error->warning_count; i++) { - add_index_string(&element, error->warning_messages[i].position, error->warning_messages[i].message, 1); + add_index_string(&element, error->warning_messages[i].position, error->warning_messages[i].message); } add_assoc_zval(z, "warnings", &element); add_assoc_long(z, "error_count", error->error_count); array_init(&element); for (i = 0; i < error->error_count; i++) { - add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message, 1); + add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message); } add_assoc_zval(z, "errors", &element); } /* }}} */ @@ -2891,16 +2891,16 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * break; case TIMELIB_ZONETYPE_ID: if (parsed_time->tz_abbr) { - add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); + add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr); } if (parsed_time->tz_info) { - add_assoc_string(return_value, "tz_id", parsed_time->tz_info->name, 1); + add_assoc_string(return_value, "tz_id", parsed_time->tz_info->name); } break; case TIMELIB_ZONETYPE_ABBR: PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(zone, z); add_assoc_bool(return_value, "is_dst", parsed_time->dst); - add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr, 1); + add_assoc_string(return_value, "tz_abbr", parsed_time->tz_abbr); break; } } @@ -3840,7 +3840,7 @@ PHP_FUNCTION(timezone_transitions_get) add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC)); \ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \ - add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx], 1); \ + add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx]); \ add_next_index_zval(return_value, &element); #define add(i,ts) \ @@ -3849,7 +3849,7 @@ PHP_FUNCTION(timezone_transitions_get) add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC)); \ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ - add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx], 1); \ + add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \ add_next_index_zval(return_value, &element); #define add_last() add(tzobj->tzi.tz->timecnt - 1, timestamp_begin) @@ -3913,10 +3913,10 @@ PHP_FUNCTION(timezone_location_get) } array_init(return_value); - add_assoc_string(return_value, "country_code", tzobj->tzi.tz->location.country_code, 1); + add_assoc_string(return_value, "country_code", tzobj->tzi.tz->location.country_code); add_assoc_double(return_value, "latitude", tzobj->tzi.tz->location.latitude); add_assoc_double(return_value, "longitude", tzobj->tzi.tz->location.longitude); - add_assoc_string(return_value, "comments", tzobj->tzi.tz->location.comments, 1); + add_assoc_string(return_value, "comments", tzobj->tzi.tz->location.comments); } /* }}} */ @@ -4454,10 +4454,10 @@ PHP_FUNCTION(timezone_identifiers_list) for (i = 0; i < item_count; ++i) { if (what == PHP_DATE_TIMEZONE_PER_COUNTRY) { if (tzdb->data[table[i].pos + 5] == option[0] && tzdb->data[table[i].pos + 6] == option[1]) { - add_next_index_string(return_value, table[i].id, 1); + add_next_index_string(return_value, table[i].id); } } else if (what == PHP_DATE_TIMEZONE_GROUP_ALL_W_BC || (check_id_allowed(table[i].id, what) && (tzdb->data[table[i].pos + 4] == '\1'))) { - add_next_index_string(return_value, table[i].id, 1); + add_next_index_string(return_value, table[i].id); } }; } @@ -4492,7 +4492,7 @@ PHP_FUNCTION(timezone_abbreviations_list) add_assoc_bool(&element, "dst", entry->type); add_assoc_long(&element, "offset", entry->gmtoffset); if (entry->full_tz_name) { - add_assoc_string(&element, "timezone_id", entry->full_tz_name, 1); + add_assoc_string(&element, "timezone_id", entry->full_tz_name); } else { add_assoc_null(&element, "timezone_id"); } -- cgit v1.2.1 From f9b26bc39a9ea9b1380628eeb0e6dad3c93cfcb0 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 15 Apr 2014 21:56:30 +0400 Subject: Cleanup (2-nd round) --- ext/date/php_date.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 6bc2db7a71..8009897b9a 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2212,7 +2212,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ abs(utc_offset / 60), abs((utc_offset % 60))); -//??? ZVAL_STRING(zv, tmpstr, 0); + // TODO: avoid reallocation ??? ZVAL_STRING(&zv, tmpstr); efree(tmpstr); } @@ -2306,7 +2306,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* abs(tzobj->tzi.utc_offset / 60), abs((tzobj->tzi.utc_offset % 60))); -//??? ZVAL_STRING(zv, tmpstr, 0); + // TODO: avoid reallocation ??? ZVAL_STRING(&zv, tmpstr); efree(tmpstr); } @@ -3744,7 +3744,7 @@ PHP_FUNCTION(timezone_name_get) abs(utc_offset / 60), abs((utc_offset % 60))); -//??? RETURN_STRING(tmpstr, 0); + // TODO: avoid reallocation ??? RETVAL_STRING(tmpstr); efree(tmpstr); return; @@ -4003,8 +4003,6 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze return retval; } while(0); -//??? ALLOC_INIT_ZVAL(retval); -//??? Z_SET_REFCOUNT_P(retval, 0); retval = rv; if (value != -99999) { @@ -4622,7 +4620,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su switch (retformat) { case SUNFUNCS_RET_STRING: spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); -//??? RETURN_STRINGL(retstr, 5, 0); + // TODO: avoid reallocation ??? RETVAL_STRINGL(retstr, 5); efree(retstr); return; -- cgit v1.2.1 From 7a1a6092f652f1c322e3a09f9fb1491775fb4072 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Tue, 15 Apr 2014 18:33:38 +0200 Subject: Add functions for extracting long/double/string from zval These function get the long / double / string value of a zval with usual cast semantics, but without actually modifying the zval. Didn't go on a killing spree for convert_to_* yet... --- ext/date/php_date.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 8009897b9a..a336321c61 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4045,16 +4045,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ - if (Z_TYPE_P(value) != IS_LONG) { \ - tmp_value = *value; \ - zval_copy_ctor(&tmp_value); \ - convert_to_long(&tmp_value); \ - value = &tmp_value; \ - } \ - obj->diff->n = Z_LVAL_P(value); \ - if (value == &tmp_value) { \ - zval_dtor(value); \ - } \ + obj->diff->n = zval_get_long(value TSRMLS_CC); \ break; \ } -- cgit v1.2.1 From 6cf5e51f3eab233d8694a9b1344eecc62ca0e1c0 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 15 Apr 2014 22:43:18 +0400 Subject: Reduced memory realocations --- ext/date/php_date.c | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 8009897b9a..68084a2f6f 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2204,17 +2204,15 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ ZVAL_STRING(&zv, dateobj->time->tz_info->name); break; case TIMELIB_ZONETYPE_OFFSET: { - char *tmpstr = emalloc(sizeof("UTC+05:00")); + zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); timelib_sll utc_offset = dateobj->time->z; - snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", + tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", utc_offset > 0 ? '-' : '+', abs(utc_offset / 60), abs((utc_offset % 60))); - // TODO: avoid reallocation ??? - ZVAL_STRING(&zv, tmpstr); - efree(tmpstr); + ZVAL_STR(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: @@ -2299,16 +2297,14 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* ZVAL_STRING(&zv, tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { - char *tmpstr = emalloc(sizeof("UTC+05:00")); + zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); - snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", + tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", tzobj->tzi.utc_offset > 0 ? '-' : '+', abs(tzobj->tzi.utc_offset / 60), abs((tzobj->tzi.utc_offset % 60))); - // TODO: avoid reallocation ??? - ZVAL_STRING(&zv, tmpstr); - efree(tmpstr); + ZVAL_STR(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: @@ -3736,18 +3732,15 @@ PHP_FUNCTION(timezone_name_get) RETURN_STRING(tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { - char *tmpstr = emalloc(sizeof("UTC+05:00")); + zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); timelib_sll utc_offset = tzobj->tzi.utc_offset; - snprintf(tmpstr, sizeof("+05:00"), "%c%02d:%02d", + tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", utc_offset > 0 ? '-' : '+', abs(utc_offset / 60), abs((utc_offset % 60))); - // TODO: avoid reallocation ??? - RETVAL_STRING(tmpstr); - efree(tmpstr); - return; + RETURN_STR(tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: -- cgit v1.2.1 From e96073b1e40c4999dee70db684721a582ea5e055 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Thu, 17 Apr 2014 15:40:45 +0400 Subject: Moved zend_literal->cache_slot right into zval. It should be accessed using Z_CACHE_SLOT() macro. zend_literal structure is removed. API functions that accepted pointer to zend_literal now accept pointer to zval or cache_slot directly. Calls of such functiond that now accept cache_slot need to be changed to pass -1 instead of NULL. --- ext/date/php_date.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 634f08afa7..06c131014e 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -633,10 +633,10 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC); static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC); -zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC); -void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); -static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC); -static void date_period_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC); +zval *date_interval_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC); +void date_interval_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC); +static zval *date_period_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC); +static void date_period_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC); /* {{{ Module struct */ zend_module_entry date_module_entry = { @@ -3947,7 +3947,7 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma } /* }}} */ /* {{{ date_interval_read_property */ -zval *date_interval_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) +zval *date_interval_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC) { php_interval_obj *obj; zval *retval; @@ -3959,13 +3959,13 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; - key = NULL; + cache_slot = -1; } obj = Z_PHPINTERVAL_P(object); if (!obj->initialized) { - retval = (zend_get_std_object_handlers())->read_property(object, member, type, key, rv TSRMLS_CC); + retval = (zend_get_std_object_handlers())->read_property(object, member, type, cache_slot, rv TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } @@ -3987,7 +3987,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze GET_VALUE_FROM_STRUCT(invert, "invert"); GET_VALUE_FROM_STRUCT(days, "days"); /* didn't find any */ - retval = (zend_get_std_object_handlers())->read_property(object, member, type, key, rv TSRMLS_CC); + retval = (zend_get_std_object_handlers())->read_property(object, member, type, cache_slot, rv TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); @@ -4013,7 +4013,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, const ze /* }}} */ /* {{{ date_interval_write_property */ -void date_interval_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) +void date_interval_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) { php_interval_obj *obj; zval tmp_member, tmp_value; @@ -4023,13 +4023,13 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; - key = NULL; + cache_slot = -1; } obj = Z_PHPINTERVAL_P(object); if (!obj->initialized) { - (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); + (zend_get_std_object_handlers())->write_property(object, member, value, cache_slot TSRMLS_CC); if (member == &tmp_member) { zval_dtor(member); } @@ -4051,7 +4051,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, const SET_VALUE_FROM_STRUCT(s, "s"); SET_VALUE_FROM_STRUCT(invert, "invert"); /* didn't find any */ - (zend_get_std_object_handlers())->write_property(object, member, value, key TSRMLS_CC); + (zend_get_std_object_handlers())->write_property(object, member, value, cache_slot TSRMLS_CC); } while(0); if (member == &tmp_member) { @@ -4930,7 +4930,7 @@ PHP_METHOD(DatePeriod, __wakeup) /* }}} */ /* {{{ date_period_read_property */ -static zval *date_period_read_property(zval *object, zval *member, int type, const zend_literal *key, zval *rv TSRMLS_DC) +static zval *date_period_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC) { zval *zv; if (type != BP_VAR_IS && type != BP_VAR_R) { @@ -4939,7 +4939,7 @@ static zval *date_period_read_property(zval *object, zval *member, int type, con Z_OBJPROP_P(object); /* build properties hash table */ - zv = std_object_handlers.read_property(object, member, type, key, rv TSRMLS_CC); + zv = std_object_handlers.read_property(object, member, type, cache_slot, rv TSRMLS_CC); if (Z_TYPE_P(zv) == IS_OBJECT && Z_OBJ_HANDLER_P(zv, clone_obj)) { /* defensive copy */ //??? MAKE_STD_ZVAL(zv); @@ -4951,7 +4951,7 @@ static zval *date_period_read_property(zval *object, zval *member, int type, con /* }}} */ /* {{{ date_period_write_property */ -static void date_period_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) +static void date_period_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Writing to DatePeriod properties is unsupported"); } -- cgit v1.2.1 From 5864ce8a447b718d0912cb073afe87eddc47b2e8 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Tue, 22 Apr 2014 17:46:34 +0400 Subject: Fixed compilation warnings --- ext/date/php_date.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 06c131014e..35c018e324 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2503,7 +2503,7 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, timelib_error_container *err = NULL; int type = TIMELIB_ZONETYPE_ID, new_dst = 0; char *new_abbr = NULL; - timelib_sll new_offset; + timelib_sll new_offset = 0; if (dateobj->time) { timelib_time_dtor(dateobj->time); @@ -4016,7 +4016,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, zend_uin void date_interval_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) { php_interval_obj *obj; - zval tmp_member, tmp_value; + zval tmp_member; if (Z_TYPE_P(member) != IS_STRING) { tmp_member = *member; -- cgit v1.2.1 From c1aa9baf29d1a20fa60c1cef3979a80014f6677b Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Fri, 25 Apr 2014 17:23:26 +0200 Subject: Fixed bug #67118 DateTime constructor crash with invalid data --- ext/date/php_date.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4a37961b02..d4058ebee8 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2548,7 +2548,9 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { + ZVAL_NULL(getThis()); + } } zend_restore_error_handling(&error_handling TSRMLS_CC); } -- cgit v1.2.1 From 93f9518a58b5e56803197e1a27d8426465d77f5e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Fri, 25 Apr 2014 13:37:07 +0200 Subject: Align zval_get_long/double with zval_get_string --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index dbcd7d8695..a0a189bbe4 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4048,7 +4048,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, zend_ #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ - obj->diff->n = zval_get_long(value TSRMLS_CC); \ + obj->diff->n = zval_get_long(value); \ break; \ } -- cgit v1.2.1 From 17d027ed47c1f07b397a611431d28ad0e0107146 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 30 Apr 2014 18:32:42 +0400 Subject: Split IS_BOOL into IS_FALSE and IS_TRUE --- ext/date/php_date.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a0a189bbe4..439621f5e5 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4888,8 +4888,8 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "include_start_date", sizeof("include_start_date")-1); if (ht_entry && - Z_TYPE_P(ht_entry) == IS_BOOL) { - period_obj->include_start_date = Z_BVAL_P(ht_entry); + (Z_TYPE_P(ht_entry) == IS_FALSE || Z_TYPE_P(ht_entry) == IS_TRUE)) { + period_obj->include_start_date = (Z_TYPE_P(ht_entry) == IS_TRUE); } else { return 0; } -- cgit v1.2.1 From 6a3ee297853aaf4fa17d0259fb8d0768bc143d02 Mon Sep 17 00:00:00 2001 From: Pierre Joye Date: Thu, 15 May 2014 09:38:26 +0200 Subject: fix build --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 31cb41adfd..3d203eb227 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1694,7 +1694,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) /* VS2012 strftime() returns number of characters, not bytes. See VC++11 bug id 766205. */ if (real_len > 0) { - real_len = strlen(buf); + real_len = buf->len; } #endif -- cgit v1.2.1 From fdb2709dd27c5987c2d2c8aaf0cdbebf9f17f643 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Wed, 21 May 2014 14:55:09 -0500 Subject: Add microseconds to the serialised form of DateTime objects. Fixes bug #67308 (Serialize of DateTime truncates fractions of second). --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index d4058ebee8..a2bf001b7d 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2121,7 +2121,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* first we add the date and time in ISO format */ MAKE_STD_ZVAL(zv); - ZVAL_STRING(zv, date_format("Y-m-d H:i:s", 12, dateobj->time, 1), 0); + ZVAL_STRING(zv, date_format("Y-m-d H:i:s.u", 14, dateobj->time, 1), 0); zend_hash_update(props, "date", 5, &zv, sizeof(zv), NULL); /* then we add the timezone name (or similar) */ -- cgit v1.2.1 From 2dce4cb06c8ed2da0de528b20b889815f5a3dc22 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 28 May 2014 01:29:37 +0400 Subject: Avoid in-place conversion --- ext/date/php_date.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 493033b60b..37266d17b5 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4107,8 +4107,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ - convert_to_long(z_arg); \ - (*intobj)->diff->member = (itype)Z_LVAL_P(z_arg); \ + (*intobj)->diff->member = (itype)zval_get_long(z_arg); \ } else { \ (*intobj)->diff->member = (itype)def; \ } \ @@ -4118,8 +4117,9 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ - convert_to_string(z_arg); \ - DATE_A64I((*intobj)->diff->member, Z_STRVAL_P(z_arg)); \ + zend_string *str = zval_get_string(z_arg); \ + DATE_A64I((*intobj)->diff->member, str->val); \ + STR_RELEASE(str); \ } else { \ (*intobj)->diff->member = -1LL; \ } \ -- cgit v1.2.1 From 1fe9f1e4f572d7b4d5a3872f41ea61e71fb563bf Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Thu, 5 Jun 2014 13:39:46 +0200 Subject: Fix regression introduce in fix for bug #67118 The fix was correct but break some code (at least in Horde) This is a temporary workaround to fix regressioni in 5.4, 5.5 and 5.6 This make php_date_initialize more consistent - on success return 1 + time initiliazed - on failure return 0 + time = zero which is check by DATE_CHECK_INITIALIZED by later method call Will restore consistency with other date classes in master. --- ext/date/php_date.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a2bf001b7d..595b0b040b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2441,6 +2441,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); } if (err && err->error_count) { + timelib_time_dtor(dateobj->time); + dateobj->time = 0; return 0; } @@ -2548,9 +2550,7 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { - ZVAL_NULL(getThis()); - } + php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } -- cgit v1.2.1 From f11f7f56013c5ee4e6009997602e9b5a64064909 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Thu, 5 Jun 2014 14:04:44 +0200 Subject: restore correct behavior of DateTime --- ext/date/php_date.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1809d6653b..700929154c 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2731,7 +2731,9 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { + ZVAL_NULL(getThis()); + } } zend_restore_error_handling(&error_handling TSRMLS_CC); } -- cgit v1.2.1 From 2ed8a170456c085491670a9beb62d4a6cac0903b Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 7 Jul 2014 20:54:31 +0400 Subject: Refactored run_time_cache usage in object handlers --- ext/date/php_date.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index aaa3afa04b..a87cfa60f9 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -638,10 +638,10 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC); static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC); static HashTable *date_object_get_gc_timezone(zval *object, zval **table, int *n TSRMLS_DC); -zval *date_interval_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC); -void date_interval_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC); -static zval *date_period_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC); -static void date_period_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC); +zval *date_interval_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv TSRMLS_DC); +void date_interval_write_property(zval *object, zval *member, zval *value, void **cache_slot TSRMLS_DC); +static zval *date_period_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv TSRMLS_DC); +static void date_period_write_property(zval *object, zval *member, zval *value, void **cache_slot TSRMLS_DC); /* {{{ Module struct */ zend_module_entry date_module_entry = { @@ -3961,7 +3961,7 @@ static int date_interval_initialize(timelib_rel_time **rt, /*const*/ char *forma } /* }}} */ /* {{{ date_interval_read_property */ -zval *date_interval_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC) +zval *date_interval_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv TSRMLS_DC) { php_interval_obj *obj; zval *retval; @@ -3973,7 +3973,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, zend_uin zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; - cache_slot = -1; + cache_slot = NULL; } obj = Z_PHPINTERVAL_P(object); @@ -4027,7 +4027,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, zend_uin /* }}} */ /* {{{ date_interval_write_property */ -void date_interval_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) +void date_interval_write_property(zval *object, zval *member, zval *value, void **cache_slot TSRMLS_DC) { php_interval_obj *obj; zval tmp_member; @@ -4037,7 +4037,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, zend_ zval_copy_ctor(&tmp_member); convert_to_string(&tmp_member); member = &tmp_member; - cache_slot = -1; + cache_slot = NULL; } obj = Z_PHPINTERVAL_P(object); @@ -4944,7 +4944,7 @@ PHP_METHOD(DatePeriod, __wakeup) /* }}} */ /* {{{ date_period_read_property */ -static zval *date_period_read_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC) +static zval *date_period_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv TSRMLS_DC) { zval *zv; if (type != BP_VAR_IS && type != BP_VAR_R) { @@ -4964,7 +4964,7 @@ static zval *date_period_read_property(zval *object, zval *member, int type, zen /* }}} */ /* {{{ date_period_write_property */ -static void date_period_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) +static void date_period_write_property(zval *object, zval *member, zval *value, void **cache_slot TSRMLS_DC) { php_error_docref(NULL TSRMLS_CC, E_ERROR, "Writing to DatePeriod properties is unsupported"); } -- cgit v1.2.1 From 1dd07d6bf438a6a60f2fefcdd7e5c45045ef88f9 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 9 Jul 2014 11:57:42 +0400 Subject: Partial fix that allows internal constructors to set $this to null. The address of $this passed to drectly called internal constructor in execute_data->return_value. Internal constructors should use ZEND_CTOR_MAKE_NULL() macro (insted of previous ZEND_NULL(EG(This))) to do the work. This patch doesn't fix the problem for indirectly called constructors. e.g. parant::__construct(). --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a87cfa60f9..758d0f9513 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2683,7 +2683,7 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { if (!php_date_initialize(Z_PHPDATE_P(getThis()), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { -//??? ZVAL_NULL(getThis()); + ZEND_CTOR_MAKE_NULL(); } } zend_restore_error_handling(&error_handling TSRMLS_CC); -- cgit v1.2.1 From 2dff153b23c7c874e8c98e1f3bda2e00cde0bd71 Mon Sep 17 00:00:00 2001 From: Lior Kaplan Date: Thu, 17 Jul 2014 22:58:36 +0300 Subject: Enable build without atoll (e.g old AIX flavours) --- ext/date/php_date.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 595b0b040b..4259bf0fcb 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -50,7 +50,11 @@ static inline long long php_date_llabs( long long i ) { return i >= 0 ? i : -i; int st = snprintf(s, len, "%lld", i); \ s[st] = '\0'; \ } while (0); +#ifdef HAVE_ATOLL # define DATE_A64I(i, s) i = atoll(s) +#else +# define DATE_A64I(i, s) i = strtoll(s, NULL, 10) +#endif #endif /* {{{ arginfo */ -- cgit v1.2.1 From f6896e4395e89ceeacd8f8a940cbafeeee3ac4a3 Mon Sep 17 00:00:00 2001 From: Tjerk Meesters Date: Wed, 13 Aug 2014 20:12:42 +0800 Subject: Fixed #66091 --- ext/date/php_date.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 4259bf0fcb..92e9480a43 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2398,11 +2398,7 @@ static void date_object_free_storage_period(void *object TSRMLS_DC) /* Advanced Interface */ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object TSRMLS_DC) { - Z_TYPE_P(object) = IS_OBJECT; object_init_ex(object, pce); - Z_SET_REFCOUNT_P(object, 1); - Z_UNSET_ISREF_P(object); - return object; } @@ -2510,14 +2506,19 @@ PHP_FUNCTION(date_create) zval *timezone_object = NULL; char *time_str = NULL; int time_str_len = 0; + zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; + } else { + zval *datetime_object_ptr = &datetime_object; + RETVAL_ZVAL(datetime_object_ptr, 0, 0); } } /* }}} */ @@ -2530,14 +2531,19 @@ PHP_FUNCTION(date_create_from_format) zval *timezone_object = NULL; char *time_str = NULL, *format_str = NULL; int time_str_len = 0, format_str_len = 0; + zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|O", &format_str, &format_str_len, &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { RETURN_FALSE; } - php_date_instantiate(date_ce_date, return_value TSRMLS_CC); - if (!php_date_initialize(zend_object_store_get_object(return_value TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + php_date_instantiate(date_ce_date, &datetime_object TSRMLS_CC); + if (!php_date_initialize(zend_object_store_get_object(&datetime_object TSRMLS_CC), time_str, time_str_len, format_str, timezone_object, 0 TSRMLS_CC)) { + zval_dtor(&datetime_object); RETURN_FALSE; + } else { + zval *datetime_object_ptr = &datetime_object; + RETVAL_ZVAL(datetime_object_ptr, 0, 0); } } /* }}} */ @@ -2560,7 +2566,7 @@ PHP_METHOD(DateTime, __construct) } /* }}} */ -static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC) +static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht TSRMLS_DC) { zval **z_date = NULL; zval **z_timezone = NULL; @@ -2630,7 +2636,7 @@ PHP_METHOD(DateTime, __set_state) php_date_instantiate(date_ce_date, return_value TSRMLS_CC); dateobj = (php_date_obj *) zend_object_store_get_object(return_value TSRMLS_CC); - if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } @@ -2648,7 +2654,7 @@ PHP_METHOD(DateTime, __wakeup) myht = Z_OBJPROP_P(object); - if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) { + if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { php_error(E_ERROR, "Invalid serialization data for DateTime object"); } } -- cgit v1.2.1 From a08b7b7701d2669a8e242cdb015f81d21a0ccb52 Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Wed, 13 Aug 2014 19:43:34 +0400 Subject: cleanup --- ext/date/php_date.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 78251383e1..49dab65147 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4556,7 +4556,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su int rs; timelib_time *t; timelib_tzinfo *tzi; - char *retstr; + zend_string *retstr; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { RETURN_FALSE; @@ -4621,11 +4621,8 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su switch (retformat) { case SUNFUNCS_RET_STRING: - spprintf(&retstr, 0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); - // TODO: avoid reallocation ??? - RETVAL_STRINGL(retstr, 5); - efree(retstr); - return; + retstr = strpprintf(0, "%02d:%02d", (int) N, (int) (60 * (N - (int) N))); + RETURN_STR(retstr); break; case SUNFUNCS_RET_DOUBLE: RETURN_DOUBLE(N); -- cgit v1.2.1 From c749fe2067d29615df250e59c9a891a63dcc7e7f Mon Sep 17 00:00:00 2001 From: Xinchen Hui Date: Thu, 14 Aug 2014 12:15:24 +0800 Subject: cleanup --- ext/date/php_date.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 49dab65147..cc0499da0b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2147,8 +2147,6 @@ static zend_object *date_object_clone_date(zval *this_ptr TSRMLS_DC) /* {{{ */ static void date_clone_immutable(zval *object, zval *new_object TSRMLS_DC) /* {{{ */ { ZVAL_OBJ(new_object, date_object_clone_date(object TSRMLS_CC)); -//??? Z_SET_REFCOUNT_P(new_object, 1); -//??? Z_SET_ISREF_P(new_object); } /* }}} */ static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC) /* {{{ */ @@ -2416,7 +2414,7 @@ static inline zend_object *date_object_new_period_ex(zend_class_entry *class_typ if (init_props) { object_properties_init(&intern->std, class_type); } -//??? date_object_free_storage_period, NULL TSRMLS_CC); + intern->std.handlers = &date_object_handlers_period; return &intern->std; @@ -3672,7 +3670,7 @@ PHP_METHOD(DateTimeZone, __construct) if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len)) { tzobj = Z_PHPTIMEZONE_P(getThis()); if (FAILURE == timezone_initialize(tzobj, tz TSRMLS_CC)) { -//??? ZVAL_NULL(getThis()); + ZEND_CTOR_MAKE_NULL(); } } zend_restore_error_handling(&error_handling TSRMLS_CC); @@ -4096,8 +4094,8 @@ PHP_METHOD(DateInterval, __construct) diobj = Z_PHPINTERVAL_P(getThis()); diobj->diff = reltime; diobj->initialized = 1; -//??? } else { -//??? ZVAL_NULL(getThis()); + } else { + ZEND_CTOR_MAKE_NULL(); } } zend_restore_error_handling(&error_handling TSRMLS_CC); -- cgit v1.2.1 From cb25136f4ef1042295650475b2c20ace81e2b9b7 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 16 Aug 2014 11:37:14 +0200 Subject: fix macros in the 5 basic extensions --- ext/date/php_date.c | 172 ++++++++++++++++++++++++++-------------------------- 1 file changed, 86 insertions(+), 86 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 6cea2af048..168fe9c920 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -860,9 +860,9 @@ PHP_MINIT_FUNCTION(date) REGISTER_STRING_CONSTANT("DATE_RSS", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_W3C", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); - REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); + REGISTER_INT_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); + REGISTER_INT_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); + REGISTER_INT_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); php_date_global_timezone_db = NULL; php_date_global_timezone_db_enabled = 0; @@ -962,7 +962,7 @@ static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC) zval ztz; if (SUCCESS == zend_get_configuration_directive("date.timezone", sizeof("date.timezone"), &ztz) - && Z_TYPE(ztz) == IS_STRING && Z_STRLEN(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { + && Z_TYPE(ztz) == IS_STRING && Z_STRSIZE(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { return Z_STRVAL(ztz); } } else if (*DATEG(default_timezone)) { @@ -1394,7 +1394,7 @@ PHP_FUNCTION(idate) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized date format token."); RETURN_FALSE; } - RETURN_LONG(ret); + RETURN_INT(ret); } /* }}} */ @@ -1490,7 +1490,7 @@ PHP_FUNCTION(strtotime) if (error1 || error2) { RETURN_FALSE; } else { - RETURN_LONG(ts); + RETURN_INT(ts); } } /* }}} */ @@ -1582,7 +1582,7 @@ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) if (error) { RETURN_FALSE; } else { - RETURN_LONG(ts); + RETURN_INT(ts); } } /* }}} */ @@ -1737,7 +1737,7 @@ PHP_FUNCTION(gmstrftime) Return current UNIX timestamp */ PHP_FUNCTION(time) { - RETURN_LONG((long)time(NULL)); + RETURN_INT((long)time(NULL)); } /* }}} */ @@ -1763,25 +1763,25 @@ PHP_FUNCTION(localtime) array_init(return_value); if (associative) { - add_assoc_long(return_value, "tm_sec", ts->s); - add_assoc_long(return_value, "tm_min", ts->i); - add_assoc_long(return_value, "tm_hour", ts->h); - add_assoc_long(return_value, "tm_mday", ts->d); - add_assoc_long(return_value, "tm_mon", ts->m - 1); - add_assoc_long(return_value, "tm_year", ts->y - 1900); - add_assoc_long(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_assoc_long(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); - add_assoc_long(return_value, "tm_isdst", ts->dst); + add_assoc_int(return_value, "tm_sec", ts->s); + add_assoc_int(return_value, "tm_min", ts->i); + add_assoc_int(return_value, "tm_hour", ts->h); + add_assoc_int(return_value, "tm_mday", ts->d); + add_assoc_int(return_value, "tm_mon", ts->m - 1); + add_assoc_int(return_value, "tm_year", ts->y - 1900); + add_assoc_int(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); + add_assoc_int(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); + add_assoc_int(return_value, "tm_isdst", ts->dst); } else { - add_next_index_long(return_value, ts->s); - add_next_index_long(return_value, ts->i); - add_next_index_long(return_value, ts->h); - add_next_index_long(return_value, ts->d); - add_next_index_long(return_value, ts->m - 1); - add_next_index_long(return_value, ts->y- 1900); - add_next_index_long(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); - add_next_index_long(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); - add_next_index_long(return_value, ts->dst); + add_next_index_int(return_value, ts->s); + add_next_index_int(return_value, ts->i); + add_next_index_int(return_value, ts->h); + add_next_index_int(return_value, ts->d); + add_next_index_int(return_value, ts->m - 1); + add_next_index_int(return_value, ts->y- 1900); + add_next_index_int(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); + add_next_index_int(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); + add_next_index_int(return_value, ts->dst); } timelib_time_dtor(ts); @@ -1808,17 +1808,17 @@ PHP_FUNCTION(getdate) array_init(return_value); - add_assoc_long(return_value, "seconds", ts->s); - add_assoc_long(return_value, "minutes", ts->i); - add_assoc_long(return_value, "hours", ts->h); - add_assoc_long(return_value, "mday", ts->d); - add_assoc_long(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_assoc_long(return_value, "mon", ts->m); - add_assoc_long(return_value, "year", ts->y); - add_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); + add_assoc_int(return_value, "seconds", ts->s); + add_assoc_int(return_value, "minutes", ts->i); + add_assoc_int(return_value, "hours", ts->h); + add_assoc_int(return_value, "mday", ts->d); + add_assoc_int(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); + add_assoc_int(return_value, "mon", ts->m); + add_assoc_int(return_value, "year", ts->y); + add_assoc_int(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d)); add_assoc_string(return_value, "month", mon_full_names[ts->m - 1]); - add_index_long(return_value, 0, timestamp); + add_index_int(return_value, 0, timestamp); timelib_time_dtor(ts); } @@ -1925,7 +1925,7 @@ static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) static void date_period_it_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - ZVAL_LONG(key, iterator->current_index); + ZVAL_INT(key, iterator->current_index); } /* }}} */ @@ -2049,7 +2049,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ date_object_handlers_timezone.get_gc = date_object_get_gc_timezone; #define REGISTER_TIMEZONE_CLASS_CONST_STRING(const_name, value) \ - zend_declare_class_constant_long(date_ce_timezone, const_name, sizeof(const_name)-1, value TSRMLS_CC); + zend_declare_class_constant_int(date_ce_timezone, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_TIMEZONE_CLASS_CONST_STRING("AFRICA", PHP_DATE_TIMEZONE_GROUP_AFRICA); REGISTER_TIMEZONE_CLASS_CONST_STRING("AMERICA", PHP_DATE_TIMEZONE_GROUP_AMERICA); @@ -2096,7 +2096,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ date_object_handlers_period.write_property = date_period_write_property; #define REGISTER_PERIOD_CLASS_CONST_STRING(const_name, value) \ - zend_declare_class_constant_long(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); + zend_declare_class_constant_int(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); } /* }}} */ @@ -2203,7 +2203,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ /* then we add the timezone name (or similar) */ if (dateobj->time->is_localtime) { - ZVAL_LONG(&zv, dateobj->time->zone_type); + ZVAL_INT(&zv, dateobj->time->zone_type); zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); switch (dateobj->time->zone_type) { @@ -2296,7 +2296,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* return props; } - ZVAL_LONG(&zv, tzobj->type); + ZVAL_INT(&zv, tzobj->type); zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); switch (tzobj->type) { @@ -2377,7 +2377,7 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) /* } #define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ - ZVAL_LONG(&zv, (long)intervalobj->diff->f); \ + ZVAL_INT(&zv, (long)intervalobj->diff->f); \ zend_hash_str_update(props, n, sizeof(n)-1, &zv); PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); @@ -2760,18 +2760,18 @@ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht convert_to_string(z_date); z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1); if (z_timezone_type) { - convert_to_long(z_timezone_type); + convert_to_int(z_timezone_type); z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1); if (z_timezone) { convert_to_string(z_timezone); - switch (Z_LVAL_P(z_timezone_type)) { + switch (Z_IVAL_P(z_timezone_type)) { case TIMELIB_ZONETYPE_OFFSET: case TIMELIB_ZONETYPE_ABBR: { - char *tmp = emalloc(Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2); + char *tmp = emalloc(Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 2); int ret; - snprintf(tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2, "%s %s", Z_STRVAL_P(z_date), Z_STRVAL_P(z_timezone)); - ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); + snprintf(tmp, Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 2, "%s %s", Z_STRVAL_P(z_date), Z_STRVAL_P(z_timezone)); + ret = php_date_initialize(*dateobj, tmp, Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); efree(tmp); return 1 == ret; } @@ -2791,7 +2791,7 @@ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht tzobj->tzi.tz = tzi; tzobj->initialized = 1; - ret = php_date_initialize(*dateobj, Z_STRVAL_P(z_date), Z_STRLEN_P(z_date), NULL, &tmp_obj, 0 TSRMLS_CC); + ret = php_date_initialize(*dateobj, Z_STRVAL_P(z_date), Z_STRSIZE_P(z_date), NULL, &tmp_obj, 0 TSRMLS_CC); zval_ptr_dtor(&tmp_obj); return 1 == ret; } @@ -2870,14 +2870,14 @@ static void zval_from_error_container(zval *z, timelib_error_container *error) / int i; zval element; - add_assoc_long(z, "warning_count", error->warning_count); + add_assoc_int(z, "warning_count", error->warning_count); array_init(&element); for (i = 0; i < error->warning_count; i++) { add_index_string(&element, error->warning_messages[i].position, error->warning_messages[i].message); } add_assoc_zval(z, "warnings", &element); - add_assoc_long(z, "error_count", error->error_count); + add_assoc_int(z, "error_count", error->error_count); array_init(&element); for (i = 0; i < error->error_count; i++) { add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message); @@ -2908,7 +2908,7 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * if (parsed_time->elem == -99999) { \ add_assoc_bool(return_value, #name, 0); \ } else { \ - add_assoc_long(return_value, #name, parsed_time->elem); \ + add_assoc_int(return_value, #name, parsed_time->elem); \ } PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(year, y); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(month, m); @@ -2953,17 +2953,17 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * } if (parsed_time->have_relative) { array_init(&element); - add_assoc_long(&element, "year", parsed_time->relative.y); - add_assoc_long(&element, "month", parsed_time->relative.m); - add_assoc_long(&element, "day", parsed_time->relative.d); - add_assoc_long(&element, "hour", parsed_time->relative.h); - add_assoc_long(&element, "minute", parsed_time->relative.i); - add_assoc_long(&element, "second", parsed_time->relative.s); + add_assoc_int(&element, "year", parsed_time->relative.y); + add_assoc_int(&element, "month", parsed_time->relative.m); + add_assoc_int(&element, "day", parsed_time->relative.d); + add_assoc_int(&element, "hour", parsed_time->relative.h); + add_assoc_int(&element, "minute", parsed_time->relative.i); + add_assoc_int(&element, "second", parsed_time->relative.s); if (parsed_time->relative.have_weekday_relative) { - add_assoc_long(&element, "weekday", parsed_time->relative.weekday); + add_assoc_int(&element, "weekday", parsed_time->relative.weekday); } if (parsed_time->relative.have_special_relative && (parsed_time->relative.special.type == TIMELIB_SPECIAL_WEEKDAY)) { - add_assoc_long(&element, "weekdays", parsed_time->relative.special.amount); + add_assoc_int(&element, "weekdays", parsed_time->relative.special.amount); } if (parsed_time->relative.first_last_day_of) { add_assoc_bool(&element, parsed_time->relative.first_last_day_of == 1 ? "first_day_of_month" : "last_day_of_month", 1); @@ -3360,19 +3360,19 @@ PHP_FUNCTION(date_offset_get) switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, dateobj->time->tz_info); - RETVAL_LONG(offset->offset); + RETVAL_INT(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: - RETVAL_LONG(dateobj->time->z * -60); + RETVAL_INT(dateobj->time->z * -60); break; case TIMELIB_ZONETYPE_ABBR: - RETVAL_LONG((dateobj->time->z - (60 * dateobj->time->dst)) * -60); + RETVAL_INT((dateobj->time->z - (60 * dateobj->time->dst)) * -60); break; } return; } else { - RETURN_LONG(0); + RETURN_INT(0); } } /* }}} */ @@ -3592,7 +3592,7 @@ PHP_FUNCTION(date_timestamp_get) if (error) { RETURN_FALSE; } else { - RETVAL_LONG(timestamp); + RETVAL_INT(timestamp); } } /* }}} */ @@ -3692,7 +3692,7 @@ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timez if ((z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1)) != NULL) { if ((z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1)) != NULL) { - convert_to_long(z_timezone_type); + convert_to_int(z_timezone_type); if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_P(z_timezone) TSRMLS_CC)) { return SUCCESS; } @@ -3819,14 +3819,14 @@ PHP_FUNCTION(timezone_offset_get) switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tzi.tz); - RETVAL_LONG(offset->offset); + RETVAL_INT(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: - RETURN_LONG(tzobj->tzi.utc_offset * -60); + RETURN_INT(tzobj->tzi.utc_offset * -60); break; case TIMELIB_ZONETYPE_ABBR: - RETURN_LONG((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60); + RETURN_INT((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60); break; } } @@ -3853,18 +3853,18 @@ PHP_FUNCTION(timezone_transitions_get) #define add_nominal() \ array_init(&element); \ - add_assoc_long(&element, "ts", timestamp_begin); \ + add_assoc_int(&element, "ts", timestamp_begin); \ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC)); \ - add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \ + add_assoc_int(&element, "offset", tzobj->tzi.tz->type[0].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx]); \ add_next_index_zval(return_value, &element); #define add(i,ts) \ array_init(&element); \ - add_assoc_long(&element, "ts", ts); \ + add_assoc_int(&element, "ts", ts); \ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC)); \ - add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ + add_assoc_int(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \ add_next_index_zval(return_value, &element); @@ -4023,7 +4023,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c retval = rv; if (value != -99999) { - ZVAL_LONG(retval, value); + ZVAL_INT(retval, value); } else { ZVAL_FALSE(retval); } @@ -4496,7 +4496,7 @@ PHP_FUNCTION(timezone_abbreviations_list) do { array_init(&element); add_assoc_bool(&element, "dst", entry->type); - add_assoc_long(&element, "offset", entry->gmtoffset); + add_assoc_int(&element, "offset", entry->gmtoffset); if (entry->full_tz_name) { add_assoc_string(&element, "timezone_id", entry->full_tz_name); } else { @@ -4617,7 +4617,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su } if (retformat == SUNFUNCS_RET_TIMESTAMP) { - RETURN_LONG(calc_sunset ? set : rise); + RETURN_INT(calc_sunset ? set : rise); } N = (calc_sunset ? h_set : h_rise) + gmt_offset; @@ -4693,12 +4693,12 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_long(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_long(return_value, "sunset", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "sunset", timelib_date_to_int(t2, &dummy)); } t2->sse = transit; - add_assoc_long(return_value, "transit", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "transit", timelib_date_to_int(t2, &dummy)); /* Get civil twilight */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -6.0, 0, &ddummy, &ddummy, &rise, &set, &transit); @@ -4713,9 +4713,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_long(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_long(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get nautical twilight */ @@ -4731,9 +4731,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_long(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_long(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get astronomical twilight */ @@ -4749,9 +4749,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_long(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_long(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_int(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); } timelib_time_dtor(t); timelib_time_dtor(t2); @@ -4821,7 +4821,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) /* { zend_hash_str_update(props, "interval", sizeof("interval")-1, &zv); /* converted to larger type (int->long); must check when unserializing */ - ZVAL_LONG(&zv, (long) period_obj->recurrences); + ZVAL_INT(&zv, (long) period_obj->recurrences); zend_hash_str_update(props, "recurrences", sizeof("recurrences")-1, &zv); ZVAL_BOOL(&zv, period_obj->include_start_date); @@ -4891,8 +4891,8 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "recurrences", sizeof("recurrences")-1); if (ht_entry && - Z_TYPE_P(ht_entry) == IS_LONG && Z_LVAL_P(ht_entry) >= 0 && Z_LVAL_P(ht_entry) <= INT_MAX) { - period_obj->recurrences = Z_LVAL_P(ht_entry); + Z_TYPE_P(ht_entry) == IS_INT && Z_IVAL_P(ht_entry) >= 0 && Z_IVAL_P(ht_entry) <= INT_MAX) { + period_obj->recurrences = Z_IVAL_P(ht_entry); } else { return 0; } -- cgit v1.2.1 From c586133d077fba53290e96b019ff660c8357dd84 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 18 Aug 2014 08:39:39 +0200 Subject: rename zval_get_long and fixes to some string functions --- ext/date/php_date.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 168fe9c920..63cdc511ab 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4062,7 +4062,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ - obj->diff->n = zval_get_long(value); \ + obj->diff->n = zval_get_int(value); \ break; \ } @@ -4119,7 +4119,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ - (*intobj)->diff->member = (itype)zval_get_long(z_arg); \ + (*intobj)->diff->member = (itype)zval_get_int(z_arg); \ } else { \ (*intobj)->diff->member = (itype)def; \ } \ -- cgit v1.2.1 From e49e163a9ed7d4e38f9ab724003c46c9f1ea2cb4 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 18 Aug 2014 18:57:55 +0200 Subject: fixes to date --- ext/date/php_date.c | 154 +++++++++++++++++++++++----------------------------- 1 file changed, 68 insertions(+), 86 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 63cdc511ab..813f8663f0 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -39,24 +39,6 @@ static __inline __int64_t php_date_llabs( __int64_t i ) { return i >= 0 ? i : -i static inline long long php_date_llabs( long long i ) { return i >= 0 ? i : -i; } #endif -#ifdef PHP_WIN32 -#define DATE_I64_BUF_LEN 65 -# define DATE_I64A(i, s, len) _i64toa_s(i, s, len, 10) -# define DATE_A64I(i, s) i = _atoi64(s) -#else -#define DATE_I64_BUF_LEN 65 -# define DATE_I64A(i, s, len) \ - do { \ - int st = snprintf(s, len, "%lld", i); \ - s[st] = '\0'; \ - } while (0); -#ifdef HAVE_ATOLL -# define DATE_A64I(i, s) i = atoll(s) -#else -# define DATE_A64I(i, s) i = strtoll(s, NULL, 10) -#endif -#endif - /* {{{ arginfo */ ZEND_BEGIN_ARG_INFO_EX(arginfo_date, 0, 0, 1) ZEND_ARG_INFO(0, format) @@ -1217,9 +1199,9 @@ static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) { char *format; int format_len; - long ts; + php_int_t ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } if (ZEND_NUM_ARGS() == 1) { @@ -1373,10 +1355,10 @@ PHP_FUNCTION(idate) { char *format; int format_len; - long ts = 0; + php_int_t ts = 0; int ret; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } @@ -1411,12 +1393,12 @@ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb) /* }}} */ /* {{{ php_parse_date: Backwards compatibility function */ -PHPAPI signed long php_parse_date(char *string, signed long *now) +PHPAPI php_int_t php_parse_date(char *string, php_int_t *now) { timelib_time *parsed_time; timelib_error_container *error = NULL; int error2; - signed long retval; + php_int_t retval; parsed_time = timelib_strtotime(string, strlen(string), &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); if (error->error_count) { @@ -1442,14 +1424,14 @@ PHP_FUNCTION(strtotime) char *times, *initial_ts; int time_len, error1, error2; struct timelib_error_container *error; - long preset_ts = 0, ts; + php_int_t preset_ts = 0, ts; timelib_time *t, *now; timelib_tzinfo *tzi; tzi = get_timezone_info(TSRMLS_C); - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sl", ×, &time_len, &preset_ts) != FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "si", ×, &time_len, &preset_ts) != FAILURE) { /* We have an initial timestamp */ now = timelib_time_ctor(); @@ -1462,7 +1444,7 @@ PHP_FUNCTION(strtotime) timelib_unixtime2local(now, t->sse); timelib_time_dtor(t); efree(initial_ts); - } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", ×, &time_len, &preset_ts) != FAILURE) { + } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", ×, &time_len, &preset_ts) != FAILURE) { /* We have no initial timestamp */ now = timelib_time_ctor(); now->tz_info = tzi; @@ -1498,13 +1480,13 @@ PHP_FUNCTION(strtotime) /* {{{ php_mktime - (gm)mktime helper */ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { - long hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0, dst = -1; + php_int_t hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0, dst = -1; timelib_time *now; timelib_tzinfo *tzi = NULL; - long ts, adjust_seconds = 0; + php_int_t ts, adjust_seconds = 0; int error; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lllllll", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|iiiiiii", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { RETURN_FALSE; } /* Initialize structure with current time */ @@ -1607,9 +1589,9 @@ PHP_FUNCTION(gmmktime) Returns true(1) if it is a valid date in gregorian calendar */ PHP_FUNCTION(checkdate) { - long m, d, y; + php_int_t m, d, y; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &m, &d, &y) == FAILURE) { RETURN_FALSE; } @@ -1626,7 +1608,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { char *format; int format_len; - long timestamp = 0; + php_int_t timestamp = 0; struct tm ta; int max_reallocs = 5; size_t buf_len = 256, real_len; @@ -1635,9 +1617,9 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) timelib_time_offset *offset = NULL; zend_string *buf; - timestamp = (long) time(NULL); + timestamp = (php_int_t) time(NULL); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, ×tamp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -1698,7 +1680,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) /* VS2012 strftime() returns number of characters, not bytes. See VC++11 bug id 766205. */ if (real_len > 0) { - real_len = buf->len; + real_len = strlen(buf->val); } #endif @@ -1737,7 +1719,7 @@ PHP_FUNCTION(gmstrftime) Return current UNIX timestamp */ PHP_FUNCTION(time) { - RETURN_INT((long)time(NULL)); + RETURN_INT((php_int_t)time(NULL)); } /* }}} */ @@ -1745,12 +1727,12 @@ PHP_FUNCTION(time) Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array */ PHP_FUNCTION(localtime) { - long timestamp = (long)time(NULL); + php_int_t timestamp = (php_int_t)time(NULL); zend_bool associative = 0; timelib_tzinfo *tzi; timelib_time *ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", ×tamp, &associative) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ib", ×tamp, &associative) == FAILURE) { RETURN_FALSE; } @@ -1792,11 +1774,11 @@ PHP_FUNCTION(localtime) Get date/time information */ PHP_FUNCTION(getdate) { - long timestamp = (long)time(NULL); + php_int_t timestamp = (php_int_t)time(NULL); timelib_tzinfo *tzi; timelib_time *ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", ×tamp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|i", ×tamp) == FAILURE) { RETURN_FALSE; } @@ -2377,7 +2359,7 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) /* } #define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ - ZVAL_INT(&zv, (long)intervalobj->diff->f); \ + ZVAL_INT(&zv, (php_int_t)intervalobj->diff->f); \ zend_hash_str_update(props, n, sizeof(n)-1, &zv); PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); @@ -3377,7 +3359,7 @@ PHP_FUNCTION(date_offset_get) } /* }}} */ -static void php_date_time_set(zval *object, long h, long i, long s, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_time_set(zval *object, php_int_t h, php_int_t i, php_int_t s, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3395,9 +3377,9 @@ static void php_date_time_set(zval *object, long h, long i, long s, zval *return PHP_FUNCTION(date_time_set) { zval *object; - long h, i, s = 0; + php_int_t h, i, s = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_date, &h, &i, &s) == FAILURE) { RETURN_FALSE; } @@ -3412,9 +3394,9 @@ PHP_FUNCTION(date_time_set) PHP_METHOD(DateTimeImmutable, setTime) { zval *object, new_object; - long h, i, s = 0; + php_int_t h, i, s = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { RETURN_FALSE; } @@ -3425,7 +3407,7 @@ PHP_METHOD(DateTimeImmutable, setTime) } /* }}} */ -static void php_date_date_set(zval *object, long y, long m, long d, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_date_set(zval *object, php_int_t y, php_int_t m, php_int_t d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3443,9 +3425,9 @@ static void php_date_date_set(zval *object, long y, long m, long d, zval *return PHP_FUNCTION(date_date_set) { zval *object; - long y, m, d; + php_int_t y, m, d; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_date, &y, &m, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oiii", &object, date_ce_date, &y, &m, &d) == FAILURE) { RETURN_FALSE; } @@ -3460,9 +3442,9 @@ PHP_FUNCTION(date_date_set) PHP_METHOD(DateTimeImmutable, setDate) { zval *object, new_object; - long y, m, d; + php_int_t y, m, d; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oiii", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { RETURN_FALSE; } @@ -3473,7 +3455,7 @@ PHP_METHOD(DateTimeImmutable, setDate) } /* }}} */ -static void php_date_isodate_set(zval *object, long y, long w, long d, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_isodate_set(zval *object, php_int_t y, php_int_t w, php_int_t d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3495,9 +3477,9 @@ static void php_date_isodate_set(zval *object, long y, long w, long d, zval *ret PHP_FUNCTION(date_isodate_set) { zval *object; - long y, w, d = 1; + php_int_t y, w, d = 1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &y, &w, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_date, &y, &w, &d) == FAILURE) { RETURN_FALSE; } @@ -3512,9 +3494,9 @@ PHP_FUNCTION(date_isodate_set) PHP_METHOD(DateTimeImmutable, setISODate) { zval *object, new_object; - long y, w, d = 1; + php_int_t y, w, d = 1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { RETURN_FALSE; } @@ -3525,7 +3507,7 @@ PHP_METHOD(DateTimeImmutable, setISODate) } /* }}} */ -static void php_date_timestamp_set(zval *object, long timestamp, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_timestamp_set(zval *object, php_int_t timestamp, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3541,9 +3523,9 @@ static void php_date_timestamp_set(zval *object, long timestamp, zval *return_va PHP_FUNCTION(date_timestamp_set) { zval *object; - long timestamp; + php_int_t timestamp; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_date, ×tamp) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oi", &object, date_ce_date, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -3558,9 +3540,9 @@ PHP_FUNCTION(date_timestamp_set) PHP_METHOD(DateTimeImmutable, setTimestamp) { zval *object, new_object; - long timestamp; + php_int_t timestamp; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_immutable, ×tamp) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oi", &object, date_ce_immutable, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -3578,7 +3560,7 @@ PHP_FUNCTION(date_timestamp_get) { zval *object; php_date_obj *dateobj; - long timestamp; + php_int_t timestamp; int error; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { @@ -3605,9 +3587,9 @@ PHP_FUNCTION(date_diff) zval *object1, *object2; php_date_obj *dateobj1, *dateobj2; php_interval_obj *interval; - long absolute = 0; + php_int_t absolute = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|i", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } dateobj1 = Z_PHPDATE_P(object1); @@ -3782,10 +3764,10 @@ PHP_FUNCTION(timezone_name_from_abbr) char *abbr; char *tzid; int abbr_len; - long gmtoffset = -1; - long isdst = -1; + php_int_t gmtoffset = -1; + php_int_t isdst = -1; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ii", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { RETURN_FALSE; } tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst); @@ -3840,9 +3822,9 @@ PHP_FUNCTION(timezone_transitions_get) zval *object, element; php_timezone_obj *tzobj; unsigned int i, begin = 0, found; - long timestamp_begin = LONG_MIN, timestamp_end = LONG_MAX; + php_int_t timestamp_begin = PHP_INT_MIN, timestamp_end = PHP_INT_MAX; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ii", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; } tzobj = Z_PHPTIMEZONE_P(object); @@ -3873,7 +3855,7 @@ PHP_FUNCTION(timezone_transitions_get) array_init(return_value); - if (timestamp_begin == LONG_MIN) { + if (timestamp_begin == PHP_INT_MIN) { add_nominal(); begin = 0; found = 1; @@ -4130,7 +4112,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ zend_string *str = zval_get_string(z_arg); \ - DATE_A64I((*intobj)->diff->member, str->val); \ + ZEND_ATOI((*intobj)->diff->member, str->val); \ STR_RELEASE(str); \ } else { \ (*intobj)->diff->member = -1LL; \ @@ -4248,8 +4230,8 @@ static zend_string *date_interval_format(char *format, int format_len, timelib_r case 'I': length = slprintf(buffer, 32, "%02d", (int) t->i); break; case 'i': length = slprintf(buffer, 32, "%d", (int) t->i); break; - case 'S': length = slprintf(buffer, 32, "%02ld", (long) t->s); break; - case 's': length = slprintf(buffer, 32, "%ld", (long) t->s); break; + case 'S': length = slprintf(buffer, 32, "%02" ZEND_INT_FMT_SPEC, (php_int_t) t->s); break; + case 's': length = slprintf(buffer, 32, ZEND_INT_FMT, (php_int_t) t->s); break; case 'a': { if ((int) t->days != -99999) { @@ -4301,7 +4283,7 @@ PHP_FUNCTION(date_interval_format) } /* }}} */ -static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ +static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, php_int_t *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; @@ -4334,16 +4316,16 @@ PHP_METHOD(DatePeriod, __construct) php_date_obj *dateobj; php_interval_obj *intobj; zval *start, *end = NULL, *interval; - long recurrences = 0, options = 0; + php_int_t recurrences = 0, options = 0; char *isostr = NULL; int isostr_len = 0; timelib_time *clone; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOl|l", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &isostr, &isostr_len, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOi|i", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|i", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &isostr, &isostr_len, &options) == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments."); zend_restore_error_handling(&error_handling TSRMLS_CC); return; @@ -4413,7 +4395,7 @@ PHP_METHOD(DatePeriod, __construct) } /* }}} */ -static int check_id_allowed(char *id, long what) /* {{{ */ +static int check_id_allowed(char *id, php_int_t what) /* {{{ */ { if (what & PHP_DATE_TIMEZONE_GROUP_AFRICA && strncasecmp(id, "Africa/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_AMERICA && strncasecmp(id, "America/", 8) == 0) return 1; @@ -4437,11 +4419,11 @@ PHP_FUNCTION(timezone_identifiers_list) const timelib_tzdb *tzdb; const timelib_tzdb_index_entry *table; int i, item_count; - long what = PHP_DATE_TIMEZONE_GROUP_ALL; + php_int_t what = PHP_DATE_TIMEZONE_GROUP_ALL; char *option = NULL; int option_len = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &what, &option, &option_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|is", &what, &option, &option_len) == FAILURE) { RETURN_FALSE; } @@ -4558,13 +4540,13 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su double latitude = 0.0, longitude = 0.0, zenith = 0.0, gmt_offset = 0, altitude; double h_rise, h_set, N; timelib_sll rise, set, transit; - long time, retformat = 0; + php_int_t time, retformat = 0; int rs; timelib_time *t; timelib_tzinfo *tzi; zend_string *retstr; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i|idddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { RETURN_FALSE; } @@ -4657,7 +4639,7 @@ PHP_FUNCTION(date_sunset) Returns an array with information about sun set/rise and twilight begin/end */ PHP_FUNCTION(date_sun_info) { - long time; + php_int_t time; double latitude, longitude; timelib_time *t, *t2; timelib_tzinfo *tzi; @@ -4666,7 +4648,7 @@ PHP_FUNCTION(date_sun_info) int dummy; double ddummy; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ldd", &time, &latitude, &longitude) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "idd", &time, &latitude, &longitude) == FAILURE) { RETURN_FALSE; } /* Initialize time struct */ -- cgit v1.2.1 From 70de6180d5a022806212d2b6eebbba48af827940 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sun, 24 Aug 2014 02:35:34 +0200 Subject: fixes to %pd format usage --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 813f8663f0..2a32f8b592 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1436,7 +1436,7 @@ PHP_FUNCTION(strtotime) now = timelib_time_ctor(); initial_ts = emalloc(25); - snprintf(initial_ts, 24, "@%ld UTC", preset_ts); + snprintf(initial_ts, 24, "@" ZEND_INT_FMT " UTC", preset_ts); t = timelib_strtotime(initial_ts, strlen(initial_ts), NULL, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); /* we ignore the error here, as this should never fail */ timelib_update_ts(t, tzi); now->tz_info = tzi; -- cgit v1.2.1 From 80a3b9ca4089f6b6d18aa700e611eff2530ebb3d Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sun, 24 Aug 2014 11:48:57 +0200 Subject: bring back the logic to parse 64 bit props also in 32 bit build --- ext/date/php_date.c | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2a32f8b592..1cdf4d6348 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -39,6 +39,24 @@ static __inline __int64_t php_date_llabs( __int64_t i ) { return i >= 0 ? i : -i static inline long long php_date_llabs( long long i ) { return i >= 0 ? i : -i; } #endif +#ifdef PHP_WIN32 +#define DATE_I64_BUF_LEN 65 +# define DATE_I64A(i, s, len) _i64toa_s(i, s, len, 10) +# define DATE_A64I(i, s) i = _atoi64(s) +#else +#define DATE_I64_BUF_LEN 65 +# define DATE_I64A(i, s, len) \ + do { \ + int st = snprintf(s, len, "%lld", i); \ + s[st] = '\0'; \ + } while (0); +#ifdef HAVE_ATOLL +# define DATE_A64I(i, s) i = atoll(s) +#else +# define DATE_A64I(i, s) i = strtoll(s, NULL, 10) +#endif +#endif + /* {{{ arginfo */ ZEND_BEGIN_ARG_INFO_EX(arginfo_date, 0, 0, 1) ZEND_ARG_INFO(0, format) @@ -4112,7 +4130,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ zend_string *str = zval_get_string(z_arg); \ - ZEND_ATOI((*intobj)->diff->member, str->val); \ + DATE_A64I((*intobj)->diff->member, str->val); \ STR_RELEASE(str); \ } else { \ (*intobj)->diff->member = -1LL; \ -- cgit v1.2.1 From c3e3c98ec666812daaaca896cf5ef758a8a6df14 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 25 Aug 2014 19:24:55 +0200 Subject: master renames phase 1 --- ext/date/php_date.c | 314 ++++++++++++++++++++++++++-------------------------- 1 file changed, 157 insertions(+), 157 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 1cdf4d6348..e8e135d83a 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -860,9 +860,9 @@ PHP_MINIT_FUNCTION(date) REGISTER_STRING_CONSTANT("DATE_RSS", DATE_FORMAT_RFC1123, CONST_CS | CONST_PERSISTENT); REGISTER_STRING_CONSTANT("DATE_W3C", DATE_FORMAT_RFC3339, CONST_CS | CONST_PERSISTENT); - REGISTER_INT_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); - REGISTER_INT_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); - REGISTER_INT_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SUNFUNCS_RET_TIMESTAMP", SUNFUNCS_RET_TIMESTAMP, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SUNFUNCS_RET_STRING", SUNFUNCS_RET_STRING, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("SUNFUNCS_RET_DOUBLE", SUNFUNCS_RET_DOUBLE, CONST_CS | CONST_PERSISTENT); php_date_global_timezone_db = NULL; php_date_global_timezone_db_enabled = 0; @@ -962,7 +962,7 @@ static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC) zval ztz; if (SUCCESS == zend_get_configuration_directive("date.timezone", sizeof("date.timezone"), &ztz) - && Z_TYPE(ztz) == IS_STRING && Z_STRSIZE(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { + && Z_TYPE(ztz) == IS_STRING && Z_STRLEN(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { return Z_STRVAL(ztz); } } else if (*DATEG(default_timezone)) { @@ -1217,9 +1217,9 @@ static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) { char *format; int format_len; - php_int_t ts; + zend_long ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, &ts) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } if (ZEND_NUM_ARGS() == 1) { @@ -1373,10 +1373,10 @@ PHP_FUNCTION(idate) { char *format; int format_len; - php_int_t ts = 0; + zend_long ts = 0; int ret; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, &ts) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { RETURN_FALSE; } @@ -1394,7 +1394,7 @@ PHP_FUNCTION(idate) php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unrecognized date format token."); RETURN_FALSE; } - RETURN_INT(ret); + RETURN_LONG(ret); } /* }}} */ @@ -1411,12 +1411,12 @@ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb) /* }}} */ /* {{{ php_parse_date: Backwards compatibility function */ -PHPAPI php_int_t php_parse_date(char *string, php_int_t *now) +PHPAPI zend_long php_parse_date(char *string, zend_long *now) { timelib_time *parsed_time; timelib_error_container *error = NULL; int error2; - php_int_t retval; + zend_long retval; parsed_time = timelib_strtotime(string, strlen(string), &error, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); if (error->error_count) { @@ -1442,14 +1442,14 @@ PHP_FUNCTION(strtotime) char *times, *initial_ts; int time_len, error1, error2; struct timelib_error_container *error; - php_int_t preset_ts = 0, ts; + zend_long preset_ts = 0, ts; timelib_time *t, *now; timelib_tzinfo *tzi; tzi = get_timezone_info(TSRMLS_C); - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "si", ×, &time_len, &preset_ts) != FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "sl", ×, &time_len, &preset_ts) != FAILURE) { /* We have an initial timestamp */ now = timelib_time_ctor(); @@ -1462,7 +1462,7 @@ PHP_FUNCTION(strtotime) timelib_unixtime2local(now, t->sse); timelib_time_dtor(t); efree(initial_ts); - } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", ×, &time_len, &preset_ts) != FAILURE) { + } else if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", ×, &time_len, &preset_ts) != FAILURE) { /* We have no initial timestamp */ now = timelib_time_ctor(); now->tz_info = tzi; @@ -1490,7 +1490,7 @@ PHP_FUNCTION(strtotime) if (error1 || error2) { RETURN_FALSE; } else { - RETURN_INT(ts); + RETURN_LONG(ts); } } /* }}} */ @@ -1498,13 +1498,13 @@ PHP_FUNCTION(strtotime) /* {{{ php_mktime - (gm)mktime helper */ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { - php_int_t hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0, dst = -1; + zend_long hou = 0, min = 0, sec = 0, mon = 0, day = 0, yea = 0, dst = -1; timelib_time *now; timelib_tzinfo *tzi = NULL; - php_int_t ts, adjust_seconds = 0; + zend_long ts, adjust_seconds = 0; int error; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|iiiiiii", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lllllll", &hou, &min, &sec, &mon, &day, &yea, &dst) == FAILURE) { RETURN_FALSE; } /* Initialize structure with current time */ @@ -1582,7 +1582,7 @@ PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt) if (error) { RETURN_FALSE; } else { - RETURN_INT(ts); + RETURN_LONG(ts); } } /* }}} */ @@ -1607,9 +1607,9 @@ PHP_FUNCTION(gmmktime) Returns true(1) if it is a valid date in gregorian calendar */ PHP_FUNCTION(checkdate) { - php_int_t m, d, y; + zend_long m, d, y; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "iii", &m, &d, &y) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "lll", &m, &d, &y) == FAILURE) { RETURN_FALSE; } @@ -1626,7 +1626,7 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { char *format; int format_len; - php_int_t timestamp = 0; + zend_long timestamp = 0; struct tm ta; int max_reallocs = 5; size_t buf_len = 256, real_len; @@ -1635,9 +1635,9 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) timelib_time_offset *offset = NULL; zend_string *buf; - timestamp = (php_int_t) time(NULL); + timestamp = (zend_long) time(NULL); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &format, &format_len, ×tamp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -1686,10 +1686,10 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) /* VS2012 crt has a bug where strftime crash with %z and %Z format when the initial buffer is too small. See http://connect.microsoft.com/VisualStudio/feedback/details/759720/vs2012-strftime-crash-with-z-formatting-code */ - buf = STR_ALLOC(buf_len, 0); + buf = zend_string_alloc(buf_len, 0); while ((real_len = strftime(buf->val, buf_len, format, &ta)) == buf_len || real_len == 0) { buf_len *= 2; - buf = STR_REALLOC(buf, buf_len, 0); + buf = zend_string_realloc(buf, buf_len, 0); if (!--max_reallocs) { break; } @@ -1708,10 +1708,10 @@ PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) } if (real_len && real_len != buf_len) { - buf = STR_REALLOC(buf, real_len, 0); + buf = zend_string_realloc(buf, real_len, 0); RETURN_STR(buf); } - STR_FREE(buf); + zend_string_free(buf); RETURN_FALSE; } /* }}} */ @@ -1737,7 +1737,7 @@ PHP_FUNCTION(gmstrftime) Return current UNIX timestamp */ PHP_FUNCTION(time) { - RETURN_INT((php_int_t)time(NULL)); + RETURN_LONG((zend_long)time(NULL)); } /* }}} */ @@ -1745,12 +1745,12 @@ PHP_FUNCTION(time) Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array */ PHP_FUNCTION(localtime) { - php_int_t timestamp = (php_int_t)time(NULL); + zend_long timestamp = (zend_long)time(NULL); zend_bool associative = 0; timelib_tzinfo *tzi; timelib_time *ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ib", ×tamp, &associative) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|lb", ×tamp, &associative) == FAILURE) { RETURN_FALSE; } @@ -1763,25 +1763,25 @@ PHP_FUNCTION(localtime) array_init(return_value); if (associative) { - add_assoc_int(return_value, "tm_sec", ts->s); - add_assoc_int(return_value, "tm_min", ts->i); - add_assoc_int(return_value, "tm_hour", ts->h); - add_assoc_int(return_value, "tm_mday", ts->d); - add_assoc_int(return_value, "tm_mon", ts->m - 1); - add_assoc_int(return_value, "tm_year", ts->y - 1900); - add_assoc_int(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_assoc_int(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); - add_assoc_int(return_value, "tm_isdst", ts->dst); + add_assoc_long(return_value, "tm_sec", ts->s); + add_assoc_long(return_value, "tm_min", ts->i); + add_assoc_long(return_value, "tm_hour", ts->h); + add_assoc_long(return_value, "tm_mday", ts->d); + add_assoc_long(return_value, "tm_mon", ts->m - 1); + add_assoc_long(return_value, "tm_year", ts->y - 1900); + add_assoc_long(return_value, "tm_wday", timelib_day_of_week(ts->y, ts->m, ts->d)); + add_assoc_long(return_value, "tm_yday", timelib_day_of_year(ts->y, ts->m, ts->d)); + add_assoc_long(return_value, "tm_isdst", ts->dst); } else { - add_next_index_int(return_value, ts->s); - add_next_index_int(return_value, ts->i); - add_next_index_int(return_value, ts->h); - add_next_index_int(return_value, ts->d); - add_next_index_int(return_value, ts->m - 1); - add_next_index_int(return_value, ts->y- 1900); - add_next_index_int(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); - add_next_index_int(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); - add_next_index_int(return_value, ts->dst); + add_next_index_long(return_value, ts->s); + add_next_index_long(return_value, ts->i); + add_next_index_long(return_value, ts->h); + add_next_index_long(return_value, ts->d); + add_next_index_long(return_value, ts->m - 1); + add_next_index_long(return_value, ts->y- 1900); + add_next_index_long(return_value, timelib_day_of_week(ts->y, ts->m, ts->d)); + add_next_index_long(return_value, timelib_day_of_year(ts->y, ts->m, ts->d)); + add_next_index_long(return_value, ts->dst); } timelib_time_dtor(ts); @@ -1792,11 +1792,11 @@ PHP_FUNCTION(localtime) Get date/time information */ PHP_FUNCTION(getdate) { - php_int_t timestamp = (php_int_t)time(NULL); + zend_long timestamp = (zend_long)time(NULL); timelib_tzinfo *tzi; timelib_time *ts; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|i", ×tamp) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", ×tamp) == FAILURE) { RETURN_FALSE; } @@ -1808,17 +1808,17 @@ PHP_FUNCTION(getdate) array_init(return_value); - add_assoc_int(return_value, "seconds", ts->s); - add_assoc_int(return_value, "minutes", ts->i); - add_assoc_int(return_value, "hours", ts->h); - add_assoc_int(return_value, "mday", ts->d); - add_assoc_int(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); - add_assoc_int(return_value, "mon", ts->m); - add_assoc_int(return_value, "year", ts->y); - add_assoc_int(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); + add_assoc_long(return_value, "seconds", ts->s); + add_assoc_long(return_value, "minutes", ts->i); + add_assoc_long(return_value, "hours", ts->h); + add_assoc_long(return_value, "mday", ts->d); + add_assoc_long(return_value, "wday", timelib_day_of_week(ts->y, ts->m, ts->d)); + add_assoc_long(return_value, "mon", ts->m); + add_assoc_long(return_value, "year", ts->y); + add_assoc_long(return_value, "yday", timelib_day_of_year(ts->y, ts->m, ts->d)); add_assoc_string(return_value, "weekday", php_date_full_day_name(ts->y, ts->m, ts->d)); add_assoc_string(return_value, "month", mon_full_names[ts->m - 1]); - add_index_int(return_value, 0, timestamp); + add_index_long(return_value, 0, timestamp); timelib_time_dtor(ts); } @@ -1925,7 +1925,7 @@ static zval *date_period_it_current_data(zend_object_iterator *iter TSRMLS_DC) static void date_period_it_current_key(zend_object_iterator *iter, zval *key TSRMLS_DC) { date_period_it *iterator = (date_period_it *)iter; - ZVAL_INT(key, iterator->current_index); + ZVAL_LONG(key, iterator->current_index); } /* }}} */ @@ -2049,7 +2049,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ date_object_handlers_timezone.get_gc = date_object_get_gc_timezone; #define REGISTER_TIMEZONE_CLASS_CONST_STRING(const_name, value) \ - zend_declare_class_constant_int(date_ce_timezone, const_name, sizeof(const_name)-1, value TSRMLS_CC); + zend_declare_class_constant_long(date_ce_timezone, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_TIMEZONE_CLASS_CONST_STRING("AFRICA", PHP_DATE_TIMEZONE_GROUP_AFRICA); REGISTER_TIMEZONE_CLASS_CONST_STRING("AMERICA", PHP_DATE_TIMEZONE_GROUP_AMERICA); @@ -2096,7 +2096,7 @@ static void date_register_classes(TSRMLS_D) /* {{{ */ date_object_handlers_period.write_property = date_period_write_property; #define REGISTER_PERIOD_CLASS_CONST_STRING(const_name, value) \ - zend_declare_class_constant_int(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); + zend_declare_class_constant_long(date_ce_period, const_name, sizeof(const_name)-1, value TSRMLS_CC); REGISTER_PERIOD_CLASS_CONST_STRING("EXCLUDE_START_DATE", PHP_DATE_PERIOD_EXCLUDE_START_DATE); } /* }}} */ @@ -2203,7 +2203,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ /* then we add the timezone name (or similar) */ if (dateobj->time->is_localtime) { - ZVAL_INT(&zv, dateobj->time->zone_type); + ZVAL_LONG(&zv, dateobj->time->zone_type); zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); switch (dateobj->time->zone_type) { @@ -2211,7 +2211,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ ZVAL_STRING(&zv, dateobj->time->tz_info->name); break; case TIMELIB_ZONETYPE_OFFSET: { - zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); + zend_string *tmpstr = zend_string_alloc(sizeof("UTC+05:00")-1, 0); timelib_sll utc_offset = dateobj->time->z; tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", @@ -2296,7 +2296,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* return props; } - ZVAL_INT(&zv, tzobj->type); + ZVAL_LONG(&zv, tzobj->type); zend_hash_str_update(props, "timezone_type", sizeof("timezone_type")-1, &zv); switch (tzobj->type) { @@ -2304,7 +2304,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* ZVAL_STRING(&zv, tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { - zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); + zend_string *tmpstr = zend_string_alloc(sizeof("UTC+05:00")-1, 0); tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", tzobj->tzi.utc_offset > 0 ? '-' : '+', @@ -2377,7 +2377,7 @@ static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC) /* } #define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \ - ZVAL_INT(&zv, (php_int_t)intervalobj->diff->f); \ + ZVAL_LONG(&zv, (zend_long)intervalobj->diff->f); \ zend_hash_str_update(props, n, sizeof(n)-1, &zv); PHP_DATE_INTERVAL_ADD_PROPERTY("y", y); @@ -2765,13 +2765,13 @@ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht if (z_timezone) { convert_to_string(z_timezone); - switch (Z_IVAL_P(z_timezone_type)) { + switch (Z_LVAL_P(z_timezone_type)) { case TIMELIB_ZONETYPE_OFFSET: case TIMELIB_ZONETYPE_ABBR: { - char *tmp = emalloc(Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 2); + char *tmp = emalloc(Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2); int ret; - snprintf(tmp, Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 2, "%s %s", Z_STRVAL_P(z_date), Z_STRVAL_P(z_timezone)); - ret = php_date_initialize(*dateobj, tmp, Z_STRSIZE_P(z_date) + Z_STRSIZE_P(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); + snprintf(tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 2, "%s %s", Z_STRVAL_P(z_date), Z_STRVAL_P(z_timezone)); + ret = php_date_initialize(*dateobj, tmp, Z_STRLEN_P(z_date) + Z_STRLEN_P(z_timezone) + 1, NULL, NULL, 0 TSRMLS_CC); efree(tmp); return 1 == ret; } @@ -2791,7 +2791,7 @@ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht tzobj->tzi.tz = tzi; tzobj->initialized = 1; - ret = php_date_initialize(*dateobj, Z_STRVAL_P(z_date), Z_STRSIZE_P(z_date), NULL, &tmp_obj, 0 TSRMLS_CC); + ret = php_date_initialize(*dateobj, Z_STRVAL_P(z_date), Z_STRLEN_P(z_date), NULL, &tmp_obj, 0 TSRMLS_CC); zval_ptr_dtor(&tmp_obj); return 1 == ret; } @@ -2870,14 +2870,14 @@ static void zval_from_error_container(zval *z, timelib_error_container *error) / int i; zval element; - add_assoc_int(z, "warning_count", error->warning_count); + add_assoc_long(z, "warning_count", error->warning_count); array_init(&element); for (i = 0; i < error->warning_count; i++) { add_index_string(&element, error->warning_messages[i].position, error->warning_messages[i].message); } add_assoc_zval(z, "warnings", &element); - add_assoc_int(z, "error_count", error->error_count); + add_assoc_long(z, "error_count", error->error_count); array_init(&element); for (i = 0; i < error->error_count; i++) { add_index_string(&element, error->error_messages[i].position, error->error_messages[i].message); @@ -2908,7 +2908,7 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * if (parsed_time->elem == -99999) { \ add_assoc_bool(return_value, #name, 0); \ } else { \ - add_assoc_int(return_value, #name, parsed_time->elem); \ + add_assoc_long(return_value, #name, parsed_time->elem); \ } PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(year, y); PHP_DATE_PARSE_DATE_SET_TIME_ELEMENT(month, m); @@ -2953,17 +2953,17 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * } if (parsed_time->have_relative) { array_init(&element); - add_assoc_int(&element, "year", parsed_time->relative.y); - add_assoc_int(&element, "month", parsed_time->relative.m); - add_assoc_int(&element, "day", parsed_time->relative.d); - add_assoc_int(&element, "hour", parsed_time->relative.h); - add_assoc_int(&element, "minute", parsed_time->relative.i); - add_assoc_int(&element, "second", parsed_time->relative.s); + add_assoc_long(&element, "year", parsed_time->relative.y); + add_assoc_long(&element, "month", parsed_time->relative.m); + add_assoc_long(&element, "day", parsed_time->relative.d); + add_assoc_long(&element, "hour", parsed_time->relative.h); + add_assoc_long(&element, "minute", parsed_time->relative.i); + add_assoc_long(&element, "second", parsed_time->relative.s); if (parsed_time->relative.have_weekday_relative) { - add_assoc_int(&element, "weekday", parsed_time->relative.weekday); + add_assoc_long(&element, "weekday", parsed_time->relative.weekday); } if (parsed_time->relative.have_special_relative && (parsed_time->relative.special.type == TIMELIB_SPECIAL_WEEKDAY)) { - add_assoc_int(&element, "weekdays", parsed_time->relative.special.amount); + add_assoc_long(&element, "weekdays", parsed_time->relative.special.amount); } if (parsed_time->relative.first_last_day_of) { add_assoc_bool(&element, parsed_time->relative.first_last_day_of == 1 ? "first_day_of_month" : "last_day_of_month", 1); @@ -3360,24 +3360,24 @@ PHP_FUNCTION(date_offset_get) switch (dateobj->time->zone_type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, dateobj->time->tz_info); - RETVAL_INT(offset->offset); + RETVAL_LONG(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: - RETVAL_INT(dateobj->time->z * -60); + RETVAL_LONG(dateobj->time->z * -60); break; case TIMELIB_ZONETYPE_ABBR: - RETVAL_INT((dateobj->time->z - (60 * dateobj->time->dst)) * -60); + RETVAL_LONG((dateobj->time->z - (60 * dateobj->time->dst)) * -60); break; } return; } else { - RETURN_INT(0); + RETURN_LONG(0); } } /* }}} */ -static void php_date_time_set(zval *object, php_int_t h, php_int_t i, php_int_t s, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_time_set(zval *object, zend_long h, zend_long i, zend_long s, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3395,9 +3395,9 @@ static void php_date_time_set(zval *object, php_int_t h, php_int_t i, php_int_t PHP_FUNCTION(date_time_set) { zval *object; - php_int_t h, i, s = 0; + zend_long h, i, s = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_date, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &h, &i, &s) == FAILURE) { RETURN_FALSE; } @@ -3412,9 +3412,9 @@ PHP_FUNCTION(date_time_set) PHP_METHOD(DateTimeImmutable, setTime) { zval *object, new_object; - php_int_t h, i, s = 0; + zend_long h, i, s = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &h, &i, &s) == FAILURE) { RETURN_FALSE; } @@ -3425,7 +3425,7 @@ PHP_METHOD(DateTimeImmutable, setTime) } /* }}} */ -static void php_date_date_set(zval *object, php_int_t y, php_int_t m, php_int_t d, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_date_set(zval *object, zend_long y, zend_long m, zend_long d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3443,9 +3443,9 @@ static void php_date_date_set(zval *object, php_int_t y, php_int_t m, php_int_t PHP_FUNCTION(date_date_set) { zval *object; - php_int_t y, m, d; + zend_long y, m, d; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oiii", &object, date_ce_date, &y, &m, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_date, &y, &m, &d) == FAILURE) { RETURN_FALSE; } @@ -3460,9 +3460,9 @@ PHP_FUNCTION(date_date_set) PHP_METHOD(DateTimeImmutable, setDate) { zval *object, new_object; - php_int_t y, m, d; + zend_long y, m, d; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oiii", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Olll", &object, date_ce_immutable, &y, &m, &d) == FAILURE) { RETURN_FALSE; } @@ -3473,7 +3473,7 @@ PHP_METHOD(DateTimeImmutable, setDate) } /* }}} */ -static void php_date_isodate_set(zval *object, php_int_t y, php_int_t w, php_int_t d, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_isodate_set(zval *object, zend_long y, zend_long w, zend_long d, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3495,9 +3495,9 @@ static void php_date_isodate_set(zval *object, php_int_t y, php_int_t w, php_int PHP_FUNCTION(date_isodate_set) { zval *object; - php_int_t y, w, d = 1; + zend_long y, w, d = 1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_date, &y, &w, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_date, &y, &w, &d) == FAILURE) { RETURN_FALSE; } @@ -3512,9 +3512,9 @@ PHP_FUNCTION(date_isodate_set) PHP_METHOD(DateTimeImmutable, setISODate) { zval *object, new_object; - php_int_t y, w, d = 1; + zend_long y, w, d = 1; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oii|i", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oll|l", &object, date_ce_immutable, &y, &w, &d) == FAILURE) { RETURN_FALSE; } @@ -3525,7 +3525,7 @@ PHP_METHOD(DateTimeImmutable, setISODate) } /* }}} */ -static void php_date_timestamp_set(zval *object, php_int_t timestamp, zval *return_value TSRMLS_DC) /* {{{ */ +static void php_date_timestamp_set(zval *object, zend_long timestamp, zval *return_value TSRMLS_DC) /* {{{ */ { php_date_obj *dateobj; @@ -3541,9 +3541,9 @@ static void php_date_timestamp_set(zval *object, php_int_t timestamp, zval *retu PHP_FUNCTION(date_timestamp_set) { zval *object; - php_int_t timestamp; + zend_long timestamp; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oi", &object, date_ce_date, ×tamp) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_date, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -3558,9 +3558,9 @@ PHP_FUNCTION(date_timestamp_set) PHP_METHOD(DateTimeImmutable, setTimestamp) { zval *object, new_object; - php_int_t timestamp; + zend_long timestamp; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oi", &object, date_ce_immutable, ×tamp) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Ol", &object, date_ce_immutable, ×tamp) == FAILURE) { RETURN_FALSE; } @@ -3578,7 +3578,7 @@ PHP_FUNCTION(date_timestamp_get) { zval *object; php_date_obj *dateobj; - php_int_t timestamp; + zend_long timestamp; int error; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object, date_ce_interface) == FAILURE) { @@ -3592,7 +3592,7 @@ PHP_FUNCTION(date_timestamp_get) if (error) { RETURN_FALSE; } else { - RETVAL_INT(timestamp); + RETVAL_LONG(timestamp); } } /* }}} */ @@ -3605,9 +3605,9 @@ PHP_FUNCTION(date_diff) zval *object1, *object2; php_date_obj *dateobj1, *dateobj2; php_interval_obj *interval; - php_int_t absolute = 0; + zend_long absolute = 0; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|i", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO|l", &object1, date_ce_interface, &object2, date_ce_interface, &absolute) == FAILURE) { RETURN_FALSE; } dateobj1 = Z_PHPDATE_P(object1); @@ -3756,7 +3756,7 @@ PHP_FUNCTION(timezone_name_get) RETURN_STRING(tzobj->tzi.tz->name); break; case TIMELIB_ZONETYPE_OFFSET: { - zend_string *tmpstr = STR_ALLOC(sizeof("UTC+05:00")-1, 0); + zend_string *tmpstr = zend_string_alloc(sizeof("UTC+05:00")-1, 0); timelib_sll utc_offset = tzobj->tzi.utc_offset; tmpstr->len = snprintf(tmpstr->val, sizeof("+05:00"), "%c%02d:%02d", @@ -3782,10 +3782,10 @@ PHP_FUNCTION(timezone_name_from_abbr) char *abbr; char *tzid; int abbr_len; - php_int_t gmtoffset = -1; - php_int_t isdst = -1; + zend_long gmtoffset = -1; + zend_long isdst = -1; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ii", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|ll", &abbr, &abbr_len, &gmtoffset, &isdst) == FAILURE) { RETURN_FALSE; } tzid = timelib_timezone_id_from_abbr(abbr, gmtoffset, isdst); @@ -3819,14 +3819,14 @@ PHP_FUNCTION(timezone_offset_get) switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: offset = timelib_get_time_zone_info(dateobj->time->sse, tzobj->tzi.tz); - RETVAL_INT(offset->offset); + RETVAL_LONG(offset->offset); timelib_time_offset_dtor(offset); break; case TIMELIB_ZONETYPE_OFFSET: - RETURN_INT(tzobj->tzi.utc_offset * -60); + RETURN_LONG(tzobj->tzi.utc_offset * -60); break; case TIMELIB_ZONETYPE_ABBR: - RETURN_INT((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60); + RETURN_LONG((tzobj->tzi.z.utc_offset - (tzobj->tzi.z.dst*60)) * -60); break; } } @@ -3840,9 +3840,9 @@ PHP_FUNCTION(timezone_transitions_get) zval *object, element; php_timezone_obj *tzobj; unsigned int i, begin = 0, found; - php_int_t timestamp_begin = PHP_INT_MIN, timestamp_end = PHP_INT_MAX; + zend_long timestamp_begin = PHP_INT_MIN, timestamp_end = PHP_INT_MAX; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ii", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; } tzobj = Z_PHPTIMEZONE_P(object); @@ -3853,18 +3853,18 @@ PHP_FUNCTION(timezone_transitions_get) #define add_nominal() \ array_init(&element); \ - add_assoc_int(&element, "ts", timestamp_begin); \ + add_assoc_long(&element, "ts", timestamp_begin); \ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC)); \ - add_assoc_int(&element, "offset", tzobj->tzi.tz->type[0].offset); \ + add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx]); \ add_next_index_zval(return_value, &element); #define add(i,ts) \ array_init(&element); \ - add_assoc_int(&element, "ts", ts); \ + add_assoc_long(&element, "ts", ts); \ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601, 13, ts, 0 TSRMLS_CC)); \ - add_assoc_int(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ + add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \ add_next_index_zval(return_value, &element); @@ -4023,7 +4023,7 @@ zval *date_interval_read_property(zval *object, zval *member, int type, void **c retval = rv; if (value != -99999) { - ZVAL_INT(retval, value); + ZVAL_LONG(retval, value); } else { ZVAL_FALSE(retval); } @@ -4062,7 +4062,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void #define SET_VALUE_FROM_STRUCT(n,m) \ if (strcmp(Z_STRVAL_P(member), m) == 0) { \ - obj->diff->n = zval_get_int(value); \ + obj->diff->n = zval_get_long(value); \ break; \ } @@ -4119,7 +4119,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter do { \ zval *z_arg = zend_hash_str_find(myht, element, sizeof(element) - 1); \ if (z_arg) { \ - (*intobj)->diff->member = (itype)zval_get_int(z_arg); \ + (*intobj)->diff->member = (itype)zval_get_long(z_arg); \ } else { \ (*intobj)->diff->member = (itype)def; \ } \ @@ -4131,7 +4131,7 @@ static int php_date_interval_initialize_from_hash(zval **return_value, php_inter if (z_arg) { \ zend_string *str = zval_get_string(z_arg); \ DATE_A64I((*intobj)->diff->member, str->val); \ - STR_RELEASE(str); \ + zend_string_release(str); \ } else { \ (*intobj)->diff->member = -1LL; \ } \ @@ -4248,8 +4248,8 @@ static zend_string *date_interval_format(char *format, int format_len, timelib_r case 'I': length = slprintf(buffer, 32, "%02d", (int) t->i); break; case 'i': length = slprintf(buffer, 32, "%d", (int) t->i); break; - case 'S': length = slprintf(buffer, 32, "%02" ZEND_INT_FMT_SPEC, (php_int_t) t->s); break; - case 's': length = slprintf(buffer, 32, ZEND_INT_FMT, (php_int_t) t->s); break; + case 'S': length = slprintf(buffer, 32, "%02" ZEND_INT_FMT_SPEC, (zend_long) t->s); break; + case 's': length = slprintf(buffer, 32, ZEND_INT_FMT, (zend_long) t->s); break; case 'a': { if ((int) t->days != -99999) { @@ -4301,7 +4301,7 @@ PHP_FUNCTION(date_interval_format) } /* }}} */ -static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, php_int_t *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ +static int date_period_initialize(timelib_time **st, timelib_time **et, timelib_rel_time **d, zend_long *recurrences, /*const*/ char *format, int format_length TSRMLS_DC) /* {{{ */ { timelib_time *b = NULL, *e = NULL; timelib_rel_time *p = NULL; @@ -4334,16 +4334,16 @@ PHP_METHOD(DatePeriod, __construct) php_date_obj *dateobj; php_interval_obj *intobj; zval *start, *end = NULL, *interval; - php_int_t recurrences = 0, options = 0; + zend_long recurrences = 0, options = 0; char *isostr = NULL; int isostr_len = 0; timelib_time *clone; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOi|i", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|i", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { - if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|i", &isostr, &isostr_len, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOl|l", &start, date_ce_interface, &interval, date_ce_interval, &recurrences, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "OOO|l", &start, date_ce_interface, &interval, date_ce_interval, &end, date_ce_interface, &options) == FAILURE) { + if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &isostr, &isostr_len, &options) == FAILURE) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "This constructor accepts either (DateTimeInterface, DateInterval, int) OR (DateTimeInterface, DateInterval, DateTime) OR (string) as arguments."); zend_restore_error_handling(&error_handling TSRMLS_CC); return; @@ -4413,7 +4413,7 @@ PHP_METHOD(DatePeriod, __construct) } /* }}} */ -static int check_id_allowed(char *id, php_int_t what) /* {{{ */ +static int check_id_allowed(char *id, zend_long what) /* {{{ */ { if (what & PHP_DATE_TIMEZONE_GROUP_AFRICA && strncasecmp(id, "Africa/", 7) == 0) return 1; if (what & PHP_DATE_TIMEZONE_GROUP_AMERICA && strncasecmp(id, "America/", 8) == 0) return 1; @@ -4437,11 +4437,11 @@ PHP_FUNCTION(timezone_identifiers_list) const timelib_tzdb *tzdb; const timelib_tzdb_index_entry *table; int i, item_count; - php_int_t what = PHP_DATE_TIMEZONE_GROUP_ALL; + zend_long what = PHP_DATE_TIMEZONE_GROUP_ALL; char *option = NULL; int option_len = 0; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|is", &what, &option, &option_len) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &what, &option, &option_len) == FAILURE) { RETURN_FALSE; } @@ -4496,7 +4496,7 @@ PHP_FUNCTION(timezone_abbreviations_list) do { array_init(&element); add_assoc_bool(&element, "dst", entry->type); - add_assoc_int(&element, "offset", entry->gmtoffset); + add_assoc_long(&element, "offset", entry->gmtoffset); if (entry->full_tz_name) { add_assoc_string(&element, "timezone_id", entry->full_tz_name); } else { @@ -4558,13 +4558,13 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su double latitude = 0.0, longitude = 0.0, zenith = 0.0, gmt_offset = 0, altitude; double h_rise, h_set, N; timelib_sll rise, set, transit; - php_int_t time, retformat = 0; + zend_long time, retformat = 0; int rs; timelib_time *t; timelib_tzinfo *tzi; zend_string *retstr; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "i|idddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|ldddd", &time, &retformat, &latitude, &longitude, &zenith, &gmt_offset) == FAILURE) { RETURN_FALSE; } @@ -4617,7 +4617,7 @@ static void php_do_date_sunrise_sunset(INTERNAL_FUNCTION_PARAMETERS, int calc_su } if (retformat == SUNFUNCS_RET_TIMESTAMP) { - RETURN_INT(calc_sunset ? set : rise); + RETURN_LONG(calc_sunset ? set : rise); } N = (calc_sunset ? h_set : h_rise) + gmt_offset; @@ -4657,7 +4657,7 @@ PHP_FUNCTION(date_sunset) Returns an array with information about sun set/rise and twilight begin/end */ PHP_FUNCTION(date_sun_info) { - php_int_t time; + zend_long time; double latitude, longitude; timelib_time *t, *t2; timelib_tzinfo *tzi; @@ -4666,7 +4666,7 @@ PHP_FUNCTION(date_sun_info) int dummy; double ddummy; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "idd", &time, &latitude, &longitude) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ldd", &time, &latitude, &longitude) == FAILURE) { RETURN_FALSE; } /* Initialize time struct */ @@ -4693,12 +4693,12 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_int(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "sunrise", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_int(return_value, "sunset", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "sunset", timelib_date_to_int(t2, &dummy)); } t2->sse = transit; - add_assoc_int(return_value, "transit", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "transit", timelib_date_to_int(t2, &dummy)); /* Get civil twilight */ rs = timelib_astro_rise_set_altitude(t, longitude, latitude, -6.0, 0, &ddummy, &ddummy, &rise, &set, &transit); @@ -4713,9 +4713,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_int(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "civil_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_int(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "civil_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get nautical twilight */ @@ -4731,9 +4731,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_int(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "nautical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_int(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "nautical_twilight_end", timelib_date_to_int(t2, &dummy)); } /* Get astronomical twilight */ @@ -4749,9 +4749,9 @@ PHP_FUNCTION(date_sun_info) break; default: t2->sse = rise; - add_assoc_int(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "astronomical_twilight_begin", timelib_date_to_int(t2, &dummy)); t2->sse = set; - add_assoc_int(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); + add_assoc_long(return_value, "astronomical_twilight_end", timelib_date_to_int(t2, &dummy)); } timelib_time_dtor(t); timelib_time_dtor(t2); @@ -4821,7 +4821,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) /* { zend_hash_str_update(props, "interval", sizeof("interval")-1, &zv); /* converted to larger type (int->long); must check when unserializing */ - ZVAL_INT(&zv, (long) period_obj->recurrences); + ZVAL_LONG(&zv, (long) period_obj->recurrences); zend_hash_str_update(props, "recurrences", sizeof("recurrences")-1, &zv); ZVAL_BOOL(&zv, period_obj->include_start_date); @@ -4891,8 +4891,8 @@ static int php_date_period_initialize_from_hash(php_period_obj *period_obj, Hash ht_entry = zend_hash_str_find(myht, "recurrences", sizeof("recurrences")-1); if (ht_entry && - Z_TYPE_P(ht_entry) == IS_INT && Z_IVAL_P(ht_entry) >= 0 && Z_IVAL_P(ht_entry) <= INT_MAX) { - period_obj->recurrences = Z_IVAL_P(ht_entry); + Z_TYPE_P(ht_entry) == IS_LONG && Z_LVAL_P(ht_entry) >= 0 && Z_LVAL_P(ht_entry) <= INT_MAX) { + period_obj->recurrences = Z_LVAL_P(ht_entry); } else { return 0; } -- cgit v1.2.1 From 4d997f63d98c663b2d9acccd3655572652f61c7d Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 25 Aug 2014 20:22:49 +0200 Subject: master renames phase 3 --- ext/date/php_date.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e8e135d83a..e8c8aac06a 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1454,7 +1454,7 @@ PHP_FUNCTION(strtotime) now = timelib_time_ctor(); initial_ts = emalloc(25); - snprintf(initial_ts, 24, "@" ZEND_INT_FMT " UTC", preset_ts); + snprintf(initial_ts, 24, "@" ZEND_LONG_FMT " UTC", preset_ts); t = timelib_strtotime(initial_ts, strlen(initial_ts), NULL, DATE_TIMEZONEDB, php_date_parse_tzfile_wrapper); /* we ignore the error here, as this should never fail */ timelib_update_ts(t, tzi); now->tz_info = tzi; @@ -3840,7 +3840,7 @@ PHP_FUNCTION(timezone_transitions_get) zval *object, element; php_timezone_obj *tzobj; unsigned int i, begin = 0, found; - zend_long timestamp_begin = PHP_INT_MIN, timestamp_end = PHP_INT_MAX; + zend_long timestamp_begin = ZEND_LONG_MIN, timestamp_end = ZEND_LONG_MAX; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll", &object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) { RETURN_FALSE; @@ -3873,7 +3873,7 @@ PHP_FUNCTION(timezone_transitions_get) array_init(return_value); - if (timestamp_begin == PHP_INT_MIN) { + if (timestamp_begin == ZEND_LONG_MIN) { add_nominal(); begin = 0; found = 1; @@ -4248,8 +4248,8 @@ static zend_string *date_interval_format(char *format, int format_len, timelib_r case 'I': length = slprintf(buffer, 32, "%02d", (int) t->i); break; case 'i': length = slprintf(buffer, 32, "%d", (int) t->i); break; - case 'S': length = slprintf(buffer, 32, "%02" ZEND_INT_FMT_SPEC, (zend_long) t->s); break; - case 's': length = slprintf(buffer, 32, ZEND_INT_FMT, (zend_long) t->s); break; + case 'S': length = slprintf(buffer, 32, "%02" ZEND_LONG_FMT_SPEC, (zend_long) t->s); break; + case 's': length = slprintf(buffer, 32, ZEND_LONG_FMT, (zend_long) t->s); break; case 'a': { if ((int) t->days != -99999) { -- cgit v1.2.1 From af59e92b24c8f624672720d47ef65bd8457728b9 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Mon, 25 Aug 2014 21:51:49 +0200 Subject: master renames phase 7 --- ext/date/php_date.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e8c8aac06a..c187e9da53 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2760,7 +2760,7 @@ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht convert_to_string(z_date); z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1); if (z_timezone_type) { - convert_to_int(z_timezone_type); + convert_to_long(z_timezone_type); z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1); if (z_timezone) { convert_to_string(z_timezone); @@ -3692,7 +3692,7 @@ static int php_date_timezone_initialize_from_hash(zval **return_value, php_timez if ((z_timezone_type = zend_hash_str_find(myht, "timezone_type", sizeof("timezone_type")-1)) != NULL) { if ((z_timezone = zend_hash_str_find(myht, "timezone", sizeof("timezone")-1)) != NULL) { - convert_to_int(z_timezone_type); + convert_to_long(z_timezone_type); if (SUCCESS == timezone_initialize(*tzobj, Z_STRVAL_P(z_timezone) TSRMLS_CC)) { return SUCCESS; } -- cgit v1.2.1 From 202e8db1dc8e1203039327d81ce6fd82c1c2d909 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Tue, 26 Aug 2014 11:23:25 +0200 Subject: fixed several long vs zend_long casts --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index c187e9da53..94470ca919 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4821,7 +4821,7 @@ static HashTable *date_object_get_properties_period(zval *object TSRMLS_DC) /* { zend_hash_str_update(props, "interval", sizeof("interval")-1, &zv); /* converted to larger type (int->long); must check when unserializing */ - ZVAL_LONG(&zv, (long) period_obj->recurrences); + ZVAL_LONG(&zv, (zend_long) period_obj->recurrences); zend_hash_str_update(props, "recurrences", sizeof("recurrences")-1, &zv); ZVAL_BOOL(&zv, period_obj->include_start_date); -- cgit v1.2.1 From 3234480827b27ff5d3469a732167afd289632a96 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 Aug 2014 15:31:48 +0200 Subject: first show to make 's' work with size_t --- ext/date/php_date.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 94470ca919..0e43a33c73 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1055,7 +1055,7 @@ char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) /* }}} */ /* {{{ date_format - (gm)date helper */ -static zend_string *date_format(char *format, int format_len, timelib_time *t, int localtime TSRMLS_DC) +static zend_string *date_format(char *format, size_t format_len, timelib_time *t, size_t localtime TSRMLS_DC) { smart_str string = {0}; int i, length = 0; @@ -1216,7 +1216,7 @@ static zend_string *date_format(char *format, int format_len, timelib_time *t, i static void php_date(INTERNAL_FUNCTION_PARAMETERS, int localtime) { char *format; - int format_len; + size_t format_len; zend_long ts; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|l", &format, &format_len, &ts) == FAILURE) { @@ -1440,7 +1440,8 @@ PHPAPI zend_long php_parse_date(char *string, zend_long *now) PHP_FUNCTION(strtotime) { char *times, *initial_ts; - int time_len, error1, error2; + size_t time_len; + int error1, error2; struct timelib_error_container *error; zend_long preset_ts = 0, ts; @@ -2503,7 +2504,7 @@ static void update_errors_warnings(timelib_error_container *last_errors TSRMLS_D DATEG(last_errors) = last_errors; } /* }}} */ -PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, int time_str_len, char *format, zval *timezone_object, int ctor TSRMLS_DC) /* {{{ */ +PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, size_t ctor TSRMLS_DC) /* {{{ */ { timelib_time *now; timelib_tzinfo *tzi = NULL; @@ -2641,7 +2642,7 @@ PHP_FUNCTION(date_create_from_format) { zval *timezone_object = NULL; char *time_str = NULL, *format_str = NULL; - int time_str_len = 0, format_str_len = 0; + size_t time_str_len = 0, format_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|O", &format_str, &format_str_len, &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { @@ -2979,7 +2980,7 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * PHP_FUNCTION(date_parse) { char *date; - int date_len; + size_t date_len; struct timelib_error_container *error; timelib_time *parsed_time; @@ -3781,7 +3782,7 @@ PHP_FUNCTION(timezone_name_from_abbr) { char *abbr; char *tzid; - int abbr_len; + size_t abbr_len; zend_long gmtoffset = -1; zend_long isdst = -1; @@ -4336,7 +4337,7 @@ PHP_METHOD(DatePeriod, __construct) zval *start, *end = NULL, *interval; zend_long recurrences = 0, options = 0; char *isostr = NULL; - int isostr_len = 0; + size_t isostr_len = 0; timelib_time *clone; zend_error_handling error_handling; @@ -4439,7 +4440,7 @@ PHP_FUNCTION(timezone_identifiers_list) int i, item_count; zend_long what = PHP_DATE_TIMEZONE_GROUP_ALL; char *option = NULL; - int option_len = 0; + size_t option_len = 0; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|ls", &what, &option, &option_len) == FAILURE) { RETURN_FALSE; @@ -4521,7 +4522,7 @@ PHP_FUNCTION(timezone_abbreviations_list) PHP_FUNCTION(date_default_timezone_set) { char *zone; - int zone_len; + size_t zone_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &zone, &zone_len) == FAILURE) { RETURN_FALSE; -- cgit v1.2.1 From 5882446b8b72010e6240e3fa11001a7546d802a6 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 Aug 2014 15:37:14 +0200 Subject: revert an accident --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 0e43a33c73..16310784a1 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1055,7 +1055,7 @@ char *php_date_short_day_name(timelib_sll y, timelib_sll m, timelib_sll d) /* }}} */ /* {{{ date_format - (gm)date helper */ -static zend_string *date_format(char *format, size_t format_len, timelib_time *t, size_t localtime TSRMLS_DC) +static zend_string *date_format(char *format, size_t format_len, timelib_time *t, int localtime TSRMLS_DC) { smart_str string = {0}; int i, length = 0; -- cgit v1.2.1 From 257ed4061ae88802538a6f22724c57fda052e36e Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 Aug 2014 17:31:24 +0200 Subject: 's' works with size_t round 2 --- ext/date/php_date.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 16310784a1..982c06bfc6 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1372,7 +1372,7 @@ PHP_FUNCTION(gmdate) PHP_FUNCTION(idate) { char *format; - int format_len; + size_t format_len; zend_long ts = 0; int ret; @@ -1626,7 +1626,7 @@ PHP_FUNCTION(checkdate) PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gmt) { char *format; - int format_len; + size_t format_len; zend_long timestamp = 0; struct tm ta; int max_reallocs = 5; @@ -2596,7 +2596,7 @@ PHP_FUNCTION(date_create) { zval *timezone_object = NULL; char *time_str = NULL; - int time_str_len = 0; + size_t time_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { @@ -2619,7 +2619,7 @@ PHP_FUNCTION(date_create_immutable) { zval *timezone_object = NULL; char *time_str = NULL; - int time_str_len = 0; + size_t time_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { @@ -2665,7 +2665,7 @@ PHP_FUNCTION(date_create_immutable_from_format) { zval *timezone_object = NULL; char *time_str = NULL, *format_str = NULL; - int time_str_len = 0, format_str_len = 0; + size_t time_str_len = 0, format_str_len = 0; zval datetime_object; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|O", &format_str, &format_str_len, &time_str, &time_str_len, &timezone_object, date_ce_timezone) == FAILURE) { @@ -2688,7 +2688,7 @@ PHP_METHOD(DateTime, __construct) { zval *timezone_object = NULL; char *time_str = NULL; - int time_str_len = 0; + size_t time_str_len = 0; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); @@ -2708,7 +2708,7 @@ PHP_METHOD(DateTimeImmutable, __construct) { zval *timezone_object = NULL; char *time_str = NULL; - int time_str_len = 0; + size_t time_str_len = 0; zend_error_handling error_handling; zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); @@ -2980,7 +2980,7 @@ void php_date_do_return_parsed_time(INTERNAL_FUNCTION_PARAMETERS, timelib_time * PHP_FUNCTION(date_parse) { char *date; - size_t date_len; + size_t date_len; struct timelib_error_container *error; timelib_time *parsed_time; @@ -2999,7 +2999,7 @@ PHP_FUNCTION(date_parse) PHP_FUNCTION(date_parse_from_format) { char *date, *format; - int date_len, format_len; + size_t date_len, format_len; struct timelib_error_container *error; timelib_time *parsed_time; @@ -3020,7 +3020,7 @@ PHP_FUNCTION(date_format) zval *object; php_date_obj *dateobj; char *format; - int format_len; + size_t format_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interface, &format, &format_len) == FAILURE) { RETURN_FALSE; @@ -3100,7 +3100,7 @@ PHP_FUNCTION(date_modify) { zval *object; char *modify; - int modify_len; + size_t modify_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_date, &modify, &modify_len) == FAILURE) { RETURN_FALSE; @@ -3120,7 +3120,7 @@ PHP_METHOD(DateTimeImmutable, modify) { zval *object, new_object; char *modify; - int modify_len; + size_t modify_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_immutable, &modify, &modify_len) == FAILURE) { RETURN_FALSE; @@ -3652,7 +3652,7 @@ static int timezone_initialize(php_timezone_obj *tzobj, /*const*/ char *tz TSRML PHP_FUNCTION(timezone_open) { char *tz; - int tz_len; + size_t tz_len; php_timezone_obj *tzobj; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &tz, &tz_len) == FAILURE) { @@ -3671,7 +3671,7 @@ PHP_FUNCTION(timezone_open) PHP_METHOD(DateTimeZone, __construct) { char *tz; - int tz_len; + size_t tz_len; php_timezone_obj *tzobj; zend_error_handling error_handling; @@ -4092,7 +4092,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, void PHP_METHOD(DateInterval, __construct) { char *interval_string = NULL; - int interval_string_length; + size_t interval_string_length; php_interval_obj *diobj; timelib_rel_time *reltime; zend_error_handling error_handling; @@ -4200,7 +4200,7 @@ PHP_METHOD(DateInterval, __wakeup) PHP_FUNCTION(date_interval_create_from_date_string) { char *time_str = NULL; - int time_str_len = 0; + size_t time_str_len = 0; timelib_time *time; timelib_error_container *err = NULL; php_interval_obj *diobj; @@ -4290,7 +4290,7 @@ PHP_FUNCTION(date_interval_format) zval *object; php_interval_obj *diobj; char *format; - int format_len; + size_t format_len; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os", &object, date_ce_interval, &format, &format_len) == FAILURE) { RETURN_FALSE; -- cgit v1.2.1 From 039f5122895c6d2a0fd9ce63ade6137de006b555 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Wed, 27 Aug 2014 22:01:43 +0200 Subject: fix signature --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 982c06bfc6..2a17ab8d54 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2504,7 +2504,7 @@ static void update_errors_warnings(timelib_error_container *last_errors TSRMLS_D DATEG(last_errors) = last_errors; } /* }}} */ -PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, size_t ctor TSRMLS_DC) /* {{{ */ +PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, int ctor TSRMLS_DC) /* {{{ */ { timelib_time *now; timelib_tzinfo *tzi = NULL; -- cgit v1.2.1 From 88d7ca44f645c6e1bbdb17affd7a34113911093d Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Mon, 1 Sep 2014 20:57:33 +0400 Subject: Refactored INI subsystem to use zend_string* instead of char* --- ext/date/php_date.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 2a17ab8d54..cf3f6214a5 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -932,7 +932,7 @@ timelib_tzinfo *php_date_parse_tzfile_wrapper(char *formal_tzname, const timelib /* {{{ static PHP_INI_MH(OnUpdate_date_timezone) */ static PHP_INI_MH(OnUpdate_date_timezone) { - if (OnUpdateString(entry, new_value, new_value_length, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC) == FAILURE) { + if (OnUpdateString(entry, new_value, mh_arg1, mh_arg2, mh_arg3, stage TSRMLS_CC) == FAILURE) { return FAILURE; } @@ -959,11 +959,11 @@ static char* guess_timezone(const timelib_tzdb *tzdb TSRMLS_DC) /* Check config setting for default timezone */ if (!DATEG(default_timezone)) { /* Special case: ext/date wasn't initialized yet */ - zval ztz; + zval *ztz; - if (SUCCESS == zend_get_configuration_directive("date.timezone", sizeof("date.timezone"), &ztz) - && Z_TYPE(ztz) == IS_STRING && Z_STRLEN(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL(ztz), tzdb)) { - return Z_STRVAL(ztz); + if (NULL != (ztz = cfg_get_entry("date.timezone", sizeof("date.timezone"))) + && Z_TYPE_P(ztz) == IS_STRING && Z_STRLEN_P(ztz) > 0 && timelib_timezone_id_is_valid(Z_STRVAL_P(ztz), tzdb)) { + return Z_STRVAL_P(ztz); } } else if (*DATEG(default_timezone)) { if (DATEG(timezone_valid) == 1) { -- cgit v1.2.1 From 3bc8a958c5ec647adbe409ee6411ae7ed6a3dc3b Mon Sep 17 00:00:00 2001 From: Dmitry Stogov Date: Fri, 19 Sep 2014 15:41:01 +0400 Subject: Fixed useless or duplicated IS_INTERNED() checks --- ext/date/php_date.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index cf3f6214a5..c23350384b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2220,7 +2220,7 @@ static HashTable *date_object_get_properties(zval *object TSRMLS_DC) /* {{{ */ abs(utc_offset / 60), abs((utc_offset % 60))); - ZVAL_STR(&zv, tmpstr); + ZVAL_NEW_STR(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: @@ -2312,7 +2312,7 @@ static HashTable *date_object_get_properties_timezone(zval *object TSRMLS_DC) /* abs(tzobj->tzi.utc_offset / 60), abs((tzobj->tzi.utc_offset % 60))); - ZVAL_STR(&zv, tmpstr); + ZVAL_NEW_STR(&zv, tmpstr); } break; case TIMELIB_ZONETYPE_ABBR: -- cgit v1.2.1 From d0cb715373c3fbe9dc095378ec5ed8c71f799f67 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Johannes=20Schl=C3=BCter?= Date: Fri, 19 Sep 2014 18:33:14 +0200 Subject: s/PHP 5/PHP 7/ --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index c23350384b..a93afab59b 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -1,6 +1,6 @@ /* +----------------------------------------------------------------------+ - | PHP Version 5 | + | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ -- cgit v1.2.1 From b9677d313d4c3e41282ad7e270a11a8891822437 Mon Sep 17 00:00:00 2001 From: Anatol Belski Date: Sat, 20 Sep 2014 20:05:27 +0200 Subject: avoid strlen usage in loop --- ext/date/php_date.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index a93afab59b..3fd4b27eb3 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -4496,12 +4496,12 @@ PHP_FUNCTION(timezone_abbreviations_list) do { array_init(&element); - add_assoc_bool(&element, "dst", entry->type); - add_assoc_long(&element, "offset", entry->gmtoffset); + add_assoc_bool_ex(&element, "dst", sizeof("dst") -1, entry->type); + add_assoc_long_ex(&element, "offset", sizeof("offset") - 1, entry->gmtoffset); if (entry->full_tz_name) { - add_assoc_string(&element, "timezone_id", entry->full_tz_name); + add_assoc_string_ex(&element, "timezone_id", sizeof("timezone_id") - 1, entry->full_tz_name); } else { - add_assoc_null(&element, "timezone_id"); + add_assoc_null_ex(&element, "timezone_id", sizeof("timezone_id") - 1); } abbr_array_p = zend_hash_str_find(HASH_OF(return_value), entry->name, strlen(entry->name)); -- cgit v1.2.1 From e33f3d3b7c9a69fe069484045a27d282aa98b00e Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Sat, 20 Sep 2014 22:42:02 +0200 Subject: Move smart_str implementation into Zend/ So we can use it there as well... For now I've retained the zend_smart_str_public.h header, though it would probably be better to just move that one struct into zend_types.h. --- ext/date/php_date.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 3fd4b27eb3..360c6d3f67 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -999,7 +999,7 @@ PHPAPI timelib_tzinfo *get_timezone_info(TSRMLS_D) /* {{{ date() and gmdate() data */ -#include "ext/standard/php_smart_str.h" +#include "zend_smart_str.h" static char *mon_full_names[] = { "January", "February", "March", "April", -- cgit v1.2.1 From 9680829389aefc5bee2f0cdeacd34cbef6b66bbd Mon Sep 17 00:00:00 2001 From: Florian MARGAINE Date: Sat, 20 Sep 2014 23:16:39 +0200 Subject: DateTimeZone::getOffset() now accepts a DateTimeInterface Fixes #68062 Should be backported to PHP-5.6 and PHP-5.5. Conflicts: ext/date/tests/bug67118.phpt --- ext/date/php_date.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'ext/date/php_date.c') diff --git a/ext/date/php_date.c b/ext/date/php_date.c index 360c6d3f67..f2ced7bd59 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -325,12 +325,12 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_name_from_abbr, 0, 0, 1) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_offset_get, 0, 0, 2) - ZEND_ARG_INFO(0, object) - ZEND_ARG_INFO(0, datetime) + ZEND_ARG_OBJ_INFO(0, object, DateTimeZone, 0) + ZEND_ARG_OBJ_INFO(0, datetime, DateTimeInterface, 0) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_method_offset_get, 0, 0, 1) - ZEND_ARG_INFO(0, datetime) + ZEND_ARG_INFO(0, object) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_timezone_transitions_get, 0, 0, 1) @@ -3799,7 +3799,7 @@ PHP_FUNCTION(timezone_name_from_abbr) } /* }}} */ -/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTime object) +/* {{{ proto long timezone_offset_get(DateTimeZone object, DateTimeInterface datetime) Returns the timezone offset. */ PHP_FUNCTION(timezone_offset_get) @@ -3809,13 +3809,13 @@ PHP_FUNCTION(timezone_offset_get) php_date_obj *dateobj; timelib_time_offset *offset; - if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_date) == FAILURE) { + if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "OO", &object, date_ce_timezone, &dateobject, date_ce_interface) == FAILURE) { RETURN_FALSE; } tzobj = Z_PHPTIMEZONE_P(object); DATE_CHECK_INITIALIZED(tzobj->initialized, DateTimeZone); dateobj = Z_PHPDATE_P(dateobject); - DATE_CHECK_INITIALIZED(dateobj->time, DateTime); + DATE_CHECK_INITIALIZED(dateobj->time, DateTimeInterface); switch (tzobj->type) { case TIMELIB_ZONETYPE_ID: -- cgit v1.2.1