comparison target-utils/simagent/stringarg.c @ 776:fac3176de18d

simagent: bare Tx implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Fri, 12 Mar 2021 23:36:46 +0000
parents
children 0cffc53991f9
comparison
equal deleted inserted replaced
775:6ec781e61e68 776:fac3176de18d
1 /*
2 * This module contains the function that parses our hex string arguments.
3 */
4
5 #include <ctype.h>
6 #include "types.h"
7
8 static
9 decode_hex_digit(c)
10 {
11 if (isdigit(c))
12 return c - '0';
13 else if (islower(c))
14 return c - 'a' + 10;
15 else
16 return c - 'A' + 10;
17 }
18
19 decode_hex_string_arg(arg, buf, maxlen)
20 char *arg;
21 u8 *buf;
22 unsigned maxlen;
23 {
24 unsigned count;
25
26 for (count = 0; ; ) {
27 while (isspace(*arg))
28 arg++;
29 if (!*arg)
30 break;
31 if (!isxdigit(arg[0]) || !isxdigit(arg[1])) {
32 printf("ERROR: invalid hex string input\n");
33 return;
34 }
35 if (count >= maxlen) {
36 printf("ERROR: hex string input is too long\n");
37 return;
38 }
39 buf[count++] = (decode_hex_digit(arg[0]) << 4) |
40 decode_hex_digit(arg[1]);
41 }
42 return count;
43 }