[gimp] app: simplify GimpData load/save error reporting a lot



commit e6f4252d55ff8a9d7867496883e3728d2381b304
Author: Michael Natterer <mitch gimp org>
Date:   Fri Jul 4 18:46:02 2014 +0200

    app: simplify GimpData load/save error reporting a lot
    
    Add the filename and general "Foo failed" spam generically in GimpData
    and GimpDataFactory, and make the individual loaders/savers much
    simpler.

 app/core/gimpbrush-load.c          |   83 +++++++++++-------------------------
 app/core/gimpbrushgenerated-load.c |   51 ++++++----------------
 app/core/gimpbrushgenerated-save.c |    9 +---
 app/core/gimpbrushpipe-load.c      |    5 +--
 app/core/gimpdata.c                |   23 ++++++++--
 app/core/gimpdatafactory.c         |   13 ++++++
 app/core/gimpgradient-load.c       |   56 +++++-------------------
 app/core/gimpgradient-save.c       |    9 +---
 app/core/gimppalette-load.c        |   65 +++++++---------------------
 app/core/gimppalette-save.c        |   12 ++---
 app/core/gimppattern-load.c        |   33 +++++---------
 app/core/gimptoolpreset-load.c     |    6 +-
 12 files changed, 123 insertions(+), 242 deletions(-)
---
diff --git a/app/core/gimpbrush-load.c b/app/core/gimpbrush-load.c
index c10a120..d01cfe6 100644
--- a/app/core/gimpbrush-load.c
+++ b/app/core/gimpbrush-load.c
@@ -96,7 +96,6 @@ static gint32      abr_read_long                 (GDataInputStream  *input,
 static gchar     * abr_read_ucs2_text            (GDataInputStream  *input,
                                                   GError           **error);
 static gboolean    abr_supported                 (AbrHeader         *abr_hdr,
-                                                  GFile             *f,
                                                   GError           **error);
 static gboolean    abr_reach_8bim_section        (GDataInputStream  *input,
                                                   const gchar       *name,
@@ -142,8 +141,7 @@ gimp_brush_load_brush (GimpContext   *context,
   guchar      *mask;
   gsize        bytes_read;
   gssize       i, size;
-  GError      *my_error = NULL;
-  gboolean     success  = TRUE;
+  gboolean     success = TRUE;
 
   g_return_val_if_fail (G_IS_FILE (file), NULL);
   g_return_val_if_fail (G_IS_INPUT_STREAM (input), NULL);
@@ -151,16 +149,9 @@ gimp_brush_load_brush (GimpContext   *context,
 
   /*  read the header  */
   if (! g_input_stream_read_all (input, &header, sizeof (header),
-                                 &bytes_read, NULL, &my_error) ||
+                                 &bytes_read, NULL, error) ||
       bytes_read != sizeof (header))
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   ngettext ("Could not read %d byte from '%s': %s",
-                             "Could not read %d bytes from '%s': %s",
-                             (gint) sizeof (header)),
-                   (gint) sizeof (header),
-                   gimp_file_get_utf8_name (file), my_error->message);
-      g_clear_error (&my_error);
       return NULL;
     }
 
@@ -178,27 +169,21 @@ gimp_brush_load_brush (GimpContext   *context,
   if (header.width == 0)
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "Width = 0."),
-                   gimp_file_get_utf8_name (file));
+                   _("Fatal parse error in brush file: Width = 0."));
       return NULL;
     }
 
   if (header.height == 0)
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "Height = 0."),
-                   gimp_file_get_utf8_name (file));
+                   _("Fatal parse error in brush file: Height = 0."));
       return NULL;
     }
 
   if (header.bytes == 0)
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "Bytes = 0."),
-                   gimp_file_get_utf8_name (file));
+                   _("Fatal parse error in brush file: Bytes = 0."));
       return NULL;
     }
 
@@ -223,9 +208,8 @@ gimp_brush_load_brush (GimpContext   *context,
       else
         {
           g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                       _("Fatal parse error in brush file '%s': "
-                         "Unknown depth %d."),
-                       gimp_file_get_utf8_name (file), header.bytes);
+                       _("Fatal parse error in brush file: Unknown depth %d."),
+                       header.bytes);
           return NULL;
         }
       /*  fallthrough  */
