socket: Add time64 alias for getsockopt
authorFlorian Weimer <fweimer@redhat.com>
Thu, 22 Jul 2021 17:12:12 +0000 (19:12 +0200)
committerFlorian Weimer <fweimer@redhat.com>
Thu, 22 Jul 2021 17:16:25 +0000 (19:16 +0200)
Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
25 files changed:
socket/Makefile
socket/sys/socket.h
socket/tst-sockopt-time64.c [new file with mode: 0644]
socket/tst-sockopt.c [new file with mode: 0644]
sysdeps/unix/sysv/linux/Versions
sysdeps/unix/sysv/linux/arm/be/libc.abilist
sysdeps/unix/sysv/linux/arm/le/libc.abilist
sysdeps/unix/sysv/linux/csky/libc.abilist
sysdeps/unix/sysv/linux/getsockopt.c
sysdeps/unix/sysv/linux/hppa/libc.abilist
sysdeps/unix/sysv/linux/i386/libc.abilist
sysdeps/unix/sysv/linux/m68k/coldfire/libc.abilist
sysdeps/unix/sysv/linux/m68k/m680x0/libc.abilist
sysdeps/unix/sysv/linux/microblaze/be/libc.abilist
sysdeps/unix/sysv/linux/microblaze/le/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/fpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/mips/mips64/n32/libc.abilist
sysdeps/unix/sysv/linux/nios2/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libc.abilist
sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libc.abilist
sysdeps/unix/sysv/linux/s390/s390-32/libc.abilist
sysdeps/unix/sysv/linux/sh/be/libc.abilist
sysdeps/unix/sysv/linux/sh/le/libc.abilist
sysdeps/unix/sysv/linux/sparc/sparc32/libc.abilist

index 27ffe44c052524a6311a2b8049b04190ebe6b6e5..375957601024c12ef54ec8c76fc3db4b85aa87da 100644 (file)
@@ -31,7 +31,14 @@ routines := accept bind connect getpeername getsockname getsockopt   \
            setsockopt shutdown socket socketpair isfdtype opensock     \
            sockatmark accept4 recvmmsg sendmmsg
 
-tests := tst-accept4
+tests := \
+  tst-accept4 \
+  tst-sockopt \
+  # tests
+
+tests-time64 := \
+  tst-sockopt-time64 \
+  # tests
 
 aux     := sa_len
 
