File:  [ELWIX - Embedded LightWeight unIX -] / libelwix / example / test_tlv.c
Revision 1.1.2.2: download - view: text, annotated - select for diffs - revision graph
Mon Jan 24 17:07:24 2022 UTC (2 years, 3 months ago) by misho
Branches: elwix5_1
finish TLV serializing engine with UT

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
#include <elwix.h>


static void
display(array_t *arr)
{
	register int i;

	for (i = 0; i < array_Size(arr); i++) {
		if (AIT_TYPE(array(arr, i, ait_val_t*)) == string)
			printf("arr[%d]=%s (%d)\n", i, AIT_ADDR(array(arr, i, ait_val_t*)), 
					AIT_LEN(array(arr, i, ait_val_t*)));
		else
			printf("arr[%d]#%ld (%d)\n", i, AIT_RAW(array(arr, i, ait_val_t*)), 
					AIT_LEN(array(arr, i, ait_val_t*)));
	}
}

int
main(int argc, char **argv)
{
	array_t *arr;
	u_char buf[BUFSIZ];
	int f, len, ret = 0;

	arr = ait_array2vars((const char**) argv, 42);
	if (!arr)
		return 1;

	display(arr);

	printf("\nNeeded buffer size = %d\n", ait_vars2tlv(NULL, 0, arr));
	printf("Serialized data to buffer = %d\n", (len = ait_vars2tlv(buf, sizeof buf, arr)));

	f = open("test_tlv.bin", O_CREAT | O_WRONLY, 0644);
	if (f == -1) {
		ret = 2;
		goto err;
	}
	if ((len = write(f, buf, len)) == -1) {
		ret = 3;
		goto err;
	} else
		printf("Wrote %d bytes to file test_tlv.bin\n", len);

	ait_freeVars(&arr);

	arr = ait_tlv2vars(buf, len);
	if (!arr) {
		ret = 4;
		goto err;
	}
	printf("\n>>> Built vars array from TLV buffer\n\n");
	display(arr);

	arr = ait_tlv2vars(buf, sizeof buf);
	if (!arr) {
		ret = 5;
		goto err;
	}
	printf("\n>>> Built vars array from TLV buffer with zeros at the end\n\n");
	display(arr);
err:
	if (f > 2)
		close(f);
	ait_freeVars(&arr);
	return ret;
}

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>