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)16int 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