The branch, master has been updated
       via  76baedf swrap: Remove deprecated functions.
       via  fe9d674 swrap: Use swrap structure for writev.
       via  5387e90 swrap: Use swrap structure for socket.
       via  d5581e7 swrap: Use swrap structure for setsockopt.
       via  156ba02 swrap: Use swrap structure for sendto.
       via  bb16b46 swrap: Use swrap structure for sendmsg.
       via  f146e8f swrap: Use swrap structure for send.
       via  9edc0af swrap: Use swrap structure for recvfrom.
       via  063c81a swrap: Use swrap structure for recv.
       via  bc81181 swrap: Use swrap structure for readv.
       via  7c271fd swrap: Use swrap structure for read.
       via  134903a swrap: Use swrap structure for listen.
       via  a1e494b swrap: Use swrap structure for ioctl.
       via  e0767c2 swrap: Use swrap structure for getsockopt.
       via  8745a7f swrap: Use swrap structure for getsockname.
       via  ee6466e swrap: Use swrap structure for getpeername.
       via  9a391ba swrap: Use swrap structure for dup2.
       via  2cd7116 swrap: Use swrap structure for dup.
       via  8e1dcb5 swrap: Use swrap structure for connect.
       via  0beaff2 swrap: Use swrap structure for close.
       via  19ada82 swrap: Use swrap structure for bind.
       via  bc5ff6a swrap: Use swrap structure for accept.
       via  0e3ebfe swrap: Add swrap_init() and swrap_enabled().
       via  2ca8c44 swrap: Add swrap_libc_init() function.
       via  fcbfac3 swrap: Add a swrap structure.
       via  883231b Add .gitignore.
       via  6dddbf0 cmake: Set _FORTIFY_SOURCE only for optimized builds.
      from  2af983f tests: Fix test on Solaris.

http://gitweb.samba.org/?p=socket_wrapper.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 76baedfc887b61c8b98d37b21348cb49c1545381
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:55:43 2013 +0100

    swrap: Remove deprecated functions.

commit fe9d674f431957f4068e5ad512abd7db4cf7cd35
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:54:49 2013 +0100

    swrap: Use swrap structure for writev.

commit 5387e90765707cc14c8d6d010134ec8c452570f7
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:54:17 2013 +0100

    swrap: Use swrap structure for socket.

commit d5581e77abb06960868798f2f5f2263626d57003
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:53:01 2013 +0100

    swrap: Use swrap structure for setsockopt.

commit 156ba02ef15dcdf0d45e3be9fe06fe8acccf5607
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:51:21 2013 +0100

    swrap: Use swrap structure for sendto.

commit bb16b4616bc07a506ff99e50477abb9407722688
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:50:15 2013 +0100

    swrap: Use swrap structure for sendmsg.

commit f146e8ff232566fb50bb460649280cf4953d6446
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:49:27 2013 +0100

    swrap: Use swrap structure for send.

commit 9edc0af55a62b06e3dd41d2ad388064b2c1a3a79
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:47:47 2013 +0100

    swrap: Use swrap structure for recvfrom.

commit 063c81a918b899b35645d238063f9c6a11881a32
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:46:26 2013 +0100

    swrap: Use swrap structure for recv.

commit bc81181b2dfea7eb99cec9003f62705f6797d0dc
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 13:45:19 2013 +0100

    swrap: Use swrap structure for readv.

commit 7c271fdbba87b4cc782077126c8ac4b0795b6b29
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:19:48 2013 +0100

    swrap: Use swrap structure for read.

commit 134903a7c4622a7971e7d4cc7f0fbfc1350beb82
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:18:31 2013 +0100

    swrap: Use swrap structure for listen.

commit a1e494ba5d4a7badafc0c3debfddfd9f6d3e4e61
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:17:27 2013 +0100

    swrap: Use swrap structure for ioctl.

commit e0767c253ec920044c93b8c14cdf64e953fc8e49
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:14:32 2013 +0100

    swrap: Use swrap structure for getsockopt.

commit 8745a7f2752a747655499ecc290c91390e4caaa7
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:13:04 2013 +0100

    swrap: Use swrap structure for getsockname.

