/* 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; }
/* 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; }