com php-src: Merge branch 'PHP-5.5' into PHP-5.6: ext/date/php _date.c
| From: | Tjerk Anne Meesters | Date: | Wed, 13 Aug 2014 12:20:10 +0000 |
| Subject: | com php-src: Merge branch 'PHP-5.5' into PHP-5.6: ext/date/php _date.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-79829@lists.php.net to get a copy of this message | ||
Commit: 4647016abe27d4a6e7b9c6c990f7ae0e63061dc4
Author: Tjerk Meesters <datibbaw@php.net> Wed, 13 Aug 2014 20:20:10 +0800
Parents: 844e2e81f56fca1f49c73df4e15866cd1ba37f30 b0f7cc8756b21f3b90bb6d7e52cf7d94d4a4616e
Branches: PHP-5.6 master
Link: http://git.php.net/?p=php-src.git;a=commitdiff;h=4647016abe27d4a6e7b9c6c990f7ae0e63061dc4
Log:
Merge branch 'PHP-5.5' into PHP-5.6
* PHP-5.5:
Updated NEWS for #66091
Fixed #66091
Conflicts:
ext/date/php_date.c
Bugs:
https://bugs.php.net/66091
Changed paths:
MM ext/date/php_date.c
Diff:
diff --cc ext/date/php_date.c
index 2789880,39b25d9..64a40a2
--- a/ext/date/php_date.c
+++ b/ext/date/php_date.c
@@@ -2656,10 -2648,14 +2653,12 @@@ PHP_FUNCTION(date_create
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);
}
++ RETVAL_ZVAL(&datetime_object, 0, 0);
}
/* }}} */
@@@ -2676,10 -2673,14 +2676,12 @@@ PHP_FUNCTION(date_create_immutable
RETURN_FALSE;
}
- 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)) {
+ php_date_instantiate(date_ce_immutable, &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);
}
++ RETVAL_ZVAL(&datetime_object, 0, 0);
}
/* }}} */
@@@ -2696,10 -2698,14 +2699,12 @@@ PHP_FUNCTION(date_create_from_format
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);
}
++ RETVAL_ZVAL(&datetime_object, 0, 0);
}
/* }}} */
@@@ -2716,10 -2723,14 +2722,12 @@@ PHP_FUNCTION(date_create_immutable_from
RETURN_FALSE;
}
- 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)) {
+ php_date_instantiate(date_ce_immutable, &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);
}
++ RETVAL_ZVAL(&datetime_object, 0, 0);
}
/* }}} */
@@@ -2758,36 -2769,8 +2766,36 @@@ PHP_METHOD(DateTimeImmutable, __constru
zend_restore_error_handling(&error_handling TSRMLS_CC);
}
/* }}} */
+
+/* {{{ 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)
+ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht TSRMLS_DC)
{
zval **z_date = NULL;
zval **z_timezone = NULL;