Use fmemopen to build colored mentions string
parent
ec73174c4c
commit
b30b93f672
37
handle.c
37
handle.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue