summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libstdio/fdglue.c
diff options
context:
space:
mode:
authorGuillaume Cottenceau <gc@mandriva.com>2001-05-14 13:47:49 +0000
committerGuillaume Cottenceau <gc@mandriva.com>2001-05-14 13:47:49 +0000
commitf15aa3a552022743398a652165d76bf912c715e5 (patch)
treeb58f8b4c47fc571fbb498d83a4bd4fca226ac6c4 /mdk-stage1/dietlibc/libstdio/fdglue.c
parent189b01c358a1181ddc951adba97a0258d5fc2cf1 (diff)
downloaddrakx-backup-do-not-use-f15aa3a552022743398a652165d76bf912c715e5.tar
drakx-backup-do-not-use-f15aa3a552022743398a652165d76bf912c715e5.tar.gz
drakx-backup-do-not-use-f15aa3a552022743398a652165d76bf912c715e5.tar.bz2
drakx-backup-do-not-use-f15aa3a552022743398a652165d76bf912c715e5.tar.xz
drakx-backup-do-not-use-f15aa3a552022743398a652165d76bf912c715e5.zip
Initial revision
Diffstat (limited to 'mdk-stage1/dietlibc/libstdio/fdglue.c')
-rw-r--r--mdk-stage1/dietlibc/libstdio/fdglue.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/mdk-stage1/dietlibc/libstdio/fdglue.c b/mdk-stage1/dietlibc/libstdio/fdglue.c
new file mode 100644
index 000000000..eeedd513d
--- /dev/null
+++ b/mdk-stage1/dietlibc/libstdio/fdglue.c
@@ -0,0 +1,49 @@
+#include "dietstdio.h"
+#include <unistd.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <stdlib.h>
+
+#ifdef WANT_BUFFERED_STDIO
+extern int __stdio_atexit;
+extern void __stdio_flushall();
+#endif
+
+int __stdio_parse_mode(const char *mode) {
+ int f=0;
+ for (;;) {
+ switch (*mode) {
+ case 0: return f;
+ case 'b': break;
+ case 'r': f=O_RDONLY; break;
+ case 'w': f=O_WRONLY|O_CREAT|O_TRUNC; break;
+ case 'a': f=O_WRONLY|O_CREAT|O_APPEND; break;
+ case '+': f=(f&(~O_WRONLY))|O_RDWR; break;
+ }
+ ++mode;
+ }
+}
+
+FILE* __stdio_init_file(int fd) {
+ FILE *tmp=(FILE*)malloc(sizeof(FILE));
+ if (!tmp) {
+ close(fd);
+ errno=ENOMEM;
+ return 0;
+ }
+ tmp->fd=fd;
+#ifdef WANT_BUFFERED_STDIO
+ tmp->bm=0;
+ tmp->bs=0;
+#endif
+ tmp->flags=0;
+#ifdef WANT_BUFFERED_STDIO
+ if (__stdio_atexit==0) {
+ __stdio_atexit=1;
+ atexit(__stdio_flushall);
+ }
+ tmp->next=__stdio_root;
+ __stdio_root=tmp;
+#endif
+ return tmp;
+}