diff options
Diffstat (limited to 'platform/java/mupdf_native.c')
-rw-r--r-- | platform/java/mupdf_native.c | 510 |
1 files changed, 250 insertions, 260 deletions
diff --git a/platform/java/mupdf_native.c b/platform/java/mupdf_native.c index f34881f1..9b910d22 100644 --- a/platform/java/mupdf_native.c +++ b/platform/java/mupdf_native.c @@ -710,26 +710,8 @@ static inline jobject to_Image(fz_context *ctx, JNIEnv *env, fz_image *img) return jobj; } -#if 0 -static inline jobject to_Outline(fz_context *ctx, JNIEnv *env, fz_outline *outline) -{ - jobject joutline; - - if (ctx == NULL || outline == NULL) - return NULL; - - joutline = (*env)->NewObject(env, cls_Outline, mid_Outline_init, jlong_cast(outline)); - if (joutline == NULL) - fz_throw_java(ctx, env); - - fz_keep_outline(ctx, outline); - - return joutline; -} -#endif - /* take ownership and don't throw fitz exceptions */ -static inline jobject to_Outline_safe(fz_context *ctx, JNIEnv *env, fz_outline *outline) +static inline jobject to_Outline_safe_own(fz_context *ctx, JNIEnv *env, fz_outline *outline) { jobject joutline; @@ -746,26 +728,8 @@ static inline jobject to_Outline_safe(fz_context *ctx, JNIEnv *env, fz_outline * return joutline; } -#if 0 -static inline jobject to_Page(fz_context *ctx, JNIEnv *env, fz_page *page) -{ - jobject jobj; - - if (ctx == NULL || page == NULL) - return NULL; - - jobj = (*env)->NewObject(env, cls_Page, mid_Page_init, jlong_cast(page)); - if (jobj == NULL) - fz_throw_java(ctx, env); - - fz_keep_page(ctx, page); - - return jobj; -} -#endif - /* take ownership and don't throw fitz exceptions */ -static inline jobject to_Page_safe(fz_context *ctx, JNIEnv *env, fz_page *page) +static inline jobject to_Page_safe_own(fz_context *ctx, JNIEnv *env, fz_page *page) { jobject jobj; @@ -798,26 +762,8 @@ static inline jobject to_Path(fz_context *ctx, JNIEnv *env, const fz_path *path) return jobj; } -#if 0 -static inline jobject to_Pixmap(fz_context *ctx, JNIEnv *env, fz_pixmap *pixmap) -{ - jobject jobj; - - if (ctx == NULL || pixmap == NULL) - return NULL; - - jobj = (*env)->NewObject(env, cls_Pixmap, mid_Pixmap_init, jlong_cast(pixmap)); - if (jobj == NULL) - fz_throw_java(ctx, env); - - fz_keep_pixmap(ctx, pixmap); - - return jobj; -} -#endif - /* take ownership and don't throw fitz exceptions */ -static inline jobject to_Pixmap_safe(fz_context *ctx, JNIEnv *env, fz_pixmap *pixmap) +static inline jobject to_Pixmap_safe_own(fz_context *ctx, JNIEnv *env, fz_pixmap *pixmap) { jobject jobj; @@ -834,18 +780,18 @@ static inline jobject to_Pixmap_safe(fz_context *ctx, JNIEnv *env, fz_pixmap *pi return jobj; } -static inline jobject to_Shade(fz_context *ctx, JNIEnv *env, fz_shade *shade) +static inline jobject to_Shade(fz_context *ctx, JNIEnv *env, fz_shade *shd) { jobject jobj; - if (ctx == NULL || shade == NULL) + if (ctx == NULL || shd == NULL) return NULL; - jobj = (*env)->NewObject(env, cls_Shade, mid_Shade_init, jlong_cast(shade)); + jobj = (*env)->NewObject(env, cls_Shade, mid_Shade_init, jlong_cast(shd)); if (jobj == NULL) fz_throw_java(ctx, env); - fz_keep_shade(ctx, shade); + fz_keep_shade(ctx, shd); return jobj; } @@ -888,6 +834,9 @@ static inline fz_matrix from_Matrix(JNIEnv *env, jobject jmat) { fz_matrix mat; + if (jmat == NULL) + return fz_identity; + mat.a = (*env)->GetFloatField(env, jmat, fid_Matrix_a); mat.b = (*env)->GetFloatField(env, jmat, fid_Matrix_b); mat.c = (*env)->GetFloatField(env, jmat, fid_Matrix_c); @@ -902,6 +851,9 @@ static inline fz_rect from_Rect(JNIEnv *env, jobject jrect) { fz_rect rect; + if (jrect == NULL) + return fz_empty_rect; + rect.x0 = (*env)->GetFloatField(env, jrect, fid_Rect_x0); rect.x1 = (*env)->GetFloatField(env, jrect, fid_Rect_x1); rect.y0 = (*env)->GetFloatField(env, jrect, fid_Rect_y0); @@ -912,12 +864,19 @@ static inline fz_rect from_Rect(JNIEnv *env, jobject jrect) static inline void from_jfloatArray(JNIEnv *env, float *color, jint n, jfloatArray jcolor) { - jsize len = (*env)->GetArrayLength(env, jcolor); - if (len > n) - len = n; - (*env)->GetFloatArrayRegion(env, jcolor, 0, len, color); + jsize len; + + if (jcolor == NULL) + len = 0; + else { + len = (*env)->GetArrayLength(env, jcolor); + if (len > n) + len = n; + (*env)->GetFloatArrayRegion(env, jcolor, 0, len, color); + } + if (len < n) - memset(color+len, 0, (n-len)*sizeof(float)); + memset(color+len, 0, (n - len) * sizeof(float)); } static inline fz_annot *from_Annotation(JNIEnv *env, jobject jobj) @@ -941,7 +900,7 @@ static inline fz_colorspace *from_ColorSpace(JNIEnv *env, jobject jobj) return CAST(fz_colorspace *, (*env)->GetLongField(env, jobj, fid_ColorSpace_pointer)); } -static fz_device *from_Device(JNIEnv *env, jobject jobj, fz_context *ctx) +static fz_device *from_Device(JNIEnv *env, jobject jobj) { if (jobj == NULL) return NULL; @@ -1407,7 +1366,7 @@ JNIEXPORT void JNICALL FUN(Device_finalize)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); if (ctx == NULL || dev == NULL) return; @@ -1476,7 +1435,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_finalize)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *ninfo; if (ctx == NULL || dev == NULL) @@ -1496,7 +1455,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_close)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *info; if (ctx == NULL || dev == NULL) @@ -1512,21 +1471,21 @@ FUN(NativeDevice_close)(JNIEnv *env, jobject self) } JNIEXPORT void JNICALL -FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) +FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_path *path = from_Path(env, jpath); fz_matrix ctm = from_Matrix(env, jctm); fz_colorspace *cs = from_ColorSpace(env, jcs); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || path == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) fz_fill_path(ctx, dev, path, even_odd, &ctm, cs, color, alpha); @@ -1537,22 +1496,22 @@ FUN(NativeDevice_fillPath)(JNIEnv *env, jobject self, jobject jpath, jboolean ev } JNIEXPORT void JNICALL -FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) +FUN(NativeDevice_strokePath)(JNIEnv *env, jobject self, jobject jpath, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_path *path = from_Path(env, jpath); + fz_stroke_state *stroke = from_StrokeState(env, jstroke); fz_matrix ctm = from_Matrix(env, jctm); fz_colorspace *cs = from_ColorSpace(env, jcs); - fz_stroke_state *stroke = from_StrokeState(env, jstroke); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || path == NULL || stroke == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) fz_stroke_path(ctx, dev, path, stroke, &ctm, cs, color, alpha); @@ -1566,12 +1525,12 @@ JNIEXPORT void JNICALL FUN(NativeDevice_clipPath)(JNIEnv *env, jobject self, jobject jpath, jboolean even_odd, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_path *path = from_Path(env, jpath); fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || path == NULL) return; info = lockNativeDevice(env, self); @@ -1587,13 +1546,13 @@ JNIEXPORT void JNICALL FUN(NativeDevice_clipStrokePath)(JNIEnv *env, jobject self, jobject jpath, jobject jstroke, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_path *path = from_Path(env, jpath); - fz_matrix ctm = from_Matrix(env, jctm); fz_stroke_state *stroke = from_StrokeState(env, jstroke); + fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || path == NULL || stroke == NULL) return; info = lockNativeDevice(env, self); @@ -1606,21 +1565,21 @@ FUN(NativeDevice_clipStrokePath)(JNIEnv *env, jobject self, jobject jpath, jobje } JNIEXPORT void JNICALL -FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) +FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_text *text = from_Text(env, jtext); fz_matrix ctm = from_Matrix(env, jctm); fz_colorspace *cs = from_ColorSpace(env, jcs); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || text == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) fz_fill_text(ctx, dev, text, &ctm, cs, color, alpha); @@ -1631,22 +1590,22 @@ FUN(NativeDevice_fillText)(JNIEnv *env, jobject self, jobject jtext, jobject jct } JNIEXPORT void JNICALL -FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) +FUN(NativeDevice_strokeText)(JNIEnv *env, jobject self, jobject jtext, jobject jstroke, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_text *text = from_Text(env, jtext); + fz_stroke_state *stroke = from_StrokeState(env, jstroke); fz_matrix ctm = from_Matrix(env, jctm); fz_colorspace *cs = from_ColorSpace(env, jcs); - fz_stroke_state *stroke = from_StrokeState(env, jstroke); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || text == NULL || stroke == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) fz_stroke_text(ctx, dev, text, stroke, &ctm, cs, color, alpha); @@ -1660,7 +1619,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_clipText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_text *text = from_Text(env, jtext); fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; @@ -1681,13 +1640,13 @@ JNIEXPORT void JNICALL FUN(NativeDevice_clipStrokeText)(JNIEnv *env, jobject self, jobject jtext, jobject jstroke, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); - fz_matrix ctm = from_Matrix(env, jctm); + fz_device *dev = from_Device(env, self); fz_text *text = from_Text(env, jtext); fz_stroke_state *stroke = from_StrokeState(env, jstroke); + fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || text == NULL || stroke == NULL) return; info = lockNativeDevice(env, self); @@ -1703,12 +1662,12 @@ JNIEXPORT void JNICALL FUN(NativeDevice_ignoreText)(JNIEnv *env, jobject self, jobject jtext, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_text *text = from_Text(env, jtext); fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || text == NULL) return; info = lockNativeDevice(env, self); @@ -1721,20 +1680,20 @@ FUN(NativeDevice_ignoreText)(JNIEnv *env, jobject self, jobject jtext, jobject j } JNIEXPORT void JNICALL -FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshade, jobject jctm, float alpha) +FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshd, jobject jctm, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); + fz_shade *shd = from_Shade(env, jshd); fz_matrix ctm = from_Matrix(env, jctm); - fz_shade *shade = from_Shade(env, jshade); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || shd == NULL) return; info = lockNativeDevice(env, self); fz_try(ctx) - fz_fill_shade(ctx, dev, shade, &ctm, alpha); + fz_fill_shade(ctx, dev, shd, &ctm, alpha); fz_always(ctx) unlockNativeDevice(env, info); fz_catch(ctx) @@ -1742,20 +1701,20 @@ FUN(NativeDevice_fillShade)(JNIEnv *env, jobject self, jobject jshade, jobject j } JNIEXPORT void JNICALL -FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, float alpha) +FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); - fz_image *image = from_Image(env, jimg); + fz_device *dev = from_Device(env, self); + fz_image *img = from_Image(env, jimg); fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || img == NULL) return; info = lockNativeDevice(env, self); fz_try(ctx) - fz_fill_image(ctx, dev, image, &ctm, alpha); + fz_fill_image(ctx, dev, img, &ctm, alpha); fz_always(ctx) unlockNativeDevice(env, info); fz_catch(ctx) @@ -1763,24 +1722,24 @@ FUN(NativeDevice_fillImage)(JNIEnv *env, jobject self, jobject jimg, jobject jct } JNIEXPORT void JNICALL -FUN(NativeDevice_fillImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jobject jcs, jfloatArray jcolor, float alpha) +FUN(NativeDevice_fillImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject jctm, jobject jcs, jfloatArray jcolor, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); - fz_image *image = from_Image(env, jimg); + fz_device *dev = from_Device(env, self); + fz_image *img = from_Image(env, jimg); fz_matrix ctm = from_Matrix(env, jctm); fz_colorspace *cs = from_ColorSpace(env, jcs); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || img == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) - fz_fill_image_mask(ctx, dev, image, &ctm, cs, color, alpha); + fz_fill_image_mask(ctx, dev, img, &ctm, cs, color, alpha); fz_always(ctx) unlockNativeDevice(env, info); fz_catch(ctx) @@ -1791,17 +1750,17 @@ JNIEXPORT void JNICALL FUN(NativeDevice_clipImageMask)(JNIEnv *env, jobject self, jobject jimg, jobject jctm) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); - fz_image *image = from_Image(env, jimg); + fz_device *dev = from_Device(env, self); + fz_image *img = from_Image(env, jimg); fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) + if (ctx == NULL || dev == NULL || img == NULL) return; info = lockNativeDevice(env, self); fz_try(ctx) - fz_clip_image_mask(ctx, dev, image, &ctm, NULL); + fz_clip_image_mask(ctx, dev, img, &ctm, NULL); fz_always(ctx) unlockNativeDevice(env, info); fz_catch(ctx) @@ -1812,7 +1771,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_popClip)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *info; if (ctx == NULL || dev == NULL) @@ -1831,17 +1790,17 @@ JNIEXPORT void JNICALL FUN(NativeDevice_beginMask)(JNIEnv *env, jobject self, jobject jrect, jboolean luminosity, jobject jcs, jfloatArray jcolor) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_rect rect = from_Rect(env, jrect); fz_colorspace *cs = from_ColorSpace(env, jcs); float color[FZ_MAX_COLORS]; NativeDeviceInfo *info; - if (ctx == NULL || dev == NULL) - return; - from_jfloatArray(env, color, cs ? cs->n : FZ_MAX_COLORS, jcolor); + if (ctx == NULL || dev == NULL || cs == NULL) + return; + info = lockNativeDevice(env, self); fz_try(ctx) fz_begin_mask(ctx, dev, &rect, luminosity, cs, color); @@ -1855,7 +1814,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_endMask)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *info; if (ctx == NULL || dev == NULL) @@ -1871,10 +1830,10 @@ FUN(NativeDevice_endMask)(JNIEnv *env, jobject self) } JNIEXPORT void JNICALL -FUN(NativeDevice_beginGroup)(JNIEnv *env, jobject self, jobject jrect, jboolean isolated, jboolean knockout, jint blendmode, float alpha) +FUN(NativeDevice_beginGroup)(JNIEnv *env, jobject self, jobject jrect, jboolean isolated, jboolean knockout, jint blendmode, jfloat alpha) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); fz_rect rect = from_Rect(env, jrect); NativeDeviceInfo *info; @@ -1894,7 +1853,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_endGroup)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *info; if (ctx == NULL || dev == NULL) @@ -1910,13 +1869,13 @@ FUN(NativeDevice_endGroup)(JNIEnv *env, jobject self) } JNIEXPORT jint JNICALL -FUN(NativeDevice_beginTile)(JNIEnv *env, jobject self, jobject jarea, jobject jview, float xstep, float ystep, jobject jctm, jint id) +FUN(NativeDevice_beginTile)(JNIEnv *env, jobject self, jobject jarea, jobject jview, jfloat xstep, jfloat ystep, jobject jctm, jint id) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); - fz_matrix ctm = from_Matrix(env, jctm); + fz_device *dev = from_Device(env, self); fz_rect area = from_Rect(env, jarea); fz_rect view = from_Rect(env, jview); + fz_matrix ctm = from_Matrix(env, jctm); NativeDeviceInfo *info; int i = 0; @@ -1938,7 +1897,7 @@ JNIEXPORT void JNICALL FUN(NativeDevice_endTile)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_device *dev = from_Device(env, self, ctx); + fz_device *dev = from_Device(env, self); NativeDeviceInfo *info; if (ctx == NULL || dev == NULL) @@ -1954,10 +1913,10 @@ FUN(NativeDevice_endTile)(JNIEnv *env, jobject self) } JNIEXPORT jlong JNICALL -FUN(DrawDevice_newNative)(JNIEnv *env, jclass self, jobject pixmap_) +FUN(DrawDevice_newNative)(JNIEnv *env, jclass self, jobject jpixmap) { fz_context *ctx = get_context(env); - fz_pixmap *pixmap = from_Pixmap(env, pixmap_); + fz_pixmap *pixmap = from_Pixmap(env, jpixmap); fz_device *device = NULL; if (ctx == NULL || pixmap == NULL) @@ -2102,6 +2061,9 @@ FUN(AndroidDrawDevice_newNative)(JNIEnv *env, jclass self, jobject jbitmap, jint jlong device = 0; int ret; + if (ctx == NULL || jbitmap == NULL) + return 0; + fz_try(ctx) { if ((ret = AndroidBitmap_getInfo(env, jbitmap, &info)) < 0) @@ -2116,9 +2078,8 @@ FUN(AndroidDrawDevice_newNative)(JNIEnv *env, jclass self, jobject jbitmap, jint device = newNativeAndroidDrawDevice(env, self, ctx, jbitmap, info.width, info.height, androidDrawDevice_lock, androidDrawDevice_unlock, pageX0, pageY0, pageX1, pageY1, patchX0, patchY0, patchX1, patchY1); } fz_catch(ctx) - { jni_rethrow(env, ctx); - } + return device; } @@ -2136,7 +2097,7 @@ FUN(Image_newImageFromBitmap)(JNIEnv *env, jobject self, jobject jbitmap, jlong void *pixels; int ret; - if (ctx == NULL) + if (ctx == NULL || jbitmap == NULL) return 0; fz_var(pixmap); @@ -2164,13 +2125,10 @@ FUN(Image_newImageFromBitmap)(JNIEnv *env, jobject self, jobject jbitmap, jlong image = fz_new_image_from_pixmap(ctx, fz_keep_pixmap(ctx, pixmap), fz_keep_image(ctx, mask)); } fz_always(ctx) - { fz_drop_pixmap(ctx, pixmap); - } fz_catch(ctx) - { jni_rethrow(env, ctx); - } + return jlong_cast(image); } #endif @@ -2182,10 +2140,8 @@ FUN(ColorSpace_finalize)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); fz_colorspace *cs = from_ColorSpace(env, self); - if (ctx == NULL || cs == NULL) return; - fz_drop_colorspace(ctx, cs); } @@ -2193,10 +2149,8 @@ JNIEXPORT jint JNICALL FUN(ColorSpace_getNumberOfComponents)(JNIEnv *env, jobject self) { fz_colorspace *cs = from_ColorSpace(env, self); - if (cs == NULL) return 0; - return cs->n; } @@ -2204,6 +2158,8 @@ JNIEXPORT jlong JNICALL FUN(ColorSpace_nativeDeviceGray)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); + if (ctx == NULL) + return 0; return jlong_cast(fz_device_gray(ctx)); } @@ -2211,6 +2167,8 @@ JNIEXPORT jlong JNICALL FUN(ColorSpace_nativeDeviceRGB)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); + if (ctx == NULL) + return 0; return jlong_cast(fz_device_rgb(ctx)); } @@ -2218,6 +2176,8 @@ JNIEXPORT jlong JNICALL FUN(ColorSpace_nativeDeviceBGR)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); + if (ctx == NULL) + return 0; return jlong_cast(fz_device_bgr(ctx)); } @@ -2225,6 +2185,8 @@ JNIEXPORT jlong JNICALL FUN(ColorSpace_nativeDeviceCMYK)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); + if (ctx == NULL) + return 0; return jlong_cast(fz_device_cmyk(ctx)); } @@ -2254,12 +2216,16 @@ FUN(Font_newNative)(JNIEnv *env, jobject self, jstring jname, jint index) name = (*env)->GetStringUTFChars(env, jname, NULL); if (name == NULL) + { + jni_throw(env, FZ_ERROR_GENERIC, "Font constructor failed"); return 0; + } fz_try(ctx) { const char *data; int size; + data = fz_lookup_base14_font(ctx, name, &size); if (data) font = fz_new_font_from_memory(ctx, name, data, size, index, 0); @@ -2267,7 +2233,8 @@ FUN(Font_newNative)(JNIEnv *env, jobject self, jstring jname, jint index) font = fz_new_font_from_file(ctx, name, name, index, 0); } fz_always(ctx) - (*env)->ReleaseStringUTFChars(env, jname, name); + if (name != NULL) + (*env)->ReleaseStringUTFChars(env, jname, name); fz_catch(ctx) jni_rethrow(env, ctx); @@ -2337,19 +2304,18 @@ FUN(Pixmap_finalize)(JNIEnv *env, jobject self) } JNIEXPORT jlong JNICALL -FUN(Pixmap_newNative)(JNIEnv *env, jobject self, jobject colorspace_, jint x, jint y, jint w, jint h, jboolean alpha) +FUN(Pixmap_newNative)(JNIEnv *env, jobject self, jobject jcs, jint x, jint y, jint w, jint h, jboolean alpha) { fz_context *ctx = get_context(env); - fz_colorspace *colorspace = from_ColorSpace(env, colorspace_); - + fz_colorspace *cs = from_ColorSpace(env, jcs); fz_pixmap *pixmap = NULL; - if (ctx == NULL) + if (ctx == NULL || cs == NULL) return 0; fz_try(ctx) { - pixmap = fz_new_pixmap(ctx, colorspace, w, h, alpha); + pixmap = fz_new_pixmap(ctx, cs, w, h, alpha); pixmap->x = x; pixmap->y = y; } @@ -2464,21 +2430,20 @@ FUN(Pixmap_getColorSpace)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); fz_pixmap *pixmap = from_Pixmap(env, self); - - jobject jcolorspace = NULL; + jobject jcs = NULL; if (ctx == NULL || pixmap == NULL) return 0; fz_try(ctx) { - fz_colorspace *colorspace = fz_pixmap_colorspace(ctx, pixmap); - jcolorspace = to_ColorSpace(ctx, env, colorspace); + fz_colorspace *cs = fz_pixmap_colorspace(ctx, pixmap); + jcs = to_ColorSpace(ctx, env, cs); } fz_catch(ctx) jni_rethrow(env, ctx); - return jcolorspace; + return jcs; } JNIEXPORT jbyteArray JNICALL @@ -2487,18 +2452,18 @@ FUN(Pixmap_getSamples)(JNIEnv *env, jobject self) fz_context *ctx = get_context(env); fz_pixmap *pixmap = from_Pixmap(env, self); int size = pixmap->h * pixmap->stride; - jbyteArray ary; + jbyteArray arr; if (ctx == NULL || pixmap == NULL) return NULL; - ary = (*env)->NewByteArray(env, size); - if (!ary) + arr = (*env)->NewByteArray(env, size); + if (arr == NULL) return NULL; - (*env)->SetByteArrayRegion(env, ary, 0, size, (const jbyte *)pixmap->samples); + (*env)->SetByteArrayRegion(env, arr, 0, size, (const jbyte *)pixmap->samples); - return ary; + return arr; } JNIEXPORT jintArray JNICALL @@ -2507,7 +2472,7 @@ FUN(Pixmap_getPixels)(JNIEnv *env, jobject self) fz_context *ctx = get_context(env); fz_pixmap *pixmap = from_Pixmap(env, self); int size = pixmap->w * pixmap->h; - jintArray ary; + jintArray arr; if (ctx == NULL || pixmap == NULL) return NULL; @@ -2524,13 +2489,13 @@ FUN(Pixmap_getPixels)(JNIEnv *env, jobject self) return NULL; } - ary = (*env)->NewIntArray(env, size); - if (!ary) + arr = (*env)->NewIntArray(env, size); + if (arr == NULL) return NULL; - (*env)->SetIntArrayRegion(env, ary, 0, size, (const jint *)pixmap->samples); + (*env)->SetIntArrayRegion(env, arr, 0, size, (const jint *)pixmap->samples); - return ary; + return arr; } /* Path Interface */ @@ -2583,7 +2548,7 @@ FUN(Path_currentPoint)(JNIEnv *env, jobject self) } JNIEXPORT void JNICALL -FUN(Path_moveTo)(JNIEnv *env, jobject self, float x, float y) +FUN(Path_moveTo)(JNIEnv *env, jobject self, jfloat x, jfloat y) { fz_context *ctx = get_context(env); fz_path *path = from_Path(env, self); @@ -2598,7 +2563,7 @@ FUN(Path_moveTo)(JNIEnv *env, jobject self, float x, float y) } JNIEXPORT void JNICALL -FUN(Path_lineTo)(JNIEnv *env, jobject self, float x, float y) +FUN(Path_lineTo)(JNIEnv *env, jobject self, jfloat x, jfloat y) { fz_context *ctx = get_context(env); fz_path *path = from_Path(env, self); @@ -2613,7 +2578,7 @@ FUN(Path_lineTo)(JNIEnv *env, jobject self, float x, float y) } JNIEXPORT void JNICALL -FUN(Path_curveTo)(JNIEnv *env, jobject self, float cx1, float cy1, float cx2, float cy2, float ex, float ey) +FUN(Path_curveTo)(JNIEnv *env, jobject self, jfloat cx1, jfloat cy1, jfloat cx2, jfloat cy2, jfloat ex, jfloat ey) { fz_context *ctx = get_context(env); fz_path *path = from_Path(env, self); @@ -2628,7 +2593,7 @@ FUN(Path_curveTo)(JNIEnv *env, jobject self, float cx1, float cy1, float cx2, fl } JNIEXPORT void JNICALL -FUN(Path_curveToV)(JNIEnv *env, jobject self, float cx, float cy, float ex, float ey) +FUN(Path_curveToV)(JNIEnv *env, jobject self, jfloat cx, jfloat cy, jfloat ex, jfloat ey) { fz_context *ctx = get_context(env); fz_path *path = from_Path(env, self); @@ -2643,7 +2608,7 @@ FUN(Path_curveToV)(JNIEnv *env, jobject self, float cx, float cy, float ex, floa } JNIEXPORT void JNICALL -FUN(Path_curveToY)(JNIEnv *env, jobject self, float cx, float cy, float ex, float ey) +FUN(Path_curveToY)(JNIEnv *env, jobject self, jfloat cx, jfloat cy, jfloat ex, jfloat ey) { fz_context *ctx = get_context(env); fz_path *path = from_Path(env, self); @@ -2716,7 +2681,7 @@ FUN(Path_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm) jobject jrect = NULL; fz_rect rect; - if (ctx == NULL || path == NULL) + if (ctx == NULL || path == NULL || stroke == NULL) return NULL; fz_try(ctx) @@ -2791,7 +2756,7 @@ FUN(Path_walk)(JNIEnv *env, jobject self, jobject obj) fz_path *path = from_Path(env, self); path_walker_state state; - if (path == NULL || obj == NULL) + if (ctx == NULL || path == NULL || obj == NULL) return; state.env = env; @@ -2818,15 +2783,17 @@ FUN(StrokeState_finalize)(JNIEnv *env, jobject self) } JNIEXPORT jlong JNICALL -FUN(Path_newStrokeState)(JNIEnv *env, jobject self, jint startCap, jint dashCap, jint endCap, jint lineJoin, float lineWidth, float miterLimit, float dashPhase, jfloatArray dash) +FUN(Path_newStrokeState)(JNIEnv *env, jobject self, jint startCap, jint dashCap, jint endCap, jint lineJoin, jfloat lineWidth, jfloat miterLimit, jfloat dashPhase, jfloatArray dash) { fz_context *ctx = get_context(env); fz_stroke_state *stroke = NULL; - jsize len = (*env)->GetArrayLength(env, dash); + jsize len = 0; - if (ctx == NULL) + if (ctx == NULL || dash == NULL) return 0; + len = (*env)->GetArrayLength(env, dash); + fz_try(ctx) { stroke = fz_new_stroke_state_with_dash_len(ctx, len); @@ -2902,12 +2869,15 @@ FUN(StrokeState_getDashes)(JNIEnv *env, jobject self) fz_stroke_state *stroke = from_StrokeState(env, self); jfloatArray arr; - if (stroke->dash_len == 0) + if (ctx == NULL || stroke == NULL || stroke->dash_len == 0) return NULL; arr = (*env)->NewFloatArray(env, stroke->dash_len); if (arr == NULL) - fz_throw(ctx, FZ_ERROR_GENERIC, "JNI creation of floatArray failed"); + { + jni_throw(env, FZ_ERROR_GENERIC, "JNI creation of floatArray failed"); + return NULL; + } (*env)->SetFloatArrayRegion(env, arr, 0, stroke->dash_len, &stroke->dash_list[0]); @@ -2973,7 +2943,7 @@ FUN(Text_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm) jobject jrect = NULL; fz_rect rect; - if (ctx == NULL || text == NULL) + if (ctx == NULL || text == NULL || stroke == NULL) return NULL; fz_try(ctx) @@ -2985,14 +2955,14 @@ FUN(Text_getBounds)(JNIEnv *env, jobject self, jobject jstroke, jobject jctm) } JNIEXPORT void JNICALL -FUN(Text_showGlyph)(JNIEnv *env, jobject self, jobject font_, jobject matrix_, jint glyph, jint unicode, jboolean wmode) +FUN(Text_showGlyph)(JNIEnv *env, jobject self, jobject jfont, jobject jtrm, jint glyph, jint unicode, jboolean wmode) { fz_context *ctx = get_context(env); fz_text *text = from_Text(env, self); - fz_font *font = from_Font(env, font_); - fz_matrix trm = from_Matrix(env, matrix_); + fz_font *font = from_Font(env, jfont); + fz_matrix trm = from_Matrix(env, jtrm); - if (ctx == NULL || text == NULL) + if (ctx == NULL || text == NULL || font == NULL) return; fz_try(ctx) @@ -3002,30 +2972,34 @@ FUN(Text_showGlyph)(JNIEnv *env, jobject self, jobject font_, jobject matrix_, j } JNIEXPORT void JNICALL -FUN(Text_showString)(JNIEnv *env, jobject self, jobject font_, jobject matrix_, jstring string_, jboolean wmode) +FUN(Text_showString)(JNIEnv *env, jobject self, jobject jfont, jobject jtrm, jstring jstr, jboolean wmode) { fz_context *ctx = get_context(env); fz_text *text = from_Text(env, self); - fz_font *font = from_Font(env, font_); - fz_matrix trm = from_Matrix(env, matrix_); - const char *string; + fz_font *font = from_Font(env, jfont); + fz_matrix trm = from_Matrix(env, jtrm); + const char *str; - if (ctx == NULL || text == NULL) + if (ctx == NULL || text == NULL || font == NULL || jstr == NULL) return; - string = (*env)->GetStringUTFChars(env, string_, NULL); - if (string == NULL) + str = (*env)->GetStringUTFChars(env, jstr, NULL); + if (str == NULL) + { + jni_throw(env, FZ_ERROR_GENERIC, "showString failed"); return; + } fz_try(ctx) - fz_show_string(ctx, text, font, &trm, string, wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET); + fz_show_string(ctx, text, font, &trm, str, wmode, 0, FZ_BIDI_NEUTRAL, FZ_LANG_UNSET); fz_always(ctx) - (*env)->ReleaseStringUTFChars(env, string_, string); + if (str != NULL) + (*env)->ReleaseStringUTFChars(env, jstr, str); fz_catch(ctx) jni_rethrow(env, ctx); - (*env)->SetFloatField(env, matrix_, fid_Matrix_e, trm.e); - (*env)->SetFloatField(env, matrix_, fid_Matrix_f, trm.f); + (*env)->SetFloatField(env, jtrm, fid_Matrix_e, trm.e); + (*env)->SetFloatField(env, jtrm, fid_Matrix_f, trm.f); } JNIEXPORT void JNICALL @@ -3039,7 +3013,7 @@ FUN(Text_walk)(JNIEnv *env, jobject self, jobject walker) jobject jtrm = NULL; int i; - if (!text->head) + if (ctx == NULL || walker == NULL || text->head == NULL) return; /* TODO: We reuse the same Matrix object for each call, but should we? */ @@ -3094,13 +3068,13 @@ FUN(Image_finalize)(JNIEnv *env, jobject self) } JNIEXPORT jlong JNICALL -FUN(Image_newNativeFromPixmap)(JNIEnv *env, jobject self, jobject pixmap_) +FUN(Image_newNativeFromPixmap)(JNIEnv *env, jobject self, jobject jpixmap) { fz_context *ctx = get_context(env); - fz_pixmap *pixmap = from_Pixmap(env, pixmap_); + fz_pixmap *pixmap = from_Pixmap(env, jpixmap); fz_image *image = NULL; - if (ctx == NULL) + if (ctx == NULL || pixmap == NULL) return 0; fz_try(ctx) @@ -3123,12 +3097,16 @@ FUN(Image_newNativeFromFile)(JNIEnv *env, jobject self, jstring jfilename) filename = (*env)->GetStringUTFChars(env, jfilename, NULL); if (filename == NULL) + { + jni_throw(env, FZ_ERROR_GENERIC, "Image constructor failed"); return 0; + } fz_try(ctx) image = fz_new_image_from_file(ctx, filename); fz_always(ctx) - (*env)->ReleaseStringUTFChars(env, jfilename, filename); + if (filename != NULL) + (*env)->ReleaseStringUTFChars(env, jfilename, filename); fz_catch(ctx) jni_rethrow(env, ctx); @@ -3198,7 +3176,7 @@ FUN(Image_getMask)(JNIEnv *env, jobject self) fz_image *img = from_Image(env, self); jobject jmask = NULL; - if (img == NULL || img->mask == NULL) + if (ctx == NULL || img == NULL || img->mask == NULL) return NULL; fz_try(ctx) @@ -3216,12 +3194,15 @@ FUN(Image_toPixmap)(JNIEnv *env, jobject self) fz_image *img = from_Image(env, self); fz_pixmap *pixmap = NULL; + if (ctx == NULL || img == NULL) + return NULL; + fz_try(ctx) pixmap = fz_get_pixmap_from_image(ctx, img, NULL, NULL, NULL, NULL); fz_catch(ctx) jni_rethrow(env, ctx); - return to_Pixmap_safe(ctx, env, pixmap); + return to_Pixmap_safe_own(ctx, env, pixmap); } /* Outline interface */ @@ -3256,13 +3237,13 @@ JNIEXPORT void JNICALL FUN(Annotation_run)(JNIEnv *env, jobject self, jobject jdev, jobject jctm, jobject jcookie) { fz_context *ctx = get_context(env); + fz_annot *annot = from_Annotation(env, self); + fz_device *dev = from_Device(env, jdev); fz_matrix ctm = from_Matrix(env, jctm); fz_cookie *cookie= from_Cookie(env, jcookie); - fz_device *dev = from_Device(env, jdev, ctx); - fz_annot *annot = from_Annotation(env, self); NativeDeviceInfo *info; - if (ctx == NULL || self == NULL || jdev == NULL) + if (ctx == NULL || annot == NULL || dev == NULL) return; info = lockNativeDevice(env, jdev); @@ -3278,16 +3259,13 @@ JNIEXPORT jlong JNICALL FUN(Annotation_advance)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_annot *annot = NULL; + fz_annot *annot = from_Annotation(env, self); - if (ctx == NULL || self == NULL) + if (ctx == NULL || annot == NULL) return 0; fz_try(ctx) - { - annot = from_Annotation(env, self); annot = fz_next_annot(ctx, annot); - } fz_catch(ctx) jni_rethrow(env, ctx); @@ -3326,7 +3304,7 @@ JNIEXPORT jlong JNICALL FUN(Document_newNativeWithPath)(JNIEnv *env, jobject self, jstring jfilename) { fz_context *ctx = get_context(env); - fz_document *document = NULL; + fz_document *doc = NULL; const char *filename = NULL; if (ctx == NULL || jfilename == NULL) @@ -3334,30 +3312,34 @@ FUN(Document_newNativeWithPath)(JNIEnv *env, jobject self, jstring jfilename) filename = (*env)->GetStringUTFChars(env, jfilename, NULL); if (filename == NULL) + { + jni_throw(env, FZ_ERROR_GENERIC, "Document constructor failed"); return 0; + } fz_try(ctx) - document = fz_open_document(ctx, filename); + doc = fz_open_document(ctx, filename); fz_always(ctx) - (*env)->ReleaseStringUTFChars(env, jfilename, filename); + if (filename != NULL) + (*env)->ReleaseStringUTFChars(env, jfilename, filename); fz_catch(ctx) jni_rethrow(env, ctx); - return jlong_cast(document); + return jlong_cast(doc); } JNIEXPORT jboolean JNICALL FUN(Document_needsPassword)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); + fz_document *doc = from_Document(env, self); int okay = 0; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL) return 0; fz_try(ctx) - okay = fz_needs_password(ctx, document); + okay = fz_needs_password(ctx, doc); fz_catch(ctx) jni_rethrow(env, ctx); @@ -3368,11 +3350,11 @@ JNIEXPORT jboolean JNICALL FUN(Document_authenticatePassword)(JNIEnv *env, jobject self, jstring jpassword) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); + fz_document *doc = from_Document(env, self); const char *password = NULL; int okay = 0; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL) return 0; if (jpassword == NULL) @@ -3381,13 +3363,16 @@ FUN(Document_authenticatePassword)(JNIEnv *env, jobject self, jstring jpassword) { password = (*env)->GetStringUTFChars(env, jpassword, NULL); if (!password) + { + jni_throw(env, FZ_ERROR_GENERIC, "autenticatePassword failed"); return 0; + } } fz_try(ctx) - okay = fz_authenticate_password(ctx, document, password); + okay = fz_authenticate_password(ctx, doc, password); fz_always(ctx) - if (jpassword != NULL) + if (password != NULL) (*env)->ReleaseStringUTFChars(env, jpassword, password); fz_catch(ctx) jni_rethrow(env, ctx); @@ -3399,14 +3384,14 @@ JNIEXPORT jint JNICALL FUN(Document_countPages)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); + fz_document *doc = from_Document(env, self); int count = 0; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL) return 0; fz_try(ctx) - count = fz_count_pages(ctx, document); + count = fz_count_pages(ctx, doc); fz_catch(ctx) jni_rethrow(env, ctx); @@ -3417,39 +3402,43 @@ JNIEXPORT jobject JNICALL FUN(Document_loadPage)(JNIEnv *env, jobject self, jint number) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); + fz_document *doc = from_Document(env, self); fz_page *page = NULL; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL) return NULL; fz_try(ctx) - page = fz_load_page(ctx, document, number); + page = fz_load_page(ctx, doc, number); fz_catch(ctx) jni_rethrow(env, ctx); - return to_Page_safe(ctx, env, page); + return to_Page_safe_own(ctx, env, page); } JNIEXPORT jobject JNICALL FUN(Document_getMetaData)(JNIEnv *env, jobject self, jstring jkey) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); - const char *ckey; + fz_document *doc = from_Document(env, self); + const char *key; char info[256]; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL || jkey == NULL) return NULL; - ckey = (*env)->GetStringUTFChars(env, jkey, NULL); - if (!ckey) + key = (*env)->GetStringUTFChars(env, jkey, NULL); + if (!key) + { + jni_throw(env, FZ_ERROR_GENERIC, "getMetaData failed"); return NULL; + } fz_try(ctx) - fz_lookup_metadata(ctx, document, ckey, info, sizeof info); + fz_lookup_metadata(ctx, doc, key, info, sizeof info); fz_always(ctx) - (*env)->ReleaseStringUTFChars(env, jkey, ckey); + if (key != NULL) + (*env)->ReleaseStringUTFChars(env, jkey, key); fz_catch(ctx) { jni_rethrow(env, ctx); @@ -3463,11 +3452,11 @@ JNIEXPORT jboolean JNICALL FUN(Document_isUnencryptedPDF)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); - pdf_document *idoc = pdf_specifics(ctx, document); + fz_document *doc = from_Document(env, self); + pdf_document *idoc = pdf_specifics(ctx, doc); int cryptVer; - if (idoc == NULL) + if (ctx == NULL || idoc == NULL) return JNI_FALSE; // Not a PDF cryptVer = pdf_crypt_version(ctx, idoc); @@ -3478,20 +3467,20 @@ JNIEXPORT jobject JNICALL FUN(Document_loadOutline)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_document *document = from_Document(env, self); + fz_document *doc = from_Document(env, self); fz_outline *outline = NULL; - if (ctx == NULL || document == NULL) + if (ctx == NULL || doc == NULL) return NULL; fz_var(outline); fz_try(ctx) - outline = fz_load_outline(ctx, document); + outline = fz_load_outline(ctx, doc); fz_catch(ctx) jni_rethrow(env, ctx); - return to_Outline_safe(ctx, env, outline); + return to_Outline_safe_own(ctx, env, outline); } /* Page interface */ @@ -3509,21 +3498,23 @@ FUN(Page_finalize)(JNIEnv *env, jobject self) } JNIEXPORT jobject JNICALL -FUN(Page_toPixmap)(JNIEnv *env, jobject self, jobject ctm_, jobject colorspace_, jboolean alpha) +FUN(Page_toPixmap)(JNIEnv *env, jobject self, jobject jctm, jobject jcs, jboolean alpha) { fz_context *ctx = get_context(env); fz_page *page = from_Page(env, self); - fz_colorspace *colorspace = from_ColorSpace(env, colorspace_); - fz_matrix ctm = from_Matrix(env, ctm_); - + fz_colorspace *cs = from_ColorSpace(env, jcs); + fz_matrix ctm = from_Matrix(env, jctm); fz_pixmap *pixmap = NULL; + if (ctx == NULL || page == NULL || cs == NULL) + return NULL; + fz_try(ctx) - pixmap = fz_new_pixmap_from_page(ctx, page, &ctm, colorspace, alpha); + pixmap = fz_new_pixmap_from_page(ctx, page, &ctm, cs, alpha); fz_catch(ctx) jni_rethrow(env, ctx); - return to_Pixmap_safe(ctx, env, pixmap); + return to_Pixmap_safe_own(ctx, env, pixmap); } JNIEXPORT jobject JNICALL @@ -3549,13 +3540,13 @@ JNIEXPORT void JNICALL FUN(Page_run)(JNIEnv *env, jobject self, jobject jdev, jobject jctm, jobject jcookie) { fz_context *ctx = get_context(env); + fz_page *page = from_Page(env, self); + fz_device *dev = from_Device(env, jdev); fz_matrix ctm = from_Matrix(env, jctm); fz_cookie *cookie = from_Cookie(env, jcookie); - fz_device *dev = from_Device(env, jdev, ctx); - fz_page *page = from_Page(env, self); NativeDeviceInfo *info; - if (ctx == NULL || self == NULL || jdev == NULL) + if (ctx == NULL || page == NULL || dev == NULL) return; info = lockNativeDevice(env, jdev); @@ -3571,10 +3562,10 @@ JNIEXPORT void JNICALL FUN(Page_runPageContents)(JNIEnv *env, jobject self, jobject jdev, jobject jctm, jobject jcookie) { fz_context *ctx = get_context(env); + fz_page *page = from_Page(env, self); + fz_device *dev = from_Device(env, jdev); fz_matrix ctm = from_Matrix(env, jctm); fz_cookie *cookie = from_Cookie(env, jcookie); - fz_device *dev = from_Device(env, jdev, ctx); - fz_page *page = from_Page(env, self); NativeDeviceInfo *info; if (ctx == NULL || page == NULL || dev == NULL) @@ -3700,7 +3691,6 @@ JNIEXPORT jlong JNICALL FUN(DisplayList_newNative)(JNIEnv *env, jobject self) { fz_context *ctx = get_context(env); - fz_display_list *list = NULL; if (ctx == NULL) @@ -3719,14 +3709,14 @@ FUN(DisplayList_run)(JNIEnv *env, jobject self, jobject jdev, jobject jctm, jobj { fz_context *ctx = get_context(env); fz_display_list *list = from_DisplayList(env, self); + fz_device *dev = from_Device(env, jdev); fz_matrix ctm = from_Matrix(env, jctm); fz_cookie *cookie = from_Cookie(env, jcookie); - fz_device *dev = from_Device(env, jdev, ctx); NativeDeviceInfo *info; fz_rect local_rect; fz_rect *rect = NULL; - if (ctx == NULL || self == NULL || jdev == NULL || list == NULL) + if (ctx == NULL || list == NULL || dev == NULL) return; /* Use a scissor rectangle if one is supplied */ |