static unsigned long long get_mult_bytes(char c, void *data) { unsigned int kb_base = fio_get_kb_base(data); unsigned long long ret = 1; switch (c) { default: break; case 'p': case 'P': ret *= (unsigned long long) kb_base; case 't': case 'T': ret *= (unsigned long long) kb_base; case 'g': case 'G': ret *= (unsigned long long) kb_base; case 'm': case 'M': ret *= (unsigned long long) kb_base; case 'k': case 'K': ret *= (unsigned long long) kb_base; break; } return ret; }
static unsigned long long __get_mult_bytes(const char *p, void *data, int *percent) { unsigned int kb_base = fio_get_kb_base(data); unsigned long long ret = 1; unsigned int i, pow = 0, mult = kb_base; char *c; if (!p) return 1; c = strdup(p); for (i = 0; i < strlen(c); i++) { c[i] = tolower(c[i]); if (is_separator(c[i])) { c[i] = '\0'; break; } } if (!strncmp("pib", c, 3)) { pow = 5; mult = 1000; } else if (!strncmp("tib", c, 3)) { pow = 4; mult = 1000; } else if (!strncmp("gib", c, 3)) { pow = 3; mult = 1000; } else if (!strncmp("mib", c, 3)) { pow = 2; mult = 1000; } else if (!strncmp("kib", c, 3)) { pow = 1; mult = 1000; } else if (!strncmp("p", c, 1) || !strncmp("pb", c, 2)) pow = 5; else if (!strncmp("t", c, 1) || !strncmp("tb", c, 2)) pow = 4; else if (!strncmp("g", c, 1) || !strncmp("gb", c, 2)) pow = 3; else if (!strncmp("m", c, 1) || !strncmp("mb", c, 2)) pow = 2; else if (!strncmp("k", c, 1) || !strncmp("kb", c, 2)) pow = 1; else if (!strncmp("%", c, 1)) { *percent = 1; free(c); return ret; } while (pow--) ret *= (unsigned long long) mult; free(c); return ret; }