extern "C" int __cdecl _strcoll_l ( const char *_string1, const char *_string2, _locale_t plocinfo ) { int ret; _LocaleUpdate _loc_update(plocinfo); /* validation section */ _VALIDATE_RETURN(_string1 != NULL, EINVAL, _NLSCMPERROR); _VALIDATE_RETURN(_string2 != NULL, EINVAL, _NLSCMPERROR); if ( _loc_update.GetLocaleT()->locinfo->lc_handle[LC_COLLATE] == _CLOCALEHANDLE ) return strcmp(_string1, _string2); if ( 0 == (ret = __crtCompareStringA( _loc_update.GetLocaleT(), _loc_update.GetLocaleT()->locinfo->lc_handle[LC_COLLATE], SORT_STRINGSORT, _string1, -1, _string2, -1, _loc_update.GetLocaleT()->locinfo->lc_collate_cp )) ) { errno = EINVAL; return _NLSCMPERROR; } return (ret - 2); }
extern "C" int __cdecl _mbscoll_l( const unsigned char *s1, const unsigned char *s2, _locale_t plocinfo ) { int ret; _LocaleUpdate _loc_update(plocinfo); /* validation section */ _VALIDATE_RETURN(s1 != NULL, EINVAL, _NLSCMPERROR); _VALIDATE_RETURN(s2 != NULL, EINVAL, _NLSCMPERROR); if (_loc_update.GetLocaleT()->mbcinfo->ismbcodepage == 0) return _strcoll_l((const char *)s1, (const char *)s2, plocinfo); if (0 == (ret = __crtCompareStringA( _loc_update.GetLocaleT(), _loc_update.GetLocaleT()->mbcinfo->mblcid, SORT_STRINGSORT, (LPCSTR)s1, -1, (LPSTR)s2, -1, _loc_update.GetLocaleT()->mbcinfo->mbcodepage ))) { errno = EINVAL; return _NLSCMPERROR; } return ret - 2; }
int __cdecl _mbsnicoll( const unsigned char *s1, const unsigned char *s2, size_t n ) { #if !defined (_WIN32) return _mbsnicmp(s1, s2, n); #else /* !defined (_WIN32) */ int ret; size_t bcnt1, bcnt2; if (n == 0) return 0; bcnt1 = _mbsnbcnt(s1, n); bcnt2 = _mbsnbcnt(s2, n); if (0 == (ret = __crtCompareStringA(__mblcid, NORM_IGNORECASE, s1, bcnt1, s2, bcnt2, __mbcodepage))) return _NLSCMPERROR; return ret - 2; #endif /* !defined (_WIN32) */ }
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; }
_CRTIMP2 int __cdecl _Strcoll ( const char *_string1, const char *_end1, const char *_string2, const char *_end2, const _Collvec *ploc ) { #ifdef _WIN32 int ret; LCID handle; #ifdef _MT int local_lock_flag; #endif #endif size_t n1 = _end1 - _string1; size_t n2 = _end2 - _string2; _lock_locale( local_lock_flag ) #ifdef _WIN32 if (ploc == 0) handle = __lc_handle[LC_COLLATE]; else handle = ploc->_Hand; if (handle == _CLOCALEHANDLE) { int ans; _unlock_locale( local_lock_flag ) ans = memcmp(_string1, _string2, n1 < n2 ? n1 : n2); return ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1; } if ( 0 == (ret = __crtCompareStringA( handle, 0, _string1, n1, _string2, n2, __lc_collate_cp )) ) goto error_cleanup; _unlock_locale( local_lock_flag ) return (ret - 2); error_cleanup: _unlock_locale( local_lock_flag ) errno = EINVAL; return _NLSCMPERROR; #else /* defined (_WIN32) */ int ans = memcmp(_string1, _string2, n1 < n2 ? n1 : n2); return ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1; #endif /* defined (_WIN32) */ }
_CRTIMP2_PURE int __CLRCALL_PURE_OR_CDECL _Strcoll ( const char *_string1, const char *_end1, const char *_string2, const char *_end2, const _Collvec *ploc ) { int ret=0; UINT codepage; int n1 = (int)(_end1 - _string1); int n2 = (int)(_end2 - _string2); //const wchar_t *locale_name; LCID _Locale; if (ploc == 0) { //locale_name = ___lc_locale_name_func()[LC_COLLATE]; _Locale = ___lc_handle_func()[LC_COLLATE]; codepage = ___lc_collate_cp_func(); } else { //locale_name = ploc->_LocaleName; _Locale = __acrt_LocaleNameToLCID(ploc->_LocaleName, 0); codepage = ploc->_Page; } //if (locale_name == NULL) if(_Locale==0) { int ans; ans = memcmp(_string1, _string2, n1 < n2 ? n1 : n2); ret=(ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1); } else { if ( 0 == (ret = __crtCompareStringA(_Locale, SORT_STRINGSORT, _string1, n1, _string2, n2, codepage )) ) { errno=EINVAL; ret=_NLSCMPERROR; } else { ret-=2; } } return ret; }
_MRTIMP2_NCEEPURE int __CLRCALL_PURE_OR_CDECL _Strcoll ( const char *_string1, const char *_end1, const char *_string2, const char *_end2, const _Collvec *ploc ) { int ret=0; LCID handle; UINT codepage; int n1 = (int)(_end1 - _string1); int n2 = (int)(_end2 - _string2); if (ploc == 0) { handle = ___lc_handle_func()[LC_COLLATE]; codepage = ___lc_collate_cp_func(); } else { handle = ploc->_Hand; codepage = ploc->_Page; } if (handle == _CLOCALEHANDLE) { int ans; ans = memcmp(_string1, _string2, n1 < n2 ? n1 : n2); ret=(ans != 0 || n1 == n2 ? ans : n1 < n2 ? -1 : +1); } else { if ( 0 == (ret = __crtCompareStringA( NULL, handle, SORT_STRINGSORT, _string1, n1, _string2, n2, codepage )) ) { errno=EINVAL; ret=_NLSCMPERROR; } else { ret-=2; } } return ret; }
int __cdecl _mbsicoll( const unsigned char *s1, const unsigned char *s2 ) { #if !defined (_WIN32) return _mbsicmp(s1, s2); #else /* !defined (_WIN32) */ int ret; if (0 == (ret = __crtCompareStringA(__mblcid, NORM_IGNORECASE, s1, -1, s2, -1, __mbcodepage))) return _NLSCMPERROR; return ret - 2; #endif /* !defined (_WIN32) */ }
extern "C" int __cdecl _mbsncoll_l( const unsigned char *s1, const unsigned char *s2, size_t n, _locale_t plocinfo ) { int ret; size_t bcnt1, bcnt2; _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 _strncoll_l((const char *)s1, (const char *)s2, n, plocinfo); bcnt1 = _mbsnbcnt_l(s1, n, _loc_update.GetLocaleT()); bcnt2 = _mbsnbcnt_l(s2, n, _loc_update.GetLocaleT()); if ( 0 == (ret = __crtCompareStringA( _loc_update.GetLocaleT(), _loc_update.GetLocaleT()->mbcinfo->mblocalename, SORT_STRINGSORT, (const char *)s1, (int)bcnt1, (char *)s2, (int)bcnt2, _loc_update.GetLocaleT()->mbcinfo->mbcodepage )) ) { errno = EINVAL; return _NLSCMPERROR; } return ret - 2; }
int __cdecl _mbsnbcoll( const unsigned char *s1, const unsigned char *s2, size_t n ) { #if !defined (_WIN32) return _mbsnbcmp(s1, s2, n); #else /* !defined (_WIN32) */ int ret; if (n == 0) return 0; if (0 == (ret = __crtCompareStringA(__mblcid, 0, s1, n, s2, n, __mbcodepage))) return _NLSCMPERROR; return ret - 2; #endif /* !defined (_WIN32) */ }