From 32046373b41dd7ba88d46e29f1c9fed41c3cf5b9 Mon Sep 17 00:00:00 2001 From: Tony Olagbaiye Date: Sun, 6 May 2018 21:21:48 +0100 Subject: [PATCH] htmldecode --- slack-channel.h | 8 ++++---- slack-message.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 4 deletions(-) diff --git a/slack-channel.h b/slack-channel.h index 2e2d08f..4c94511 100644 --- a/slack-channel.h +++ b/slack-channel.h @@ -15,7 +15,7 @@ struct t_slack_channel_typing { char *id; char *name; - long ts; + time_t ts; struct t_slack_channel_typing *prev_typing; struct t_slack_channel_typing *next_typing; @@ -33,14 +33,14 @@ struct t_slack_channel_topic { char *value; char *creator; - long last_set; + time_t last_set; }; struct t_slack_channel_purpose { char *value; char *creator; - long last_set; + time_t last_set; }; struct t_slack_channel @@ -48,7 +48,7 @@ struct t_slack_channel enum t_slack_channel_type type; char *id; char *name; - int created; + time_t created; /* channel */ int is_general; diff --git a/slack-message.c b/slack-message.c index 2cfa71e..c6a2bcd 100644 --- a/slack-message.c +++ b/slack-message.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -48,6 +49,51 @@ char *slack_message_translate_code(struct t_slack_workspace *workspace, } } +void slack_message_htmldecode(char *dest, const char *src, size_t n) +{ + size_t i, j; + + for (i = 0, j = 0; i < n; i++, j++) + switch (src[i]) + { + case '\0': + dest[j] = '\0'; + return; + case '&': + if (src[i+1] == 'g' && + src[i+2] == 't' && + src[i+3] == ';') + { + dest[j] = '>'; + i += 3; + break; + } + else if (src[i+1] == 'l' && + src[i+2] == 't' && + src[i+3] == ';') + { + dest[j] = '<'; + i += 3; + break; + } + else if (src[i+1] == 'a' && + src[i+2] == 'm' && + src[i+3] == 'p' && + src[i+4] == ';') + { + dest[j] = '&'; + i += 4; + break; + } + /* fallthrough */ + default: + dest[j] = src[i]; + break; + } + dest[j-1] = '\0'; + return; +} + char *slack_message_decode(struct t_slack_workspace *workspace, const char *text) { @@ -142,6 +188,9 @@ char *slack_message_decode(struct t_slack_workspace *workspace, strncat(decoded_text, cursor, SLACK_MESSAGE_MAX_LENGTH - strlen(decoded_text) - 1); + slack_message_htmldecode(decoded_text, decoded_text, + SLACK_MESSAGE_MAX_LENGTH); + regfree(®); return decoded_text; }