aboutsummaryrefslogtreecommitdiff
path: root/util/cutils.c
diff options
context:
space:
mode:
authorMarkus Armbruster <armbru@redhat.com>2017-02-21 21:14:06 +0100
committerMarkus Armbruster <armbru@redhat.com>2017-02-23 20:35:36 +0100
commitf17fd4fdf0df3d2f3444399d04c38d22b9a3e1b7 (patch)
tree65d92c1363f1c071214779eee670185ff31094e7 /util/cutils.c
parent4fcdf65ae2c00ae69f7625f26ed41f37d77b403c (diff)
util/cutils: Return qemu_strtosz*() error and value separately
This makes qemu_strtosz(), qemu_strtosz_mebi() and qemu_strtosz_metric() similar to qemu_strtoi64(), except negative values are rejected. Cc: Dr. David Alan Gilbert <dgilbert@redhat.com> Cc: Eduardo Habkost <ehabkost@redhat.com> (maintainer:X86) Cc: Kevin Wolf <kwolf@redhat.com> (supporter:Block layer core) Cc: Max Reitz <mreitz@redhat.com> (supporter:Block layer core) Cc: qemu-block@nongnu.org (open list:Block layer core) Signed-off-by: Markus Armbruster <armbru@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Reviewed-by: Dr. David Alan Gilbert <dgilbert@redhat.com> Message-Id: <1487708048-2131-23-git-send-email-armbru@redhat.com>
Diffstat (limited to 'util/cutils.c')
-rw-r--r--util/cutils.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/util/cutils.c b/util/cutils.c
index b991623733..7088ddcb09 100644
--- a/util/cutils.c
+++ b/util/cutils.c
@@ -205,10 +205,11 @@ static int64_t suffix_mul(char suffix, int64_t unit)
* in *end, if not NULL. Return -ERANGE on overflow, Return -EINVAL on
* other error.
*/
-static int64_t do_strtosz(const char *nptr, char **end,
- const char default_suffix, int64_t unit)
+static int do_strtosz(const char *nptr, char **end,
+ const char default_suffix, int64_t unit,
+ int64_t *result)
{
- int64_t retval;
+ int retval;
char *endptr;
unsigned char c;
int mul_required = 0;
@@ -240,7 +241,8 @@ static int64_t do_strtosz(const char *nptr, char **end,
retval = -ERANGE;
goto out;
}
- retval = val * mul;
+ *result = val * mul;
+ retval = 0;
out:
if (end) {
@@ -252,19 +254,19 @@ out:
return retval;
}
-int64_t qemu_strtosz(const char *nptr, char **end)
+int qemu_strtosz(const char *nptr, char **end, int64_t *result)
{
- return do_strtosz(nptr, end, 'B', 1024);
+ return do_strtosz(nptr, end, 'B', 1024, result);
}
-int64_t qemu_strtosz_MiB(const char *nptr, char **end)
+int qemu_strtosz_MiB(const char *nptr, char **end, int64_t *result)
{
- return do_strtosz(nptr, end, 'M', 1024);
+ return do_strtosz(nptr, end, 'M', 1024, result);
}
-int64_t qemu_strtosz_metric(const char *nptr, char **end)
+int qemu_strtosz_metric(const char *nptr, char **end, int64_t *result)
{
- return do_strtosz(nptr, end, 'B', 1000);
+ return do_strtosz(nptr, end, 'B', 1000, result);
}
/**