summaryrefslogtreecommitdiff
path: root/lib/close.c
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2011-10-22 16:24:32 +0200
committerLudovic Courtès <ludo@gnu.org>2011-10-22 16:24:32 +0200
commit35428fb6b2d269dbfa2eec7d0739aec149bd4cc2 (patch)
tree03146c5871ad9b2167f3dffc89fdbb3082d7fc4e /lib/close.c
parentfe4ea6859e7d19a0fe2694a3fb49f4abb722afc1 (diff)
downloadguile-35428fb6b2d269dbfa2eec7d0739aec149bd4cc2.tar.gz
Update Gnulib to v0.0-6523-gb3609c1.
Diffstat (limited to 'lib/close.c')
-rw-r--r--lib/close.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/lib/close.c b/lib/close.c
index 378c4f145..e8a1ed5cb 100644
--- a/lib/close.c
+++ b/lib/close.c
@@ -19,18 +19,45 @@
/* Specification. */
#include <unistd.h>
+#include <errno.h>
+
#include "fd-hook.h"
+#include "msvc-inval.h"
+
+#undef close
+
+#if HAVE_MSVC_INVALID_PARAMETER_HANDLER
+static int
+close_nothrow (int fd)
+{
+ int result;
+
+ TRY_MSVC_INVAL
+ {
+ result = close (fd);
+ }
+ CATCH_MSVC_INVAL
+ {
+ result = -1;
+ errno = EBADF;
+ }
+ DONE_MSVC_INVAL;
+
+ return result;
+}
+#else
+# define close_nothrow close
+#endif
/* Override close() to call into other gnulib modules. */
int
rpl_close (int fd)
-#undef close
{
#if WINDOWS_SOCKETS
- int retval = execute_all_close_hooks (close, fd);
+ int retval = execute_all_close_hooks (close_nothrow, fd);
#else
- int retval = close (fd);
+ int retval = close_nothrow (fd);
#endif
#if REPLACE_FCHDIR