Instead of using "long" for kconfig "hex" and "range" values, which may change in size depending on the host architecture, use "long long". This will allow values greater than INT_MAX on 32-bit hosts when cross compiling.
Unified · Split
| @@ -136,7 +136,7 @@ static struct property *sym_get_range_prop(struct symbol *sym) · 135 unmodified lines | ||
| 136 | 136 | return NULL; |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | −static long sym_get_range_val(struct symbol *sym, int base) | |
| 139 | +static long long sym_get_range_val(struct symbol *sym, int base) | |
| 140 | 140 | { |
| 141 | 141 | sym_calc_value(sym); |
| 142 | 142 | switch (sym->type) { |
| @@ -149,13 +149,14 @@ static long sym_get_range_val(struct symbol *sym, int base) · 6 unmodified lines | ||
| 149 | 149 | default: |
| 150 | 150 | break; |
| 151 | 151 | } |
| 152 | − return strtol(sym->curr.val, NULL, base); | |
| 152 | + return strtoll(sym->curr.val, NULL, base); | |
| 153 | 153 | } |
| 154 | 154 | |
| 155 | 155 | static void sym_validate_range(struct symbol *sym) |
| 156 | 156 | { |
| 157 | 157 | struct property *prop; |
| 158 | − long base, val, val2; | |
| 158 | + int base; | |
| 159 | + long long val, val2; | |
| 159 | 160 | char str[64]; |
| 160 | 161 | |
| 161 | 162 | switch (sym->type) { |
| @@ -171,7 +172,7 @@ static void sym_validate_range(struct symbol *sym) · 9 unmodified lines | ||
| 171 | 172 | prop = sym_get_range_prop(sym); |
| 172 | 173 | if (!prop) |
| 173 | 174 | return; |
| 174 | − val = strtol(sym->curr.val, NULL, base); | |
| 175 | + val = strtoll(sym->curr.val, NULL, base); | |
| 175 | 176 | val2 = sym_get_range_val(prop->expr->left.sym, base); |
| 176 | 177 | if (val >= val2) { |
| 177 | 178 | val2 = sym_get_range_val(prop->expr->right.sym, base); |
| @@ -179,9 +180,9 @@ static void sym_validate_range(struct symbol *sym) · 1 unmodified line | ||
| 179 | 180 | return; |
| 180 | 181 | } |
| 181 | 182 | if (sym->type == S_INT) |
| 182 | − sprintf(str, "%ld", val2); | |
| 183 | + sprintf(str, "%lld", val2); | |
| 183 | 184 | else |
| 184 | − sprintf(str, "0x%lx", val2); | |
| 185 | + sprintf(str, "0x%llx", val2); | |
| 185 | 186 | sym->curr.val = strdup(str); |
| 186 | 187 | } |
| 187 | 188 | |
| @@ -594,7 +595,7 @@ bool sym_string_valid(struct symbol *sym, const char *str) · 406 unmodified lines | ||
| 594 | 595 | bool sym_string_within_range(struct symbol *sym, const char *str) |
| 595 | 596 | { |
| 596 | 597 | struct property *prop; |
| 597 | − long val; | |
| 598 | + long long val; | |
| 598 | 599 | |
| 599 | 600 | switch (sym->type) { |
| 600 | 601 | case S_STRING: |
| @@ -605,7 +606,7 @@ bool sym_string_within_range(struct symbol *sym, const char *str) · 4 unmodified lines | ||
| 605 | 606 | prop = sym_get_range_prop(sym); |
| 606 | 607 | if (!prop) |
| 607 | 608 | return true; |
| 608 | − val = strtol(str, NULL, 10); | |
| 609 | + val = strtoll(str, NULL, 10); | |
| 609 | 610 | return val >= sym_get_range_val(prop->expr->left.sym, 10) && |
| 610 | 611 | val <= sym_get_range_val(prop->expr->right.sym, 10); |
| 611 | 612 | case S_HEX: |
| @@ -614,7 +615,7 @@ bool sym_string_within_range(struct symbol *sym, const char *str) · 2 unmodified lines | ||
| 614 | 615 | prop = sym_get_range_prop(sym); |
| 615 | 616 | if (!prop) |
| 616 | 617 | return true; |
| 617 | − val = strtol(str, NULL, 16); | |
| 618 | + val = strtoll(str, NULL, 16); | |
| 618 | 619 | return val >= sym_get_range_val(prop->expr->left.sym, 16) && |
| 619 | 620 | val <= sym_get_range_val(prop->expr->right.sym, 16); |
| 620 | 621 | case S_BOOLEAN: |