@@ -236,9 +220,8 @@ gimp_brush_load_brush (GimpContext   *context,
 
     default:
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "Unknown version %d."),
-                   gimp_file_get_utf8_name (file), header.version);
+                   _("Fatal parse error in brush file: Unknown version %d."),
+                   header.version);
       return NULL;
     }
 
@@ -250,13 +233,9 @@ gimp_brush_load_brush (GimpContext   *context,
       name = g_new (gchar, bn_size);
 
       if (! g_input_stream_read_all (input, name, bn_size,
-                                     &bytes_read, NULL, NULL) ||
+                                     &bytes_read, NULL, error) ||
           bytes_read != bn_size)
         {
-          g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                       _("Fatal parse error in brush file '%s': "
-                         "File appears truncated."),
-                       gimp_file_get_utf8_name (file));
           g_free (name);
           return NULL;
         }
@@ -287,7 +266,7 @@ gimp_brush_load_brush (GimpContext   *context,
     {
     case 1:
       success = (g_input_stream_read_all (input, mask, size,
-                                         &bytes_read, NULL, NULL) &&
+                                         &bytes_read, NULL, error) &&
                  bytes_read == size);
       break;
 
@@ -300,7 +279,7 @@ gimp_brush_load_brush (GimpContext   *context,
             gssize bytes = MIN (size - i, sizeof (buf));
 
             success = (g_input_stream_read_all (input, buf, bytes,
-                                                &bytes_read, NULL, NULL) &&
+                                                &bytes_read, NULL, error) &&
                        bytes_read == bytes);
 
             if (success)
@@ -340,12 +319,12 @@ gimp_brush_load_brush (GimpContext   *context,
        */
       g_object_unref (brush);
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
+                   _("Fatal parse error in brush file:\n"
                      "Unsupported brush depth %d\n"
                      "GIMP brushes must be GRAY or RGBA.\n"
                      "This might be an obsolete GIMP brush file, try "
                      "loading it as image and save it again."),
-                   gimp_file_get_utf8_name (file), header.bytes);
+                   header.bytes);
       return NULL;
       break;
 
@@ -362,7 +341,7 @@ gimp_brush_load_brush (GimpContext   *context,
             gssize bytes = MIN (size - i, sizeof (buf));
 
             success = (g_input_stream_read_all (input, buf, bytes,
-                                                &bytes_read, NULL, NULL) &&
+                                                &bytes_read, NULL, error) &&
                        bytes_read == bytes);
 
             if (success)
@@ -387,20 +366,16 @@ gimp_brush_load_brush (GimpContext   *context,
     default:
       g_object_unref (brush);
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
+                   _("Fatal parse error in brush file:\n"
                      "Unsupported brush depth %d\n"
                      "GIMP brushes must be GRAY or RGBA."),
-                   gimp_file_get_utf8_name (file), header.bytes);
+                   header.bytes);
       return NULL;
     }
 
   if (! success)
     {
       g_object_unref (brush);
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "File appears truncated."),
-                   gimp_file_get_utf8_name (file));
       return NULL;
     }
 
@@ -442,7 +417,7 @@ gimp_brush_load_abr (GimpContext   *context,
   if (my_error)
     goto done;
 
-  if (abr_supported (&abr_hdr, file, &my_error))
+  if (abr_supported (&abr_hdr, &my_error))
     {
       switch (abr_hdr.version)
         {
@@ -469,13 +444,9 @@ gimp_brush_load_abr (GimpContext   *context,
         g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                      _("Unable to decode abr format version %d."),
                      abr_hdr.version);
-
-      g_set_error (error, my_error->domain, my_error->code,
-                   _("Fatal parse error in brush file '%s': %s"),
-                   gimp_file_get_utf8_name (file), my_error->message);
     }
 
-  g_clear_error (&my_error);
+  g_propagate_error (error, my_error);
 
   return g_list_reverse (brush_list);
 }
@@ -668,9 +639,8 @@ gimp_brush_load_abr_brush_v12 (GDataInputStream  *input,
             /* FIXME: support wide brushes */
 
             g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                         _("Fatal parse error in brush file '%s': "
-                           "Wide brushes are not supported."),
-                         gimp_file_get_utf8_name (file));
+                         _("Fatal parse error in brush file: "
+                           "Wide brushes are not supported."));
             break;
           }
 
