[MSVCRT] implement _mbsbtype
Juan Lang
juan_lang at yahoo.com
Tue Apr 5 16:51:10 CDT 2005
Hi Raphael, looking better. One more point below:
--- Raphael <fenix at 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
More information about the wine-devel
mailing list