classpath-patches
[Top][All Lists]
Advanced

[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);
+    }
 }

Attachment: signature.asc
Description: This is a digitally signed message part


reply via email to

[Prev in Thread] Current Thread [Next in Thread]