commit ee6466ee26d8642137959d8d17029736a35cdb96
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:11:57 2013 +0100

    swrap: Use swrap structure for getpeername.

commit 9a391bab56829a6881b48de96a86b7cba1668d45
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:11:01 2013 +0100

    swrap: Use swrap structure for dup2.

commit 2cd71169229374e0b83dbc2a4bcdd2d84a4aad6a
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:10:10 2013 +0100

    swrap: Use swrap structure for dup.

commit 8e1dcb5295bb032ea2774b2d07ba11db4b8854c0
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:08:21 2013 +0100

    swrap: Use swrap structure for connect.

commit 0beaff21197b4bc23100eac025c08f0e957243e8
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:07:27 2013 +0100

    swrap: Use swrap structure for close.

commit 19ada82dbdab1d01fe8b449ab5b2448ffeac51b5
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:05:24 2013 +0100

    swrap: Use swrap structure for bind.

commit bc5ff6a765847bee90001014a195f728585ad98c
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:04:01 2013 +0100

    swrap: Use swrap structure for accept.

commit 0e3ebfe55b7afd62c232f360cf930bdf41cea785
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 11:58:21 2013 +0100

    swrap: Add swrap_init() and swrap_enabled().

commit 2ca8c448104fa30cb9c102332a2e6a37596b858d
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 11:41:39 2013 +0100

    swrap: Add swrap_libc_init() function.

commit fcbfac342e4bef9c4d0741f249ce395a342b6d9a
Author: Andreas Schneider <[email protected]>
Date:   Wed Dec 4 18:19:59 2013 +0100

    swrap: Add a swrap structure.

commit 883231bbf092faf298bef89f2835e335582aa98e
Author: Andreas Schneider <[email protected]>
Date:   Thu Dec 5 12:08:49 2013 +0100

    Add .gitignore.

commit 6dddbf00c37fb22f08ff422195ed278c2aea8379
Author: Andreas Schneider <[email protected]>
Date:   Wed Dec 4 17:41:05 2013 +0100

    cmake: Set _FORTIFY_SOURCE only for optimized builds.

-----------------------------------------------------------------------

Summary of changes:
 .gitignore                              |    9 +
 cmake/Modules/DefineCompilerFlags.cmake |    6 +-
 config.h.cmake                          |    1 +
 src/socket_wrapper.c                    |  614 ++++++++++++++-----------------
 4 files changed, 290 insertions(+), 340 deletions(-)
 create mode 100644 .gitignore


Changeset truncated at 500 lines:

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..8fd1310
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,9 @@
+*.a
+*.o
+.*
+*.swp
+*~$
+build
+obj
+cscope.*
+tags
diff --git a/cmake/Modules/DefineCompilerFlags.cmake 
b/cmake/Modules/DefineCompilerFlags.cmake
index 582ea1c..0ab8802 100644
--- a/cmake/Modules/DefineCompilerFlags.cmake
+++ b/cmake/Modules/DefineCompilerFlags.cmake
@@ -28,10 +28,10 @@ if (UNIX AND NOT WIN32)
 
         if (CMAKE_BUILD_TYPE)
             string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE_LOWER)
-            if (NOT CMAKE_BUILD_TYPE_LOWER MATCHES debug)
-                check_c_compiler_flag("-D_FORTIFY_SOURCE=2" 
WITH_FORTIFY_SOURCE)
+            if (CMAKE_BUILD_TYPE_LOWER MATCHES 
(release|relwithdebinfo|minsizerel))
+                check_c_compiler_flag("-Wp,-D_FORTIFY_SOURCE=2" 
WITH_FORTIFY_SOURCE)
                 if (WITH_FORTIFY_SOURCE)
-                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -D_FORTIFY_SOURCE=2")
+                    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} 
-Wp,-D_FORTIFY_SOURCE=2")
                 endif (WITH_FORTIFY_SOURCE)
             endif()
         endif()
diff --git a/config.h.cmake b/config.h.cmake
index d47478b..3def5e7 100644
--- a/config.h.cmake
+++ b/config.h.cmake
@@ -38,6 +38,7 @@
 #cmakedefine HAVE_IPV6 1
 
 #cmakedefine HAVE_APPLE 1
+#cmakedefine HAVE_LIBSOCKET 1
 
 /*************************** ENDIAN *****************************/
 
diff --git a/src/socket_wrapper.c b/src/socket_wrapper.c
index bf4828d..4f31311 100644
--- a/src/socket_wrapper.c
+++ b/src/socket_wrapper.c
@@ -62,6 +62,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <stdarg.h>
+#include <stdbool.h>
 #include <unistd.h>
 
 enum swrap_dbglvl_e {
@@ -269,344 +270,241 @@ static void swrap_log(enum swrap_dbglvl_e dbglvl, const 
char *format, ...)
 
 #include <dlfcn.h>
 
-#define LIBC_NAME "libc.so"
+struct swrap_libc_fns {
+       int (*libc_accept)(int sockfd,
+                          struct sockaddr *addr,
+                          socklen_t *addrlen);
+       int (*libc_bind)(int sockfd,
+                        const struct sockaddr *addr,
+                        socklen_t addrlen);
+       int (*libc_close)(int fd);
+       int (*libc_connect)(int sockfd,
+                           const struct sockaddr *addr,
+                           socklen_t addrlen);
+       int (*libc_dup)(int fd);
+       int (*libc_dup2)(int oldfd, int newfd);
+       int (*libc_getpeername)(int sockfd,
+                               struct sockaddr *addr,
+                               socklen_t *addrlen);
+       int (*libc_getsockname)(int sockfd,
+                               struct sockaddr *addr,
+                               socklen_t *addrlen);
+       int (*libc_getsockopt)(int sockfd,
+                              int level,
+                              int optname,
+                              void *optval,
+                              socklen_t *optlen);
+       int (*libc_ioctl)(int d, unsigned long int request, ...);
+       int (*libc_listen)(int sockfd, int backlog);
+       int (*libc_read)(int fd, void *buf, size_t count);
+       ssize_t (*libc_readv)(int fd, const struct iovec *iov, int iovcnt);
+       int (*libc_recv)(int sockfd, void *buf, size_t len, int flags);
+       int (*libc_recvfrom)(int sockfd,
+                            void *buf,
+                            size_t len,
+                            int flags,
+                            struct sockaddr *src_addr,
+                            socklen_t *addrlen);
+       int (*libc_send)(int sockfd, const void *buf, size_t len, int flags);
+       int (*libc_sendmsg)(int sockfd, const struct msghdr *msg, int flags);
+       int (*libc_sendto)(int sockfd,
+                          const void *buf,
+                          size_t len,
+                          int flags,
+                          const  struct sockaddr *dst_addr,
+                          socklen_t addrlen);
+       int (*libc_setsockopt)(int sockfd,
+                              int level,
+                              int optname,
+                              const void *optval,
+                              socklen_t optlen);
+       int (*libc_socket)(int domain, int type, int protocol);
+       ssize_t (*libc_writev)(int fd, const struct iovec *iov, int iovcnt);
+};
 
-#ifndef HAVE_APPLE
-static void *libc_hnd;
+struct swrap {
+       void *libc_handle;
+       void *libsocket_handle;
 
-static int libc_dlopen(void)
-{
-       unsigned int i;
-       int flags = RTLD_LAZY;
+       bool initialised;
+       bool enabled;
 
-#ifdef RTLD_DEEPBIND
-       flags |= RTLD_DEEPBIND;
-#endif
+       char *socket_dir;
 
-       if (libc_hnd != NULL) {
-               return 0;
-       }
-
-       for (libc_hnd = NULL, i = 10; libc_hnd == NULL; i--) {
-               char soname[256] = {0};
+       struct swrap_libc_fns fns;
+};
 
-               snprintf(soname, sizeof(soname), "%s.%u", LIBC_NAME, i);
-               libc_hnd = dlopen(soname, flags);
-       }
+static struct swrap swrap;
 
-       if (libc_hnd == NULL) {
-               SWRAP_LOG(SWRAP_LOG_ERROR,
-                         "Failed to dlopen %s.%u: %s\n",
-                         LIBC_NAME, i, dlerror());
-               exit(-1);
-       }
+/* prototypes */
+static const char *socket_wrapper_dir(void);
 
-       return 0;
-}
-#endif
+#define LIBC_NAME "libc.so"
 
-static void *libc_dlsym(const char *name)
+static void *swrap_libc_fn(void *handle, const char *fn_name)
 {
        void *func;
 
-#ifdef HAVE_APPLE
-       func = dlsym(RTLD_NEXT, name);
-#else
-       libc_dlopen();
-
-       func = dlsym(libc_hnd, name);
-#endif
+       if (handle == NULL) {
+               return NULL;
+       }
 
+       func = dlsym(handle, fn_name);
        if (func == NULL) {
                SWRAP_LOG(SWRAP_LOG_ERROR,
-                         "Failed to find %s in %s: %s\n",
-                         name, LIBC_NAME, dlerror());
+                         "Failed to find %s: %s\n",
+                         fn_name, dlerror());
                exit(-1);
        }
 
        return func;
 }
 
