diff options
| author | Laurent Bercot <ska-skaware@skarnet.org> | 2019-07-11 17:46:58 +0000 |
|---|---|---|
| committer | Laurent Bercot <ska-skaware@skarnet.org> | 2019-07-11 17:46:58 +0000 |
| commit | 7e1e6cf1584c5f1c0d6c892d013ed522fb8a8bc1 (patch) | |
| tree | 0518ba66d0f3f79776ed82cd87b7128dd329f6da /src/libstddjb/int64_scan_base_max.c | |
| parent | 9ec6602c9d3c1a8801d996aa3a56c779ce1c5f70 (diff) | |
| download | skalibs-7e1e6cf1584c5f1c0d6c892d013ed522fb8a8bc1.tar.gz | |
Better with the new files added >.>
Diffstat (limited to 'src/libstddjb/int64_scan_base_max.c')
| -rw-r--r-- | src/libstddjb/int64_scan_base_max.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstddjb/int64_scan_base_max.c b/src/libstddjb/int64_scan_base_max.c new file mode 100644 index 0000000..69fb4bb --- /dev/null +++ b/src/libstddjb/int64_scan_base_max.c @@ -0,0 +1,20 @@ +/* ISC license. */ + +#include <skalibs/uint64.h> +#include "fmtscan-internal.h" + +size_t int64_scan_base_max (char const *s, int64_t *d, uint8_t base, uint64_t max) +{ + if (s[0] == '-') + { + uint64_t u ; + size_t pos = uint64_scan_base_max(s+1, &u, base, max+1) ; + return pos ? (*d = -u, 1 + pos) : 0 ; + } + else if (s[0] == '+') + { + size_t pos = uint64_scan_base_max(s+1, (uint64_t *)d, base, max) ; + return pos ? 1 + pos : 0 ; + } + else return uint64_scan_base_max(s, (uint64_t *)d, base, max) ; +} |
