1/* 2 * kextload_main.h 3 * kext_tools 4 * 5 * Created by Nik Gervae on 11/08/08. 6 * Copyright 2008 Apple Inc. All rights reserved. 7 * 8 */ 9#ifndef _KEXTLOAD_MAIN_H 10#define _KEXTLOAD_MAIN_H 11 12#include <CoreFoundation/CoreFoundation.h> 13#include <IOKit/kext/OSKext.h> 14 15#include <getopt.h> 16#include <sysexits.h> 17 18#include <IOKit/kext/OSKext.h> 19 20#include "kext_tools_util.h" 21 22#pragma mark Basic Types & Constants 23/******************************************************************************* 24* Constants 25*******************************************************************************/ 26 27enum { 28 kKextloadExitOK = EX_OK, 29 30 kKextloadExitUnspecified = 10, 31 32 // don't actually exit with this, it's just a sentinel value 33 kKextloadExitHelp = 33, 34}; 35 36#pragma mark Command-line Option Definitions 37/******************************************************************************* 38* Command-line options. This data is used by getopt_long_only(). 39* 40* Options common to all kext tools are in kext_tools_util.h. 41*******************************************************************************/ 42#define kOptNameDependency "dependency" 43 44#define kOptNameTests "print-diagnostics" 45 46// Obsolete options that might be used for a production load 47#define kOptNameNoCaches "no-caches" 48#define kOptNameNoLoadedCheck "no-loaded-check" 49#define kOptNameTests "print-diagnostics" 50 51#define kOptNameLongindexHack "________" 52 53#define kOptDependency 'd' 54#define kOptRepository 'r' 55 56// Obsolete options that might be used for a production load 57#define kOptNoCaches 'c' 58#define kOptNoLoadedCheck 'D' 59#define kOptTests 't' 60 61/* Options with no single-letter variant. */ 62// Do not use -1, that's getopt() end-of-args return value 63// and can cause confusion 64#define kLongOptLongindexHack (-2) 65#define kLongOptArch (-3) 66 67#define kOptChars "b:cd:Dhqr:tv" 68 69int longopt = 0; 70 71struct option sOptInfo[] = { 72 { kOptNameLongindexHack, no_argument, &longopt, kLongOptLongindexHack }, 73 { kOptNameHelp, no_argument, NULL, kOptHelp }, 74 { kOptNameBundleIdentifier, required_argument, NULL, kOptBundleIdentifier }, 75 { kOptNameDependency, required_argument, NULL, kOptDependency }, 76 { kOptNameRepository, required_argument, NULL, kOptRepository }, 77 78 { kOptNameQuiet, no_argument, NULL, kOptQuiet }, 79 { kOptNameVerbose, optional_argument, NULL, kOptVerbose }, 80 { kOptNameTests, no_argument, NULL, kOptTests }, 81 82 // Obsolete options that might be used for a production load 83 { kOptNameNoCaches, no_argument, NULL, kOptNoCaches }, 84 { kOptNameNoLoadedCheck, no_argument, NULL, kOptNoLoadedCheck }, 85 { kOptNameTests, no_argument, NULL, kOptTests }, 86 87 { NULL, 0, NULL, 0 } // sentinel to terminate list 88}; 89 90typedef struct { 91 CFMutableArrayRef kextIDs; // -b; must release 92 CFMutableArrayRef dependencyURLs; // -d; must release 93 CFMutableArrayRef repositoryURLs; // -r; must release 94 CFMutableArrayRef kextURLs; // kext args; must release 95 CFMutableArrayRef scanURLs; // all URLs to scan 96 CFArrayRef allKexts; // all opened kexts 97} KextloadArgs; 98 99#pragma mark Function Prototypes 100/******************************************************************************* 101* Function Prototypes 102*******************************************************************************/ 103 104ExitStatus readArgs( 105 int argc, 106 char * const * argv, 107 KextloadArgs * toolArgs); 108ExitStatus checkArgs(KextloadArgs * toolArgs); 109 110ExitStatus checkAccess(void); 111 112ExitStatus loadKextsViaKextd(KextloadArgs * toolArgs); 113ExitStatus loadKextsIntoKernel(KextloadArgs * toolArgs); 114 115ExitStatus exitStatusForOSReturn(OSReturn osReturn); 116 117static void usage(UsageLevel usageLevel); 118 119#endif /* _KEXTLOAD_MAIN_H */ 120