Commit | Line | Data |
---|---|---|
ea5cc87c ACM |
1 | #include "string.h" |
2 | ||
3 | static int hex(char ch) | |
4 | { | |
5 | if ((ch >= '0') && (ch <= '9')) | |
6 | return ch - '0'; | |
7 | if ((ch >= 'a') && (ch <= 'f')) | |
8 | return ch - 'a' + 10; | |
9 | if ((ch >= 'A') && (ch <= 'F')) | |
10 | return ch - 'A' + 10; | |
11 | return -1; | |
12 | } | |
13 | ||
14 | /* | |
15 | * While we find nice hex chars, build a long_val. | |
16 | * Return number of chars processed. | |
17 | */ | |
18 | int hex2u64(const char *ptr, __u64 *long_val) | |
19 | { | |
20 | const char *p = ptr; | |
21 | *long_val = 0; | |
22 | ||
23 | while (*p) { | |
24 | const int hex_val = hex(*p); | |
25 | ||
26 | if (hex_val < 0) | |
27 | break; | |
28 | ||
29 | *long_val = (*long_val << 4) | hex_val; | |
30 | p++; | |
31 | } | |
32 | ||
33 | return p - ptr; | |
34 | } |