Mercurial > hg > octave-nkf > gnulib-hg
view lib/sockets.c @ 12482:11bc92a9e2bc
gnulib-common: prefer _GL_UNUSED over _UNUSED_PARAMETER_
There are more contexts where __attribute__((__unused__)) is
useful than just parameter lists. Also, naming the macro
_GL_UNUSED fits with the recent addition of _GL_ARG_NONNULL.
Preserve the name _UNUSED_PARAMETER_ for backwards-compatible
use in external projects.
* m4/gnulib-common.m4 (gl_COMMON): Create a more-appropriately
named alias for __attribute__((__unused__)).
* lib/chown.c: Update client.
* lib/fchmodat.c: Likewise.
* lib/fts.c: Likewise.
* lib/getdate.y: Likewise.
* lib/getgroups.c: Likewise.
* lib/getopt.c: Likewise.
* lib/getugroups.c: Likewise.
* lib/mkdir.c: Likewise.
* lib/mkfifo.c: Likewise.
* lib/mkfifoat.c: Likewise.
* lib/mknod.c: Likewise.
* lib/mknodat.c: Likewise.
* lib/readlink.c: Likewise.
* lib/se-context.in.h: Likewise.
* lib/se-selinux.in.h: Likewise.
* lib/sockets.c: Likewise.
* lib/symlink.c: Likewise.
* lib/symlinkat.c: Likewise.
* lib/unicodeio.c: Likewise.
* lib/unistr.h: Likewise.
* tests/test-areadlink.c: Likewise.
* tests/test-areadlinkat.c: Likewise.
* tests/test-filenamecat.c: Likewise.
* tests/test-fseeko.c: Likewise.
* tests/test-ftello.c: Likewise.
* tests/test-getdate.c: Likewise.
* tests/test-getgroups.c: Likewise.
* tests/test-gethostname.c: Likewise.
* tests/test-quotearg.c: Likewise.
* tests/test-version-etc.c: Likewise.
* tests/test-xalloc-die.c: Likewise.
* tests/test-xfprintf-posix.c: Likewise.
* tests/test-xprintf-posix.c: Likewise.
* tests/test-xvasprintf.c: Likewise.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Tue, 22 Dec 2009 15:14:49 -0700 |
parents | e8d2c6fc33ad |
children | c2cbabec01dd |
line wrap: on
line source
/* sockets.c --- wrappers for Windows socket functions Copyright (C) 2008-2009 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 the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson */ #include <config.h> /* Specification. */ #include "sockets.h" #if WINDOWS_SOCKETS /* This includes winsock2.h on MinGW. */ # include <sys/socket.h> # include "close-hook.h" /* Get set_winsock_errno, FD_TO_SOCKET etc. */ # include "w32sock.h" static int close_fd_maybe_socket (int fd, const struct close_hook *remaining_list) { SOCKET sock; WSANETWORKEVENTS ev; /* Test whether fd refers to a socket. */ sock = FD_TO_SOCKET (fd); ev.lNetworkEvents = 0xDEADBEEF; WSAEnumNetworkEvents (sock, NULL, &ev); if (ev.lNetworkEvents != 0xDEADBEEF) { /* fd refers to a socket. */ /* 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 /* Some other type of file descriptor. */ return execute_close_hooks (fd, remaining_list); } static struct close_hook close_sockets_hook; static int initialized_sockets_version /* = 0 */; #endif /* WINDOWS_SOCKETS */ int gl_sockets_startup (int version _GL_UNUSED) { #if WINDOWS_SOCKETS if (version > initialized_sockets_version) { WSADATA data; int err; err = WSAStartup (version, &data); if (err != 0) return 1; if (data.wVersion < version) return 2; if (initialized_sockets_version == 0) register_close_hook (close_fd_maybe_socket, &close_sockets_hook); initialized_sockets_version = version; } #endif return 0; } int gl_sockets_cleanup (void) { #if WINDOWS_SOCKETS int err; initialized_sockets_version = 0; unregister_close_hook (&close_sockets_hook); err = WSACleanup (); if (err != 0) return 1; #endif return 0; }