diff options
Diffstat (limited to 'tools/perf/util/string.c')
| -rw-r--r-- | tools/perf/util/string.c | 34 | 
1 files changed, 34 insertions, 0 deletions
diff --git a/tools/perf/util/string.c b/tools/perf/util/string.c new file mode 100644 index 000000000000..ec33c0c7f4e2 --- /dev/null +++ b/tools/perf/util/string.c @@ -0,0 +1,34 @@ +#include "string.h" + +static int hex(char ch) +{ +	if ((ch >= '0') && (ch <= '9')) +		return ch - '0'; +	if ((ch >= 'a') && (ch <= 'f')) +		return ch - 'a' + 10; +	if ((ch >= 'A') && (ch <= 'F')) +		return ch - 'A' + 10; +	return -1; +} + +/* + * While we find nice hex chars, build a long_val. + * Return number of chars processed. + */ +int hex2u64(const char *ptr, __u64 *long_val) +{ +	const char *p = ptr; +	*long_val = 0; + +	while (*p) { +		const int hex_val = hex(*p); + +		if (hex_val < 0) +			break; + +		*long_val = (*long_val << 4) | hex_val; +		p++; +	} + +	return p - ptr; +}  | 
