From f23efaf96d3ac667c78cb07a895be8f72b46e808 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Mon, 28 Oct 2024 13:38:58 +0100 Subject: [PATCH] bsod: do not check for color support 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. (cherry picked from commit 5a64c86936477ecea5cc1fb8dbc79faf522cf370) --- src/journal/bsod.c | 4 +++- src/shared/qrcode-util.c | 13 +++++++++++-- src/shared/qrcode-util.h | 31 +++++++++++++++++++++++-------- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/src/journal/bsod.c b/src/journal/bsod.c index b2889f02ed..ae0c1aa374 100644 --- a/src/journal/bsod.c +++ b/src/journal/bsod.c @@ -213,7 +213,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"); diff --git a/src/shared/qrcode-util.c b/src/shared/qrcode-util.c index 9c24ca0cf0..45b7920b48 100644 --- a/src/shared/qrcode-util.c +++ b/src/shared/qrcode-util.c @@ -172,7 +172,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; @@ -180,7 +189,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(); diff --git a/src/shared/qrcode-util.h b/src/shared/qrcode-util.h index ee58294436..89a15bb3f5 100644 --- a/src/shared/qrcode-util.h +++ b/src/shared/qrcode-util.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ - #pragma once + +#include #include #include #include @@ -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 -- 2.25.1