summaryrefslogtreecommitdiff
path: root/Zend/zend_strtod.c
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2006-12-26 16:44:20 +0000
committerIlia Alshanetsky <iliaa@php.net>2006-12-26 16:44:20 +0000
commitff9d0fcc783c19d729ae475fe8baf76d94a003a9 (patch)
treed65d57b4975f5ebbb243ab538b871ca2f57d3c91 /Zend/zend_strtod.c
parent24124518ab1387dcc63e3ddeec2acdf43362e20f (diff)
downloadphp-git-ff9d0fcc783c19d729ae475fe8baf76d94a003a9.tar.gz
is_numeric_string() optimization
# Original Patch by Matt Wilmas
Diffstat (limited to 'Zend/zend_strtod.c')
-rw-r--r--Zend/zend_strtod.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c
index 4fed8c3552..d388697f5b 100644
--- a/Zend/zend_strtod.c
+++ b/Zend/zend_strtod.c
@@ -2557,6 +2557,39 @@ ret:
return result;
}
+ZEND_API double zend_hex_strtod(const char *str, char **endptr)
+{
+ const char *s = str;
+ char c;
+ int any = 0;
+ double value = 0;
+
+ if (*s == '0' && (s[1] == 'x' || s[1] == 'X')) {
+ s += 2;
+ }
+
+ while (c = *s++) {
+ if (c >= '0' && c <= '9') {
+ c -= '0';
+ } else if (c >= 'A' && c <= 'F') {
+ c -= 'A' - 10;
+ } else if (c >= 'a' && c <= 'f') {
+ c -= 'a' - 10;
+ } else {
+ break;
+ }
+
+ any = 1;
+ value = value * 16 + c;
+ }
+
+ if (endptr != NULL) {
+ *endptr = (char *)(any ? s - 1 : str);
+ }
+
+ return value;
+}
+
/*
* Local variables:
* tab-width: 4