Piotr Caban : msvcrt: Add _mktemp_s implementation.
Alexandre Julliard
julliard at winehq.org
Wed Jul 24 14:55:27 CDT 2013
Module: wine
Branch: master
Commit: 7d41f9b3e90943f2112bd986ec5f70781af3125c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=7d41f9b3e90943f2112bd986ec5f70781af3125c
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Jul 24 12:20:42 2013 +0200
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 9479d5e..9012225 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 b83bfe0..ad6d159 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 b8118a9..59ee88d 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 8467b91..5d2ebf6 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 a07e940..35e2c00 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1682,6 +1682,45 @@ MSVCRT_intptr_t CDECL MSVCRT__get_osfhandle(int fd)
}
/*********************************************************************
+ * _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<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(GetFileAttributesA(pattern) == INVALID_FILE_ATTRIBUTES)
+ return 0;
+ }
+
+ pattern[0] = 0;
+ *MSVCRT__errno() = MSVCRT_EEXIST;
+ return MSVCRT_EEXIST;
+}
+
+/*********************************************************************
* _mktemp (MSVCRT.@)
*/
char * CDECL MSVCRT__mktemp(char *pattern)
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index e12d87f..e566440 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 ad5c507..09b615c 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);
More information about the wine-cvs
mailing list