Modified parse_int_arg to better handle too-large and too-small associativities.

This commit is contained in:
Jacob 2016-04-29 17:17:52 -04:00
parent f018d83848
commit df84d11ffb
1 changed files with 13 additions and 2 deletions

15
csim.c
View File

@ -208,14 +208,25 @@ long parse_int_arg(char* arg, char opt)
char* end;
long i = strtol(arg, &end, 0);
if (*end != '\0' || (!i && opt=='E')) { // associativity can not be zero
if (*end != '\0') { // associativity can not be zero
printf("Invalid argument \"%s\" for option -%c\n", arg, opt);
bad_usage_error();
}
else if (i < 0) {
printf("Argument %ld for option %c too small (must be greater than 0)", i, opt);
printf("Argument %s for option -%c too small (must be greater than 0)", arg, opt);
exit(1);
}
else if (opt == 'E') {
long long_max = (~0UL)>>1;
if (i==0) {
printf("Argument for option -E can not be 0\n");
exit(1);
}
else if (i == long_max) {
printf("Argument %s for option -E too large (must be less than %ld)\n", arg, long_max);
exit(1);
}
}
return i;
}