xref: /aosp_15_r20/external/libfuse/lib/fuse_loop.c (revision 9e5649576b786774a32d7b0252c9cd8c6538fa49)
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 Worker int 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