xref: /aosp_15_r20/external/musl/src/stdio/__fmodeflags.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <fcntl.h>
2*c9945492SAndroid Build Coastguard Worker #include <string.h>
3*c9945492SAndroid Build Coastguard Worker 
__fmodeflags(const char * mode)4*c9945492SAndroid Build Coastguard Worker int __fmodeflags(const char *mode)
5*c9945492SAndroid Build Coastguard Worker {
6*c9945492SAndroid Build Coastguard Worker 	int flags;
7*c9945492SAndroid Build Coastguard Worker 	if (strchr(mode, '+')) flags = O_RDWR;
8*c9945492SAndroid Build Coastguard Worker 	else if (*mode == 'r') flags = O_RDONLY;
9*c9945492SAndroid Build Coastguard Worker 	else flags = O_WRONLY;
10*c9945492SAndroid Build Coastguard Worker 	if (strchr(mode, 'x')) flags |= O_EXCL;
11*c9945492SAndroid Build Coastguard Worker 	if (strchr(mode, 'e')) flags |= O_CLOEXEC;
12*c9945492SAndroid Build Coastguard Worker 	if (*mode != 'r') flags |= O_CREAT;
13*c9945492SAndroid Build Coastguard Worker 	if (*mode == 'w') flags |= O_TRUNC;
14*c9945492SAndroid Build Coastguard Worker 	if (*mode == 'a') flags |= O_APPEND;
15*c9945492SAndroid Build Coastguard Worker 	return flags;
16*c9945492SAndroid Build Coastguard Worker }
17