|
|
|
@ -2539,11 +2539,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; |
|
|
|
} |
|
|
|
|
|
|
|
@ -2651,15 +2647,18 @@ 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; |
|
|
|
} |
|
|
|
RETVAL_ZVAL(&datetime_object, 0, 0); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
@ -2671,15 +2670,18 @@ 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, 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; |
|
|
|
} |
|
|
|
RETVAL_ZVAL(&datetime_object, 0, 0); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
@ -2691,15 +2693,18 @@ 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; |
|
|
|
} |
|
|
|
RETVAL_ZVAL(&datetime_object, 0, 0); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
@ -2711,15 +2716,18 @@ 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, 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; |
|
|
|
} |
|
|
|
RETVAL_ZVAL(&datetime_object, 0, 0); |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
@ -2789,7 +2797,7 @@ PHP_METHOD(DateTimeImmutable, createFromMutable) |
|
|
|
} |
|
|
|
/* }}} */ |
|
|
|
|
|
|
|
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; |
|
|
|
@ -2859,7 +2867,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"); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -2881,7 +2889,7 @@ PHP_METHOD(DateTimeImmutable, __set_state) |
|
|
|
|
|
|
|
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)) { |
|
|
|
if (!php_date_initialize_from_hash(&dateobj, myht TSRMLS_CC)) { |
|
|
|
php_error(E_ERROR, "Invalid serialization data for DateTimeImmutable object"); |
|
|
|
} |
|
|
|
} |
|
|
|
@ -2899,7 +2907,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"); |
|
|
|
} |
|
|
|
} |
|
|
|
|