diff options
Diffstat (limited to 'util.c')
-rw-r--r-- | util.c | 17 |
1 files changed, 17 insertions, 0 deletions
@@ -134,6 +134,23 @@ bool safe_strtol(const char *str, int32_t *out) { return false; } +bool safe_strtod(const char *str, double *out) { + assert(out != NULL); + errno = 0; + *out = 0; + char *endptr; + double d = strtod(str, &endptr); + if ((errno == ERANGE) || (str == endptr)) { + return false; + } + + if (xisspace(*endptr) || (*endptr == '\0' && endptr != str)) { + *out = d; + return true; + } + return false; +} + void vperror(const char *fmt, ...) { int old_errno = errno; char buf[1024]; |