summaryrefslogtreecommitdiff
path: root/lib/dup2.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2013-01-02 08:37:04 -0800
committerPaul Eggert <eggert@cs.ucla.edu>2013-01-02 08:37:04 -0800
commit9ff99d22a01be4cafc27064ad8474672eb2fe09b (patch)
tree3e8e69c0cbf6db321ef58c9dc5ac6924a5b6f368 /lib/dup2.c
parent09b8afb6c8b235279dac6cdc7ffee68b782712ac (diff)
downloademacs-9ff99d22a01be4cafc27064ad8474672eb2fe09b.tar.gz
emacs-9ff99d22a01be4cafc27064ad8474672eb2fe09b.tar.bz2
emacs-9ff99d22a01be4cafc27064ad8474672eb2fe09b.zip
Merge from gnulib.
Diffstat (limited to 'lib/dup2.c')
-rw-r--r--lib/dup2.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/dup2.c b/lib/dup2.c
index f6d0f1c73c5..9219eb38238 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -1,6 +1,6 @@
/* Duplicate an open file descriptor to a specified file descriptor.
- Copyright (C) 1999, 2004-2007, 2009-2012 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2004-2007, 2009-2013 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -95,7 +95,10 @@ rpl_dup2 (int fd, int desired_fd)
# ifdef F_GETFL
/* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF.
On Cygwin 1.5.x, dup2 (1, 1) returns 0.
+ On Cygwin 1.7.17, dup2 (1, -1) dumps core.
On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */
+ if (desired_fd < 0)
+ fd = desired_fd;
if (fd == desired_fd)
return fcntl (fd, F_GETFL) == -1 ? -1 : fd;
# endif