From 60eb44d8209e9829f21edb159408b8930b68107e Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Fri, 27 Jun 2014 10:17:52 +0200 Subject: [PATCH] msvcrt: Don't touch _bufsiz value while initializing FILE structure. --- dlls/msvcrt/file.c | 4 +++- dlls/msvcrt/tests/file.c | 19 +++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 77ec85330b4..44e93396309 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -458,9 +458,11 @@ static int msvcrt_init_fp(MSVCRT_FILE* file, int fd, unsigned stream_flags) *MSVCRT__errno() = MSVCRT_EBADF; return -1; } - memset(file, 0, sizeof(*file)); + file->_ptr = file->_base = NULL; + file->_cnt = 0; file->_file = fd; file->_flag = stream_flags; + file->_tmpfname = NULL; TRACE(":got FILE* (%p)\n",file); return 0; diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index 2fd46f233c9..c253f880d5e 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -1628,7 +1628,7 @@ static void test_fopen_s( void ) const char name[] = "empty1"; char buff[16]; unsigned char *ubuff = (unsigned char*)buff; - FILE *file; + FILE *file, *file2; int ret; int len; @@ -1719,6 +1719,22 @@ static void test_fopen_s( void ) ubuff[0], ubuff[1], ubuff[2]); fclose(file); + /* test initial FILE values */ + memset(file, 0xfe, sizeof(*file)); + file->_flag = 0; + ret = p_fopen_s(&file2, name, "r"); + ok(!ret, "fopen_s failed with %d\n", ret); + ok(file == file2, "file != file2 %p %p\n", file, file2); + ok(!file->_ptr, "file->_ptr != NULL\n"); + ok(!file->_cnt, "file->_cnt != 0\n"); + ok(!file->_base, "file->_base != NULL\n"); + ok(file->_flag == 1, "file->_flag = %x\n", file->_flag); + ok(file->_file, "file->_file == 0\n"); + ok(file->_charbuf == 0xfefefefe, "file->_charbuf = %x\n", file->_charbuf); + ok(file->_bufsiz == 0xfefefefe, "file->_bufsiz = %x\n", file->_bufsiz); + ok(!file->_tmpfname, "file->_tmpfname != NULL\n"); + fclose(file2); + ok(_unlink(name) == 0, "Couldn't unlink file named '%s'\n", name); } @@ -2273,7 +2289,6 @@ static void test_write_flush(void) file = fopen(tempf, "wb+"); ok(file != NULL, "unable to create test file\n"); iobuf[0] = 0; - fwrite(iobuf, 1, 1, file); /* needed for wine to init _bufsiz */ ok(file->_bufsiz == 4096, "incorrect default buffer size: %d\n", file->_bufsiz); test_write_flush_size(file, file->_bufsiz); setvbuf(file, iobuf, _IOFBF, sizeof(iobuf));