@@ -810,9 +780,8 @@ gimp_brush_load_abr_brush_v6 (GDataInputStream  *input,
   if (! r)
     {
       g_prefix_error (error,
-                      _("Fatal parse error in brush file '%s': "
-                        "File appears truncated: "),
-                      gimp_file_get_utf8_name (file));
+                      _("Fatal parse error in brush file : "
+                        "File appears truncated: "));
       return NULL;
     }
 
@@ -942,7 +911,6 @@ abr_read_ucs2_text (GDataInputStream  *input,
 
 static gboolean
 abr_supported (AbrHeader  *abr_hdr,
-               GFile      *file,
                GError    **error)
 {
   switch (abr_hdr->version)
@@ -958,9 +926,8 @@ abr_supported (AbrHeader  *abr_hdr,
         return TRUE;
 
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "unable to decode abr format version %d."),
-                   gimp_file_get_utf8_name (file),
+                   _("Fatal parse error in brush file: "
+                     "Unable to decode abr format version %d."),
 
                    /* horrid subversion display, but better than
                     * having yet another translatable string for
diff --git a/app/core/gimpbrushgenerated-load.c b/app/core/gimpbrushgenerated-load.c
index c737886..70ed152 100644
--- a/app/core/gimpbrushgenerated-load.c
+++ b/app/core/gimpbrushgenerated-load.c
@@ -54,7 +54,6 @@ gimp_brush_generated_load (GimpContext   *context,
   gdouble                  hardness;
   gdouble                  aspect_ratio;
   gdouble                  angle;
-  GError                  *my_error = NULL;
 
   g_return_val_if_fail (G_IS_FILE (file), NULL);
   g_return_val_if_fail (G_IS_INPUT_STREAM (input), NULL);
@@ -66,16 +65,14 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum = 1;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
 
   if (! g_str_has_prefix (string, "GIMP-VBR"))
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in brush file '%s': "
-                     "Not a GIMP brush file."),
-                   gimp_file_get_utf8_name (file));
+                   _("Not a GIMP brush file."));
       g_free (string);
       goto failed;
     }
@@ -86,7 +83,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
 
@@ -95,9 +92,7 @@ gimp_brush_generated_load (GimpContext   *context,
       if (! g_str_has_prefix (string, "1.5"))
         {
           g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                       _("Fatal parse error in brush file '%s': "
-                         "Unknown GIMP brush version in line %d."),
-                       gimp_file_get_utf8_name (file), linenum);
+                       _("Unknown GIMP brush version."));
           g_free (string);
           goto failed;
         }
@@ -113,7 +108,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
 
@@ -140,7 +135,7 @@ gimp_brush_generated_load (GimpContext   *context,
       linenum++;
       string_len = 256;
       string = g_data_input_stream_read_line (data_input, &string_len,
-                                              NULL, &my_error);
+                                              NULL, error);
       if (! string)
         goto failed;
 
@@ -150,9 +145,7 @@ gimp_brush_generated_load (GimpContext   *context,
       if (! shape_val)
         {
           g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                       _("Fatal parse error in brush file '%s': "
-                         "Unknown GIMP brush shape in line %d."),
-                       gimp_file_get_utf8_name (file), linenum);
+                       _("Unknown GIMP brush shape."));
           g_free (string);
           goto failed;
         }
@@ -166,7 +159,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
   spacing = g_ascii_strtod (string, NULL);
@@ -176,7 +169,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
   radius = g_ascii_strtod (string, NULL);
@@ -188,7 +181,7 @@ gimp_brush_generated_load (GimpContext   *context,
       linenum++;
       string_len = 256;
       string = g_data_input_stream_read_line (data_input, &string_len,
-                                              NULL, &my_error);
+                                              NULL, error);
       if (! string)
         goto failed;
       spikes = CLAMP (atoi (string), 2, 20);
@@ -199,7 +192,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
   hardness = g_ascii_strtod (string, NULL);
@@ -209,7 +202,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
   aspect_ratio = g_ascii_strtod (string, NULL);
@@ -219,7 +212,7 @@ gimp_brush_generated_load (GimpContext   *context,
   linenum++;
   string_len = 256;
   string = g_data_input_stream_read_line (data_input, &string_len,
-                                          NULL, &my_error);
+                                          NULL, error);
   if (! string)
     goto failed;
   angle = g_ascii_strtod (string, NULL);
@@ -242,23 +235,7 @@ gimp_brush_generated_load (GimpContext   *context,
   if (name)
     g_free (name);
 
-  if (error && *error == NULL)
-    {
-      gchar *msg;
-
-      if (my_error)
-        msg = g_strdup_printf (_("Line %d: %s"), linenum, my_error->message);
-      else
-        msg = g_strdup_printf (_("File is truncated in line %d"), linenum);
-
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Error while reading brush file '%s': %s"),
-                   gimp_file_get_utf8_name (file), msg);
-
-      g_free (msg);
-    }
-
-  g_clear_error (&my_error);
+  g_prefix_error (error, _("In line %d of brush file: "), linenum);
 
   return NULL;
 }
diff --git a/app/core/gimpbrushgenerated-save.c b/app/core/gimpbrushgenerated-save.c
index 73c794f..b7e9ee8 100644
--- a/app/core/gimpbrushgenerated-save.c
+++ b/app/core/gimpbrushgenerated-save.c
@@ -43,7 +43,6 @@ gimp_brush_generated_save (GimpData       *data,
   gchar               buf[G_ASCII_DTOSTR_BUF_SIZE];
   gsize               bytes_written;
   gboolean            have_shape = FALSE;
-  GError             *my_error   = NULL;
 
   g_return_val_if_fail (name != NULL && *name != '\0', FALSE);
 
@@ -108,15 +107,11 @@ gimp_brush_generated_save (GimpData       *data,
                                            brush->angle));
 
   if (! g_output_stream_write_all (output, string->str, string->len,
-                                   &bytes_written, NULL, &my_error) ||
+                                   &bytes_written, NULL, error) ||
       bytes_written != string->len)
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_WRITE,
-                   _("Writing brush file '%s' failed: %s"),
-                   gimp_file_get_utf8_name (gimp_data_get_file (data)),
-                   my_error->message);
-      g_clear_error (&my_error);
       g_string_free (string, TRUE);
+
       return FALSE;
     }
 
diff --git a/app/core/gimpbrushpipe-load.c b/app/core/gimpbrushpipe-load.c
index 7ae2db3..93999a4 100644
--- a/app/core/gimpbrushpipe-load.c
+++ b/app/core/gimpbrushpipe-load.c
@@ -190,11 +190,9 @@ gimp_brush_pipe_load (GimpContext   *context,
 
   while (pipe->n_brushes < num_of_brushes)
     {
-      GError *my_error = NULL;
-
       pipe->brushes[pipe->n_brushes] = gimp_brush_load_brush (context,
                                                               file, input,
-                                                              &my_error);
+                                                              error);
 
       if (pipe->brushes[pipe->n_brushes])
         {
@@ -203,7 +201,6 @@ gimp_brush_pipe_load (GimpContext   *context,
         }
       else
         {
-          g_propagate_error (error, my_error);
           g_object_unref (pipe);
           return NULL;
         }
diff --git a/app/core/gimpdata.c b/app/core/gimpdata.c
index 1e0d0bb..1165731 100644
--- a/app/core/gimpdata.c
+++ b/app/core/gimpdata.c
@@ -529,14 +529,27 @@ gimp_data_save (GimpData  *data,
         {
           success = GIMP_DATA_GET_CLASS (data)->save (data, output, error);
 
-          if (success &&
-              ! g_output_stream_close (output, NULL, error))
+          if (success)
+            {
+              if (! g_output_stream_close (output, NULL, error))
+                {
+                  g_prefix_error (error,
+                                  _("Error saving '%s': "),
+                                  gimp_file_get_utf8_name (private->file));
+                  success = FALSE;
+                }
+            }
+          else if (error && *error)
             {
               g_prefix_error (error,
-                              _("Error writing '%s': "),
+                              _("Error saving '%s': "),
                               gimp_file_get_utf8_name (private->file));
-
-              success = FALSE;
+            }
+          else
+            {
+              g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_WRITE,
+                           _("Error saving '%s'"),
+                           gimp_file_get_utf8_name (private->file));
             }
 
           g_object_unref (output);
diff --git a/app/core/gimpdatafactory.c b/app/core/gimpdatafactory.c
index 50b12f6..169f9c6 100644
--- a/app/core/gimpdatafactory.c
+++ b/app/core/gimpdatafactory.c
@@ -894,6 +894,19 @@ gimp_data_factory_load_data (const GimpDatafileData *file_data,
     {
       data_list = loader->load_func (context->context, file, input, &error);
 
+      if (error)
+        {
+          g_prefix_error (&error,
+                          _("Error loading '%s': "),
+                          gimp_file_get_utf8_name (file));
+        }
+      else if (! data_list)
+        {
+          g_set_error (&error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+                       _("Error loading '%s'"),
+                       gimp_file_get_utf8_name (file));
+        }
+
       g_object_unref (input);
     }
   else
diff --git a/app/core/gimpgradient-load.c b/app/core/gimpgradient-load.c
index 400cf4e..254c964 100644
--- a/app/core/gimpgradient-load.c
+++ b/app/core/gimpgradient-load.c
@@ -52,7 +52,6 @@ gimp_gradient_load (GimpContext   *context,
   gchar               *line;
   gsize                line_len;
   gint                 linenum;
-  GError              *my_error = NULL;
 
   g_return_val_if_fail (G_IS_FILE (file), NULL);
   g_return_val_if_fail (G_IS_INPUT_STREAM (input), NULL);
@@ -63,13 +62,13 @@ gimp_gradient_load (GimpContext   *context,
   linenum = 1;
   line_len = 1024;
   line = g_data_input_stream_read_line (data_input, &line_len,
-                                        NULL, &my_error);
+                                        NULL, error);
   if (! line)
     goto failed;
 
   if (! g_str_has_prefix (line, "GIMP Gradient"))
     {
-      g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                    _("Not a GIMP gradient file."));
       g_free (line);
       goto failed;
@@ -84,7 +83,7 @@ gimp_gradient_load (GimpContext   *context,
   linenum++;
   line_len = 1024;
   line = g_data_input_stream_read_line (data_input, &line_len,
-                                        NULL, &my_error);
+                                        NULL, error);
   if (! line)
     goto failed;
 
@@ -102,7 +101,7 @@ gimp_gradient_load (GimpContext   *context,
       linenum++;
       line_len = 1024;
       line = g_data_input_stream_read_line (data_input, &line_len,
-                                            NULL, &my_error);
+                                            NULL, error);
       if (! line)
         goto failed;
     }
@@ -118,7 +117,7 @@ gimp_gradient_load (GimpContext   *context,
 
   if (num_segments < 1)
     {
-      g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                    _("File is corrupt."));
       goto failed;
     }
@@ -142,7 +141,7 @@ gimp_gradient_load (GimpContext   *context,
       linenum++;
       line_len = 1024;
       line = g_data_input_stream_read_line (data_input, &line_len,
-                                            NULL, &my_error);
+                                            NULL, error);
       if (! line)
         goto failed;
 
@@ -192,14 +191,14 @@ gimp_gradient_load (GimpContext   *context,
               break;
 
             default:
-              g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+              g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                            _("Corrupt segment %d."), i);
               goto failed;
             }
         }
       else
         {
-          g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+          g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                        _("Corrupt segment %d."), i);
           goto failed;
         }
@@ -207,7 +206,7 @@ gimp_gradient_load (GimpContext   *context,
       if ((  prev && (prev->right < seg->left)) ||
           (! prev && (0.0         < seg->left)))
         {
-          g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+          g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                        _("Segments do not span the range 0-1."));
           goto failed;
         }
@@ -217,7 +216,7 @@ gimp_gradient_load (GimpContext   *context,
 
   if (prev->right < 1.0)
     {
-      g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                    _("Segments do not span the range 0-1."));
       goto failed;
     }
@@ -233,24 +232,7 @@ gimp_gradient_load (GimpContext   *context,
   if (gradient)
     g_object_unref (gradient);
 
-  if (error && *error == NULL)
-    {
-      gchar *msg;
-
-      if (my_error)
-        msg = g_strdup_printf (_("Error in line %d: %s"), linenum,
-                               my_error->message);
-      else
-        msg = g_strdup_printf (_("File is truncated in line %d"), linenum);
-
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Error while reading gradient file '%s': %s"),
-                   gimp_file_get_utf8_name (file), msg);
-
-      g_free (msg);
-    }
-
-  g_clear_error (&my_error);
+  g_prefix_error (error, _("In line %d of gradient file: "), linenum);
 
   return NULL;
 }
@@ -326,21 +308,7 @@ gimp_gradient_load_svg (GimpContext   *context,
   if (success && ! parser.gradients)
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("No linear gradients found in '%s'"),
-                   gimp_file_get_utf8_name (file));
-    }
-  else
-    {
-      if (error && *error) /*  parser reported an error  */
-        {
-          gchar *msg = (*error)->message;
-
-          (*error)->message =
-            g_strdup_printf (_("Failed to import gradients from '%s': %s"),
-                             gimp_file_get_utf8_name (file), msg);
-
-          g_free (msg);
-        }
+                   _("No linear gradients found."));
     }
 
   if (parser.gradient)
