--- libelwix/example/test_tlv.c 2022/01/24 16:01:49 1.1.2.1 +++ libelwix/example/test_tlv.c 2022/01/24 17:07:24 1.1.2.2 @@ -1,26 +1,73 @@ #include #include #include +#include +#include #include +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; - register int i; + u_char buf[BUFSIZ]; + int f, len, ret = 0; arr = ait_array2vars((const char**) argv, 42); if (!arr) return 1; - for (i = 0; i < array_Size(arr); i++) { - if (AIT_TYPE(array(arr, i, ait_val_t*)) == string) - printf("arr[%d]=%s\n", i, AIT_ADDR(array(arr, i, ait_val_t*))); - else - printf("arr[%d]#%ld\n", i, AIT_RAW(array(arr, i, ait_val_t*))); + 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); - return 0; + + 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; }