From 5a64c86936477ecea5cc1fb8dbc79faf522cf370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?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. --- src/journal/bsod.c | 4 +++- src/shared/qrcode-util.c | 13 +++++++++++-- src/shared/qrcode-util.h | 33 ++++++++++++++++++++++++--------- 3 files changed, 38 insertions(+), 12 deletions(-) diff --git a/src/journal/bsod.c b/src/journal/bsod.c index cdf9e4874c3..c76b04718ee 100644 --- a/src/journal/bsod.c +++ b/src/journal/bsod.c @@ -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"); diff --git a/src/shared/qrcode-util.c b/src/shared/qrcode-util.c index 56eace395e3..afb2875aa06 100644 --- a/src/shared/qrcode-util.c +++ b/src/shared/qrcode-util.c @@ -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(); diff --git a/src/shared/qrcode-util.h b/src/shared/qrcode-util.h index ee58294436b..89a15bb3f5e 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) { - return -EOPNOTSUPP; -} -static inline int print_qrcode(FILE *out, const char *header, const char *string) { +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 print_qrcode_full(out, header, string, UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX, true); +}