зеркало из https://github.com/microsoft/git.git
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 <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
3ea95d2b0e
Коммит
07b57e90f7
28
color.c
28
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;
|
||||
}
|
||||
|
||||
|
||||
|
|
1
color.h
1
color.h
|
@ -19,5 +19,6 @@ int git_config_colorbool(const char *var, const char *value, int stdout_is_tty);
|
|||
void color_parse(const char *var, const char *value, char *dst);
|
||||
int color_fprintf(FILE *fp, const char *color, const char *fmt, ...);
|
||||
int color_fprintf_ln(FILE *fp, const char *color, const char *fmt, ...);
|
||||
int color_fwrite_lines(FILE *fp, const char *color, size_t count, const char *buf);
|
||||
|
||||
#endif /* COLOR_H */
|
||||
|
|
Загрузка…
Ссылка в новой задаче