/*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000,2008-2009 Apple Computer, Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
The linkline must look like this.
*.o -lkmodc++ kmod_info.o -lkmod
*/
+#if __i386__ || __ppc__
#include <mach/mach_types.h>
+#include <libkern/OSKextLib.h>
asm(".constructors_used = 0");
asm(".private_extern .constructors_used");
// This global symbols will be defined by CreateInfo script's info.c file.
extern kmod_start_func_t *_realmain;
+extern kmod_info_t KMOD_INFO_NAME;
// Functions defined in libkern/c++/OSRuntime.cpp
extern kern_return_t OSRuntimeInitializeCPP(kmod_info_t *ki, void *data);
+extern kern_return_t OSRuntimeFinalizeCPP(kmod_info_t *ki, void *data);
+/*********************************************************************
+*********************************************************************/
__private_extern__ kern_return_t _start(kmod_info_t *ki, void *data)
{
- kern_return_t res = OSRuntimeInitializeCPP(ki, data);
+ kern_return_t result = OSRuntimeInitializeCPP(ki, data);
- if (!res && _realmain)
- res = (*_realmain)(ki, data);
+ if ((result == KERN_SUCCESS) && _realmain) {
+ result = (*_realmain)(ki, data);
- return res;
+ /* If _realmain failed, tear down C++.
+ */
+ if (result != KERN_SUCCESS) {
+ (void)OSRuntimeFinalizeCPP(ki, data);
+ }
+ }
+
+ return result;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ const char * OSKextGetCurrentIdentifier(void)
+{
+ return KMOD_INFO_NAME.name;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ const char * OSKextGetCurrentVersionString(void)
+{
+ return KMOD_INFO_NAME.version;
+}
+
+/*********************************************************************
+*********************************************************************/
+__private_extern__ OSKextLoadTag OSKextGetCurrentLoadTag(void)
+{
+ return (OSKextLoadTag)KMOD_INFO_NAME.id;
}
+#endif