summaryrefslogtreecommitdiff
path: root/elf
diff options
context:
space:
mode:
authorDJ Delorie <dj@delorie.com>2017-01-20 19:52:52 -0500
committerDJ Delorie <dj@delorie.com>2017-01-20 19:55:53 -0500
commitf3bef6a748097d02d196df247f7b292c7b83744c (patch)
treefa997286ae0b251f99055bd35885781382239cb8 /elf
parentaee47c934e6b6256f58a3d75815a43fc33237a80 (diff)
* elf/dl-tunables.c (tunable_set_val_if_valid_range): Split into ...
(tunable_set_val_if_valid_range_signed) ... this, and ... (tunable_set_val_if_valid_range_unsigned) ... this. (tunable_initialize): Call the correct one of the above based on type.
Diffstat (limited to 'elf')
-rw-r--r--elf/dl-tunables.c30
1 files changed, 26 insertions, 4 deletions
diff --git a/elf/dl-tunables.c b/elf/dl-tunables.c
index ba5246a099..cbf4c8e8f2 100644
--- a/elf/dl-tunables.c
+++ b/elf/dl-tunables.c
@@ -172,10 +172,10 @@ tunables_strtoul (const char *nptr)
explicit constraints of the tunable or with the implicit constraints of its
type. */
static void
-tunable_set_val_if_valid_range (tunable_t *cur, const char *strval,
+tunable_set_val_if_valid_range_signed (tunable_t *cur, const char *strval,
int64_t default_min, int64_t default_max)
{
- int64_t val = tunables_strtoul (strval);
+ int64_t val = (int64_t) tunables_strtoul (strval);
int64_t min = cur->type.min;
int64_t max = cur->type.max;
@@ -193,6 +193,28 @@ tunable_set_val_if_valid_range (tunable_t *cur, const char *strval,
}
}
+static void
+tunable_set_val_if_valid_range_unsigned (tunable_t *cur, const char *strval,
+ uint64_t default_min, uint64_t default_max)
+{
+ uint64_t val = (uint64_t) tunables_strtoul (strval);
+
+ uint64_t min = cur->type.min;
+ uint64_t max = cur->type.max;
+
+ if (min == max)
+ {
+ min = default_min;
+ max = default_max;
+ }
+
+ if (val >= min && val <= max)
+ {
+ cur->val.numval = val;
+ cur->strval = strval;
+ }
+}
+
/* Validate range of the input value and initialize the tunable CUR if it looks
good. */
static void
@@ -202,12 +224,12 @@ tunable_initialize (tunable_t *cur, const char *strval)
{
case TUNABLE_TYPE_INT_32:
{
- tunable_set_val_if_valid_range (cur, strval, INT32_MIN, INT32_MAX);
+ tunable_set_val_if_valid_range_signed (cur, strval, INT32_MIN, INT32_MAX);
break;
}
case TUNABLE_TYPE_SIZE_T:
{
- tunable_set_val_if_valid_range (cur, strval, 0, SIZE_MAX);
+ tunable_set_val_if_valid_range_unsigned (cur, strval, 0, SIZE_MAX);
break;
}
case TUNABLE_TYPE_STRING: