Ejemplo n.º 1
0
extern "C" int __cdecl _mbsnbicoll_l(
    const unsigned char* s1,
    const unsigned char* s2,
    size_t n,
    _locale_t plocinfo
) {
    int ret;
    _LocaleUpdate _loc_update(plocinfo);

    if (n == 0) {
        return 0;
    }

    /* validation section */
    _VALIDATE_RETURN(s1 != NULL, EINVAL, _NLSCMPERROR);
    _VALIDATE_RETURN(s2 != NULL, EINVAL, _NLSCMPERROR);
    _VALIDATE_RETURN(n <= INT_MAX, EINVAL, _NLSCMPERROR);

    if (_loc_update.GetLocaleT()->mbcinfo->ismbcodepage == 0) {
        return _strnicoll_l((const char*)s1, (const char*)s2, n, plocinfo);
    }

    if (0 == (ret = __crtCompareStringA(_loc_update.GetLocaleT(),  _loc_update.GetLocaleT()->mbcinfo->mblcid,
                                        SORT_STRINGSORT | NORM_IGNORECASE,
                                        (const char*)s1,
                                        (int)n,
                                        (char*)s2,
                                        (int)n,
                                        _loc_update.GetLocaleT()->mbcinfo->mbcodepage))) {
        return _NLSCMPERROR;
    }

    return ret - 2;
}
Ejemplo n.º 2
0
extern "C" int __cdecl _strnicoll (
        const char *_string1,
        const char *_string2,
        size_t count
        )
{
    if (!__acrt_locale_changed())
    {
        return _strnicmp(_string1, _string2, count);
    }
    else
    {
        return _strnicoll_l(_string1, _string2, count, nullptr);
    }
}