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
cea1052f
Commit
cea1052f
authored
Aug 19, 2007
by
Mikolaj Zalewski
Committed by
Alexandre Julliard
Aug 21, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msvcrt: Test and fix _mbclen/_mbslen.
parent
545f446b
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
20 additions
and
9 deletions
+20
-9
mbcs.c
dlls/msvcrt/mbcs.c
+10
-8
string.c
dlls/msvcrt/tests/string.c
+10
-1
No files found.
dlls/msvcrt/mbcs.c
View file @
cea1052f
...
...
@@ -356,7 +356,7 @@ unsigned char* CDECL _mbsninc(const unsigned char* str, MSVCRT_size_t num)
*/
unsigned
int
CDECL
_mbclen
(
const
unsigned
char
*
str
)
{
return
MSVCRT_isleadbyte
(
*
str
)
?
2
:
1
;
return
_ismbblead
(
*
str
)
?
2
:
1
;
}
/*********************************************************************
...
...
@@ -379,17 +379,19 @@ int CDECL MSVCRT_mblen(const char* str, MSVCRT_size_t size)
*/
MSVCRT_size_t
CDECL
_mbslen
(
const
unsigned
char
*
str
)
{
if
(
MSVCRT___mb_cur_max
>
1
)
MSVCRT_size_t
len
=
0
;
while
(
*
str
)
{
MSVCRT_size_t
len
=
0
;
while
(
*
str
)
if
(
_ismbblead
(
*
str
))
{
str
+=
MSVCRT_isleadbyte
(
*
str
)
?
2
:
1
;
len
++
;
str
++
;
if
(
!*
str
)
/* count only full chars */
break
;
}
return
len
;
str
++
;
len
++
;
}
return
u_strlen
(
str
);
/* ASCII CP */
return
len
;
}
/*********************************************************************
...
...
dlls/msvcrt/tests/string.c
View file @
cea1052f
...
...
@@ -166,6 +166,8 @@ static void test_mbcp(void)
int
mb_orig_max
=
__mb_cur_max
;
int
curr_mbcp
=
_getmbcp
();
unsigned
char
*
mbstring
=
(
unsigned
char
*
)
"
\xb0\xb1\xb2
\xb3\xb4
\xb5
"
;
/* incorrect string */
unsigned
char
*
mbstring2
=
(
unsigned
char
*
)
"
\xb0\xb1\xb2\xb3
Q
\xb4\xb5
"
;
/* correct string */
unsigned
char
*
mbsonlylead
=
(
unsigned
char
*
)
"
\xb0
"
;
/* some two single-byte code pages*/
test_codepage
(
1252
);
...
...
@@ -186,12 +188,19 @@ static void test_mbcp(void)
ok
(
_ismbbtrail
(
'\xb0'
),
"
\xa0
should be a trail byte
\n
"
);
ok
(
_ismbbtrail
(
' '
)
==
FALSE
,
"' ' should not be a trail byte
\n
"
);
/* _mbsnextc */
expect_eq
(
_mbsnextc
(
mbstring
),
0xb0b1
,
int
,
"%x"
);
expect_eq
(
_mbsnextc
(
&
mbstring
[
2
]),
0xb220
,
int
,
"%x"
);
/* lead + invalid tail */
expect_eq
(
_mbsnextc
(
&
mbstring
[
3
]),
0x20
,
int
,
"%x"
);
/* single char */
/* _mbclen/_mbslen */
expect_eq
(
_mbclen
(
mbstring
),
2
,
int
,
"%d"
);
expect_eq
(
_mbclen
(
&
mbstring
[
2
]),
2
,
int
,
"%d"
);
expect_eq
(
_mbclen
(
&
mbstring
[
3
]),
1
,
int
,
"%d"
);
expect_eq
(
_mbslen
(
mbstring2
),
4
,
int
,
"%d"
);
expect_eq
(
_mbslen
(
mbsonlylead
),
0
,
int
,
"%d"
);
/* lead + NUL not counted as character */
expect_eq
(
_mbslen
(
mbstring
),
4
,
int
,
"%d"
);
/* lead + invalid trail counted */
_setmbcp
(
curr_mbcp
);
}
...
...
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