diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-01-06 03:28:28 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2020-01-06 03:28:28 +0100 |
commit | d053eb8096a790d81b67c844d918341e797c2659 (patch) | |
tree | 41493bdf9374493f0e19db9f0c4a6eb4b69d4328 /lib/common/parse_size.c | |
parent | 61da4d9d3249cc6001c64d371ef1bf82aeeab616 (diff) |
Cleanup: use parse_size function to parse compressor options
The XZ option parser had a similar function to parse_size. This commit
removes the other implementation and extends parse_size with the one
missing feature, i.e. allowing a '%' suffix for a relative value.
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib/common/parse_size.c')
-rw-r--r-- | lib/common/parse_size.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/lib/common/parse_size.c b/lib/common/parse_size.c index aede38a..1285d3b 100644 --- a/lib/common/parse_size.c +++ b/lib/common/parse_size.c @@ -9,7 +9,8 @@ #include <ctype.h> #include <limits.h> -int parse_size(const char *what, size_t *out, const char *str) +int parse_size(const char *what, size_t *out, const char *str, + size_t reference) { const char *in = str; size_t acc = 0, x; @@ -49,6 +50,15 @@ int parse_size(const char *what, size_t *out, const char *str) acc <<= 30; ++in; break; + case '%': + if (reference == 0) + goto fail_suffix; + + if (SZ_MUL_OV(acc, reference, &acc)) + goto fail_ov; + + acc /= 100; + break; case '\0': break; default: |