From c7b90dc4d10ccc4f95940f42676ff907cee73272 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Sun, 12 Dec 2021 00:34:15 +0100 Subject: uudecode: special-case "/dev/stdout", closes 14241 function old new delta uudecode_main 295 322 +27 Signed-off-by: Denys Vlasenko --- coreutils/uudecode.c | 11 ++++++++++- docs/posix_conformance.txt | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/coreutils/uudecode.c b/coreutils/uudecode.c index a607977e9..e90902f52 100644 --- a/coreutils/uudecode.c +++ b/coreutils/uudecode.c @@ -155,7 +155,16 @@ int uudecode_main(int argc UNUSED_PARAM, char **argv) break; } dst_stream = stdout; - if (NOT_LONE_DASH(outname)) { + if (NOT_LONE_DASH(outname) +/* https://pubs.opengroup.org/onlinepubs/9699919799/utilities/uudecode.html + * https://pubs.opengroup.org/onlinepubs/9699919799/utilities/uuencode.html + * The above says that output file name specified in input file + * or overridden by -o OUTFILE can be special "/dev/stdout" string. + * This usually works "implicitly": many systems have /dev/stdout. + * If ENABLE_DESKTOP, support that explicitly: + */ + && (!ENABLE_DESKTOP || strcmp(outname, "/dev/stdout") != 0) + ) { dst_stream = xfopen_for_write(outname); fchmod(fileno(dst_stream), mode & (S_IRWXU | S_IRWXG | S_IRWXO)); } diff --git a/docs/posix_conformance.txt b/docs/posix_conformance.txt index f6e8858cc..5e107d74d 100644 --- a/docs/posix_conformance.txt +++ b/docs/posix_conformance.txt @@ -690,7 +690,7 @@ uniq Busybox specific options: uudecode POSIX options option | exists | compliant | remarks - -o outfile | no | no | + -o outfile | yes | no | uudecode Busybox specific options: None uuencode POSIX options -- cgit v1.2.3