--- libelwix/example/test_tlv.c 2022/01/24 17:08:21 1.2 +++ libelwix/example/test_tlv.c 2022/02/01 20:46:57 1.4 @@ -13,11 +13,21 @@ display(array_t *arr) 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*))); + printf("arr[%d]=%s (%d) type=%d\n", i, AIT_ADDR(array(arr, i, ait_val_t*)), + AIT_LEN(array(arr, i, ait_val_t*)), + AIT_TYPE(array(arr, i, ait_val_t*))); + else if (AIT_TYPE(array(arr, i, ait_val_t*)) == f32) + printf("arr[%d]#%f (%d) type=%d\n", i, AIT_GET_F32(array(arr, i, ait_val_t*)), + AIT_LEN(array(arr, i, ait_val_t*)), + AIT_TYPE(array(arr, i, ait_val_t*))); + else if (AIT_TYPE(array(arr, i, ait_val_t*)) == f64) + printf("arr[%d]#%lf (%d) type=%d\n", i, AIT_GET_F64(array(arr, i, ait_val_t*)), + AIT_LEN(array(arr, i, ait_val_t*)), + AIT_TYPE(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*))); + printf("arr[%d]#%ld (%d) type=%d\n", i, AIT_RAW(array(arr, i, ait_val_t*)), + AIT_LEN(array(arr, i, ait_val_t*)), + AIT_TYPE(array(arr, i, ait_val_t*))); } } @@ -25,8 +35,10 @@ int main(int argc, char **argv) { array_t *arr; - u_char buf[BUFSIZ]; - int f, len, ret = 0; + u_char buf[BUFSIZ], buf2[BUFSIZ]; + int f, f2, len, len2, ret = 0; + ait_val_t *v; + off_t nt; arr = ait_array2vars((const char**) argv, 42); if (!arr) @@ -36,6 +48,7 @@ main(int argc, char **argv) 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))); + printf("Serialized var to buffer = %d\n", (len2 = ait_var2tlv(buf2, sizeof buf2, array(arr, 0, ait_val_t*)))); f = open("test_tlv.bin", O_CREAT | O_WRONLY, 0644); if (f == -1) { @@ -48,6 +61,17 @@ main(int argc, char **argv) } else printf("Wrote %d bytes to file test_tlv.bin\n", len); + f2 = open("test_var_tlv.bin", O_CREAT | O_WRONLY, 0644); + if (f2 == -1) { + ret = 2; + goto err; + } + if ((len2 = write(f2, buf2, len2)) == -1) { + ret = 3; + goto err; + } else + printf("Wrote %d bytes to file test_var_tlv.bin\n", len2); + ait_freeVars(&arr); arr = ait_tlv2vars(buf, len); @@ -65,7 +89,26 @@ main(int argc, char **argv) } printf("\n>>> Built vars array from TLV buffer with zeros at the end\n\n"); display(arr); + + v = ait_tlv2var(buf, sizeof buf, &nt); + if (!v) { + ret = 6; + goto err; + } + printf("\nV=%s (%d) type=%d next=%ld\n", AIT_ADDR(v), AIT_LEN(v), AIT_TYPE(v), nt); + ait_freeVar(&v); + + v = ait_tlv2var(buf + nt, sizeof buf - nt, NULL); + if (!v) { + ret = 7; + goto err; + } + printf("\nV=%s (%d) type=%d\n", AIT_ADDR(v), AIT_LEN(v), AIT_TYPE(v)); + ait_freeVar(&v); + err: + if (f2 > 2) + close(f2); if (f > 2) close(f); ait_freeVars(&arr);