diff options
author | Mystery Man <unknown@mandriva.org> | 2003-08-20 07:37:27 +0000 |
---|---|---|
committer | Mystery Man <unknown@mandriva.org> | 2003-08-20 07:37:27 +0000 |
commit | 7f2ac73888b8ef372ea597049981b27e7d810ac2 (patch) | |
tree | 354132889b63bbe5f446cb82869b3c3367135a80 /mdk-stage1/dietlibc/libstdio/setvbuf.c | |
parent | 327bd24f8e4291bd1882de1990dd7339f781a9cb (diff) | |
download | drakx-topic/MDKC_1_0.tar drakx-topic/MDKC_1_0.tar.gz drakx-topic/MDKC_1_0.tar.bz2 drakx-topic/MDKC_1_0.tar.xz drakx-topic/MDKC_1_0.zip |
This commit was manufactured by cvs2svn to create branch 'MDKC_1_0'.topic/MDKC_1_0
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); +} |