Message ID | 1310047993-7649-2-git-send-email-joerg.roedel@amd.com |
---|---|
State | New |
Headers | show |
Joerg Roedel <joerg.roedel@amd.com> writes: > This function does the same as the strtosz_suffix function > except that it allows to specify the unit to which the > k/M/B/T suffixes apply. This function will be used later to > parse the tsc-frequency from the command-line. > > Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> > --- > cutils.c | 16 +++++++++++----- > qemu-common.h | 2 ++ > 2 files changed, 13 insertions(+), 5 deletions(-) > > diff --git a/cutils.c b/cutils.c > index f9a7e36..28049e0 100644 > --- a/cutils.c > +++ b/cutils.c > @@ -322,7 +322,8 @@ int fcntl_setfl(int fd, int flag) > * value must be terminated by whitespace, ',' or '\0'. Return -1 on > * error. > */ > -int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) > +int64_t strtosz_suffix_unit(const char *nptr, char **end, > + const char default_suffix, int64_t unit) > { > int64_t retval = -1; > char *endptr; > @@ -362,20 +363,20 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) > } > break; > case STRTOSZ_DEFSUFFIX_KB: > - mul = 1 << 10; > + mul = unit; > break; > case 0: > if (mul_required) { > goto fail; > } > case STRTOSZ_DEFSUFFIX_MB: > - mul = 1ULL << 20; > + mul = unit * unit; > break; > case STRTOSZ_DEFSUFFIX_GB: > - mul = 1ULL << 30; > + mul = unit * unit * unit; > break; > case STRTOSZ_DEFSUFFIX_TB: > - mul = 1ULL << 40; > + mul = unit * unit * unit * unit; > break; > default: > goto fail; > @@ -405,6 +406,11 @@ fail: > return retval; > } Why would anyone ever call this function with an unit argument other than 1000 or 1024? Without such a use case, I'd rather give strtosz_suffix() a flag parameter to pick SI prefixes (multiples of 1000) vs. binary prefixes (multiples of 1024). [...]
diff --git a/cutils.c b/cutils.c index f9a7e36..28049e0 100644 --- a/cutils.c +++ b/cutils.c @@ -322,7 +322,8 @@ int fcntl_setfl(int fd, int flag) * value must be terminated by whitespace, ',' or '\0'. Return -1 on * error. */ -int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) +int64_t strtosz_suffix_unit(const char *nptr, char **end, + const char default_suffix, int64_t unit) { int64_t retval = -1; char *endptr; @@ -362,20 +363,20 @@ int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) } break; case STRTOSZ_DEFSUFFIX_KB: - mul = 1 << 10; + mul = unit; break; case 0: if (mul_required) { goto fail; } case STRTOSZ_DEFSUFFIX_MB: - mul = 1ULL << 20; + mul = unit * unit; break; case STRTOSZ_DEFSUFFIX_GB: - mul = 1ULL << 30; + mul = unit * unit * unit; break; case STRTOSZ_DEFSUFFIX_TB: - mul = 1ULL << 40; + mul = unit * unit * unit * unit; break; default: goto fail; @@ -405,6 +406,11 @@ fail: return retval; } +int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix) +{ + return strtosz_suffix_unit(nptr, end, default_suffix, 1024); +} + int64_t strtosz(const char *nptr, char **end) { return strtosz_suffix(nptr, end, STRTOSZ_DEFSUFFIX_MB); diff --git a/qemu-common.h b/qemu-common.h index 109498d..854031a 100644 --- a/qemu-common.h +++ b/qemu-common.h @@ -186,6 +186,8 @@ int fcntl_setfl(int fd, int flag); #define STRTOSZ_DEFSUFFIX_B 'B' int64_t strtosz(const char *nptr, char **end); int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix); +int64_t strtosz_suffix_unit(const char *nptr, char **end, + const char default_suffix, int64_t unit); /* path.c */ void init_paths(const char *prefix);
This function does the same as the strtosz_suffix function except that it allows to specify the unit to which the k/M/B/T suffixes apply. This function will be used later to parse the tsc-frequency from the command-line. Signed-off-by: Joerg Roedel <joerg.roedel@amd.com> --- cutils.c | 16 +++++++++++----- qemu-common.h | 2 ++ 2 files changed, 13 insertions(+), 5 deletions(-)