From 07b57e90f7c852c4fe212ab1d91058f27469a74b Mon Sep 17 00:00:00 2001 From: Johannes Schindelin Date: Sat, 17 Jan 2009 17:29:42 +0100 Subject: Add color_fwrite_lines(), a function coloring each line individually We have to set the color before every line and reset it before every newline. Add a function color_fwrite_lines() which does that for us. Signed-off-by: Johannes Schindelin Signed-off-by: Junio C Hamano --- color.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'color.c') diff --git a/color.c b/color.c index fc0b72ad59..d4ae83f9b7 100644 --- a/color.c +++ b/color.c @@ -191,3 +191,31 @@ int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...) va_end(args); return r; } + +/* + * This function splits the buffer by newlines and colors the lines individually. + * + * Returns 0 on success. + */ +int color_fwrite_lines(FILE *fp, const char *color, + size_t count, const char *buf) +{ + if (!*color) + return fwrite(buf, count, 1, fp) != 1; + while (count) { + char *p = memchr(buf, '\n', count); + if (p != buf && (fputs(color, fp) < 0 || + fwrite(buf, p ? p - buf : count, 1, fp) != 1 || + fputs(COLOR_RESET, fp) < 0)) + return -1; + if (!p) + return 0; + if (fputc('\n', fp) < 0) + return -1; + count -= p + 1 - buf; + buf = p + 1; + } + return 0; +} + + -- cgit v1.2.3