diff options
| author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-10-07 10:38:45 +0200 | 
|---|---|---|
| committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2022-10-07 10:38:45 +0200 | 
| commit | 589e2f0d174ca043ac17fe3ae06b7e5532542e9d (patch) | |
| tree | 628fec4b60dff4683d844f4b456814f4923fa893 /src/utils.cpp | |
| parent | 7c1c779cfd01162d020d0c276bb605adfe338df9 (diff) | |
| download | dabmux-589e2f0d174ca043ac17fe3ae06b7e5532542e9d.tar.gz dabmux-589e2f0d174ca043ac17fe3ae06b7e5532542e9d.tar.bz2 dabmux-589e2f0d174ca043ac17fe3ae06b7e5532542e9d.zip  | |
Make hexparse return unsigned
This fixes the definition of long service IDs on 32-bit systems
Diffstat (limited to 'src/utils.cpp')
| -rw-r--r-- | src/utils.cpp | 15 | 
1 files changed, 7 insertions, 8 deletions
diff --git a/src/utils.cpp b/src/utils.cpp index c9a2714..1e006f7 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -554,16 +554,16 @@ void printEnsemble(const shared_ptr<dabEnsemble>& ensemble)      }  } -long hexparse(const std::string& input) +unsigned long hexparse(const std::string& input)  { -    long value = 0; +    unsigned long value = 0;      errno = 0;      char* endptr = nullptr;      const bool is_hex = (input.find("0x") == 0); -    // Do not use strtol's base=0 because +    // Do not use strtoul's base=0 because      // we do not want to accept octal.      const int base = is_hex ? 16 : 10; @@ -573,10 +573,9 @@ long hexparse(const std::string& input)      // Comments taken from manpage -    value = strtol(startptr, &endptr, base); -    if ((value == LONG_MIN or value == LONG_MAX) and errno == ERANGE) { -        // If an underflow occurs, strtol() returns LONG_MIN. -        // If an overflow occurs, strtol() returns LONG_MAX. +    value = strtoul(startptr, &endptr, base); +    if (value == ULONG_MAX and errno == ERANGE) { +        // If an overflow occurs, strtoul() returns ULONG_MAX.          // In both cases, errno is set to ERANGE.          throw out_of_range("hexparse: value out of range");      } @@ -588,7 +587,7 @@ long hexparse(const std::string& input)          throw invalid_argument(ss.str());      }      else if (startptr == endptr) { -        // If there were no digits at all, strtol() stores the original value +        // If there were no digits at all, strtoul() stores the original value          // of nptr in *endptr (and returns 0).          throw out_of_range("hexparse: no value found");      }  | 
