static int s_aws_array_list_from_json()

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