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

Conflicts:
ext/date/php_date.c

1  2 
ext/date/php_date.c

index 6ff05868a6dcdd0799089737b0e47d2d09617c47,92e9480a438d0f1aff482851cdb5639482637b43..39b25d9cb59c25125a03d0e0e6b60bd69dec59f9
@@@ -2658,26 -2523,6 +2659,31 @@@ PHP_FUNCTION(date_create
  }
  /* }}} */
  
-       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)) {
 +/* {{{ proto DateTime date_create_immutable([string time[, DateTimeZone object]])
 +   Returns new DateTime object
 +*/
 +PHP_FUNCTION(date_create_immutable)
 +{
 +      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_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);
 +      }
 +}
 +/* }}} */
 +
  /* {{{ proto DateTime date_create_from_format(string format, string time[, DateTimeZone object])
     Returns new DateTime object formatted according to the specified format
  */
@@@ -2698,26 -2548,6 +2709,31 @@@ PHP_FUNCTION(date_create_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)) {
 +/* {{{ proto DateTime date_create_immutable_from_format(string format, string time[, DateTimeZone object])
 +   Returns new DateTime object formatted according to the specified format
 +*/
 +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;
++      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_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);
 +      }
 +}
 +/* }}} */
 +
  /* {{{ proto DateTime::__construct([string time[, DateTimeZone object]])
     Creates new DateTime object
  */
@@@ -2736,25 -2566,7 +2752,25 @@@ PHP_METHOD(DateTime, __construct
  }
  /* }}} */
  
- static int php_date_initialize_from_hash(zval **return_value, php_date_obj **dateobj, HashTable *myht TSRMLS_DC)
 +/* {{{ proto DateTimeImmutable::__construct([string time[, DateTimeZone object]])
 +   Creates new DateTimeImmutable object
 +*/
 +PHP_METHOD(DateTimeImmutable, __construct)
 +{
 +      zval *timezone_object = NULL;
 +      char *time_str = NULL;
 +      int time_str_len = 0;
 +      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, "|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);
 +      }
 +      zend_restore_error_handling(&error_handling TSRMLS_CC);
 +}
 +/* }}} */
 +
+ static int php_date_initialize_from_hash(php_date_obj **dateobj, HashTable *myht TSRMLS_DC)
  {
        zval            **z_date = NULL;
        zval            **z_timezone = NULL;
@@@ -2830,28 -2642,6 +2846,28 @@@ PHP_METHOD(DateTime, __set_state
  }
  /* }}} */
  
-       if (!php_date_initialize_from_hash(&return_value, &dateobj, myht TSRMLS_CC)) {
 +/* {{{ proto DateTimeImmutable::__set_state()
 +*/
 +PHP_METHOD(DateTimeImmutable, __set_state)
 +{
 +      php_date_obj     *dateobj;
 +      zval             *array;
 +      HashTable        *myht;
 +
 +      if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &array) == FAILURE) {
 +              RETURN_FALSE;
 +      }
 +
 +      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(&dateobj, myht TSRMLS_CC)) {
 +              php_error(E_ERROR, "Invalid serialization data for DateTimeImmutable object");
 +      }
 +}
 +/* }}} */
 +
  /* {{{ proto DateTime::__wakeup()
  */
  PHP_METHOD(DateTime, __wakeup)