51F0EB6105C86C6B00E6DF1B,
6560A4CF04B3B3E7008AE952,
6560A63D04B3B69F008AE952,
- 51856D980562F158008B9D83,
);
isa = PBXGroup;
name = Frameworks;
650B68DA0639033F009D42DE,
51863FC506542D3100E9E8DD,
517EF37406D695930007C1BA,
+ 8442A378074175C2000AE2ED,
);
isa = PBXSourcesBuildPhase;
runOnlyForDeploymentPostprocessing = 0;
files = (
6560A4D004B3B3E7008AE952,
6560A63E04B3B69F008AE952,
- 51856D990562F158008B9D83,
51F0EB6205C86C6B00E6DF1B,
51F0EC0805C86C9A00E6DF1B,
9322A00406C341D3009067BB,
518CF93805C72271003CF905,
51F0EC9605C88DC700E6DF1B,
51F0EC9705C88DC700E6DF1B,
+ 8442A376074175C2000AE2ED,
);
isa = PBXGroup;
name = bindings;
refType = 4;
sourceTree = "<group>";
};
- 51856D980562F158008B9D83 = {
- isa = PBXFileReference;
- lastKnownFileType = wrapper.framework;
- name = JavaVM.framework;
- path = /System/Library/Frameworks/JavaVM.framework;
- refType = 0;
- sourceTree = "<absolute>";
- };
- 51856D990562F158008B9D83 = {
- fileRef = 51856D980562F158008B9D83;
- isa = PBXBuildFile;
- settings = {
- };
- };
51863F6F065420E800E9E8DD = {
fileEncoding = 30;
isa = PBXFileReference;
//842
//843
//844
+ 8442A376074175C2000AE2ED = {
+ fileEncoding = 4;
+ isa = PBXFileReference;
+ lastKnownFileType = sourcecode.c.c;
+ name = softlinking.c;
+ path = bindings/softlinking.c;
+ refType = 4;
+ sourceTree = "<group>";
+ };
+ 8442A378074175C2000AE2ED = {
+ fileRef = 8442A376074175C2000AE2ED;
+ isa = PBXBuildFile;
+ settings = {
+ };
+ };
84ABF1DE070B628C00A3AC05 = {
fileEncoding = 4;
isa = PBXFileReference;
--- /dev/null
+/*
+ * Copyright (C) 2003 Apple Computer, Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <JavaVM/jni.h>
+#import <mach-o/dyld.h>
+
+const struct mach_header *loadFramework(const char *execPath);
+void *getFunctionPointer(const struct mach_header *header, const char *functionName);
+
+const struct mach_header *loadFramework(const char *execPath)
+{
+ return NSAddImage(execPath, NSADDIMAGE_OPTION_WITH_SEARCHING | NSADDIMAGE_OPTION_MATCH_FILENAME_BY_INSTALLNAME);
+}
+
+void *getFunctionPointer(const struct mach_header *header, const char *functionName)
+{
+ NSSymbol symbol = NSLookupSymbolInImage(header, functionName, NSLOOKUPSYMBOLINIMAGE_OPTION_BIND);
+ if (symbol!=NULL) {
+ return NSAddressOfSymbol(symbol);
+ }
+ return 0;
+}
+
+jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs)
+{
+ static const struct mach_header *header = 0;
+ if (!header) {
+ header = loadFramework("/System/Library/Frameworks/JavaVM.framework/JavaVM");
+ }
+ static jint(*functionPointer)(JavaVM **, jsize, jsize *) = 0;
+ if (!functionPointer) {
+ functionPointer = getFunctionPointer(header, "_JNI_GetCreatedJavaVMs");
+ }
+ return functionPointer(vmBuf, bufLen, nVMs);
+}