summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2021-12-12 00:34:15 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2021-12-12 00:34:15 +0100
commitc7b90dc4d10ccc4f95940f42676ff907cee73272 (patch)
tree7f307fce713ba066afb78a256efe1c6b62962a72
parent27df6aeef2d0d4b726a8b3b1ce1b1cafbbce3431 (diff)
downloadbusybox-c7b90dc4d10ccc4f95940f42676ff907cee73272.tar.gz
uudecode: special-case "/dev/stdout", closes 14241
function old new delta uudecode_main 295 322 +27 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--coreutils/uudecode.c11
-rw-r--r--docs/posix_conformance.txt2
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