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
1b46da5c
Commit
1b46da5c
authored
Dec 07, 2019
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
kernel32: Move GetStringType functions to kernelbase.
Signed-off-by:
Alexandre Julliard
<
julliard@winehq.org
>
parent
c123637b
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
132 additions
and
144 deletions
+132
-144
Makefile.in
dlls/kernel32/Makefile.in
+0
-1
kernel32.spec
dlls/kernel32/kernel32.spec
+3
-3
locale.c
dlls/kernel32/locale.c
+6
-135
Makefile.in
dlls/kernelbase/Makefile.in
+2
-1
kernelbase.spec
dlls/kernelbase/kernelbase.spec
+3
-3
locale.c
dlls/kernelbase/locale.c
+117
-0
wctype.c
dlls/kernelbase/wctype.c
+0
-0
make_unicode
tools/make_unicode
+1
-1
No files found.
dlls/kernel32/Makefile.in
View file @
1b46da5c
...
...
@@ -39,7 +39,6 @@ C_SRCS = \
version.c
\
virtual.c
\
volume.c
\
wctype.c
\
wer.c
RC_SRCS
=
\
...
...
dlls/kernel32/kernel32.spec
View file @
1b46da5c
...
...
@@ -814,10 +814,10 @@
@ stdcall -import GetStartupInfoW(ptr)
@ stdcall -import GetStdHandle(long)
# @ stub GetStringScripts
@ stdcall GetStringTypeA(long long str long ptr)
@ stdcall
-import
GetStringTypeA(long long str long ptr)
@ stdcall GetStringTypeExA(long long str long ptr)
@ stdcall GetStringTypeExW(long long wstr long ptr)
@ stdcall GetStringTypeW(long wstr long ptr)
@ stdcall
-import
GetStringTypeExW(long long wstr long ptr)
@ stdcall
-import
GetStringTypeW(long wstr long ptr)
@ stdcall -import GetSystemFileCacheSize(ptr ptr ptr)
@ stdcall -import GetSystemDefaultLCID()
@ stdcall -import GetSystemDefaultLangID()
...
...
dlls/kernel32/locale.c
View file @
1b46da5c
...
...
@@ -62,7 +62,6 @@ extern BOOL WINAPI Internal_EnumTimeFormats( TIMEFMT_ENUMPROCW proc, LCID lcid,
extern
BOOL
WINAPI
Internal_EnumUILanguages
(
UILANGUAGE_ENUMPROCW
proc
,
DWORD
flags
,
LONG_PTR
param
,
BOOL
unicode
);
extern
const
unsigned
short
wctype_table
[]
DECLSPEC_HIDDEN
;
extern
const
unsigned
short
nameprep_char_type
[]
DECLSPEC_HIDDEN
;
extern
const
WCHAR
nameprep_mapping
[]
DECLSPEC_HIDDEN
;
...
...
@@ -358,135 +357,6 @@ BOOL WINAPI EnumSystemCodePagesA( CODEPAGE_ENUMPROCA proc, DWORD flags )
/******************************************************************************
* GetStringTypeW (KERNEL32.@)
*
* See GetStringTypeA.
*/
BOOL
WINAPI
GetStringTypeW
(
DWORD
type
,
LPCWSTR
src
,
INT
count
,
LPWORD
chartype
)
{
if
(
!
src
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
if
(
count
==
-
1
)
count
=
strlenW
(
src
)
+
1
;
switch
(
type
)
{
case
CT_CTYPE1
:
while
(
count
--
)
*
chartype
++
=
get_table_entry
(
wctype_table
,
*
src
++
)
&
0xfff
;
break
;
case
CT_CTYPE2
:
while
(
count
--
)
*
chartype
++
=
get_table_entry
(
wctype_table
,
*
src
++
)
>>
12
;
break
;
case
CT_CTYPE3
:
{
WARN
(
"CT_CTYPE3: semi-stub.
\n
"
);
while
(
count
--
)
{
int
c
=
*
src
;
WORD
type1
,
type3
=
0
;
/* C3_NOTAPPLICABLE */
type1
=
get_table_entry
(
wctype_table
,
*
src
++
)
&
0xfff
;
/* try to construct type3 from type1 */
if
(
type1
&
C1_SPACE
)
type3
|=
C3_SYMBOL
;
if
(
type1
&
C1_ALPHA
)
type3
|=
C3_ALPHA
;
if
((
c
>=
0x30A0
)
&&
(
c
<=
0x30FF
))
type3
|=
C3_KATAKANA
;
if
((
c
>=
0x3040
)
&&
(
c
<=
0x309F
))
type3
|=
C3_HIRAGANA
;
if
((
c
>=
0x4E00
)
&&
(
c
<=
0x9FAF
))
type3
|=
C3_IDEOGRAPH
;
if
(
c
==
0x0640
)
type3
|=
C3_KASHIDA
;
if
((
c
>=
0x3000
)
&&
(
c
<=
0x303F
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xD800
)
&&
(
c
<=
0xDBFF
))
type3
|=
C3_HIGHSURROGATE
;
if
((
c
>=
0xDC00
)
&&
(
c
<=
0xDFFF
))
type3
|=
C3_LOWSURROGATE
;
if
((
c
>=
0xFF00
)
&&
(
c
<=
0xFF60
))
type3
|=
C3_FULLWIDTH
;
if
((
c
>=
0xFF00
)
&&
(
c
<=
0xFF20
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF3B
)
&&
(
c
<=
0xFF40
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF5B
)
&&
(
c
<=
0xFF60
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF21
)
&&
(
c
<=
0xFF3A
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFF41
)
&&
(
c
<=
0xFF5A
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFFE0
)
&&
(
c
<=
0xFFE6
))
type3
|=
C3_FULLWIDTH
;
if
((
c
>=
0xFFE0
)
&&
(
c
<=
0xFFE6
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF61
)
&&
(
c
<=
0xFFDC
))
type3
|=
C3_HALFWIDTH
;
if
((
c
>=
0xFF61
)
&&
(
c
<=
0xFF64
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF65
)
&&
(
c
<=
0xFF9F
))
type3
|=
C3_KATAKANA
;
if
((
c
>=
0xFF65
)
&&
(
c
<=
0xFF9F
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFFE8
)
&&
(
c
<=
0xFFEE
))
type3
|=
C3_HALFWIDTH
;
if
((
c
>=
0xFFE8
)
&&
(
c
<=
0xFFEE
))
type3
|=
C3_SYMBOL
;
*
chartype
++
=
type3
;
}
break
;
}
default:
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
return
TRUE
;
}
/******************************************************************************
* GetStringTypeExW (KERNEL32.@)
*
* See GetStringTypeExA.
*/
BOOL
WINAPI
GetStringTypeExW
(
LCID
locale
,
DWORD
type
,
LPCWSTR
src
,
INT
count
,
LPWORD
chartype
)
{
/* locale is ignored for Unicode */
return
GetStringTypeW
(
type
,
src
,
count
,
chartype
);
}
/******************************************************************************
* GetStringTypeA (KERNEL32.@)
*
* Get characteristics of the characters making up a string.
*
* PARAMS
* locale [I] Locale Id for the string
* type [I] CT_CTYPE1 = classification, CT_CTYPE2 = directionality, CT_CTYPE3 = typographic info
* src [I] String to analyse
* count [I] Length of src in chars, or -1 if src is NUL terminated
* chartype [O] Destination for the calculated characteristics
*
* RETURNS
* Success: TRUE. chartype is filled with the requested characteristics of each char
* in src.
* Failure: FALSE. Use GetLastError() to determine the cause.
*/
BOOL
WINAPI
GetStringTypeA
(
LCID
locale
,
DWORD
type
,
LPCSTR
src
,
INT
count
,
LPWORD
chartype
)
{
UINT
cp
;
INT
countW
;
LPWSTR
srcW
;
BOOL
ret
=
FALSE
;
if
(
count
==
-
1
)
count
=
strlen
(
src
)
+
1
;
if
(
!
(
cp
=
get_lcid_codepage
(
locale
)))
{
FIXME
(
"For locale %04x using current ANSI code page
\n
"
,
locale
);
cp
=
GetACP
();
}
countW
=
MultiByteToWideChar
(
cp
,
0
,
src
,
count
,
NULL
,
0
);
if
((
srcW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
countW
*
sizeof
(
WCHAR
))))
{
MultiByteToWideChar
(
cp
,
0
,
src
,
count
,
srcW
,
countW
);
/*
* NOTE: the target buffer has 1 word for each CHARACTER in the source
* string, with multibyte characters there maybe be more bytes in count
* than character space in the buffer!
*/
ret
=
GetStringTypeW
(
type
,
srcW
,
countW
,
chartype
);
HeapFree
(
GetProcessHeap
(),
0
,
srcW
);
}
return
ret
;
}
/******************************************************************************
* GetStringTypeExA (KERNEL32.@)
*
* Get characteristics of the characters making up a string.
...
...
@@ -819,12 +689,12 @@ INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPW
{
for
(
len
=
0
;
srclen
;
src
++
,
srclen
--
)
{
W
CHAR
wch
=
*
src
;
W
ORD
type
;
/* tests show that win2k just ignores NORM_IGNORENONSPACE,
* and skips white space and punctuation characters for
* NORM_IGNORESYMBOLS.
*/
if
(
get_table_entry
(
wctype_table
,
wch
)
&
(
C1_PUNCT
|
C1_SPACE
))
if
(
GetStringTypeW
(
CT_CTYPE1
,
src
,
1
,
&
type
)
&&
(
type
&
(
C1_PUNCT
|
C1_SPACE
)
))
continue
;
len
++
;
}
...
...
@@ -869,10 +739,11 @@ INT WINAPI LCMapStringEx(LPCWSTR name, DWORD flags, LPCWSTR src, INT srclen, LPW
{
for
(
len
=
dstlen
,
dst_ptr
=
dst
;
srclen
&&
len
;
src
++
,
srclen
--
)
{
WCHAR
wch
=
*
src
;
if
((
flags
&
NORM_IGNORESYMBOLS
)
&&
(
get_table_entry
(
wctype_table
,
wch
)
&
(
C1_PUNCT
|
C1_SPACE
)))
WORD
type
;
if
((
flags
&
NORM_IGNORESYMBOLS
)
&&
GetStringTypeW
(
CT_CTYPE1
,
src
,
1
,
&
type
)
&&
(
type
&
(
C1_PUNCT
|
C1_SPACE
)))
continue
;
*
dst_ptr
++
=
wch
;
*
dst_ptr
++
=
*
src
;
len
--
;
}
goto
done
;
...
...
dlls/kernelbase/Makefile.in
View file @
1b46da5c
...
...
@@ -21,4 +21,5 @@ C_SRCS = \
string.c
\
sync.c
\
thread.c
\
version.c
version.c
\
wctype.c
dlls/kernelbase/kernelbase.spec
View file @
1b46da5c
...
...
@@ -674,9 +674,9 @@
@ stdcall GetStdHandle(long)
# @ stub GetStringScripts
@ stub GetStringTableEntry
@ stdcall GetStringTypeA(long long str long ptr)
kernel32.GetStringTypeA
@ stdcall GetStringTypeExW(long long wstr long ptr)
kernel32.GetStringTypeExW
@ stdcall GetStringTypeW(long wstr long ptr)
kernel32.GetStringTypeW
@ stdcall GetStringTypeA(long long str long ptr)
@ stdcall GetStringTypeExW(long long wstr long ptr)
@ stdcall GetStringTypeW(long wstr long ptr)
# @ stub GetSystemAppDataFolder
# @ stub GetSystemAppDataKey
# @ stub GetSystemCpuSetInformation
...
...
dlls/kernelbase/locale.c
View file @
1b46da5c
...
...
@@ -45,6 +45,8 @@ extern UINT CDECL __wine_get_unix_codepage(void);
extern
unsigned
int
wine_decompose
(
int
flags
,
WCHAR
ch
,
WCHAR
*
dst
,
unsigned
int
dstlen
)
DECLSPEC_HIDDEN
;
extern
WCHAR
wine_compose
(
const
WCHAR
*
str
)
DECLSPEC_HIDDEN
;
extern
const
unsigned
short
wctype_table
[]
DECLSPEC_HIDDEN
;
static
HANDLE
kernel32_handle
;
static
const
struct
registry_value
...
...
@@ -329,6 +331,12 @@ void init_locale(void)
}
static
inline
USHORT
get_table_entry
(
const
USHORT
*
table
,
WCHAR
ch
)
{
return
table
[
table
[
table
[
ch
>>
8
]
+
((
ch
>>
4
)
&
0x0f
)]
+
(
ch
&
0xf
)];
}
static
UINT
get_lcid_codepage
(
LCID
lcid
,
ULONG
flags
)
{
UINT
ret
=
GetACP
();
...
...
@@ -2705,6 +2713,115 @@ UINT WINAPI GetOEMCP(void)
/***********************************************************************
* GetStringTypeA (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
GetStringTypeA
(
LCID
locale
,
DWORD
type
,
const
char
*
src
,
int
count
,
WORD
*
chartype
)
{
UINT
cp
;
INT
countW
;
LPWSTR
srcW
;
BOOL
ret
=
FALSE
;
if
(
count
==
-
1
)
count
=
strlen
(
src
)
+
1
;
cp
=
get_lcid_codepage
(
locale
,
0
);
countW
=
MultiByteToWideChar
(
cp
,
0
,
src
,
count
,
NULL
,
0
);
if
((
srcW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
countW
*
sizeof
(
WCHAR
))))
{
MultiByteToWideChar
(
cp
,
0
,
src
,
count
,
srcW
,
countW
);
/*
* NOTE: the target buffer has 1 word for each CHARACTER in the source
* string, with multibyte characters there maybe be more bytes in count
* than character space in the buffer!
*/
ret
=
GetStringTypeW
(
type
,
srcW
,
countW
,
chartype
);
HeapFree
(
GetProcessHeap
(),
0
,
srcW
);
}
return
ret
;
}
/***********************************************************************
* GetStringTypeW (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
GetStringTypeW
(
DWORD
type
,
const
WCHAR
*
src
,
INT
count
,
WORD
*
chartype
)
{
if
(
!
src
)
{
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
if
(
count
==
-
1
)
count
=
lstrlenW
(
src
)
+
1
;
switch
(
type
)
{
case
CT_CTYPE1
:
while
(
count
--
)
*
chartype
++
=
get_table_entry
(
wctype_table
,
*
src
++
)
&
0xfff
;
break
;
case
CT_CTYPE2
:
while
(
count
--
)
*
chartype
++
=
get_table_entry
(
wctype_table
,
*
src
++
)
>>
12
;
break
;
case
CT_CTYPE3
:
{
WARN
(
"CT_CTYPE3: semi-stub.
\n
"
);
while
(
count
--
)
{
int
c
=
*
src
;
WORD
type1
,
type3
=
0
;
/* C3_NOTAPPLICABLE */
type1
=
get_table_entry
(
wctype_table
,
*
src
++
)
&
0xfff
;
/* try to construct type3 from type1 */
if
(
type1
&
C1_SPACE
)
type3
|=
C3_SYMBOL
;
if
(
type1
&
C1_ALPHA
)
type3
|=
C3_ALPHA
;
if
((
c
>=
0x30A0
)
&&
(
c
<=
0x30FF
))
type3
|=
C3_KATAKANA
;
if
((
c
>=
0x3040
)
&&
(
c
<=
0x309F
))
type3
|=
C3_HIRAGANA
;
if
((
c
>=
0x4E00
)
&&
(
c
<=
0x9FAF
))
type3
|=
C3_IDEOGRAPH
;
if
(
c
==
0x0640
)
type3
|=
C3_KASHIDA
;
if
((
c
>=
0x3000
)
&&
(
c
<=
0x303F
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xD800
)
&&
(
c
<=
0xDBFF
))
type3
|=
C3_HIGHSURROGATE
;
if
((
c
>=
0xDC00
)
&&
(
c
<=
0xDFFF
))
type3
|=
C3_LOWSURROGATE
;
if
((
c
>=
0xFF00
)
&&
(
c
<=
0xFF60
))
type3
|=
C3_FULLWIDTH
;
if
((
c
>=
0xFF00
)
&&
(
c
<=
0xFF20
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF3B
)
&&
(
c
<=
0xFF40
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF5B
)
&&
(
c
<=
0xFF60
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF21
)
&&
(
c
<=
0xFF3A
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFF41
)
&&
(
c
<=
0xFF5A
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFFE0
)
&&
(
c
<=
0xFFE6
))
type3
|=
C3_FULLWIDTH
;
if
((
c
>=
0xFFE0
)
&&
(
c
<=
0xFFE6
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF61
)
&&
(
c
<=
0xFFDC
))
type3
|=
C3_HALFWIDTH
;
if
((
c
>=
0xFF61
)
&&
(
c
<=
0xFF64
))
type3
|=
C3_SYMBOL
;
if
((
c
>=
0xFF65
)
&&
(
c
<=
0xFF9F
))
type3
|=
C3_KATAKANA
;
if
((
c
>=
0xFF65
)
&&
(
c
<=
0xFF9F
))
type3
|=
C3_ALPHA
;
if
((
c
>=
0xFFE8
)
&&
(
c
<=
0xFFEE
))
type3
|=
C3_HALFWIDTH
;
if
((
c
>=
0xFFE8
)
&&
(
c
<=
0xFFEE
))
type3
|=
C3_SYMBOL
;
*
chartype
++
=
type3
;
}
break
;
}
default:
SetLastError
(
ERROR_INVALID_PARAMETER
);
return
FALSE
;
}
return
TRUE
;
}
/***********************************************************************
* GetStringTypeExW (kernelbase.@)
*/
BOOL
WINAPI
DECLSPEC_HOTPATCH
GetStringTypeExW
(
LCID
locale
,
DWORD
type
,
const
WCHAR
*
src
,
int
count
,
WORD
*
chartype
)
{
/* locale is ignored for Unicode */
return
GetStringTypeW
(
type
,
src
,
count
,
chartype
);
}
/***********************************************************************
* GetSystemDefaultLCID (kernelbase.@)
*/
LCID
WINAPI
DECLSPEC_HOTPATCH
GetSystemDefaultLCID
(
void
)
...
...
dlls/kernel
32
/wctype.c
→
dlls/kernel
base
/wctype.c
View file @
1b46da5c
File moved
tools/make_unicode
View file @
1b46da5c
...
...
@@ -2920,7 +2920,7 @@ dump_ctype_tables( "libs/port/wctype.c" );
dump_bidi_dir_table
(
"dlls/gdi32/direction.c"
);
dump_bidi_dir_table
(
"dlls/usp10/direction.c"
);
dump_bidi_dir_table
(
"dlls/dwrite/direction.c"
);
dump_string_type_table
(
"dlls/kernel
32
/wctype.c"
);
dump_string_type_table
(
"dlls/kernel
base
/wctype.c"
);
dump_digit_folding
(
"libs/port/digitmap.c"
,
1
);
dump_digit_folding
(
"dlls/kernelbase/digitmap.c"
,
0
);
dump_combining_class
(
"libs/port/combclass.c"
);
...
...
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