]> granicus.if.org Git - php/commitdiff
Merge branch 'PHP-5.5' into PHP-5.6
authorTjerk Meesters <datibbaw@php.net>
Wed, 13 Aug 2014 12:20:10 +0000 (20:20 +0800)
committerTjerk Meesters <datibbaw@php.net>
Wed, 13 Aug 2014 12:20:10 +0000 (20:20 +0800)
* PHP-5.5:
  Updated NEWS for #66091
  Fixed #66091

Conflicts:
ext/date/php_date.c

1  2 
ext/date/php_date.c

index 278988036d81f9bb4ed766bbe7e60203230bc702,39b25d9cb59c25125a03d0e0e6b60bd69dec59f9..64a40a21e4468b1d5ae8b9417a23541af2e8afb1
@@@ -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;