Message ID | 516FFA02.3020405@codesourcery.com |
---|---|
State | New |
Headers | show |
On Thu, 18 Apr 2013, Chung-Lin Tang wrote: > 2013-04-18 Chung-Lin Tang <cltang@codesourcery.com> > > * opts-common.c (integral_argument): Add support for hexadecimal > command option integer arguments. Update comments. You should propose this sort of non-Nios II-specific change in a separate thread with its own rationale for the change. > + /* It wasn't a decimal number - try hexadecimal. */ > + if (arg[0]=='0' && (arg[1]=='x' || arg[1]=='X')) Spacing around "==". I think you do need to check all the characters here as is done for decimal arguments (but using ISXDIGIT), in order to ensure that no locale-specific form is accepted by strtol.
Index: gcc/opts-common.c =================================================================== --- gcc/opts-common.c (revision 407083) +++ gcc/opts-common.c (revision 409063) @@ -147,7 +147,7 @@ return match_wrong_lang; } -/* If ARG is a non-negative integer made up solely of digits, return its +/* If ARG is a non-negative decimal or hexadecimal integer, return its value, otherwise return -1. */ int @@ -161,6 +161,15 @@ if (*p == '\0') return atoi (arg); + /* It wasn't a decimal number - try hexadecimal. */ + if (arg[0]=='0' && (arg[1]=='x' || arg[1]=='X')) + { + char *endp; + int val = strtol (arg, &endp, 16); + if (*endp == '\0') + return val; + } + return -1; }