xref: /linux-6.15/tools/perf/util/string.c (revision f60d24d2)
1 #include <string.h>
2 #include "string.h"
3 
4 static int hex(char ch)
5 {
6 	if ((ch >= '0') && (ch <= '9'))
7 		return ch - '0';
8 	if ((ch >= 'a') && (ch <= 'f'))
9 		return ch - 'a' + 10;
10 	if ((ch >= 'A') && (ch <= 'F'))
11 		return ch - 'A' + 10;
12 	return -1;
13 }
14 
15 /*
16  * While we find nice hex chars, build a long_val.
17  * Return number of chars processed.
18  */
19 int hex2u64(const char *ptr, u64 *long_val)
20 {
21 	const char *p = ptr;
22 	*long_val = 0;
23 
24 	while (*p) {
25 		const int hex_val = hex(*p);
26 
27 		if (hex_val < 0)
28 			break;
29 
30 		*long_val = (*long_val << 4) | hex_val;
31 		p++;
32 	}
33 
34 	return p - ptr;
35 }
36 
37 char *strxfrchar(char *s, char from, char to)
38 {
39 	char *p = s;
40 
41 	while ((p = strchr(p, from)) != NULL)
42 		*p++ = to;
43 
44 	return s;
45 }
46