Module: wine Branch: master Commit: 9fda14a9d62d5b30a4611eb45d1b8bd6c8db147e URL: http://source.winehq.org/git/wine.git/?a=commit;h=9fda14a9d62d5b30a4611eb45d...
Author: Iván Matellanes matellanesivan@gmail.com Date: Tue Oct 7 13:35:29 2014 +0200
msvcrt: Added _fclose_nolock() implementation.
---
dlls/msvcr100/msvcr100.spec | 2 +- dlls/msvcr110/msvcr110.spec | 2 +- dlls/msvcr80/msvcr80.spec | 2 +- dlls/msvcr90/msvcr90.spec | 2 +- dlls/msvcrt/file.c | 17 ++++++++++++++--- dlls/msvcrt/msvcrt.h | 1 + include/msvcrt/stdio.h | 1 + 7 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 84ddcc9..2796576 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -794,7 +794,7 @@ @ cdecl _execvpe(str ptr ptr) @ cdecl _exit(long) MSVCRT__exit @ cdecl _expand(ptr long) -@ stub _fclose_nolock +@ cdecl _fclose_nolock(ptr) MSVCRT__fclose_nolock @ cdecl _fcloseall() MSVCRT__fcloseall @ cdecl _fcvt(double long ptr ptr) MSVCRT__fcvt @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index 36c4137..ae6c356 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1142,7 +1142,7 @@ @ cdecl _execvpe(str ptr ptr) @ cdecl _exit(long) MSVCRT__exit @ cdecl _expand(ptr long) -@ stub _fclose_nolock +@ cdecl _fclose_nolock(ptr) MSVCRT__fclose_nolock @ cdecl _fcloseall() MSVCRT__fcloseall @ cdecl _fcvt(double long ptr ptr) MSVCRT__fcvt @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 1745f64..fc38453 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -461,7 +461,7 @@ @ cdecl _execvpe(str ptr ptr) @ cdecl _exit(long) MSVCRT__exit @ cdecl _expand(ptr long) -@ stub _fclose_nolock +@ cdecl _fclose_nolock(ptr) MSVCRT__fclose_nolock @ cdecl _fcloseall() MSVCRT__fcloseall @ cdecl _fcvt(double long ptr ptr) MSVCRT__fcvt @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index ba3757a..4267c2c 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -443,7 +443,7 @@ @ cdecl _execvpe(str ptr ptr) @ cdecl _exit(long) MSVCRT__exit @ cdecl _expand(ptr long) -@ stub _fclose_nolock +@ cdecl _fclose_nolock(ptr) MSVCRT__fclose_nolock @ cdecl _fcloseall() MSVCRT__fcloseall @ cdecl _fcvt(double long ptr ptr) MSVCRT__fcvt @ cdecl _fcvt_s(ptr long double long ptr ptr) MSVCRT__fcvt_s diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 7ce8b59..c57861a 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -3373,9 +3373,22 @@ int CDECL MSVCRT__putw(int val, MSVCRT_FILE* file) */ int CDECL MSVCRT_fclose(MSVCRT_FILE* file) { - int r, flag; + int ret;
MSVCRT__lock_file(file); + ret = MSVCRT__fclose_nolock(file); + MSVCRT__unlock_file(file); + + return ret; +} + +/********************************************************************* + * _fclose_nolock (MSVCRT.@) + */ +int CDECL MSVCRT__fclose_nolock(MSVCRT_FILE* file) +{ + int r, flag; + flag = file->_flag; MSVCRT_free(file->_tmpfname); file->_tmpfname = NULL; @@ -3386,9 +3399,7 @@ int CDECL MSVCRT_fclose(MSVCRT_FILE* file) MSVCRT_free(file->_base);
r=MSVCRT__close(file->_file); - file->_flag = 0; - MSVCRT__unlock_file(file);
return ((r == -1) || (flag & MSVCRT__IOERR) ? MSVCRT_EOF : 0); } diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 54cd11a..200e35c 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -926,6 +926,7 @@ MSVCRT_ulong* __cdecl MSVCRT___doserrno(void); int* __cdecl MSVCRT__errno(void); char* __cdecl MSVCRT_getenv(const char*); int __cdecl MSVCRT_fclose(MSVCRT_FILE*); +int __cdecl MSVCRT__fclose_nolock(MSVCRT_FILE*); void __cdecl MSVCRT_terminate(void); MSVCRT_FILE* __cdecl MSVCRT__iob_func(void); MSVCRT_clock_t __cdecl MSVCRT_clock(void); diff --git a/include/msvcrt/stdio.h b/include/msvcrt/stdio.h index 737003d..184dd2b 100644 --- a/include/msvcrt/stdio.h +++ b/include/msvcrt/stdio.h @@ -129,6 +129,7 @@ int __cdecl _vsprintf_p_l(char*,size_t,const char*,_locale_t,__ms_va_list);
void __cdecl clearerr(FILE*); int __cdecl fclose(FILE*); +int __cdecl _fclose_nolock(FILE*); int __cdecl feof(FILE*); int __cdecl ferror(FILE*); int __cdecl fflush(FILE*);