[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[cp-patches] Re: GdkPixbufDecoder fix
From: |
Mark Wielaard |
Subject: |
[cp-patches] Re: GdkPixbufDecoder fix |
Date: |
Thu, 23 Jun 2005 18:16:23 +0200 |
On Thu, 2005-06-23 at 01:31 +0200, Mark Wielaard wrote:
> 2005-06-22 Mark Wielaard <address@hidden>
>
> * gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
> (pumpBytes): Throws IOException.
> (pumpDone): New native method.
> (produce): Call pumpDone().
> * include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h: Regenerated.
> * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
> (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone): New method.
> (Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes): Check for
> errors on gdk_pixbuf_loader_write.
I got yelled at on irc for forgetting the actual patch.
Apologies. Here it is.
Index: gnu/java/awt/peer/gtk/GdkPixbufDecoder.java
===================================================================
RCS file:
/cvsroot/classpath/classpath/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java,v
retrieving revision 1.12
diff -u -r1.12 GdkPixbufDecoder.java
--- gnu/java/awt/peer/gtk/GdkPixbufDecoder.java 16 Feb 2005 13:59:03 -0000
1.12
+++ gnu/java/awt/peer/gtk/GdkPixbufDecoder.java 22 Jun 2005 23:30:27 -0000
@@ -90,7 +90,8 @@
// interface to GdkPixbuf
native void initState ();
- native void pumpBytes (byte[] bytes, int len);
+ native void pumpBytes (byte[] bytes, int len) throws IOException;
+ native void pumpDone () throws IOException;
native void finish ();
static native void streamImage(int[] bytes, String format, int width, int
height, boolean hasAlpha, DataOutput sink);
@@ -165,6 +166,7 @@
initState();
while ((len = is.read (bytes)) != -1)
pumpBytes (bytes, len);
+ pumpDone();
for (int i = 0; i < curr.size (); i++)
{
Index: include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
===================================================================
RCS file:
/cvsroot/classpath/classpath/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h,v
retrieving revision 1.5
diff -u -r1.5 gnu_java_awt_peer_gtk_GdkPixbufDecoder.h
--- include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h 11 Jan 2005 22:07:32
-0000 1.5
+++ include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h 22 Jun 2005 23:30:27
-0000
@@ -13,6 +13,7 @@
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initStaticState (JNIEnv *env,
jclass);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_initState
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
(JNIEnv *env, jobject, jbyteArray, jint);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_finish
(JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_streamImage
(JNIEnv *env, jclass, jintArray, jstring, jint, jint, jboolean, jobject);
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
===================================================================
RCS file:
/cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c,v
retrieving revision 1.13
diff -u -r1.13 gnu_java_awt_peer_gtk_GdkPixbufDecoder.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c 21 May
2005 19:04:40 -0000 1.13
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkPixbufDecoder.c 22 Jun
2005 23:30:27 -0000
@@ -1,5 +1,5 @@
/* gdkpixbufdecoder.c
- Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -41,6 +41,7 @@
#include <gdk-pixbuf/gdk-pixbuf-loader.h>
#include <jni.h>
+#include <jcl.h>
#include "native_state.h"
#include "gnu_java_awt_peer_gtk_GdkPixbufDecoder.h"
@@ -72,8 +73,7 @@
jint width, height;
GdkPixbuf *pixbuf = gdk_pixbuf_loader_get_pixbuf (loader);
- if (pixbuf == NULL)
- return;
+ g_assert (pixbuf != NULL);
width = gdk_pixbuf_get_width (pixbuf);
height = gdk_pixbuf_get_height (pixbuf);
@@ -311,6 +311,26 @@
gdk_pixbuf_loader_close (loader, NULL);
g_object_unref (loader);
gdk_threads_leave ();
+
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpDone
+(JNIEnv *env, jobject obj)
+{
+ GError *err = NULL;
+ GdkPixbufLoader *loader = (GdkPixbufLoader *)NSA_GET_PB_PTR (env, obj);
+ g_assert (loader != NULL);
+
+ gdk_threads_enter ();
+ gdk_pixbuf_loader_close (loader, &err);
+ gdk_threads_leave ();
+
+ if (err != NULL)
+ {
+ JCL_ThrowException (env, "java/io/IOException", err->message);
+ g_error_free (err);
+ }
}
struct stream_save_request
@@ -423,15 +443,17 @@
(*env)->ReleaseIntArrayElements (env, jarr, ints, 0);
}
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GdkPixbufDecoder_pumpBytes
(JNIEnv *env, jobject obj, jbyteArray jarr, jint len)
{
GdkPixbufLoader *loader = NULL;
jbyte *bytes = NULL;
+ GError *err = NULL;
- if (len < 1)
- return;
+ g_assert (len >= 1);
+ g_assert (jarr != NULL);
bytes = (*env)->GetByteArrayElements (env, jarr, NULL);
g_assert (bytes != NULL);
@@ -439,8 +461,14 @@
g_assert (loader != NULL);
gdk_threads_enter ();
- gdk_pixbuf_loader_write (loader, (const guchar *) bytes, len, NULL);
+ gdk_pixbuf_loader_write (loader, (const guchar *) bytes, len, &err);
gdk_threads_leave ();
(*env)->ReleaseByteArrayElements (env, jarr, bytes, 0);
+
+ if (err != NULL)
+ {
+ JCL_ThrowException (env, "java/io/IOException", err->message);
+ g_error_free (err);
+ }
}
signature.asc
Description: This is a digitally signed message part