Piotr Caban : msvcrt: Add _wctime32_s implementation.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Sep 15 09:50:50 CDT 2015
Module: wine
Branch: master
Commit: ecac39c19b8938066978f4c6b4a6e617d9ccf2ff
URL: http://source.winehq.org/git/wine.git/?a=commit;h=ecac39c19b8938066978f4c6b4a6e617d9ccf2ff
Author: Piotr Caban <piotr at codeweavers.com>
Date: Mon Sep 14 17:48:44 2015 +0200
msvcrt: Add _wctime32_s implementation.
---
dlls/msvcr100/msvcr100.spec | 4 ++--
dlls/msvcr110/msvcr110.spec | 4 ++--
dlls/msvcr120/msvcr120.spec | 4 ++--
dlls/msvcr120_app/msvcr120_app.spec | 4 ++--
dlls/msvcr80/msvcr80.spec | 4 ++--
dlls/msvcr90/msvcr90.spec | 4 ++--
dlls/msvcrt/msvcrt.spec | 4 ++--
dlls/msvcrt/time.c | 47 ++++++++++++++++++++++++++++++++++++-
8 files changed, 60 insertions(+), 15 deletions(-)
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index f9eae91..edff2c9 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1525,9 +1525,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index 51eddfb..9dda90a 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1884,9 +1884,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index 184c9b5..6e13eef 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1908,9 +1908,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index ec97ad7..bc4d63b 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1601,9 +1601,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) msvcr120._wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) msvcr120._wcsxfrm_l
@ cdecl _wctime32(ptr) msvcr120._wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) msvcr120._wctime32_s
@ cdecl _wctime64(ptr) msvcr120._wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) msvcr120._wctime64_s
@ cdecl _wctomb_l(ptr long ptr) msvcr120._wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) msvcr120._wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index fac2446..cc10014 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1205,9 +1205,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index 479b88b..e5415c4 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -1180,9 +1180,9 @@
@ cdecl _wcsupr_s_l(wstr long ptr) MSVCRT__wcsupr_s_l
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-@ stub _wctime32_s
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-@ stub _wctime64_s
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec
index 37b94e3..3bd47d2 100644
--- a/dlls/msvcrt/msvcrt.spec
+++ b/dlls/msvcrt/msvcrt.spec
@@ -1137,9 +1137,9 @@
@ cdecl _wcsxfrm_l(ptr wstr long ptr) MSVCRT__wcsxfrm_l
@ cdecl _wctime(ptr) MSVCRT__wctime
@ cdecl _wctime32(ptr) MSVCRT__wctime32
-# stub _wctime32_s(ptr long ptr)
+@ cdecl _wctime32_s(ptr long ptr) MSVCRT__wctime32_s
@ cdecl _wctime64(ptr) MSVCRT__wctime64
-# stub _wctime64_s(ptr long ptr)
+@ cdecl _wctime64_s(ptr long ptr) MSVCRT__wctime64_s
@ cdecl _wctomb_l(ptr long ptr) MSVCRT__wctomb_l
@ cdecl _wctomb_s_l(ptr ptr long long ptr) MSVCRT__wctomb_s_l
# extern _wctype
diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index e52e1d8..7fed3b3 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -1358,7 +1358,7 @@ int CDECL MSVCRT__wasctime_s(MSVCRT_wchar_t* time, MSVCRT_size_t size, const str
if (!MSVCRT_CHECK_PMT(mstm != NULL)) return MSVCRT_EINVAL;
ret = MSVCRT_asctime_s(buffer, sizeof(buffer), mstm);
- if(!ret)
+ if(ret)
return ret;
MultiByteToWideChar(CP_ACP, 0, buffer, -1, time, size);
return 0;
@@ -1469,6 +1469,51 @@ MSVCRT_wchar_t * CDECL MSVCRT__wctime(const MSVCRT___time32_t *time)
#endif
/*********************************************************************
+ * _wctime64_s (MSVCRT.@)
+ */
+int CDECL MSVCRT__wctime64_s(MSVCRT_wchar_t *buf,
+ MSVCRT_size_t size, const MSVCRT___time64_t *time)
+{
+ struct MSVCRT_tm tm;
+ int ret;
+
+ if(!MSVCRT_CHECK_PMT(buf != NULL)) return MSVCRT_EINVAL;
+ if(!MSVCRT_CHECK_PMT(size != 0)) return MSVCRT_EINVAL;
+ buf[0] = 0;
+ if(!MSVCRT_CHECK_PMT(time != NULL)) return MSVCRT_EINVAL;
+ if(!MSVCRT_CHECK_PMT(*time >= 0)) return MSVCRT_EINVAL;
+ if(!MSVCRT_CHECK_PMT(*time <= _MAX__TIME64_T)) return MSVCRT_EINVAL;
+
+ ret = _localtime64_s(&tm, time);
+ if(ret != 0)
+ return ret;
+
+ return MSVCRT__wasctime_s(buf, size, &tm);
+}
+
+/*********************************************************************
+ * _wctime32_s (MSVCRT.@)
+ */
+int CDECL MSVCRT__wctime32_s(MSVCRT_wchar_t *buf, MSVCRT_size_t size,
+ const MSVCRT___time32_t *time)
+{
+ struct MSVCRT_tm tm;
+ int ret;
+
+ if(!MSVCRT_CHECK_PMT(buf != NULL)) return MSVCRT_EINVAL;
+ if(!MSVCRT_CHECK_PMT(size != 0)) return MSVCRT_EINVAL;
+ buf[0] = 0;
+ if(!MSVCRT_CHECK_PMT(time != NULL)) return MSVCRT_EINVAL;
+ if(!MSVCRT_CHECK_PMT(*time >= 0)) return MSVCRT_EINVAL;
+
+ ret = _localtime32_s(&tm, time);
+ if(ret != 0)
+ return ret;
+
+ return MSVCRT__wasctime_s(buf, size, &tm);
+}
+
+/*********************************************************************
* _get_timezone (MSVCR100.@)
*/
int CDECL _get_timezone(LONG *timezone)
More information about the wine-cvs
mailing list