Hmm.... I think I have to agree with you... you are right. Commenting it in didn't give a compiler or linkage error, and it made it work. I'm happy at the moment and tired of the debugging process, but I'll give it more thought later.

Op 03-03-16 om 16:36 schreef Mario Torre:
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

Reply via email to