| /* 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; | |
| } |