summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKarel Zak2018-07-20 12:52:55 +0200
committerKarel Zak2018-07-20 12:54:58 +0200
commitd54b83156f8c4c18367130c054a688f5424bfef6 (patch)
tree64ad939b0b7c4b779c978f013d16ba29889e664e /lib
parentinclude/strutils: remove unnecessary cast (diff)
downloadkernel-qcow2-util-linux-d54b83156f8c4c18367130c054a688f5424bfef6.tar.gz
kernel-qcow2-util-linux-d54b83156f8c4c18367130c054a688f5424bfef6.tar.xz
kernel-qcow2-util-linux-d54b83156f8c4c18367130c054a688f5424bfef6.zip
lib/strutils: follow const in parse_size()
* don't cast from char to const char * don't share endptr from strtoxxx() with rest of the code as the end pointer is char, but code works with const chars Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/strutils.c28
1 files changed, 15 insertions, 13 deletions
diff --git a/lib/strutils.c b/lib/strutils.c
index 38fc8d6b5..88ea6f277 100644
--- a/lib/strutils.c
+++ b/lib/strutils.c
@@ -62,7 +62,8 @@ static int do_scale_by_power (uintmax_t *x, int base, int power)
*/
int parse_size(const char *str, uintmax_t *res, int *power)
{
- char *p;
+ const char *p;
+ char *end;
uintmax_t x, frac = 0;
int base = 1024, rc = 0, pwr = 0, frac_zeros = 0;
@@ -83,25 +84,25 @@ int parse_size(const char *str, uintmax_t *res, int *power)
* use lconv->negative_sign. But coreutils use the same solution,
* so it's probably good enough...
*/
- p = (char *) str;
+ p = str;
while (isspace((unsigned char) *p))
p++;
if (*p == '-') {
rc = -EINVAL;
goto err;
}
- p = NULL;
- errno = 0;
- x = strtoumax(str, &p, 0);
+ errno = 0, end = NULL;
+ x = strtoumax(str, &end, 0);
- if (p == str ||
+ if (end == str ||
(errno != 0 && (x == UINTMAX_MAX || x == 0))) {
rc = errno ? -errno : -EINVAL;
goto err;
}
- if (!p || !*p)
+ if (!end || !*end)
goto done; /* without suffix */
+ p = end;
/*
* Check size suffixes
@@ -113,25 +114,26 @@ check_suffix:
base = 1000; /* XB, 10^N */
else if (*(p + 1)) {
struct lconv const *l = localeconv();
- char *dp = l ? l->decimal_point : NULL;
+ const char *dp = l ? l->decimal_point : NULL;
size_t dpsz = dp ? strlen(dp) : 0;
if (frac == 0 && *p && dp && strncmp(dp, p, dpsz) == 0) {
- char *fstr = p + dpsz;
+ const char *fstr = p + dpsz;
for (p = fstr; *p == '0'; p++)
frac_zeros++;
- errno = 0, p = NULL;
- frac = strtoumax(fstr, &p, 0);
- if (p == fstr ||
+ errno = 0, end = NULL;
+ frac = strtoumax(fstr, &end, 0);
+ if (end == fstr ||
(errno != 0 && (frac == UINTMAX_MAX || frac == 0))) {
rc = errno ? -errno : -EINVAL;
goto err;
}
- if (frac && (!p || !*p)) {
+ if (frac && (!end || !*end)) {
rc = -EINVAL;
goto err; /* without suffix, but with frac */
}
+ p = end;
goto check_suffix;
}
rc = -EINVAL;