Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*++
Copyright (c) 1990-1999 Microsoft Corporation
Module Name:
newdel.cxx
Abstract:
This module implements the C++ new and delete operators for the Setup-Loader environment. In other environments, the utilities use the standard C++ new and delete.
Environment:
ULIB, User Mode
--*/
#include <pch.cxx>
#define _ULIB_MEMBER_
#include "ulib.hxx"
#ifdef _EFICHECK_
extern "C" { #include <efi.h>
#include <efilib.h>
} #endif
extern "C" int _cdecl _purecall( );
int _cdecl _purecall( ) {
DebugAbort( "Pure virtual function called.\n" );
return 0; }
// When the utilities are running the Setup Loader
// or Autocheck environments, they can't use the C-Run-
// Time new and delete; instead, these functions are
// provided.
//
PVOID _cdecl operator new ( IN size_t bytes ) /*++
Routine Description:
This routine allocates 'bytes' bytes of memory.
Arguments:
bytes - Supplies the number of bytes requested.
Return Value:
A pointer to 'bytes' bytes or NULL.
--*/ { void * ptr;
ptr = AllocatePool(bytes);
return ptr; }
VOID _cdecl operator delete ( IN PVOID pointer ) /*++
Routine Description:
This routine frees the memory pointed to by 'pointer'.
Arguments:
pointer - Supplies a pointer to the memoery to be freed.
Return Value:
None.
--*/ { if (pointer) { FreePool(pointer); } }
typedef void (*PF)(PVOID); typedef void (*PFI)(PVOID, int); PVOID __vec_new( IN OUT PVOID op, IN int number, IN int size, IN PVOID f) /*
allocate a vector of "number" elements of size "size" and initialize each by a call of "f" */ { if (op == 0) { op = AllocatePool( number * size ); }
if (op && f) { register char* p = (char*) op; register char* lim = p + number*size; register PF fp = PF(f); while (p < lim) { (*fp) (PVOID(p)); p += size; } }
return op; }
void __vec_delete( PVOID op, int n, int sz, PVOID f, int del, int x)
/*
destroy a vector of "n" elements of size "sz" */ { // unreferenced parameters
// I wonder what it does
(void)(x);
if (op) { if (f) { register char* cp = (char*) op; register char* p = cp; register PFI fp = PFI(f); p += n*sz; while (p > cp) { p -= sz; (*fp)(PVOID(p), 2); // destroy VBC, don't delete
} } if (del) { FreePool(op); } } }
|