Revision b6e356aa
b/cmd.c | ||
---|---|---|
344 | 344 |
#define MEGABYTES(x) ((long long)(x) << 20) |
345 | 345 |
#define KILOBYTES(x) ((long long)(x) << 10) |
346 | 346 |
|
347 |
long long |
|
348 |
cvtnum( |
|
349 |
char *s) |
|
350 |
{ |
|
351 |
long long i; |
|
352 |
char *sp; |
|
353 |
int c; |
|
354 |
|
|
355 |
i = strtoll(s, &sp, 0); |
|
356 |
if (i == 0 && sp == s) |
|
357 |
return -1LL; |
|
358 |
if (*sp == '\0') |
|
359 |
return i; |
|
360 |
|
|
361 |
if (sp[1] != '\0') |
|
362 |
return -1LL; |
|
363 |
|
|
364 |
c = qemu_tolower(*sp); |
|
365 |
switch (c) { |
|
366 |
default: |
|
367 |
return i; |
|
368 |
case 'k': |
|
369 |
return KILOBYTES(i); |
|
370 |
case 'm': |
|
371 |
return MEGABYTES(i); |
|
372 |
case 'g': |
|
373 |
return GIGABYTES(i); |
|
374 |
case 't': |
|
375 |
return TERABYTES(i); |
|
376 |
case 'p': |
|
377 |
return PETABYTES(i); |
|
378 |
case 'e': |
|
379 |
return EXABYTES(i); |
|
380 |
} |
|
381 |
return -1LL; |
|
382 |
} |
|
383 |
|
|
384 | 347 |
#define TO_EXABYTES(x) ((x) / EXABYTES(1)) |
385 | 348 |
#define TO_PETABYTES(x) ((x) / PETABYTES(1)) |
386 | 349 |
#define TO_TERABYTES(x) ((x) / TERABYTES(1)) |
b/cmd.h | ||
---|---|---|
58 | 58 |
void doneline(char *input, char **vec); |
59 | 59 |
char *fetchline(void); |
60 | 60 |
|
61 |
long long cvtnum(char *s); |
|
62 | 61 |
void cvtstr(double value, char *str, size_t sz); |
63 | 62 |
|
64 | 63 |
struct timeval tsub(struct timeval t1, struct timeval t2); |
b/qemu-io.c | ||
---|---|---|
29 | 29 |
|
30 | 30 |
static int misalign; |
31 | 31 |
|
32 |
static int64_t cvtnum(const char *s) |
|
33 |
{ |
|
34 |
char *end; |
|
35 |
return strtosz_suffix(s, &end, STRTOSZ_DEFSUFFIX_B); |
|
36 |
} |
|
37 |
|
|
32 | 38 |
/* |
33 | 39 |
* Parse the pattern argument to various sub-commands. |
34 | 40 |
* |
Also available in: Unified diff