/* SPDX-License-Identifier: GPL-2.0-only */ #include <ctype.h> #include <lib.h> size_t hexstrtobin(const char *str, uint8_t *buf, size_t len) { size_t count, ptr = 0; uint8_t byte; for (byte = count = 0; str && *str; str++) { uint8_t c = *str; if (!isxdigit(c)) continue; if (isdigit(c)) c -= '0'; else c = tolower(c) - 'a' + 10; byte <<= 4; byte |= c; if (++count > 1) { if (ptr >= len) return ptr; buf[ptr++] = byte; byte = count = 0; } } return ptr; }