/** @file | |
Module to rewrite stdlib references within Oniguruma | |
(C) Copyright 2014-2021 Hewlett Packard Enterprise Development LP<BR> | |
Copyright (c) 2020, Intel Corporation. All rights reserved.<BR> | |
Copyright (c) 2023, NVIDIA CORPORATION & AFFILIATES. All rights reserved. | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include "OnigurumaUefiPort.h" | |
#define ONIGMEM_HEAD_SIGNATURE SIGNATURE_32('o','m','h','d') | |
typedef struct { | |
UINT32 Signature; | |
UINTN Size; | |
} ONIGMEM_HEAD; | |
#define ONIGMEM_OVERHEAD sizeof(ONIGMEM_HEAD) | |
int EFIAPI | |
sprintf_s ( | |
char *str, | |
size_t sizeOfBuffer, | |
char const *fmt, | |
... | |
) | |
{ | |
VA_LIST Marker; | |
int NumberOfPrinted; | |
VA_START (Marker, fmt); | |
NumberOfPrinted = (int)AsciiVSPrint (str, sizeOfBuffer, fmt, Marker); | |
VA_END (Marker); | |
return NumberOfPrinted; | |
} | |
int | |
OnigStrCmp ( | |
const char *Str1, | |
const char *Str2 | |
) | |
{ | |
return (int)AsciiStrCmp (Str1, Str2); | |
} | |
int | |
strlen ( | |
const char *str | |
) | |
{ | |
return strlen_s (str, MAX_STRING_SIZE); | |
} | |
void * | |
malloc ( | |
size_t size | |
) | |
{ | |
ONIGMEM_HEAD *PoolHdr; | |
UINTN NewSize; | |
VOID *Data; | |
NewSize = (UINTN)(size) + ONIGMEM_OVERHEAD; | |
Data = AllocatePool (NewSize); | |
if (Data != NULL) { | |
PoolHdr = (ONIGMEM_HEAD *)Data; | |
PoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE; | |
PoolHdr->Size = size; | |
return (VOID *)(PoolHdr + 1); | |
} | |
return NULL; | |
} | |
void * | |
realloc ( | |
void *ptr, | |
size_t size | |
) | |
{ | |
ONIGMEM_HEAD *OldPoolHdr; | |
ONIGMEM_HEAD *NewPoolHdr; | |
UINTN OldSize; | |
UINTN NewSize; | |
VOID *Data; | |
NewSize = (UINTN)size + ONIGMEM_OVERHEAD; | |
Data = AllocatePool (NewSize); | |
if (Data != NULL) { | |
NewPoolHdr = (ONIGMEM_HEAD *)Data; | |
NewPoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE; | |
NewPoolHdr->Size = size; | |
if (ptr != NULL) { | |
OldPoolHdr = (ONIGMEM_HEAD *)ptr - 1; | |
ASSERT (OldPoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE); | |
OldSize = OldPoolHdr->Size; | |
CopyMem ((VOID *)(NewPoolHdr + 1), ptr, MIN (OldSize, size)); | |
FreePool ((VOID *)OldPoolHdr); | |
} | |
return (VOID *)(NewPoolHdr + 1); | |
} | |
return NULL; | |
} | |
#if !defined (MDE_CPU_ARM) | |
void * | |
memcpy ( | |
void *dest, | |
const void *src, | |
unsigned int count | |
) | |
{ | |
return CopyMem (dest, src, (UINTN)count); | |
} | |
#endif | |
void * | |
memset ( | |
void *dest, | |
int ch, | |
unsigned int count | |
) | |
{ | |
return SetMem (dest, (UINTN)count, (UINT8)ch); | |
} | |
void | |
free ( | |
void *ptr | |
) | |
{ | |
VOID *EvalOnce; | |
ONIGMEM_HEAD *PoolHdr; | |
EvalOnce = ptr; | |
if (EvalOnce == NULL) { | |
return; | |
} | |
PoolHdr = (ONIGMEM_HEAD *)EvalOnce - 1; | |
if (PoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE) { | |
FreePool (PoolHdr); | |
} else { | |
FreePool (EvalOnce); | |
} | |
} |