diff options
author | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-02-18 16:48:11 +0000 |
---|---|---|
committer | Gwenolé Beauchesne <gbeauchesne@mandriva.org> | 2003-02-18 16:48:11 +0000 |
commit | 8182e7cfe7d9c60567e48b876282594395062530 (patch) | |
tree | bb743948c6e926539b030102b804b5708222e8d4 /mdk-stage1/dietlibc/libstdio/setvbuf.c | |
parent | c93f95560d3fde9eaefcc62c454c67b8b5626fa7 (diff) | |
download | drakx-8182e7cfe7d9c60567e48b876282594395062530.tar drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.gz drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.bz2 drakx-8182e7cfe7d9c60567e48b876282594395062530.tar.xz drakx-8182e7cfe7d9c60567e48b876282594395062530.zip |
Merge in CVS dietlibc 0.21 for IA-64 and X86-64 support. However, drop the
following architectures we currently don't support: arm, mips, mipsel, parisc,
s390, sparc64.
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); +} |