From da3b7c31f75ab80873278e766cc219257c52673c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Mon, 2 Nov 2009 20:12:52 +0100 Subject: [PATCH] [MINOR] tools: add hex2i() function to convert hex char to int --- include/common/standard.h | 6 ++++++ src/standard.c | 15 +++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/include/common/standard.h b/include/common/standard.h index 544a5c315..ce3c6b85b 100644 --- a/include/common/standard.h +++ b/include/common/standard.h @@ -117,6 +117,12 @@ extern const char *limit_r(unsigned long n, char *buffer, int size, const char * */ extern int ishex(char s); +/* + * Return integer equivalent of character for a hex digit (0-9, a-f, A-F), + * otherwise -1. + */ +extern int hex2i(int c); + /* * Checks for invalid characters. Valid chars are [A-Za-z0-9_:.-]. If an * invalid character is found, a pointer to it is returned. If everything is diff --git a/src/standard.c b/src/standard.c index 6a8724a86..aab318bb3 100644 --- a/src/standard.c +++ b/src/standard.c @@ -158,6 +158,21 @@ int ishex(char s) return 0; } +/* + * Return integer equivalent of character for a hex digit (0-9, a-f, A-F), + * otherwise -1. This compact form helps gcc produce efficient code. + */ +int hex2i(int c) +{ + if ((unsigned char)(c -= '0') > 9) { + if ((unsigned char)(c -= 'A' - '0') > 5 && + (unsigned char)(c -= 'a' - 'A') > 5) + c = -11; + c += 10; + } + return c; +} + /* * Checks for invalid characters. Valid chars are [A-Za-z0-9_:.-]. If an * invalid character is found, a pointer to it is returned. If everything is -- 2.47.3