text: /*
    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 "fuse_lowlevel.h"
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <errno.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)) {
  		struct fuse_chan *tmpch = ch;
  		struct fuse_buf fbuf = {
  			.mem = buf,
  			.size = bufsize,
  		};
  
  		res = fuse_session_receive_buf(se, &fbuf, &tmpch);
  
  		if (res == -EINTR)
  			continue;
  		if (res <= 0)
  			break;
  
  		fuse_session_process_buf(se, &fbuf, tmpch);
  	}
  
  	free(buf);
  	fuse_session_reset(se);
  	return res < 0 ? -1 : 0;
  }
  