diff options
author | C. McEnroe | 2020-02-10 03:58:00 -0500 |
---|---|---|
committer | C. McEnroe | 2020-02-10 03:58:25 -0500 |
commit | 8e55c049b50e7a08dae819a5d7f704bdfaf4966c (patch) | |
tree | 63776714444a7062dc6cf46eefde8197b84ba9ba /handle.c | |
parent | 2c9ff1717b00b9373240dad8200bb8a766ac05cb (diff) |
Avoid coloring mentions if there are control codes
This was breaking leading color codes.
Diffstat (limited to 'handle.c')
-rw-r--r-- | handle.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/handle.c b/handle.c index 708acc7..fd2a67f 100644 --- a/handle.c +++ b/handle.c @@ -490,19 +490,16 @@ static bool isMention(const struct Message *msg) { } static const char *colorMentions(size_t id, struct Message *msg) { - char *mention; - char final; - if (strchr(msg->params[1], ':')) { - mention = strsep(&msg->params[1], ":"); - final = ':'; - } else if (strchr(msg->params[1], ' ')) { - mention = strsep(&msg->params[1], " "); - final = ' '; - } else { - mention = msg->params[1]; - msg->params[1] = ""; - final = '\0'; + char *split = strchr(msg->params[1], ':'); + if (!split) split = strchr(msg->params[1], ' '); + if (!split) split = &msg->params[1][strlen(msg->params[1])]; + for (char *ch = msg->params[1]; ch < split; ++ch) { + if (iscntrl(*ch)) return ""; } + char delimit = *split; + char *mention = msg->params[1]; + msg->params[1] = (delimit ? &split[1] : split); + *split = '\0'; static char buf[1024]; FILE *str = fmemopen(buf, sizeof(buf), "w"); @@ -520,7 +517,7 @@ static const char *colorMentions(size_t id, struct Message *msg) { mention[len] = punct; mention += len; } - fputc(final, str); + fputc(delimit, str); fclose(str); buf[sizeof(buf) - 1] = '\0'; |