diff --git a/app/core/gimpgradient-save.c b/app/core/gimpgradient-save.c
index b684292..b477b31 100644
--- a/app/core/gimpgradient-save.c
+++ b/app/core/gimpgradient-save.c
@@ -40,7 +40,6 @@ gimp_gradient_save (GimpData       *data,
   GimpGradientSegment *seg;
   gint                 num_segments;
   gsize                bytes_written;
-  GError              *my_error = NULL;
 
   /* File format is:
    *
@@ -109,15 +108,11 @@ gimp_gradient_save (GimpData       *data,
     }
 
   if (! g_output_stream_write_all (output, string->str, string->len,
-                                   &bytes_written, NULL, &my_error) ||
+                                   &bytes_written, NULL, error) ||
       bytes_written != string->len)
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_WRITE,
-                   _("Writing gradient file '%s' failed: %s"),
-                   gimp_file_get_utf8_name (gimp_data_get_file (data)),
-                   my_error->message);
-      g_clear_error (&my_error);
       g_string_free (string, TRUE);
+
       return FALSE;
     }
 
diff --git a/app/core/gimppalette-load.c b/app/core/gimppalette-load.c
index ea1548b..7b5b80e 100644
--- a/app/core/gimppalette-load.c
+++ b/app/core/gimppalette-load.c
@@ -48,7 +48,6 @@ gimp_palette_load (GimpContext   *context,
   gchar            *tok;
   gint              r, g, b;
   gint              linenum;
-  GError           *my_error = NULL;
 
   g_return_val_if_fail (G_IS_FILE (file), NULL);
   g_return_val_if_fail (G_IS_INPUT_STREAM (input), NULL);
@@ -61,13 +60,13 @@ gimp_palette_load (GimpContext   *context,
   linenum = 1;
   str_len = 1024;
   str = g_data_input_stream_read_line (data_input, &str_len,
-                                       NULL, &my_error);
+                                       NULL, error);
   if (! str)
     goto failed;
 
   if (! g_str_has_prefix (str, "GIMP Palette"))
     {
-      g_set_error (&my_error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
+      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
                    _("Missing magic header."));
       g_free (str);
       goto failed;
@@ -80,7 +79,7 @@ gimp_palette_load (GimpContext   *context,
   linenum++;
   str_len = 1024;
   str = g_data_input_stream_read_line (data_input, &str_len,
-                                       NULL, &my_error);
+                                       NULL, error);
   if (! str)
     goto failed;
 
@@ -97,7 +96,7 @@ gimp_palette_load (GimpContext   *context,
       linenum++;
       str_len = 1024;
       str = g_data_input_stream_read_line (data_input, &str_len,
-                                           NULL, &my_error);
+                                           NULL, error);
       if (! str)
         goto failed;
 
@@ -122,7 +121,7 @@ gimp_palette_load (GimpContext   *context,
           linenum++;
           str_len = 1024;
           str = g_data_input_stream_read_line (data_input, &str_len,
-                                               NULL, &my_error);
+                                               NULL, error);
           if (! str)
             goto failed;
         }
@@ -135,6 +134,8 @@ gimp_palette_load (GimpContext   *context,
 
   while (str)
     {
+      GError *my_error = NULL;
+
       if (str[0] != '#' && str[0] != '\n')
         {
           tok = strtok (str, " \t");
@@ -196,7 +197,10 @@ gimp_palette_load (GimpContext   *context,
       if (! str)
         {
           if (! palette->colors)
-            goto failed;
+            {
+              g_propagate_error (error, my_error);
+              goto failed;
+            }
 
           if (my_error)
             {
@@ -224,24 +228,7 @@ gimp_palette_load (GimpContext   *context,
   if (palette)
     g_object_unref (palette);
 
-  if (error && *error == NULL)
-    {
-      gchar *msg;
-
-      if (my_error)
-        msg = g_strdup_printf (_("Error in line %d: %s"), linenum,
-                               my_error->message);
-      else
-        msg = g_strdup_printf (_("File is truncated in line %d"), linenum);
-
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Error while reading palette file '%s': %s"),
-                   gimp_file_get_utf8_name (file), msg);
-
-      g_free (msg);
-    }
-
-  g_clear_error (&my_error);
+  g_prefix_error (error, _("In line %d of palette file: "), linenum);
 
   return NULL;
 }
@@ -436,8 +423,9 @@ gimp_palette_load_aco (GimpContext   *context,
                                  &bytes_read, NULL, error) ||
       bytes_read != sizeof (header))
     {
-      g_prefix_error (error, "%s",
-                      _("Could not read header from palette file '%s': "));
+      g_prefix_error (error,
+                      _("Could not read header from palette file '%s': "),
+                      gimp_file_get_utf8_name (file));
       return NULL;
     }
 
@@ -473,21 +461,7 @@ gimp_palette_load_aco (GimpContext   *context,
               break;
             }
 
-          if (error && *error == NULL)
-            {
-              const gchar *msg;
-
-              if (my_error)
-                msg = my_error->message;
-              else
-                msg = _("File is truncated.");
-
-              g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                           _("Fatal parse error in palette file '%s': %s"),
-                           gimp_file_get_utf8_name (file), msg);
-            }
-
-          g_clear_error (&my_error);
+          g_propagate_error (error, my_error);
           g_object_unref (palette);
 
           return NULL;
@@ -573,14 +547,9 @@ gimp_palette_load_aco (GimpContext   *context,
           if (! g_input_stream_read_all (input,
                                          format2_preamble,
                                          sizeof (format2_preamble),
-                                         &bytes_read, NULL, &my_error) ||
+                                         &bytes_read, NULL, error) ||
               bytes_read != sizeof (format2_preamble))
            {
-             g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                          _("Fatal parse error in palette file '%s': %s"),
-                          gimp_file_get_utf8_name (file),
-                           my_error ?
-                           my_error->message : _("Premature end of file."));
              g_object_unref (palette);
              return NULL;
            }
diff --git a/app/core/gimppalette-save.c b/app/core/gimppalette-save.c
index dde2d67..c06d9a1 100644
--- a/app/core/gimppalette-save.c
+++ b/app/core/gimppalette-save.c
@@ -41,13 +41,13 @@ gimp_palette_save (GimpData       *data,
   GString     *string;
   GList       *list;
   gsize        bytes_written;
-  GError      *my_error = NULL;
 
   string = g_string_new ("GIMP Palette\n");
 
   g_string_append_printf (string,
                           "Name: %s\n"
-                          "Columns: %d\n#\n",
+                          "Columns: %d\n"
+                          "#\n",
                           gimp_object_get_name (palette),
                           CLAMP (gimp_palette_get_columns (palette), 0, 256));
 
@@ -65,15 +65,11 @@ gimp_palette_save (GimpData       *data,
     }
 
   if (! g_output_stream_write_all (output, string->str, string->len,
-                                   &bytes_written, NULL, &my_error) ||
+                                   &bytes_written, NULL, error) ||
       bytes_written != string->len)
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_WRITE,
-                   _("Writing palette file '%s' failed: %s"),
-                   gimp_file_get_utf8_name (gimp_data_get_file (data)),
-                   my_error->message);
-      g_clear_error (&my_error);
       g_string_free (string, TRUE);
+
       return FALSE;
     }
 
diff --git a/app/core/gimppattern-load.c b/app/core/gimppattern-load.c
index 6a46e58..07c1724 100644
--- a/app/core/gimppattern-load.c
+++ b/app/core/gimppattern-load.c
@@ -54,13 +54,10 @@ gimp_pattern_load (GimpContext   *context,
 
   /*  read the size  */
   if (! g_input_stream_read_all (input, &header, sizeof (header),
-                                 &bytes_read, NULL, NULL) ||
+                                 &bytes_read, NULL, error) ||
       bytes_read != sizeof (header))
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in pattern file '%s': "
-                     "File appears truncated."),
-                   gimp_file_get_utf8_name (file));
+      g_prefix_error (error, _("File appears truncated: "));
       goto error;
     }
 
