[maemo-commits] [maemo-commits] r11909 - in projects/haf/trunk/hildon-home-webshortcut: . plugin

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Mon May 28 17:55:55 EEST 2007
Author: jobi
Date: 2007-05-28 17:55:54 +0300 (Mon, 28 May 2007)
New Revision: 11909

Modified:
   projects/haf/trunk/hildon-home-webshortcut/ChangeLog
   projects/haf/trunk/hildon-home-webshortcut/plugin/hhwsloader.c
   projects/haf/trunk/hildon-home-webshortcut/plugin/hildon-home-webshortcut.c
Log:

2007-05-28  Johan Bilien  <johan.bilien at nokia.com>

	* plugin/hhwsloader.c:
	- track errors on gdk_pixbuf_loader_close, which allows to detect
	troncated images
	- treat GDK_PIXBUF_ERROR_FAILED as corrupted images



Modified: projects/haf/trunk/hildon-home-webshortcut/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-home-webshortcut/ChangeLog	2007-05-28 14:47:41 UTC (rev 11908)
+++ projects/haf/trunk/hildon-home-webshortcut/ChangeLog	2007-05-28 14:55:54 UTC (rev 11909)
@@ -1,5 +1,12 @@
 2007-05-28  Johan Bilien  <johan.bilien at nokia.com>
 
+	* plugin/hhwsloader.c:
+	- track errors on gdk_pixbuf_loader_close, which allows to detect
+	troncated images
+	- treat GDK_PIXBUF_ERROR_FAILED as corrupted images
+
+2007-05-28  Johan Bilien  <johan.bilien at nokia.com>
+
 	* plugin/hildon-home-webshortcut.c:
 	- add file dialog filter back, removed by accident
 

Modified: projects/haf/trunk/hildon-home-webshortcut/plugin/hhwsloader.c
===================================================================
--- projects/haf/trunk/hildon-home-webshortcut/plugin/hhwsloader.c	2007-05-28 14:47:41 UTC (rev 11908)
+++ projects/haf/trunk/hildon-home-webshortcut/plugin/hhwsloader.c	2007-05-28 14:55:54 UTC (rev 11909)
@@ -410,7 +410,7 @@
   mmc_mount_point = g_getenv (HHWS_LOADER_ENV_MMC_MOUNTPOINT);
   mmc_mount_point_uri = g_strdup_printf ("file://%s", mmc_mount_point);
   mmc_internal_mount_point = g_getenv (HHWS_LOADER_ENV_INTERNAL_MMC_MOUNTPOINT);
-  mmc_internal_mount_point_uri = 
+  mmc_internal_mount_point_uri =
       g_strdup_printf ("file://%s", mmc_internal_mount_point);
 
   if (mmc_mount_point &&
@@ -425,16 +425,15 @@
                                HHWS_LOADER_ERROR_MMC_OPEN,
                                "MMC cover is open");
           g_signal_emit_by_name (l, "loading-failed", error);
-          g_error_free (error);
           goto cleanup;
         }
     }
-  
+
   if (mmc_internal_mount_point && 
       (g_str_has_prefix (priv->uri, mmc_internal_mount_point) ||
        g_str_has_prefix (priv->uri, mmc_internal_mount_point_uri)))
     on_internal_mmc = TRUE;
-  
+
   g_free (mmc_mount_point_uri);
   g_free (mmc_internal_mount_point_uri);
 
@@ -451,10 +450,9 @@
                            HHWS_LOADER_ERROR_OPEN_FAILED,
                            gnome_vfs_result_to_string (result));
       g_signal_emit_by_name (l, "loading-failed", error);
-      g_error_free (error);
       goto cleanup;
     }
-  
+
   if (!local && priv->tmp_file)
     {
       cache_result = gnome_vfs_create (&cache_handle,
@@ -472,7 +470,7 @@
   /* Setting up a memory watchdog */
   if (osso_mem_saw_enable (3 << 20, 32767, hhws_loader_oom_cb, (void *)&oom))
       oom = TRUE;
-  
+
   loader = gdk_pixbuf_loader_new ();
 
   while (!oom && result != GNOME_VFS_ERROR_EOF)
@@ -487,12 +485,12 @@
                                    HHWS_LOADER_ERROR_MMC_OPEN,
                                    "MMC cover is open");
               g_signal_emit_by_name (l, "loading-failed", error);
-              g_error_free (error);
-              gdk_pixbuf_loader_close (loader, NULL);
+              g_clear_error (&error);
+              gdk_pixbuf_loader_close (loader, &error);
               goto cleanup;
             }
         }
