X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fclose.c;h=afa8f64058cb9dd16f1135bcf06131993c2c221a;hb=abe9c758009394a09d0cb84cdaae37e5752953f2;hp=79313c0082c29519f09415037012581c25a46e66;hpb=11ee0e1340f95ccb9954e522f6e003b3125eb109;p=gnulib.git diff --git a/lib/close.c b/lib/close.c index 79313c008..afa8f6405 100644 --- a/lib/close.c +++ b/lib/close.c @@ -1,5 +1,5 @@ /* close replacement. - Copyright (C) 2008 Free Software Foundation, Inc. + Copyright (C) 2008-2010 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 @@ -19,47 +19,7 @@ /* Specification. */ #include -#if GNULIB_SYS_SOCKET -# define WIN32_LEAN_AND_MEAN -# include -#endif - -#if HAVE__GL_CLOSE_FD_MAYBE_SOCKET - -/* Get set_winsock_errno, FD_TO_SOCKET etc. */ -#include "w32sock.h" - -int -_gl_close_fd_maybe_socket (int fd) -{ - SOCKET sock = FD_TO_SOCKET (fd); - WSANETWORKEVENTS ev; - - ev.lNetworkEvents = 0xDEADBEEF; - WSAEnumNetworkEvents (sock, NULL, &ev); - if (ev.lNetworkEvents != 0xDEADBEEF) - { - /* FIXME: other applications, like squid, use an undocumented - _free_osfhnd free function. But this is not enough: The 'osfile' - flags for fd also needs to be cleared, but it is hard to access it. - Instead, here we just close twice the file descriptor. */ - if (closesocket (sock)) - { - set_winsock_errno (); - return -1; - } - else - { - /* This call frees the file descriptor and does a - CloseHandle ((HANDLE) _get_osfhandle (fd)), which fails. */ - _close (fd); - return 0; - } - } - else - return _close (fd); -} -#endif +#include "close-hook.h" /* Override close() to call into other gnulib modules. */ @@ -67,13 +27,13 @@ int rpl_close (int fd) #undef close { -#if HAVE__GL_CLOSE_FD_MAYBE_SOCKET - int retval = _gl_close_fd_maybe_socket (fd); +#if WINDOWS_SOCKETS + int retval = execute_all_close_hooks (fd); #else int retval = close (fd); #endif -#ifdef FCHDIR_REPLACEMENT +#if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif