in source/kms.c [559:607]
static int s_aws_array_list_from_json(
struct aws_allocator *allocator,
struct json_object *obj,
struct aws_array_list *array) {
AWS_PRECONDITION(aws_allocator_is_valid(allocator));
AWS_PRECONDITION(obj);
AWS_PRECONDITION(array);
struct array_list *arr = json_object_get_array(obj);
if (arr == NULL) {
return AWS_OP_ERR;
}
size_t length = array_list_length(arr);
if (aws_array_list_init_dynamic(array, allocator, length, sizeof(struct aws_string *)) != AWS_OP_SUCCESS) {
return AWS_OP_ERR;
}
for (size_t i = 0; i < length; i++) {
struct json_object *elem = array_list_get_idx(arr, i);
if (json_object_get_type(elem) != json_type_string) {
goto clean_up;
}
struct aws_string *str = s_aws_string_from_json(allocator, elem);
if (str == NULL) {
goto clean_up;
}
if (aws_array_list_push_back(array, &str) != AWS_OP_SUCCESS) {
goto clean_up;
}
}
return AWS_OP_SUCCESS;
clean_up:
for (size_t i = 0; i < aws_array_list_length(array); i++) {
struct aws_string *elem = NULL;
AWS_FATAL_ASSERT(aws_array_list_get_at(array, &elem, i) == AWS_OP_SUCCESS);
aws_string_destroy(elem);
}
aws_array_list_clean_up(array);
return AWS_OP_ERR;
}