]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pretty-print: add format-string version of draw_progress_bar() 34939/head
authorLennart Poettering <lennart@poettering.net>
Tue, 29 Oct 2024 20:32:28 +0000 (21:32 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 29 Oct 2024 20:37:26 +0000 (21:37 +0100)
We often format the prefix string via asprintf() before, let's hence add
a helper for that.

src/import/export-raw.c
src/import/export-tar.c
src/import/import-raw.c
src/import/import-tar.c
src/partition/repart.c
src/shared/pretty-print.c
src/shared/pretty-print.h
src/test/test-progress-bar.c

index 337d74706a5b65b4af8a40e68c24f235f90d6c08..5e34fd372e87ac7cc6e60d0a17822abab0ef3001 100644 (file)
@@ -124,17 +124,14 @@ static void raw_export_report_progress(RawExport *e) {
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u%%", percent);
 
-        if (isatty_safe(STDERR_FILENO)) {
-                _cleanup_free_ char *s = NULL;
-
-                if (asprintf(&s, "%s %s/%s",
-                             special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
-                             FORMAT_BYTES(e->written_uncompressed),
-                             FORMAT_BYTES(e->st.st_size)) < 0)
-                        return;
-
-                draw_progress_bar(s, percent);
-        } else
+        if (isatty_safe(STDERR_FILENO))
+                (void) draw_progress_barf(
+                                percent,
+                                "%s %s/%s",
+                                special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                FORMAT_BYTES(e->written_uncompressed),
+                                FORMAT_BYTES(e->st.st_size));
+        else
                 log_info("Exported %u%%.", percent);
 
         e->last_percent = percent;
index 42f3adee96348458cde7ec67f1d15513f39f9c99..e025efe411bc1ffe554ba2a28b3a17e94055938d 100644 (file)
@@ -134,17 +134,14 @@ static void tar_export_report_progress(TarExport *e) {
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u%%", percent);
 
-        if (isatty_safe(STDERR_FILENO)) {
-                _cleanup_free_ char *s = NULL;
-
-                if (asprintf(&s, "%s %s/%s",
-                             special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
-                             FORMAT_BYTES(e->written_uncompressed),
-                             FORMAT_BYTES(e->quota_referenced)) < 0)
-                        return;
-
-                draw_progress_bar(s, percent);
-        } else
+        if (isatty_safe(STDERR_FILENO))
+                (void) draw_progress_barf(
+                                percent,
+                                "%s %s/%s",
+                                special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                FORMAT_BYTES(e->written_uncompressed),
+                                FORMAT_BYTES(e->quota_referenced));
+        else
                 log_info("Exported %u%%.", percent);
 
         e->last_percent = percent;
index 190a08a005ac49b7fbe9cb9c65c0340f3a838837..602d1f1ac33d9536441bf63f1327e5a47835b54d 100644 (file)
@@ -151,17 +151,14 @@ static void raw_import_report_progress(RawImport *i) {
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u%%", percent);
 
-        if (isatty_safe(STDERR_FILENO)) {
-                _cleanup_free_ char *s = NULL;
-
-                if (asprintf(&s, "%s %s/%s",
-                             special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
-                             FORMAT_BYTES(i->written_compressed),
-                             FORMAT_BYTES(i->input_stat.st_size)) < 0)
-                        return;
-
-                draw_progress_bar(s, percent);
-        } else
+        if (isatty_safe(STDERR_FILENO))
+                (void) draw_progress_barf(
+                                percent,
+                                "%s %s/%s",
+                                special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                FORMAT_BYTES(i->written_compressed),
+                                FORMAT_BYTES(i->input_stat.st_size));
+        else
                 log_info("Imported %u%%.", percent);
 
         i->last_percent = percent;
index 6e6c720782a974fdab66ec29f540caf454044afa..e82159cb528c9e6827d8bc6c7b3bcf1897f1938c 100644 (file)
@@ -152,17 +152,14 @@ static void tar_import_report_progress(TarImport *i) {
 
         sd_notifyf(false, "X_IMPORT_PROGRESS=%u%%", percent);
 
-        if (isatty_safe(STDERR_FILENO)) {
-                _cleanup_free_ char *s = NULL;
-
-                if (asprintf(&s, "%s %s/%s",
-                             special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
-                             FORMAT_BYTES(i->written_compressed),
-                             FORMAT_BYTES(i->input_stat.st_size)) < 0)
-                        return;
-
-                draw_progress_bar(s, percent);
-        } else
+        if (isatty_safe(STDERR_FILENO))
+                (void) draw_progress_barf(
+                                percent,
+                                "%s %s/%s",
+                                special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                                FORMAT_BYTES(i->written_compressed),
+                                FORMAT_BYTES(i->input_stat.st_size));
+        else
                 log_info("Imported %u%%.", percent);
 
         i->last_percent = percent;
index 1acd5af38c398a4540f0b5b2f5ff71e6485a059d..5427e0a69fcb10c330bf099f6d05af15abca410a 100644 (file)
@@ -5085,21 +5085,19 @@ static int partition_format_verity_sig(Context *context, Partition *p) {
 
 static int progress_bytes(uint64_t n_bytes, void *userdata) {
         Partition *p = ASSERT_PTR(userdata);
-        _cleanup_free_ char *s = NULL;
 
         p->copy_blocks_done += n_bytes;
 
-        if (asprintf(&s, "%s %s %s %s/%s",
-                     strna(p->copy_blocks_path),
-                     special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
-                     strna(p->definition_path),
-                     FORMAT_BYTES(p->copy_blocks_done),
-                     FORMAT_BYTES(p->copy_blocks_size)) < 0)
-                return log_oom();
+        (void) draw_progress_barf(
+                        p->copy_blocks_done >= p->copy_blocks_size ? 100.0 : /* catch division be zero */
+                        100.0 * (double) p->copy_blocks_done / (double) p->copy_blocks_size,
+                        "%s %s %s %s/%s",
+                        strna(p->copy_blocks_path),
+                        special_glyph(SPECIAL_GLYPH_ARROW_RIGHT),
+                        strna(p->definition_path),
+                        FORMAT_BYTES(p->copy_blocks_done),
+                        FORMAT_BYTES(p->copy_blocks_size));
 
-        draw_progress_bar(s,
-                          p->copy_blocks_done >= p->copy_blocks_size ? 100.0 : /* catch division be zero */
-                          100.0 * (double) p->copy_blocks_done / (double) p->copy_blocks_size);
         return 0;
 }
 
index 18b2da15d4cf4c5076985ca7dec667ec84911b5c..df1c20fa244e61af346cf06a32c543993aca00fd 100644 (file)
@@ -548,6 +548,22 @@ void draw_progress_bar(const char *prefix, double 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_unbuffered(prefix);
index 0c073b60924e80c1e6dcc47f5ee3d9bbe49b2510..8ea1e964a3f2f95469cb1f16c367105b287626c5 100644 (file)
@@ -54,6 +54,7 @@ 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_unbuffered(const char *prefix, double percentage);
 void clear_progress_bar_unbuffered(const char *prefix);
index abc1d292dcbd413f3b6ca487efa930472a01b800..b199741cf5627ade93a1a76c24aabf20fb1c93a4 100644 (file)
@@ -14,7 +14,7 @@ TEST(progress_bar) {
 
         for (double d = 0; d <= 100; d += 0.5) {
                 usleep_safe(random_u64_range(20 * USEC_PER_MSEC));
-                draw_progress_bar(PROGRESS_PREFIX, d);
+                draw_progress_barf(d, PROGRESS_PREFIX "[" PID_FMT "]", getpid_cached());
 
                 if (!paused && d >= 50) {
                         clear_progress_bar(PROGRESS_PREFIX);
@@ -25,9 +25,9 @@ TEST(progress_bar) {
                 }
         }
 
-        draw_progress_bar(PROGRESS_PREFIX, 100);
+        draw_progress_barf(100, PROGRESS_PREFIX "[" PID_FMT "]", getpid_cached());
         usleep_safe(300 * MSEC_PER_SEC);
-        clear_progress_bar(PROGRESS_PREFIX);
+        clear_progress_bar(PROGRESS_PREFIX "[0123456789]" );
         fputs("Done.\n", stdout);
 }