From f15aa3a552022743398a652165d76bf912c715e5 Mon Sep 17 00:00:00 2001 From: Guillaume Cottenceau Date: Mon, 14 May 2001 13:47:49 +0000 Subject: Initial revision --- mdk-stage1/dietlibc/libstdio/fdglue.c | 49 +++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 mdk-stage1/dietlibc/libstdio/fdglue.c (limited to 'mdk-stage1/dietlibc/libstdio/fdglue.c') 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 +#include +#include +#include + +#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; +} -- cgit v1.2.1