Signed-off-by: Leesoo Ahn <[email protected]>
---
 coreutils/printf.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/coreutils/printf.c b/coreutils/printf.c
index a20fc3301..0fe249399 100644
--- a/coreutils/printf.c
+++ b/coreutils/printf.c
@@ -405,6 +405,7 @@ int printf_main(int argc UNUSED_PARAM, char **argv)
        int conv_err;
        char *format;
        char **argv2;
+       int flag;
 
        /* We must check that stdout is not closed.
         * The reason for this is highly non-obvious.
@@ -415,9 +416,15 @@ int printf_main(int argc UNUSED_PARAM, char **argv)
         * even if libc receives EBADF on write attempts, it feels determined
         * to output data no matter what. So it will try later,
         * and possibly will clobber future output. Not good. */
-// TODO: check fcntl() & O_ACCMODE == O_WRONLY or O_RDWR?
-       if (fcntl(1, F_GETFL) == -1)
+       if ((flag = fcntl(STDOUT_FILENO, F_GETFL)) == -1)
                return 1; /* match coreutils 6.10 (sans error msg to stderr) */
+       switch (flag & O_ACCMODE) {
+       case O_WRONLY:
+       case O_RDWR:
+               break;
+       default:
+               return 1;
+       }
        //if (dup2(1, 1) != 1) - old way
        //      return 1;
 
-- 
2.24.1

_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to