-static int (*libc_accept)(int sockfd,
-                         struct sockaddr *addr,
-                         socklen_t *addrlen);
-
-static int real_accept(int sockfd,
-                      struct sockaddr *addr,
-                      socklen_t *addrlen)
+static void swrap_libc_init(void)
 {
-       if (libc_accept == NULL) {
-               *(void **)(&libc_accept) = libc_dlsym("accept");
-       }
-
-       return libc_accept(sockfd, addr, addrlen);
-}
-
-static int (*libc_bind)(int sockfd,
-                       const struct sockaddr *addr,
-                       socklen_t addrlen);
+       int i;
+       int flags = RTLD_LAZY;
+       void *handle;
 
-static int real_bind(int sockfd,
-                    const struct sockaddr *addr,
-                    socklen_t addrlen)
-{
-       if (libc_bind == NULL) {
-               *(void **)(&libc_bind) = libc_dlsym("bind");
-       }
+#ifdef HAVE_APPLE
+       handle = RTLD_NEXT;
+#else /* !HAVE_APPLE */
 
-       return libc_bind(sockfd, addr, addrlen);
-}
+#ifdef RTLD_DEEPBIND
+       flags |= RTLD_DEEPBIND;
+#endif
 
-static int (*libc_close)(int fd);
+       /* Load libc.so */
+       for (swrap.libc_handle = NULL, i = 10; swrap.libc_handle == NULL && i 
>= 0; i--) {
+               char soname[256] = {0};
 
-static int real_close(int fd)
-{
-       if (libc_close == NULL) {
-               *(void **)(&libc_close) = libc_dlsym("close");
+               snprintf(soname, sizeof(soname), "%s.%d", LIBC_NAME, i);
+               swrap.libc_handle = dlopen(soname, flags);
        }
 
-       return libc_close(fd);
-}
-
-static int (*libc_connect)(int sockfd,
-                          const struct sockaddr *addr,
-                          socklen_t addrlen);
-
-static int real_connect(int sockfd,
-                       const struct sockaddr *addr,
-                       socklen_t addrlen)
-{
-       if (libc_connect == NULL) {
-               *(void **)(&libc_connect) = libc_dlsym("connect");
+       if (swrap.libc_handle == NULL) {
+               SWRAP_LOG(SWRAP_LOG_ERROR,
+                         "Failed to dlopen %s.%d: %s\n",
+                         LIBC_NAME, i, dlerror());
+               exit(-1);
        }
 
-       return libc_connect(sockfd, addr, addrlen);
-}
-
-static int (*libc_dup)(int fd);
+#ifdef HAVE_LIBSOCKET
+       for (swrap.libsocket_handle = NULL, i = 10; swrap.libsocket_handle == 
NULL && i >= 0; i--) {
+               char soname[256] = {0};
+                i = 1;
 
-static int real_dup(int fd)
-{
-       if (libc_dup == NULL) {
-               *(void **)(&libc_dup) = libc_dlsym("dup");
+               snprintf(soname, sizeof(soname), "libsocket.so.%d", i);
+               swrap.libsocket_handle = dlopen(soname, flags);
        }
 
-       return libc_dup(fd);
-}
-
-static int (*libc_dup2)(int oldfd, int newfd);
-
-static int real_dup2(int oldfd, int newfd)
-{
-       if (libc_dup2 == NULL) {
-               *(void **)(&libc_dup2) = libc_dlsym("dup2");
+       if (swrap.libsocket_handle == NULL) {
+               SWRAP_LOG(SWRAP_LOG_ERROR,
+                        "Failed to dlopen libsocket.so: %s",
+                        dlerror());
+               exit(-1);
        }
+#endif /* HAVE_LIBSOCKET */
 
-       return libc_dup2(oldfd, newfd);
-}
+#endif /* !HAVE_APPLE */
 
-static int (*libc_getpeername)(int sockfd,
-                              struct sockaddr *addr,
-                              socklen_t *addrlen);
+       /* Load libc functions */
+#ifndef HAVE_APPLE
+       handle = swrap.libc_handle;
+#endif
+       *(void **) (&swrap.fns.libc_close) =
+               swrap_libc_fn(handle, "close");
+       *(void **) (&swrap.fns.libc_dup) =
+               swrap_libc_fn(handle, "dup");
+       *(void **) (&swrap.fns.libc_dup2) =
+               swrap_libc_fn(handle, "dup2");
+       *(void **) (&swrap.fns.libc_ioctl) =
+               swrap_libc_fn(handle, "ioctl");
+       *(void **) (&swrap.fns.libc_read) =
+               swrap_libc_fn(handle, "read");
+       *(void **) (&swrap.fns.libc_readv) =
+               swrap_libc_fn(handle, "readv");
+       *(void **) (&swrap.fns.libc_writev) =
+               swrap_libc_fn(handle, "writev");
+
+       /* Load libsocket funcitons */
+#if !defined(HAVE_APPLE) && defined(HAVE_LIBSOCKET)
+       handle = swrap.libsocket_handle;
+#endif
 
-static int real_getpeername(int sockfd,
-                           struct sockaddr *addr,
-                           socklen_t *addrlen)
-{
-       if (libc_getpeername == NULL) {
-               *(void **)(&libc_getpeername) = libc_dlsym("getpeername");
+       *(void **) (&swrap.fns.libc_accept) =
+               swrap_libc_fn(handle, "accept");
+       *(void **) (&swrap.fns.libc_bind) =
+               swrap_libc_fn(handle, "bind");
+       *(void **) (&swrap.fns.libc_connect) =
+               swrap_libc_fn(handle, "connect");
+       *(void **) (&swrap.fns.libc_getpeername) =
+               swrap_libc_fn(handle, "getpeername");
+       *(void **) (&swrap.fns.libc_getsockname) =
+               swrap_libc_fn(handle, "getsockname");
+       *(void **) (&swrap.fns.libc_getsockopt) =
+               swrap_libc_fn(handle, "getsockopt");
+       *(void **) (&swrap.fns.libc_listen) =
+               swrap_libc_fn(handle, "listen");
+       *(void **) (&swrap.fns.libc_recv) =
+               swrap_libc_fn(handle, "recv");
+       *(void **) (&swrap.fns.libc_recvfrom) =
+               swrap_libc_fn(handle, "recvfrom");
+       *(void **) (&swrap.fns.libc_send) =
+               swrap_libc_fn(handle, "send");
+       *(void **) (&swrap.fns.libc_sendmsg) =
+               swrap_libc_fn(handle, "sendmsg");
+       *(void **) (&swrap.fns.libc_sendto) =
+               swrap_libc_fn(handle, "sendto");
+       *(void **) (&swrap.fns.libc_setsockopt) =
+               swrap_libc_fn(handle, "setsockopt");
+       *(void **) (&swrap.fns.libc_socket) =
+               swrap_libc_fn(handle, "socket");
+}
+
+static void swrap_init(void)
+{
+       if (swrap.initialised) {
+               return;
        }
 
-       return libc_getpeername(sockfd, addr, addrlen);
-}
-
-static int (*libc_getsockname)(int sockfd,
-                              struct sockaddr *addr,
-                              socklen_t *addrlen);
-
-static int real_getsockname(int sockfd,
-                           struct sockaddr *addr,
-                           socklen_t *addrlen)
-{
-       if (libc_getsockname == NULL) {
-               *(void **)(&libc_getsockname) = libc_dlsym("getsockname");
+       swrap.socket_dir = strdup(socket_wrapper_dir());
+       if (swrap.socket_dir != NULL) {
+               swrap.enabled = true;
        }
 
-       return libc_getsockname(sockfd, addr, addrlen);
-}
+       swrap_libc_init();
 
-static int (*libc_getsockopt)(int sockfd,
-                             int level,
-                             int optname,
-                             void *optval,
-                             socklen_t *optlen);
+       swrap.initialised = true;
+}
 
-static int real_getsockopt(int sockfd,
-                          int level,
-                          int optname,
-                          void *optval,
-                          socklen_t *optlen)
+static int swrap_enabled(void)
 {
-       if (libc_getsockopt == NULL) {
-               *(void **)(&libc_getsockopt) = libc_dlsym("getsockopt");
-       }
+       swrap_init();
 
-       return libc_getsockopt(sockfd, level, optname, optval, optlen);
+       return swrap.enabled ? 1 : 0;
 }
 
-static int (*libc_ioctl)(int d, unsigned long int request, ...);
-
-static int real_vioctl(int d, unsigned long int request, va_list ap) {
+static int libc_vioctl(int d, unsigned long int request, va_list ap)
+{
        long int args[4];
        int rc;
        int i;
 
-       if (libc_ioctl == NULL) {
-               *(void **)(&libc_ioctl) = libc_dlsym("ioctl");
-       }
-
        for (i = 0; i < 4; i++) {
                args[i] = va_arg(ap, long int);
        }
 
-       rc = libc_ioctl(d, request, args[0], args[1], args[2], args[3]);
+       rc = swrap.fns.libc_ioctl(d,
+                                 request,
+                                 args[0],
+                                 args[1],
+                                 args[2],
+                                 args[3]);
 
        return rc;
 }
 
-static int (*libc_listen)(int sockfd, int backlog);
-
-static int real_listen(int sockfd, int backlog)
-{
-       if (libc_listen == NULL) {
-               *(void **)(&libc_listen) = libc_dlsym("listen");
-       }
-
-       return libc_listen(sockfd, backlog);
-}
-
-static int (*libc_read)(int fd, void *buf, size_t count);
-
-static int real_read(int fd, void *buf, size_t count)
-{
-       if (libc_read == NULL) {
-               *(void **)(&libc_read) = libc_dlsym("read");
-       }
-
-       return libc_read(fd, buf, count);
-}
-
-static ssize_t (*libc_readv)(int fd, const struct iovec *iov, int iovcnt);
-
-static ssize_t real_readv(int fd, const struct iovec *iov, int iovcnt)
-{
-       if (libc_readv == NULL) {
-               *(void **)(&libc_readv) = libc_dlsym("readv");
-       }
-
-       return libc_readv(fd, iov, iovcnt);
-}
-
-static int (*libc_recv)(int sockfd, void *buf, size_t len, int flags);
-
-static int real_recv(int sockfd, void *buf, size_t len, int flags)
-{
-       if (libc_recv == NULL) {
-               *(void **)(&libc_recv) = libc_dlsym("recv");
-       }
-
-       return libc_recv(sockfd, buf, len, flags);
-}
-
-static int (*libc_recvfrom)(int sockfd, void *buf, size_t len, int flags,
-                           struct sockaddr *src_addr, socklen_t *addrlen);
-
-static int real_recvfrom(int sockfd, void *buf, size_t len, int flags,
-                        struct sockaddr *src_addr, socklen_t *addrlen)
-{
-       if (libc_recvfrom == NULL) {
-               *(void **)(&libc_recvfrom) = libc_dlsym("recvfrom");
-       }
-
-       return libc_recvfrom(sockfd, buf, len, flags, src_addr, addrlen);
-}
-


-- 
Socket Wrapper Repository

Reply via email to