summaryrefslogtreecommitdiffstats
path: root/make/joal-CustomCCode.c
diff options
context:
space:
mode:
Diffstat (limited to 'make/joal-CustomCCode.c')
-rwxr-xr-xmake/joal-CustomCCode.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/make/joal-CustomCCode.c b/make/joal-CustomCCode.c
new file mode 100755
index 0000000..a6d0bb6
--- /dev/null
+++ b/make/joal-CustomCCode.c
@@ -0,0 +1,40 @@
+#if defined(_MSC_VER) /* Windows */
+#include <windows.h>
+static HMODULE oalModule = NULL;
+#endif
+
+/* Java->C glue code:
+ * Java package: net.java.games.joal.impl.ALImpl
+ * Java method: long dynamicLookupFunction0(java.lang.String fname)
+ * C function: ALproc alGetProcAddress(const ALchar * fname);
+ */
+JNIEXPORT jlong JNICALL
+Java_net_java_games_joal_impl_ALImpl_dynamicLookupFunction0__Ljava_lang_String_2(JNIEnv *env, jobject _unused, jstring fname) {
+ const char* _UTF8fname = NULL;
+ ALproc _res;
+ if (fname != NULL) {
+ if (fname != NULL) {
+ _UTF8fname = (*env)->GetStringUTFChars(env, fname, (jboolean*)NULL);
+ if (_UTF8fname == NULL) {
+ (*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/OutOfMemoryError"),
+ "Failed to get UTF-8 chars for argument \"fname\" in native dispatcher for \"alGetProcAddress\"");
+ return 0;
+ }
+ }
+ }
+#if defined(_MSC_VER) /* Windows */
+ if (oalModule == NULL) {
+ oalModule = GetModuleHandle("OpenAL32");
+ }
+ _res = (ALproc) GetProcAddress(oalModule, _UTF8fname);
+/* Looks like we can use dlsym on OS X as well as other Unix flavors */
+/* #elif defined(__APPLE__) && defined(__MACH__) */ /* OS X */
+#else /* Assume vanilla Unix */
+ _res = (ALproc) dlsym(RTLD_DEFAULT, _UTF8fname);
+#endif
+
+ if (fname != NULL) {
+ (*env)->ReleaseStringUTFChars(env, fname, _UTF8fname);
+ }
+ return (jlong) (intptr_t) _res;
+}