From 71c17c36d913a82742c7d4ecd91ad047906cdae0 Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Tue, 10 May 2022 16:31:20 +0200 Subject: [PATCH] Move OPENSSL_strcasecmp() and related to o_str.c Otherwise the implementation is unnecessarily duplicated in legacy.so. Reviewed-by: Dmitry Belyavskiy Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/18282) --- crypto/ctype.c | 66 +------------------------------------ crypto/o_str.c | 65 ++++++++++++++++++++++++++++++++++++ include/crypto/ctype.h | 3 -- include/internal/cryptlib.h | 3 +- 4 files changed, 68 insertions(+), 69 deletions(-) diff --git a/crypto/ctype.c b/crypto/ctype.c index dc93015917..2165213889 100644 --- a/crypto/ctype.c +++ b/crypto/ctype.c @@ -7,18 +7,11 @@ * https://www.openssl.org/source/license.html */ -#include "internal/e_os.h" #include #include #include "crypto/ctype.h" #include -#include "internal/core.h" -#ifndef OPENSSL_NO_LOCALE -# include -# ifdef OPENSSL_SYS_MACOSX -# include -# endif -#endif + /* * Define the character classes for each character in the seven bit ASCII * character set. This is independent of the host's character set, characters @@ -285,60 +278,3 @@ int ossl_ascii_isdigit(const char inchar) { return 1; return 0; } - -#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 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 #include +#ifndef OPENSSL_NO_LOCALE +# include +# ifdef OPENSSL_SYS_MACOSX +# include +# endif +#endif #include #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 diff --git a/include/crypto/ctype.h b/include/crypto/ctype.h index 9476a5fb66..6deee3b947 100644 --- a/include/crypto/ctype.h +++ b/include/crypto/ctype.h @@ -79,7 +79,4 @@ int ossl_ascii_isdigit(const char inchar); # define ossl_isxdigit(c) (ossl_ctype_check((c), CTYPE_MASK_xdigit)) # define ossl_isbase64(c) (ossl_ctype_check((c), CTYPE_MASK_base64)) # define ossl_isasn1print(c) (ossl_ctype_check((c), CTYPE_MASK_asn1print)) - -int ossl_init_casecmp_int(void); -void ossl_deinit_casecmp(void); #endif diff --git a/include/internal/cryptlib.h b/include/internal/cryptlib.h index c6c0712764..408924f5dd 100644 --- a/include/internal/cryptlib.h +++ b/include/internal/cryptlib.h @@ -157,5 +157,6 @@ char *ossl_ipaddr_to_asc(unsigned char *p, int len); char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, const char sep); - +int ossl_init_casecmp_int(void); +void ossl_deinit_casecmp(void); #endif