From 2ffe977836426aeb518319009ee6047b4e38f822 Mon Sep 17 00:00:00 2001 From: "me@ow.nekobit.net" Date: Tue, 15 Feb 2022 15:39:34 +0000 Subject: [PATCH] Fix query string generator FossilOrigin-Name: 7bc838fbb628e77c59da85f238f6b2668a2d5caa82dcfcaeadc0442be9674f3f --- Makefile | 2 +- include/mastodont_application.h | 2 +- include/mastodont_query.h | 2 +- src/application.c | 15 +++++------ src/query.c | 46 +++++++++++++++++++++++---------- src/timeline.c | 16 ++++++++++++ 6 files changed, 57 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index 84f0a00..459f0f3 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ CC ?= cc -CFLAGS = -ansi -I ./include/ +CFLAGS = -g -ansi -I ./include/ SRC = $(wildcard src/*.c) OBJ = $(patsubst %.c,%.o,$(SRC)) TARGET = libmastodont.a # shared diff --git a/include/mastodont_application.h b/include/mastodont_application.h index 13317a4..76183ac 100644 --- a/include/mastodont_application.h +++ b/include/mastodont_application.h @@ -17,7 +17,7 @@ #define MASTODONT_APPLICATION #include "mastodont_types.h" #include -#include +#include /* Status: Complete */ diff --git a/include/mastodont_query.h b/include/mastodont_query.h index eb12e42..1e727c8 100644 --- a/include/mastodont_query.h +++ b/include/mastodont_query.h @@ -22,7 +22,7 @@ enum _mstdnt_query_type { _MSTDNT_QUERY_STRING, _MSTDNT_QUERY_INT -} +}; struct _mstdnt_query_param { diff --git a/src/application.c b/src/application.c index dcc80e5..6ab0d95 100644 --- a/src/application.c +++ b/src/application.c @@ -23,16 +23,13 @@ int mastodont_register_app(mastodont_t* data, struct mstdnt_fetch_results results = { 0 }; /* Default args */ - struct mstdnt_timeline_public_args _args; + struct mstdnt_app_register_args _args; if (args == NULL) { - _args.local = 0; /* Defaults to false */ - _args.remote = 0; - _args.only_media = 0; - _args.max_id = NULL; - _args.since_id = NULL; - _args.min_id = NULL; - _args.limit = 20; + _args.client_name = NULL; /* Defaults to false */ + _args.redirect_uris = NULL; + _args.scopes = NULL; + _args.website = NULL; args = &_args; } storage->needs_cleanup = 0; @@ -40,7 +37,7 @@ int mastodont_register_app(mastodont_t* data, if (mastodont_fetch_curl(data, "api/v1/apps", &results) != CURLE_OK) return 1; - res = mstdnt_load_statuses_from_result(statuses, storage, &results, size); + /*res = mstdnt_load_statuses_from_result(statuses, storage, &results, size);*/ mastodont_fetch_results_cleanup(&results); diff --git a/src/query.c b/src/query.c index faa56dc..3ed8244 100644 --- a/src/query.c +++ b/src/query.c @@ -19,6 +19,7 @@ #define CONV_SIZE 64 +/* TODO audit this function for overflows */ char* _mstdnt_query_string(char* src, struct _mstdnt_query_param* params, size_t param_len) @@ -26,9 +27,14 @@ char* _mstdnt_query_string(char* src, size_t i; int res_prev; /* If value type is an int, convert it with int->str */ + char* val_ptr = NULL; char conv_val[CONV_SIZE]; size_t src_l = strlen(src); + /* Key values */ + size_t key_len; + size_t val_len; + /* Result */ size_t res_len = src_l+1; char* result = malloc(res_len); @@ -42,31 +48,43 @@ char* _mstdnt_query_string(char* src, if (params[i].key) { if (res_count++ == 0) - { - result = realloc(result, ++res_len); + /* Replaces Null terminator */ result[res_len-1] = '?'; - } /* Convert value */ if (params[i].type == _MSTDNT_QUERY_INT) + { snprintf(conv_val, CONV_SIZE, "%d", params[i].value.i); + val_ptr = conv_val; + } else /* Point to it */ - conv_val = params[i].value.s; - + val_ptr = params[i].value.s; + + /* Get lengths */ + key_len = strlen(params[i].key); + val_len = strlen(val_ptr); + res_prev = res_len; - /* |v| & character |v| account for '=' */ - res_len += 1 + strlen(params[i].key) + 1 + strlen(conv_val); + /* |v| & character |v| account for '=' */ + res_len += 1 + key_len + 1 + val_len; - - result = realloc(result, res_len + 1); - if (res_count) result[res_prev] = '&'; - - if (res_count) result[res_len-2] = '\0'; - else result[res_len-1] = '\0'; - /* TODO */ + result = realloc(result, res_len + 1); /* NULL terminator space */ + if (res_count - 1 != 0) + result[res_prev-1] = '&'; + + /* Leave an extra byte, doesn't hurt */ + if (res_count - 1 != 0) + result[res_len-1] = '\0'; + else result[res_len] = '\0'; + + /* Copy over strings (skip & sign ;; +1) */ + strcpy(result + res_prev, params[i].key); + result[res_prev - (res_count - 1 != 0) + key_len] = '='; + strcpy(result + res_prev + 1 + key_len - (res_count - 1 != 0), val_ptr); } } + return result; } diff --git a/src/timeline.c b/src/timeline.c index 4d96bcf..49d6dff 100644 --- a/src/timeline.c +++ b/src/timeline.c @@ -17,6 +17,7 @@ #include #include "mastodont_fetch.h" #include "mastodont_timeline.h" +#include "mastodont_query.h" int mastodont_timeline_public(mastodont_t* data, struct mstdnt_timeline_public_args* args, @@ -42,6 +43,21 @@ int mastodont_timeline_public(mastodont_t* data, } storage->needs_cleanup = 0; + struct _mstdnt_query_param params[] = { + { _MSTDNT_QUERY_STRING, NULL, "rat" }, + { _MSTDNT_QUERY_STRING, "lolled", "ratted" }, + }; + + + + char* url = _mstdnt_query_string("api/v1/timelines/public", + params, 2); + + puts(url); + free (url); + return 1; + + if (mastodont_fetch_curl(data, "api/v1/timelines/public", &results) != CURLE_OK) return 1;