bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: dup2 mingw failure


From: Eric Blake
Subject: Re: dup2 mingw failure
Date: Fri, 08 Jan 2010 08:20:14 -0700
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.23) Gecko/20090812 Thunderbird/2.0.0.23 Mnenhy/0.7.6.666

According to Simon Josefsson on 1/8/2010 2:36 AM:
> I got this on MinGW:
> 
> test-dup2.c:140: assertion failed
> FAIL: test-dup2.exe

I wish mingw had a better version number reporting scheme.  I can't
reproduce the failure when I cross-compile from cygwin to mingw, then run
the program natively on Windows (that is, using the mingw libraries that
ship with cygwin 1.7.1), but I'll take your word for it.  Maybe this is a
bug in wine?

>   ASSERT (dup2 (fd, -2) == -1);
> 
> Debugging this, it seems MinGW dup2 returns -2 in this situation.  Any
> ideas?  Is -2 a valid file descriptor on MinGW for some reason?

-2 is not a valid fd, but it does violate POSIX for a proper return value.
 At least it's pretty easy to work around.  I'll push this:

-- 
Don't work too hard, make some time for fun as well!

Eric Blake             address@hidden
From 47723c9e1a8568d455a722421f5250a22197ac70 Mon Sep 17 00:00:00 2001
From: Eric Blake <address@hidden>
Date: Fri, 8 Jan 2010 08:17:00 -0700
Subject: [PATCH] dup2: work around mingw bug

dup2 (fd, -2) returned -2 instead of the proper -1.

* lib/dup2.c (rpl_dup2): Sanitize return value on mingw.
Reported by Simon Josefsson.

Signed-off-by: Eric Blake <address@hidden>
---
 ChangeLog  |    6 ++++++
 lib/dup2.c |    7 +++++++
 2 files changed, 13 insertions(+), 0 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 0363a5b..e9be61a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-01-08  Eric Blake  <address@hidden>
+
+       dup2: work around mingw bug
+       * lib/dup2.c (rpl_dup2): Sanitize return value on mingw.
+       Reported by Simon Josefsson.
+
 2010-01-07  Eric Blake  <address@hidden>

        maint.mk: allow packages to add sc_makefile_check exceptions
diff --git a/lib/dup2.c b/lib/dup2.c
index ef581a7..9b6a8f6 100644
--- a/lib/dup2.c
+++ b/lib/dup2.c
@@ -52,6 +52,13 @@ rpl_dup2 (int fd, int desired_fd)
         }
       return fd;
     }
+  /* Some mingw versions also return the wrong value if desired_fd is
+     negative but not -1.  */
+  if (desired_fd < 0)
+    {
+      errno = EBADF;
+      return -1;
+    }
 # endif
   result = dup2 (fd, desired_fd);
 # ifdef __linux__
-- 
1.6.4.2

Attachment: signature.asc
Description: OpenPGP digital signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]