Example #1
0
/* read an array */
static amf0_data * amf0_array_read(read_proc_t read_proc, void * user_data) {
    size_t i;
    amf0_data * element;
    amf0_data * data = amf0_array_new();
    if (data != NULL) {
        uint32_t array_size;
        if (read_proc(&array_size, sizeof(uint32_t), user_data) == sizeof(uint32_t)) {
            array_size = swap_uint32(array_size);
            
            for (i = 0; i < array_size; ++i) {
                element = amf0_data_read(read_proc, user_data);

                if (element != NULL) {
                    if (amf0_array_push(data, element) == NULL) {
                        amf0_data_free(element);
                        amf0_data_free(data);
                        return NULL;
                    }
                }
                else {
                    amf0_data_free(data);
                    return NULL;
                }
            }
        }
        else {
            amf0_data_free(data);
            return NULL;
        }
    }
    return data;
}
Example #2
0
/* read an array */
static amf0_data * amf0_array_read(read_proc_t read_proc, void * user_data) {
    size_t i;
    amf0_data * element;
    uint8_t error_code;
    amf0_data * data;
    uint32_t array_size;

    data = amf0_array_new();
    if (data == NULL) {
        return NULL;
    }

    if (read_proc(&array_size, sizeof(uint32_t), user_data) < sizeof(uint32_t)) {
        amf0_data_free(data);
        return amf0_data_error(AMF0_ERROR_EOF);
    }

    array_size = swap_uint32(array_size);

    for (i = 0; i < array_size; ++i) {
        element = amf0_data_read(read_proc, user_data);
        error_code = amf0_data_get_error(element);
        if (error_code != AMF0_ERROR_OK) {
            amf0_data_free(element);
            amf0_data_free(data);
            return amf0_data_error(error_code);
        }

        if (amf0_array_push(data, element) == NULL) {
            amf0_data_free(element);
            amf0_data_free(data);
            return NULL;
        }
    }

    return data;
}