diff options
author | Tomas Mraz <tomas@openssl.org> | 2022-05-10 16:31:20 +0200 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2022-05-13 08:33:39 +0200 |
commit | 250170d3b03d8e1f56e66c901abb096d8cc80cf4 (patch) | |
tree | 520a91e117251c1137624ccf6275f5617b48c5c7 /crypto/o_str.c | |
parent | acbd162f8859c8172f2b61a678e36993121a44da (diff) |
Move OPENSSL_strcasecmp() and related to o_str.c
Otherwise the implementation is unnecessarily duplicated in legacy.so.
Reviewed-by: Dmitry Belyavskiy <beldmit@gmail.com>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/18293)
Diffstat (limited to 'crypto/o_str.c')
-rw-r--r-- | crypto/o_str.c | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/crypto/o_str.c b/crypto/o_str.c index 5c4e4e7781..30e5820c49 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -8,9 +8,17 @@ */ #include "e_os.h" +#include <string.h> #include <limits.h> +#ifndef OPENSSL_NO_LOCALE +# include <locale.h> +# ifdef OPENSSL_SYS_MACOSX +# include <xlocale.h> +# endif +#endif #include <openssl/crypto.h> #include "internal/cryptlib.h" +#include "internal/core.h" #define DEFAULT_SEPARATOR ':' #define CH_ZERO '\0' @@ -338,3 +346,60 @@ int openssl_strerror_r(int errnum, char *buf, size_t buflen) return 1; #endif } + +#ifndef OPENSSL_NO_LOCALE +# ifndef FIPS_MODULE +static locale_t loc; + + +void *ossl_c_locale() { + return (void *)loc; +} + +int ossl_init_casecmp_int() { +# ifdef OPENSSL_SYS_WINDOWS + loc = _create_locale(LC_COLLATE, "C"); +# else + loc = newlocale(LC_COLLATE_MASK, "C", (locale_t) 0); +# endif + return (loc == (locale_t) 0) ? 0 : 1; +} + +void ossl_deinit_casecmp() { + freelocale(loc); +} +# endif + +int OPENSSL_strcasecmp(const char *s1, const char *s2) +{ + return strcasecmp_l(s1, s2, (locale_t)ossl_c_locale()); +} + +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n) +{ + return strncasecmp_l(s1, s2, n, (locale_t)ossl_c_locale()); +} +#else +# ifndef FIPS_MODULE +void *ossl_c_locale() { + return NULL; +} +# endif + +int ossl_init_casecmp_int() { + return 1; +} + +void ossl_deinit_casecmp() { +} + +int OPENSSL_strcasecmp(const char *s1, const char *s2) +{ + return strcasecmp(s1, s2); +} + +int OPENSSL_strncasecmp(const char *s1, const char *s2, size_t n) +{ + return strncasecmp(s1, s2, n); +} +#endif |