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
50518766
Commit
50518766
authored
Dec 20, 2011
by
Piotr Caban
Committed by
Alexandre Julliard
Dec 20, 2011
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msvcp90: Added collate<char>::compare implementation.
parent
ddebdbf1
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
58 additions
and
7 deletions
+58
-7
locale.c
dlls/msvcp90/locale.c
+16
-4
msvcp90.h
dlls/msvcp90/msvcp90.h
+1
-0
msvcp90.spec
dlls/msvcp90/msvcp90.spec
+1
-1
msvcp90_main.c
dlls/msvcp90/msvcp90_main.c
+1
-0
misc.c
dlls/msvcp90/tests/misc.c
+39
-2
No files found.
dlls/msvcp90/locale.c
View file @
50518766
...
...
@@ -25,6 +25,7 @@
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
msvcp90
);
...
...
@@ -742,14 +743,25 @@ MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const loca
return
LC_COLLATE
;
}
/* _Strcoll */
int
__cdecl
_Strcoll
(
const
char
*
first1
,
const
char
*
last1
,
const
char
*
first2
,
const
char
*
last2
,
const
_Collvec
*
coll
)
{
TRACE
(
"(%s %s)
\n
"
,
debugstr_an
(
first1
,
last1
-
first1
),
debugstr_an
(
first2
,
last2
-
first2
));
return
CompareStringA
(
coll
->
handle
,
0
,
first1
,
last1
-
first1
,
first2
,
last2
-
first2
)
-
2
;
}
/* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */
/* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */
DEFINE_THISCALL_WRAPPER
(
collate_char_do_compare
,
20
)
#define call_collate_char_do_compare(this, first1, last1, first2, last2) CALL_VTBL_FUNC(this, 4, int, \
(const collate*, const char*, const char*, const char*, const char*), \
(this, first1, last1, first2, last2))
int
__thiscall
collate_char_do_compare
(
const
collate
*
this
,
const
char
*
first1
,
const
char
*
last1
,
const
char
*
first2
,
const
char
*
last2
)
{
FIXME
(
"(%p %p %p %p %p) stub
\n
"
,
this
,
first1
,
last1
,
first2
,
last2
);
return
0
;
TRACE
(
"(%p %p %p %p %p)
\n
"
,
this
,
first1
,
last1
,
first2
,
last2
);
return
_Strcoll
(
first1
,
last1
,
first2
,
last2
,
&
this
->
coll
)
;
}
/* ?compare@?$collate@D@std@@QBEHPBD000@Z */
...
...
@@ -758,8 +770,8 @@ DEFINE_THISCALL_WRAPPER(collate_char_compare, 20)
int
__thiscall
collate_char_compare
(
const
collate
*
this
,
const
char
*
first1
,
const
char
*
last1
,
const
char
*
first2
,
const
char
*
last2
)
{
FIXME
(
"(%p %p %p %p %p) stub
\n
"
,
this
,
first1
,
last1
,
first2
,
last2
);
return
0
;
TRACE
(
"(%p %p %p %p %p)
\n
"
,
this
,
first1
,
last1
,
first2
,
last2
);
return
call_collate_char_do_compare
(
this
,
first1
,
last1
,
first2
,
last2
)
;
}
/* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */
...
...
dlls/msvcp90/msvcp90.h
View file @
50518766
...
...
@@ -135,6 +135,7 @@ const rtti_object_locator name ## _rtti = { \
#define CALL_VTBL_FUNC(this, off, ret, type, args) ((ret (WINAPI*)type)&vtbl_wrapper_##off)args
extern
void
*
vtbl_wrapper_0
;
extern
void
*
vtbl_wrapper_4
;
#else
...
...
dlls/msvcp90/msvcp90.spec
View file @
50518766
...
...
@@ -5796,7 +5796,7 @@
@ stub _Stoull
@ stub _Stoullx
@ stub _Stoulx
@
stub _Strcoll
@
cdecl _Strcoll(ptr ptr ptr ptr ptr)
@ stub _Strxfrm
@ stub _Tolower
@ stub _Toupper
...
...
dlls/msvcp90/msvcp90_main.c
View file @
50518766
...
...
@@ -39,6 +39,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcp90);
"jmp *" #off "(%eax)\n\t")
DEFINE_VTBL_WRAPPER
(
0
);
DEFINE_VTBL_WRAPPER
(
4
);
#endif
...
...
dlls/msvcp90/tests/misc.c
View file @
50518766
...
...
@@ -60,6 +60,11 @@ static char* (__thiscall *p_char_allocate)(void*, size_t);
static
void
(
__thiscall
*
p_char_construct
)(
void
*
,
char
*
,
const
char
*
);
static
size_t
(
__thiscall
*
p_char_max_size
)(
void
*
);
void
*
(
__thiscall
*
p_collate_char_ctor_refs
)(
void
*
,
size_t
);
int
(
__thiscall
*
p_collate_char_compare
)(
const
void
*
,
const
char
*
,
const
char
*
,
const
char
*
,
const
char
*
);
void
(
__thiscall
*
p_collate_char_dtor
)(
void
*
);
static
int
invalid_parameter
=
0
;
static
void
__cdecl
test_invalid_parameter_handler
(
const
wchar_t
*
expression
,
const
wchar_t
*
function
,
const
wchar_t
*
file
,
...
...
@@ -90,6 +95,8 @@ struct thiscall_thunk
static
void
*
(
WINAPI
*
call_thiscall_func1
)(
void
*
func
,
void
*
this
);
static
void
*
(
WINAPI
*
call_thiscall_func2
)(
void
*
func
,
void
*
this
,
const
void
*
a
);
static
void
*
(
WINAPI
*
call_thiscall_func3
)(
void
*
func
,
void
*
this
,
const
void
*
a
,
const
void
*
b
);
static
void
*
(
WINAPI
*
call_thiscall_func5
)(
void
*
func
,
void
*
this
,
const
void
*
a
,
const
void
*
b
,
const
void
*
c
,
const
void
*
d
);
static
void
init_thiscall_thunk
(
void
)
{
...
...
@@ -103,11 +110,14 @@ static void init_thiscall_thunk(void)
call_thiscall_func1
=
(
void
*
)
thunk
;
call_thiscall_func2
=
(
void
*
)
thunk
;
call_thiscall_func3
=
(
void
*
)
thunk
;
call_thiscall_func5
=
(
void
*
)
thunk
;
}
#define call_func1(func,_this) call_thiscall_func1(func,_this)
#define call_func2(func,_this,a) call_thiscall_func2(func,_this,(const void*)a)
#define call_func3(func,_this,a,b) call_thiscall_func3(func,_this,(const void*)a,(const void*)b)
#define call_func2(func,_this,a) call_thiscall_func2(func,_this,(const void*)(a))
#define call_func3(func,_this,a,b) call_thiscall_func3(func,_this,(const void*)(a),(const void*)(b))
#define call_func5(func,_this,a,b,c,d) call_thiscall_func5(func,_this,(const void*)(a),(const void*)(b), \
(const void*)(c), (const void *)(d))
#else
...
...
@@ -115,6 +125,7 @@ static void init_thiscall_thunk(void)
#define call_func1(func,_this) func(_this)
#define call_func2(func,_this,a) func(_this,a)
#define call_func3(func,_this,a,b) func(_this,a,b)
#define call_func5(func,_this,a,b,c,d) func(_this,a,b,c,d)
#endif
/* __i386__ */
...
...
@@ -158,6 +169,10 @@ static BOOL init(void)
SET
(
p_char_allocate
,
"?allocate@?$allocator@D@std@@QEAAPEAD_K@Z"
);
SET
(
p_char_construct
,
"?construct@?$allocator@D@std@@QEAAXPEADAEBD@Z"
);
SET
(
p_char_max_size
,
"?max_size@?$allocator@D@std@@QEBA_KXZ"
);
SET
(
p_collate_char_ctor_refs
,
"??0?$collate@D@std@@QEAA@_K@Z"
);
SET
(
p_collate_char_compare
,
"?compare@?$collate@D@std@@QEBAHPEBD000@Z"
);
SET
(
p_collate_char_dtor
,
"??1?$collate@D@std@@MEAA@XZ"
);
}
else
{
SET
(
p_char_assign
,
"?assign@?$char_traits@D@std@@SAXAADABD@Z"
);
SET
(
p_wchar_assign
,
"?assign@?$char_traits@_W@std@@SAXAA_WAB_W@Z"
);
...
...
@@ -175,6 +190,10 @@ static BOOL init(void)
SET
(
p_char_allocate
,
"?allocate@?$allocator@D@std@@QAEPADI@Z"
);
SET
(
p_char_construct
,
"?construct@?$allocator@D@std@@QAEXPADABD@Z"
);
SET
(
p_char_max_size
,
"?max_size@?$allocator@D@std@@QBEIXZ"
);
SET
(
p_collate_char_ctor_refs
,
"??0?$collate@D@std@@QAE@I@Z"
);
SET
(
p_collate_char_compare
,
"?compare@?$collate@D@std@@QBEHPBD000@Z"
);
SET
(
p_collate_char_dtor
,
"??1?$collate@D@std@@MAE@XZ"
);
}
init_thiscall_thunk
();
...
...
@@ -356,6 +375,23 @@ static void test_allocator_char(void)
ok
(
size
==
(
unsigned
int
)
0xffffffff
,
"size = %x
\n
"
,
size
);
}
static
void
test_virtual_call
(
void
)
{
BYTE
collate_char
[
16
];
char
str1
[]
=
"test"
;
char
str2
[]
=
"TEST"
;
int
ret
;
call_func2
(
p_collate_char_ctor_refs
,
collate_char
,
0
);
ret
=
(
int
)
call_func5
(
p_collate_char_compare
,
collate_char
,
str1
,
str1
+
4
,
str1
,
str1
+
4
);
ok
(
ret
==
0
,
"collate<char>::compare returned %d
\n
"
,
ret
);
ret
=
(
int
)
call_func5
(
p_collate_char_compare
,
collate_char
,
str2
,
str2
+
4
,
str1
,
str1
+
4
);
ok
(
ret
==
1
,
"collate<char>::compare returned %d
\n
"
,
ret
);
ret
=
(
int
)
call_func5
(
p_collate_char_compare
,
collate_char
,
str1
,
str1
+
3
,
str1
,
str1
+
4
);
ok
(
ret
==
-
1
,
"collate<char>::compare returned %d
\n
"
,
ret
);
call_func1
(
p_collate_char_dtor
,
collate_char
);
}
START_TEST
(
misc
)
{
if
(
!
init
())
...
...
@@ -366,6 +402,7 @@ START_TEST(misc)
test_Copy_s
();
test_wctype
();
test__Getctype
();
test_virtual_call
();
test_allocator_char
();
...
...
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