Commit b6e356aa authored by Kevin Wolf's avatar Kevin Wolf Committed by Stefan Hajnoczi
Browse files

qemu-io: Make cvtnum() a wrapper around strtosz_suffix()



No reason to implement the same thing multiple times. A nice side effect
is that fractional numbers like 0.5M can be used in qemu-io now.

Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Reviewed-by: default avatarEric Blake <eblake@redhat.com>
Signed-off-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
parent 5e00984a
Loading
Loading
Loading
Loading
+0 −37
Original line number Diff line number Diff line
@@ -344,43 +344,6 @@ doneline(
#define MEGABYTES(x)	((long long)(x) << 20)
#define KILOBYTES(x)	((long long)(x) << 10)

long long
cvtnum(
	char		*s)
{
	long long	i;
	char		*sp;
	int		c;

	i = strtoll(s, &sp, 0);
	if (i == 0 && sp == s)
		return -1LL;
	if (*sp == '\0')
		return i;

	if (sp[1] != '\0')
		return -1LL;

	c = qemu_tolower(*sp);
	switch (c) {
	default:
		return i;
	case 'k':
		return KILOBYTES(i);
	case 'm':
		return MEGABYTES(i);
	case 'g':
		return GIGABYTES(i);
	case 't':
		return TERABYTES(i);
	case 'p':
		return PETABYTES(i);
	case 'e':
		return  EXABYTES(i);
	}
	return -1LL;
}

#define TO_EXABYTES(x)	((x) / EXABYTES(1))
#define TO_PETABYTES(x)	((x) / PETABYTES(1))
#define TO_TERABYTES(x)	((x) / TERABYTES(1))
+0 −1
Original line number Diff line number Diff line
@@ -58,7 +58,6 @@ char **breakline(char *input, int *count);
void doneline(char *input, char **vec);
char *fetchline(void);

long long cvtnum(char *s);
void cvtstr(double value, char *str, size_t sz);

struct timeval tsub(struct timeval t1, struct timeval t2);
+6 −0
Original line number Diff line number Diff line
@@ -29,6 +29,12 @@ static BlockDriverState *bs;

static int misalign;

static int64_t cvtnum(const char *s)
{
    char *end;
    return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B);
}

/*
 * Parse the pattern argument to various sub-commands.
 *