Nikolay Sivov : kernel32: Implement EnumCalendarInfoExEx().

Alexandre Julliard julliard at wine.codeweavers.com
Mon Jun 29 08:12:09 CDT 2015


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

Author: Nikolay Sivov <nsivov at codeweavers.com>
Date:   Sun Jun 28 16:03:57 2015 +0300

kernel32: Implement EnumCalendarInfoExEx().

---

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

diff --git a/dlls/kernel32/kernel32.spec b/dlls/kernel32/kernel32.spec
index f9a0770..0070c98 100644
--- a/dlls/kernel32/kernel32.spec
+++ b/dlls/kernel32/kernel32.spec
@@ -396,7 +396,7 @@
 @ stdcall EnterCriticalSection(ptr) ntdll.RtlEnterCriticalSection
 @ stdcall EnumCalendarInfoA(ptr long long long)
 @ stdcall EnumCalendarInfoExA(ptr long long long)
-# @ stub EnumCalendarInfoExEx
+@ stdcall EnumCalendarInfoExEx(ptr wstr long wstr long long)
 @ stdcall EnumCalendarInfoExW(ptr long long long)
 @ stdcall EnumCalendarInfoW(ptr long long long)
 @ stdcall EnumDateFormatsA(ptr long long)
diff --git a/dlls/kernel32/lcformat.c b/dlls/kernel32/lcformat.c
index ea96167..2c81d02 100644
--- a/dlls/kernel32/lcformat.c
+++ b/dlls/kernel32/lcformat.c
@@ -1974,6 +1974,7 @@ BOOL WINAPI EnumTimeFormatsW(TIMEFMT_ENUMPROCW proc, LCID lcid, DWORD flags)
 enum enumcalendar_callback_type {
     CALLBACK_ENUMPROC,
     CALLBACK_ENUMPROCEX,
+    CALLBACK_ENUMPROCEXEX
 };
 
 struct enumcalendar_context {
@@ -1981,10 +1982,12 @@ struct enumcalendar_context {
     union {
         CALINFO_ENUMPROCW    callback;     /* user callback pointer */
         CALINFO_ENUMPROCEXW  callbackex;
+        CALINFO_ENUMPROCEXEX callbackexex;
     } u;
     LCID    lcid;     /* locale of interest */
     CALID   calendar; /* specific calendar or ENUM_ALL_CALENDARS */
     CALTYPE caltype;  /* calendar information type */
+    LPARAM  lParam;   /* user input parameter passed to callback, for ExEx case only */
     BOOL    unicode;  /* A vs W callback type, only for regular and Ex callbacks */
 };
 
@@ -2090,6 +2093,9 @@ static BOOL NLS_EnumCalendarInfo(const struct enumcalendar_context *ctxt)
     case CALLBACK_ENUMPROCEX:
       ret = ctxt->u.callbackex(buf, calendar);
       break;
+    case CALLBACK_ENUMPROCEXEX:
+      ret = ctxt->u.callbackexex(buf, calendar, NULL, ctxt->lParam);
+      break;
     default:
       ;
     }
@@ -2122,8 +2128,6 @@ cleanup:
 
 /******************************************************************************
  *		EnumCalendarInfoA	[KERNEL32.@]
- *
- * See EnumCalendarInfoAW.
  */
 BOOL WINAPI EnumCalendarInfoA( CALINFO_ENUMPROCA calinfoproc,LCID locale,
                                CALID calendar,CALTYPE caltype )
@@ -2137,14 +2141,13 @@ BOOL WINAPI EnumCalendarInfoA( CALINFO_ENUMPROCA calinfoproc,LCID locale,
   ctxt.lcid = locale;
   ctxt.calendar = calendar;
   ctxt.caltype = caltype;
+  ctxt.lParam = 0;
   ctxt.unicode = FALSE;
   return NLS_EnumCalendarInfo(&ctxt);
 }
 
 /******************************************************************************
  *		EnumCalendarInfoW	[KERNEL32.@]
- *
- * See EnumCalendarInfoAW.
  */
 BOOL WINAPI EnumCalendarInfoW( CALINFO_ENUMPROCW calinfoproc,LCID locale,
                                CALID calendar,CALTYPE caltype )
