Piotr Caban : msvcrt: Fix ungetc on files with empty buffer.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Jun 26 15:04:51 CDT 2014
Module: wine
Branch: master
Commit: 1ae475dae8ea927a659dca762cd3f51b6c894a1c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1ae475dae8ea927a659dca762cd3f51b6c894a1c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu Jun 26 12:29:54 2014 +0200
msvcrt: Fix ungetc on files with empty buffer.
---
dlls/msvcrt/file.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 70b908a..fe2d144 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -4859,12 +4859,17 @@ int CDECL MSVCRT_printf_s(const char *format, ...)
*/
int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
{
- if (c == MSVCRT_EOF)
+ if(!MSVCRT_CHECK_PMT(file != NULL)) return MSVCRT_EOF;
+
+ if (c == MSVCRT_EOF || !(file->_flag&MSVCRT__IOREAD ||
+ (file->_flag&MSVCRT__IORW && !(file->_flag&MSVCRT__IOWRT))))
return MSVCRT_EOF;
MSVCRT__lock_file(file);
- if(file->_bufsiz == 0 && msvcrt_alloc_buffer(file))
+ if((!file->_bufsiz && msvcrt_alloc_buffer(file))
+ || (!file->_cnt && file->_ptr==file->_base))
file->_ptr++;
+
if(file->_ptr>file->_base) {
file->_ptr--;
if(file->_flag & MSVCRT__IOSTRG) {
@@ -4878,6 +4883,7 @@ int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
}
file->_cnt++;
MSVCRT_clearerr(file);
+ file->_flag |= MSVCRT__IOREAD;
MSVCRT__unlock_file(file);
return c;
}
More information about the wine-cvs
mailing list