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
2cbb6f8d
Commit
2cbb6f8d
authored
Nov 21, 2019
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel32: Move some locale functions to kernelbase.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
fd588a22
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
226 additions
and
296 deletions
+226
-296
kernel32.spec
dlls/kernel32/kernel32.spec
+8
-8
locale.c
dlls/kernel32/locale.c
+0
-251
kernelbase.spec
dlls/kernelbase/kernelbase.spec
+8
-8
locale.c
dlls/kernelbase/locale.c
+210
-29
No files found.
dlls/kernel32/kernel32.spec
View file @
2cbb6f8d
...
@@ -248,7 +248,7 @@
...
@@ -248,7 +248,7 @@
@ stub ConsoleSubst
@ stub ConsoleSubst
@ stdcall -import ContinueDebugEvent(long long long)
@ stdcall -import ContinueDebugEvent(long long long)
# @ stub ConvertCalDateTimeToSystemTime
# @ stub ConvertCalDateTimeToSystemTime
@ stdcall ConvertDefaultLocale (long)
@ stdcall
-import
ConvertDefaultLocale (long)
@ stdcall -import ConvertFiberToThread()
@ stdcall -import ConvertFiberToThread()
# @ stub ConvertNLSDayOfWeekToWin32DayOfWeek
# @ stub ConvertNLSDayOfWeekToWin32DayOfWeek
# @ stub ConvertSystemTimeToCalDateTime
# @ stub ConvertSystemTimeToCalDateTime
...
@@ -537,7 +537,7 @@
...
@@ -537,7 +537,7 @@
@ stub FreeVirtualBuffer
@ stub FreeVirtualBuffer
@ stdcall -import GenerateConsoleCtrlEvent(long long)
@ stdcall -import GenerateConsoleCtrlEvent(long long)
@ stdcall -i386 -private Get16DLLAddress(long str) krnl386.exe16.Get16DLLAddress
@ stdcall -i386 -private Get16DLLAddress(long str) krnl386.exe16.Get16DLLAddress
@ stdcall GetACP()
@ stdcall
-import
GetACP()
@ stdcall GetActiveProcessorCount(long)
@ stdcall GetActiveProcessorCount(long)
@ stdcall GetActiveProcessorGroupCount()
@ stdcall GetActiveProcessorGroupCount()
# @ stub GetApplicationRecoveryCallback
# @ stub GetApplicationRecoveryCallback
...
@@ -703,9 +703,9 @@
...
@@ -703,9 +703,9 @@
@ stdcall -import GetLastError()
@ stdcall -import GetLastError()
@ stub GetLinguistLangSize
@ stub GetLinguistLangSize
@ stdcall -import GetLocalTime(ptr)
@ stdcall -import GetLocalTime(ptr)
@ stdcall GetLocaleInfoA(long long ptr long)
@ stdcall
-import
GetLocaleInfoA(long long ptr long)
@ stdcall GetLocaleInfoW(long long ptr long)
@ stdcall GetLocaleInfoW(long long ptr long)
@ stdcall GetLocaleInfoEx(wstr long ptr long)
@ stdcall
-import
GetLocaleInfoEx(wstr long ptr long)
@ stdcall GetLogicalDriveStringsA(long ptr)
@ stdcall GetLogicalDriveStringsA(long ptr)
@ stdcall GetLogicalDriveStringsW(long ptr)
@ stdcall GetLogicalDriveStringsW(long ptr)
@ stdcall GetLogicalDrives()
@ stdcall GetLogicalDrives()
...
@@ -758,7 +758,7 @@
...
@@ -758,7 +758,7 @@
@ stdcall GetNumberOfConsoleFonts()
@ stdcall GetNumberOfConsoleFonts()
@ stdcall -import GetNumberOfConsoleInputEvents(long ptr)
@ stdcall -import GetNumberOfConsoleInputEvents(long ptr)
@ stdcall GetNumberOfConsoleMouseButtons(ptr)
@ stdcall GetNumberOfConsoleMouseButtons(ptr)
@ stdcall GetOEMCP()
@ stdcall
-import
GetOEMCP()
@ stdcall -import GetOverlappedResult(long ptr ptr long)
@ stdcall -import GetOverlappedResult(long ptr ptr long)
@ stdcall GetUserPreferredUILanguages(long ptr ptr ptr)
@ stdcall GetUserPreferredUILanguages(long ptr ptr ptr)
@ stdcall GetPackageFullName(long ptr ptr)
@ stdcall GetPackageFullName(long ptr ptr)
...
@@ -991,8 +991,8 @@
...
@@ -991,8 +991,8 @@
# @ stub IsValidCalDateTime
# @ stub IsValidCalDateTime
@ stdcall IsValidCodePage(long)
@ stdcall IsValidCodePage(long)
@ stdcall -import IsValidLanguageGroup(long long)
@ stdcall -import IsValidLanguageGroup(long long)
@ stdcall IsValidLocale(long long)
@ stdcall
-import
IsValidLocale(long long)
@ stdcall IsValidLocaleName(wstr)
@ stdcall
-import
IsValidLocaleName(wstr)
# @ stub IsValidUILanguage
# @ stub IsValidUILanguage
@ stdcall -import IsWow64Process(ptr ptr)
@ stdcall -import IsWow64Process(ptr ptr)
@ stdcall K32EmptyWorkingSet(long)
@ stdcall K32EmptyWorkingSet(long)
...
@@ -1061,7 +1061,7 @@
...
@@ -1061,7 +1061,7 @@
@ stdcall LocalShrink(long long)
@ stdcall LocalShrink(long long)
@ stdcall LocalSize(long)
@ stdcall LocalSize(long)
@ stdcall -import LocalUnlock(long)
@ stdcall -import LocalUnlock(long)
@ stdcall LocaleNameToLCID(wstr long)
@ stdcall
-import
LocaleNameToLCID(wstr long)
# @ stub LocateXStateFeature
# @ stub LocateXStateFeature
@ stdcall -import LockFile(long long long long long)
@ stdcall -import LockFile(long long long long long)
@ stdcall -import LockFileEx(long long long long long ptr)
@ stdcall -import LockFileEx(long long long long long ptr)
...
...
dlls/kernel32/locale.c
View file @
2cbb6f8d
...
@@ -443,20 +443,6 @@ BOOL WINAPI GetUserPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buffe
...
@@ -443,20 +443,6 @@ BOOL WINAPI GetUserPreferredUILanguages( DWORD flags, ULONG *count, WCHAR *buffe
return
get_dummy_preferred_ui_language
(
flags
,
count
,
buffer
,
size
);
return
get_dummy_preferred_ui_language
(
flags
,
count
,
buffer
,
size
);
}
}
/***********************************************************************
* LocaleNameToLCID (KERNEL32.@)
*/
LCID
WINAPI
LocaleNameToLCID
(
LPCWSTR
name
,
DWORD
flags
)
{
LCID
lcid
;
if
(
!
name
)
return
GetUserDefaultLCID
();
if
(
!
set_ntstatus
(
RtlLocaleNameToLcid
(
name
,
&
lcid
,
2
)))
return
0
;
if
(
!
(
flags
&
LOCALE_ALLOW_NEUTRAL_NAMES
))
lcid
=
ConvertDefaultLocale
(
lcid
);
return
lcid
;
}
/******************************************************************************
/******************************************************************************
* get_locale_registry_value
* get_locale_registry_value
*
*
...
@@ -589,83 +575,6 @@ static INT get_registry_locale_info( struct registry_value *registry_value, LPWS
...
@@ -589,83 +575,6 @@ static INT get_registry_locale_info( struct registry_value *registry_value, LPWS
}
}
/******************************************************************************
* GetLocaleInfoA (KERNEL32.@)
*
* Get information about an aspect of a locale.
*
* PARAMS
* lcid [I] LCID of the locale
* lctype [I] LCTYPE_ flags from "winnls.h"
* buffer [O] Destination for the information
* len [I] Length of buffer in characters
*
* RETURNS
* Success: The size of the data requested. If buffer is non-NULL, it is filled
* with the information.
* Failure: 0. Use GetLastError() to determine the cause.
*
* NOTES
* - LOCALE_NEUTRAL is equal to LOCALE_SYSTEM_DEFAULT
* - The string returned is NUL terminated, except for LOCALE_FONTSIGNATURE,
* which is a bit string.
*/
INT
WINAPI
GetLocaleInfoA
(
LCID
lcid
,
LCTYPE
lctype
,
LPSTR
buffer
,
INT
len
)
{
WCHAR
*
bufferW
;
INT
lenW
,
ret
;
TRACE
(
"(lcid=0x%x,lctype=0x%x,%p,%d)
\n
"
,
lcid
,
lctype
,
buffer
,
len
);
if
(
len
<
0
||
(
len
&&
!
buffer
))
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
if
(((
lctype
&
~
LOCALE_LOCALEINFOFLAGSMASK
)
==
LOCALE_SSHORTTIME
)
||
(
lctype
&
LOCALE_RETURN_GENITIVE_NAMES
))
{
SetLastError
(
ERROR_INVALID_FLAGS
);
return
0
;
}
if
(
!
len
)
buffer
=
NULL
;
if
(
!
(
lenW
=
GetLocaleInfoW
(
lcid
,
lctype
,
NULL
,
0
)))
return
0
;
if
(
!
(
bufferW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
lenW
*
sizeof
(
WCHAR
)
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
0
;
}
if
((
ret
=
GetLocaleInfoW
(
lcid
,
lctype
,
bufferW
,
lenW
)))
{
if
((
lctype
&
LOCALE_RETURN_NUMBER
)
||
((
lctype
&
~
LOCALE_LOCALEINFOFLAGSMASK
)
==
LOCALE_FONTSIGNATURE
))
{
/* it's not an ASCII string, just bytes */
ret
*=
sizeof
(
WCHAR
);
if
(
buffer
)
{
if
(
ret
<=
len
)
memcpy
(
buffer
,
bufferW
,
ret
);
else
{
SetLastError
(
ERROR_INSUFFICIENT_BUFFER
);
ret
=
0
;
}
}
}
else
{
UINT
codepage
=
CP_ACP
;
if
(
!
(
lctype
&
LOCALE_USE_CP_ACP
))
codepage
=
get_lcid_codepage
(
lcid
);
ret
=
WideCharToMultiByte
(
codepage
,
0
,
bufferW
,
ret
,
buffer
,
len
,
NULL
,
NULL
);
}
}
HeapFree
(
GetProcessHeap
(),
0
,
bufferW
);
return
ret
;
}
static
int
get_value_base_by_lctype
(
LCTYPE
lctype
)
static
int
get_value_base_by_lctype
(
LCTYPE
lctype
)
{
{
return
lctype
==
LOCALE_ILANGUAGE
||
lctype
==
LOCALE_IDEFAULTLANGUAGE
?
16
:
10
;
return
lctype
==
LOCALE_ILANGUAGE
||
lctype
==
LOCALE_IDEFAULTLANGUAGE
?
16
:
10
;
...
@@ -812,39 +721,6 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len )
...
@@ -812,39 +721,6 @@ INT WINAPI GetLocaleInfoW( LCID lcid, LCTYPE lctype, LPWSTR buffer, INT len )
}
}
/******************************************************************************
/******************************************************************************
* GetLocaleInfoEx (KERNEL32.@)
*/
INT
WINAPI
GetLocaleInfoEx
(
LPCWSTR
locale
,
LCTYPE
info
,
LPWSTR
buffer
,
INT
len
)
{
LCID
lcid
=
LocaleNameToLCID
(
locale
,
0
);
TRACE
(
"%s, lcid=0x%x, 0x%x
\n
"
,
debugstr_w
(
locale
),
lcid
,
info
);
if
(
!
lcid
)
return
0
;
/* special handling for neutral locale names */
if
(
locale
&&
strlenW
(
locale
)
==
2
)
{
switch
(
info
&
~
LOCALE_LOCALEINFOFLAGSMASK
)
{
case
LOCALE_SNAME
:
if
(
len
&&
len
<
3
)
{
SetLastError
(
ERROR_INSUFFICIENT_BUFFER
);
return
0
;
}
if
(
len
)
strcpyW
(
buffer
,
locale
);
return
3
;
case
LOCALE_SPARENT
:
if
(
len
)
buffer
[
0
]
=
0
;
return
1
;
}
}
return
GetLocaleInfoW
(
lcid
,
info
,
buffer
,
len
);
}
/******************************************************************************
* SetLocaleInfoA [KERNEL32.@]
* SetLocaleInfoA [KERNEL32.@]
*
*
* Set information about an aspect of a locale.
* Set information about an aspect of a locale.
...
@@ -987,24 +863,6 @@ BOOL WINAPI SetLocaleInfoW( LCID lcid, LCTYPE lctype, LPCWSTR data )
...
@@ -987,24 +863,6 @@ BOOL WINAPI SetLocaleInfoW( LCID lcid, LCTYPE lctype, LPCWSTR data )
/******************************************************************************
/******************************************************************************
* GetACP (KERNEL32.@)
*
* Get the current Ansi code page Id for the system.
*
* PARAMS
* None.
*
* RETURNS
* The current Ansi code page identifier for the system.
*/
UINT
WINAPI
GetACP
(
void
)
{
assert
(
ansi_cptable
);
return
ansi_cptable
->
info
.
codepage
;
}
/******************************************************************************
* SetCPGlobal (KERNEL32.@)
* SetCPGlobal (KERNEL32.@)
*
*
* Set the current Ansi code page Id for the system.
* Set the current Ansi code page Id for the system.
...
@@ -1026,24 +884,6 @@ UINT WINAPI SetCPGlobal( UINT acp )
...
@@ -1026,24 +884,6 @@ UINT WINAPI SetCPGlobal( UINT acp )
/***********************************************************************
/***********************************************************************
* GetOEMCP (KERNEL32.@)
*
* Get the current OEM code page Id for the system.
*
* PARAMS
* None.
*
* RETURNS
* The current OEM code page identifier for the system.
*/
UINT
WINAPI
GetOEMCP
(
void
)
{
assert
(
oem_cptable
);
return
oem_cptable
->
info
.
codepage
;
}
/***********************************************************************
* IsValidCodePage (KERNEL32.@)
* IsValidCodePage (KERNEL32.@)
*
*
* Determine if a given code page identifier is valid.
* Determine if a given code page identifier is valid.
...
@@ -1723,97 +1563,6 @@ INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen,
...
@@ -1723,97 +1563,6 @@ INT WINAPI WideCharToMultiByte( UINT page, DWORD flags, LPCWSTR src, INT srclen,
/******************************************************************************
/******************************************************************************
* ConvertDefaultLocale (KERNEL32.@)
*
* Convert a default locale identifier into a real identifier.
*
* PARAMS
* lcid [I] LCID identifier of the locale to convert
*
* RETURNS
* lcid unchanged, if not a default locale or its sublanguage is
* not SUBLANG_NEUTRAL.
* GetSystemDefaultLCID(), if lcid == LOCALE_SYSTEM_DEFAULT.
* GetUserDefaultLCID(), if lcid == LOCALE_USER_DEFAULT or LOCALE_NEUTRAL.
* Otherwise, lcid with sublanguage changed to SUBLANG_DEFAULT.
*/
LCID
WINAPI
ConvertDefaultLocale
(
LCID
lcid
)
{
switch
(
lcid
)
{
case
LOCALE_INVARIANT
:
return
lcid
;
/* keep as-is */
case
LOCALE_SYSTEM_DEFAULT
:
return
GetSystemDefaultLCID
();
case
LOCALE_USER_DEFAULT
:
case
LOCALE_NEUTRAL
:
return
GetUserDefaultLCID
();
case
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_NEUTRAL
):
case
MAKELANGID
(
LANG_CHINESE
,
0x1e
):
return
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_CHINESE_SIMPLIFIED
);
case
MAKELANGID
(
LANG_CHINESE
,
0x1f
):
return
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_CHINESE_HONGKONG
);
case
MAKELANGID
(
LANG_SPANISH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_SPANISH
,
SUBLANG_SPANISH_MODERN
);
case
MAKELANGID
(
LANG_IRISH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_IRISH
,
SUBLANG_IRISH_IRELAND
);
case
MAKELANGID
(
LANG_BENGALI
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_BENGALI
,
SUBLANG_BENGALI_BANGLADESH
);
case
MAKELANGID
(
LANG_SINDHI
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_SINDHI
,
SUBLANG_SINDHI_AFGHANISTAN
);
case
MAKELANGID
(
LANG_INUKTITUT
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_INUKTITUT
,
SUBLANG_INUKTITUT_CANADA_LATIN
);
case
MAKELANGID
(
LANG_TAMAZIGHT
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_TAMAZIGHT
,
SUBLANG_TAMAZIGHT_ALGERIA_LATIN
);
case
MAKELANGID
(
LANG_FULAH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_FULAH
,
SUBLANG_FULAH_SENEGAL
);
case
MAKELANGID
(
LANG_TIGRINYA
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_TIGRINYA
,
SUBLANG_TIGRINYA_ERITREA
);
default:
/* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */
if
(
SUBLANGID
(
lcid
)
==
SUBLANG_NEUTRAL
&&
SORTIDFROMLCID
(
lcid
)
==
SORT_DEFAULT
)
lcid
=
MAKELANGID
(
PRIMARYLANGID
(
lcid
),
SUBLANG_DEFAULT
);
break
;
}
return
lcid
;
}
/******************************************************************************
* IsValidLocale (KERNEL32.@)
*
* Determine if a locale is valid.
*
* PARAMS
* lcid [I] LCID of the locale to check
* flags [I] LCID_SUPPORTED = Valid, LCID_INSTALLED = Valid and installed on the system
*
* RETURNS
* TRUE, if lcid is valid,
* FALSE, otherwise.
*
* NOTES
* Wine does not currently make the distinction between supported and installed. All
* languages supported are installed by default.
*/
BOOL
WINAPI
IsValidLocale
(
LCID
lcid
,
DWORD
flags
)
{
/* check if language is registered in the kernel32 resources */
return
FindResourceExW
(
kernel32_handle
,
(
LPWSTR
)
RT_STRING
,
(
LPCWSTR
)
LOCALE_ILANGUAGE
,
LANGIDFROMLCID
(
lcid
))
!=
0
;
}
/******************************************************************************
* IsValidLocaleName (KERNEL32.@)
*/
BOOL
WINAPI
IsValidLocaleName
(
LPCWSTR
locale
)
{
LCID
lcid
;
return
!
RtlLocaleNameToLcid
(
locale
,
&
lcid
,
2
);
}
/******************************************************************************
* GetStringTypeW (KERNEL32.@)
* GetStringTypeW (KERNEL32.@)
*
*
* See GetStringTypeA.
* See GetStringTypeA.
...
...
dlls/kernelbase/kernelbase.spec
View file @
2cbb6f8d
...
@@ -159,7 +159,7 @@
...
@@ -159,7 +159,7 @@
@ stdcall CompareStringW(long long wstr long wstr long) kernel32.CompareStringW
@ stdcall CompareStringW(long long wstr long wstr long) kernel32.CompareStringW
@ stdcall ConnectNamedPipe(long ptr)
@ stdcall ConnectNamedPipe(long ptr)
@ stdcall ContinueDebugEvent(long long long)
@ stdcall ContinueDebugEvent(long long long)
@ stdcall ConvertDefaultLocale(long)
kernel32.ConvertDefaultLocale
@ stdcall ConvertDefaultLocale(long)
@ stdcall ConvertFiberToThread()
@ stdcall ConvertFiberToThread()
@ stdcall ConvertThreadToFiber(ptr)
@ stdcall ConvertThreadToFiber(ptr)
@ stdcall ConvertThreadToFiberEx(ptr long)
@ stdcall ConvertThreadToFiberEx(ptr long)
...
@@ -402,7 +402,7 @@
...
@@ -402,7 +402,7 @@
@ stdcall FreeUserPhysicalPages(long ptr ptr)
@ stdcall FreeUserPhysicalPages(long ptr ptr)
@ stdcall GenerateConsoleCtrlEvent(long long)
@ stdcall GenerateConsoleCtrlEvent(long long)
# @ stub GenerateGPNotificationInternal
# @ stub GenerateGPNotificationInternal
@ stdcall GetACP()
kernel32.GetACP
@ stdcall GetACP()
@ stdcall GetAcceptLanguagesA(ptr ptr)
@ stdcall GetAcceptLanguagesA(ptr ptr)
@ stdcall GetAcceptLanguagesW(ptr ptr)
@ stdcall GetAcceptLanguagesW(ptr ptr)
@ stdcall GetAce(ptr long ptr)
@ stdcall GetAce(ptr long ptr)
...
@@ -541,8 +541,8 @@
...
@@ -541,8 +541,8 @@
@ stdcall GetLastError() kernelbase_GetLastError
@ stdcall GetLastError() kernelbase_GetLastError
@ stdcall GetLengthSid(ptr)
@ stdcall GetLengthSid(ptr)
@ stdcall GetLocalTime(ptr)
@ stdcall GetLocalTime(ptr)
@ stdcall GetLocaleInfoA(long long ptr long)
kernel32.GetLocaleInfoA
@ stdcall GetLocaleInfoA(long long ptr long)
@ stdcall GetLocaleInfoEx(wstr long ptr long)
kernel32.GetLocaleInfoEx
@ stdcall GetLocaleInfoEx(wstr long ptr long)
@ stub GetLocaleInfoHelper
@ stub GetLocaleInfoHelper
@ stdcall GetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW
@ stdcall GetLocaleInfoW(long long ptr long) kernel32.GetLocaleInfoW
@ stdcall GetLogicalDriveStringsW(long ptr) kernel32.GetLogicalDriveStringsW
@ stdcall GetLogicalDriveStringsW(long ptr) kernel32.GetLogicalDriveStringsW
...
@@ -580,7 +580,7 @@
...
@@ -580,7 +580,7 @@
@ stdcall GetNumberFormatEx(wstr long wstr ptr ptr long) kernel32.GetNumberFormatEx
@ stdcall GetNumberFormatEx(wstr long wstr ptr ptr long) kernel32.GetNumberFormatEx
@ stdcall GetNumberFormatW(long long wstr ptr ptr long) kernel32.GetNumberFormatW
@ stdcall GetNumberFormatW(long long wstr ptr ptr long) kernel32.GetNumberFormatW
@ stdcall GetNumberOfConsoleInputEvents(long ptr)
@ stdcall GetNumberOfConsoleInputEvents(long ptr)
@ stdcall GetOEMCP()
kernel32.GetOEMCP
@ stdcall GetOEMCP()
# @ stub GetOsManufacturingMode
# @ stub GetOsManufacturingMode
# @ stub GetOsSafeBootMode
# @ stub GetOsSafeBootMode
@ stdcall GetOverlappedResult(long ptr ptr long)
@ stdcall GetOverlappedResult(long ptr ptr long)
...
@@ -876,8 +876,8 @@
...
@@ -876,8 +876,8 @@
@ stdcall IsValidAcl(ptr)
@ stdcall IsValidAcl(ptr)
@ stdcall IsValidCodePage(long) kernel32.IsValidCodePage
@ stdcall IsValidCodePage(long) kernel32.IsValidCodePage
@ stdcall IsValidLanguageGroup(long long)
@ stdcall IsValidLanguageGroup(long long)
@ stdcall IsValidLocale(long long)
kernel32.IsValidLocale
@ stdcall IsValidLocale(long long)
@ stdcall IsValidLocaleName(wstr)
kernel32.IsValidLocaleName
@ stdcall IsValidLocaleName(wstr)
# @ stub IsValidNLSVersion
# @ stub IsValidNLSVersion
@ stub IsValidRelativeSecurityDescriptor
@ stub IsValidRelativeSecurityDescriptor
@ stdcall IsValidSecurityDescriptor(ptr)
@ stdcall IsValidSecurityDescriptor(ptr)
...
@@ -938,7 +938,7 @@
...
@@ -938,7 +938,7 @@
@ stdcall LocalLock(long)
@ stdcall LocalLock(long)
@ stdcall LocalReAlloc(long long long)
@ stdcall LocalReAlloc(long long long)
@ stdcall LocalUnlock(long)
@ stdcall LocalUnlock(long)
@ stdcall LocaleNameToLCID(wstr long)
kernel32.LocaleNameToLCID
@ stdcall LocaleNameToLCID(wstr long)
# @ stub LocateXStateFeature
# @ stub LocateXStateFeature
@ stdcall LockFile(long long long long long)
@ stdcall LockFile(long long long long long)
@ stdcall LockFileEx(long long long long long ptr)
@ stdcall LockFileEx(long long long long long ptr)
...
...
dlls/kernelbase/locale.c
View file @
2cbb6f8d
...
@@ -4,9 +4,9 @@
...
@@ -4,9 +4,9 @@
* Copyright 1995 Martin von Loewis
* Copyright 1995 Martin von Loewis
* Copyright 1998 David Lee Lambert
* Copyright 1998 David Lee Lambert
* Copyright 2000 Julio César Gázquez
* Copyright 2000 Julio César Gázquez
* Copyright 2002 Alexandre Julliard for CodeWeavers
* Copyright 2003 Jon Griffiths
* Copyright 2003 Jon Griffiths
* Copyright 2005 Dmitry Timoshkov
* Copyright 2005 Dmitry Timoshkov
* Copyright 2002, 2019 Alexandre Julliard
*
*
* This library is free software; you can redistribute it and/or
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* modify it under the terms of the GNU Lesser General Public
...
@@ -161,6 +161,17 @@ void init_locale(void)
...
@@ -161,6 +161,17 @@ void init_locale(void)
}
}
static
UINT
get_lcid_codepage
(
LCID
lcid
,
ULONG
flags
)
{
UINT
ret
=
CP_ACP
;
if
(
!
(
flags
&
LOCALE_USE_CP_ACP
)
&&
lcid
!=
GetSystemDefaultLCID
())
GetLocaleInfoW
(
lcid
,
LOCALE_IDEFAULTANSICODEPAGE
|
LOCALE_RETURN_NUMBER
,
(
WCHAR
*
)
&
ret
,
sizeof
(
ret
)
/
sizeof
(
WCHAR
)
);
return
ret
;
}
/* Note: the Internal_ functions are not documented. The number of parameters
/* Note: the Internal_ functions are not documented. The number of parameters
* should be correct, but their exact meaning may not.
* should be correct, but their exact meaning may not.
*/
*/
...
@@ -518,6 +529,51 @@ INT WINAPI DECLSPEC_HOTPATCH CompareStringOrdinal( const WCHAR *str1, INT len1,
...
@@ -518,6 +529,51 @@ INT WINAPI DECLSPEC_HOTPATCH CompareStringOrdinal( const WCHAR *str1, INT len1,
/******************************************************************************
/******************************************************************************
* ConvertDefaultLocale (kernelbase.@)
*/
LCID
WINAPI
DECLSPEC_HOTPATCH
ConvertDefaultLocale
(
LCID
lcid
)
{
switch
(
lcid
)
{
case
LOCALE_INVARIANT
:
return
lcid
;
/* keep as-is */
case
LOCALE_SYSTEM_DEFAULT
:
return
GetSystemDefaultLCID
();
case
LOCALE_USER_DEFAULT
:
case
LOCALE_NEUTRAL
:
return
GetUserDefaultLCID
();
case
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_NEUTRAL
):
case
MAKELANGID
(
LANG_CHINESE
,
0x1e
):
return
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_CHINESE_SIMPLIFIED
);
case
MAKELANGID
(
LANG_CHINESE
,
0x1f
):
return
MAKELANGID
(
LANG_CHINESE
,
SUBLANG_CHINESE_HONGKONG
);
case
MAKELANGID
(
LANG_SPANISH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_SPANISH
,
SUBLANG_SPANISH_MODERN
);
case
MAKELANGID
(
LANG_IRISH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_IRISH
,
SUBLANG_IRISH_IRELAND
);
case
MAKELANGID
(
LANG_BENGALI
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_BENGALI
,
SUBLANG_BENGALI_BANGLADESH
);
case
MAKELANGID
(
LANG_SINDHI
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_SINDHI
,
SUBLANG_SINDHI_AFGHANISTAN
);
case
MAKELANGID
(
LANG_INUKTITUT
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_INUKTITUT
,
SUBLANG_INUKTITUT_CANADA_LATIN
);
case
MAKELANGID
(
LANG_TAMAZIGHT
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_TAMAZIGHT
,
SUBLANG_TAMAZIGHT_ALGERIA_LATIN
);
case
MAKELANGID
(
LANG_FULAH
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_FULAH
,
SUBLANG_FULAH_SENEGAL
);
case
MAKELANGID
(
LANG_TIGRINYA
,
SUBLANG_NEUTRAL
):
return
MAKELANGID
(
LANG_TIGRINYA
,
SUBLANG_TIGRINYA_ERITREA
);
default:
/* Replace SUBLANG_NEUTRAL with SUBLANG_DEFAULT */
if
(
SUBLANGID
(
lcid
)
==
SUBLANG_NEUTRAL
&&
SORTIDFROMLCID
(
lcid
)
==
SORT_DEFAULT
)
lcid
=
MAKELANGID
(
PRIMARYLANGID
(
lcid
),
SUBLANG_DEFAULT
);
break
;
}
return
lcid
;
}
/******************************************************************************
* EnumCalendarInfoW (kernelbase.@)
* EnumCalendarInfoW (kernelbase.@)
*/
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
EnumCalendarInfoW
(
CALINFO_ENUMPROCW
proc
,
LCID
lcid
,
BOOL
WINAPI
DECLSPEC_HOTPATCH
EnumCalendarInfoW
(
CALINFO_ENUMPROCW
proc
,
LCID
lcid
,
...
@@ -777,36 +833,11 @@ INT WINAPI DECLSPEC_HOTPATCH FindStringOrdinal( DWORD flag, const WCHAR *src, IN
...
@@ -777,36 +833,11 @@ INT WINAPI DECLSPEC_HOTPATCH FindStringOrdinal( DWORD flag, const WCHAR *src, IN
/******************************************************************************
/******************************************************************************
*
IsValidLanguageGroup
(kernelbase.@)
*
GetACP
(kernelbase.@)
*/
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
IsValidLanguageGroup
(
LGRPID
id
,
DWORD
flags
)
UINT
WINAPI
GetACP
(
void
)
{
{
static
const
WCHAR
format
[]
=
{
'%'
,
'x'
,
0
};
return
ansi_cp
;
WCHAR
name
[
10
],
value
[
10
];
DWORD
type
,
value_len
=
sizeof
(
value
);
BOOL
ret
=
FALSE
;
HKEY
key
;
if
(
RegOpenKeyExW
(
nls_key
,
L"Language Groups"
,
0
,
KEY_READ
,
&
key
))
return
FALSE
;
swprintf
(
name
,
ARRAY_SIZE
(
name
),
format
,
id
);
if
(
!
RegQueryValueExW
(
key
,
name
,
NULL
,
&
type
,
(
BYTE
*
)
value
,
&
value_len
)
&&
type
==
REG_SZ
)
ret
=
(
flags
&
LGRPID_SUPPORTED
)
||
wcstoul
(
value
,
NULL
,
10
);
RegCloseKey
(
key
);
return
ret
;
}
/***********************************************************************
* LCIDToLocaleName (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
LCIDToLocaleName
(
LCID
lcid
,
LPWSTR
name
,
INT
count
,
DWORD
flags
)
{
static
int
once
;
if
(
flags
&&
!
once
++
)
FIXME
(
"unsupported flags %x
\n
"
,
flags
);
return
GetLocaleInfoW
(
lcid
,
LOCALE_SNAME
|
LOCALE_NOUSEROVERRIDE
,
name
,
count
);
}
}
...
@@ -1003,6 +1034,87 @@ INT WINAPI DECLSPEC_HOTPATCH GetCalendarInfoEx( const WCHAR *locale, CALID calen
...
@@ -1003,6 +1034,87 @@ INT WINAPI DECLSPEC_HOTPATCH GetCalendarInfoEx( const WCHAR *locale, CALID calen
}
}
/******************************************************************************
* GetLocaleInfoA (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
GetLocaleInfoA
(
LCID
lcid
,
LCTYPE
lctype
,
char
*
buffer
,
INT
len
)
{
WCHAR
*
bufferW
;
INT
lenW
,
ret
;
TRACE
(
"lcid=0x%x lctype=0x%x %p %d
\n
"
,
lcid
,
lctype
,
buffer
,
len
);
if
(
len
<
0
||
(
len
&&
!
buffer
))
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
0
;
}
if
(
LOWORD
(
lctype
)
==
LOCALE_SSHORTTIME
||
(
lctype
&
LOCALE_RETURN_GENITIVE_NAMES
))
{
SetLastError
(
ERROR_INVALID_FLAGS
);
return
0
;
}
if
(
LOWORD
(
lctype
)
==
LOCALE_FONTSIGNATURE
||
(
lctype
&
LOCALE_RETURN_NUMBER
))
return
GetLocaleInfoW
(
lcid
,
lctype
,
(
WCHAR
*
)
buffer
,
len
/
sizeof
(
WCHAR
)
)
*
sizeof
(
WCHAR
);
if
(
!
(
lenW
=
GetLocaleInfoW
(
lcid
,
lctype
,
NULL
,
0
)))
return
0
;
if
(
!
(
bufferW
=
RtlAllocateHeap
(
GetProcessHeap
(),
0
,
lenW
*
sizeof
(
WCHAR
)
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
0
;
}
ret
=
GetLocaleInfoW
(
lcid
,
lctype
,
bufferW
,
lenW
);
if
(
ret
)
ret
=
WideCharToMultiByte
(
get_lcid_codepage
(
lcid
,
lctype
),
0
,
bufferW
,
ret
,
buffer
,
len
,
NULL
,
NULL
);
RtlFreeHeap
(
GetProcessHeap
(),
0
,
bufferW
);
return
ret
;
}
/******************************************************************************
* GetLocaleInfoEx (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
GetLocaleInfoEx
(
const
WCHAR
*
locale
,
LCTYPE
info
,
WCHAR
*
buffer
,
INT
len
)
{
LCID
lcid
=
LocaleNameToLCID
(
locale
,
0
);
TRACE
(
"%s lcid=0x%x 0x%x
\n
"
,
debugstr_w
(
locale
),
lcid
,
info
);
if
(
!
lcid
)
return
0
;
/* special handling for neutral locale names */
if
(
locale
&&
lstrlenW
(
locale
)
==
2
)
{
switch
(
LOWORD
(
info
))
{
case
LOCALE_SNAME
:
if
(
len
&&
len
<
3
)
{
SetLastError
(
ERROR_INSUFFICIENT_BUFFER
);
return
0
;
}
if
(
len
)
lstrcpyW
(
buffer
,
locale
);
return
3
;
case
LOCALE_SPARENT
:
if
(
len
)
buffer
[
0
]
=
0
;
return
1
;
}
}
return
GetLocaleInfoW
(
lcid
,
info
,
buffer
,
len
);
}
/******************************************************************************
* GetOEMCP (kernelbase.@)
*/
UINT
WINAPI
GetOEMCP
(
void
)
{
return
oem_cp
;
}
/***********************************************************************
/***********************************************************************
* GetSystemDefaultLCID (kernelbase.@)
* GetSystemDefaultLCID (kernelbase.@)
*/
*/
...
@@ -1095,6 +1207,75 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsNormalizedString( NORM_FORM form, const WCHAR *s
...
@@ -1095,6 +1207,75 @@ BOOL WINAPI DECLSPEC_HOTPATCH IsNormalizedString( NORM_FORM form, const WCHAR *s
/******************************************************************************
/******************************************************************************
* IsValidLanguageGroup (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
IsValidLanguageGroup
(
LGRPID
id
,
DWORD
flags
)
{
WCHAR
name
[
10
],
value
[
10
];
DWORD
type
,
value_len
=
sizeof
(
value
);
BOOL
ret
=
FALSE
;
HKEY
key
;
if
(
RegOpenKeyExW
(
nls_key
,
L"Language Groups"
,
0
,
KEY_READ
,
&
key
))
return
FALSE
;
swprintf
(
name
,
ARRAY_SIZE
(
name
),
L"%x"
,
id
);
if
(
!
RegQueryValueExW
(
key
,
name
,
NULL
,
&
type
,
(
BYTE
*
)
value
,
&
value_len
)
&&
type
==
REG_SZ
)
ret
=
(
flags
&
LGRPID_SUPPORTED
)
||
wcstoul
(
value
,
NULL
,
10
);
RegCloseKey
(
key
);
return
ret
;
}
/******************************************************************************
* IsValidLocale (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
IsValidLocale
(
LCID
lcid
,
DWORD
flags
)
{
/* check if language is registered in the kernel32 resources */
return
FindResourceExW
(
kernel32_handle
,
(
LPWSTR
)
RT_STRING
,
ULongToPtr
(
(
LOCALE_ILANGUAGE
>>
4
)
+
1
),
LANGIDFROMLCID
(
lcid
))
!=
0
;
}
/******************************************************************************
* IsValidLocaleName (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
IsValidLocaleName
(
const
WCHAR
*
locale
)
{
LCID
lcid
;
return
!
RtlLocaleNameToLcid
(
locale
,
&
lcid
,
2
);
}
/***********************************************************************
* LCIDToLocaleName (kernelbase.@)
*/
INT
WINAPI
DECLSPEC_HOTPATCH
LCIDToLocaleName
(
LCID
lcid
,
WCHAR
*
name
,
INT
count
,
DWORD
flags
)
{
static
int
once
;
if
(
flags
&&
!
once
++
)
FIXME
(
"unsupported flags %x
\n
"
,
flags
);
return
GetLocaleInfoW
(
lcid
,
LOCALE_SNAME
|
LOCALE_NOUSEROVERRIDE
,
name
,
count
);
}
/***********************************************************************
* LocaleNameToLCID (kernelbase.@)
*/
LCID
WINAPI
DECLSPEC_HOTPATCH
LocaleNameToLCID
(
const
WCHAR
*
name
,
DWORD
flags
)
{
LCID
lcid
;
if
(
!
name
)
return
GetUserDefaultLCID
();
if
(
!
set_ntstatus
(
RtlLocaleNameToLcid
(
name
,
&
lcid
,
2
)))
return
0
;
if
(
!
(
flags
&
LOCALE_ALLOW_NEUTRAL_NAMES
))
lcid
=
ConvertDefaultLocale
(
lcid
);
return
lcid
;
}
/******************************************************************************
* NormalizeString (kernelbase.@)
* NormalizeString (kernelbase.@)
*/
*/
INT
WINAPI
DECLSPEC_HOTPATCH
NormalizeString
(
NORM_FORM
form
,
const
WCHAR
*
src
,
INT
src_len
,
INT
WINAPI
DECLSPEC_HOTPATCH
NormalizeString
(
NORM_FORM
form
,
const
WCHAR
*
src
,
INT
src_len
,
...
...
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