pretty-print: add format-string version of draw_progress_bar() (#34939)

We often format the prefix string via asprintf() before, let's hence add
a helper for that.
This commit is contained in:
Daan De Meyer
2024-10-30 10:26:48 +01:00
committed by GitHub
9 changed files with 74 additions and 72 deletions
+20 -5
View File
@@ -461,7 +461,7 @@ bool shall_tint_background(void) {
return cache != 0;
}
void draw_progress_bar_impl(const char *prefix, double percentage) {
void draw_progress_bar_unbuffered(const char *prefix, double percentage) {
fputc('\r', stderr);
if (prefix) {
fputs(prefix, stderr);
@@ -522,10 +522,9 @@ void draw_progress_bar_impl(const char *prefix, double percentage) {
fputs(ANSI_ERASE_TO_END_OF_LINE, stderr);
fputc('\r', stderr);
}
void clear_progress_bar_impl(const char *prefix) {
void clear_progress_bar_unbuffered(const char *prefix) {
fputc('\r', stderr);
if (terminal_is_dumb())
@@ -546,10 +545,26 @@ void draw_progress_bar(const char *prefix, double percentage) {
* unbuffered by default. Let's temporarily turn on full buffering, so that this is passed to the tty
* as a single buffer, to make things more efficient. */
WITH_BUFFERED_STDERR;
draw_progress_bar_impl(prefix, percentage);
draw_progress_bar_unbuffered(prefix, percentage);
}
int draw_progress_barf(double percentage, const char *prefixf, ...) {
_cleanup_free_ char *s = NULL;
va_list ap;
int r;
va_start(ap, prefixf);
r = vasprintf(&s, prefixf, ap);
va_end(ap);
if (r < 0)
return -ENOMEM;
draw_progress_bar(s, percentage);
return 0;
}
void clear_progress_bar(const char *prefix) {
WITH_BUFFERED_STDERR;
clear_progress_bar_impl(prefix);
clear_progress_bar_unbuffered(prefix);
}
+3 -2
View File
@@ -54,9 +54,10 @@ int terminal_tint_color(double hue, char **ret);
bool shall_tint_background(void);
void draw_progress_bar(const char *prefix, double percentage);
int draw_progress_barf(double percentage, const char *prefixf, ...) _printf_(2, 3);
void clear_progress_bar(const char *prefix);
void draw_progress_bar_impl(const char *prefix, double percentage);
void clear_progress_bar_impl(const char *prefix);
void draw_progress_bar_unbuffered(const char *prefix, double percentage);
void clear_progress_bar_unbuffered(const char *prefix);
static inline FILE* enable_buffering(FILE *f, char *buffer, size_t size) {
assert(f);