diff options
author | C. McEnroe | 2020-02-08 23:29:32 -0500 |
---|---|---|
committer | C. McEnroe | 2020-02-08 23:29:32 -0500 |
commit | b30b93f67212c8d4c172972fd3399cabb8d1be6e (patch) | |
tree | aebe7e4c9b2d0875ce9b9a39020c4d2298879ddd /handle.c | |
parent | ec73174c4c90ada7cad983f91ce42f27faa9749c (diff) |
Use fmemopen to build colored mentions string
Diffstat (limited to 'handle.c')
-rw-r--r-- | handle.c | 37 |
1 files changed, 14 insertions, 23 deletions
diff --git a/handle.c b/handle.c index b4601e4..cf0e853 100644 --- a/handle.c +++ b/handle.c @@ -406,34 +406,25 @@ static const char *colorMentions(size_t id, struct Message *msg) { } static char buf[1024]; - size_t len = 0; + FILE *str = fmemopen(buf, sizeof(buf), "w"); + if (!str) err(EX_OSERR, "fmemopen"); + while (*mention) { size_t skip = strspn(mention, ", "); - int n = snprintf( - &buf[len], sizeof(buf) - len, - "%.*s", (int)skip, mention - ); - assert(n >= 0 && len + n < sizeof(buf)); - len += n; + fwrite(mention, skip, 1, str); mention += skip; - size_t word = strcspn(mention, ", "); - char punct = mention[word]; - mention[word] = '\0'; - - n = snprintf( - &buf[len], sizeof(buf) - len, - "\3%02d%s\3", completeColor(id, mention), mention - ); - assert(n > 0 && len + n < sizeof(buf)); - len += n; - - mention[word] = punct; - mention += word; + size_t len = strcspn(mention, ", "); + char punct = mention[len]; + mention[len] = '\0'; + fprintf(str, "\3%02d%s\3", completeColor(id, mention), mention); + mention[len] = punct; + mention += len; } - assert(len + 1 < sizeof(buf)); - buf[len++] = final; - buf[len] = '\0'; + fputc(final, str); + + fclose(str); + buf[sizeof(buf) - 1] = '\0'; return buf; } |