1 /* 2 * Copyright (c) 2012, 2019, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #import <Cocoa/Cocoa.h> 27 #include <dlfcn.h> 28 #include <unistd.h> 29 30 typedef bool (*start_launcher)(int argc, char* argv[]); 31 typedef void (*stop_launcher)(); 32 33 int main(int argc, char *argv[]) { 34 #if !__has_feature(objc_arc) 35 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 36 #endif 37 38 int result = 1; 39 40 @try { 41 setlocale(LC_ALL, "en_US.utf8"); 42 43 NSBundle *mainBundle = [NSBundle mainBundle]; 44 NSString *mainBundlePath = [mainBundle bundlePath]; 45 NSString *libraryName = [mainBundlePath stringByAppendingPathComponent:@"Contents/MacOS/libapplauncher.dylib"]; 46 47 void* library = dlopen([libraryName UTF8String], RTLD_LAZY); 48 49 if (library == NULL) { 50 NSLog(@"%@ not found.\n", libraryName); 51 } 52 53 if (library != NULL) { 54 start_launcher start = 55 (start_launcher)dlsym(library, "start_launcher"); 56 stop_launcher stop = 57 (stop_launcher)dlsym(library, "stop_launcher"); 58 59 if (start != NULL && stop != NULL) { 60 if (start(argc, argv) == true) { 61 result = 0; 62 stop(); 63 } 64 } else if (start == NULL) { 65 NSLog(@"start_launcher not found in %@.\n", libraryName); 66 } else { 67 NSLog(@"stop_launcher not found in %@.\n", libraryName); 68 } 69 dlclose(library); 70 } 71 } @catch (NSException *exception) { 72 NSLog(@"%@: %@", exception, [exception callStackSymbols]); 73 result = 1; 74 } 75 76 #if !__has_feature(objc_arc) 77 [pool drain]; 78 #endif 79 80 return result; 81 }