coreboot
coreboot is an Open Source project aimed at replacing the proprietary BIOS found in most computers.
hexstrtobin.c
Go to the documentation of this file.
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 }
static int tolower(int c)
Definition: ctype.h:49
static int isdigit(int c)
Definition: ctype.h:20
static int isxdigit(int c)
Definition: ctype.h:25
size_t hexstrtobin(const char *str, uint8_t *buf, size_t len)
Definition: hexstrtobin.c:6
static uint8_t * buf
Definition: uart.c:7
unsigned char uint8_t
Definition: stdint.h:8
#define c(value, pmcreg, dst_bits)
#define count