Annotation of libelwix/example/test_tlv.c, revision 1.4
1.2 misho 1: #include <stdio.h>
2: #include <stdlib.h>
3: #include <string.h>
4: #include <unistd.h>
5: #include <fcntl.h>
6: #include <elwix.h>
7:
8:
9: static void
10: display(array_t *arr)
11: {
12: register int i;
13:
14: for (i = 0; i < array_Size(arr); i++) {
15: if (AIT_TYPE(array(arr, i, ait_val_t*)) == string)
1.3 misho 16: printf("arr[%d]=%s (%d) type=%d\n", i, AIT_ADDR(array(arr, i, ait_val_t*)),
17: AIT_LEN(array(arr, i, ait_val_t*)),
18: AIT_TYPE(array(arr, i, ait_val_t*)));
19: else if (AIT_TYPE(array(arr, i, ait_val_t*)) == f32)
20: printf("arr[%d]#%f (%d) type=%d\n", i, AIT_GET_F32(array(arr, i, ait_val_t*)),
21: AIT_LEN(array(arr, i, ait_val_t*)),
22: AIT_TYPE(array(arr, i, ait_val_t*)));
23: else if (AIT_TYPE(array(arr, i, ait_val_t*)) == f64)
24: printf("arr[%d]#%lf (%d) type=%d\n", i, AIT_GET_F64(array(arr, i, ait_val_t*)),
25: AIT_LEN(array(arr, i, ait_val_t*)),
26: AIT_TYPE(array(arr, i, ait_val_t*)));
1.2 misho 27: else
1.3 misho 28: printf("arr[%d]#%ld (%d) type=%d\n", i, AIT_RAW(array(arr, i, ait_val_t*)),
29: AIT_LEN(array(arr, i, ait_val_t*)),
30: AIT_TYPE(array(arr, i, ait_val_t*)));
1.2 misho 31: }
32: }
33:
34: int
35: main(int argc, char **argv)
36: {
37: array_t *arr;
1.4 ! misho 38: u_char buf[BUFSIZ], buf2[BUFSIZ];
! 39: int f, f2, len, len2, ret = 0;
! 40: ait_val_t *v;
! 41: off_t nt;
1.2 misho 42:
43: arr = ait_array2vars((const char**) argv, 42);
44: if (!arr)
45: return 1;
46:
47: display(arr);
48:
49: printf("\nNeeded buffer size = %d\n", ait_vars2tlv(NULL, 0, arr));
50: printf("Serialized data to buffer = %d\n", (len = ait_vars2tlv(buf, sizeof buf, arr)));
1.4 ! misho 51: printf("Serialized var to buffer = %d\n", (len2 = ait_var2tlv(buf2, sizeof buf2, array(arr, 0, ait_val_t*))));
1.2 misho 52:
53: f = open("test_tlv.bin", O_CREAT | O_WRONLY, 0644);
54: if (f == -1) {
55: ret = 2;
56: goto err;
57: }
58: if ((len = write(f, buf, len)) == -1) {
59: ret = 3;
60: goto err;
61: } else
62: printf("Wrote %d bytes to file test_tlv.bin\n", len);
63:
1.4 ! misho 64: f2 = open("test_var_tlv.bin", O_CREAT | O_WRONLY, 0644);
! 65: if (f2 == -1) {
! 66: ret = 2;
! 67: goto err;
! 68: }
! 69: if ((len2 = write(f2, buf2, len2)) == -1) {
! 70: ret = 3;
! 71: goto err;
! 72: } else
! 73: printf("Wrote %d bytes to file test_var_tlv.bin\n", len2);
! 74:
1.2 misho 75: ait_freeVars(&arr);
76:
77: arr = ait_tlv2vars(buf, len);
78: if (!arr) {
79: ret = 4;
80: goto err;
81: }
82: printf("\n>>> Built vars array from TLV buffer\n\n");
83: display(arr);
84:
85: arr = ait_tlv2vars(buf, sizeof buf);
86: if (!arr) {
87: ret = 5;
88: goto err;
89: }
90: printf("\n>>> Built vars array from TLV buffer with zeros at the end\n\n");
91: display(arr);
1.4 ! misho 92:
! 93: v = ait_tlv2var(buf, sizeof buf, &nt);
! 94: if (!v) {
! 95: ret = 6;
! 96: goto err;
! 97: }
! 98: printf("\nV=%s (%d) type=%d next=%ld\n", AIT_ADDR(v), AIT_LEN(v), AIT_TYPE(v), nt);
! 99: ait_freeVar(&v);
! 100:
! 101: v = ait_tlv2var(buf + nt, sizeof buf - nt, NULL);
! 102: if (!v) {
! 103: ret = 7;
! 104: goto err;
! 105: }
! 106: printf("\nV=%s (%d) type=%d\n", AIT_ADDR(v), AIT_LEN(v), AIT_TYPE(v));
! 107: ait_freeVar(&v);
! 108:
1.2 misho 109: err:
1.4 ! misho 110: if (f2 > 2)
! 111: close(f2);
1.2 misho 112: if (f > 2)
113: close(f);
114: ait_freeVars(&arr);
115: return ret;
116: }
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>