Use fmemopen to build colored mentions string

master
C. McEnroe 2020-02-08 23:29:32 -05:00
parent ec73174c4c
commit b30b93f672
1 changed files with 14 additions and 23 deletions

View File

@ -406,34 +406,25 @@ static const char *colorMentions(size_t id, struct Message *msg) {
} }
static char buf[1024]; static char buf[1024];
size_t len = 0; FILE *str = fmemopen(buf, sizeof(buf), "w");
if (!str) err(EX_OSERR, "fmemopen");
while (*mention) { while (*mention) {
size_t skip = strspn(mention, ", "); size_t skip = strspn(mention, ", ");
int n = snprintf( fwrite(mention, skip, 1, str);
&buf[len], sizeof(buf) - len,
"%.*s", (int)skip, mention
);
assert(n >= 0 && len + n < sizeof(buf));
len += n;
mention += skip; mention += skip;
size_t word = strcspn(mention, ", "); size_t len = strcspn(mention, ", ");
char punct = mention[word]; char punct = mention[len];
mention[word] = '\0'; mention[len] = '\0';
fprintf(str, "\3%02d%s\3", completeColor(id, mention), mention);
n = snprintf( mention[len] = punct;
&buf[len], sizeof(buf) - len, mention += len;
"\3%02d%s\3", completeColor(id, mention), mention
);
assert(n > 0 && len + n < sizeof(buf));
len += n;
mention[word] = punct;
mention += word;
} }
assert(len + 1 < sizeof(buf)); fputc(final, str);
buf[len++] = final;
buf[len] = '\0'; fclose(str);
buf[sizeof(buf) - 1] = '\0';
return buf; return buf;
} }