=?UTF-8?Q?Iv=C3=A1n=20Matellanes=20?=: msvcrt: Added _ungetc_nolock implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Wed Nov 5 08:59:37 CST 2014
Module: wine
Branch: master
Commit: 6f24dd9677563ccb0a0b033c0ba2597951221a80
URL: http://source.winehq.org/git/wine.git/?a=commit;h=6f24dd9677563ccb0a0b033c0ba2597951221a80
Author: Iván Matellanes <matellanesivan at gmail.com>
Date: Tue Nov 4 22:52:03 2014 +0100
msvcrt: Added _ungetc_nolock implementation.
---
dlls/msvcr100/msvcr100.spec | 2 +-
dlls/msvcr110/msvcr110.spec | 2 +-
dlls/msvcr120/msvcr120.spec | 2 +-
dlls/msvcr80/msvcr80.spec | 2 +-
dlls/msvcr90/msvcr90.spec | 2 +-
dlls/msvcrt/file.c | 22 +++++++++++++++++-----
dlls/msvcrt/msvcrt.h | 1 +
include/msvcrt/stdio.h | 1 +
8 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index 3f6a920..21d380e 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1405,7 +1405,7 @@
@ cdecl _ultow_s(long ptr long long) MSVCRT__ultow_s
@ cdecl _umask(long) MSVCRT__umask
@ stub _umask_s
-@ stub _ungetc_nolock
+@ cdecl _ungetc_nolock(long ptr) MSVCRT__ungetc_nolock
@ cdecl _ungetch(long)
@ stub _ungetch_nolock
@ stub _ungetwc_nolock
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index a61f7eb..c33ce06 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1763,7 +1763,7 @@
@ cdecl _ultow_s(long ptr long long) MSVCRT__ultow_s
@ cdecl _umask(long) MSVCRT__umask
@ stub _umask_s
-@ stub _ungetc_nolock
+@ cdecl _ungetc_nolock(long ptr) MSVCRT__ungetc_nolock
@ cdecl _ungetch(long)
@ stub _ungetch_nolock
@ stub _ungetwc_nolock
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index c9853ca..49d47e6 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1777,7 +1777,7 @@
@ cdecl _ultow_s(long ptr long long) MSVCRT__ultow_s
@ cdecl _umask(long) MSVCRT__umask
@ stub _umask_s
-@ stub _ungetc_nolock
+@ cdecl _ungetc_nolock(long ptr) MSVCRT__ungetc_nolock
@ cdecl _ungetch(long)
@ stub _ungetch_nolock
@ stub _ungetwc_nolock
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index 700ce57..b9fa3cd 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1084,7 +1084,7 @@
@ cdecl _ultow_s(long ptr long long) MSVCRT__ultow_s
@ cdecl _umask(long) MSVCRT__umask
@ stub _umask_s
-@ stub _ungetc_nolock
+@ cdecl _ungetc_nolock(long ptr) MSVCRT__ungetc_nolock
@ cdecl _ungetch(long)
@ stub _ungetch_nolock
@ stub _ungetwc_nolock
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 94ffa30..24302c3 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1060,7 +1060,7 @@
@ cdecl _ultow_s(long ptr long long) MSVCRT__ultow_s
@ cdecl _umask(long) MSVCRT__umask
@ stub _umask_s
-@ stub _ungetc_nolock
+@ cdecl _ungetc_nolock(long ptr) MSVCRT__ungetc_nolock
@ cdecl _ungetch(long)
@ stub _ungetch_nolock
@ stub _ungetwc_nolock
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 4fcd74f..9fc2652 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -5002,13 +5002,28 @@ int CDECL MSVCRT_printf_s(const char *format, ...)
*/
int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
{
+ int ret;
+
+ if(!MSVCRT_CHECK_PMT(file != NULL)) return MSVCRT_EOF;
+
+ MSVCRT__lock_file(file);
+ ret = MSVCRT__ungetc_nolock(c, file);
+ MSVCRT__unlock_file(file);
+
+ return ret;
+}
+
+/*********************************************************************
+ * _ungetc_nolock (MSVCRT.@)
+ */
+int CDECL MSVCRT__ungetc_nolock(int c, MSVCRT_FILE * file)
+{
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->_flag & (MSVCRT__IONBF | MSVCRT__IOMYBUF | MSVCRT__USERBUF))
&& msvcrt_alloc_buffer(file))
|| (!file->_cnt && file->_ptr==file->_base))
@@ -5019,20 +5034,17 @@ int CDECL MSVCRT_ungetc(int c, MSVCRT_FILE * file)
if(file->_flag & MSVCRT__IOSTRG) {
if(*file->_ptr != c) {
file->_ptr++;
- MSVCRT__unlock_file(file);
return MSVCRT_EOF;
}
}else {
*file->_ptr = c;
}
file->_cnt++;
- MSVCRT_clearerr(file);
+ file->_flag &= ~(MSVCRT__IOERR | MSVCRT__IOEOF);
file->_flag |= MSVCRT__IOREAD;
- MSVCRT__unlock_file(file);
return c;
}
- MSVCRT__unlock_file(file);
return MSVCRT_EOF;
}
diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h
index d780f1b..e19928b 100644
--- a/dlls/msvcrt/msvcrt.h
+++ b/dlls/msvcrt/msvcrt.h
@@ -919,6 +919,7 @@ int __cdecl MSVCRT_fgetc(MSVCRT_FILE*);
int __cdecl MSVCRT__fgetc_nolock(MSVCRT_FILE*);
int __cdecl MSVCRT__fputc_nolock(int,MSVCRT_FILE*);
int __cdecl MSVCRT_ungetc(int,MSVCRT_FILE*);
+int __cdecl MSVCRT__ungetc_nolock(int,MSVCRT_FILE*);
MSVCRT_wint_t __cdecl MSVCRT_fgetwc(MSVCRT_FILE*);
MSVCRT_wint_t __cdecl MSVCRT__fgetwc_nolock(MSVCRT_FILE*);
MSVCRT_wint_t __cdecl MSVCRT__fputwc_nolock(MSVCRT_wint_t,MSVCRT_FILE*);
diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h
index d4839cd..19fda94 100644
--- a/include/msvcrt/stdio.h
+++ b/include/msvcrt/stdio.h
@@ -137,6 +137,7 @@ int __cdecl _fseek_nolock(FILE*,__msvcrt_long,int);
int __cdecl _fseeki64_nolock(FILE*,__int64,int);
__msvcrt_long __cdecl _ftell_nolock(FILE*);
__int64 __cdecl _ftelli64_nolock(FILE*);
+int __cdecl _ungetc_nolock(int,FILE*);
void __cdecl clearerr(FILE*);
int __cdecl fclose(FILE*);
More information about the wine-cvs
mailing list