Nikolay Sivov : kernel32: Implement EnumDateFormatsExEx().

Alexandre Julliard julliard at wine.codeweavers.com
Mon Nov 9 08:34:17 CST 2015


Module: wine
Branch: master
Commit: 3d728e68d336bca49a4cb2091871e911332466ff
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=3d728e68d336bca49a4cb2091871e911332466ff

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Nov  8 22:28:34 2015 +0300

kernel32: Implement EnumDateFormatsExEx().

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/kernel32/kernel32.spec |  2 +-
 dlls/kernel32/lcformat.c    | 27 ++++++++++++++++++++++++---
 include/winnls.h            |  2 ++
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index 958c6a7..c324347 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -401,7 +401,7 @@
 @ stdcall EnumCalendarInfoW(ptr long long long)
 @ stdcall EnumDateFormatsA(ptr long long)
 @ stdcall EnumDateFormatsExA(ptr long long)
-# @ stub EnumDateFormatsExEx
+@ stdcall EnumDateFormatsExEx(ptr wstr long long)
 @ stdcall EnumDateFormatsExW(ptr long long)
 @ stdcall EnumDateFormatsW(ptr long long)
 @ stdcall EnumLanguageGroupLocalesA(ptr long long ptr)
diff --git a/dlls/kernel32/lcformat.c b/dlls/kernel32/lcformat.c
index 8f08826..48adb11 100644
--- a/dlls/kernel32/lcformat.c
+++ b/dlls/kernel32/lcformat.c
@@ -1753,10 +1753,12 @@ struct enumdateformats_context {
     union {
         DATEFMT_ENUMPROCW    callback;     /* user callback pointer */
         DATEFMT_ENUMPROCEXW  callbackex;
+        DATEFMT_ENUMPROCEXEX callbackexex;
     } u;
-    LCID  lcid;    /* locale of interest */
-    DWORD flags;
-    BOOL  unicode; /* A vs W callback type, only for regular and Ex callbacks */
+    LCID   lcid;    /* locale of interest */
+    DWORD  flags;
+    LPARAM lParam;
+    BOOL   unicode; /* A vs W callback type, only for regular and Ex callbacks */
 };
 
 /******************************************************************************
@@ -1821,6 +1823,9 @@ static BOOL NLS_EnumDateFormats(const struct enumdateformats_context *ctxt)
         case CALLBACK_ENUMPROCEX:
             ctxt->u.callbackex(ctxt->unicode ? bufW : (WCHAR*)bufA, cal_id);
             break;
+        case CALLBACK_ENUMPROCEXEX:
+            ctxt->u.callbackexex(bufW, cal_id, ctxt->lParam);
+            break;
         default:
             ;
         }
@@ -1900,6 +1905,22 @@ BOOL WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW proc, LCID lcid, DWORD flags)
 }
 
 /**************************************************************************
+ *              EnumDateFormatsExEx	(KERNEL32.@)
+ */
+BOOL WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX proc, const WCHAR *locale, DWORD flags, LPARAM lParam)
+{
+    struct enumdateformats_context ctxt;
+
+    ctxt.type = CALLBACK_ENUMPROCEXEX;
+    ctxt.u.callbackexex = proc;
+    ctxt.lcid = LocaleNameToLCID(locale, 0);
+    ctxt.flags = flags;
+    ctxt.lParam = lParam;
+
+    return NLS_EnumDateFormats(&ctxt);
+}
+
+/**************************************************************************
  *              EnumTimeFormatsA	(KERNEL32.@)
  *
  * FIXME: MSDN mentions only LOCALE_USE_CP_ACP, should we handle
diff --git a/include/winnls.h b/include/winnls.h
index 0f68c81..2f899f8 100644
--- a/include/winnls.h
+++ b/include/winnls.h
@@ -734,6 +734,7 @@ typedef struct _nlsversioninfoex {
 /* Define a bunch of callback types */
 
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM);
+typedef BOOL    (CALLBACK *DATEFMT_ENUMPROCEXEX)(LPWSTR,CALID,LPARAM);
 #if defined(STRICT)
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
@@ -843,6 +844,7 @@ WINBASEAPI BOOL        WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
 WINBASEAPI BOOL        WINAPI EnumDateFormatsExA(DATEFMT_ENUMPROCEXA,LCID,DWORD);
 WINBASEAPI BOOL        WINAPI EnumDateFormatsExW(DATEFMT_ENUMPROCEXW,LCID,DWORD);
 #define                       EnumDateFormatsEx WINELIB_NAME_AW(EnumDateFormatsEx)
+WINBASEAPI BOOL        WINAPI EnumDateFormatsExEx(DATEFMT_ENUMPROCEXEX,LPCWSTR,DWORD,LPARAM);
 WINBASEAPI BOOL        WINAPI EnumSystemCodePagesA(CODEPAGE_ENUMPROCA,DWORD);
 WINBASEAPI BOOL        WINAPI EnumSystemCodePagesW(CODEPAGE_ENUMPROCW,DWORD);
 #define                       EnumSystemCodePages WINELIB_NAME_AW(EnumSystemCodePages)




More information about the wine-cvs mailing list