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).
pull/6303/head
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 */
#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)
void wolfSSL_RefInit(wolfSSL_Ref* ref, int* err)
{

View File

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