diff options
Diffstat (limited to 'src/helpers.cpp')
| -rw-r--r-- | src/helpers.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/helpers.cpp b/src/helpers.cpp index 22be4de..e08906b 100644 --- a/src/helpers.cpp +++ b/src/helpers.cpp @@ -114,6 +114,42 @@ STR2NUM_ERROR str2num(uint16_t &i, char const *s, int base) { return SUCCESS; } +STR2NUM_ERROR str2num(int8_t &i, char const *s, int base) { + char *end; + long l; + errno = 0; + l = strtol(s, &end, base); + if (errno == ERANGE && l == LONG_MAX) { + return OVERFLOW; + } + if (errno == ERANGE && l == LONG_MIN) { + return UNDERFLOW; + } + if (*s == '\0' || *end != '\0') { + return INCONVERTIBLE; + } + i = l; + return SUCCESS; +} + +STR2NUM_ERROR str2num(uint8_t &i, char const *s, int base) { + char *end; + long l; + errno = 0; + l = strtoul(s, &end, base); + if (errno == ERANGE && l == LONG_MAX) { + return OVERFLOW; + } + if (errno == ERANGE && l == LONG_MIN) { + return UNDERFLOW; + } + if (*s == '\0' || *end != '\0') { + return INCONVERTIBLE; + } + i = l; + return SUCCESS; +} + STR2NUM_ERROR str2num(float &f, char const *s, char *&pEnd) { float l; errno = 0; |