@@ -77,9 +74,8 @@ gimp_pattern_load (GimpContext   *context,
       header.header_size <= sizeof (header))
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in pattern file '%s': "
-                     "Unknown pattern format version %d."),
-                   gimp_file_get_utf8_name (file), header.version);
+                   _("Unknown pattern format version %d."),
+                   header.version);
       goto error;
     }
 
@@ -87,10 +83,9 @@ gimp_pattern_load (GimpContext   *context,
   if (header.bytes < 1 || header.bytes > 4)
     {
       g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in pattern file '%s: "
-                     "Unsupported pattern depth %d.\n"
+                   _("Unsupported pattern depth %d.\n"
                      "GIMP Patterns must be GRAY or RGB."),
-                   gimp_file_get_utf8_name (file), header.bytes);
+                   header.bytes);
       goto error;
     }
 
@@ -102,13 +97,10 @@ gimp_pattern_load (GimpContext   *context,
       name = g_new (gchar, bn_size);
 
       if (! g_input_stream_read_all (input, name, bn_size,
-                                     &bytes_read, NULL, NULL) ||
+                                     &bytes_read, NULL, error) ||
           bytes_read != bn_size)
         {
-          g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                       _("Fatal parse error in pattern file '%s': "
-                         "File appears truncated."),
-                       gimp_file_get_utf8_name (file));
+          g_prefix_error (error, _("File appears truncated."));
           g_free (name);
           goto error;
         }
