summaryrefslogtreecommitdiffstats
path: root/board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c')
-rw-r--r--board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c140
1 files changed, 140 insertions, 0 deletions
diff --git a/board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c b/board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c
new file mode 100644
index 0000000000..d7705130b7
--- /dev/null
+++ b/board/MAI/bios_emulator/scitech/src/pm/ntdrv/stdlib.c
@@ -0,0 +1,140 @@
+/****************************************************************************
+*
+* SciTech OS Portability Manager Library
+*
+* ========================================================================
+*
+* The contents of this file are subject to the SciTech MGL Public
+* License Version 1.0 (the "License"); you may not use this file
+* except in compliance with the License. You may obtain a copy of
+* the License at http://www.scitechsoft.com/mgl-license.txt
+*
+* Software distributed under the License is distributed on an
+* "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+* implied. See the License for the specific language governing
+* rights and limitations under the License.
+*
+* The Original Code is Copyright (C) 1991-1998 SciTech Software, Inc.
+*
+* The Initial Developer of the Original Code is SciTech Software, Inc.
+* All Rights Reserved.
+*
+* ========================================================================
+*
+* Language: ANSI C
+* Environment: 32-bit Windows NT driver
+*
+* Description: C library compatible stdlib.h functions for use within a
+* Windows NT driver.
+*
+****************************************************************************/
+
+#include "pmapi.h"
+#include "oshdr.h"
+
+/*------------------------ Main Code Implementation -----------------------*/
+
+/****************************************************************************
+REMARKS:
+PM_malloc override function for Nucleus drivers loaded in NT drivers's.
+****************************************************************************/
+void * malloc(
+ size_t size)
+{
+ return PM_mallocShared(size);
+}
+
+/****************************************************************************
+REMARKS:
+calloc library function for Nucleus drivers loaded in NT drivers's.
+****************************************************************************/
+void * calloc(
+ size_t nelem,
+ size_t size)
+{
+ void *p = PM_mallocShared(nelem * size);
+ if (p)
+ memset(p,0,nelem * size);
+ return p;
+}
+
+/****************************************************************************
+REMARKS:
+PM_realloc override function for Nucleus drivers loaded in VxD's.
+****************************************************************************/
+void * realloc(
+ void *ptr,
+ size_t size)
+{
+ void *p = PM_mallocShared(size);
+ if (p) {
+ memcpy(p,ptr,size);
+ PM_freeShared(ptr);
+ }
+ return p;
+}
+
+/****************************************************************************
+REMARKS:
+PM_free override function for Nucleus drivers loaded in VxD's.
+****************************************************************************/
+void free(
+ void *p)
+{
+ PM_freeShared(p);
+}
+
+/****************************************************************************
+PARAMETERS:
+cstr - C style ANSI string to convert
+
+RETURNS:
+Pointer to the UniCode string structure or NULL on failure to allocate memory
+
+REMARKS:
+Converts a C style string to a UniCode string structure that can be passed
+directly to NT kernel functions.
+****************************************************************************/
+UNICODE_STRING *_PM_CStringToUnicodeString(
+ const char *cstr)
+{
+ int length;
+ ANSI_STRING ansiStr;
+ UNICODE_STRING *uniStr;
+
+ // Allocate memory for the string structure
+ if ((uniStr = ExAllocatePool(NonPagedPool, sizeof(UNICODE_STRING))) == NULL)
+ return NULL;
+
+ // Allocate memory for the wide string itself
+ length = (strlen(cstr) * sizeof(WCHAR)) + sizeof(WCHAR);
+ if ((uniStr->Buffer = ExAllocatePool(NonPagedPool, length)) == NULL) {
+ ExFreePool(uniStr);
+ return NULL;
+ }
+ RtlZeroMemory(uniStr->Buffer, length);
+ uniStr->Length = 0;
+ uniStr->MaximumLength = (USHORT)length;
+
+ // Convert filename string to ansi string and then to UniCode string
+ RtlInitAnsiString(&ansiStr, cstr);
+ RtlAnsiStringToUnicodeString(uniStr, &ansiStr, FALSE);
+ return uniStr;
+}
+
+/****************************************************************************
+PARAMETERS:
+uniStr - UniCode string structure to free
+
+REMARKS:
+Frees a string allocated by the above _PM_CStringToUnicodeString function.
+****************************************************************************/
+void _PM_FreeUnicodeString(
+ UNICODE_STRING *uniStr)
+{
+ if (uniStr) {
+ ExFreePool(uniStr->Buffer);
+ ExFreePool(uniStr);
+ }
+}
+
OpenPOWER on IntegriCloud