Module: wine Branch: master Commit: b6fc57ec849504ec6e45b513431d669fde9c8029 URL: http://source.winehq.org/git/wine.git/?a=commit;h=b6fc57ec849504ec6e45b51343...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Jul 24 12:20:52 2013 +0200
msvcrt: Add _wmktemp_s 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 | 39 +++++++++++++++++++++++++++++++++++++++ dlls/msvcrt/msvcrt.spec | 2 +- 6 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 9012225..ef6d354 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1557,7 +1557,7 @@ @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s @ cdecl _wmkdir(wstr) msvcrt._wmkdir @ cdecl _wmktemp(wstr) msvcrt._wmktemp -@ stub _wmktemp_s +@ cdecl _wmktemp_s(wstr long) msvcrt._wmktemp_s @ varargs _wopen(wstr long) msvcrt._wopen @ cdecl _wperror(wstr) msvcrt._wperror @ extern _wpgmptr msvcrt._wpgmptr diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index ad6d159..dd76878 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1919,7 +1919,7 @@ @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s @ cdecl _wmkdir(wstr) msvcrt._wmkdir @ cdecl _wmktemp(wstr) msvcrt._wmktemp -@ stub _wmktemp_s +@ cdecl _wmktemp_s(wstr long) msvcrt._wmktemp_s @ varargs _wopen(wstr long) msvcrt._wopen @ cdecl _wperror(wstr) msvcrt._wperror @ extern _wpgmptr msvcrt._wpgmptr diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index 59ee88d..87fbc5d 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -1238,7 +1238,7 @@ @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s @ cdecl _wmkdir(wstr) msvcrt._wmkdir @ cdecl _wmktemp(wstr) msvcrt._wmktemp -@ stub _wmktemp_s +@ cdecl _wmktemp_s(wstr long) msvcrt._wmktemp_s @ varargs _wopen(wstr long) msvcrt._wopen @ cdecl _wperror(wstr) msvcrt._wperror @ extern _wpgmptr msvcrt._wpgmptr diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 5d2ebf6..9800023 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -1211,7 +1211,7 @@ @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) msvcrt._wmakepath_s @ cdecl _wmkdir(wstr) msvcrt._wmkdir @ cdecl _wmktemp(wstr) msvcrt._wmktemp -@ stub _wmktemp_s +@ cdecl _wmktemp_s(wstr long) msvcrt._wmktemp_s @ varargs _wopen(wstr long) msvcrt._wopen @ cdecl _wperror(wstr) msvcrt._wperror @ extern _wpgmptr msvcrt._wpgmptr diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index 35e2c00..8403b4b 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -1757,6 +1757,45 @@ char * CDECL MSVCRT__mktemp(char *pattern) }
/********************************************************************* + * _wmktemp_s (MSVCRT.@) + */ +int CDECL MSVCRT__wmktemp_s(MSVCRT_wchar_t *pattern, MSVCRT_size_t size) +{ + DWORD len, xno, id; + + if(!MSVCRT_CHECK_PMT(pattern!=NULL)) + return MSVCRT_EINVAL; + + for(len=0; len<size; len++) + if(!pattern[len]) + break; + if(!MSVCRT_CHECK_PMT(len!=size && len>=6)) { + if(size) + pattern[0] = 0; + return MSVCRT_EINVAL; + } + + for(xno=1; xno<=6; xno++) + if(!MSVCRT_CHECK_PMT(pattern[len-xno] == 'X')) + return MSVCRT_EINVAL; + + id = GetCurrentProcessId(); + for(xno=1; xno<6; xno++) { + pattern[len-xno] = id%10 + '0'; + id /= 10; + } + + for(pattern[len-6]='a'; pattern[len-6]<='z'; pattern[len-6]++) { + if(GetFileAttributesW(pattern) == INVALID_FILE_ATTRIBUTES) + return 0; + } + + pattern[0] = 0; + *MSVCRT__errno() = MSVCRT_EEXIST; + return MSVCRT_EEXIST; +} + +/********************************************************************* * _wmktemp (MSVCRT.@) */ MSVCRT_wchar_t * CDECL MSVCRT__wmktemp(MSVCRT_wchar_t *pattern) diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e566440..e0e6287 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1180,7 +1180,7 @@ @ cdecl _wmakepath_s(ptr long wstr wstr wstr wstr) @ cdecl _wmkdir(wstr) MSVCRT__wmkdir @ cdecl _wmktemp(wstr) MSVCRT__wmktemp -# stub _wmktemp_s(wstr long) +@ cdecl _wmktemp_s(wstr long) MSVCRT__wmktemp_s @ varargs _wopen(wstr long) MSVCRT__wopen # stub _woutput_s @ stub _wperror(wstr)