// Bungo:␊ |
char gDarwinBuildVerStr[256] = "Darwin Kernel Version";␊ |
␊ |
/*static*/ unsigned long␊ |
Adler32( unsigned char *buffer, long length )␊ |
/*static*/ unsigned long Adler32( unsigned char *buffer, long length )␊ |
{␊ |
␉long cnt;␊ |
␉unsigned long result, lowHalf, highHalf;␊ |
|
␊ |
//==========================================================================␊ |
// InitDriverSupport␊ |
␊ |
static long InitDriverSupport( void )␊ |
{␊ |
␉gExtensionsSpec = malloc( 4096 );␊ |
|
␊ |
//==========================================================================␊ |
// LoadDrivers␊ |
␊ |
long LoadDrivers( char * dirSpec )␊ |
long LoadDrivers( char *dirSpec )␊ |
{␊ |
␉char dirSpecExtra[1024];␊ |
␊ |
|
␊ |
//==========================================================================␊ |
// FileLoadMKext␊ |
␊ |
static long FileLoadMKext( const char * dirSpec, const char * extDirSpec )␊ |
static long FileLoadMKext( const char *dirSpec, const char *extDirSpec )␊ |
{␊ |
␉long␉␉ret, flags;␊ |
␉u_int32_t␉time, time2;␊ |
|
␊ |
//==========================================================================␊ |
// FileLoadDrivers␊ |
␊ |
long FileLoadDrivers( char * dirSpec, long plugin )␊ |
long FileLoadDrivers( char *dirSpec, long plugin )␊ |
{␊ |
␉long long␉index;␊ |
␉long␉␉ret, length, flags, bundleType;␊ |
|
␉return result;␊ |
}␊ |
␊ |
␊ |
//==========================================================================␊ |
// ␊ |
␊ |
long NetLoadDrivers( char * dirSpec )␊ |
long NetLoadDrivers( char *dirSpec )␊ |
{␊ |
␉long tries;␊ |
␊ |
|
␊ |
//==========================================================================␊ |
// loadDriverMKext␊ |
␊ |
long LoadDriverMKext( char * fileSpec )␊ |
long LoadDriverMKext( char *fileSpec )␊ |
{␊ |
␉unsigned long driversAddr, driversLength;␊ |
␉long length;␊ |
␉char segName[32];␊ |
␉DriversPackage * package;␊ |
␉unsigned long␉driversAddr, driversLength;␊ |
␉long␉␉length;␊ |
␉char␉␉segName[32];␊ |
␉DriversPackage␉*package;␊ |
␊ |
#define GetPackageElement(e) OSSwapBigToHostInt32(package->e)␊ |
␊ |
|
␉}␊ |
␊ |
␉// call hook to notify modules that the mkext has been loaded␊ |
␉execute_hook("LoadDriverMKext", (void*)fileSpec, (void*)package, (void*) &length, NULL);␊ |
␉execute_hook("LoadDriverMKext", (void *)fileSpec, (void *)package, (void *) &length, NULL);␊ |
␊ |
␉␊ |
␉// Verify the MKext.␊ |
|
␊ |
//==========================================================================␊ |
// LoadDriverPList␊ |
␊ |
long␊ |
LoadDriverPList( char * dirSpec, char * name, long bundleType )␊ |
long LoadDriverPList( char *dirSpec, char *name, long bundleType )␊ |
{␊ |
␉long length, executablePathLength, bundlePathLength;␊ |
␉ModulePtr module;␊ |
|
␉return ret;␊ |
}␊ |
␊ |
␊ |
//==========================================================================␊ |
// LoadMatchedModules␊ |
␊ |
long␊ |
LoadMatchedModules( void )␊ |
long LoadMatchedModules( void )␊ |
{␊ |
␉TagPtr␉␉ prop;␊ |
␉ModulePtr␉ module;␊ |
|
␊ |
//==========================================================================␊ |
// MatchPersonalities␊ |
␊ |
static long␊ |
MatchPersonalities( void )␊ |
static long MatchPersonalities( void )␊ |
{␊ |
␉/* IONameMatch support not implemented */␊ |
␉return 0;␊ |
|
␊ |
//==========================================================================␊ |
// MatchLibraries␊ |
␊ |
static long MatchLibraries( void )␊ |
{␊ |
␉TagPtr prop;␊ |
|
␉return 0;␊ |
}␊ |
␊ |
␊ |
//==========================================================================␊ |
// FindModule␊ |
␊ |
|
␊ |
//==========================================================================␊ |
// ParseXML␊ |
␊ |
static long ParseXML( char *buffer, ModulePtr *module, TagPtr *personalities )␊ |
{␊ |
␉long␉␉length;␊ |
|
␊ |
␉required = XMLGetProperty(moduleDict, kPropOSBundleRequired);␊ |
␊ |
␉if ( (required == 0) || (required->type != kTagTypeString) || !strcmp(required->string, "Safe Boot"))␊ |
␉if ( (required == 0) || (required->type != kTagTypeString) || !strncmp(required->string, "Safe Boot", sizeof("Safe Boot")))␊ |
␉{␊ |
␉␉XMLFreeTag(moduleDict);␊ |
␉␉return -2;␊ |
|
␉u_int32_t uncompressed_size = 0, size = 0, adler32 = 0;␊ |
␉void *buffer = NULL;␊ |
␉unsigned long len = 0;␊ |
␉␊ |
␊ |
/*#if 0␊ |
␉printf("kernel header:\n");␊ |
␉printf("signature: 0x%x\n", kernel_header->signature);␊ |
|
␊ |
␉if (kernel_header->signature == OSSwapBigToHostConstInt32('comp'))␊ |
␉{␊ |
␉␉DBG("Decompressing Kernel Cache");␊ |
␉␉DBG("Decompressing Kernel Cache:\n");␊ |
␊ |
␉␉if ((kernel_header->compress_type != OSSwapBigToHostConstInt32('lzss')) &&␊ |
␉␉␉(kernel_header->compress_type != OSSwapBigToHostConstInt32('lzvn')))␊ |
␉␉{␊ |
␉␉␉error("ERROR: kernel compression is bad!\n");␊ |
␉␉␉error("\tERROR: kernel compression is bad!\n");␊ |
␉␉␉return -1;␊ |
␉␉}␊ |
␊ |
␉␉if (kernel_header->compress_type == OSSwapBigToHostConstInt32('lzss'))␊ |
␉␉{␊ |
␉␉␉verbose ("Decompressing Kernel Using lzss\n");␊ |
␉␉␉verbose ("\t- Decompressing Kernel Using lzss\n");␊ |
␉␉}␊ |
␊ |
␉␉if (kernel_header->compress_type == OSSwapBigToHostConstInt32('lzvn'))␊ |
␉␉{␊ |
␉␉␉verbose ("Decompressing Kernel Using lzvn\n");␊ |
␉␉␉verbose ("\t- Decompressing Kernel Using lzvn\n");␊ |
␉␉}␊ |
␊ |
#if NOTDEF␊ |
|
␉␉␉return -1;␊ |
␉␉}␊ |
␊ |
␉␉DBG("OK.\n");␊ |
␉␉DBG("\n");␊ |
␉}␊ |
␉␊ |
␉ret = ThinFatFile(&binary, &len);␊ |