[LTP] [PATCH 1/2] Add tst_hexdump utility

Petr Vorel pvorel@suse.cz
Fri Jul 30 15:52:47 CEST 2021


Hi Martin,

Reviewed-by: Petr Vorel <pvorel@suse.cz>

Thanks! I suppose I'll merge it as is, but few notes below:

As you use only -d in this patchset I suppose you want to have
it as a general utility. It might be worth to mention that xxd by default wraps by
16 cols (-c 16), which we don't do:

$ echo "06a441375b431e06280e2d4e199ba650c14c47d9" | ./testcases/lib/tst_hexdump; echo
303661343431333735623433316530363238306532643465313939626136353063313463343764390a

$ echo "06a441375b431e06280e2d4e199ba650c14c47d9" | xxd -p
303661343431333735623433316530363238306532643465313939626136
353063313463343764390a

Other option would be just make -d as default and remove encode_hex() until is
really needed.

Kind regards,
Petr


> tst_hexdump implements conversion between binary and hexadecimal values in both
> directions for shell tests.

> Signed-off-by: Martin Doucha <mdoucha@suse.cz>
> ---
>  testcases/lib/Makefile      |  2 +-
>  testcases/lib/tst_hexdump.c | 55 +++++++++++++++++++++++++++++++++++++
>  2 files changed, 56 insertions(+), 1 deletion(-)
>  create mode 100644 testcases/lib/tst_hexdump.c

> diff --git a/testcases/lib/Makefile b/testcases/lib/Makefile
> index 98d9e4613..38813e640 100644
> --- a/testcases/lib/Makefile
> +++ b/testcases/lib/Makefile
> @@ -11,6 +11,6 @@ INSTALL_TARGETS		:= *.sh
>  MAKE_TARGETS		:= tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp\
>  			   tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars\
>  			   tst_getconf tst_supported_fs tst_check_drivers tst_get_unused_port\
> -			   tst_get_median
> +			   tst_get_median tst_hexdump

>  include $(top_srcdir)/include/mk/generic_leaf_target.mk
> diff --git a/testcases/lib/tst_hexdump.c b/testcases/lib/tst_hexdump.c
> new file mode 100644
> index 000000000..f83b8bfbf
> --- /dev/null
> +++ b/testcases/lib/tst_hexdump.c
> @@ -0,0 +1,55 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (c) 2021 SUSE LLC <mdoucha@suse.cz>
> + *
> + * Convert bytes from standard input to hexadecimal representation.
> + *
> + * Parameters:
> + * -d   Convert hexadecimal values from standard input to binary representation
> + *      instead.
This could be printed in -h parameter if really meant to be a general tool.
But understand you didn't bother.

Kind regards,
Petr

> + */
> +
> +#include <stdio.h>
> +#include <unistd.h>
> +
> +int decode_hex(void)
> +{
> +	int ret;
> +	unsigned int val;
> +
> +	while ((ret = scanf("%2x", &val)) == 1)
> +		putchar(val);
> +
> +	return ret != EOF || ferror(stdin);
> +}
> +
> +int encode_hex(void)
> +{
> +	int val;
> +
> +	for (val = getchar(); val >= 0 && val <= 0xff; val = getchar())
> +		printf("%02x", val);
> +
> +	return val != EOF || ferror(stdin);
> +}
> +
> +int main(int argc, char **argv)
> +{
> +	int ret, decode = 0;
> +
> +	while ((ret = getopt(argc, argv, "d"))) {
> +		if (ret < 0)
> +			break;
> +
> +		switch (ret) {
> +		case 'd':
> +			decode = 1;
> +			break;
> +		}
> +	}
> +
> +	if (decode)
> +		return decode_hex();
> +	else
> +		return encode_hex();
> +}


More information about the ltp mailing list