diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2005-08-14 23:00:27 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2005-08-14 23:00:27 +0000 |
commit | a148242fb80fa2127fdaf41de63e2d81dc8006ef (patch) | |
tree | 1eda064d419d5b9ef6d99819f7d272a073aa068f /lib/fuse_loop.c | |
parent | 45c5db5475d2aa0a73675f3a5129523f82adfc18 (diff) |
cleanup
Diffstat (limited to 'lib/fuse_loop.c')
-rw-r--r-- | lib/fuse_loop.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/fuse_loop.c b/lib/fuse_loop.c new file mode 100644 index 0000000..f9a05d8 --- /dev/null +++ b/lib/fuse_loop.c @@ -0,0 +1,38 @@ +/* + FUSE: Filesystem in Userspace + Copyright (C) 2001-2005 Miklos Szeredi <miklos@szeredi.hu> + + This program can be distributed under the terms of the GNU LGPL. + See the file COPYING.LIB +*/ + +#include "fuse_lowlevel.h" + +#include <stdio.h> +#include <stdlib.h> + +int fuse_session_loop(struct fuse_session *se) +{ + int res = 0; + struct fuse_chan *ch = fuse_session_next_chan(se, NULL); + size_t bufsize = fuse_chan_bufsize(ch); + char *buf = (char *) malloc(bufsize); + if (!buf) { + fprintf(stderr, "fuse: failed to allocate read buffer\n"); + return -1; + } + + while (!fuse_session_exited(se)) { + res = fuse_chan_receive(ch, buf, bufsize); + if (!res) + continue; + if (res == -1) + break; + fuse_session_process(se, buf, res, ch); + res = 0; + } + + free(buf); + fuse_session_reset(se); + return res; +} |