diff options
author | Mike Frysinger <vapier@gentoo.org> | 2021-05-29 15:57:48 -0400 |
---|---|---|
committer | Mike Frysinger <vapier@gentoo.org> | 2021-09-08 17:48:09 -0400 |
commit | c54d02bce6437ae8f0d21f86cbf62392362d35d8 (patch) | |
tree | e879d62cbe57dbc54959be23831757d6015df741 /gnulib/import | |
parent | 828a9ed9ca86020a6dc08c6582d22b4953039623 (diff) | |
download | fsf-binutils-gdb-c54d02bce6437ae8f0d21f86cbf62392362d35d8.zip fsf-binutils-gdb-c54d02bce6437ae8f0d21f86cbf62392362d35d8.tar.gz fsf-binutils-gdb-c54d02bce6437ae8f0d21f86cbf62392362d35d8.tar.bz2 |
gnulib: import various network functions
Some sim ports use these to provide networking functionality via the
dv-sockser module or via direct emulation for a few ports.
Gdb seems to build just fine still too.
Diffstat (limited to 'gnulib/import')
-rw-r--r-- | gnulib/import/Makefile.am | 60 | ||||
-rw-r--r-- | gnulib/import/Makefile.in | 86 | ||||
-rw-r--r-- | gnulib/import/accept.c | 52 | ||||
-rw-r--r-- | gnulib/import/bind.c | 49 | ||||
-rw-r--r-- | gnulib/import/connect.c | 56 | ||||
-rw-r--r-- | gnulib/import/listen.c | 49 | ||||
-rw-r--r-- | gnulib/import/m4/gnulib-cache.m4 | 12 | ||||
-rw-r--r-- | gnulib/import/m4/gnulib-comp.m4 | 51 | ||||
-rw-r--r-- | gnulib/import/setsockopt.c | 65 | ||||
-rw-r--r-- | gnulib/import/socket.c | 53 |
10 files changed, 497 insertions, 36 deletions
diff --git a/gnulib/import/Makefile.am b/gnulib/import/Makefile.am index dafe63d..5a405cf 100644 --- a/gnulib/import/Makefile.am +++ b/gnulib/import/Makefile.am @@ -33,9 +33,12 @@ # --no-libtool \ # --macro-prefix=gl \ # --no-vc-files \ +# accept \ # alloca \ +# bind \ # canonicalize-lgpl \ # chown \ +# connect \ # count-one-bits \ # dirent \ # dirfd \ @@ -52,6 +55,7 @@ # inet_ntop \ # inttypes \ # limits-h \ +# listen \ # lstat \ # memchr \ # memmem \ @@ -65,7 +69,9 @@ # rename \ # select \ # setenv \ +# setsockopt \ # signal-h \ +# socket \ # strchrnul \ # strerror_r-posix \ # strstr \ @@ -115,6 +121,15 @@ HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header +## begin gnulib module accept + + +EXTRA_DIST += accept.c w32sock.h + +EXTRA_libgnu_a_SOURCES += accept.c + +## end gnulib module accept + ## begin gnulib module alloca @@ -214,6 +229,15 @@ EXTRA_DIST += basename-lgpl.h ## end gnulib module basename-lgpl +## begin gnulib module bind + + +EXTRA_DIST += bind.c w32sock.h + +EXTRA_libgnu_a_SOURCES += bind.c + +## end gnulib module bind + ## begin gnulib module btowc @@ -276,6 +300,15 @@ EXTRA_libgnu_a_SOURCES += closedir.c ## end gnulib module closedir +## begin gnulib module connect + + +EXTRA_DIST += connect.c w32sock.h + +EXTRA_libgnu_a_SOURCES += connect.c + +## end gnulib module connect + ## begin gnulib module count-one-bits libgnu_a_SOURCES += count-one-bits.c @@ -976,6 +1009,15 @@ EXTRA_DIST += limits.in.h ## end gnulib module limits-h +## begin gnulib module listen + + +EXTRA_DIST += listen.c w32sock.h + +EXTRA_libgnu_a_SOURCES += listen.c + +## end gnulib module listen + ## begin gnulib module localcharset libgnu_a_SOURCES += localcharset.c @@ -1731,6 +1773,15 @@ EXTRA_libgnu_a_SOURCES += setlocale-lock.c ## end gnulib module setlocale-null +## begin gnulib module setsockopt + + +EXTRA_DIST += setsockopt.c w32sock.h + +EXTRA_libgnu_a_SOURCES += setsockopt.c + +## end gnulib module setsockopt + ## begin gnulib module signal-h BUILT_SOURCES += signal.h @@ -1821,6 +1872,15 @@ EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use +## begin gnulib module socket + + +EXTRA_DIST += socket.c w32sock.h + +EXTRA_libgnu_a_SOURCES += socket.c + +## end gnulib module socket + ## begin gnulib module sockets libgnu_a_SOURCES += sockets.h sockets.c diff --git a/gnulib/import/Makefile.in b/gnulib/import/Makefile.in index aae9711..3393458 100644 --- a/gnulib/import/Makefile.in +++ b/gnulib/import/Makefile.in @@ -47,9 +47,12 @@ # --no-libtool \ # --macro-prefix=gl \ # --no-vc-files \ +# accept \ # alloca \ +# bind \ # canonicalize-lgpl \ # chown \ +# connect \ # count-one-bits \ # dirent \ # dirfd \ @@ -66,6 +69,7 @@ # inet_ntop \ # inttypes \ # limits-h \ +# listen \ # lstat \ # memchr \ # memmem \ @@ -79,7 +83,9 @@ # rename \ # select \ # setenv \ +# setsockopt \ # signal-h \ +# socket \ # strchrnul \ # strerror_r-posix \ # strstr \ @@ -1820,10 +1826,11 @@ noinst_HEADERS = noinst_LIBRARIES = libgnu.a noinst_LTLIBRARIES = # No GNU Make output. -EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h arpa_inet.in.h \ - assure.h attribute.h basename-lgpl.h btowc.c \ - canonicalize-lgpl.c chdir-long.c chdir-long.h chown.c \ - fchown-stub.c cloexec.h close.c closedir.c dirent-private.h \ +EXTRA_DIST = m4/gnulib-cache.m4 accept.c w32sock.h alloca.c \ + alloca.in.h arpa_inet.in.h assure.h attribute.h \ + basename-lgpl.h bind.c w32sock.h btowc.c canonicalize-lgpl.c \ + chdir-long.c chdir-long.h chown.c fchown-stub.c cloexec.h \ + close.c closedir.c dirent-private.h connect.c w32sock.h \ count-one-bits.h ctype.in.h dirent.in.h dirfd.c dirname.h \ dup.c dup2.c eloop-threshold.h errno.in.h error.c error.h \ exitfail.h fchdir.c fcntl.c fcntl.in.h fd-hook.h fdopendir.c \ @@ -1838,8 +1845,8 @@ EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h arpa_inet.in.h \ glob.in.h hard-locale.h inet_ntop.c intprops.h inttypes.in.h \ isblank.c float+.h isnan.c isnand-nolibm.h isnand.c float+.h \ isnan.c isnanl-nolibm.h isnanl.c cdefs.h libc-config.h \ - limits.in.h localcharset.h locale.in.h lstat.c malloc.c \ - malloca.h math.in.h lc-charset-dispatch.c \ + limits.in.h listen.c w32sock.h localcharset.h locale.in.h \ + lstat.c malloc.c malloca.h math.in.h lc-charset-dispatch.c \ lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h \ mbrtowc.c mbtowc-lock.c mbtowc-lock.h windows-initguard.h \ mbsinit.c mbsrtowcs-impl.h mbsrtowcs-state.c mbsrtowcs.c \ @@ -1852,17 +1859,17 @@ EXTRA_DIST = m4/gnulib-cache.m4 alloca.c alloca.in.h arpa_inet.in.h \ readlink.c realloc.c rename.c dirent-private.h rewinddir.c \ rmdir.c same-inode.h save-cwd.h malloc/scratch_buffer.h \ scratch_buffer.h select.c setenv.c setlocale-lock.c \ - setlocale_null.h windows-initguard.h signal.in.h _Noreturn.h \ - arg-nonnull.h c++defs.h warn-on-use.h w32sock.h stat-w32.c \ - stat-w32.h stat.c stat-time.h stdalign.in.h stdbool.in.h \ - stddef.in.h stdint.in.h stdio.in.h stdlib.in.h strchrnul.c \ - strchrnul.valgrind strdup.c streq.h strerror.c \ - strerror-override.c strerror-override.h strerror_r.c \ - string.in.h strings.in.h strnlen.c strstr.c str-two-way.h \ - strstr.c strtok_r.c sys_random.in.h sys_select.in.h \ - sys_socket.in.h sys_stat.in.h sys_time.in.h sys_types.in.h \ - sys_uio.in.h sys_wait.in.h tempname.h time.in.h time_r.c \ - unistd.in.h unistd--.h unistd-safer.h unsetenv.c \ + setlocale_null.h windows-initguard.h setsockopt.c w32sock.h \ + signal.in.h _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h \ + socket.c w32sock.h w32sock.h stat-w32.c stat-w32.h stat.c \ + stat-time.h stdalign.in.h stdbool.in.h stddef.in.h stdint.in.h \ + stdio.in.h stdlib.in.h strchrnul.c strchrnul.valgrind strdup.c \ + streq.h strerror.c strerror-override.c strerror-override.h \ + strerror_r.c string.in.h strings.in.h strnlen.c strstr.c \ + str-two-way.h strstr.c strtok_r.c sys_random.in.h \ + sys_select.in.h sys_socket.in.h sys_stat.in.h sys_time.in.h \ + sys_types.in.h sys_uio.in.h sys_wait.in.h tempname.h time.in.h \ + time_r.c unistd.in.h unistd--.h unistd-safer.h unsetenv.c \ $(top_srcdir)/import/extra/update-copyright verify.h \ wchar.in.h wctype.in.h windows-initguard.h windows-mutex.c \ windows-mutex.h windows-once.c windows-once.h \ @@ -1912,25 +1919,26 @@ libgnu_a_SOURCES = openat-priv.h openat-proc.c basename-lgpl.c \ dup-safer.c fd-safer.c pipe-safer.c wctype-h.c libgnu_a_LIBADD = $(gl_LIBOBJS) @ALLOCA@ libgnu_a_DEPENDENCIES = $(gl_LIBOBJS) @ALLOCA@ -EXTRA_libgnu_a_SOURCES = alloca.c btowc.c canonicalize-lgpl.c \ - chdir-long.c chown.c fchown-stub.c close.c closedir.c dirfd.c \ - dup.c dup2.c error.c fchdir.c fcntl.c fdopendir.c ffs.c \ - float.c itold.c fnmatch.c fnmatch_loop.c fnmatch.c free.c \ - frexp.c frexp.c frexpl.c fstat.c stat-w32.c at-func.c \ - fstatat.c getcwd.c getcwd-lgpl.c getdelim.c getdtablesize.c \ - getline.c getlogin_r.c getrandom.c gettimeofday.c glob.c \ - glob_pattern_p.c globfree.c inet_ntop.c isblank.c isnan.c \ - isnand.c isnan.c isnanl.c lstat.c malloc.c \ - lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c mbsinit.c \ - mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c memmem.c \ - memmem.c mempcpy.c memrchr.c mkdir.c mkdtemp.c mkostemp.c \ - msvc-inval.c msvc-nothrow.c open.c openat.c opendir.c pipe.c \ - rawmemchr.c readdir.c readlink.c realloc.c rename.c \ - rewinddir.c rmdir.c select.c setenv.c setlocale-lock.c \ - stat-w32.c stat.c strchrnul.c strdup.c strerror.c \ - strerror-override.c strerror_r.c strnlen.c strstr.c strstr.c \ - strtok_r.c time_r.c unsetenv.c windows-mutex.c windows-once.c \ - windows-recmutex.c windows-rwlock.c wmemchr.c wmempcpy.c +EXTRA_libgnu_a_SOURCES = accept.c alloca.c bind.c btowc.c \ + canonicalize-lgpl.c chdir-long.c chown.c fchown-stub.c close.c \ + closedir.c connect.c dirfd.c dup.c dup2.c error.c fchdir.c \ + fcntl.c fdopendir.c ffs.c float.c itold.c fnmatch.c \ + fnmatch_loop.c fnmatch.c free.c frexp.c frexp.c frexpl.c \ + fstat.c stat-w32.c at-func.c fstatat.c getcwd.c getcwd-lgpl.c \ + getdelim.c getdtablesize.c getline.c getlogin_r.c getrandom.c \ + gettimeofday.c glob.c glob_pattern_p.c globfree.c inet_ntop.c \ + isblank.c isnan.c isnand.c isnan.c isnanl.c listen.c lstat.c \ + malloc.c lc-charset-dispatch.c mbrtowc.c mbtowc-lock.c \ + mbsinit.c mbsrtowcs-state.c mbsrtowcs.c mbtowc.c memchr.c \ + memmem.c memmem.c mempcpy.c memrchr.c mkdir.c mkdtemp.c \ + mkostemp.c msvc-inval.c msvc-nothrow.c open.c openat.c \ + opendir.c pipe.c rawmemchr.c readdir.c readlink.c realloc.c \ + rename.c rewinddir.c rmdir.c select.c setenv.c \ + setlocale-lock.c setsockopt.c socket.c stat-w32.c stat.c \ + strchrnul.c strdup.c strerror.c strerror-override.c \ + strerror_r.c strnlen.c strstr.c strstr.c strtok_r.c time_r.c \ + unsetenv.c windows-mutex.c windows-once.c windows-recmutex.c \ + windows-rwlock.c wmemchr.c wmempcpy.c # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression @@ -2042,9 +2050,11 @@ mostlyclean-compile: distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/accept.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/at-func.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basename-lgpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bind.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/btowc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/canonicalize-lgpl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/chdir-long.Po@am__quote@ @@ -2052,6 +2062,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cloexec.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/closedir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/count-one-bits.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirfd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirname-lgpl.Po@am__quote@ @@ -2098,6 +2109,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isnanl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/itold.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lc-charset-dispatch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/listen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lstat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/malloc.Po@am__quote@ @@ -2137,6 +2149,8 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale-lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setlocale_null.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/setsockopt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockets.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-time.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat-w32.Po@am__quote@ diff --git a/gnulib/import/accept.c b/gnulib/import/accept.c new file mode 100644 index 0000000..a7d5743 --- /dev/null +++ b/gnulib/import/accept.c @@ -0,0 +1,52 @@ +/* accept.c --- wrappers for Windows accept function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#undef accept + +int +rpl_accept (int fd, struct sockaddr *addr, socklen_t *addrlen) +{ + SOCKET sock = FD_TO_SOCKET (fd); + + if (sock == INVALID_SOCKET) + { + errno = EBADF; + return -1; + } + else + { + SOCKET fh = accept (sock, addr, addrlen); + if (fh == INVALID_SOCKET) + { + set_winsock_errno (); + return -1; + } + else + return SOCKET_TO_FD (fh); + } +} diff --git a/gnulib/import/bind.c b/gnulib/import/bind.c new file mode 100644 index 0000000..467da95 --- /dev/null +++ b/gnulib/import/bind.c @@ -0,0 +1,49 @@ +/* bind.c --- wrappers for Windows bind function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#undef bind + +int +rpl_bind (int fd, const struct sockaddr *sockaddr, socklen_t len) +{ + SOCKET sock = FD_TO_SOCKET (fd); + + if (sock == INVALID_SOCKET) + { + errno = EBADF; + return -1; + } + else + { + int r = bind (sock, sockaddr, len); + if (r < 0) + set_winsock_errno (); + + return r; + } +} diff --git a/gnulib/import/connect.c b/gnulib/import/connect.c new file mode 100644 index 0000000..6dc1107 --- /dev/null +++ b/gnulib/import/connect.c @@ -0,0 +1,56 @@ +/* connect.c --- wrappers for Windows connect function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#undef connect + +int +rpl_connect (int fd, const struct sockaddr *sockaddr, socklen_t len) +{ + SOCKET sock = FD_TO_SOCKET (fd); + + if (sock == INVALID_SOCKET) + { + errno = EBADF; + return -1; + } + else + { + int r = connect (sock, sockaddr, len); + if (r < 0) + { + /* EINPROGRESS is not returned by WinSock 2.0; for backwards + compatibility, connect(2) uses EWOULDBLOCK. */ + if (WSAGetLastError () == WSAEWOULDBLOCK) + WSASetLastError (WSAEINPROGRESS); + + set_winsock_errno (); + } + + return r; + } +} diff --git a/gnulib/import/listen.c b/gnulib/import/listen.c new file mode 100644 index 0000000..0645e2e --- /dev/null +++ b/gnulib/import/listen.c @@ -0,0 +1,49 @@ +/* listen.c --- wrappers for Windows listen function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#undef listen + +int +rpl_listen (int fd, int backlog) +{ + SOCKET sock = FD_TO_SOCKET (fd); + + if (sock == INVALID_SOCKET) + { + errno = EBADF; + return -1; + } + else + { + int r = listen (sock, backlog); + if (r < 0) + set_winsock_errno (); + + return r; + } +} diff --git a/gnulib/import/m4/gnulib-cache.m4 b/gnulib/import/m4/gnulib-cache.m4 index 5396840..381cdde 100644 --- a/gnulib/import/m4/gnulib-cache.m4 +++ b/gnulib/import/m4/gnulib-cache.m4 @@ -38,9 +38,12 @@ # --no-libtool \ # --macro-prefix=gl \ # --no-vc-files \ +# accept \ # alloca \ +# bind \ # canonicalize-lgpl \ # chown \ +# connect \ # count-one-bits \ # dirent \ # dirfd \ @@ -57,6 +60,7 @@ # inet_ntop \ # inttypes \ # limits-h \ +# listen \ # lstat \ # memchr \ # memmem \ @@ -70,7 +74,9 @@ # rename \ # select \ # setenv \ +# setsockopt \ # signal-h \ +# socket \ # strchrnul \ # strerror_r-posix \ # strstr \ @@ -87,9 +93,12 @@ # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([]) gl_MODULES([ + accept alloca + bind canonicalize-lgpl chown + connect count-one-bits dirent dirfd @@ -106,6 +115,7 @@ gl_MODULES([ inet_ntop inttypes limits-h + listen lstat memchr memmem @@ -119,7 +129,9 @@ gl_MODULES([ rename select setenv + setsockopt signal-h + socket strchrnul strerror_r-posix strstr diff --git a/gnulib/import/m4/gnulib-comp.m4 b/gnulib/import/m4/gnulib-comp.m4 index 54ae5bb..5376a93 100644 --- a/gnulib/import/m4/gnulib-comp.m4 +++ b/gnulib/import/m4/gnulib-comp.m4 @@ -44,6 +44,7 @@ AC_DEFUN([gl_EARLY], AC_REQUIRE([AM_PROG_CC_C_O]) # Code from module absolute-header: + # Code from module accept: # Code from module alloca: # Code from module alloca-opt: # Code from module arpa_inet: @@ -51,6 +52,7 @@ AC_DEFUN([gl_EARLY], # Code from module at-internal: # Code from module attribute: # Code from module basename-lgpl: + # Code from module bind: # Code from module btowc: # Code from module builtin-expect: # Code from module c99: @@ -62,6 +64,7 @@ AC_DEFUN([gl_EARLY], # Code from module cloexec: # Code from module close: # Code from module closedir: + # Code from module connect: # Code from module count-one-bits: # Code from module ctype: # Code from module d-ino: @@ -129,6 +132,7 @@ AC_DEFUN([gl_EARLY], AC_REQUIRE([AC_SYS_LARGEFILE]) # Code from module libc-config: # Code from module limits-h: + # Code from module listen: # Code from module localcharset: # Code from module locale: # Code from module lock: @@ -175,11 +179,13 @@ AC_DEFUN([gl_EARLY], # Code from module select: # Code from module setenv: # Code from module setlocale-null: + # Code from module setsockopt: # Code from module signal-h: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: + # Code from module socket: # Code from module socketlib: # Code from module sockets: # Code from module socklen: @@ -251,10 +257,20 @@ AC_DEFUN([gl_INIT], m4_pushdef([gl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='import' + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([accept]) + fi + gl_SYS_SOCKET_MODULE_INDICATOR([accept]) gl_FUNC_ALLOCA gl_HEADER_ARPA_INET AC_PROG_MKDIR_P AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([bind]) + fi + gl_SYS_SOCKET_MODULE_INDICATOR([bind]) gl_FUNC_BTOWC if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then AC_LIBOBJ([btowc]) @@ -295,6 +311,11 @@ AC_DEFUN([gl_INIT], AC_LIBOBJ([closedir]) fi gl_DIRENT_MODULE_INDICATOR([closedir]) + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([connect]) + fi + gl_SYS_SOCKET_MODULE_INDICATOR([connect]) gl_CTYPE_H gl_CHECK_TYPE_STRUCT_DIRENT_D_INO gl_CHECK_TYPE_STRUCT_DIRENT_D_TYPE @@ -498,6 +519,11 @@ AC_DEFUN([gl_INIT], AC_REQUIRE([gl_LARGEFILE]) gl___INLINE gl_LIMITS_H + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([listen]) + fi + gl_SYS_SOCKET_MODULE_INDICATOR([listen]) gl_LOCALCHARSET dnl For backward compatibility. Some packages still use this. LOCALCHARSET_TESTS_ENVIRONMENT= @@ -685,7 +711,26 @@ AC_DEFUN([gl_INIT], gl_PREREQ_SETLOCALE_LOCK fi gl_LOCALE_MODULE_INDICATOR([setlocale_null]) + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([setsockopt]) + fi + gl_SYS_SOCKET_MODULE_INDICATOR([setsockopt]) gl_SIGNAL_H + AC_REQUIRE([gl_HEADER_SYS_SOCKET]) + if test "$ac_cv_header_winsock2_h" = yes; then + AC_LIBOBJ([socket]) + fi + # When this module is used, sockets may actually occur as file descriptors, + # hence it is worth warning if the modules 'close' and 'ioctl' are not used. + m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) + m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) + AC_REQUIRE([gl_PREREQ_SYS_H_WINSOCK2]) + if test "$ac_cv_header_winsock2_h" = yes; then + UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 + SYS_IOCTL_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=1 + fi + gl_SYS_SOCKET_MODULE_INDICATOR([socket]) AC_REQUIRE([gl_SOCKETLIB]) AC_REQUIRE([gl_SOCKETS]) gl_TYPE_SOCKLEN_T @@ -980,6 +1025,7 @@ AC_DEFUN([gl_FILE_LIST], [ doc/gendocs_template doc/gendocs_template_min lib/_Noreturn.h + lib/accept.c lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h @@ -989,6 +1035,7 @@ AC_DEFUN([gl_FILE_LIST], [ lib/attribute.h lib/basename-lgpl.c lib/basename-lgpl.h + lib/bind.c lib/btowc.c lib/c++defs.h lib/canonicalize-lgpl.c @@ -1000,6 +1047,7 @@ AC_DEFUN([gl_FILE_LIST], [ lib/cloexec.h lib/close.c lib/closedir.c + lib/connect.c lib/count-one-bits.c lib/count-one-bits.h lib/ctype.in.h @@ -1081,6 +1129,7 @@ AC_DEFUN([gl_FILE_LIST], [ lib/lc-charset-dispatch.h lib/libc-config.h lib/limits.in.h + lib/listen.c lib/localcharset.c lib/localcharset.h lib/locale.in.h @@ -1148,7 +1197,9 @@ AC_DEFUN([gl_FILE_LIST], [ lib/setlocale-lock.c lib/setlocale_null.c lib/setlocale_null.h + lib/setsockopt.c lib/signal.in.h + lib/socket.c lib/sockets.c lib/sockets.h lib/stat-time.c diff --git a/gnulib/import/setsockopt.c b/gnulib/import/setsockopt.c new file mode 100644 index 0000000..b6f5dfc --- /dev/null +++ b/gnulib/import/setsockopt.c @@ -0,0 +1,65 @@ +/* setsockopt.c --- wrappers for Windows setsockopt function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get struct timeval. */ +#include <sys/time.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#undef setsockopt + +int +rpl_setsockopt (int fd, int level, int optname, const void *optval, socklen_t optlen) +{ + SOCKET sock = FD_TO_SOCKET (fd); + int r; + + if (sock == INVALID_SOCKET) + { + errno = EBADF; + return -1; + } + else + { + if (level == SOL_SOCKET + && (optname == SO_RCVTIMEO || optname == SO_SNDTIMEO)) + { + const struct timeval *tv = optval; + int milliseconds = tv->tv_sec * 1000 + tv->tv_usec / 1000; + optval = &milliseconds; + r = setsockopt (sock, level, optname, optval, sizeof (int)); + } + else + { + r = setsockopt (sock, level, optname, optval, optlen); + } + + if (r < 0) + set_winsock_errno (); + + return r; + } +} diff --git a/gnulib/import/socket.c b/gnulib/import/socket.c new file mode 100644 index 0000000..f5086ad --- /dev/null +++ b/gnulib/import/socket.c @@ -0,0 +1,53 @@ +/* socket.c --- wrappers for Windows socket function + + Copyright (C) 2008-2021 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 <https://www.gnu.org/licenses/>. */ + +/* Written by Paolo Bonzini */ + +#include <config.h> + +#define WIN32_LEAN_AND_MEAN +/* Get winsock2.h. */ +#include <sys/socket.h> + +/* Get set_winsock_errno, FD_TO_SOCKET etc. */ +#include "w32sock.h" + +#include "sockets.h" + +/* Don't assume that UNICODE is defined. */ +#undef WSASocket +#define WSASocket WSASocketW + +int +rpl_socket (int domain, int type, int protocol) +{ + SOCKET fh; + + gl_sockets_startup (SOCKETS_1_1); + + /* We have to use WSASocket() to create non-overlapped IO sockets. + Overlapped IO sockets cannot be used with read/write. */ + fh = WSASocket (domain, type, protocol, NULL, 0, 0); + + if (fh == INVALID_SOCKET) + { + set_winsock_errno (); + return -1; + } + else + return SOCKET_TO_FD (fh); +} |