static int copy_structure(const struct sol_memdesc *desc, void *memory, const void *ptr_content) { const struct sol_memdesc_structure_member *itr; const void *src_mem; SOL_MEMDESC_FOREACH_STRUCTURE_MEMBER_MEMORY(desc, itr, ptr_content, src_mem) { void *dst_mem; int r; dst_mem = sol_memdesc_get_structure_member_memory(desc, itr, memory); if (!dst_mem) return -errno; r = copy_content(&itr->base, src_mem, dst_mem); if (r < 0) return r; }
int test_meta_links_load() { RIACK_STRING bucket_posts, bucket_answers; struct RIACK_GET_OBJECT get_post; struct RIACK_OBJECT put_post; struct RIACK_STRING_LINKED_LIST *keys_posts, *current_post, *keys_answers, *current_answer; bucket_posts.len = strlen(RIAK_TEST_BUCKET_POSTS); bucket_posts.value = RIAK_TEST_BUCKET_POSTS; bucket_answers.len = strlen(RIAK_TEST_BUCKET_ANSWERS); bucket_answers.value = RIAK_TEST_BUCKET_ANSWERS; // Make random links between posts and comments if ((riack_list_keys(test_client, bucket_posts, &keys_posts) == RIACK_SUCCESS)&& (riack_list_keys(test_client, bucket_answers, &keys_answers) == RIACK_SUCCESS)) { current_post = keys_posts; current_answer = keys_answers; while (current_post && current_post->next) { if (riack_get(test_client, bucket_posts, current_post->string, 0, &get_post) == RIACK_SUCCESS) { if (get_post.object.content_count == 1) { memset(&put_post, 0, sizeof(put_post)); put_post.bucket = copy_string(&bucket_posts); put_post.key = copy_string(¤t_post->string); put_post.content_count = 1; put_post.content = copy_content(get_post.object.content); current_answer = test_make_links(current_answer, get_post.object.content); if (riack_put(test_client, put_post, 0, 0) != RIACK_SUCCESS) { return 1; } riack_free_object(test_client, &put_post); } riack_free_get_object(test_client, &get_post); } current_post = current_post->next; } } return 0; }