From 02a5d1a00b4f484b4b2422785944e022810bbbb0 Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Mon, 19 Jun 2017 14:09:02 +0200 Subject: [PATCH 1/2] fix weird n-fold unescaping --- src/fe-common/core/chat-completion.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/fe-common/core/chat-completion.c b/src/fe-common/core/chat-completion.c index 1f00feaf..1c9db28e 100644 --- a/src/fe-common/core/chat-completion.c +++ b/src/fe-common/core/chat-completion.c @@ -1011,13 +1011,17 @@ static void sig_complete_target(GList **list, WINDOW_REC *window, } } +static void event_text(const char *data, SERVER_REC *server, WI_ITEM_REC *item); + /* expand \n, \t and \\ */ static char *expand_escapes(const char *line, SERVER_REC *server, WI_ITEM_REC *item) { char *ptr, *ret; - int chr; + const char *prev; + int chr; + prev = line; ret = ptr = g_malloc(strlen(line)+1); for (; *line != '\0'; line++) { if (*line != '\\') { @@ -1036,9 +1040,11 @@ static char *expand_escapes(const char *line, SERVER_REC *server, /* newline .. we need to send another "send text" event to handle it (or actually the text before the newline..) */ - if (ret != ptr) { - *ptr = '\0'; - signal_emit("send text", 3, ret, server, item); + if (prev != line) { + const char *prev_line = g_strndup(prev, (line - prev) - 1); + event_text(prev_line, server, item); + g_free((char *)prev_line); + prev = line + 1; ptr = ret; } } else if (chr != -1) { From bbf8b860747c13a478657b9070c191735d35e00a Mon Sep 17 00:00:00 2001 From: ailin-nemui Date: Thu, 22 Jun 2017 09:33:33 +0200 Subject: [PATCH 2/2] remove const --- src/fe-common/core/chat-completion.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/fe-common/core/chat-completion.c b/src/fe-common/core/chat-completion.c index 1c9db28e..97cd0565 100644 --- a/src/fe-common/core/chat-completion.c +++ b/src/fe-common/core/chat-completion.c @@ -1041,9 +1041,9 @@ static char *expand_escapes(const char *line, SERVER_REC *server, event to handle it (or actually the text before the newline..) */ if (prev != line) { - const char *prev_line = g_strndup(prev, (line - prev) - 1); + char *prev_line = g_strndup(prev, (line - prev) - 1); event_text(prev_line, server, item); - g_free((char *)prev_line); + g_free(prev_line); prev = line + 1; ptr = ret; }