swrap: Improve dup2 to add the dup'd fd after the source fd
authorMichael Adam <obnox@samba.org>
Tue, 16 Aug 2016 09:04:12 +0000 (11:04 +0200)
committerAndreas Schneider <asn@samba.org>
Thu, 20 Oct 2016 08:50:33 +0000 (10:50 +0200)
Pair-Programmed-With: Stefan Metzmacher <metze@samba.org>

Signed-off-by: Michael Adam <obnox@samba.org>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
src/socket_wrapper.c

index 110d9994b164ee31e31f863f2827774bc8d035be..730e3467627fe0e5b10a4f5879b3e4f88bacfefb 100644 (file)
@@ -5203,14 +5203,15 @@ int dup(int fd)
 static int swrap_dup2(int fd, int newfd)
 {
        struct socket_info *si;
-       struct socket_info_fd *fi;
-
-       si = find_socket_info(fd);
+       struct socket_info_fd *src_fi, *fi;
 
-       if (!si) {
+       src_fi = find_socket_info_fd(fd);
+       if (src_fi == NULL) {
                return libc_dup2(fd, newfd);
        }
 
+       si = src_fi->si;
+
        if (fd == newfd) {
                /*
                 * According to the manpage:
@@ -5247,7 +5248,7 @@ static int swrap_dup2(int fd, int newfd)
        /* Make sure we don't have an entry for the fd */
        swrap_remove_stale(fi->fd);
 
-       SWRAP_DLIST_ADD(socket_fds, fi);
+       SWRAP_DLIST_ADD_AFTER(socket_fds, fi, src_fi);
        return fi->fd;
 }