src/share/native/sun/font/layout/SunLayoutEngine.cpp
Print this page
@@ -54,54 +54,17 @@
#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;
- }
-
+ 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");
- 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) {
@@ -193,11 +156,11 @@
jint len = max - min;
jchar buffer[256];
jchar* chars = buffer;
if (len > 256) {
size_t size = len * sizeof(jchar);
- if (size / sizeof(jchar) != len) {
+ if (size / sizeof(jchar) != (size_t)len) {
return;
}
chars = (jchar*)malloc(size);
if (chars == 0) {
return;
@@ -218,14 +181,16 @@
// 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);
}