blob: 58dea8e349222af7ac787f73785d934ce7724948 [file] [log] [blame]
Patrick Georgi593124d2020-05-10 19:44:08 +02001/* SPDX-License-Identifier: GPL-2.0-only */
Duncan Laurieb9552842016-05-09 10:58:03 -07002
Joel Kitching393c71c2019-06-16 16:09:42 +08003#include <ctype.h>
Duncan Laurieb9552842016-05-09 10:58:03 -07004#include <lib.h>
Duncan Laurieb9552842016-05-09 10:58:03 -07005
6size_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}