From 878b4a92803eeac38b218e55dc9f41a6d503deec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Matellanes?= Date: Tue, 28 Oct 2014 14:43:43 +0100 Subject: [PATCH] msvcrt: Added _fgetc_nolock implementation. --- dlls/msvcr100/msvcr100.spec | 1 + dlls/msvcr110/msvcr110.spec | 1 + dlls/msvcr80/msvcr80.spec | 1 + dlls/msvcr90/msvcr90.spec | 1 + dlls/msvcrt/file.c | 16 ++++++++++++++-- dlls/msvcrt/msvcrt.h | 1 + include/msvcrt/stdio.h | 1 + 7 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 91805eeddc4..e33f5fea4d2 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -800,6 +800,7 @@ @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s @ cdecl _fdopen(long str) MSVCRT__fdopen @ cdecl _fflush_nolock(ptr) MSVCRT__fflush_nolock +@ cdecl _fgetc_nolock(ptr) MSVCRT__fgetc_nolock @ cdecl _fgetchar() MSVCRT__fgetchar @ stub _fgetwc_nolock @ cdecl _fgetwchar() MSVCRT__fgetwchar diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 5de69657cc8..88144a335de 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1148,6 +1148,7 @@ @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s @ cdecl _fdopen(long str) MSVCRT__fdopen @ cdecl _fflush_nolock(ptr) MSVCRT__fflush_nolock +@ cdecl _fgetc_nolock(ptr) MSVCRT__fgetc_nolock @ cdecl _fgetchar() MSVCRT__fgetchar @ stub _fgetwc_nolock @ cdecl _fgetwchar() MSVCRT__fgetwchar diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index b7f0a868b36..5c016000aae 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -467,6 +467,7 @@ @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s @ cdecl _fdopen(long str) MSVCRT__fdopen @ cdecl _fflush_nolock(ptr) MSVCRT__fflush_nolock +@ cdecl _fgetc_nolock(ptr) MSVCRT__fgetc_nolock @ cdecl _fgetchar() MSVCRT__fgetchar @ stub _fgetwc_nolock @ cdecl _fgetwchar() MSVCRT__fgetwchar diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index a8ad25ffb7b..d9d99f41c8f 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -449,6 +449,7 @@ @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s @ cdecl _fdopen(long str) MSVCRT__fdopen @ cdecl _fflush_nolock(ptr) MSVCRT__fflush_nolock +@ cdecl _fgetc_nolock(ptr) MSVCRT__fgetc_nolock @ cdecl _fgetchar() MSVCRT__fgetchar @ stub _fgetwc_nolock @ cdecl _fgetwchar() MSVCRT__fgetwchar diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index d191953aac1..dbbbe78ebd4 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -3502,11 +3502,24 @@ int CDECL MSVCRT__filbuf(MSVCRT_FILE* file) * fgetc (MSVCRT.@) */ int CDECL MSVCRT_fgetc(MSVCRT_FILE* file) +{ + int ret; + + MSVCRT__lock_file(file); + ret = MSVCRT__fgetc_nolock(file); + MSVCRT__unlock_file(file); + + return ret; +} + +/********************************************************************* + * _fgetc_nolock (MSVCRT.@) + */ +int CDECL MSVCRT__fgetc_nolock(MSVCRT_FILE* file) { unsigned char *i; unsigned int j; - MSVCRT__lock_file(file); if (file->_cnt>0) { file->_cnt--; i = (unsigned char *)file->_ptr++; @@ -3514,7 +3527,6 @@ int CDECL MSVCRT_fgetc(MSVCRT_FILE* file) } else j = MSVCRT__filbuf(file); - MSVCRT__unlock_file(file); return j; } diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 9f00923ef80..137bec2f3c7 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -916,6 +916,7 @@ int __cdecl MSVCRT__isleadbyte_l(int, MSVCRT__locale_t); void __cdecl MSVCRT__lock_file(MSVCRT_FILE*); void __cdecl MSVCRT__unlock_file(MSVCRT_FILE*); int __cdecl MSVCRT_fgetc(MSVCRT_FILE*); +int __cdecl MSVCRT__fgetc_nolock(MSVCRT_FILE*); int __cdecl MSVCRT_ungetc(int,MSVCRT_FILE*); MSVCRT_wint_t __cdecl MSVCRT_fgetwc(MSVCRT_FILE*); MSVCRT_wint_t __cdecl MSVCRT_ungetwc(MSVCRT_wint_t,MSVCRT_FILE*); diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h index 305d2518aa3..54c07febf02 100644 --- a/include/msvcrt/stdio.h +++ b/include/msvcrt/stdio.h @@ -131,6 +131,7 @@ size_t __cdecl _fread_nolock(void*,size_t,size_t,FILE*); size_t __cdecl _fwrite_nolock(const void*,size_t,size_t,FILE*); int __cdecl _fclose_nolock(FILE*); int __cdecl _fflush_nolock(FILE*); +int __cdecl _fgetc_nolock(FILE*); int __cdecl _fseek_nolock(FILE*,__msvcrt_long,int); int __cdecl _fseeki64_nolock(FILE*,__int64,int); __msvcrt_long __cdecl _ftell_nolock(FILE*);