From: "Andreas Färber" <andreas.faerber@web.de>
To: Jes.Sorensen@redhat.com
Cc: quintela@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH 1/5] Introduce strtobytes() library function to convert string to byte count.
Date: Wed, 15 Sep 2010 20:46:41 +0200 [thread overview]
Message-ID: <795CDD0E-ED9C-4EC1-AE65-A563DC9A2240@web.de> (raw)
In-Reply-To: <1284553440-17985-2-git-send-email-Jes.Sorensen@redhat.com>
Am 15.09.2010 um 14:23 schrieb Jes.Sorensen@redhat.com:
[...]
> +/*
> + * Convert string to bytes, allowing either K/k for KB, M/m for MB,
> + * G/b for GB or T/t for TB. Default without any postfix is MB.
^^^ typo
> + * End pointer will be returned in *end, if end is valid.
> + * Return 0 on error.
> + */
You seem to be refactoring existing code into this function, but the
use of such suffixes usually brings up the question whether it's
factor 1024 or 1000.
Here you're using 1024 apparently. If you don't want the user dealing
with (imo ugly) Ki/Mi/Gi/Ti units this should at least be documented
accordingly: G/g for GiB, etc. or G/g for GB = 1024 MB, etc.
Andreas
> +uint64_t strtobytes(const char *nptr, char **end)
> +{
> + uint64_t value;
> + char *endptr;
> +
> + value = strtoll(nptr, &endptr, 0);
> + switch (*endptr++) {
> + case 'K':
> + case 'k':
> + value <<= 10;
> + break;
> + case 0:
> + case 'M':
> + case 'm':
> + value <<= 20;
> + break;
> + case 'G':
> + case 'g':
> + value <<= 30;
> + break;
> + case 'T':
> + case 't':
> + value <<= 40;
> + break;
> + default:
> + value = 0;
> + }
> +
> + if (end)
> + *end = endptr;
> +
> + return value;
> +}
> diff --git a/qemu-common.h b/qemu-common.h
> index dfd3dc0..01d7dcb 100644
> --- a/qemu-common.h
> +++ b/qemu-common.h
> @@ -137,6 +137,7 @@ time_t mktimegm(struct tm *tm);
> int qemu_fls(int i);
> int qemu_fdatasync(int fd);
> int fcntl_setfl(int fd, int flag);
> +uint64_t strtobytes(const char *nptr, char **end);
>
> /* path.c */
> void init_paths(const char *prefix);
> diff --git a/vl.c b/vl.c
> index 3f45aa9..0cdd94a 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -734,14 +734,10 @@ static void numa_add(const char *optarg)
> if (get_param_value(option, 128, "mem", optarg) == 0) {
> node_mem[nodenr] = 0;
> } else {
> - value = strtoull(option, &endptr, 0);
> - switch (*endptr) {
> - case 0: case 'M': case 'm':
> - value <<= 20;
> - break;
> - case 'G': case 'g':
> - value <<= 30;
> - break;
> + value = strtobytes(option, NULL);
> + if (!value) {
> + fprintf(stderr, "qemu: invalid numa mem size: %s
> \n", optarg);
> + exit(1);
> }
> node_mem[nodenr] = value;
> }
> @@ -2166,17 +2162,9 @@ int main(int argc, char **argv, char **envp)
> break;
> case QEMU_OPTION_m: {
> uint64_t value;
> - char *ptr;
>
> - value = strtoul(optarg, &ptr, 10);
> - switch (*ptr) {
> - case 0: case 'M': case 'm':
> - value <<= 20;
> - break;
> - case 'G': case 'g':
> - value <<= 30;
> - break;
> - default:
> + value = strtobytes(optarg, NULL);
> + if (!value) {
> fprintf(stderr, "qemu: invalid ram size: %s\n",
> optarg);
> exit(1);
> }
> --
> 1.7.2.2
next prev parent reply other threads:[~2010-09-15 18:47 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-09-15 12:23 [Qemu-devel] [PATCH 0/5] Introduce strtobytes and make use of it Jes.Sorensen
2010-09-15 12:23 ` [Qemu-devel] [PATCH 1/5] Introduce strtobytes() library function to convert string to byte count Jes.Sorensen
2010-09-15 18:46 ` Andreas Färber [this message]
2010-09-15 20:50 ` Stefan Weil
2010-09-15 12:23 ` [Qemu-devel] [PATCH 2/5] Support human unit formats in strtobytes, eg. 1.0G Jes.Sorensen
2010-09-15 14:50 ` [Qemu-devel] " Juan Quintela
2010-09-15 19:29 ` Jes Sorensen
2010-09-15 15:45 ` Paolo Bonzini
2010-09-15 15:50 ` Anthony Liguori
2010-09-15 19:31 ` Jes Sorensen
2010-09-16 7:19 ` Paolo Bonzini
2010-09-16 10:14 ` Jes Sorensen
2010-09-16 10:40 ` Avi Kivity
2010-09-16 10:42 ` Jes Sorensen
2010-09-16 10:46 ` Avi Kivity
2010-09-16 11:09 ` Paolo Bonzini
2010-09-15 12:23 ` [Qemu-devel] [PATCH 3/5] Add support for 'o' octet (bytes) format as monitor parameter Jes.Sorensen
2010-09-15 12:23 ` [Qemu-devel] [PATCH 4/5] Switch migrate_set_speed() to take an 'o' argument rather than a float Jes.Sorensen
2010-09-15 12:24 ` [Qemu-devel] [PATCH 5/5] Remove obsolete 'f' double parameter type Jes.Sorensen
-- strict thread matches above, loose matches on Subject: below --
2010-09-16 14:52 [Qemu-devel] [PATCH v2 0/5] Introduce strtobytes and make use of it Jes.Sorensen
2010-09-16 14:52 ` [Qemu-devel] [PATCH 1/5] Introduce strtobytes() library function to convert string to byte count Jes.Sorensen
2010-09-28 9:48 ` Markus Armbruster
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=795CDD0E-ED9C-4EC1-AE65-A563DC9A2240@web.de \
--to=andreas.faerber@web.de \
--cc=Jes.Sorensen@redhat.com \
--cc=armbru@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=quintela@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).