diff options
author | Mystery Man <unknown@mandriva.org> | 2003-10-29 16:07:11 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2003-10-29 16:07:11 +0000 |
commit | fa40f30b4253b1e05c46cc5e0c111176825b7623 (patch) | |
tree | 76cf2d26c0ce0ee7c6a2c1a1a2b65bc4d8e33029 /mdk-stage1/dietlibc/libstdio/setvbuf.c | |
parent | 327bd24f8e4291bd1882de1990dd7339f781a9cb (diff) | |
download | drakx-fa40f30b4253b1e05c46cc5e0c111176825b7623.tar drakx-fa40f30b4253b1e05c46cc5e0c111176825b7623.tar.gz drakx-fa40f30b4253b1e05c46cc5e0c111176825b7623.tar.bz2 drakx-fa40f30b4253b1e05c46cc5e0c111176825b7623.tar.xz drakx-fa40f30b4253b1e05c46cc5e0c111176825b7623.zip |
This commit was manufactured by cvs2svn to create tag 'Corpo_2_1_1'.Corpo_2_1_1
Diffstat (limited to 'mdk-stage1/dietlibc/libstdio/setvbuf.c')
-rw-r--r-- | mdk-stage1/dietlibc/libstdio/setvbuf.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/mdk-stage1/dietlibc/libstdio/setvbuf.c b/mdk-stage1/dietlibc/libstdio/setvbuf.c index d0b1b7640..b8b50addf 100644 --- a/mdk-stage1/dietlibc/libstdio/setvbuf.c +++ b/mdk-stage1/dietlibc/libstdio/setvbuf.c @@ -1,18 +1,34 @@ #include <sys/types.h> #include "dietstdio.h" #include <unistd.h> +#include <stdlib.h> #include "dietwarning.h" -int setvbuf(FILE *stream, char *buf, int flags , size_t size) { -#ifdef WANT_BUFFERED_STDIO +static int set_flags (FILE *stream, int flags) { switch (flags) { - case _IONBF: stream->flags = (stream->flags & ~(BUFLINEWISE)) | NOBUF; break; - case _IOLBF: stream->flags = (stream->flags & ~(BUFLINEWISE|NOBUF)) | BUFLINEWISE; break; - case _IOFBF: stream->flags = stream->flags & ~(NOBUF | BUFLINEWISE); break; - default: return -1; + case _IONBF: stream->flags = (stream->flags & ~(BUFLINEWISE)) | NOBUF; break; + case _IOLBF: stream->flags = (stream->flags & ~(NOBUF)) | BUFLINEWISE; break; + case _IOFBF: stream->flags = stream->flags & ~(NOBUF | BUFLINEWISE); break; + default: return -1; } -#endif return 0; } -link_warning("setvbuf","setvbuf does not implement changing the buffer in diet libc.") +int setvbuf(FILE *stream, char *buf, int flags, size_t size) { + if (buf) { + if (!(stream->flags&STATICBUF)) free(stream->buf); + stream->buf=buf; + } + else { + char *tmp; + if (!size) { + return set_flags(stream,flags); + } + if (!(tmp=malloc(size))) return -1; + if (!(stream->flags&STATICBUF)) free(stream->buf); + stream->buf=tmp; + } + stream->buflen=size; + stream->bm=stream->bs=0; + return set_flags(stream,flags); +} |