1*9e564957SAndroid Build Coastguard Worker /* 2*9e564957SAndroid Build Coastguard Worker FUSE: Filesystem in Userspace 3*9e564957SAndroid Build Coastguard Worker Copyright (C) 2001-2007 Miklos Szeredi <[email protected]> 4*9e564957SAndroid Build Coastguard Worker 5*9e564957SAndroid Build Coastguard Worker Implementation of the single-threaded FUSE session loop. 6*9e564957SAndroid Build Coastguard Worker 7*9e564957SAndroid Build Coastguard Worker This program can be distributed under the terms of the GNU LGPLv2. 8*9e564957SAndroid Build Coastguard Worker See the file COPYING.LIB 9*9e564957SAndroid Build Coastguard Worker */ 10*9e564957SAndroid Build Coastguard Worker 11*9e564957SAndroid Build Coastguard Worker #include "fuse_config.h" 12*9e564957SAndroid Build Coastguard Worker #include "fuse_lowlevel.h" 13*9e564957SAndroid Build Coastguard Worker #include "fuse_i.h" 14*9e564957SAndroid Build Coastguard Worker 15*9e564957SAndroid Build Coastguard Worker #include <stdio.h> 16*9e564957SAndroid Build Coastguard Worker #include <stdlib.h> 17*9e564957SAndroid Build Coastguard Worker #include <errno.h> 18*9e564957SAndroid Build Coastguard Worker fuse_session_loop(struct fuse_session * se)19*9e564957SAndroid Build Coastguard Workerint fuse_session_loop(struct fuse_session *se) 20*9e564957SAndroid Build Coastguard Worker { 21*9e564957SAndroid Build Coastguard Worker int res = 0; 22*9e564957SAndroid Build Coastguard Worker struct fuse_buf fbuf = { 23*9e564957SAndroid Build Coastguard Worker .mem = NULL, 24*9e564957SAndroid Build Coastguard Worker }; 25*9e564957SAndroid Build Coastguard Worker 26*9e564957SAndroid Build Coastguard Worker while (!fuse_session_exited(se)) { 27*9e564957SAndroid Build Coastguard Worker res = fuse_session_receive_buf_int(se, &fbuf, NULL); 28*9e564957SAndroid Build Coastguard Worker 29*9e564957SAndroid Build Coastguard Worker if (res == -EINTR) 30*9e564957SAndroid Build Coastguard Worker continue; 31*9e564957SAndroid Build Coastguard Worker if (res <= 0) 32*9e564957SAndroid Build Coastguard Worker break; 33*9e564957SAndroid Build Coastguard Worker 34*9e564957SAndroid Build Coastguard Worker fuse_session_process_buf_int(se, &fbuf, NULL); 35*9e564957SAndroid Build Coastguard Worker } 36*9e564957SAndroid Build Coastguard Worker 37*9e564957SAndroid Build Coastguard Worker free(fbuf.mem); 38*9e564957SAndroid Build Coastguard Worker if(res > 0) 39*9e564957SAndroid Build Coastguard Worker /* No error, just the length of the most recently read 40*9e564957SAndroid Build Coastguard Worker request */ 41*9e564957SAndroid Build Coastguard Worker res = 0; 42*9e564957SAndroid Build Coastguard Worker if(se->error != 0) 43*9e564957SAndroid Build Coastguard Worker res = se->error; 44*9e564957SAndroid Build Coastguard Worker fuse_session_reset(se); 45*9e564957SAndroid Build Coastguard Worker return res; 46*9e564957SAndroid Build Coastguard Worker } 47