1
0
mirror of https://github.com/systemd/systemd.git synced 2025-01-25 10:04:04 +03:00

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.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2024-10-28 13:38:58 +01:00
parent f0764b98e5
commit 5a64c86936
3 changed files with 38 additions and 12 deletions

View File

@ -212,7 +212,9 @@ static int display_emergency_message_fullscreen(const char *message) {
goto cleanup; 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) if (r < 0)
log_warning_errno(r, "QR code could not be printed, ignoring: %m"); log_warning_errno(r, "QR code could not be printed, ignoring: %m");

View File

@ -173,7 +173,16 @@ static void write_qrcode(FILE *output, QRcode *qr, unsigned int row, unsigned in
fflush(output); 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; QRcode* qr;
int r; int r;
@ -181,7 +190,7 @@ int print_qrcode_full(FILE *out, const char *header, const char *string, unsigne
* codes */ * codes */
if (!is_locale_utf8()) if (!is_locale_utf8())
return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Not an UTF-8 system, cannot print qrcode"); 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"); return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "Colors are disabled, cannot print qrcode");
r = dlopen_qrencode(); r = dlopen_qrencode();

View File

@ -1,6 +1,7 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */ /* SPDX-License-Identifier: LGPL-2.1-or-later */
#pragma once #pragma once
#include <stdbool.h>
#include <stdio.h> #include <stdio.h>
#include <errno.h> #include <errno.h>
#include <limits.h> #include <limits.h>
@ -8,15 +9,29 @@
#if HAVE_QRENCODE #if HAVE_QRENCODE
int dlopen_qrencode(void); 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); int print_qrcode_full(
static inline int print_qrcode(FILE *out, const char *header, const char *string) { FILE *out,
return print_qrcode_full(out, header, string, UINT_MAX, UINT_MAX, UINT_MAX, UINT_MAX); const char *header,
} const char *string,
unsigned row,
unsigned column,
unsigned tty_width,
unsigned tty_height,
bool check_tty);
#else #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(
return -EOPNOTSUPP; FILE *out,
} const char *header,
static inline int print_qrcode(FILE *out, const char *header, const char *string) { const char *string,
unsigned row,
unsigned column,
unsigned tty_width,
unsigned tty_height,
bool check_tty) {
return -EOPNOTSUPP; return -EOPNOTSUPP;
} }
#endif #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);
}