From e06765ae0dbbc874ff9e04dbd0e7d82989048261 Mon Sep 17 00:00:00 2001 From: Gary Lin Date: Fri, 7 Apr 2017 17:14:09 +0800 Subject: [PATCH] Cryptlib: implement strcmp() and strcasecmp() strcmp() and strcasecmp() are widely used in openssl. Implement those two functions to eliminate the gcc warnings and the potential crash. Signed-off-by: Gary Lin --- Cryptlib/Include/OpenSslSupport.h | 1 - Cryptlib/SysCall/BaseStrings.c | 28 ++++++++++++++++++++++++++++ Cryptlib/SysCall/CrtWrapper.c | 5 ----- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Cryptlib/Include/OpenSslSupport.h b/Cryptlib/Include/OpenSslSupport.h index fff6a5265..5f85f79ba 100644 --- a/Cryptlib/Include/OpenSslSupport.h +++ b/Cryptlib/Include/OpenSslSupport.h @@ -366,7 +366,6 @@ extern FILE *stdout; #define memchr(buf,ch,count) ScanMem8(buf,(UINTN)(count),(UINT8)ch) #define memcmp(buf1,buf2,count) (int)(CompareMem(buf1,buf2,(UINTN)(count))) #define memmove(dest,source,count) CopyMem(dest,source,(UINTN)(count)) -#define strcmp strcmpa #define strncmp(string1,string2,count) (int)(AsciiStrnCmp(string1,string2,(UINTN)(count))) #define strcpy(strDest,strSource) AsciiStrCpy(strDest,strSource) #define strncpy(strDest,strSource,count) AsciiStrnCpy(strDest,strSource,(UINTN)count) diff --git a/Cryptlib/SysCall/BaseStrings.c b/Cryptlib/SysCall/BaseStrings.c index 438757124..1844a6572 100644 --- a/Cryptlib/SysCall/BaseStrings.c +++ b/Cryptlib/SysCall/BaseStrings.c @@ -64,4 +64,32 @@ AsciiStrSize(CHAR8 *string) return strlena(string) + 1; } +int +strcmp (const char *str1, const char *str2) +{ + return strcmpa((CHAR8 *)str1,(CHAR8 *)str2); +} + +inline static char +toupper (char c) +{ + return ((c >= 'a' && c <= 'z') ? c - ('a' - 'A') : c); +} +/* Based on AsciiStriCmp() in edk2 MdePkg/Library/BaseLib/String.c */ +int +strcasecmp (const char *str1, const char *str2) +{ + char c1, c2; + + c1 = toupper (*str1); + c2 = toupper (*str2); + while ((*str1 != '\0') && (c1 == c2)) { + str1++; + str2++; + c1 = toupper (*str1); + c2 = toupper (*str2); + } + + return c1 - c2; +} diff --git a/Cryptlib/SysCall/CrtWrapper.c b/Cryptlib/SysCall/CrtWrapper.c index 1afe319f1..698e1eefa 100644 --- a/Cryptlib/SysCall/CrtWrapper.c +++ b/Cryptlib/SysCall/CrtWrapper.c @@ -424,11 +424,6 @@ int stat (const char *c, struct stat *s) return -1; } -int strcasecmp (const char *c, const char *s) -{ - return 0; -} - int strncasecmp (const char *c, const char *s, size_t l) { return 0;