SOL_API bool sol_http_param_add_copy(struct sol_http_params *params, struct sol_http_param_value value) { struct sol_http_param_value *ptr; int r; SOL_NULL_CHECK(params, false); SOL_HTTP_PARAMS_CHECK_API_VERSION(params, false); if (!params->arena) { params->arena = sol_arena_new(); SOL_NULL_CHECK(params->arena, false); } if (value.type == SOL_HTTP_PARAM_QUERY_PARAM || value.type == SOL_HTTP_PARAM_COOKIE || value.type == SOL_HTTP_PARAM_POST_FIELD || value.type == SOL_HTTP_PARAM_HEADER) { if (value.value.key_value.key.len) { r = sol_arena_slice_dup(params->arena, &value.value.key_value.key, value.value.key_value.key); SOL_INT_CHECK(r, < 0, false); } if (value.value.key_value.value.len) { r = sol_arena_slice_dup(params->arena, &value.value.key_value.value, value.value.key_value.value); SOL_INT_CHECK(r, < 0, false); }
SOL_API bool sol_http_param_add_copy(struct sol_http_params *params, struct sol_http_param_value value) { struct sol_http_param_value *ptr; int r; SOL_NULL_CHECK(params, -EINVAL); #ifndef SOL_NO_API_VERSION if (params->api_version != SOL_HTTP_PARAM_API_VERSION) { SOL_ERR("API version mistmatch; expected %u, got %u", SOL_HTTP_PARAM_API_VERSION, params->api_version); return false; } #endif if (!params->arena) { params->arena = sol_arena_new(); SOL_NULL_CHECK(params->arena, false); } if (value.type == SOL_HTTP_PARAM_QUERY_PARAM || value.type == SOL_HTTP_PARAM_COOKIE || value.type == SOL_HTTP_PARAM_POST_FIELD || value.type == SOL_HTTP_PARAM_HEADER) { if (value.value.key_value.key.len) { r = sol_arena_slice_dup(params->arena, &value.value.key_value.key, value.value.key_value.key); SOL_INT_CHECK(r, < 0, false); } if (value.value.key_value.value.len) { r = sol_arena_slice_dup(params->arena, &value.value.key_value.value, value.value.key_value.value); SOL_INT_CHECK(r, < 0, false); }
static void test_null(void) { struct sol_arena *arena; struct sol_str_slice dst; arena = sol_arena_new(); ASSERT(arena); ASSERT(sol_arena_slice_dup_str(arena, &dst, NULL)); ASSERT(sol_arena_slice_dup_str_n(arena, &dst, NULL, 0)); ASSERT(sol_arena_slice_dup(arena, &dst, SOL_STR_SLICE_STR(NULL, 0))); ASSERT(!sol_arena_strdup(arena, NULL)); ASSERT(!sol_arena_strndup(arena, NULL, 0)); sol_arena_del(arena); }
static void test_simple(void) { static const char *gladiators[] = { "Spartacus", "C r i x u s", "Priscus and Verus" }; struct sol_arena *arena; struct sol_str_slice dst; char *dst_str; unsigned int i; arena = sol_arena_new(); ASSERT(arena); for (i = 0; i < sol_util_array_size(gladiators); i++) { struct sol_str_slice gladiator_slice = sol_str_slice_from_str(gladiators[i]); ASSERT_INT_EQ(sol_arena_slice_dup_str(arena, &dst, gladiators[i]), 0); ASSERT(sol_str_slice_eq(dst, gladiator_slice)); ASSERT_INT_EQ(sol_arena_slice_dup_str_n(arena, &dst, gladiators[i], strlen(gladiators[i])), 0); ASSERT(sol_str_slice_eq(dst, gladiator_slice)); ASSERT_INT_EQ(sol_arena_slice_dup(arena, &dst, sol_str_slice_from_str(gladiators[i])), 0); ASSERT(sol_str_slice_eq(dst, gladiator_slice)); dst_str = sol_arena_strdup(arena, gladiators[i]); ASSERT(dst_str); ASSERT(streq(gladiators[i], dst_str)); dst_str = sol_arena_strndup(arena, gladiators[i], strlen(gladiators[i])); ASSERT(dst_str); ASSERT(streq(gladiators[i], dst_str)); } sol_arena_del(arena); }