On Thu, Mar 3, 2016 at 2:48 PM, Maurice <i...@cuhka.com> wrote: > At the moment the embedded environment I'm using is not able to use > downloaded or external supplied fonts. I've traced through the system and > found that it looks like it fails in pango.c FcConfigAppFontAddFile, at > least OSPango.FcConfigAppFontAddFile returns false, thus propagating a null > all the way up. > > Checking the pango.c file I noticed something very interesting: > JNIEXPORT jboolean JNICALL OS_NATIVE(FcConfigAppFontAddFile) > (JNIEnv *env, jclass that, jlong arg0, jstring arg1) > { > static void *fp = NULL; > if (!fp) { > void* handle = dlopen(LIB_FONTCONFIG, RTLD_LAZY); > if (handle) fp = dlsym(handle, "FcConfigAppFontAddFile"); > } > jboolean rc = 0; > if (arg1) { > const char *text = (*env)->GetStringUTFChars(env, arg1, NULL); > if (text) { > // rc = (jboolean)FcConfigAppFontAddFile(arg0, text); > if (fp) { > rc = (jboolean)((jboolean (*)(jlong, const char *))fp)(arg0, > text); > } > (*env)->ReleaseStringUTFChars(env, arg1, text); > } > } > return rc; > } > > Yes, you see it correctly! The line that actually should register the font
Pointer to functions make me blind too, but If I'm not reading it wrong, I think this is not a commented code call, it's meant to tell what the code below it does (apparently, it made blind also the author!): FcConfigAppFontAddFile is dloaded into fp, so this totally incomprehensible line: ((jboolean (*)(jlong, const char *))fp)(arg0, text); it's just casting fp to a function that returns a jboolean and takes a jlong and a const char array as argument, hence it becomes again: (jboolean)FcConfigAppFontAddFile(arg0, text); Cheers, Mario