From 7d41f9b3e90943f2112bd986ec5f70781af3125c Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Wed, 24 Jul 2013 12:20:42 +0200 Subject: [PATCH] msvcrt: Add _mktemp_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 +- include/msvcrt/io.h | 1 + 7 files changed, 45 insertions(+), 5 deletions(-) diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec index 9479d5e6e17..9012225b040 100644 --- a/dlls/msvcr100/msvcr100.spec +++ b/dlls/msvcr100/msvcr100.spec @@ -1204,7 +1204,7 @@ @ cdecl _mkgmtime32(ptr) msvcrt._mkgmtime32 @ cdecl _mkgmtime64(ptr) msvcrt._mkgmtime64 @ cdecl _mktemp(str) msvcrt._mktemp -@ stub _mktemp_s +@ cdecl _mktemp_s(str long) msvcrt._mktemp_s @ cdecl _mktime32(ptr) msvcrt._mktime32 @ cdecl _mktime64(ptr) msvcrt._mktime64 @ cdecl _msize(ptr) msvcrt._msize diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec index b83bfe028a3..ad6d15929ee 100644 --- a/dlls/msvcr110/msvcr110.spec +++ b/dlls/msvcr110/msvcr110.spec @@ -1566,7 +1566,7 @@ @ cdecl _mkgmtime32(ptr) msvcrt._mkgmtime32 @ cdecl _mkgmtime64(ptr) msvcrt._mkgmtime64 @ cdecl _mktemp(str) msvcrt._mktemp -@ stub _mktemp_s +@ cdecl _mktemp_s(str long) msvcrt._mktemp_s @ cdecl _mktime32(ptr) msvcrt._mktime32 @ cdecl _mktime64(ptr) msvcrt._mktime64 @ cdecl _msize(ptr) msvcrt._msize diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec index b8118a9b3c1..59ee88d0df3 100644 --- a/dlls/msvcr80/msvcr80.spec +++ b/dlls/msvcr80/msvcr80.spec @@ -875,7 +875,7 @@ @ cdecl _mkgmtime32(ptr) msvcrt._mkgmtime32 @ cdecl _mkgmtime64(ptr) msvcrt._mkgmtime64 @ cdecl _mktemp(str) msvcrt._mktemp -@ stub _mktemp_s +@ cdecl _mktemp_s(str long) msvcrt._mktemp_s @ cdecl _mktime32(ptr) msvcrt._mktime32 @ cdecl _mktime64(ptr) msvcrt._mktime64 @ cdecl _msize(ptr) msvcrt._msize diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec index 8467b918366..5d2ebf6d120 100644 --- a/dlls/msvcr90/msvcr90.spec +++ b/dlls/msvcr90/msvcr90.spec @@ -853,7 +853,7 @@ @ cdecl _mkgmtime32(ptr) msvcrt._mkgmtime32 @ cdecl _mkgmtime64(ptr) msvcrt._mkgmtime64 @ cdecl _mktemp(str) msvcrt._mktemp -@ stub _mktemp_s +@ cdecl _mktemp_s(str long) msvcrt._mktemp_s @ cdecl _mktime32(ptr) msvcrt._mktime32 @ cdecl _mktime64(ptr) msvcrt._mktime64 @ cdecl _msize(ptr) msvcrt._msize diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c index a07e94079ab..35e2c004b83 100644 --- a/dlls/msvcrt/file.c +++ b/dlls/msvcrt/file.c @@ -1681,6 +1681,45 @@ MSVCRT_intptr_t CDECL MSVCRT__get_osfhandle(int fd) return (MSVCRT_intptr_t)hand; } +/********************************************************************* + * _mktemp_s (MSVCRT.@) + */ +int CDECL MSVCRT__mktemp_s(char *pattern, MSVCRT_size_t size) +{ + DWORD len, xno, id; + + if(!MSVCRT_CHECK_PMT(pattern!=NULL)) + return MSVCRT_EINVAL; + + for(len=0; 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(GetFileAttributesA(pattern) == INVALID_FILE_ATTRIBUTES) + return 0; + } + + pattern[0] = 0; + *MSVCRT__errno() = MSVCRT_EEXIST; + return MSVCRT_EEXIST; +} + /********************************************************************* * _mktemp (MSVCRT.@) */ diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index e12d87f2a7b..e566440e320 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -830,7 +830,7 @@ @ cdecl _mkgmtime32(ptr) MSVCRT__mkgmtime32 @ cdecl _mkgmtime64(ptr) MSVCRT__mkgmtime64 @ cdecl _mktemp(str) MSVCRT__mktemp -# stub _mktemp_s(str long) +@ cdecl _mktemp_s(str long) MSVCRT__mktemp_s @ cdecl _mktime32(ptr) MSVCRT__mktime32 @ cdecl _mktime64(ptr) MSVCRT__mktime64 @ cdecl _msize(ptr) diff --git a/include/msvcrt/io.h b/include/msvcrt/io.h index ad5c5071c0b..09b615c8f1a 100644 --- a/include/msvcrt/io.h +++ b/include/msvcrt/io.h @@ -108,6 +108,7 @@ int __cdecl _locking(int,int,__msvcrt_long); __msvcrt_long __cdecl _lseek(int,__msvcrt_long,int); __int64 __cdecl _lseeki64(int,__int64,int); char* __cdecl _mktemp(char*); +int __cdecl _mktemp_s(char*,size_t); int __cdecl _open(const char*,int,...); int __cdecl _open_osfhandle(intptr_t,int); int __cdecl _pipe(int*,unsigned int,int);