Added fuse_session_fd()
authorNikolaus Rath <Nikolaus@rath.org>
Mon, 3 Oct 2016 04:48:47 +0000 (21:48 -0700)
committerNikolaus Rath <Nikolaus@rath.org>
Mon, 3 Oct 2016 04:48:47 +0000 (21:48 -0700)
Fixes #59.

ChangeLog.rst
include/fuse_lowlevel.h
lib/fuse_lowlevel.c
lib/fuse_versionscript

index 9afc17311f8f7757d1e0b540069c70f335409864..b93cbb91a2a9e0734ddd685a7356ee33771e4f20 100644 (file)
@@ -84,6 +84,9 @@ Unreleased Changes
 
   File systems that use `fuse_main` are not affected by this change.
 
+  For integration with custom event loops, the new `fuse_session_fd`
+  function provides the file descriptor that's used for communication
+  with the kernel.
 
 * Added *clone_fd* option.  This creates a separate device file
   descriptor for each processing thread, which might improve
index 37655988237f174aa5538e552ffcded560ce7e22..9d57144066deb3c592e83de0502f34eebbd7140e 100644 (file)
@@ -1728,9 +1728,25 @@ void fuse_session_unmount(struct fuse_session *se);
 void fuse_session_destroy(struct fuse_session *se);
 
 /* ----------------------------------------------------------- *
- * Request processing (for custom event loops)                 *
+ * Custom event loop support                                   *
  * ----------------------------------------------------------- */
 
+/**
+ * Return file descriptor for communication with kernel.
+ *
+ * The file selector can be used to integrate FUSE with a custom event
+ * loop. Whenever data is available for reading on the provided fd,
+ * the event loop should call `fuse_session_receive_buf` followed by
+ * `fuse_session_process_buf` to process the request.
+ *
+ * The returned file descriptor is valid until `fuse_session_unmount`
+ * is called.
+ *
+ * @param se the session
+ * @return a file descriptor
+ */
+int fuse_session_fd(struct fuse_session *se);
+
 /**
  * Process a raw request supplied in a generic buffer
  *
index 368ac71047784c39b2329cbc11e299e53fe4200e..375ac694115bd4d85ec29213b28eef2c39924447 100644 (file)
@@ -2975,6 +2975,11 @@ error_out:
        return -1;
 }
 
+int fuse_session_fd(struct fuse_session *se)
+{
+       return fuse_session_chan(se)->fd;
+}
+
 void fuse_session_unmount(struct fuse_session *se)
 {
        fuse_session_remove_chan(se->ch);
index 43274299dd8e1778ebd55778d85ef3718ceaf7cc..4031664918f79e303d416aea8191c9da9fc6f425 100644 (file)
@@ -19,6 +19,7 @@ FUSE_3.0 {
                fuse_session_loop;
                fuse_session_loop_mt;
                fuse_session_reset;
+               fuse_session_fd;
                fuse_opt_parse;
                fuse_opt_add_opt;
                fuse_opt_add_arg;