]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
MdeModulePkg/RegularExpressionDxe: Make oniguruma a submodule in edk2.
[mirror_edk2.git] / MdeModulePkg / Universal / RegularExpressionDxe / OnigurumaUefiPort.c
diff --git a/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c b/MdeModulePkg/Universal/RegularExpressionDxe/OnigurumaUefiPort.c
new file mode 100644 (file)
index 0000000..b1604b3
--- /dev/null
@@ -0,0 +1,88 @@
+/** @file\r
+\r
+  Module to rewrite stdlib references within Oniguruma\r
+\r
+  (C) Copyright 2014-2015 Hewlett Packard Enterprise Development LP<BR>\r
+  Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>\r
+\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+**/\r
+#include "OnigurumaUefiPort.h"\r
+\r
+#define ONIGMEM_HEAD_SIGNATURE    SIGNATURE_32('o','m','h','d')\r
+\r
+typedef struct {\r
+  UINT32    Signature;\r
+  UINTN     Size;\r
+} ONIGMEM_HEAD;\r
+\r
+#define ONIGMEM_OVERHEAD sizeof(ONIGMEM_HEAD)\r
+\r
+int EFIAPI sprintf_s(char *str, size_t sizeOfBuffer, char const *fmt, ...)\r
+{\r
+  VA_LIST Marker;\r
+  int   NumberOfPrinted;\r
+\r
+  VA_START (Marker, fmt);\r
+  NumberOfPrinted = (int)AsciiVSPrint (str, sizeOfBuffer, fmt, Marker);\r
+  VA_END (Marker);\r
+\r
+  return NumberOfPrinted;\r
+}\r
+\r
+int OnigStrCmp (const char* Str1, const char* Str2)\r
+{\r
+  return (int)AsciiStrCmp (Str1, Str2);\r
+}\r
+\r
+int strlen(const char* str)\r
+{\r
+  return strlen_s(str, MAX_STRING_SIZE);\r
+}\r
+\r
+void * malloc (size_t size)\r
+{\r
+  ONIGMEM_HEAD  *PoolHdr;\r
+  UINTN          NewSize;\r
+  VOID           *Data;\r
+\r
+  NewSize = (UINTN)(size) + ONIGMEM_OVERHEAD;\r
+\r
+  Data  = AllocatePool (NewSize);\r
+  if (Data != NULL) {\r
+    PoolHdr = (ONIGMEM_HEAD *)Data;\r
+    PoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE;\r
+    PoolHdr->Size      = size;\r
+\r
+    return (VOID *)(PoolHdr + 1);\r
+  }\r
+  return NULL;\r
+}\r
+\r
+void * realloc (void *ptr, size_t size)\r
+{\r
+  ONIGMEM_HEAD  *OldPoolHdr;\r
+  ONIGMEM_HEAD  *NewPoolHdr;\r
+  UINTN          OldSize;\r
+  UINTN          NewSize;\r
+  VOID           *Data;\r
+\r
+  NewSize = (UINTN)size + ONIGMEM_OVERHEAD;\r
+  Data = AllocatePool (NewSize);\r
+  if (Data != NULL) {\r
+    NewPoolHdr = (ONIGMEM_HEAD *)Data;\r
+    NewPoolHdr->Signature = ONIGMEM_HEAD_SIGNATURE;\r
+    NewPoolHdr->Size      = size;\r
+    if (ptr != NULL) {\r
+      OldPoolHdr = (ONIGMEM_HEAD *)ptr - 1;\r
+      ASSERT (OldPoolHdr->Signature == ONIGMEM_HEAD_SIGNATURE);\r
+      OldSize = OldPoolHdr->Size;\r
+\r
+      CopyMem ((VOID *)(NewPoolHdr + 1), ptr, MIN (OldSize, size));\r
+      FreePool ((VOID *)OldPoolHdr);\r
+    }\r
+    return (VOID *)(NewPoolHdr + 1);\r
+  }\r
+  return NULL;\r
+}\r
+\r