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