aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikolaus Rath <Nikolaus@rath.org>2016-10-02 21:22:02 -0700
committerNikolaus Rath <Nikolaus@rath.org>2016-10-02 21:24:43 -0700
commitb082a001c7b11e3cf1d1b53470cb229284bc61cd (patch)
tree3fc9db1eb1295a61e099ec451e6664228341168f
parentba12a8f7e315950e840e942de8c2d36dc78dddf7 (diff)
downloadlibfuse-b082a001c7b11e3cf1d1b53470cb229284bc61cd.tar.gz
Merged fuse_session.c into fuse_lowlevel.c
This distinction no longer makes sens. fuse_lowlevel.c already contains several session related functions, and fuse_session.c contains various stuff that is more related to the channel interface.
-rw-r--r--lib/Makefile.am3
-rw-r--r--lib/fuse_lowlevel.c94
-rw-r--r--lib/fuse_session.c112
3 files changed, 95 insertions, 114 deletions
diff --git a/lib/Makefile.am b/lib/Makefile.am
index 1d50b0e..69e9dc5 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -17,7 +17,7 @@ else
iconv_source =
endif
-libfuse3_la_SOURCES = \
+libfuse3_la_SOURCES = \
fuse.c \
fuse_i.h \
fuse_loop.c \
@@ -25,7 +25,6 @@ libfuse3_la_SOURCES = \
fuse_lowlevel.c \
fuse_misc.h \
fuse_opt.c \
- fuse_session.c \
fuse_signals.c \
buffer.c \
cuse_lowlevel.c \
diff --git a/lib/fuse_lowlevel.c b/lib/fuse_lowlevel.c
index 8ccc733..368ac71 100644
--- a/lib/fuse_lowlevel.c
+++ b/lib/fuse_lowlevel.c
@@ -3055,3 +3055,97 @@ int fuse_req_getgroups(fuse_req_t req, int size, gid_t list[])
return -ENOSYS;
}
#endif
+
+void fuse_session_add_chan(struct fuse_session *se, struct fuse_chan *ch)
+{
+ assert(se->ch == NULL);
+ assert(ch->se == NULL);
+ se->ch = ch;
+ ch->se = se;
+}
+
+void fuse_session_remove_chan(struct fuse_chan *ch)
+{
+ struct fuse_session *se = ch->se;
+ if (se) {
+ assert(se->ch == ch);
+ se->ch = NULL;
+ ch->se = NULL;
+ }
+}
+
+struct fuse_chan *fuse_session_chan(struct fuse_session *se)
+{
+ return se->ch;
+}
+
+int fuse_chan_clearfd(struct fuse_chan *ch)
+{
+ int fd = ch->fd;
+ ch->fd = -1;
+ return fd;
+}
+
+void fuse_session_exit(struct fuse_session *se)
+{
+ se->exited = 1;
+}
+
+void fuse_session_reset(struct fuse_session *se)
+{
+ se->exited = 0;
+}
+
+int fuse_session_exited(struct fuse_session *se)
+{
+ return se->exited;
+}
+
+struct fuse_chan *fuse_chan_new(int fd)
+{
+ struct fuse_chan *ch = (struct fuse_chan *) malloc(sizeof(*ch));
+ if (ch == NULL) {
+ fprintf(stderr, "fuse: failed to allocate channel\n");
+ return NULL;
+ }
+
+ memset(ch, 0, sizeof(*ch));
+ ch->fd = fd;
+ ch->ctr = 1;
+ fuse_mutex_init(&ch->lock);
+
+ return ch;
+}
+
+struct fuse_session *fuse_chan_session(struct fuse_chan *ch)
+{
+ return ch->se;
+}
+
+struct fuse_chan *fuse_chan_get(struct fuse_chan *ch)
+{
+ assert(ch->ctr > 0);
+ pthread_mutex_lock(&ch->lock);
+ ch->ctr++;
+ pthread_mutex_unlock(&ch->lock);
+
+ return ch;
+}
+
+void fuse_chan_put(struct fuse_chan *ch)
+{
+ if (ch) {
+ pthread_mutex_lock(&ch->lock);
+ ch->ctr--;
+ if (!ch->ctr) {
+ pthread_mutex_unlock(&ch->lock);
+ fuse_session_remove_chan(ch);
+ fuse_chan_close(ch);
+ pthread_mutex_destroy(&ch->lock);
+ free(ch);
+ } else {
+ pthread_mutex_unlock(&ch->lock);
+ }
+
+ }
+}
diff --git a/lib/fuse_session.c b/lib/fuse_session.c
deleted file mode 100644
index cdf20f7..0000000
--- a/lib/fuse_session.c
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- FUSE: Filesystem in Userspace
- Copyright (C) 2001-2007 Miklos Szeredi <miklos@szeredi.hu>
-
- This program can be distributed under the terms of the GNU LGPLv2.
- See the file COPYING.LIB
-*/
-
-#include "config.h"
-#include "fuse_i.h"
-#include "fuse_misc.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-#include <errno.h>
-
-
-void fuse_session_add_chan(struct fuse_session *se, struct fuse_chan *ch)
-{
- assert(se->ch == NULL);
- assert(ch->se == NULL);
- se->ch = ch;
- ch->se = se;
-}
-
-void fuse_session_remove_chan(struct fuse_chan *ch)
-{
- struct fuse_session *se = ch->se;
- if (se) {
- assert(se->ch == ch);
- se->ch = NULL;
- ch->se = NULL;
- }
-}
-
-struct fuse_chan *fuse_session_chan(struct fuse_session *se)
-{
- return se->ch;
-}
-
-int fuse_chan_clearfd(struct fuse_chan *ch)
-{
- int fd = ch->fd;
- ch->fd = -1;
- return fd;
-}
-
-void fuse_session_exit(struct fuse_session *se)
-{
- se->exited = 1;
-}
-
-void fuse_session_reset(struct fuse_session *se)
-{
- se->exited = 0;
-}
-
-int fuse_session_exited(struct fuse_session *se)
-{
- return se->exited;
-}
-
-struct fuse_chan *fuse_chan_new(int fd)
-{
- struct fuse_chan *ch = (struct fuse_chan *) malloc(sizeof(*ch));
- if (ch == NULL) {
- fprintf(stderr, "fuse: failed to allocate channel\n");
- return NULL;
- }
-
- memset(ch, 0, sizeof(*ch));
- ch->fd = fd;
- ch->ctr = 1;
- fuse_mutex_init(&ch->lock);
-
- return ch;
-}
-
-struct fuse_session *fuse_chan_session(struct fuse_chan *ch)
-{
- return ch->se;
-}
-
-struct fuse_chan *fuse_chan_get(struct fuse_chan *ch)
-{
- assert(ch->ctr > 0);
- pthread_mutex_lock(&ch->lock);
- ch->ctr++;
- pthread_mutex_unlock(&ch->lock);
-
- return ch;
-}
-
-void fuse_chan_put(struct fuse_chan *ch)
-{
- if (ch) {
- pthread_mutex_lock(&ch->lock);
- ch->ctr--;
- if (!ch->ctr) {
- pthread_mutex_unlock(&ch->lock);
- fuse_session_remove_chan(ch);
- fuse_chan_close(ch);
- pthread_mutex_destroy(&ch->lock);
- free(ch);
- } else {
- pthread_mutex_unlock(&ch->lock);
- }
-
- }
-}