diff options
author | DJ Delorie <dj@delorie.com> | 2017-01-20 19:52:52 -0500 |
---|---|---|
committer | DJ Delorie <dj@delorie.com> | 2017-01-20 19:55:53 -0500 |
commit | f3bef6a748097d02d196df247f7b292c7b83744c (patch) | |
tree | fa997286ae0b251f99055bd35885781382239cb8 /elf/dl-tunables.c | |
parent | aee47c934e6b6256f58a3d75815a43fc33237a80 (diff) | |
download | glibc-f3bef6a748097d02d196df247f7b292c7b83744c.tar glibc-f3bef6a748097d02d196df247f7b292c7b83744c.tar.gz glibc-f3bef6a748097d02d196df247f7b292c7b83744c.tar.bz2 glibc-f3bef6a748097d02d196df247f7b292c7b83744c.zip |
* 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/dl-tunables.c')
-rw-r--r-- | elf/dl-tunables.c | 30 |
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: |