From: Dmitry Timoshkov <dmitry(a)baikal.ru> MSDN states that CAL_RETURN_NUMBER is valid for GetCalendarInfo(). Signed-off-by: Dmitry Timoshkov <dmitry(a)baikal.ru> --- dlls/kernel32/tests/locale.c | 54 ++++++++++++++++++++++++++++++++---- dlls/kernelbase/locale.c | 2 ++ 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c index c3d28a0c6aa..9cdd80dcfd1 100644 --- a/dlls/kernel32/tests/locale.c +++ b/dlls/kernel32/tests/locale.c @@ -8254,7 +8254,15 @@ static const LCID locales_with_optional_calendars[] = { static BOOL CALLBACK calinfo_procA(LPSTR calinfo) { - (void)calinfo; + int val; + const char *p = calinfo; + while (*p) + { + ok(isdigit(*p), "got %c\n", *p); + p++; + } + val = atoi(calinfo); + ok(val >= CAL_GREGORIAN && val <= CAL_UMALQURA, "got %d\n", val); return TRUE; } @@ -8263,6 +8271,9 @@ static void test_EnumCalendarInfoA(void) BOOL ret; INT i; + ret = EnumCalendarInfoA( calinfo_procA, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_ICALINTVALUE ); + ok( ret, "EnumCalendarInfoA for user default locale failed: %lu\n", GetLastError() ); + ret = EnumCalendarInfoA( calinfo_procA, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_RETURN_NUMBER | CAL_ICALINTVALUE ); ok( ret, "EnumCalendarInfoA for user default locale failed: %lu\n", GetLastError() ); @@ -8279,7 +8290,15 @@ static void test_EnumCalendarInfoA(void) static BOOL CALLBACK calinfo_procW(LPWSTR calinfo) { - (void)calinfo; + int val; + const WCHAR *p = calinfo; + while (*p) + { + ok(isdigit(*p), "got %c\n", *p); + p++; + } + val = _wtoi(calinfo); + ok(val >= CAL_GREGORIAN && val <= CAL_UMALQURA, "got %d\n", val); return TRUE; } @@ -8288,6 +8307,9 @@ static void test_EnumCalendarInfoW(void) BOOL ret; INT i; + ret = EnumCalendarInfoW( calinfo_procW, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_ICALINTVALUE ); + ok( ret, "EnumCalendarInfoW for user default locale failed: %lu\n", GetLastError() ); + ret = EnumCalendarInfoW( calinfo_procW, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_RETURN_NUMBER | CAL_ICALINTVALUE ); ok( ret, "EnumCalendarInfoW for user default locale failed: %lu\n", GetLastError() ); @@ -8304,8 +8326,15 @@ static void test_EnumCalendarInfoW(void) static BOOL CALLBACK calinfoex_procA(LPSTR calinfo, LCID calid) { - (void)calinfo; - (void)calid; + int val; + const char *p = calinfo; + while (*p) + { + ok(isdigit(*p), "got %c\n", *p); + p++; + } + val = atoi(calinfo); + ok(val >= CAL_GREGORIAN && val <= CAL_UMALQURA, "got %d\n", val); return TRUE; } @@ -8314,6 +8343,9 @@ static void test_EnumCalendarInfoExA(void) BOOL ret; INT i; + ret = EnumCalendarInfoExA( calinfoex_procA, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_ICALINTVALUE ); + ok( ret, "EnumCalendarInfoExA for user default locale failed: %lu\n", GetLastError() ); + ret = EnumCalendarInfoExA( calinfoex_procA, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_RETURN_NUMBER | CAL_ICALINTVALUE ); ok( ret, "EnumCalendarInfoExA for user default locale failed: %lu\n", GetLastError() ); @@ -8330,8 +8362,15 @@ static void test_EnumCalendarInfoExA(void) static BOOL CALLBACK calinfoex_procW(LPWSTR calinfo, LCID calid) { - (void)calinfo; - (void)calid; + int val; + const WCHAR *p = calinfo; + while (*p) + { + ok(isdigit(*p), "got %c\n", *p); + p++; + } + val = _wtoi(calinfo); + ok(val >= CAL_GREGORIAN && val <= CAL_UMALQURA, "got %d\n", val); return TRUE; } @@ -8340,6 +8379,9 @@ static void test_EnumCalendarInfoExW(void) BOOL ret; INT i; + ret = EnumCalendarInfoExW( calinfoex_procW, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_ICALINTVALUE ); + ok( ret, "EnumCalendarInfoExW for user default locale failed: %lu\n", GetLastError() ); + ret = EnumCalendarInfoExW( calinfoex_procW, LOCALE_USER_DEFAULT, ENUM_ALL_CALENDARS, CAL_RETURN_NUMBER | CAL_ICALINTVALUE ); ok( ret, "EnumCalendarInfoExW for user default locale failed: %lu\n", GetLastError() ); diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c index c5be4cf95e2..71efeed0043 100644 --- a/dlls/kernelbase/locale.c +++ b/dlls/kernelbase/locale.c @@ -4345,6 +4345,8 @@ BOOL WINAPI DECLSPEC_HOTPATCH Internal_EnumCalendarInfo( CALINFO_ENUMPROCW proc, return FALSE; } + type &= ~CAL_RETURN_NUMBER; + for (i = 0; i < count; i++) { id = calendars[i]; -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/6313