Add support for more detailed error codes from main loop
authorNikolaus Rath <Nikolaus@rath.org>
Wed, 16 Nov 2016 20:41:41 +0000 (12:41 -0800)
committerNikolaus Rath <Nikolaus@rath.org>
Wed, 16 Nov 2016 20:41:41 +0000 (12:41 -0800)
ChangeLog.rst
include/fuse.h
include/fuse_lowlevel.h
lib/fuse_i.h
lib/fuse_loop.c
lib/fuse_loop_mt.c
lib/fuse_lowlevel.c

index ed482055bb863d79aec762730fdd8a3db292ba3b..8afe917569ce7913a114602ef83eab2b827c42c8 100644 (file)
@@ -7,6 +7,10 @@ UNRELEASED CHANGES
 
 * Added documentation for FUSE_CAP_FLOCK_LOCKS.
 
+* fuse_loop(), fuse_loop_mt(), fuse_session_loop() and
+  fuse_session_loop_mt() now return -errno instead of -1 in case of
+  failure.
+
 FUSE 3.0.0-rc2 (2016-11-06)
 ===========================
 
index 682f731968b46dc1aa73265029117c128b1bda8e..e99f04d3ba96d29272c98f7ac77e4ad427803bb7 100644 (file)
@@ -828,7 +828,7 @@ void fuse_destroy(struct fuse *f);
  * operations are called.
  *
  * @param f the FUSE handle
- * @return 0 if no error occurred, -1 otherwise
+ * @return 0 if no error occurred, -errno otherwise
  *
  * See also: fuse_loop()
  */
@@ -871,7 +871,7 @@ void fuse_exit(struct fuse *f);
  * @param f the FUSE handle
  * @param clone_fd whether to use separate device fds for each thread
  *                 (may increase performance)
- * @return 0 if no error occurred, -1 otherwise
+ * @return 0 if no error occurred, -errno otherwise
  *
  * See also: fuse_loop()
  */
index 8617f0ec4b86759593d19b550097ace96a2f2e5b..dbf1a2784d1c5073a75b2dce551da61781832587 100644 (file)
@@ -1783,7 +1783,7 @@ int fuse_session_mount(struct fuse_session *se, const char *mountpoint);
  *   fuse_set_signal_handlers() first.
  *
  * @param se the session
- * @return 0 on success, -1 on error
+ * @return 0 on success, -errno on failure
  */
 int fuse_session_loop(struct fuse_session *se);
 
@@ -1793,7 +1793,7 @@ int fuse_session_loop(struct fuse_session *se);
  * @param se the session
  * @param clone_fd whether to use separate device fds for each thread
  *                 (may increase performance)
- * @return 0 on success, -1 on error
+ * @return 0 on success, -errno on failure
  */
 int fuse_session_loop_mt(struct fuse_session *se, int clone_fd);
 
index ec29c4e482489a6aac21c9a3b7f4b6058a20aac8..1e99c6f3e7748cba9b548cb32ec58f1d808d87c7 100644 (file)
@@ -63,6 +63,7 @@ struct fuse_session {
        uint64_t notify_ctr;
        struct fuse_notify_req notify_list;
        size_t bufsize;
+       int error;
 };
 
 struct fuse_chan {
index 4a85b1313912b677a3074bba220ec4bac70af014..c847bd80fb64d614720dd710c1d57051372c0765 100644 (file)
@@ -35,6 +35,8 @@ int fuse_session_loop(struct fuse_session *se)
        }
 
        free(fbuf.mem);
+       if(se->error != 0)
+               res = se->error;
        fuse_session_reset(se);
-       return res < 0 ? -1 : 0;
+       return res;
 }
index 54fb56d5f24eaf5cea1c7864c5afe9ae98fc3cfa..42d3e034095070052faed86980cd67770518343e 100644 (file)
@@ -339,6 +339,8 @@ int fuse_session_loop_mt(struct fuse_session *se, int clone_fd)
 
        pthread_mutex_destroy(&mt.lock);
        sem_destroy(&mt.finish);
+       if(se->error != 0)
+               err = se->error;
        fuse_session_reset(se);
        return err;
 }
index 8455669c6a0344f18a377df1affe31a419c8aef9..4cc41933d742479a9c24d0ccb71ff064880d6ff9 100644 (file)
@@ -2940,6 +2940,7 @@ void fuse_session_exit(struct fuse_session *se)
 void fuse_session_reset(struct fuse_session *se)
 {
        se->exited = 0;
+       se->error = 0;
 }
 
 int fuse_session_exited(struct fuse_session *se)