Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
a074d0c3
Commit
a074d0c3
authored
Apr 05, 2022
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernelbase: Reimplement GetCalendarInfoEx/W using the locale.nls data.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
65fc470d
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
226 additions
and
179 deletions
+226
-179
lcformat.c
dlls/kernel32/lcformat.c
+4
-6
locale.c
dlls/kernelbase/locale.c
+221
-173
winnls.h
include/winnls.h
+1
-0
No files found.
dlls/kernel32/lcformat.c
View file @
a074d0c3
...
...
@@ -1763,12 +1763,10 @@ int WINAPI GetCalendarInfoA( LCID lcid, CALID id, CALTYPE type, LPSTR data, int
int
ret
,
sizeW
=
size
;
LPWSTR
dataW
=
NULL
;
if
(
NLS_IsUnicodeOnlyLcid
(
lcid
))
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
if
(
!
size
&&
!
(
type
&
CAL_RETURN_NUMBER
))
sizeW
=
GetCalendarInfoW
(
lcid
,
id
,
type
,
NULL
,
0
,
NULL
);
if
(
type
&
CAL_RETURN_NUMBER
)
return
GetCalendarInfoW
(
lcid
,
id
,
type
,
(
WCHAR
*
)
data
,
size
,
val
)
*
sizeof
(
WCHAR
);
if
(
!
size
)
sizeW
=
GetCalendarInfoW
(
lcid
,
id
,
type
,
NULL
,
0
,
NULL
);
if
(
!
(
dataW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeW
*
sizeof
(
WCHAR
))))
return
0
;
ret
=
GetCalendarInfoW
(
lcid
,
id
,
type
,
dataW
,
sizeW
,
val
);
...
...
dlls/kernelbase/locale.c
View file @
a074d0c3
...
...
@@ -208,6 +208,26 @@ static const WCHAR ligatures[][5] =
{
0xfb06
,
's'
,
't'
,
0
},
};
struct
calendar
{
USHORT
icalintvalue
;
/* 00 */
USHORT
itwodigityearmax
;
/* 02 */
UINT
sshortdate
;
/* 04 */
UINT
syearmonth
;
/* 08 */
UINT
slongdate
;
/* 0c */
UINT
serastring
;
/* 10 */
UINT
iyearoffsetrange
;
/* 14 */
UINT
sdayname
;
/* 18 */
UINT
sabbrevdayname
;
/* 1c */
UINT
smonthname
;
/* 20 */
UINT
sabbrevmonthname
;
/* 24 */
UINT
scalname
;
/* 28 */
UINT
smonthday
;
/* 2c */
UINT
sabbreverastring
;
/* 30 */
UINT
sshortestdayname
;
/* 34 */
UINT
srelativelongdate
;
/* 38 */
UINT
unused
[
3
];
/* 3c */
};
static
const
struct
geo_id
{
...
...
@@ -779,6 +799,21 @@ static int locale_return_strarray_concat( DWORD pos, LCTYPE type, WCHAR *buffer,
}
static
int
cal_return_number
(
UINT
val
,
CALTYPE
type
,
WCHAR
*
buffer
,
int
len
,
DWORD
*
value
)
{
WCHAR
tmp
[
12
];
int
ret
;
if
(
type
&
CAL_RETURN_NUMBER
)
{
*
value
=
val
;
return
sizeof
(
UINT
)
/
sizeof
(
WCHAR
);
}
ret
=
swprintf
(
tmp
,
ARRAY_SIZE
(
tmp
),
L"%u"
,
val
);
return
locale_return_data
(
tmp
,
ret
+
1
,
0
,
buffer
,
len
);
}
/* find the first format char in a format string */
static
WCHAR
*
find_format
(
WCHAR
*
str
,
const
WCHAR
*
accept
)
{
...
...
@@ -1404,6 +1439,172 @@ static int get_locale_info( const NLS_LOCALE_DATA *locale, LCID lcid, LCTYPE typ
}
/* get calendar information from the locale.nls file */
static
int
get_calendar_info
(
const
NLS_LOCALE_DATA
*
locale
,
CALID
id
,
CALTYPE
type
,
WCHAR
*
buffer
,
int
len
,
DWORD
*
value
)
{
unsigned
int
i
,
idx
=
id
,
val
=
0
;
const
struct
calendar
*
cal
;
if
(
type
&
CAL_RETURN_NUMBER
)
{
if
(
buffer
||
len
||
!
value
)
goto
invalid
;
}
else
if
(
len
<
0
||
value
)
goto
invalid
;
if
(
id
!=
CAL_GREGORIAN
)
{
const
USHORT
*
ids
=
locale_strings
+
locale
->
scalendartype
;
for
(
i
=
0
;
i
<
ids
[
0
];
i
++
)
if
(
ids
[
1
+
i
]
==
id
)
break
;
if
(
i
==
ids
[
0
])
goto
invalid
;
if
(
id
==
CAL_HIJRI
)
idx
=
locale
->
islamic_cal
[
0
];
else
if
(
id
==
CAL_PERSIAN
)
idx
=
locale
->
islamic_cal
[
1
];
}
if
(
!
idx
||
idx
>
locale_table
->
nb_calendars
)
goto
invalid
;
cal
=
(
const
struct
calendar
*
)((
const
char
*
)
locale_table
+
locale_table
->
calendars_offset
+
(
idx
-
1
)
*
locale_table
->
calendar_size
);
switch
(
LOWORD
(
type
))
{
case
CAL_ICALINTVALUE
:
return
cal_return_number
(
cal
->
icalintvalue
,
type
,
buffer
,
len
,
value
);
case
CAL_SCALNAME
:
return
locale_return_strarray
(
locale
->
calnames
,
id
-
1
,
type
,
buffer
,
len
);
case
CAL_IYEAROFFSETRANGE
:
if
(
cal
->
iyearoffsetrange
)
{
const
DWORD
*
array
=
(
const
DWORD
*
)(
locale_strings
+
cal
->
iyearoffsetrange
+
1
);
const
short
*
info
=
(
const
short
*
)
locale_strings
+
array
[
0
];
val
=
(
info
[
5
]
<
0
)
?
-
info
[
5
]
:
info
[
5
]
+
1
;
/* year zero */
}
return
cal_return_number
(
val
,
type
,
buffer
,
len
,
value
);
case
CAL_SERASTRING
:
if
(
id
==
CAL_GREGORIAN
)
return
locale_return_string
(
locale
->
serastring
,
type
,
buffer
,
len
);
if
(
cal
->
iyearoffsetrange
)
{
const
DWORD
*
array
=
(
const
DWORD
*
)(
locale_strings
+
cal
->
iyearoffsetrange
+
1
);
const
short
*
info
=
(
const
short
*
)
locale_strings
+
array
[
0
];
val
=
info
[
1
]
-
1
;
}
return
locale_return_strarray
(
cal
->
serastring
,
val
,
type
,
buffer
,
len
);
case
CAL_SSHORTDATE
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
sshortdate
:
cal
->
sshortdate
;
return
locale_return_strarray
(
val
,
0
,
type
,
buffer
,
len
);
case
CAL_SLONGDATE
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
slongdate
:
cal
->
slongdate
;
return
locale_return_strarray
(
val
,
0
,
type
,
buffer
,
len
);
case
CAL_SDAYNAME1
:
case
CAL_SDAYNAME2
:
case
CAL_SDAYNAME3
:
case
CAL_SDAYNAME4
:
case
CAL_SDAYNAME5
:
case
CAL_SDAYNAME6
:
case
CAL_SDAYNAME7
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
sdayname
:
cal
->
sdayname
;
return
locale_return_strarray
(
val
,
(
LOWORD
(
type
)
-
CAL_SDAYNAME1
+
1
)
%
7
,
type
,
buffer
,
len
);
case
CAL_SABBREVDAYNAME1
:
case
CAL_SABBREVDAYNAME2
:
case
CAL_SABBREVDAYNAME3
:
case
CAL_SABBREVDAYNAME4
:
case
CAL_SABBREVDAYNAME5
:
case
CAL_SABBREVDAYNAME6
:
case
CAL_SABBREVDAYNAME7
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
sabbrevdayname
:
cal
->
sabbrevdayname
;
return
locale_return_strarray
(
val
,
(
LOWORD
(
type
)
-
CAL_SABBREVDAYNAME1
+
1
)
%
7
,
type
,
buffer
,
len
);
case
CAL_SMONTHNAME1
:
case
CAL_SMONTHNAME2
:
case
CAL_SMONTHNAME3
:
case
CAL_SMONTHNAME4
:
case
CAL_SMONTHNAME5
:
case
CAL_SMONTHNAME6
:
case
CAL_SMONTHNAME7
:
case
CAL_SMONTHNAME8
:
case
CAL_SMONTHNAME9
:
case
CAL_SMONTHNAME10
:
case
CAL_SMONTHNAME11
:
case
CAL_SMONTHNAME12
:
case
CAL_SMONTHNAME13
:
if
(
id
!=
CAL_GREGORIAN
)
val
=
cal
->
smonthname
;
else
if
((
type
&
CAL_RETURN_GENITIVE_NAMES
)
&&
locale
->
sgenitivemonth
)
val
=
locale
->
sgenitivemonth
;
else
val
=
locale
->
smonthname
;
return
locale_return_strarray
(
val
,
LOWORD
(
type
)
-
CAL_SMONTHNAME1
,
type
,
buffer
,
len
);
case
CAL_SABBREVMONTHNAME1
:
case
CAL_SABBREVMONTHNAME2
:
case
CAL_SABBREVMONTHNAME3
:
case
CAL_SABBREVMONTHNAME4
:
case
CAL_SABBREVMONTHNAME5
:
case
CAL_SABBREVMONTHNAME6
:
case
CAL_SABBREVMONTHNAME7
:
case
CAL_SABBREVMONTHNAME8
:
case
CAL_SABBREVMONTHNAME9
:
case
CAL_SABBREVMONTHNAME10
:
case
CAL_SABBREVMONTHNAME11
:
case
CAL_SABBREVMONTHNAME12
:
case
CAL_SABBREVMONTHNAME13
:
if
(
id
!=
CAL_GREGORIAN
)
val
=
cal
->
sabbrevmonthname
;
else
if
((
type
&
CAL_RETURN_GENITIVE_NAMES
)
&&
locale
->
sabbrevgenitivemonth
)
val
=
locale
->
sabbrevgenitivemonth
;
else
val
=
locale
->
sabbrevmonthname
;
return
locale_return_strarray
(
val
,
LOWORD
(
type
)
-
CAL_SABBREVMONTHNAME1
,
type
,
buffer
,
len
);
case
CAL_SYEARMONTH
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
syearmonth
:
cal
->
syearmonth
;
return
locale_return_strarray
(
val
,
0
,
type
,
buffer
,
len
);
case
CAL_ITWODIGITYEARMAX
:
return
cal_return_number
(
cal
->
itwodigityearmax
,
type
,
buffer
,
len
,
value
);
case
CAL_SSHORTESTDAYNAME1
:
case
CAL_SSHORTESTDAYNAME2
:
case
CAL_SSHORTESTDAYNAME3
:
case
CAL_SSHORTESTDAYNAME4
:
case
CAL_SSHORTESTDAYNAME5
:
case
CAL_SSHORTESTDAYNAME6
:
case
CAL_SSHORTESTDAYNAME7
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
sshortestdayname
:
cal
->
sshortestdayname
;
return
locale_return_strarray
(
val
,
(
LOWORD
(
type
)
-
CAL_SSHORTESTDAYNAME1
+
1
)
%
7
,
type
,
buffer
,
len
);
case
CAL_SMONTHDAY
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
smonthday
:
cal
->
smonthday
;
return
locale_return_strarray
(
val
,
0
,
type
,
buffer
,
len
);
case
CAL_SABBREVERASTRING
:
if
(
id
==
CAL_GREGORIAN
)
return
locale_return_string
(
locale
->
sabbreverastring
,
type
,
buffer
,
len
);
if
(
cal
->
iyearoffsetrange
)
{
const
DWORD
*
array
=
(
const
DWORD
*
)(
locale_strings
+
cal
->
iyearoffsetrange
+
1
);
const
short
*
info
=
(
const
short
*
)
locale_strings
+
array
[
0
];
val
=
info
[
1
]
-
1
;
}
return
locale_return_strarray
(
cal
->
sabbreverastring
,
val
,
type
,
buffer
,
len
);
case
CAL_SRELATIVELONGDATE
:
val
=
(
id
==
CAL_GREGORIAN
)
?
locale
->
srelativelongdate
:
cal
->
srelativelongdate
;
return
locale_return_string
(
val
,
type
,
buffer
,
len
);
case
CAL_SENGLISHERANAME
:
case
CAL_SENGLISHABBREVERANAME
:
/* not supported on Windows */
break
;
}
SetLastError
(
ERROR_INVALID_FLAGS
);
return
0
;
invalid:
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
/* get geo information from the locale.nls file */
static
int
get_geo_info
(
const
struct
geo_id
*
geo
,
enum
SYSGEOTYPE
type
,
WCHAR
*
buffer
,
int
len
,
LANGID
lang
)
...
...
@@ -4639,194 +4840,41 @@ BOOL WINAPI GetCPInfoExW( UINT codepage, DWORD flags, CPINFOEXW *cpinfo )
* GetCalendarInfoW (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
GetCalendarInfoW
(
LCID
lcid
,
CALID
calendar
,
CALTYPE
type
,
WCHAR
*
data
,
INT
count
,
DWORD
*
value
)
{
static
const
LCTYPE
lctype_map
[]
=
{
0
,
/* not used */
0
,
/* CAL_ICALINTVALUE */
0
,
/* CAL_SCALNAME */
0
,
/* CAL_IYEAROFFSETRANGE */
0
,
/* CAL_SERASTRING */
LOCALE_SSHORTDATE
,
LOCALE_SLONGDATE
,
LOCALE_SDAYNAME1
,
LOCALE_SDAYNAME2
,
LOCALE_SDAYNAME3
,
LOCALE_SDAYNAME4
,
LOCALE_SDAYNAME5
,
LOCALE_SDAYNAME6
,
LOCALE_SDAYNAME7
,
LOCALE_SABBREVDAYNAME1
,
LOCALE_SABBREVDAYNAME2
,
LOCALE_SABBREVDAYNAME3
,
LOCALE_SABBREVDAYNAME4
,
LOCALE_SABBREVDAYNAME5
,
LOCALE_SABBREVDAYNAME6
,
LOCALE_SABBREVDAYNAME7
,
LOCALE_SMONTHNAME1
,
LOCALE_SMONTHNAME2
,
LOCALE_SMONTHNAME3
,
LOCALE_SMONTHNAME4
,
LOCALE_SMONTHNAME5
,
LOCALE_SMONTHNAME6
,
LOCALE_SMONTHNAME7
,
LOCALE_SMONTHNAME8
,
LOCALE_SMONTHNAME9
,
LOCALE_SMONTHNAME10
,
LOCALE_SMONTHNAME11
,
LOCALE_SMONTHNAME12
,
LOCALE_SMONTHNAME13
,
LOCALE_SABBREVMONTHNAME1
,
LOCALE_SABBREVMONTHNAME2
,
LOCALE_SABBREVMONTHNAME3
,
LOCALE_SABBREVMONTHNAME4
,
LOCALE_SABBREVMONTHNAME5
,
LOCALE_SABBREVMONTHNAME6
,
LOCALE_SABBREVMONTHNAME7
,
LOCALE_SABBREVMONTHNAME8
,
LOCALE_SABBREVMONTHNAME9
,
LOCALE_SABBREVMONTHNAME10
,
LOCALE_SABBREVMONTHNAME11
,
LOCALE_SABBREVMONTHNAME12
,
LOCALE_SABBREVMONTHNAME13
,
LOCALE_SYEARMONTH
,
0
,
/* CAL_ITWODIGITYEARMAX */
LOCALE_SSHORTESTDAYNAME1
,
LOCALE_SSHORTESTDAYNAME2
,
LOCALE_SSHORTESTDAYNAME3
,
LOCALE_SSHORTESTDAYNAME4
,
LOCALE_SSHORTESTDAYNAME5
,
LOCALE_SSHORTESTDAYNAME6
,
LOCALE_SSHORTESTDAYNAME7
,
LOCALE_SMONTHDAY
,
0
,
/* CAL_SABBREVERASTRING */
};
DWORD
flags
=
0
;
CALTYPE
calinfo
=
type
&
0xffff
;
WCHAR
*
buffer
,
INT
len
,
DWORD
*
value
)
{
const
NLS_LOCALE_DATA
*
locale
;
if
(
type
&
CAL_NOUSEROVERRIDE
)
FIXME
(
"flag CAL_NOUSEROVERRIDE used, not fully implemented
\n
"
);
if
(
type
&
CAL_USE_CP_ACP
)
FIXME
(
"flag CAL_USE_CP_ACP used, not fully implemented
\n
"
);
TRACE
(
"%04lx %lu 0x%lx %p %d %p
\n
"
,
lcid
,
calendar
,
type
,
buffer
,
len
,
value
);
if
(
(
type
&
CAL_RETURN_NUMBER
)
&&
!
value
)
if
(
!
(
locale
=
get_locale_by_id
(
&
lcid
,
0
))
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
if
(
type
&
CAL_RETURN_GENITIVE_NAMES
)
flags
|=
LOCALE_RETURN_GENITIVE_NAMES
;
switch
(
calinfo
)
{
case
CAL_ICALINTVALUE
:
if
(
type
&
CAL_RETURN_NUMBER
)
return
GetLocaleInfoW
(
lcid
,
LOCALE_RETURN_NUMBER
|
LOCALE_ICALENDARTYPE
,
(
WCHAR
*
)
value
,
sizeof
(
*
value
)
/
sizeof
(
WCHAR
)
);
return
GetLocaleInfoW
(
lcid
,
LOCALE_ICALENDARTYPE
,
data
,
count
);
case
CAL_SCALNAME
:
FIXME
(
"Unimplemented caltype %ld
\n
"
,
calinfo
);
if
(
data
)
*
data
=
0
;
return
1
;
case
CAL_IYEAROFFSETRANGE
:
case
CAL_SERASTRING
:
case
CAL_SABBREVERASTRING
:
FIXME
(
"Unimplemented caltype %ld
\n
"
,
calinfo
);
return
0
;
case
CAL_SSHORTDATE
:
case
CAL_SLONGDATE
:
case
CAL_SDAYNAME1
:
case
CAL_SDAYNAME2
:
case
CAL_SDAYNAME3
:
case
CAL_SDAYNAME4
:
case
CAL_SDAYNAME5
:
case
CAL_SDAYNAME6
:
case
CAL_SDAYNAME7
:
case
CAL_SABBREVDAYNAME1
:
case
CAL_SABBREVDAYNAME2
:
case
CAL_SABBREVDAYNAME3
:
case
CAL_SABBREVDAYNAME4
:
case
CAL_SABBREVDAYNAME5
:
case
CAL_SABBREVDAYNAME6
:
case
CAL_SABBREVDAYNAME7
:
case
CAL_SMONTHNAME1
:
case
CAL_SMONTHNAME2
:
case
CAL_SMONTHNAME3
:
case
CAL_SMONTHNAME4
:
case
CAL_SMONTHNAME5
:
case
CAL_SMONTHNAME6
:
case
CAL_SMONTHNAME7
:
case
CAL_SMONTHNAME8
:
case
CAL_SMONTHNAME9
:
case
CAL_SMONTHNAME10
:
case
CAL_SMONTHNAME11
:
case
CAL_SMONTHNAME12
:
case
CAL_SMONTHNAME13
:
case
CAL_SABBREVMONTHNAME1
:
case
CAL_SABBREVMONTHNAME2
:
case
CAL_SABBREVMONTHNAME3
:
case
CAL_SABBREVMONTHNAME4
:
case
CAL_SABBREVMONTHNAME5
:
case
CAL_SABBREVMONTHNAME6
:
case
CAL_SABBREVMONTHNAME7
:
case
CAL_SABBREVMONTHNAME8
:
case
CAL_SABBREVMONTHNAME9
:
case
CAL_SABBREVMONTHNAME10
:
case
CAL_SABBREVMONTHNAME11
:
case
CAL_SABBREVMONTHNAME12
:
case
CAL_SABBREVMONTHNAME13
:
case
CAL_SMONTHDAY
:
case
CAL_SYEARMONTH
:
case
CAL_SSHORTESTDAYNAME1
:
case
CAL_SSHORTESTDAYNAME2
:
case
CAL_SSHORTESTDAYNAME3
:
case
CAL_SSHORTESTDAYNAME4
:
case
CAL_SSHORTESTDAYNAME5
:
case
CAL_SSHORTESTDAYNAME6
:
case
CAL_SSHORTESTDAYNAME7
:
return
GetLocaleInfoW
(
lcid
,
lctype_map
[
calinfo
]
|
flags
,
data
,
count
);
case
CAL_ITWODIGITYEARMAX
:
if
(
type
&
CAL_RETURN_NUMBER
)
{
*
value
=
CALINFO_MAX_YEAR
;
return
sizeof
(
DWORD
)
/
sizeof
(
WCHAR
);
}
else
{
WCHAR
buffer
[
10
];
int
ret
=
swprintf
(
buffer
,
ARRAY_SIZE
(
buffer
),
L"%u"
,
CALINFO_MAX_YEAR
)
+
1
;
if
(
!
data
)
return
ret
;
if
(
ret
<=
count
)
{
lstrcpyW
(
data
,
buffer
);
return
ret
;
}
SetLastError
(
ERROR_INSUFFICIENT_BUFFER
);
return
0
;
}
break
;
default:
FIXME
(
"Unknown caltype %ld
\n
"
,
calinfo
);
SetLastError
(
ERROR_INVALID_FLAGS
);
return
0
;
}
return
0
;
return
get_calendar_info
(
locale
,
calendar
,
type
,
buffer
,
len
,
value
);
}
/***********************************************************************
* GetCalendarInfoEx (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
GetCalendarInfoEx
(
const
WCHAR
*
local
e
,
CALID
calendar
,
const
WCHAR
*
reserved
,
CALTYPE
type
,
WCHAR
*
data
,
INT
count
,
DWORD
*
value
)
INT
WINAPI
DECLSPEC_HOTPATCH
GetCalendarInfoEx
(
const
WCHAR
*
nam
e
,
CALID
calendar
,
const
WCHAR
*
reserved
,
CALTYPE
type
,
WCHAR
*
buffer
,
INT
len
,
DWORD
*
value
)
{
LCID
lcid
=
LocaleNameToLCID
(
locale
,
0
);
return
GetCalendarInfoW
(
lcid
,
calendar
,
type
,
data
,
count
,
value
);
LCID
lcid
;
const
NLS_LOCALE_DATA
*
locale
=
get_locale_by_name
(
name
,
&
lcid
);
TRACE
(
"%s %lu 0x%lx %p %d %p
\n
"
,
debugstr_w
(
name
),
calendar
,
type
,
buffer
,
len
,
value
);
if
(
!
locale
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
return
get_calendar_info
(
locale
,
calendar
,
type
,
buffer
,
len
,
value
);
}
static
CRITICAL_SECTION
tzname_section
;
static
CRITICAL_SECTION_DEBUG
tzname_section_debug
=
{
...
...
include/winnls.h
View file @
a074d0c3
...
...
@@ -908,6 +908,7 @@ WINBASEAPI BOOL WINAPI GetCPInfoExA(UINT,DWORD,LPCPINFOEXA);
WINBASEAPI
BOOL
WINAPI
GetCPInfoExW
(
UINT
,
DWORD
,
LPCPINFOEXW
);
#define GetCPInfoEx WINELIB_NAME_AW(GetCPInfoEx)
WINBASEAPI
INT
WINAPI
GetCalendarInfoA
(
LCID
,
DWORD
,
DWORD
,
LPSTR
,
INT
,
LPDWORD
);
WINBASEAPI
INT
WINAPI
GetCalendarInfoEx
(
const
WCHAR
*
,
CALID
,
const
WCHAR
*
,
CALTYPE
,
WCHAR
*
,
INT
,
DWORD
*
);
WINBASEAPI
INT
WINAPI
GetCalendarInfoW
(
LCID
,
DWORD
,
DWORD
,
LPWSTR
,
INT
,
LPDWORD
);
#define GetCalendarInfo WINELIB_NAME_AW(GetCalendarInfo)
WINBASEAPI
INT
WINAPI
GetCurrencyFormatA
(
LCID
,
DWORD
,
LPCSTR
,
const
CURRENCYFMTA
*
,
LPSTR
,
INT
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment