split: dont use table lookup for size
Signed-off-by: Hiltjo Posthuma <hiltjo@codemadness.org>
This commit is contained in:
parent
f7403ce6c6
commit
bd9a81951f
19
split.c
19
split.c
@ -22,15 +22,10 @@ main(int argc, char **argv)
|
|||||||
char *prefix = "x";
|
char *prefix = "x";
|
||||||
char *file = NULL;
|
char *file = NULL;
|
||||||
char *tmp, *end;
|
char *tmp, *end;
|
||||||
uint64_t sizes['M'+1];
|
|
||||||
uint64_t size = 1000, scale, n;
|
uint64_t size = 1000, scale, n;
|
||||||
int always = 0;
|
int always = 0;
|
||||||
FILE *in=stdin, *out=NULL;
|
FILE *in=stdin, *out=NULL;
|
||||||
|
|
||||||
sizes['K'] = 1024;
|
|
||||||
sizes['M'] = 1024L*1024L;
|
|
||||||
sizes['G'] = 1024L*1024L*1024L;
|
|
||||||
|
|
||||||
ARGBEGIN {
|
ARGBEGIN {
|
||||||
case 'b':
|
case 'b':
|
||||||
always = 1;
|
always = 1;
|
||||||
@ -41,9 +36,19 @@ main(int argc, char **argv)
|
|||||||
size = strtoull(tmp, &end, 10);
|
size = strtoull(tmp, &end, 10);
|
||||||
if(*end == '\0')
|
if(*end == '\0')
|
||||||
break;
|
break;
|
||||||
if(strchr("KMG", toupper(*end)) == NULL || end[1] != '\0')
|
switch(toupper(*end)) {
|
||||||
|
case 'K':
|
||||||
|
scale = 1024;
|
||||||
|
break;
|
||||||
|
case 'M':
|
||||||
|
scale = 1024L * 1024L;
|
||||||
|
break;
|
||||||
|
case 'G':
|
||||||
|
scale = 1024L * 1024L * 1024L;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
usage();
|
usage();
|
||||||
scale = sizes[toupper(*end)];
|
}
|
||||||
if(size > (UINT64_MAX/scale))
|
if(size > (UINT64_MAX/scale))
|
||||||
eprintf("'%s': out of range\n", tmp);
|
eprintf("'%s': out of range\n", tmp);
|
||||||
size *= scale;
|
size *= scale;
|
||||||
|
Loading…
Reference in New Issue
Block a user