From: Willy Tarreau Date: Mon, 2 Nov 2009 19:12:52 +0000 (+0100) Subject: [MINOR] tools: add hex2i() function to convert hex char to int X-Git-Tag: v1.4-dev5~76 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=da3b7c31f75ab80873278e766cc219257c52673c;p=thirdparty%2Fhaproxy.git [MINOR] tools: add hex2i() function to convert hex char to int --- diff --git a/include/common/standard.h b/include/common/standard.h index 544a5c3151..ce3c6b85b0 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 6a8724a86c..aab318bb36 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