diff options
Diffstat (limited to 'Zend/zend_strtod.c')
| -rw-r--r-- | Zend/zend_strtod.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/Zend/zend_strtod.c b/Zend/zend_strtod.c index 94d1383aa2..49b591da14 100644 --- a/Zend/zend_strtod.c +++ b/Zend/zend_strtod.c @@ -2604,6 +2604,34 @@ ZEND_API double zend_hex_strtod(const char *str, char **endptr) return value; } +ZEND_API double zend_oct_strtod(const char *str, char **endptr) +{ + const char *s = str; + char c; + double value = 0; + int any = 0; + + /* skip leading zero */ + s++; + + while ((c = *s++)) { + if (c > '7') { + /* break and return the current value if the number is not well-formed + * that's what Linux strtol() does + */ + break; + } + value = value * 8 + c - '0'; + any = 1; + } + + if (endptr != NULL) { + *endptr = (char *)(any ? s - 1 : str); + } + + return value; +} + /* * Local variables: * tab-width: 4 |
