add wc_strcasecmp() and wc_strncasecmp() to wc_port.c, and set up (USE_WOLF_STR[N]CASECMP) in types.h for targets lacking native implementations (including WOLF_C89);

define USE_WOLF_STRSEP if defined(WOLF_C89).
This commit is contained in:
Daniel Pouzzner
2023-04-17 17:43:00 -05:00
parent 4b9302cdb3
commit 193919a276
2 changed files with 63 additions and 13 deletions

View File

@ -1081,6 +1081,48 @@ size_t wc_strlcat(char *dst, const char *src, size_t dstSize)
} }
#endif /* USE_WOLF_STRLCAT */ #endif /* USE_WOLF_STRLCAT */
#ifdef USE_WOLF_STRCASECMP
int wc_strcasecmp(const char *s1, const char *s2)
{
char c1, c2;
for (;
;
++s1, ++s2)
{
c1 = *s1;
if ((c1 >= 'a') && (c1 <= 'z'))
c1 -= ('a' - 'A');
c2 = *s2;
if ((c2 >= 'a') && (c2 <= 'z'))
c2 -= ('a' - 'A');
if ((c1 != c2) || (c1 == 0))
break;
}
return (c1 - c2);
}
#endif /* USE_WOLF_STRCASECMP */
#ifdef USE_WOLF_STRNCASECMP
int wc_strncasecmp(const char *s1, const char *s2, size_t n)
{
char c1, c2;
for (c1 = 0, c2 = 0;
n > 0;
--n, ++s1, ++s2)
{
c1 = *s1;
if ((c1 >= 'a') && (c1 <= 'z'))
c1 -= ('a' - 'A');
c2 = *s2;
if ((c2 >= 'a') && (c2 <= 'z'))
c2 -= ('a' - 'A');
if ((c1 != c2) || (c1 == 0))
break;
}
return (c1 - c2);
}
#endif /* USE_WOLF_STRNCASECMP */
#if !defined(SINGLE_THREADED) && !defined(HAVE_C___ATOMIC) #if !defined(SINGLE_THREADED) && !defined(HAVE_C___ATOMIC)
void wolfSSL_RefInit(wolfSSL_Ref* ref, int* err) void wolfSSL_RefInit(wolfSSL_Ref* ref, int* err)
{ {

View File

@ -640,7 +640,7 @@ typedef struct w64wrapper {
defined(WOLFSSL_TIRTOS) || defined(WOLF_C99)) defined(WOLFSSL_TIRTOS) || defined(WOLF_C99))
#define USE_WOLF_STRTOK #define USE_WOLF_STRTOK
#endif #endif
#if !defined(USE_WOLF_STRSEP) && (defined(WOLF_C99)) #if !defined(USE_WOLF_STRSEP) && (defined(WOLF_C89) || defined(WOLF_C99))
#define USE_WOLF_STRSEP #define USE_WOLF_STRSEP
#endif #endif
#if !defined(XSTRLCPY) && !defined(USE_WOLF_STRLCPY) #if !defined(XSTRLCPY) && !defined(USE_WOLF_STRLCPY)
@ -684,10 +684,9 @@ typedef struct w64wrapper {
#define XSTRCASECMP(s1,s2) strcasecmp((s1),(s2)) #define XSTRCASECMP(s1,s2) strcasecmp((s1),(s2))
#elif defined(MICROCHIP_PIC32) || defined(WOLFSSL_TIRTOS) || \ #elif defined(MICROCHIP_PIC32) || defined(WOLFSSL_TIRTOS) || \
defined(WOLFSSL_ZEPHYR) defined(WOLFSSL_ZEPHYR)
/* XC32 version < 1.0 does not support strcasecmp, so use /* XC32 version < 1.0 does not support strcasecmp. */
* case sensitive one. #define USE_WOLF_STRCASECMP
*/ #define XSTRCASECMP(s1,s2) wc_strcasecmp(s1,s2)
#define XSTRCASECMP(s1,s2) strcmp((s1),(s2))
#elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM) #elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM)
#define XSTRCASECMP(s1,s2) _stricmp((s1),(s2)) #define XSTRCASECMP(s1,s2) _stricmp((s1),(s2))
#else #else
@ -697,8 +696,10 @@ typedef struct w64wrapper {
#endif #endif
#if defined(WOLFSSL_DEOS) #if defined(WOLFSSL_DEOS)
#define XSTRCASECMP(s1,s2) stricmp((s1),(s2)) #define XSTRCASECMP(s1,s2) stricmp((s1),(s2))
#elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) \
#define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) || defined(WOLF_C89)
#define USE_WOLF_STRCASECMP
#define XSTRCASECMP(s1,s2) wc_strcasecmp(s1, s2)
#elif defined(WOLF_C89) #elif defined(WOLF_C89)
#define XSTRCASECMP(s1,s2) strcmp((s1),(s2)) #define XSTRCASECMP(s1,s2) strcmp((s1),(s2))
#else #else
@ -713,10 +714,9 @@ typedef struct w64wrapper {
#define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n)) #define XSTRNCASECMP(s1,s2,n) strncasecmp((s1),(s2),(n))
#elif defined(MICROCHIP_PIC32) || defined(WOLFSSL_TIRTOS) || \ #elif defined(MICROCHIP_PIC32) || defined(WOLFSSL_TIRTOS) || \
defined(WOLFSSL_ZEPHYR) defined(WOLFSSL_ZEPHYR)
/* XC32 version < 1.0 does not support strncasecmp, so use case /* XC32 version < 1.0 does not support strncasecmp. */
* sensitive one. #define USE_WOLF_STRNCASECMP
*/ #define XSTRNCASECMP(s1,s2) wc_strncasecmp(s1,s2)
#define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n))
#elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM) #elif defined(USE_WINDOWS_API) || defined(FREERTOS_TCP_WINSIM)
#define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n)) #define XSTRNCASECMP(s1,s2,n) _strnicmp((s1),(s2),(n))
#else #else
@ -726,8 +726,10 @@ typedef struct w64wrapper {
#endif #endif
#if defined(WOLFSSL_DEOS) #if defined(WOLFSSL_DEOS)
#define XSTRNCASECMP(s1,s2,n) strnicmp((s1),(s2),(n)) #define XSTRNCASECMP(s1,s2,n) strnicmp((s1),(s2),(n))
#elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) #elif defined(WOLFSSL_CMSIS_RTOSv2) || defined(WOLFSSL_AZSPHERE) \
#define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) || defined(WOLF_C89)
#define USE_WOLF_STRNCASECMP
#define XSTRNCASECMP(s1,s2,n) wc_strncasecmp(s1, s2 ,n)
#elif defined(WOLF_C89) #elif defined(WOLF_C89)
#define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n)) #define XSTRNCASECMP(s1,s2,n) strncmp((s1),(s2),(n))
#else #else
@ -855,6 +857,12 @@ typedef struct w64wrapper {
WOLFSSL_API size_t wc_strlcat(char *dst, const char *src, size_t dstSize); WOLFSSL_API size_t wc_strlcat(char *dst, const char *src, size_t dstSize);
#define XSTRLCAT(s1,s2,n) wc_strlcat((s1),(s2),(n)) #define XSTRLCAT(s1,s2,n) wc_strlcat((s1),(s2),(n))
#endif #endif
#ifdef USE_WOLF_STRCASECMP
WOLFSSL_API int wc_strcasecmp(const char *s1, const char *s2);
#endif
#ifdef USE_WOLF_STRNCASECMP
WOLFSSL_API int wc_strncasecmp(const char *s1, const char *s2, size_t n);
#endif
#if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM)
#ifndef XGETENV #ifndef XGETENV