diff options
author | Guillaume Cottenceau <gc@mandriva.com> | 2001-05-14 13:47:49 +0000 |
---|---|---|
committer | Guillaume Cottenceau <gc@mandriva.com> | 2001-05-14 13:47:49 +0000 |
commit | f15aa3a552022743398a652165d76bf912c715e5 (patch) | |
tree | b58f8b4c47fc571fbb498d83a4bd4fca226ac6c4 /mdk-stage1/dietlibc/libstdio/fdglue.c | |
parent | 189b01c358a1181ddc951adba97a0258d5fc2cf1 (diff) | |
download | drakx-f15aa3a552022743398a652165d76bf912c715e5.tar drakx-f15aa3a552022743398a652165d76bf912c715e5.tar.gz drakx-f15aa3a552022743398a652165d76bf912c715e5.tar.bz2 drakx-f15aa3a552022743398a652165d76bf912c715e5.tar.xz drakx-f15aa3a552022743398a652165d76bf912c715e5.zip |
Initial revision
Diffstat (limited to 'mdk-stage1/dietlibc/libstdio/fdglue.c')
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/fdglue.c | 49 |
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; +} |