view target-utils/simagent/stringarg.c @ 990:f34261bb3355

pln-ppb-test: implement PPB erase
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 03 Dec 2023 00:20:14 +0000
parents 0cffc53991f9
children
line wrap: on
line source

/*
 * This module contains the function that parses our hex string arguments.
 */

#include <ctype.h>
#include "types.h"

static
decode_hex_digit(c)
{
	if (isdigit(c))
		return c - '0';
	else if (islower(c))
		return c - 'a' + 10;
	else
		return c - 'A' + 10;
}

decode_hex_string_arg(arg, buf, maxlen)
	char *arg;
	u8 *buf;
	unsigned maxlen;
{
	unsigned count;

	for (count = 0; ; ) {
		while (isspace(*arg))
			arg++;
		if (!*arg)
			break;
		if (!isxdigit(arg[0]) || !isxdigit(arg[1])) {
			printf("ERROR: invalid hex string input\n");
			return(-1);
		}
		if (count >= maxlen) {
			printf("ERROR: hex string input is too long\n");
			return(-1);
		}
		buf[count++] = (decode_hex_digit(arg[0]) << 4) |
				decode_hex_digit(arg[1]);
		arg += 2;
	}
	return count;
}