Hi Raphael, looking better. One more point below:
--- Raphael fenix@club-internet.fr wrote:
Index: dlls/msvcrt/mbcs.c
=================================================================== RCS file: /home/wine/wine/dlls/msvcrt/mbcs.c,v retrieving revision 1.30 diff -u -r1.30 mbcs.c --- dlls/msvcrt/mbcs.c 25 Feb 2005 14:07:57 -0000 1.30 +++ dlls/msvcrt/mbcs.c 5 Apr 2005 20:29:51 -0000 @@ -1143,4 +1144,37 @@ str += (MSVCRT_isleadbyte(*str)?2:1); } return NULL; +}
+/*********************************************************************
_mbsbtype (MSVCRT.@)
- */
+int _mbsbtype(const unsigned char* mbstr, size_t count) {
- const unsigned char* str;
- const unsigned char* start = mbstr;
- str = mbstr + count;
- /** from _ismbslead */
- if (MSVCRT___mb_cur_max > 1)
- {
- while (start < str) {
if (!*start) {
- return _MBC_ILLEGAL;
}
start += MSVCRT_isleadbyte(*str) ? 2 : 1;
- }
- }
- if (!*str) { /** TODO: check *str validity */
- return _MBC_ILLEGAL;
- }
- if (start == str && MSVCRT_isleadbyte(*str)) {
- return _MBC_LEAD;
- }
- if (start == str && MSVCRT_isleadbyte(str[-1])) {
- return _MBC_TRAIL;
- }
For this last comparison, it's possible that you're indexing before the array if count is 0. Also, it seems more natural to check if (start == str && !MSVCRT_isleadbyte(*str)) return _MBC_SINGLE, but that would imply that _MBC_TRAIL is never returned. A test case would satisfy my curiosity, at least.
--Juan
__________________________________ Yahoo! Messenger Show us what our next emoticon should look like. Join the fun. http://www.advision.webevents.yahoo.com/emoticontest