aboutsummaryrefslogtreecommitdiff
path: root/dbfp.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbfp.c')
-rw-r--r--dbfp.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/dbfp.c b/dbfp.c
index 1c226e5..b36a17c 100644
--- a/dbfp.c
+++ b/dbfp.c
@@ -94,7 +94,8 @@ void dbfp_close(struct dbfp *dbfp)
int dbfp_query_location_name(struct dbfp *dbfp, char *input,
size_t *n, struct dbfp_location **locations)
{
- int err;
+ int err = 0;
+ char *input_enc = NULL;
char *query = NULL;
XML_Parser parser = NULL;
int len;
@@ -107,14 +108,17 @@ int dbfp_query_location_name(struct dbfp *dbfp, char *input,
*n = 0;
*locations = NULL;
- /*
- * TODO(robin.krahl): improve query building and implement HTML
- * encoding.
- */
+ input_enc = curl_easy_escape(dbfp->curl, input, 0);
+ if (!input_enc) {
+ err = DBFP_ERROR_CURL;
+ goto cleanup;
+ }
query = malloc(DBFP_URL_LEN);
- if (!query)
- return ENOMEM;
- len = snprintf(query, DBFP_URL_LEN, "input=%s", input);
+ if (!query) {
+ err = ENOMEM;
+ goto cleanup;
+ }
+ len = snprintf(query, DBFP_URL_LEN, "input=%s", input_enc);
if (len < 0 || len >= DBFP_URL_LEN) {
err = DBFP_ERROR_FORMAT;
goto cleanup;
@@ -136,6 +140,8 @@ int dbfp_query_location_name(struct dbfp *dbfp, char *input,
cleanup:
if (err)
free(ld.locations);
+ if (input_enc)
+ curl_free(input_enc);
XML_ParserFree(parser);
free(query);