src/share/native/sun/font/layout/SunLayoutEngine.cpp

Print this page

        

*** 54,107 **** #define TYPO_MASK 0x7 JNIEXPORT void JNICALL Java_sun_font_SunLayoutEngine_initGVIDs (JNIEnv *env, jclass cls) { ! gvdClass = env->FindClass(gvdClassName); ! if (!gvdClass) { ! JNU_ThrowClassNotFoundException(env, gvdClassName); ! return; ! } ! gvdClass = (jclass)env->NewGlobalRef(gvdClass); ! if (!gvdClass) { ! JNU_ThrowInternalError(env, "could not create global ref"); ! return; ! } ! gvdCountFID = env->GetFieldID(gvdClass, "_count", "I"); ! if (!gvdCountFID) { ! gvdClass = 0; ! JNU_ThrowNoSuchFieldException(env, "_count"); ! return; ! } ! ! gvdFlagsFID = env->GetFieldID(gvdClass, "_flags", "I"); ! if (!gvdFlagsFID) { ! gvdClass = 0; ! JNU_ThrowNoSuchFieldException(env, "_flags"); ! return; ! } ! ! gvdGlyphsFID = env->GetFieldID(gvdClass, "_glyphs", "[I"); ! if (!gvdGlyphsFID) { ! gvdClass = 0; ! JNU_ThrowNoSuchFieldException(env, "_glyphs"); ! return; ! } ! ! gvdPositionsFID = env->GetFieldID(gvdClass, "_positions", "[F"); ! if (!gvdPositionsFID) { ! gvdClass = 0; ! JNU_ThrowNoSuchFieldException(env, "_positions"); ! return; ! } ! gvdIndicesFID = env->GetFieldID(gvdClass, "_indices", "[I"); - if (!gvdIndicesFID) { - gvdClass = 0; - JNU_ThrowNoSuchFieldException(env, "_indices"); - return; - } } int putGV(JNIEnv* env, jint gmask, jint baseIndex, jobject gvdata, const LayoutEngine* engine, int glyphCount) { int count = env->GetIntField(gvdata, gvdCountFID); if (count < 0) { --- 54,70 ---- #define TYPO_MASK 0x7 JNIEXPORT void JNICALL Java_sun_font_SunLayoutEngine_initGVIDs (JNIEnv *env, jclass cls) { ! CHECK_NULL(gvdClass = env->FindClass(gvdClassName)); ! CHECK_NULL(gvdClass = (jclass)env->NewGlobalRef(gvdClass)); ! CHECK_NULL(gvdCountFID = env->GetFieldID(gvdClass, "_count", "I")); ! CHECK_NULL(gvdFlagsFID = env->GetFieldID(gvdClass, "_flags", "I")); ! CHECK_NULL(gvdGlyphsFID = env->GetFieldID(gvdClass, "_glyphs", "[I")); ! CHECK_NULL(gvdPositionsFID = env->GetFieldID(gvdClass, "_positions", "[F")); gvdIndicesFID = env->GetFieldID(gvdClass, "_indices", "[I"); } int putGV(JNIEnv* env, jint gmask, jint baseIndex, jobject gvdata, const LayoutEngine* engine, int glyphCount) { int count = env->GetIntField(gvdata, gvdCountFID); if (count < 0) {
*** 193,203 **** jint len = max - min; jchar buffer[256]; jchar* chars = buffer; if (len > 256) { size_t size = len * sizeof(jchar); ! if (size / sizeof(jchar) != len) { return; } chars = (jchar*)malloc(size); if (chars == 0) { return; --- 156,166 ---- jint len = max - min; jchar buffer[256]; jchar* chars = buffer; if (len > 256) { size_t size = len * sizeof(jchar); ! if (size / sizeof(jchar) != (size_t)len) { return; } chars = (jchar*)malloc(size); if (chars == 0) { return;
*** 218,231 **** --- 181,196 ---- // fprintf(stderr, "layout glyphs: %d x: %g y: %g\n", glyphCount, x, y); fflush(stderr); if (LE_FAILURE(success)) { env->SetIntField(gvdata, gvdCountFID, -1); // flag failure } else { if (putGV(env, gmask, baseIndex, gvdata, engine, glyphCount)) { + if (!(env->ExceptionCheck())) { // !!! hmmm, could use current value in positions array of GVData... putFloat(env, pt, x, y); } } + } if (chars != buffer) { free(chars); }