static int suggest_result(struct evbuffer *res_buf, const char *types, const char *query, const char *target_name, int threshold, int limit, grn_obj *cmd_buf, grn_ctx *ctx) { if (target_name && types && query) { GRN_BULK_REWIND(cmd_buf); GRN_TEXT_PUTS(ctx, cmd_buf, "/d/suggest?table=item_"); grn_text_urlenc(ctx, cmd_buf, target_name, strlen(target_name)); GRN_TEXT_PUTS(ctx, cmd_buf, "&column=kana&types="); grn_text_urlenc(ctx, cmd_buf, types, strlen(types)); GRN_TEXT_PUTS(ctx, cmd_buf, "&query="); grn_text_urlenc(ctx, cmd_buf, query, strlen(query)); GRN_TEXT_PUTS(ctx, cmd_buf, "&threshold="); grn_text_itoa(ctx, cmd_buf, threshold); GRN_TEXT_PUTS(ctx, cmd_buf, "&limit="); grn_text_itoa(ctx, cmd_buf, limit); { char *res; int flags; unsigned int res_len; grn_ctx_send(ctx, GRN_TEXT_VALUE(cmd_buf), GRN_TEXT_LEN(cmd_buf), 0); grn_ctx_recv(ctx, &res, &res_len, &flags); evbuffer_add(res_buf, res, res_len); return res_len; } } else { evbuffer_add(res_buf, "{}", 2); return 2; } }
void test_urlenc(gconstpointer data) { grn_obj buffer; const gchar *expected, *input; gint input_length; expected = gcut_data_get_string(data, "expected"); input = gcut_data_get_string(data, "input"); input_length = gcut_data_get_int(data, "input-length"); if (input_length < 0) { input_length = strchr(input, '\0') - input; } GRN_TEXT_INIT(&buffer, 0); grn_text_urlenc(&context, &buffer, input, input_length); cut_assert_equal_substring(expected, GRN_TEXT_VALUE(&buffer), GRN_TEXT_LEN(&buffer)); GRN_OBJ_FIN(&context, &buffer); }