msvcrt: Handle negative file->_cnt value in _flsbuf function.
This commit is contained in:
parent
9d538e43be
commit
c39793087d
@ -3088,7 +3088,7 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
|
|||||||
if(file->_bufsiz) {
|
if(file->_bufsiz) {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
||||||
if(file->_cnt == 0)
|
if(file->_cnt <= 0)
|
||||||
res = msvcrt_flush_buffer(file);
|
res = msvcrt_flush_buffer(file);
|
||||||
if(!res) {
|
if(!res) {
|
||||||
*file->_ptr++ = c;
|
*file->_ptr++ = c;
|
||||||
|
@ -544,10 +544,21 @@ static void test_flsbuf( void )
|
|||||||
bufmodes[bufmode], 0, ret);
|
bufmodes[bufmode], 0, ret);
|
||||||
ret = _flsbuf(0xff,tempfh);
|
ret = _flsbuf(0xff,tempfh);
|
||||||
ok(0xff == ret, "_flsbuf(0xff,tempfh) with bufmode %x expected %x got %x\n",
|
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);
|
ret = _flsbuf(0xffffffff,tempfh);
|
||||||
ok(0xff == ret, "_flsbuf(0xffffffff,tempfh) with bufmode %x expected %x got %x\n",
|
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);
|
fclose(tempfh);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user