stdlib.c

来自「uboot for twarm board」· C语言 代码 · 共 140 行

C
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 convertRETURNS:Pointer to the UniCode string structure or NULL on failure to allocate memoryREMARKS:Converts a C style string to a UniCode string structure that can be passeddirectly 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 freeREMARKS:Frees a string allocated by the above _PM_CStringToUnicodeString function.****************************************************************************/void _PM_FreeUnicodeString(    UNICODE_STRING *uniStr){    if (uniStr) {	ExFreePool(uniStr->Buffer);	ExFreePool(uniStr);	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?