Piotr Caban : msvcrt: Add _strftime_l.
Alexandre Julliard
julliard at winehq.org
Thu Aug 11 09:37:47 CDT 2016
Module: wine
Branch: master
Commit: 1505684a85b3f4819d9e7711e526fd8fb2431beb
URL: http://source.winehq.org/git/wine.git/?a=commit;h=1505684a85b3f4819d9e7711e526fd8fb2431beb
Author: Piotr Caban <piotr at codeweavers.com>
Date: Wed Aug 10 17:18:09 2016 +0200
msvcrt: Add _strftime_l.
Based on Daniel Lehman's patch.
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
.../api-ms-win-crt-time-l1-1-0.spec | 2 +-
dlls/msvcr100/msvcr100.spec | 2 +-
dlls/msvcr110/msvcr110.spec | 2 +-
dlls/msvcr120/msvcr120.spec | 2 +-
dlls/msvcr120_app/msvcr120_app.spec | 2 +-
dlls/msvcr80/msvcr80.spec | 2 +-
dlls/msvcr90/msvcr90.spec | 2 +-
dlls/msvcrt/time.c | 31 ++++++++++++++++------
dlls/ucrtbase/ucrtbase.spec | 2 +-
9 files changed, 31 insertions(+), 16 deletions(-)
diff --git a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
index 2939b95..fc39007 100644
--- a/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
+++ b/dlls/api-ms-win-crt-time-l1-1-0/api-ms-win-crt-time-l1-1-0.spec
@@ -42,7 +42,7 @@
@ cdecl _setsystime(ptr long) ucrtbase._setsystime
@ cdecl _strdate(ptr) ucrtbase._strdate
@ cdecl _strdate_s(ptr long) ucrtbase._strdate_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) ucrtbase._strftime_l
@ cdecl _strtime(ptr) ucrtbase._strtime
@ cdecl _strtime_s(ptr long) ucrtbase._strtime_s
@ cdecl _time32(ptr) ucrtbase._time32
diff --git a/dlls/msvcr100/msvcr100.spec b/dlls/msvcr100/msvcr100.spec
index fa09827..3cfac96 100644
--- a/dlls/msvcr100/msvcr100.spec
+++ b/dlls/msvcr100/msvcr100.spec
@@ -1340,7 +1340,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
diff --git a/dlls/msvcr110/msvcr110.spec b/dlls/msvcr110/msvcr110.spec
index e0ab69a..2eb5064 100644
--- a/dlls/msvcr110/msvcr110.spec
+++ b/dlls/msvcr110/msvcr110.spec
@@ -1697,7 +1697,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
diff --git a/dlls/msvcr120/msvcr120.spec b/dlls/msvcr120/msvcr120.spec
index a2e7832..5ba624a 100644
--- a/dlls/msvcr120/msvcr120.spec
+++ b/dlls/msvcr120/msvcr120.spec
@@ -1708,7 +1708,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
diff --git a/dlls/msvcr120_app/msvcr120_app.spec b/dlls/msvcr120_app/msvcr120_app.spec
index 94c0e08..ffcfcbd 100644
--- a/dlls/msvcr120_app/msvcr120_app.spec
+++ b/dlls/msvcr120_app/msvcr120_app.spec
@@ -1419,7 +1419,7 @@
@ cdecl _strdup(str) msvcr120._strdup
@ cdecl _strerror(long) msvcr120._strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) msvcr120._strftime_l
@ cdecl _stricmp(str str) msvcr120._stricmp
@ cdecl _stricmp_l(str str ptr) msvcr120._stricmp_l
@ cdecl _stricoll(str str) msvcr120._stricoll
diff --git a/dlls/msvcr80/msvcr80.spec b/dlls/msvcr80/msvcr80.spec
index c0edc8f..069bc9f 100644
--- a/dlls/msvcr80/msvcr80.spec
+++ b/dlls/msvcr80/msvcr80.spec
@@ -1020,7 +1020,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
diff --git a/dlls/msvcr90/msvcr90.spec b/dlls/msvcr90/msvcr90.spec
index bf5ab57..b30cd4d 100644
--- a/dlls/msvcr90/msvcr90.spec
+++ b/dlls/msvcr90/msvcr90.spec
@@ -995,7 +995,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
diff --git a/dlls/msvcrt/time.c b/dlls/msvcrt/time.c
index ed88e3c..004dffb 100644
--- a/dlls/msvcrt/time.c
+++ b/dlls/msvcrt/time.c
@@ -1055,11 +1055,8 @@ static inline BOOL strftime_int(char *str, MSVCRT_size_t *pos, MSVCRT_size_t max
return TRUE;
}
-/*********************************************************************
- * _Strftime (MSVCRT.@)
- */
-MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format,
- const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data)
+static MSVCRT_size_t strftime_helper(char *str, MSVCRT_size_t max, const char *format,
+ const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data, MSVCRT__locale_t loc)
{
MSVCRT_size_t ret, tmp;
BOOL alternate;
@@ -1074,11 +1071,11 @@ MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format,
}
if(!time_data)
- time_data = get_locinfo()->lc_time_curr;
+ time_data = loc ? loc->locinfo->lc_time_curr : get_locinfo()->lc_time_curr;
for(ret=0; *format && ret<max; format++) {
if(*format != '%') {
- if(MSVCRT_isleadbyte((unsigned char)*format)) {
+ if(MSVCRT__isleadbyte_l((unsigned char)*format, loc)) {
str[ret++] = *(format++);
if(ret == max) continue;
if(!str[ret]) goto einval_error;
@@ -1239,13 +1236,31 @@ einval_error:
return 0;
}
+/********************************************************************
+ * _strftime_l (MSVCRT.@)
+ */
+MSVCRT_size_t CDECL MSVCRT__strftime_l( char *str, MSVCRT_size_t max, const char *format,
+ const struct MSVCRT_tm *mstm, MSVCRT__locale_t loc )
+{
+ return strftime_helper(str, max, format, mstm, NULL, loc);
+}
+
+/*********************************************************************
+ * _Strftime (MSVCRT.@)
+ */
+MSVCRT_size_t CDECL _Strftime(char *str, MSVCRT_size_t max, const char *format,
+ const struct MSVCRT_tm *mstm, MSVCRT___lc_time_data *time_data)
+{
+ return strftime_helper(str, max, format, mstm, time_data, NULL);
+}
+
/*********************************************************************
* strftime (MSVCRT.@)
*/
MSVCRT_size_t CDECL MSVCRT_strftime( char *str, MSVCRT_size_t max, const char *format,
const struct MSVCRT_tm *mstm )
{
- return _Strftime(str, max, format, mstm, NULL);
+ return strftime_helper(str, max, format, mstm, NULL, NULL);
}
/*********************************************************************
diff --git a/dlls/ucrtbase/ucrtbase.spec b/dlls/ucrtbase/ucrtbase.spec
index bb549d1..a0260d3 100644
--- a/dlls/ucrtbase/ucrtbase.spec
+++ b/dlls/ucrtbase/ucrtbase.spec
@@ -1926,7 +1926,7 @@
@ cdecl _strdup(str) MSVCRT__strdup
@ cdecl _strerror(long) MSVCRT__strerror
@ stub _strerror_s
-@ stub _strftime_l
+@ cdecl _strftime_l(str long str ptr ptr) MSVCRT__strftime_l
@ cdecl _stricmp(str str) MSVCRT__stricmp
@ cdecl _stricmp_l(str str ptr) MSVCRT__stricmp_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
More information about the wine-cvs
mailing list