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:30:41 +0200 |
commit | 71c17c36d913a82742c7d4ecd91ad047906cdae0 (patch) | |
tree | 9c2ae300271ed521c48ed7397cef18816e2b4d40 /crypto/o_str.c | |
parent | cf91a2b3c196ee4d7be93ab9f8fc8e097128ad68 (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/18282)
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 1ddb449307..eccaa1e5be 100644 --- a/crypto/o_str.c +++ b/crypto/o_str.c @@ -8,9 +8,17 @@ */ #include "internal/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 |