summaryrefslogtreecommitdiff
path: root/ext/intl/timezone/timezone_methods.cpp
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-06-28 00:02:50 +0800
committerXinchen Hui <laruence@php.net>2014-06-28 00:02:50 +0800
commit4fbaddb4f8b041769bea7efdd12313641387bd14 (patch)
tree7e3a8f8fd232dd52e0a666ef5b9e9b27734ddde1 /ext/intl/timezone/timezone_methods.cpp
parentf609d8c1c677d03d9ae380480ae72383c5a98106 (diff)
downloadphp-git-4fbaddb4f8b041769bea7efdd12313641387bd14.tar.gz
Refactoring ext/intl (incompleted)
Diffstat (limited to 'ext/intl/timezone/timezone_methods.cpp')
-rw-r--r--ext/intl/timezone/timezone_methods.cpp83
1 files changed, 47 insertions, 36 deletions
diff --git a/ext/intl/timezone/timezone_methods.cpp b/ext/intl/timezone/timezone_methods.cpp
index 9ca6b44c89..bef69ba539 100644
--- a/ext/intl/timezone/timezone_methods.cpp
+++ b/ext/intl/timezone/timezone_methods.cpp
@@ -84,7 +84,7 @@ U_CFUNC PHP_FUNCTION(intltz_from_date_time_zone)
RETURN_NULL();
}
- tzobj = (php_timezone_obj *)zend_objects_get_address(zv_timezone TSRMLS_CC);
+ tzobj = Z_PHPTIMEZONE_P(zv_timezone);
if (!tzobj->initialized) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intltz_from_date_time_zone: DateTimeZone object is unconstructed",
@@ -145,54 +145,52 @@ U_CFUNC PHP_FUNCTION(intltz_get_unknown)
U_CFUNC PHP_FUNCTION(intltz_create_enumeration)
{
- zval **arg = NULL;
+ zval *arg = NULL;
StringEnumeration *se = NULL;
intl_error_reset(NULL TSRMLS_CC);
/* double indirection to have the zend engine destroy the new zval that
* results from separation */
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|Z", &arg) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z", &arg) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intltz_create_enumeration: bad arguments", 0 TSRMLS_CC);
RETURN_FALSE;
}
- if (arg == NULL || Z_TYPE_PP(arg) == IS_NULL) {
+ if (arg == NULL || Z_TYPE_P(arg) == IS_NULL) {
se = TimeZone::createEnumeration();
- } else if (Z_TYPE_PP(arg) == IS_LONG) {
+ } else if (Z_TYPE_P(arg) == IS_LONG) {
int_offset:
- if (Z_LVAL_PP(arg) < (long)INT32_MIN ||
- Z_LVAL_PP(arg) > (long)INT32_MAX) {
+ if (Z_LVAL_P(arg) < (long)INT32_MIN ||
+ Z_LVAL_P(arg) > (long)INT32_MAX) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intltz_create_enumeration: value is out of range", 0 TSRMLS_CC);
RETURN_FALSE;
} else {
- se = TimeZone::createEnumeration((int32_t) Z_LVAL_PP(arg));
+ se = TimeZone::createEnumeration((int32_t) Z_LVAL_P(arg));
}
- } else if (Z_TYPE_PP(arg) == IS_DOUBLE) {
+ } else if (Z_TYPE_P(arg) == IS_DOUBLE) {
double_offset:
convert_to_long_ex(arg);
goto int_offset;
- } else if (Z_TYPE_PP(arg) == IS_OBJECT || Z_TYPE_PP(arg) == IS_STRING) {
+ } else if (Z_TYPE_P(arg) == IS_OBJECT || Z_TYPE_P(arg) == IS_STRING) {
long lval;
double dval;
convert_to_string_ex(arg);
- switch (is_numeric_string(Z_STRVAL_PP(arg), Z_STRLEN_PP(arg), &lval, &dval, 0)) {
+ switch (is_numeric_string(Z_STRVAL_P(arg), Z_STRLEN_P(arg), &lval, &dval, 0)) {
case IS_DOUBLE:
SEPARATE_ZVAL(arg);
- zval_dtor(*arg);
- Z_TYPE_PP(arg) = IS_DOUBLE;
- Z_DVAL_PP(arg) = dval;
+ zval_dtor(arg);
+ ZVAL_DOUBLE(arg, dval);
goto double_offset;
case IS_LONG:
SEPARATE_ZVAL(arg);
- zval_dtor(*arg);
- Z_TYPE_PP(arg) = IS_LONG;
- Z_LVAL_PP(arg) = lval;
+ zval_dtor(arg);
+ ZVAL_LONG(arg, lval);
goto int_offset;
}
/* else call string version */
- se = TimeZone::createEnumeration(Z_STRVAL_PP(arg));
+ se = TimeZone::createEnumeration(Z_STRVAL_P(arg));
} else {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intltz_create_enumeration: invalid argument type", 0 TSRMLS_CC);
@@ -317,11 +315,14 @@ U_CFUNC PHP_FUNCTION(intltz_get_canonical_id)
TimeZone::getCanonicalID(id, result, isSystemID, status);
INTL_CHECK_STATUS(status, "intltz_get_canonical_id: error obtaining canonical ID");
- intl_convert_utf16_to_utf8(&Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value),
- result.getBuffer(), result.length(), &status);
+ char *str;
+ int str_len;
+ intl_convert_utf16_to_utf8(&str, &str_len, result.getBuffer(), result.length(), &status);
INTL_CHECK_STATUS(status,
"intltz_get_canonical_id: could not convert time zone id to UTF-16");
- Z_TYPE_P(return_value) = IS_STRING;
+ RETVAL_STRINGL(str, str_len);
+ //????
+ efree(str);
if (is_systemid) { /* by-ref argument passed */
zval_dtor(is_systemid);
@@ -355,7 +356,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_region)
int32_t region_len = TimeZone::getRegion(id, outbuf, sizeof(outbuf), status);
INTL_CHECK_STATUS(status, "intltz_get_region: Error obtaining region");
- RETURN_STRINGL(outbuf, region_len, 1);
+ RETURN_STRINGL(outbuf, region_len);
}
#endif
@@ -374,7 +375,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_tz_data_version)
INTL_CHECK_STATUS(status, "intltz_get_tz_data_version: "
"Error obtaining time zone data version");
- RETURN_STRING(res, 1);
+ RETURN_STRING(res);
}
U_CFUNC PHP_FUNCTION(intltz_get_equivalent_id)
@@ -401,11 +402,15 @@ U_CFUNC PHP_FUNCTION(intltz_get_equivalent_id)
}
const UnicodeString result = TimeZone::getEquivalentID(id, (int32_t)index);
- intl_convert_utf16_to_utf8(&Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value),
- result.getBuffer(), result.length(), &status);
+ char *str;
+ int str_len;
+
+ intl_convert_utf16_to_utf8(&str, &str_len, result.getBuffer(), result.length(), &status);
INTL_CHECK_STATUS(status, "intltz_get_equivalent_id: "
"could not convert resulting time zone id to UTF-16");
- Z_TYPE_P(return_value) = IS_STRING;
+ RETVAL_STRINGL(str, str_len);
+ //????
+ efree(str);
}
U_CFUNC PHP_FUNCTION(intltz_get_id)
@@ -431,7 +436,9 @@ U_CFUNC PHP_FUNCTION(intltz_get_id)
id_us.getBuffer(), id_us.length(), TIMEZONE_ERROR_CODE_P(to));
INTL_METHOD_CHECK_STATUS(to, "intltz_get_id: Could not convert id to UTF-8");
- RETURN_STRINGL(id, id_len, 0);
+ RETURN_STRINGL(id, id_len);
+ //???
+ efree(id);
}
U_CFUNC PHP_FUNCTION(intltz_use_daylight_time)
@@ -513,7 +520,7 @@ U_CFUNC PHP_FUNCTION(intltz_has_same_rules)
RETURN_FALSE;
}
TIMEZONE_METHOD_FETCH_OBJECT;
- other_to = (TimeZone_object *) zend_object_store_get_object(other_object TSRMLS_CC);
+ other_to = Z_INTL_TIMEZONE_P(other_object);
if (other_to->utimezone == NULL) {
intl_errors_set(&to->err, U_ILLEGAL_ARGUMENT_ERROR,
"intltz_has_same_rules: The second IntlTimeZone is unconstructed", 0 TSRMLS_CC);
@@ -569,12 +576,15 @@ U_CFUNC PHP_FUNCTION(intltz_get_display_name)
to->utimezone->getDisplayName((UBool)daylight, (TimeZone::EDisplayType)display_type,
Locale::createFromName(locale_str), result);
- intl_convert_utf16_to_utf8(&Z_STRVAL_P(return_value), &Z_STRLEN_P(return_value),
- result.getBuffer(), result.length(), TIMEZONE_ERROR_CODE_P(to));
+ char *str;
+ int str_len;
+ intl_convert_utf16_to_utf8(&str, &str_len, result.getBuffer(), result.length(), TIMEZONE_ERROR_CODE_P(to));
INTL_METHOD_CHECK_STATUS(to, "intltz_get_display_name: "
"could not convert resulting time zone id to UTF-16");
- Z_TYPE_P(return_value) = IS_STRING;
+ RETVAL_STRINGL(str, str_len);
+ //????
+ efree(str);
}
U_CFUNC PHP_FUNCTION(intltz_get_dst_savings)
@@ -595,6 +605,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_dst_savings)
U_CFUNC PHP_FUNCTION(intltz_to_date_time_zone)
{
+ zval tmp;
TIMEZONE_METHOD_INIT_VARS;
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(),
@@ -607,7 +618,7 @@ U_CFUNC PHP_FUNCTION(intltz_to_date_time_zone)
TIMEZONE_METHOD_FETCH_OBJECT;
zval *ret = timezone_convert_to_datetimezone(to->utimezone,
- &TIMEZONE_ERROR(to), "intltz_to_date_time_zone" TSRMLS_CC);
+ &TIMEZONE_ERROR(to), "intltz_to_date_time_zone", &tmp TSRMLS_CC);
if (ret) {
RETURN_ZVAL(ret, 1, 1);
@@ -628,7 +639,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_error_code)
}
/* Fetch the object (without resetting its last error code ). */
- to = (TimeZone_object*)zend_object_store_get_object(object TSRMLS_CC);
+ to = Z_INTL_TIMEZONE_P(object);
if (to == NULL)
RETURN_FALSE;
@@ -637,7 +648,7 @@ U_CFUNC PHP_FUNCTION(intltz_get_error_code)
U_CFUNC PHP_FUNCTION(intltz_get_error_message)
{
- const char* message = NULL;
+ zend_string* message = NULL;
TIMEZONE_METHOD_INIT_VARS
if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O",
@@ -649,11 +660,11 @@ U_CFUNC PHP_FUNCTION(intltz_get_error_message)
/* Fetch the object (without resetting its last error code ). */
- to = (TimeZone_object*)zend_object_store_get_object(object TSRMLS_CC);
+ to = Z_INTL_TIMEZONE_P(object);
if (to == NULL)
RETURN_FALSE;
/* Return last error message. */
message = intl_error_get_message(TIMEZONE_ERROR_P(to) TSRMLS_CC);
- RETURN_STRING(message, 0);
+ RETURN_STR(message);
}