[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    Problem about declarations of strcoll functions
From:       Jactry Zeng <jactry92 () gmail ! com>
Date:       2013-03-31 12:40:11
Message-ID: CAManwEyZ_2L+6bmcRxUTWbOyp524p_9gKwVWJd8bxYzUUJ+jDA () mail ! gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/alternative)]


Hi folks,

I tried to implement a lot of strcoll function these days, and I meet some
trouble when I added the declaration into include/msvcrt/*.h.

With "grep coll *.spec" in dlls/msvcrt/ we can find there was a lot of
strcoll function. Some of them was implemented
and some of them not:
@ cdecl ___lc_collate_cp_func()
@ stub __lc_collate
@ extern __lc_collate_cp MSVCRT___lc_collate_cp
@ cdecl _mbscoll(str str)
@ cdecl _mbscoll_l(str str ptr)
@ cdecl _mbsicoll(str str)
@ cdecl _mbsicoll_l(str str ptr)
@ cdecl _mbsnbcoll(str str long)
@ cdecl _mbsnbcoll_l(str str long ptr)
@ cdecl _mbsnbicoll(str str long)
@ cdecl _mbsnbicoll_l(str str long ptr)
@ stub _mbsncoll(str str long)
# stub _mbsncoll_l(str str long ptr)
@ stub _mbsnicoll(str str long)
# stub _mbsnicoll_l(str str long ptr)
@ cdecl _strcoll_l(str str ptr) MSVCRT_strcoll_l
@ cdecl _stricoll(str str) MSVCRT__stricoll
@ cdecl _stricoll_l(str str ptr) MSVCRT__stricoll_l
@ cdecl _strncoll(str str long) MSVCRT_strncoll_l
@ cdecl _strncoll_l(str str long ptr) MSVCRT_strncoll
@ cdecl _strnicoll(str str long) MSVCRT__strnicoll
@ cdecl _strnicoll_l(str str long ptr) MSVCRT__strnicoll_l
# stub _wcscoll_l(wstr wstr ptr)
@ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll
# stub _wcsicoll_l(wstr wstr ptr)
@ cdecl _wcsncoll(wstr wstr long) MSVCRT__wcsncoll
@ cdecl _wcsncoll_l(wstr wstr long ptr) MSVCRT__wcsncoll_l
@ cdecl _wcsnicoll(wstr wstr long) MSVCRT__wcsnicoll
# stub _wcsnicoll_l(wstr wstr long ptr)
@ cdecl strcoll(str str) MSVCRT_strcoll
@ cdecl wcscoll(wstr wstr) MSVCRT_wcscoll

With "grep coll *.h" in include/msvcrt/ we can find some declarations of
some strcoll function:
crtdefs.h:    unsigned int lc_collate_cp;
mbstring.h:int            __cdecl _mbscoll(const unsigned char*,const
unsigned char*);
mbstring.h:int            __cdecl _mbsicoll(const unsigned char*,const
unsigned char*);
mbstring.h:int            __cdecl _mbsnbcoll(const unsigned char*,const
unsigned char*,size_t);
mbstring.h:int            __cdecl _mbsnbicoll(const unsigned char*,const
unsigned char*,size_t);
mbstring.h:int            __cdecl _mbsncoll(const unsigned char*,const
unsigned char*,size_t);
mbstring.h:int            __cdecl _mbsnicoll(const unsigned char*,const
unsigned char*,size_t);
string.h:int   __cdecl _stricoll(const char*,const char*);
string.h:int     __cdecl strcoll(const char*,const char*);
string.h:int      __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
string.h:int      __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
string.h:int      __cdecl wcscoll(const wchar_t*,const wchar_t*);
string.h:static inline int stricoll(const char* s1, const char* s2) {
return _stricoll(s1, s2); }
string.h:static inline int wcsicoll(const wchar_t* str1, const wchar_t*
str2) { return _wcsicoll(str1, str2); }
wchar.h:int      __cdecl _wcsicoll(const wchar_t*,const wchar_t*);
wchar.h:int      __cdecl _wcsnicoll(const wchar_t*,const wchar_t*,size_t);
wchar.h:int      __cdecl wcscoll(const wchar_t*,const wchar_t*);

As we can see, _strcoll_l and _mbsnbcoll_l were implemented but they were
not declared.
Should we declare all of them? And whether the sequence was important?

Thank you.
-- 
Regards,
Jactry Zeng

[Attachment #5 (text/html)]

<div dir="ltr">Hi folks,<div><br></div><div>I tried to implement a lot of strcoll \
function these days, and I meet some trouble when I added the declaration into \
include/msvcrt/*.h.</div><div><br></div><div>With &quot;grep coll *.spec&quot; in \
dlls/msvcrt/ we can find there was a lot of strcoll function. Some of them was \
implemented </div> <div>and some of them not:</div>
<div><div>@ cdecl ___lc_collate_cp_func()</div><div>@ stub __lc_collate</div><div>@ \
extern __lc_collate_cp MSVCRT___lc_collate_cp</div><div>@ cdecl _mbscoll(str \
str)</div><div>@ cdecl _mbscoll_l(str str ptr)</div><div>@ cdecl _mbsicoll(str \
str)</div>

<div>@ cdecl _mbsicoll_l(str str ptr)</div><div>@ cdecl _mbsnbcoll(str str \
long)</div><div>@ cdecl _mbsnbcoll_l(str str long ptr)</div><div>@ cdecl \
_mbsnbicoll(str str long)</div><div>@ cdecl _mbsnbicoll_l(str str long ptr)</div>

<div>@ stub _mbsncoll(str str long)</div><div># stub _mbsncoll_l(str str long \
ptr)</div><div>@ stub _mbsnicoll(str str long)</div><div># stub _mbsnicoll_l(str str \
long ptr)</div><div>@ cdecl _strcoll_l(str str ptr) MSVCRT_strcoll_l</div>

<div>@ cdecl _stricoll(str str) MSVCRT__stricoll</div><div>@ cdecl _stricoll_l(str \
str ptr) MSVCRT__stricoll_l</div><div>@ cdecl _strncoll(str str long) \
MSVCRT_strncoll_l</div><div>@ cdecl _strncoll_l(str str long ptr) \
MSVCRT_strncoll</div>

<div>@ cdecl _strnicoll(str str long) MSVCRT__strnicoll</div><div>@ cdecl \
_strnicoll_l(str str long ptr) MSVCRT__strnicoll_l</div><div># stub _wcscoll_l(wstr \
wstr ptr)</div><div>@ cdecl _wcsicoll(wstr wstr) MSVCRT__wcsicoll</div>

<div># stub _wcsicoll_l(wstr wstr ptr)</div><div>@ cdecl _wcsncoll(wstr wstr long) \
MSVCRT__wcsncoll</div><div>@ cdecl _wcsncoll_l(wstr wstr long ptr) \
MSVCRT__wcsncoll_l</div><div>@ cdecl _wcsnicoll(wstr wstr long) \
MSVCRT__wcsnicoll</div>

<div># stub _wcsnicoll_l(wstr wstr long ptr)</div><div>@ cdecl strcoll(str str) \
MSVCRT_strcoll</div><div>@ cdecl wcscoll(wstr wstr) \
MSVCRT_wcscoll</div></div><div><div><br></div><div>With &quot;grep coll *.h&quot; in \
include/msvcrt/ we can find some declarations of some strcoll function:</div>

<div><div>crtdefs.h:    unsigned int lc_collate_cp;</div><div>mbstring.h:int          \
__cdecl _mbscoll(const unsigned char*,const unsigned char*);</div><div>mbstring.h:int \
__cdecl _mbsicoll(const unsigned char*,const unsigned char*);</div>

<div>mbstring.h:int            __cdecl _mbsnbcoll(const unsigned char*,const unsigned \
char*,size_t);</div><div>mbstring.h:int            __cdecl _mbsnbicoll(const unsigned \
char*,const unsigned char*,size_t);</div><div>mbstring.h:int            __cdecl \
_mbsncoll(const unsigned char*,const unsigned char*,size_t);</div>

<div>mbstring.h:int            __cdecl _mbsnicoll(const unsigned char*,const unsigned \
char*,size_t);</div><div>string.h:int   __cdecl _stricoll(const char*,const \
char*);</div><div>string.h:int     __cdecl strcoll(const char*,const char*);</div>

<div>string.h:int      __cdecl _wcsicoll(const wchar_t*,const \
wchar_t*);</div><div>string.h:int      __cdecl _wcsnicoll(const wchar_t*,const \
wchar_t*,size_t);</div><div>string.h:int      __cdecl wcscoll(const wchar_t*,const \
wchar_t*);</div>

<div>string.h:static inline int stricoll(const char* s1, const char* s2) { return \
_stricoll(s1, s2); }</div><div>string.h:static inline int wcsicoll(const wchar_t* \
str1, const wchar_t* str2) { return _wcsicoll(str1, str2); }</div>

<div>wchar.h:int      __cdecl _wcsicoll(const wchar_t*,const \
wchar_t*);</div><div>wchar.h:int      __cdecl _wcsnicoll(const wchar_t*,const \
wchar_t*,size_t);</div><div>wchar.h:int      __cdecl wcscoll(const wchar_t*,const \
wchar_t*);</div>

<div><br></div></div><div>As we can see, _strcoll_l and _mbsnbcoll_l were implemented \
but they were not declared. </div><div style>Should we declare all of them? And \
whether the sequence was important?</div><div style><br> </div><div style>Thank \
you.</div>-- <br><div dir="ltr"><div>Regards,<br></div><div>Jactry Zeng</div> \
<div><br></div></div> </div></div>





[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic