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>