123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- From 4cf08811e112100a2b10c60047f3c537ad21d674 Mon Sep 17 00:00:00 2001
- From: David Seifert <soap@gentoo.org>
- Date: Sat, 28 Jan 2023 14:22:42 +0100
- Subject: [PATCH] Use `freopen()` on {stdin,stdout,stderr}
- * ISO C does not guarantee that the standard streams are modifiable
- lvalues. Glibc even calls out this behaviour as non-portable:
- https://www.gnu.org/software/libc/manual/html_node/Standard-Streams.html
- --- a/lib/log/log.c
- +++ b/lib/log/log.c
- @@ -208,7 +208,11 @@ int reopen_standard_stream(FILE **stream, const char *mode)
-
- _check_and_replace_standard_log_streams(old_stream, new_stream);
-
- +#ifdef __GLIBC__
- *stream = new_stream;
- +#else
- + freopen(NULL, mode, *stream);
- +#endif
- return 1;
- }
-
- --- a/tools/lvmcmdline.c
- +++ b/tools/lvmcmdline.c
- @@ -3422,7 +3422,7 @@ static int _check_standard_fds(void)
- int err = is_valid_fd(STDERR_FILENO);
-
- if (!is_valid_fd(STDIN_FILENO) &&
- - !(stdin = fopen(_PATH_DEVNULL, "r"))) {
- + !freopen(_PATH_DEVNULL, "r", stdin)) {
- if (err)
- perror("stdin stream open");
- else
- @@ -3432,7 +3432,7 @@ static int _check_standard_fds(void)
- }
-
- if (!is_valid_fd(STDOUT_FILENO) &&
- - !(stdout = fopen(_PATH_DEVNULL, "w"))) {
- + !freopen(_PATH_DEVNULL, "w", stdout)) {
- if (err)
- perror("stdout stream open");
- /* else no stdout */
- @@ -3440,7 +3440,7 @@ static int _check_standard_fds(void)
- }
-
- if (!is_valid_fd(STDERR_FILENO) &&
- - !(stderr = fopen(_PATH_DEVNULL, "w"))) {
- + !freopen(_PATH_DEVNULL, "w", stderr)) {
- printf("stderr stream open: %s\n",
- strerror(errno));
- return 0;
- --
- 2.39.2
|