From b536ff62eff2e2eb214a39974d27fd3a6949fca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Iv=C3=A1n=20Matellanes?= Date: Tue, 4 Nov 2014 22:51:52 +0100 Subject: [PATCH] msvcrt: Added _fputwc_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 | 20 ++++++++++++++++---- dlls/msvcrt/msvcrt.h | 1 + include/msvcrt/stdio.h | 1 + 8 files changed, 23 insertions(+), 9 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 9ad987d2112..3f6a9205f61 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -832,7 +832,7 @@ @ stub _fprintf_s_l @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar -@ stub _fputwc_nolock +@ cdecl _fputwc_nolock(long ptr) MSVCRT__fputwc_nolock @ cdecl _fputwchar(long) MSVCRT__fputwchar @ cdecl _fread_nolock(ptr long long ptr) MSVCRT__fread_nolock @ stub _fread_nolock_s diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index a17d0d00c5c..a61f7eb84b4 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1180,7 +1180,7 @@ @ stub _fprintf_s_l @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar -@ stub _fputwc_nolock +@ cdecl _fputwc_nolock(long ptr) MSVCRT__fputwc_nolock @ cdecl _fputwchar(long) MSVCRT__fputwchar @ cdecl _fread_nolock(ptr long long ptr) MSVCRT__fread_nolock @ stub _fread_nolock_s diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec index 88753eb867a..c9853cad2bf 100644 --- a/dlls/msvcr120/msvcr120.spec +++ b/dlls/msvcr120/msvcr120.spec @@ -1178,7 +1178,7 @@ @ stub _fprintf_s_l @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar -@ stub _fputwc_nolock +@ cdecl _fputwc_nolock(long ptr) MSVCRT__fputwc_nolock @ cdecl _fputwchar(long) MSVCRT__fputwchar @ cdecl _fread_nolock(ptr long long ptr) MSVCRT__fread_nolock @ stub _fread_nolock_s diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index ee50c4f98d7..700ce571176 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -499,7 +499,7 @@ @ stub _fprintf_s_l @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar -@ stub _fputwc_nolock +@ cdecl _fputwc_nolock(long ptr) MSVCRT__fputwc_nolock @ cdecl _fputwchar(long) MSVCRT__fputwchar @ cdecl _fread_nolock(ptr long long ptr) MSVCRT__fread_nolock @ stub _fread_nolock_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index acce962b5a1..94ffa3064e1 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -481,7 +481,7 @@ @ stub _fprintf_s_l @ cdecl _fputc_nolock(long ptr) MSVCRT__fputc_nolock @ cdecl _fputchar(long) MSVCRT__fputchar -@ stub _fputwc_nolock +@ cdecl _fputwc_nolock(long ptr) MSVCRT__fputwc_nolock @ cdecl _fputwchar(long) MSVCRT__fputwchar @ cdecl _fread_nolock(ptr long long ptr) MSVCRT__fread_nolock @ stub _fread_nolock_s diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index bf00fbc8c98..4fcd74f317e 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -3828,12 +3828,25 @@ MSVCRT_size_t CDECL MSVCRT__fwrite_nolock(const void *ptr, MSVCRT_size_t size, M * fputwc (MSVCRT.@) */ MSVCRT_wint_t CDECL MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file) +{ + MSVCRT_wint_t ret; + + MSVCRT__lock_file(file); + ret = MSVCRT__fputwc_nolock(wc, file); + MSVCRT__unlock_file(file); + + return ret; +} + +/********************************************************************* + * _fputwc_nolock (MSVCRT.@) + */ +MSVCRT_wint_t CDECL MSVCRT__fputwc_nolock(MSVCRT_wint_t wc, MSVCRT_FILE* file) { MSVCRT_wchar_t mwc=wc; ioinfo *fdinfo; MSVCRT_wint_t ret; - MSVCRT__lock_file(file); fdinfo = msvcrt_get_ioinfo(file->_file); if((fdinfo->wxflag&WX_TEXT) && !(fdinfo->exflag&(EF_UTF8|EF_UTF16))) { @@ -3841,17 +3854,16 @@ MSVCRT_wint_t CDECL MSVCRT_fputwc(MSVCRT_wint_t wc, MSVCRT_FILE* file) int char_len; char_len = MSVCRT_wctomb(buf, mwc); - if(char_len!=-1 && MSVCRT_fwrite(buf, char_len, 1, file)==1) + if(char_len!=-1 && MSVCRT__fwrite_nolock(buf, char_len, 1, file)==1) ret = wc; else ret = MSVCRT_WEOF; - }else if(MSVCRT_fwrite(&mwc, sizeof(mwc), 1, file) == 1) { + }else if(MSVCRT__fwrite_nolock(&mwc, sizeof(mwc), 1, file) == 1) { ret = wc; }else { ret = MSVCRT_WEOF; } - MSVCRT__unlock_file(file); return ret; } diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 289c5bc14ef..d780f1b8bb1 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -921,6 +921,7 @@ int __cdecl MSVCRT__fputc_nolock(int,MSVCRT_FILE*); int __cdecl MSVCRT_ungetc(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*); MSVCRT_wint_t __cdecl MSVCRT_ungetwc(MSVCRT_wint_t,MSVCRT_FILE*); int __cdecl MSVCRT__fseeki64_nolock(MSVCRT_FILE*,__int64,int); __int64 __cdecl MSVCRT__ftelli64(MSVCRT_FILE* file); diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h index 71e642aaf07..d4839cd7f16 100644 --- a/include/msvcrt/stdio.h +++ b/include/msvcrt/stdio.h @@ -199,6 +199,7 @@ unsigned int __cdecl _set_output_format(void); #define _WSTDIO_DEFINED wint_t __cdecl _fgetwc_nolock(FILE*); wint_t __cdecl _fgetwchar(void); +wint_t __cdecl _fputwc_nolock(wint_t,FILE*); wint_t __cdecl _fputwchar(wint_t); wchar_t* __cdecl _getws(wchar_t*); int __cdecl _putws(const wchar_t*);