ReactOS 0.4.16-dev-853-g88d9285
strcoll.cpp
Go to the documentation of this file.
1/***
2*strcoll.c - Collate locale strings
3*
4* Copyright (c) Microsoft Corporation. All rights reserved.
5*
6*Purpose:
7* Compare two strings using the locale LC_COLLATE information.
8*
9*******************************************************************************/
10#include <corecrt_internal.h>
11#include <ctype.h>
12#include <locale.h>
13#include <string.h>
14
15/***
16*int strcoll() - Collate locale strings
17*
18*Purpose:
19* Compare two strings using the locale LC_COLLATE information.
20* [ANSI].
21*
22* Non-C locale support available under _INTL switch.
23* In the C locale, strcoll() simply resolves to strcmp().
24*Entry:
25* const char *s1 = pointer to the first string
26* const char *s2 = pointer to the second string
27*
28*Exit:
29* Less than 0 = first string less than second string
30* 0 = strings are equal
31* Greater than 0 = first string greater than second string
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 _strcoll_l (
40 const char *_string1,
41 const char *_string2,
43 )
44{
45 int ret;
46 _LocaleUpdate _loc_update(plocinfo);
47
48 /* validation section */
49 _VALIDATE_RETURN(_string1 != nullptr, EINVAL, _NLSCMPERROR);
50 _VALIDATE_RETURN(_string2 != nullptr, EINVAL, _NLSCMPERROR);
51
52 if ( _loc_update.GetLocaleT()->locinfo->locale_name[LC_COLLATE] == nullptr )
53 return strcmp(_string1, _string2);
54
55 if ( 0 == (ret = __acrt_CompareStringA(
56 _loc_update.GetLocaleT(), _loc_update.GetLocaleT()->locinfo->locale_name[LC_COLLATE],
58 _string1,
59 -1,
60 _string2,
61 -1,
62 _loc_update.GetLocaleT()->locinfo->lc_collate_cp )) )
63 {
64 errno = EINVAL;
65 return _NLSCMPERROR;
66 }
67
68 return (ret - 2);
69
70}
71
72extern "C" int __cdecl strcoll (
73 const char *_string1,
74 const char *_string2
75 )
76{
77 return _strcoll_l(_string1, _string2, nullptr);
78}
#define EINVAL
Definition: acclib.h:90
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define __cdecl
Definition: accygwin.h:79
int __cdecl __acrt_CompareStringA(_In_opt_ _locale_t _Plocinfo, _In_ LPCWSTR _LocaleName, _In_ DWORD _DwCmpFlags, _In_CRT_NLS_string_(_CchCount1) PCCH _LpString1, _In_ int _CchCount1, _In_CRT_NLS_string_(_CchCount2) PCCH _LpString2, _In_ int _CchCount2, _In_ int _CodePage)
#define _VALIDATE_RETURN(expr, errorcode, retexpr)
#define LC_COLLATE
Definition: locale.h:18
_locale_t plocinfo
Definition: ismbbyte.cpp:75
#define strcoll
Definition: util.h:34
#define errno
Definition: errno.h:18
#define _NLSCMPERROR
Definition: string.h:19
int __cdecl _strcoll_l(const char *_string1, const char *_string2, _locale_t plocinfo)
Definition: strcoll.cpp:39
int ret
#define SORT_STRINGSORT
Definition: winnls.h:185