diff options
author | Sebastian Holtermann <sebholt@xwmw.org> | 2019-08-10 11:37:34 (GMT) |
---|---|---|
committer | Sebastian Holtermann <sebholt@xwmw.org> | 2019-08-10 12:39:03 (GMT) |
commit | 935fbe0b0454163678bc4ef19e1bee95a7a31b4d (patch) | |
tree | 794eea739dbd5e5fc184539e4fdd856f8fad3364 /Source/cmStringAlgorithms.cxx | |
parent | 32a7605e69e3faf56bf51da1641a7ae897d23826 (diff) | |
download | CMake-935fbe0b0454163678bc4ef19e1bee95a7a31b4d.zip CMake-935fbe0b0454163678bc4ef19e1bee95a7a31b4d.tar.gz CMake-935fbe0b0454163678bc4ef19e1bee95a7a31b4d.tar.bz2 |
cmStringAlgorithms: Add cmStrToLong and cmStrToULong
This adds the following functions to cmStringAlgorithms:
- `cmStrToLong`: moved from `cmSystemTools::StringToLong`
- `cmStrToULong`: moved from `cmSystemTools::StringToULong`
Overloads of the given functions for `std::string` are added as well.
Diffstat (limited to 'Source/cmStringAlgorithms.cxx')
-rw-r--r-- | Source/cmStringAlgorithms.cxx | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/Source/cmStringAlgorithms.cxx b/Source/cmStringAlgorithms.cxx index 5867a44..0703e55 100644 --- a/Source/cmStringAlgorithms.cxx +++ b/Source/cmStringAlgorithms.cxx @@ -4,6 +4,8 @@ #include <algorithm> #include <cstdio> +#include <errno.h> +#include <stdlib.h> std::string cmTrimWhitespace(cm::string_view str) { @@ -124,3 +126,35 @@ std::string cmCatViews(std::initializer_list<cm::string_view> views) } return result; } + +bool cmStrToLong(const char* str, long* value) +{ + errno = 0; + char* endp; + *value = strtol(str, &endp, 10); + return (*endp == '\0') && (endp != str) && (errno == 0); +} + +bool cmStrToLong(std::string const& str, long* value) +{ + return cmStrToLong(str.c_str(), value); +} + +bool cmStrToULong(const char* str, unsigned long* value) +{ + errno = 0; + char* endp; + while (cmIsSpace(*str)) { + ++str; + } + if (*str == '-') { + return false; + } + *value = strtoul(str, &endp, 10); + return (*endp == '\0') && (endp != str) && (errno == 0); +} + +bool cmStrToULong(std::string const& str, unsigned long* value) +{ + return cmStrToULong(str.c_str(), value); +} |