From 8c45390a7f7a76dbc4c339f19586d34266c8c6ac Mon Sep 17 00:00:00 2001 From: Andriy Palamarchuk Date: Thu, 21 Mar 2002 01:23:32 +0000 Subject: [PATCH] Added check to fwrite for size == 0. Fixed order and format of "size" and "nmemb" parameters in calls to fwrite. --- dlls/msvcrt/file.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 1ea9961d685..07684ccb922 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -1585,7 +1585,7 @@ WCHAR *MSVCRT_fgetws(WCHAR *s, int size, MSVCRT_FILE* file) MSVCRT_wint_t MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file) { WCHAR mwc=wc; - if (MSVCRT_fwrite( &mwc, 1, sizeof(mwc), file) != sizeof(mwc)) + if (MSVCRT_fwrite( &mwc, sizeof(mwc), 1, file) != 1) return MSVCRT_WEOF; return wc; } @@ -2149,6 +2149,8 @@ MSVCRT_size_t MSVCRT_fwrite(const void *ptr, MSVCRT_size_t size, MSVCRT_size_t n { MSVCRT_size_t wrcnt=size * nmemb; int written = 0; + if (size == 0) + return 0; if(file->_cnt) { int pcnt=(file->_cnt>wrcnt)? file->_cnt: wrcnt; memcpy(file->_ptr, ptr, pcnt); @@ -2180,7 +2182,8 @@ MSVCRT_size_t MSVCRT_fwrite(const void *ptr, MSVCRT_size_t size, MSVCRT_size_t n */ int MSVCRT_fputs(const char *s, MSVCRT_FILE* file) { - return MSVCRT_fwrite(s,strlen(s),1,file) == 1 ? 0 : MSVCRT_EOF; + size_t len = strlen(s); + return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF; } /********************************************************************* @@ -2188,7 +2191,8 @@ int MSVCRT_fputs(const char *s, MSVCRT_FILE* file) */ int MSVCRT_fputws(const WCHAR *s, MSVCRT_FILE* file) { - return MSVCRT_fwrite(s,strlenW(s),1,file) == 1 ? 0 : MSVCRT_EOF; + size_t len = strlenW(s); + return MSVCRT_fwrite(s,sizeof(*s),len,file) == len ? 0 : MSVCRT_EOF; } /********************************************************************* @@ -2246,10 +2250,9 @@ int MSVCRT_putchar(int c) */ int MSVCRT_puts(const char *s) { - int retval = MSVCRT_EOF; - if (MSVCRT_fwrite(s,strlen(s),1,MSVCRT_stdout) == 1) + size_t len = strlen(s); + if (MSVCRT_fwrite(s,sizeof(*s),len,MSVCRT_stdout) != len) return MSVCRT_EOF; return MSVCRT_fwrite("\n",1,1,MSVCRT_stdout) == 1 ? 0 : MSVCRT_EOF; - return retval; } /********************************************************************* @@ -2257,10 +2260,10 @@ int MSVCRT_puts(const char *s) */ int _putws(const WCHAR *s) { - static const WCHAR nl = (WCHAR)L'\n'; - if (MSVCRT_fwrite(s,strlenW(s),1,MSVCRT_stdout) == 1) + static const WCHAR nl = '\n'; + size_t len = strlenW(s); + if (MSVCRT_fwrite(s,sizeof(*s),len,MSVCRT_stdout) != len) return MSVCRT_EOF; return MSVCRT_fwrite(&nl,sizeof(nl),1,MSVCRT_stdout) == 1 ? 0 : MSVCRT_EOF; - return MSVCRT_EOF; } /********************************************************************* @@ -2412,7 +2415,7 @@ int MSVCRT_vfprintf(MSVCRT_FILE* file, const char *format, va_list valist) if (!(mem = (char *)MSVCRT_malloc(resize))) return MSVCRT_EOF; } - retval = MSVCRT_fwrite(mem, 1, written, file); + retval = MSVCRT_fwrite(mem, sizeof(*mem), written, file); if (mem != buf) MSVCRT_free (mem); return retval; @@ -2438,7 +2441,7 @@ int MSVCRT_vfwprintf(MSVCRT_FILE* file, const WCHAR *format, va_list valist) if (!(mem = (WCHAR *)MSVCRT_malloc(resize*sizeof(*mem)))) return MSVCRT_EOF; } - retval = MSVCRT_fwrite(mem, 1, written * sizeof (WCHAR), file); + retval = MSVCRT_fwrite(mem, sizeof(*mem), written, file); if (mem != buf) MSVCRT_free (mem); return retval; -- 2.11.4.GIT