summaryrefslogtreecommitdiffstats
path: root/private/crt32/string/wcsnicmp.c
diff options
context:
space:
mode:
Diffstat (limited to 'private/crt32/string/wcsnicmp.c')
-rw-r--r--private/crt32/string/wcsnicmp.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/private/crt32/string/wcsnicmp.c b/private/crt32/string/wcsnicmp.c
new file mode 100644
index 000000000..98a68620d
--- /dev/null
+++ b/private/crt32/string/wcsnicmp.c
@@ -0,0 +1,91 @@
+/***
+*wcsnicmp.c - compare n chars of wide-character strings, ignoring case
+*
+* Copyright (c) 1985-1992, Microsoft Corporation. All rights reserved.
+*
+*Purpose:
+* defines _wcsnicmp() - Compares at most n characters of two wchar_t
+* strings, without regard to case.
+*
+*Revision History:
+* 09-09-91 ETC Created from strnicmp.c and wcsicmp.c.
+* 12-09-91 ETC Use C for neutral locale.
+* 04-07-92 KRS Updated and ripped out _INTL switches.
+* 06-02-93 SRW ignore _INTL if _NTSUBSET_ defined.
+*
+*******************************************************************************/
+
+#include <cruntime.h>
+#include <string.h>
+#include <ctype.h>
+#include <locale.h>
+#ifdef _INTL
+#include <setlocal.h>
+#include <os2dll.h>
+#endif
+
+/***
+*int _wcsnicmp(first, last, count) - compares count wchar_t of strings,
+* ignore case
+*
+*Purpose:
+* Compare the two strings for lexical order. Stops the comparison
+* when the following occurs: (1) strings differ, (2) the end of the
+* strings is reached, or (3) count characters have been compared.
+* For the purposes of the comparison, upper case characters are
+* converted to lower case (wide-characters).
+*
+* *** NOTE: the comparison should be done in a neutral locale,
+* provided by the NLSAPI. Currently, the comparison is done
+* in the C locale. ***
+*
+*Entry:
+* wchar_t *first, *last - strings to compare
+* size_t count - maximum number of characters to compare
+*
+*Exit:
+* -1 if first < last
+* 0 if first == last
+* 1 if first > last
+* This range of return values may differ from other *cmp/*coll functions.
+*
+*Exceptions:
+*
+*******************************************************************************/
+
+int _CALLTYPE1 _wcsnicmp (
+ const wchar_t * first,
+ const wchar_t * last,
+ size_t count
+ )
+{
+ wchar_t f,l;
+ int result = 0;
+
+ if (count)
+ {
+#if defined(_INTL) && !defined(_NTSUBSET_)
+
+ _mlock (_LC_CTYPE_LOCK);
+#endif
+
+ do
+ {
+ f = iswupper(*first)
+ ? *first - (wchar_t)L'A' + (wchar_t)L'a'
+ : *first;
+ l = iswupper(*last)
+ ? *last - (wchar_t)L'A' + (wchar_t)L'a'
+ : *last;
+ first++;
+ last++;
+ } while (--count && f && l && f == l);
+
+#if defined(_INTL) && !defined(_NTSUBSET_)
+ _munlock (_LC_CTYPE_LOCK);
+#endif
+
+ result = (int)(f - l);
+ }
+ return result ;
+}