*
* @APPLE_LICENSE_HEADER_START@
*
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License"). You may not use this file except in compliance with the
- * License. Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
+ * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this
+ * file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
kmod_info_t * loaded_kmod = NULL;
-
bootxDriverDataObject = OSDynamicCast(OSData,
propertyDict->getObject(memory_map_name));
// don't release bootxDriverDataObject
/* Check if kmod is already loaded and is a real loadable one (has
* an address).
*/
- loaded_kmod = kmod_lookupbyname(driverName->getCStringNoCopy());
+ loaded_kmod = kmod_lookupbyname_locked(driverName->getCStringNoCopy());
if (loaded_kmod && loaded_kmod->address) {
IOLog("Skipping new extension \"%s\"; an extension named "
"\"%s\" is already loaded.\n",
finish:
+ if (loaded_kmod) {
+ kfree(loaded_kmod, sizeof(kmod_info_t));
+ }
+
// do not release bootxDriverDataObject
// do not release driverName
result = false;
goto finish;
}
+ uncompressed_file[uncompressed_size] = '\0';
} else {
bcopy(base_address + offset, uncompressed_file,
- compsize);
+ realsize);
+ uncompressed_file[realsize] = '\0';
}
- uncompressed_file[uncompressed_size] = '\0';
*file = uncompressedFile;
mkext_kext * onekext_data = 0; // don't free
mkext_file * plist_file = 0; // don't free
mkext_file * module_file = 0; // don't free
+ kmod_info_t * loaded_kmod = 0; // must free
+
OSData * driverPlistDataObject = 0; // must release
OSDictionary * driverPlist = 0; // must release
OSData * driverCode = 0; // must release
i < OSSwapBigToHostInt32(mkext_data->numkexts);
i++) {
- kmod_info_t * loaded_kmod = 0;
+ if (loaded_kmod) {
+ kfree(loaded_kmod, sizeof(kmod_info_t));
+ loaded_kmod = 0;
+ }
if (driverPlistDataObject) {
driverPlistDataObject->release();
/* Check if kmod is already loaded and is a real loadable one (has
* an address).
*/
- loaded_kmod = kmod_lookupbyname(moduleName->getCStringNoCopy());
+ loaded_kmod = kmod_lookupbyname_locked(moduleName->getCStringNoCopy());
if (loaded_kmod && loaded_kmod->address) {
IOLog("Skipping new extension \"%s\"; an extension named "
"\"%s\" is already loaded.\n",
finish:
+ if (loaded_kmod) kfree(loaded_kmod, sizeof(kmod_info_t));
if (driverPlistDataObject) driverPlistDataObject->release();
if (driverPlist) driverPlist->release();
if (driverCode) driverCode->release();
startupExtensions = getStartupExtensions();
if (!startupExtensions) {
- IOLog("Can't record extension archive; there is no
- extensions dictionary.\n");
+ IOLog("Can't record extension archive; there is no"
+ " extensions dictionary.\n");
LOG_DELAY();
result = false;
goto finish;
while ( (key = OSDynamicCast(OSString,
keyIterator->getNextObject())) ) {
-
/* Clear newDriverDict & mkextExtensions upon entry to the loop,
* handling both successful and unsuccessful iterations.
*/
// Do not release key.
- } /* while ( (key = OSDynamicCast(OSString, ... */
+ } /* while ( (key = OSDynamicCast(OSString, ...) ) ) */
if (!mergeExtensionDictionaries(existingExtensions, startupExtensions)) {
IOLog("Error: Failed to merge new extensions into existing set.\n");
keyIterator = OSCollectionIterator::withCollection(
extensionPersonalities);
if (!keyIterator) {
- IOLog("Error: Couldn't allocate iterator to scan
- personalities for %s.\n", extensionName);
+ IOLog("Error: Couldn't allocate iterator to scan"
+ " personalities for %s.\n", extensionName);
LOG_DELAY();
}