/ src / lib / hexstrtobin.c
hexstrtobin.c
 1  /* SPDX-License-Identifier: GPL-2.0-only */
 2  
 3  #include <ctype.h>
 4  #include <lib.h>
 5  
 6  size_t hexstrtobin(const char *str, uint8_t *buf, size_t len)
 7  {
 8  	size_t count, ptr = 0;
 9  	uint8_t byte;
10  
11  	for (byte = count = 0; str && *str; str++) {
12  		uint8_t c = *str;
13  
14  		if (!isxdigit(c))
15  			continue;
16  		if (isdigit(c))
17  			c -= '0';
18  		else
19  			c = tolower(c) - 'a' + 10;
20  
21  		byte <<= 4;
22  		byte |= c;
23  
24  		if (++count > 1) {
25  			if (ptr >= len)
26  				return ptr;
27  			buf[ptr++] = byte;
28  			byte = count = 0;
29  		}
30  	}
31  
32  	return ptr;
33  }