A small change to your patch, Dan: I added a call to tolower(), since "0B11" is also a valid syntax. -Kamal --------------------------------------------------------------------------- From a9273391fe5f410321a0668e18beaebce086e23d Mon Sep 17 00:00:00 2001 From: Kamal Mostafa <kamal@xxxxxxxxxxxxx> Date: Thu, 8 Sep 2011 10:34:27 -0700 Subject: [PATCH] recognize binary constants Sparse doesn't parse binary constants properly so the following code generates an error: x = 0b11; test.c:5:17: error: constant 0b11 is not a valid number Reported-by: Kamal Mostafa <kamal@xxxxxxxxxxxxx> Signed-off-by: Dan Carpenter <error27@xxxxxxxxx> Signed-off-by: Kamal Mostafa <kamal@xxxxxxxxxxxxx> --- expression.c | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletions(-) diff --git a/expression.c b/expression.c index 7e06e60..07d6846 100644 --- a/expression.c +++ b/expression.c @@ -268,6 +268,13 @@ static struct token *string_expression(struct token *token, struct expression *e #define ULLONG_MAX (~0ULL) #endif +static unsigned long long parse_num(const char *nptr, char **end) +{ + if (nptr[0] == '0' && tolower(nptr[1]) == 'b') + return strtoull(&nptr[2], end, 2); + return strtoull(nptr, end, 0); +} + static void get_number_value(struct expression *expr, struct token *token) { const char *str = token->number; @@ -279,7 +286,7 @@ static void get_number_value(struct expression *expr, struct token *token) int bits; errno = 0; - value = strtoull(str, &end, 0); + value = parse_num(str, &end); if (end == str) goto Float; if (value == ULLONG_MAX && errno == ERANGE) -- 1.7.4.1
Attachment:
signature.asc
Description: This is a digitally signed message part