Add a rpc_set_fd() fucntion which can be used to swap the underlying socket file...
authorRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 2 Feb 2014 16:45:21 +0000 (08:45 -0800)
committerRonnie Sahlberg <ronniesahlberg@gmail.com>
Sun, 2 Feb 2014 16:45:21 +0000 (08:45 -0800)
This is mainly needed when having to track and control the file descriptors that are used by libnfs, for example when trying to emulate dup2() ontop
of libnfs.

include/nfsc/libnfs-raw.h
lib/libnfs-win32.def
lib/socket.c

index b62ea70b801bfe1729d8208c94f0773664c85dde..a680f5ca658234f0be170a57d8e29def46ed9920 100644 (file)
@@ -59,6 +59,20 @@ struct nfs_fh3 *nfs_get_fh(struct nfsfh *nfsfh);
  */
 void rpc_set_next_xid(struct rpc_context *rpc, uint32_t xid);
 
+/* This function can be used to set the file descriptor used for
+ * the RPC context. It is primarily useful when emulating dup2()
+ * and similar or where you want full control of the filedescriptor numbers
+ * used by the rpc socket.
+ *
+ * ...
+ * oldfd = rpc_get_fd(rpc);
+ * dup2(oldfd, newfd);
+ * rpc_set_fd(rpc, newfd);
+ * close(oldfd);
+ * ...
+ */
+void rpc_set_fd(struct rpc_context *rpc, int fd);
+
 #define RPC_STATUS_SUCCESS             0
 #define RPC_STATUS_ERROR               1
 #define RPC_STATUS_CANCEL              2
index b1018ec4567e054fdc65e28e1e0a4bb2205e924a..6461d5dabab64fec1850e80a377a9d27de755bf6 100644 (file)
@@ -196,4 +196,5 @@ rpc_rquota1_null_async
 rpc_rquota1_getquota_async
 rpc_rquota1_getactivequota_async
 rpc_service
+rpc_set_fd
 rpc_which_events
index 152dfb4a44df57528ccc7106348bcf32afb14764..b750d6f16d275c1faee7a1d2a300ea0fa1cba296 100644 (file)
@@ -707,3 +707,10 @@ int rpc_queue_length(struct rpc_context *rpc)
        }
        return i;
 }
+
+void rpc_set_fd(struct rpc_context *rpc, int fd)
+{
+       assert(rpc->magic == RPC_CONTEXT_MAGIC);
+
+       rpc->fd = fd;
+}