mirror of
https://git.proxmox.com/git/efi-boot-shim
synced 2025-06-12 23:57:22 +00:00

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 <glin@suse.com>
126 lines
2.0 KiB
C
126 lines
2.0 KiB
C
#include <CrtLibSupport.h>
|
|
|
|
char *
|
|
AsciiStrCat(char *Destination, char *Source)
|
|
{
|
|
UINTN dest_len = strlena((CHAR8 *)Destination);
|
|
UINTN i;
|
|
|
|
for (i = 0; Source[i] != '\0'; i++)
|
|
Destination[dest_len + i] = Source[i];
|
|
Destination[dest_len + i] = '\0';
|
|
|
|
return Destination;
|
|
}
|
|
|
|
CHAR8 *
|
|
AsciiStrCpy(CHAR8 *Destination, CHAR8 *Source)
|
|
{
|
|
UINTN i;
|
|
|
|
for (i=0; Source[i] != '\0'; i++)
|
|
Destination[i] = Source[i];
|
|
Destination[i] = '\0';
|
|
|
|
return Destination;
|
|
}
|
|
|
|
char *
|
|
AsciiStrnCpy(char *Destination, char *Source, UINTN count)
|
|
{
|
|
UINTN i;
|
|
|
|
for (i=0; i < count && Source[i] != '\0'; i++)
|
|
Destination[i] = Source[i];
|
|
for ( ; i < count; i++)
|
|
Destination[i] = '\0';
|
|
|
|
return Destination;
|
|
}
|
|
|
|
CHAR8 *
|
|
ScanMem8(CHAR8 *str, UINTN count, CHAR8 ch)
|
|
{
|
|
UINTN i;
|
|
|
|
for (i = 0; i < count; i++) {
|
|
if (str[i] == ch)
|
|
return str + i;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
UINT32
|
|
WriteUnaligned32(UINT32 *Buffer, UINT32 Value)
|
|
{
|
|
*Buffer = Value;
|
|
|
|
return Value;
|
|
}
|
|
|
|
UINTN
|
|
AsciiStrSize(CHAR8 *string)
|
|
{
|
|
return strlena(string) + 1;
|
|
}
|
|
|
|
/* Based on AsciiStrDecimalToUintnS() in edk2
|
|
* MdePkg/Library/BaseLib/SafeString.c */
|
|
UINTN
|
|
AsciiStrDecimalToUintn(const char *String)
|
|
{
|
|
UINTN Result;
|
|
|
|
if (String == NULL)
|
|
return 0;
|
|
|
|
/* Ignore the pad spaces (space or tab) */
|
|
while ((*String == ' ') || (*String == '\t')) {
|
|
String++;
|
|
}
|
|
|
|
/* Ignore leading Zeros after the spaces */
|
|
while (*String == '0') {
|
|
String++;
|
|
}
|
|
|
|
Result = 0;
|
|
|
|
while (*String >= '0' && *String <= '9') {
|
|
Result = Result * 10 + (*String - '0');
|
|
String++;
|
|
}
|
|
|
|
return Result;
|
|
}
|
|
|
|
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;
|
|
}
|