@@ -143,13 +135,10 @@ gimp_pattern_load (GimpContext   *context,
 
   if (! g_input_stream_read_all (input,
                                  gimp_temp_buf_get_data (pattern->mask), size,
-                                 &bytes_read, NULL, NULL) ||
+                                 &bytes_read, NULL, error) ||
       bytes_read != size)
     {
-      g_set_error (error, GIMP_DATA_ERROR, GIMP_DATA_ERROR_READ,
-                   _("Fatal parse error in pattern file '%s': "
-                     "File appears truncated."),
-                   gimp_file_get_utf8_name (file));
+      g_prefix_error (error, _("File appears truncated."));
       goto error;
     }
 
@@ -160,6 +149,8 @@ gimp_pattern_load (GimpContext   *context,
   if (pattern)
     g_object_unref (pattern);
 
+  g_prefix_error (error, _("Fatal parse error in pattern file: "));
+
   return NULL;
 }
 
diff --git a/app/core/gimptoolpreset-load.c b/app/core/gimptoolpreset-load.c
index 9fc956b..86707f6 100644
--- a/app/core/gimptoolpreset-load.c
+++ b/app/core/gimptoolpreset-load.c
@@ -59,9 +59,9 @@ gimp_tool_preset_load (GimpContext   *context,
         }
       else
         {
-          g_set_error (error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
-                       _("Error while parsing '%s'"),
-                       gimp_file_get_utf8_name (file));
+          g_set_error_literal (error,
+                               GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
+                               _("Tool preset file is corrupt."));
         }
     }
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]