summaryrefslogtreecommitdiffstats
path: root/mdk-stage1/dietlibc/libstdio/setvbuf.c
diff options
context:
space:
mode:
authorNicolas Planel <nplanel@mandriva.com>2003-10-29 16:07:11 +0000
committerNicolas Planel <nplanel@mandriva.com>2003-10-29 16:07:11 +0000
commitde47eb59bb829423b1d0f47ba13099073999b3cb (patch)
tree827f35c4666e15ec66edae7c1fa05d963324602b /mdk-stage1/dietlibc/libstdio/setvbuf.c
parent1fece42e9c460ca017fc4facad380f05163d8977 (diff)
downloaddrakx-backup-do-not-use-topic/Corpo_2_1.tar
drakx-backup-do-not-use-topic/Corpo_2_1.tar.gz
drakx-backup-do-not-use-topic/Corpo_2_1.tar.bz2
drakx-backup-do-not-use-topic/Corpo_2_1.tar.xz
drakx-backup-do-not-use-topic/Corpo_2_1.zip
Corporate Server 2.1.1 releasetopic/Corpo_2_1
Diffstat (limited to 'mdk-stage1/dietlibc/libstdio/setvbuf.c')
-rw-r--r--mdk-stage1/dietlibc/libstdio/setvbuf.c32
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);
+}