]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
bsod: do not check for color support
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Mon, 28 Oct 2024 12:38:58 +0000 (13:38 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Oct 2024 08:41:23 +0000 (09:41 +0100)
When invoked on a running system, bsod would not print the qrcode.
The check for "color support" on stdout is pointless, since we're not
printing to stdout but to a terminal fd that is opened separately.

src/journal/bsod.c
src/shared/qrcode-util.c
src/shared/qrcode-util.h

index cdf9e4874c3e9aca5bda94bf41afcc6414e53d2b..c76b04718ee4fffe5a4c5de0cf06d77692edf6e9 100644 (file)
@@ -212,7 +212,9 @@ static int display_emergency_message_fullscreen(const char *message) {
                 goto cleanup;
         }
 
-        r = print_qrcode_full(stream, "Scan the QR code", message, qr_code_start_row, qr_code_start_column, w.ws_col, w.ws_row);
+        r = print_qrcode_full(stream, "Scan the QR code",
+                              message, qr_code_start_row, qr_code_start_column, w.ws_col, w.ws_row,
+                              /* check_tty= */ false);
         if (r < 0)
                 log_warning_errno(r, "QR code could not be printed, ignoring: %m");
 
index 56eace395e30ee0eaba2012106f7fd00a931610a..afb2875aa0613c71dde3cb076535f3c12d266418 100644 (file)
@@ -173,7 +173,16 @@ static void write_qrcode(FILE *output, QRcode *qr, unsigned int row, unsigned in
         fflush(output);
 }
 
-int print_qrcode_full(FILE *out, const char *header, const char *string, unsigned row, unsigned column, unsigned tty_width, unsigned tty_height) {
+int print_qrcode_full(
+                FILE *out,
+                const char *header,
+                const char *string,
+                unsigned row,
+                unsigned column,
+                unsigned tty_width,
+                unsigned tty_height,
+                bool check_tty) {
+
         QRcode* qr;
         int r;
 
@@ -181,7 +190,7 @@ int print_qrcode_full(FILE *out, const char *header, const char *string, unsigne
          * codes */
         if (!is_locale_utf8())
                 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not an UTF-8 system, cannot print qrcode");
-        if (!colors_enabled())
+        if (check_tty && !colors_enabled())
                 return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Colors are disabled, cannot print qrcode");
 
         r = dlopen_qrencode();
index ee58294436bf80a91e094a2047d5efdfa60de66f..89a15bb3f5e44868f2a6fb2ce81dd897b529470d 100644 (file)
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
-
 #pragma once
+
+#include <stdbool.h>
 #include <stdio.h>
 #include <errno.h>
 #include <limits.h>
@@ -8,15 +9,29 @@
 #if HAVE_QRENCODE
 int dlopen_qrencode(void);
 
-int print_qrcode_full(FILE *out, const char *header, const char *string, unsigned row, unsigned column, unsigned tty_width, unsigned tty_height);
-static inline int print_qrcode(FILE *out, const char *header, const char *string) {
-        return print_qrcode_full(out, header, string, UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX);
-}
+int print_qrcode_full(
+                FILE *out,
+                const char *header,
+                const char *string,
+                unsigned row,
+                unsigned column,
+                unsigned tty_width,
+                unsigned tty_height,
+                bool check_tty);
 #else
-static inline int print_qrcode_full(FILE *out, const char *header, const char *string, unsigned row, unsigned column, unsigned tty_width, unsigned tty_height) {
+static inline int print_qrcode_full(
+                FILE *out,
+                const char *header,
+                const char *string,
+                unsigned row,
+                unsigned column,
+                unsigned tty_width,
+                unsigned tty_height,
+                bool check_tty) {
         return -EOPNOTSUPP;
 }
+#endif
+
 static inline int print_qrcode(FILE *out, const char *header, const char *string) {
-        return -EOPNOTSUPP;
+        return print_qrcode_full(out, header, string, UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX, true);
 }
-#endif