@@ -2158,14 +2161,13 @@ BOOL WINAPI EnumCalendarInfoW( CALINFO_ENUMPROCW calinfoproc,LCID locale,
   ctxt.lcid = locale;
   ctxt.calendar = calendar;
   ctxt.caltype = caltype;
+  ctxt.lParam = 0;
   ctxt.unicode = TRUE;
   return NLS_EnumCalendarInfo(&ctxt);
 }
 
 /******************************************************************************
  *		EnumCalendarInfoExA	[KERNEL32.@]
- *
- * See EnumCalendarInfoAW.
  */
 BOOL WINAPI EnumCalendarInfoExA( CALINFO_ENUMPROCEXA calinfoproc,LCID locale,
                                  CALID calendar,CALTYPE caltype )
@@ -2179,14 +2181,13 @@ BOOL WINAPI EnumCalendarInfoExA( CALINFO_ENUMPROCEXA calinfoproc,LCID locale,
   ctxt.lcid = locale;
   ctxt.calendar = calendar;
   ctxt.caltype = caltype;
+  ctxt.lParam = 0;
   ctxt.unicode = FALSE;
   return NLS_EnumCalendarInfo(&ctxt);
 }
 
 /******************************************************************************
  *		EnumCalendarInfoExW	[KERNEL32.@]
- *
- * See EnumCalendarInfoAW.
  */
 BOOL WINAPI EnumCalendarInfoExW( CALINFO_ENUMPROCEXW calinfoproc,LCID locale,
                                  CALID calendar,CALTYPE caltype )
@@ -2200,6 +2201,27 @@ BOOL WINAPI EnumCalendarInfoExW( CALINFO_ENUMPROCEXW calinfoproc,LCID locale,
   ctxt.lcid = locale;
   ctxt.calendar = calendar;
   ctxt.caltype = caltype;
+  ctxt.lParam = 0;
+  ctxt.unicode = TRUE;
+  return NLS_EnumCalendarInfo(&ctxt);
+}
+
+/******************************************************************************
+ *		EnumCalendarInfoExEx	[KERNEL32.@]
+ */
+BOOL WINAPI EnumCalendarInfoExEx( CALINFO_ENUMPROCEXEX calinfoproc, LPCWSTR locale, CALID calendar,
+    LPCWSTR reserved, CALTYPE caltype, LPARAM lParam)
+{
+  struct enumcalendar_context ctxt;
+
+  TRACE("(%p,%s,0x%08x,%p,0x%08x,0x%ld)\n", calinfoproc, debugstr_w(locale), calendar, reserved, caltype, lParam);
+
+  ctxt.type = CALLBACK_ENUMPROCEXEX;
+  ctxt.u.callbackexex = calinfoproc;
+  ctxt.lcid = LocaleNameToLCID(locale, 0);
+  ctxt.calendar = calendar;
+  ctxt.caltype = caltype;
+  ctxt.lParam = lParam;
   ctxt.unicode = TRUE;
   return NLS_EnumCalendarInfo(&ctxt);
 }
diff --git a/include/winnls.h b/include/winnls.h
index 693cb30..bf5431f 100644
--- a/include/winnls.h
+++ b/include/winnls.h
@@ -733,6 +733,7 @@ typedef struct _nlsversioninfoex {
 
 /* Define a bunch of callback types */
 
+typedef BOOL    (CALLBACK *CALINFO_ENUMPROCEXEX)(LPWSTR,CALID,LPWSTR,LPARAM);
 #if defined(STRICT)
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCA)(LPSTR);
 typedef BOOL    (CALLBACK *CALINFO_ENUMPROCW)(LPWSTR);
@@ -832,6 +833,7 @@ WINBASEAPI BOOL        WINAPI EnumCalendarInfoW(CALINFO_ENUMPROCW,LCID,CALID,CAL
 WINBASEAPI BOOL        WINAPI EnumCalendarInfoExA(CALINFO_ENUMPROCEXA,LCID,CALID,CALTYPE);
 WINBASEAPI BOOL        WINAPI EnumCalendarInfoExW(CALINFO_ENUMPROCEXW,LCID,CALID,CALTYPE);
 #define                       EnumCalendarInfoEx WINELIB_NAME_AW(EnumCalendarInfoEx)
+WINBASEAPI BOOL        WINAPI EnumCalendarInfoExEx(CALINFO_ENUMPROCEXEX,LPCWSTR,CALID,LPCWSTR,CALTYPE,LPARAM);
 WINBASEAPI BOOL        WINAPI EnumDateFormatsA(DATEFMT_ENUMPROCA,LCID,DWORD);
 WINBASEAPI BOOL        WINAPI EnumDateFormatsW(DATEFMT_ENUMPROCW,LCID,DWORD);
 #define                       EnumDateFormats WINELIB_NAME_AW(EnumDateFormats)




More information about the wine-cvs mailing list