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

Kamal: add call to tolower(), since "0B11" is also a valid syntax.

Reported-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Christopher Li <sparse@chrisli.org>
diff --git a/expression.c b/expression.c
index d9cdfd3..0ae3a60 100644
--- a/expression.c
+++ b/expression.c
@@ -268,6 +268,13 @@
 #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 @@
 	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)