From 7b1bc753c6840c1e2dd001f498764a1ba07ccda6 Mon Sep 17 00:00:00 2001 From: Antony Dovgal Date: Wed, 19 Mar 2008 12:41:23 +0000 Subject: [PATCH] MFH: add zend_atol() --- Zend/zend_ini.c | 4 ++-- Zend/zend_operators.c | 27 +++++++++++++++++++++++++++ Zend/zend_operators.h | 1 + 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/Zend/zend_ini.c b/Zend/zend_ini.c index 4bdb8d8756..c773f0a05b 100644 --- a/Zend/zend_ini.c +++ b/Zend/zend_ini.c @@ -556,7 +556,7 @@ ZEND_API ZEND_INI_MH(OnUpdateLong) /* {{{ */ p = (long *) (base+(size_t) mh_arg1); - *p = zend_atoi(new_value, new_value_length); + *p = zend_atol(new_value, new_value_length); return SUCCESS; } /* }}} */ @@ -572,7 +572,7 @@ ZEND_API ZEND_INI_MH(OnUpdateLongGEZero) /* {{{ */ base = (char *) ts_resource(*((int *) mh_arg2)); #endif - tmp = zend_atoi(new_value, new_value_length); + tmp = zend_atol(new_value, new_value_length); if (tmp < 0) { return FAILURE; } diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 542af1576f..6a905cef9d 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -71,6 +71,33 @@ ZEND_API int zend_atoi(const char *str, int str_len) return retval; } +ZEND_API long zend_atol(const char *str, int str_len) +{ + long retval; + + if (!str_len) { + str_len = strlen(str); + } + retval = strtol(str, NULL, 0); + if (str_len>0) { + switch (str[str_len-1]) { + case 'g': + case 'G': + retval *= 1024; + /* break intentionally missing */ + case 'm': + case 'M': + retval *= 1024; + /* break intentionally missing */ + case 'k': + case 'K': + retval *= 1024; + break; + } + } + return retval; +} + ZEND_API double zend_string_to_double(const char *number, zend_uint length) { diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 1bf25ee93e..46cecf2730 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -312,6 +312,7 @@ ZEND_API void zend_compare_arrays(zval *result, zval *a1, zval *a2 TSRMLS_DC); ZEND_API void zend_compare_objects(zval *result, zval *o1, zval *o2 TSRMLS_DC); ZEND_API int zend_atoi(const char *str, int str_len); +ZEND_API int zend_atol(const char *str, int str_len); ZEND_API void zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC); END_EXTERN_C() -- 2.40.0