1 /*
2     FUSE: Filesystem in Userspace
3     Copyright (C) 2001-2007  Miklos Szeredi <miklos@szeredi.hu>
4 
5     This program can be distributed under the terms of the GNU LGPLv2.
6     See the file COPYING.LIB
7 */
8 
9 #include "config.h"
10 #include "fuse_lowlevel.h"
11 
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <errno.h>
15 
fuse_session_loop(struct fuse_session * se)16 int fuse_session_loop(struct fuse_session *se)
17 {
18     int res = 0;
19     struct fuse_chan *ch = fuse_session_next_chan(se, NULL);
20     size_t bufsize = fuse_chan_bufsize(ch);
21     char *buf = (char *) malloc(bufsize);
22     if (!buf) {
23         fprintf(stderr, "fuse: failed to allocate read buffer\n");
24         return -1;
25     }
26 
27     while (!fuse_session_exited(se)) {
28         struct fuse_chan *tmpch = ch;
29         res = fuse_chan_recv(&tmpch, buf, bufsize);
30         if (res == -EINTR)
31             continue;
32         if (res <= 0)
33             break;
34         fuse_session_process(se, buf, res, tmpch);
35     }
36 
37     free(buf);
38     fuse_session_reset(se);
39     return res < 0 ? -1 : 0;
40 }
41