duckduckgo cli: escape control-characters, white-space fixes - frontends - front-ends for some sites (experiment) (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit af4724f4ae716f2851678df268f6d00931af1b0e (DIR) parent dc3d8095cbd02e17ceeaab5590816bfa5f93e06c (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Fri, 3 Jan 2020 13:12:31 +0100 duckduckgo cli: escape control-characters, white-space fixes Diffstat: M duckduckgo/cli.c | 19 ++++++++++++++++--- M duckduckgo/duckduckgo.c | 8 ++++---- M reddit/gopher.c | 6 +++--- M reddit/reddit.c | 2 +- M twitch/twitch.h | 2 +- M youtube/cli.c | 4 ++-- 6 files changed, 27 insertions(+), 14 deletions(-) --- (DIR) diff --git a/duckduckgo/cli.c b/duckduckgo/cli.c @@ -12,6 +12,18 @@ #include "duckduckgo.h" #include "util.h" +#define OUT(s) fputs((s), stdout) +#define OUTESCAPE(s) printescape((s)) + +/* print: ignore control-characters */ +void +printescape(const char *s) +{ + for (; *s; ++s) + if (!iscntrl((unsigned char)*s)) + fputc(*s, stdout); +} + int main(int argc, char *argv[]) { @@ -37,9 +49,10 @@ main(int argc, char *argv[]) result = &(results->items[i]); if (utf8pad(buf, sizeof(buf), result->title, 70, ' ') != -1) - fputs(buf, stdout); - fputs(" ", stdout); - puts(result->urldecoded); + OUTESCAPE(buf); + OUT(" "); + OUTESCAPE(result->urldecoded); + OUT("\n"); } } (DIR) diff --git a/duckduckgo/duckduckgo.c b/duckduckgo/duckduckgo.c @@ -60,7 +60,7 @@ xmlattr(XMLParser *x, const char *t, size_t tl, const char *a, size_t al, /* clear fix is use in the end of a result */ if (!strcmp(t, "div") && !strcmp(a, "style") && strstr(v, "clear: both")) { isresult = 0; - + if (!result.title[0] || !result.url[0]) return; @@ -197,7 +197,7 @@ duckduckgo_search(const char *s) char *data; results = NULL; /* global */ - + if (!(r = calloc(1, sizeof(*r)))) return NULL; @@ -221,8 +221,8 @@ duckduckgo_search(const char *s) results = r; /* global: store */ setxmldata(data, strlen(data)); xml_parse(&x); - + free(data); - + return r; } (DIR) diff --git a/reddit/gopher.c b/reddit/gopher.c @@ -79,7 +79,7 @@ printitem(struct item *item) OUTLINK(item->url); printf("\t%s\t%s\r\n", host, port); -#if 0 +#if 0 printf("1Posted in r/"); OUTTEXT(item->subreddit); OUT("\t"); @@ -99,7 +99,7 @@ printitem(struct item *item) OUTTEXT(item->thumbnail); OUT("\tURL:"); OUTTEXT(item->thumbnail); - printf("\t%s\t%s\r\n", host, port); + printf("\t%s\t%s\r\n", host, port); } if (item->is_video) { @@ -109,7 +109,7 @@ printitem(struct item *item) OUTTEXT(item->dash_url); OUT("\tURL:"); OUTTEXT(item->dash_url); - printf("\t%s\t%s\r\n", host, port); + printf("\t%s\t%s\r\n", host, port); } info(""); (DIR) diff --git a/reddit/reddit.c b/reddit/reddit.c @@ -229,6 +229,6 @@ reddit_list(const char *subreddit, const char *page) r = NULL; } free(data); - + return r; } (DIR) diff --git a/twitch/twitch.h b/twitch/twitch.h @@ -64,7 +64,7 @@ struct users_response { struct videos_response { struct video data[MAX_ITEMS + 1]; - size_t nitems; + size_t nitems; // char pagination[256]; }; (DIR) diff --git a/youtube/cli.c b/youtube/cli.c @@ -14,8 +14,8 @@ #include "util.h" #include "youtube.h" -#define OUT(s) (fputs((s), stdout)) -#define OUTESCAPE(s) (printescape(s)) +#define OUT(s) fputs((s), stdout) +#define OUTESCAPE(s) printescape((s)) /* print: ignore control-characters */ void