Index: fusl/src/stdio/__fmodeflags.c |
diff --git a/fusl/src/stdio/__fmodeflags.c b/fusl/src/stdio/__fmodeflags.c |
new file mode 100644 |
index 0000000000000000000000000000000000000000..da9f23b633a0828a07cad171318d5d05132c2827 |
--- /dev/null |
+++ b/fusl/src/stdio/__fmodeflags.c |
@@ -0,0 +1,16 @@ |
+#include <fcntl.h> |
+#include <string.h> |
+ |
+int __fmodeflags(const char *mode) |
+{ |
+ int flags; |
+ if (strchr(mode, '+')) flags = O_RDWR; |
+ else if (*mode == 'r') flags = O_RDONLY; |
+ else flags = O_WRONLY; |
+ if (strchr(mode, 'x')) flags |= O_EXCL; |
+ if (strchr(mode, 'e')) flags |= O_CLOEXEC; |
+ if (*mode != 'r') flags |= O_CREAT; |
+ if (*mode == 'w') flags |= O_TRUNC; |
+ if (*mode == 'a') flags |= O_APPEND; |
+ return flags; |
+} |