From de47eb59bb829423b1d0f47ba13099073999b3cb Mon Sep 17 00:00:00 2001 From: Nicolas Planel Date: Wed, 29 Oct 2003 16:07:11 +0000 Subject: Corporate Server 2.1.1 release --- mdk-stage1/dietlibc/libstdio/fwrite.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) (limited to 'mdk-stage1/dietlibc/libstdio/fwrite.c') diff --git a/mdk-stage1/dietlibc/libstdio/fwrite.c b/mdk-stage1/dietlibc/libstdio/fwrite.c index 5691661a5..e2536ccfb 100644 --- a/mdk-stage1/dietlibc/libstdio/fwrite.c +++ b/mdk-stage1/dietlibc/libstdio/fwrite.c @@ -1,30 +1,28 @@ #include #include "dietstdio.h" #include +#include -size_t fwrite( const void *ptr, size_t size, size_t nmemb, FILE *stream) { +size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) { int res; -#ifdef WANT_BUFFERED_STDIO - long len=size*nmemb; + unsigned long len=size*nmemb; long i; - if (len>BUFSIZE || (stream->flags&NOBUF)) { - if (!(stream->flags&NOBUF)) fflush(stream); - res=write(stream->fd,ptr,size*nmemb); + if (!nmemb || len/nmemb!=size) return 0; /* check for integer overflow */ + if (len>stream->buflen || (stream->flags&NOBUF)) { + fflush(stream); + do { + res=write(stream->fd,ptr,size*nmemb); + } while (res==-1 && errno==EINTR); } else { register const unsigned char *c=ptr; - for (i=size*nmemb; i>0; --i,++c) - if (fputc(*c,stream)) { - res=-1; - break; - } - res=size*nmemb; + for (i=len; i>0; --i,++c) + if (fputc(*c,stream)) { res=len-i; goto abort; } + res=len; } -#else - res=write(stream->fd,ptr,size*nmemb); -#endif if (res<0) { stream->flags|=ERRORINDICATOR; return 0; } +abort: return size?res/size:0; } -- cgit v1.2.1