From c39793087d11a562655e636489042c2bc2baf63c Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Tue, 7 Feb 2012 10:14:03 +0100 Subject: [PATCH] msvcrt: Handle negative file->_cnt value in _flsbuf function. --- dlls/msvcrt/file.c | 2 +- dlls/msvcrt/tests/file.c | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index b27a40f17a..c15e33f76e 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -3088,7 +3088,7 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file) if(file->_bufsiz) { int res = 0; - if(file->_cnt == 0) + if(file->_cnt <= 0) res = msvcrt_flush_buffer(file); if(!res) { *file->_ptr++ = c; diff --git a/dlls/msvcrt/tests/file.c b/dlls/msvcrt/tests/file.c index e7b735346b..b9b904d611 100644 --- a/dlls/msvcrt/tests/file.c +++ b/dlls/msvcrt/tests/file.c @@ -544,10 +544,21 @@ static void test_flsbuf( void ) bufmodes[bufmode], 0, ret); ret = _flsbuf(0xff,tempfh); ok(0xff == ret, "_flsbuf(0xff,tempfh) with bufmode %x expected %x got %x\n", - bufmodes[bufmode], 0, ret); + bufmodes[bufmode], 0xff, ret); ret = _flsbuf(0xffffffff,tempfh); ok(0xff == ret, "_flsbuf(0xffffffff,tempfh) with bufmode %x expected %x got %x\n", - bufmodes[bufmode], 0, ret); + bufmodes[bufmode], 0xff, ret); + if(tempfh->_base) { + fputc('x', tempfh); + tempfh->_cnt = -1; + tempfh->_base[1] = 'a'; + ret = _flsbuf(0xab,tempfh); + ok(ret == 0xab, "_flsbuf(0xab,tempfh) with bufmode %x expected 0xab got %x\n", + bufmodes[bufmode], ret); + ok(tempfh->_base[1] == 'a', "tempfh->_base[1] should not be changed (%d)\n", + tempfh->_base[1]); + } + fclose(tempfh); } -- 2.32.0.93.g670b81a890