greatly improve freopen behavior
[musl] / src / stdio / __fmodeflags.c
diff --git a/src/stdio/__fmodeflags.c b/src/stdio/__fmodeflags.c
new file mode 100644 (file)
index 0000000..da9f23b
--- /dev/null
@@ -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;
+}