index e779dc837f9f654119e4d771168fcf04b6967da7..b37c87e7df8c4bca96ffdbd175cd509dc2f7921b 100644 (file)
@@ -251,9 +251,24 @@ extern int __REDIRECT (recvmmsg, (int __fd, struct mmsghdr *__vmessages,
 /* Put the current value for socket FD's option OPTNAME at protocol level LEVEL
    into OPTVAL (which is *OPTLEN bytes long), and set *OPTLEN to the value's
    actual length.  Returns 0 on success, -1 for errors.  */
+#ifndef __USE_TIME_BITS64
 extern int getsockopt (int __fd, int __level, int __optname,
                       void *__restrict __optval,
                       socklen_t *__restrict __optlen) __THROW;
+#else
+# ifdef __REDIRECT
+extern int __REDIRECT_NTH (getsockopt,
+                          (int __fd, int __level, int __optname,
+                           void *__restrict __optval,
+                           socklen_t *__restrict __optlen),
+                          __getsockopt64);
+# else
+extern int __getsockopt64 (int __fd, int __level, int __optname,
+                          void *__restrict __optval,
+                          socklen_t *__restrict __optlen) __THROW;
+#  define getsockopt __getsockopt64
+# endif
+#endif
 
 /* Set socket FD's option OPTNAME at protocol level LEVEL
    to *OPTVAL (which is OPTLEN bytes long).
diff --git a/socket/tst-sockopt-time64.c b/socket/tst-sockopt-time64.c
new file mode 100644 (file)
index 0000000..f1df48d
--- /dev/null
@@ -0,0 +1 @@
+#include "tst-sockopt.c"
diff --git a/socket/tst-sockopt.c b/socket/tst-sockopt.c
new file mode 100644 (file)
index 0000000..f3ce0bc
--- /dev/null
@@ -0,0 +1,52 @@
+/* Smoke test for socket options.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <support/xsocket.h>
+#include <support/xunistd.h>
+#include <support/check.h>
+#include <netinet/in.h>
+
+static int
+do_test (void)
+{
+  int fd = xsocket (AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+  struct linger value = { -1, -1 };
+  socklen_t optlen = sizeof (value);
+  TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+  TEST_COMPARE (optlen, sizeof (value));
+  TEST_COMPARE (value.l_onoff, 0);
+  TEST_COMPARE (value.l_linger, 0);
+
+  value.l_onoff = 1;
+  value.l_linger = 30;
+  TEST_COMPARE (setsockopt (fd, SOL_SOCKET, SO_LINGER, &value, sizeof (value)),
+                0);
+
+  value.l_onoff = -1;
+  value.l_linger = -1;
+  TEST_COMPARE (getsockopt (fd, SOL_SOCKET, SO_LINGER, &value, &optlen), 0);
+  TEST_COMPARE (optlen, sizeof (value));
+  TEST_COMPARE (value.l_onoff, 1);
+  TEST_COMPARE (value.l_linger, 30);
+
+  xclose (fd);
+  return 0;
+}
+
+#include <support/test-driver.c>
index e03ebf9afffddd68ffbb7327ba35b884e50f33a4..5ff450f476a9ca045aa7560760242f9eebd894e5 100644 (file)
@@ -225,6 +225,7 @@ libc {
     __gai_suspend_time64;
     __getitimer64;
     __getrusage64;
+    __getsockopt64;
     __gettimeofday64;
     __glob64_time64;
     __globfree64_time64;
index a542ad23ceb996bfb3e747bd0aa979f4cdc89eae..e03e92bb74a74043d594db8ddc5022d968c6d53a 100644 (file)
@@ -218,6 +218,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index ea2291995bd02355adcca8210adc0eeff47f3684..9ec8cc841b68026d386898dc581be3489966b12d 100644 (file)
@@ -215,6 +215,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index da3f538b40c28a87308f8fd2104f42f1df30b777..e90ad23a6688fff9f5040d22c28d2b319395cb73 100644 (file)
@@ -2374,6 +2374,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index f86b06dec692dbb39ba639e33c0e774d176e2b1f..57343d432cd3102e0eb48d13f2933a7490337993 100644 (file)
@@ -101,3 +101,6 @@ __getsockopt (int fd, int level, int optname, void *optval, socklen_t *len)
  return r;
 }
 weak_alias (__getsockopt, getsockopt)
+#if __TIMESIZE != 64
+weak_alias (__getsockopt, __getsockopt64)
+#endif
index 91922bdc6561d8735aa874524c1c5f83a7627c21..0d6e59094ee5321cbffee5a68b40fafe2eb2a411 100644 (file)
@@ -2323,6 +2323,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 9e4937c29b48f6a1ba02168fa64fea7bc0ecbba8..368d23caa7f4bf621ddb47b951494dc6fc7c6e14 100644 (file)
@@ -2506,6 +2506,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index af2e09ddb85e6dc4c8f3e8ddced4c476d3acf39e..546f677736d8ca9ea30bc459705fce908effbe14 100644 (file)
@@ -219,6 +219,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 6f416dafd739d3b377ee2d81d190b284cb11d93d..0ae3ce49d9cd0cd6b286232daa4bfe473c697185 100644 (file)
@@ -2450,6 +2450,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 3accefd9ee7fd6dcd821a43be507a293c0172e06..8a6be1fd97bbe9f34e7919685822ca81883fa1bf 100644 (file)
@@ -2423,6 +2423,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index d21f91770062f9df341c56a06c09cbedd7e12c24..a53147b6558f8476bb8d04a2f2385fd1a95c94b2 100644 (file)
@@ -2420,6 +2420,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 2ff15825ecf06d50abcce1a31d69f8baf43a8a90..c5c6f2986285b27e1402644953f8846c49a8a9c1 100644 (file)
@@ -2415,6 +2415,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index b58f60783a862c72f1dd8cc14542d31b04fd95ca..0268a4ee7930833190b4de6a1921fcc224b07ff9 100644 (file)
@@ -2413,6 +2413,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index ae933424bf52c8827e86182b38a340a5afdfa294..19fa4ba58f9e8c847fadaf7154c58da551d55e7c 100644 (file)
@@ -2421,6 +2421,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 91c103fcf0f25e7c2af19981d9437fad6a52cb01..f40f94f27f39a04d292690e9f9e521cf611412ad 100644 (file)
@@ -2462,6 +2462,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 7961a99f4a3257b7df2c29a06aaf241795d8398e..374685c8bb8c7b6e9117b9e8d16ba5044a085bf9 100644 (file)
@@ -2477,6 +2477,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 146e27aac60bf471bcff1424b12b03fcdc57667a..3a1c2709e93ee34e70819fc2a3367b5a25a9926e 100644 (file)
@@ -2510,6 +2510,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 35c59b502bab1440db9523fea377dfbe3154bd2c..cd0dc210fa399329e07f93a25fb1e320c741e590 100644 (file)
@@ -2475,6 +2475,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 9e2c2fbf21da260a80fdc5cefdcff2e2ac50a5ed..69dde2566fe8d049ce772e901184716b8548986e 100644 (file)
@@ -2330,6 +2330,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index f2dd40bc5a5ad7c1f08c909be7b9f796da036f75..0b315be4beb3fe70e0ae431f287296261b2752c9 100644 (file)
@@ -2327,6 +2327,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F
index 567a7d85002ff3750b7d5d0abec842230f65a27c..c74bc8b5816aebd2386f6c8447635c75e3a112fc 100644 (file)
@@ -2470,6 +2470,7 @@ GLIBC_2.34 __futimesat64 F
 GLIBC_2.34 __gai_suspend_time64 F
 GLIBC_2.34 __getitimer64 F
 GLIBC_2.34 __getrusage64 F
+GLIBC_2.34 __getsockopt64 F
 GLIBC_2.34 __gettimeofday64 F
 GLIBC_2.34 __glob64_time64 F
 GLIBC_2.34 __globfree64_time64 F