--- /dev/null
+Bottom: 19f8849f48737cbf50102511ff14a78d39040f12
+Top: e61a43e1e4e084e2b3c0a5b0070b81f378686b89
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2012-07-16 15:58:30 -0700
+
+Refresh of transpose
+
+---
+
+diff --git a/src/preload.c b/src/preload.c
+index 14b09b8..3417223 100644
+--- a/src/preload.c
++++ b/src/preload.c
+@@ -285,58 +285,52 @@ transpose_socket(int index, int *fd, enum fd_type new_type)
+ {
+ socklen_t len = 0;
+ int new_fd, param, ret;
++ struct socket_calls *new, *old;
+
+- ret = new_type == fd_rsocket ?
+- real.getsockname(*fd, NULL, &len) : rgetsockname(*fd, NULL, &len);
++ if (new_type == fd_rsocket) {
++ new = &rs;
++ old = ℜ
++ } else {
++ new = ℜ
++ old = &rs;
++ }
++
++ ret = old->getsockname(*fd, NULL, &len);
+ if (ret)
+ return ret;
+
+ param = (len == sizeof(struct sockaddr_in6)) ? PF_INET6 : PF_INET;
+- new_fd = new_type == fd_rsocket ?
+- rsocket(param, SOCK_STREAM, 0) : socket(param, SOCK_STREAM, 0);
++ new_fd = new->socket(param, SOCK_STREAM, 0);
+ if (new_fd < 0)
+ return new_fd;
+
+- ret = new_type == fd_rsocket ?
+- real.fcntl(*fd, F_GETFL) : rcntl(*fd, F_GETFL);
+- if (ret > 0) {
+- ret = new_type == fd_rsocket ?
+- rfcntl(new_fd, F_SETFL, ret) : real.fcntl(new_fd, F_SETFL, ret);
+- }
++ ret = old->fcntl(*fd, F_GETFL);
++ if (ret > 0)
++ ret = new->fcntl(new_fd, F_SETFL, ret);
+ if (ret)
+ goto err;
+
+ len = sizeof param;
+- ret = new_type == fd_rsocket ?
+- real.getsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len) :
+- rgetsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len);
+- if (param && !ret) {
+- ret = new_type == fd_rsocket ?
+- rsetsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len) :
+- real.setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len);
+- }
++ ret = old->getsockopt(*fd, SOL_SOCKET, SO_REUSEADDR, ¶m, &len);
++ if (param && !ret)
++ ret = new->setsockopt(new_fd, SOL_SOCKET, SO_REUSEADDR, ¶m, len);
+ if (ret)
+ goto err;
+
+ len = sizeof param;
+- ret = new_type == fd_rsocket ?
+- real.getsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len) :
+- rgetsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len);
+- if (param && !ret) {
+- ret = new_type == fd_rsocket ?
+- rsetsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len) :
+- real.setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len);
+- }
++ ret = old->getsockopt(*fd, IPPROTO_TCP, TCP_NODELAY, ¶m, &len);
++ if (param && !ret)
++ ret = new->setsockopt(new_fd, IPPROTO_TCP, TCP_NODELAY, ¶m, len);
+ if (ret)
+ goto err;
+
+- new_type == fd_rsocket ? rclose(*fd) : real.close(*fd);
++ old->close(*fd);
+ fd_store(socket, new_fd, new_type);
+ *fd = new_fd;
+ return 0;
+
+ err:
+- new_type == fd_rsocket ? real.close(new_fd) : rclose(new_fd);
++ new->close(new_fd);
+ return ret;
+ }