]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
pretty-print: add helper for quickly outputting red/green cross/check marks
authorLennart Poettering <lennart@poettering.net>
Tue, 23 Nov 2021 09:37:03 +0000 (10:37 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 23 Nov 2021 21:40:15 +0000 (22:40 +0100)
Compound constructors FTW!

src/shared/pretty-print.h
src/test/test-pretty-print.c

index 4619f4e4d7fe97e52a0afc09e395922afd42c09e..45644da67dd3b5b2e1849b037381e3a83682d31b 100644 (file)
@@ -1,6 +1,9 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 #pragma once
 
+#include "glyph-util.h"
+#include "terminal-util.h"
+
 void print_separator(void);
 
 int file_url_from_path(const char *path, char **ret);
@@ -17,3 +20,23 @@ typedef enum CatFlags {
 
 int cat_files(const char *file, char **dropins, CatFlags flags);
 int conf_files_cat(const char *root, const char *name);
+
+#define RED_CROSS_MARK_MAX (STRLEN(ANSI_HIGHLIGHT_RED) + STRLEN("✗") + STRLEN(ANSI_NORMAL) + 1)
+#define GREEN_CHECK_MARK_MAX (STRLEN(ANSI_HIGHLIGHT_GREEN) + STRLEN("✓") + STRLEN(ANSI_NORMAL) + 1)
+
+static inline const char *red_cross_mark_internal(char buffer[static RED_CROSS_MARK_MAX]) {
+        assert(buffer);
+        assert_se(stpcpy(stpcpy(stpcpy(buffer, ansi_highlight_red()), special_glyph(SPECIAL_GLYPH_CROSS_MARK)), ansi_normal()) < buffer + RED_CROSS_MARK_MAX);
+        return buffer;
+}
+
+static inline const char *green_check_mark_internal(char buffer[static GREEN_CHECK_MARK_MAX]) {
+        assert(buffer);
+        assert_se(stpcpy(stpcpy(stpcpy(buffer, ansi_highlight_green()), special_glyph(SPECIAL_GLYPH_CHECK_MARK)), ansi_normal()) < buffer + GREEN_CHECK_MARK_MAX);
+        return buffer;
+}
+
+#define RED_CROSS_MARK() red_cross_mark_internal((char[RED_CROSS_MARK_MAX]) {})
+#define GREEN_CHECK_MARK() green_check_mark_internal((char[GREEN_CHECK_MARK_MAX]) {})
+
+#define COLOR_MARK_BOOL(b) ((b) ? GREEN_CHECK_MARK() : RED_CROSS_MARK())
index dbae34e73e490a28ec2595d93c2a815ac24c70c8..4620d39bb69addf5c513a715683fd05aa9722b11 100644 (file)
@@ -31,11 +31,25 @@ static void test_cat_files(void) {
                 assert_se(cat_files("/etc/fstab", STRV_MAKE("/etc/fstab", "/etc/fstab"), 0) == 0);
 }
 
+static void test_red_green_cross_check_mark(void) {
+        bool b = false;
+
+        printf("yeah: <%s>\n", GREEN_CHECK_MARK());
+        printf("nay: <%s>\n", RED_CROSS_MARK());
+
+        printf("%s → %s → %s → %s\n",
+               COLOR_MARK_BOOL(b),
+               COLOR_MARK_BOOL(!b),
+               COLOR_MARK_BOOL(!!b),
+               COLOR_MARK_BOOL(!!!b));
+}
+
 int main(int argc, char *argv[]) {
         test_setup_logging(LOG_INFO);
 
         test_terminal_urlify();
         test_cat_files();
+        test_red_green_cross_check_mark();
 
         print_separator();