Reactos
at master 79 lines 2.2 kB view raw
1/*** 2*mbsicoll.c - Collate MBCS strings, ignoring case 3* 4* Copyright (c) Microsoft Corporation. All rights reserved. 5* 6*Purpose: 7* Collate MBCS strings, ignoring case 8* 9*******************************************************************************/ 10#ifndef _MBCS 11 #error This file should only be compiled with _MBCS defined 12#endif 13 14#include <corecrt_internal.h> 15#include <corecrt_internal_mbstring.h> 16#include <locale.h> 17 18/*** 19* _mbsicoll - Collate MBCS strings, ignoring case 20* 21*Purpose: 22* Collates two strings for lexical order (ignoring case). 23* Strings are collated on a character basis, not a byte basis. 24* 25*Entry: 26* char *s1, *s2 = strings to collate 27* 28*Exit: 29* Returns <0 if s1 < s2 30* Returns 0 if s1 == s2 31* Returns >0 if s1 > s2 32* Returns _NLSCMPERROR is something went wrong 33* 34*Exceptions: 35* Input parameters are validated. Refer to the validation section of the function. 36* 37*******************************************************************************/ 38 39extern "C" int __cdecl _mbsicoll_l( 40 const unsigned char *s1, 41 const unsigned char *s2, 42 _locale_t plocinfo 43 ) 44{ 45 int ret; 46 _LocaleUpdate _loc_update(plocinfo); 47 48 /* validation section */ 49 _VALIDATE_RETURN(s1 != nullptr, EINVAL, _NLSCMPERROR); 50 _VALIDATE_RETURN(s2 != nullptr, EINVAL, _NLSCMPERROR); 51 52 if (_loc_update.GetLocaleT()->mbcinfo->ismbcodepage == 0) 53 return _stricoll_l((const char *)s1, (const char *)s2, plocinfo); 54 55 if ( 0 == (ret = __acrt_CompareStringA( 56 _loc_update.GetLocaleT(), 57 _loc_update.GetLocaleT()->mbcinfo->mblocalename, 58 SORT_STRINGSORT | NORM_IGNORECASE, 59 (LPCSTR)s1, 60 -1, 61 (LPSTR)s2, 62 -1, 63 _loc_update.GetLocaleT()->mbcinfo->mbcodepage )) ) 64 { 65 errno = EINVAL; 66 return _NLSCMPERROR; 67 } 68 69 return ret - 2; 70 71} 72 73extern "C" int (__cdecl _mbsicoll)( 74 const unsigned char *s1, 75 const unsigned char *s2 76 ) 77{ 78 return _mbsicoll_l(s1, s2, nullptr); 79}