diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /private/crt32/string/wcsicmp.c | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'private/crt32/string/wcsicmp.c')
-rw-r--r-- | private/crt32/string/wcsicmp.c | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/private/crt32/string/wcsicmp.c b/private/crt32/string/wcsicmp.c new file mode 100644 index 000000000..7b85d6595 --- /dev/null +++ b/private/crt32/string/wcsicmp.c @@ -0,0 +1,90 @@ +/*** +*wcsicmp.c - contains case-insensitive wide string comp routine _wcsicmp +* +* Copyright (c) 1985-1992, Microsoft Corporation. All rights reserved. +* +*Purpose: +* contains _wcsicmp() +* +*Revision History: +* 09-09-91 ETC Created from stricmp.c. +* 12-09-91 ETC Use C for neutral locale. +* 04-07-92 KRS Updated and ripped out _INTL switches. +* 08-19-92 KRS Actived use of CompareStringW. +* 08-22-92 SRW Allow INTL definition to be conditional for building ntcrt.lib +* 09-02-92 SRW Get _INTL definition via ..\crt32.def +* 12-15-92 KRS Added robustness to non-_INTL code. Optimize. +* 06-02-93 SRW ignore _INTL if _NTSUBSET_ defined. +* +*******************************************************************************/ + +#include <cruntime.h> +#include <string.h> +#include <locale.h> +#include <ctype.h> +#include <setlocal.h> +#include <os2dll.h> + +/*** +*int _wcsicmp(dst, src) - compare wide-character strings, ignore case +* +*Purpose: +* _wcsicmp perform a case-insensitive wchar_t string comparision. +* _wcsicmp is independent of locale. +* +* *** NOTE: the comparison should be done in a neutral locale, +* provided by the NLSAPI. **** +* +*Entry: +* wchar_t *dst, *src - strings to compare +* +*Return: +* <0 if dst < src +* 0 if dst = src +* >0 if dst > src +* This range of return values may differ from other *cmp/*coll functions. +* +*Exceptions: +* +*******************************************************************************/ + +int _CALLTYPE1 _wcsicmp ( + const wchar_t * dst, + const wchar_t * src + ) +{ + wchar_t f,l; + int ret; + +#if defined(_INTL) && !defined(_NTSUBSET_) +/* _mlock (_LC_CTYPE_LOCK); */ + + if ((_lc_handle[LC_CTYPE] == _CLOCALEHANDLE) && + (_lc_codepage == _CLOCALECP)) + { +#endif /* _INTL */ + do { + f = ((*dst <= L'Z') && (*dst >= L'A')) + ? *dst + ((wchar_t)(L'a' - L'A')) + : *dst; + l = ((*src <= L'Z') && (*src >= L'A')) + ? *src + ((wchar_t)(L'a' - L'A')) + : *src; + dst++; + src++; + } while ((f) && (f == l)); + ret = (int)((unsigned int)f - (unsigned int)l); +#if defined(_INTL) && !defined(_NTSUBSET_) + } + else + { + ret = CompareStringW(LANG_NEUTRAL,NORM_IGNORECASE,dst,-1,src,-1); + /* map return into normal CMP area (-1,0, 1 or ERROR) */ + ret = (ret) ? (ret-2) : NLSCMPERROR; + } + +/* _munlock (_LC_CTYPE_LOCK); */ +#endif /* _INTL */ + + return ret; +} |