From 1c35333cd7836c3cc9b39cf6c5599d2221268e94 Mon Sep 17 00:00:00 2001 From: Simon Rowe Date: Thu, 23 Mar 2023 09:57:59 +0000 Subject: [PATCH] cmdline: use freopen() to reopen standard streams In glibc stdin, stdout & stderr are variables that can be assigned to (https://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html) however this not necessarily true of other C libraries. The gentoo musl porting notes (https://wiki.gentoo.org/wiki/Musl_porting_notes) recommend the substitution of stdX = fopen(...) with freopen(..., stdX) Taken from: https://github.com/gentoo/gentoo/blob/master/sys-fs/lvm2/files/lvm2-2.03.14-r1-fopen-to-freopen.patch Signed-off-by: Simon Rowe [Julien: rebased patch on v2.03.27] Signed-off-by: Julien Olivain --- tools/lvmcmdline.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 7209ebd9b..3c0c957b1 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -3378,7 +3378,11 @@ static int _check_standard_fds(void) int err = is_valid_fd(STDERR_FILENO); if (!is_valid_fd(STDIN_FILENO) && +#ifdef __GLIBC__ !(stdin = fopen(_PATH_DEVNULL, "r"))) { +#else + !freopen(_PATH_DEVNULL, "r", stdin)) { +#endif if (err) perror("stdin stream open"); else @@ -3388,7 +3392,11 @@ static int _check_standard_fds(void) } if (!is_valid_fd(STDOUT_FILENO) && +#ifdef __GLIBC__ !(stdout = fopen(_PATH_DEVNULL, "w"))) { +#else + !freopen(_PATH_DEVNULL, "w", stdout)) { +#endif if (err) perror("stdout stream open"); /* else no stdout */ @@ -3396,7 +3404,11 @@ static int _check_standard_fds(void) } if (!is_valid_fd(STDERR_FILENO) && +#ifdef __GLIBC__ !(stderr = fopen(_PATH_DEVNULL, "w"))) { +#else + !freopen(_PATH_DEVNULL, "w", stderr)) { +#endif printf("stderr stream open: %s\n", strerror(errno)); return 0; -- 2.46.2