-      
+
       result = gnome_vfs_read (handle, buffer, BUF_SIZE, &bytes_read);
 
       switch (result)
@@ -506,11 +504,10 @@
                     g_signal_emit_by_name (l,
                                            "loading-failed",
                                            loader_error);
-                    g_error_free (loader_error);
-                    gdk_pixbuf_loader_close (loader, NULL);
+                    gdk_pixbuf_loader_close (loader, &error);
                     goto cleanup;
                   }
-                
+
                 if (cache_handle)
                   {
                     cache_result =
@@ -533,22 +530,27 @@
                                      HHWS_LOADER_ERROR_OPEN_FAILED,
                                      gnome_vfs_result_to_string (result));
                 g_signal_emit_by_name (l, "loading-failed", error);
-                g_error_free (error);
-                gdk_pixbuf_loader_close (loader, NULL);
+                g_clear_error (&error);
+                gdk_pixbuf_loader_close (loader, &error);
                 goto cleanup;
         }
     }
 
-  gdk_pixbuf_loader_close (loader, NULL);
+  gdk_pixbuf_loader_close (loader, &error);
 
+  if (error)
+    {
+      g_signal_emit_by_name (l, "loading-failed", error);
+      goto cleanup;
+    }
+
   if (oom)
     {
       error = g_error_new (hhws_loader_error_quark (),
                            HHWS_LOADER_ERROR_MEMORY,
                            "out of memory");
       g_signal_emit_by_name (l, "loading-failed", error);
-      g_error_free (error);
-      
+
       goto cleanup;
     }
 
@@ -561,8 +563,7 @@
                            HHWS_LOADER_ERROR_CORRUPTED,
                            "image file was corrupted");
       g_signal_emit_by_name (l, "loading-failed", error);
-      g_error_free (error);
-      
+
       goto cleanup;
     }
 
@@ -584,7 +585,7 @@
               priv->image_name = hhws_url_to_filename (priv->uri);
               g_free (priv->uri);
               priv->uri = g_strdup (priv->cache_file);
-              
+
             }
         }
     }
@@ -603,6 +604,9 @@
 
   if (cache_handle)
     gnome_vfs_close (cache_handle);
+
+  if (error)
+    g_error_free (error);
 }
 
 static gboolean
@@ -610,7 +614,7 @@
 {
   HhwsLoaderPriv *priv;
   g_return_val_if_fail (loader, FALSE);
-  
+
   priv = HHWS_LOADER_GET_PRIVATE (loader);
 
   if (priv->pixbuf)
@@ -631,15 +635,15 @@
   GdkPixbuf *old_pixbuf;
   gchar *old_image_name;
   g_return_if_fail (l);
-  
+
   priv = HHWS_LOADER_GET_PRIVATE (l);
-  
+
   if (!priv->uri)
     {
       g_warning ("URI reset to NULL");
       return;
     }
-  
+
   old_pixbuf = priv->pixbuf;
   if (old_pixbuf)
     gdk_pixbuf_ref (old_pixbuf);

Modified: projects/haf/trunk/hildon-home-webshortcut/plugin/hildon-home-webshortcut.c
===================================================================
--- projects/haf/trunk/hildon-home-webshortcut/plugin/hildon-home-webshortcut.c	2007-05-28 14:47:41 UTC (rev 11908)
+++ projects/haf/trunk/hildon-home-webshortcut/plugin/hildon-home-webshortcut.c	2007-05-28 14:55:54 UTC (rev 11909)
@@ -175,6 +175,9 @@
           case GDK_PIXBUF_ERROR_CORRUPT_IMAGE:
               text = HHWS_CORRUPTED_FILE;
               break;
+          case GDK_PIXBUF_ERROR_FAILED: /* seems to happen with some jpg */
+              text = HHWS_CORRUPTED_FILE;
+              break;
           case GDK_PIXBUF_ERROR_UNKNOWN_TYPE:
               text = HHWS_NOT_SUPPORTED;
               break;


More information about the maemo-commits mailing list