Introduce strtosz_suffix()

This introduces strtosz_suffix() which allows the caller to specify a
default suffix in case the non default of MB is wanted.

strtosz() is kept as a wrapper for strtosz_suffix() which keeps it's
current default of MB.

Signed-off-by: Jes Sorensen <Jes.Sorensen@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
master
Jes Sorensen 2010-12-09 14:17:24 +01:00 committed by Kevin Wolf
parent df2dbb4a50
commit d8427002dc
2 changed files with 21 additions and 3 deletions

View File

@ -291,10 +291,10 @@ int fcntl_setfl(int fd, int flag)
* value must be terminated by whitespace, ',' or '\0'. Return -1 on * value must be terminated by whitespace, ',' or '\0'. Return -1 on
* error. * error.
*/ */
ssize_t strtosz(const char *nptr, char **end) ssize_t strtosz_suffix(const char *nptr, char **end, const char default_suffix)
{ {
ssize_t retval = -1; ssize_t retval = -1;
char *endptr, c; char *endptr, c, d;
int mul_required = 0; int mul_required = 0;
double val, mul, integral, fraction; double val, mul, integral, fraction;
@ -313,10 +313,16 @@ ssize_t strtosz(const char *nptr, char **end)
* part of a multi token argument. * part of a multi token argument.
*/ */
c = *endptr; c = *endptr;
d = c;
if (isspace(c) || c == '\0' || c == ',') { if (isspace(c) || c == '\0' || c == ',') {
c = 0; c = 0;
if (default_suffix) {
d = default_suffix;
} else {
d = c;
}
} }
switch (c) { switch (d) {
case 'B': case 'B':
case 'b': case 'b':
mul = 1; mul = 1;
@ -371,3 +377,8 @@ fail:
return retval; return retval;
} }
ssize_t strtosz(const char *nptr, char **end)
{
return strtosz_suffix(nptr, end, STRTOSZ_DEFSUFFIX_MB);
}

View File

@ -149,7 +149,14 @@ time_t mktimegm(struct tm *tm);
int qemu_fls(int i); int qemu_fls(int i);
int qemu_fdatasync(int fd); int qemu_fdatasync(int fd);
int fcntl_setfl(int fd, int flag); int fcntl_setfl(int fd, int flag);
#define STRTOSZ_DEFSUFFIX_TB 'T'
#define STRTOSZ_DEFSUFFIX_GB 'G'
#define STRTOSZ_DEFSUFFIX_MB 'M'
#define STRTOSZ_DEFSUFFIX_KB 'K'
#define STRTOSZ_DEFSUFFIX_B 'B'
ssize_t strtosz(const char *nptr, char **end); ssize_t strtosz(const char *nptr, char **end);
ssize_t strtosz_suffix(const char *nptr, char **end, const char default_suffix);
/* path.c */ /* path.c */
void init_paths(const char *prefix); void init_paths(const char *prefix);