Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-cw
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-cw
Commits
beb9e113
Commit
beb9e113
authored
Nov 18, 2022
by
Nikolay Sivov
Committed by
Alexandre Julliard
Nov 22, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vbscript: Handle CP_UTF8 in Chr()/Asc().
parent
393f740b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
26 additions
and
16 deletions
+26
-16
global.c
dlls/vbscript/global.c
+18
-12
vbscript.c
dlls/vbscript/vbscript.c
+7
-4
vbscript.h
dlls/vbscript/vbscript.h
+1
-0
No files found.
dlls/vbscript/global.c
View file @
beb9e113
...
...
@@ -1842,10 +1842,12 @@ static HRESULT Global_Asc(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA
if
(
!
SysStringLen
(
str
))
hres
=
MAKE_VBSERROR
(
VBSE_ILLEGAL_FUNC_CALL
);
else
if
(
This
->
ctx
->
codepage
==
CP_UTF8
)
hres
=
return_short
(
res
,
*
str
);
else
{
unsigned
char
buf
[
2
];
short
val
=
0
;
int
n
=
WideCharToMultiByte
(
CP_ACP
,
0
,
str
,
1
,
(
char
*
)
buf
,
sizeof
(
buf
),
NULL
,
NULL
);
int
n
=
WideCharToMultiByte
(
This
->
ctx
->
codepage
,
0
,
str
,
1
,
(
char
*
)
buf
,
sizeof
(
buf
),
NULL
,
NULL
);
switch
(
n
)
{
case
1
:
val
=
buf
[
0
];
...
...
@@ -1865,9 +1867,6 @@ static HRESULT Global_Asc(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA
return
hres
;
}
/* The function supports only single-byte and double-byte character sets. It
* ignores language specified by IActiveScriptSite::GetLCID. The argument needs
* to be in range of short or unsigned short. */
static
HRESULT
Global_Chr
(
BuiltinDisp
*
This
,
VARIANT
*
arg
,
unsigned
args_cnt
,
VARIANT
*
res
)
{
int
cp
,
c
,
len
=
0
;
...
...
@@ -1882,7 +1881,7 @@ static HRESULT Global_Chr(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA
if
(
FAILED
(
hres
))
return
hres
;
cp
=
GetACP
()
;
cp
=
This
->
ctx
->
codepage
;
if
(
!
GetCPInfo
(
cp
,
&
cpi
))
cpi
.
MaxCharSize
=
1
;
...
...
@@ -1892,13 +1891,20 @@ static HRESULT Global_Chr(BuiltinDisp *This, VARIANT *arg, unsigned args_cnt, VA
return
MAKE_VBSERROR
(
VBSE_ILLEGAL_FUNC_CALL
);
}
if
(
c
>>
8
)
buf
[
len
++
]
=
c
>>
8
;
if
(
!
len
||
IsDBCSLeadByteEx
(
cp
,
buf
[
0
]))
buf
[
len
++
]
=
c
;
if
(
!
MultiByteToWideChar
(
CP_ACP
,
0
,
buf
,
len
,
&
ch
,
1
))
{
WARN
(
"invalid arg %d, cp %d
\n
"
,
c
,
cp
);
return
E_FAIL
;
if
(
cp
==
CP_UTF8
)
{
ch
=
c
;
}
else
{
if
(
c
>>
8
)
buf
[
len
++
]
=
c
>>
8
;
if
(
!
len
||
IsDBCSLeadByteEx
(
cp
,
buf
[
0
]))
buf
[
len
++
]
=
c
;
if
(
!
MultiByteToWideChar
(
cp
,
0
,
buf
,
len
,
&
ch
,
1
))
{
WARN
(
"invalid arg %d, cp %d
\n
"
,
c
,
cp
);
return
E_FAIL
;
}
}
if
(
res
)
{
...
...
dlls/vbscript/vbscript.c
View file @
beb9e113
...
...
@@ -555,8 +555,8 @@ static ULONG WINAPI VBScript_Release(IActiveScript *iface)
static
HRESULT
WINAPI
VBScript_SetScriptSite
(
IActiveScript
*
iface
,
IActiveScriptSite
*
pass
)
{
VBScript
*
This
=
impl_from_IActiveScript
(
iface
);
LCID
lcid
=
LOCALE_USER_DEFAULT
;
named_item_t
*
item
;
LCID
lcid
;
HRESULT
hres
;
TRACE
(
"(%p)->(%p)
\n
"
,
This
,
pass
);
...
...
@@ -590,9 +590,12 @@ static HRESULT WINAPI VBScript_SetScriptSite(IActiveScript *iface, IActiveScript
This
->
ctx
->
site
=
pass
;
IActiveScriptSite_AddRef
(
This
->
ctx
->
site
);
hres
=
IActiveScriptSite_GetLCID
(
This
->
ctx
->
site
,
&
lcid
);
if
(
hres
==
S_OK
)
This
->
ctx
->
lcid
=
lcid
;
IActiveScriptSite_GetLCID
(
This
->
ctx
->
site
,
&
lcid
);
This
->
ctx
->
lcid
=
IsValidLocale
(
lcid
,
0
)
?
lcid
:
GetUserDefaultLCID
();
GetLocaleInfoW
(
lcid
,
LOCALE_IDEFAULTANSICODEPAGE
|
LOCALE_RETURN_NUMBER
,
(
WCHAR
*
)
&
This
->
ctx
->
codepage
,
sizeof
(
This
->
ctx
->
codepage
)
/
sizeof
(
WCHAR
));
if
(
!
This
->
ctx
->
codepage
)
This
->
ctx
->
codepage
=
CP_UTF8
;
if
(
This
->
is_initialized
)
change_state
(
This
,
SCRIPTSTATE_INITIALIZED
);
...
...
dlls/vbscript/vbscript.h
View file @
beb9e113
...
...
@@ -183,6 +183,7 @@ static inline VARIANT *get_arg(DISPPARAMS *dp, DWORD i)
struct
_script_ctx_t
{
IActiveScriptSite
*
site
;
LCID
lcid
;
UINT
codepage
;
IInternetHostSecurityManager
*
secmgr
;
DWORD
safeopt
;
...
...
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