コード例 #1
0
extern "C" int __cdecl _memicmp_l (
        const void * first,
        const void * last,
        size_t count,
        _locale_t plocinfo
        )
{
    int f = 0, l = 0;
    const char *dst = (const char *)first, *src = (const char *)last;
    _LocaleUpdate _loc_update(plocinfo);

    /* validation section */
    _VALIDATE_RETURN(first != NULL || count == 0, EINVAL, _NLSCMPERROR);
    _VALIDATE_RETURN(last != NULL || count == 0, EINVAL, _NLSCMPERROR);

    if ( _loc_update.GetLocaleT()->locinfo->locale_name[LC_CTYPE] == NULL )
    {
        return __ascii_memicmp(first, last, count);
    }
    else
    {
        while (count-- && f==l)
        {
            f = _tolower_l( (unsigned char)(*(dst++)), _loc_update.GetLocaleT() );
            l = _tolower_l( (unsigned char)(*(src++)), _loc_update.GetLocaleT() );
        }
    }
    return ( f - l );
}
コード例 #2
0
ファイル: strnicmp.c プロジェクト: mysticTot/learn_c
extern "C" int __cdecl _strnicmp_l(
    const char* dst,
    const char* src,
    size_t count,
    _locale_t plocinfo
) {
    int f, l;

    if (count) {
        _LocaleUpdate _loc_update(plocinfo);
        /* validation section */
        _VALIDATE_RETURN(dst != NULL, EINVAL, _NLSCMPERROR);
        _VALIDATE_RETURN(src != NULL, EINVAL, _NLSCMPERROR);
        _VALIDATE_RETURN(count <= INT_MAX, EINVAL, _NLSCMPERROR);

        if (__LC_HANDLE(_loc_update.GetLocaleT()->locinfo)[LC_CTYPE] == _CLOCALEHANDLE) {
            return __ascii_strnicmp(dst, src, count);
        } else {
            do {
                f = _tolower_l((unsigned char)(*(dst++)), _loc_update.GetLocaleT());
                l = _tolower_l((unsigned char)(*(src++)), _loc_update.GetLocaleT());
            } while (--count && f && (f == l));
        }

        return (f - l);
    }

    return (0);
}