version 1.30, 2020/04/12 20:54:28 |
version 1.31, 2020/04/22 06:57:13 |
|
|
args_percentage(struct args *args, u_char ch, long long minval, |
args_percentage(struct args *args, u_char ch, long long minval, |
long long maxval, long long curval, char **cause) |
long long maxval, long long curval, char **cause) |
{ |
{ |
const char *errstr; |
const char *value; |
long long ll; |
|
struct args_entry *entry; |
struct args_entry *entry; |
struct args_value *value; |
|
size_t valuelen; |
|
char *copy; |
|
|
|
if ((entry = args_find(args, ch)) == NULL) { |
if ((entry = args_find(args, ch)) == NULL) { |
*cause = xstrdup("missing"); |
*cause = xstrdup("missing"); |
return (0); |
return (0); |
} |
} |
value = TAILQ_LAST(&entry->values, args_values); |
value = TAILQ_LAST(&entry->values, args_values)->value; |
valuelen = strlen(value->value); |
return (args_string_percentage(value, minval, maxval, curval, cause)); |
|
} |
|
|
if (value->value[valuelen - 1] == '%') { |
/* Convert a string to a number which may be a percentage. */ |
copy = xstrdup(value->value); |
long long |
|
args_string_percentage(const char *value, long long minval, long long maxval, |
|
long long curval, char **cause) |
|
{ |
|
const char *errstr; |
|
long long ll; |
|
size_t valuelen = strlen(value); |
|
char *copy; |
|
|
|
if (value[valuelen - 1] == '%') { |
|
copy = xstrdup(value); |
copy[valuelen - 1] = '\0'; |
copy[valuelen - 1] = '\0'; |
|
|
ll = strtonum(copy, 0, 100, &errstr); |
ll = strtonum(copy, 0, 100, &errstr); |
|
|
return (0); |
return (0); |
} |
} |
} else { |
} else { |
ll = strtonum(value->value, minval, maxval, &errstr); |
ll = strtonum(value, minval, maxval, &errstr); |
if (errstr != NULL) { |
if (errstr != NULL) { |
*cause = xstrdup(errstr); |
*cause = xstrdup(errstr); |
return (0); |
return (0); |