[gimp] app: port the curves and levels cruft format loaders to GIO
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] app: port the curves and levels cruft format loaders to GIO
- Date: Fri, 4 Jul 2014 11:21:00 +0000 (UTC)
commit b4cdecb4c3b443aa2b6b081431cd9af7a52b9bc4
Author: Michael Natterer <mitch gimp org>
Date: Fri Jul 4 13:18:01 2014 +0200
app: port the curves and levels cruft format loaders to GIO
app/operations/gimpcurvesconfig.c | 67 ++++++++++++++++++++++++----------
app/operations/gimpcurvesconfig.h | 2 +-
app/operations/gimplevelsconfig.c | 71 +++++++++++++++++++++++++------------
app/operations/gimplevelsconfig.h | 2 +-
app/tools/gimpcurvestool.c | 39 +++++++++-----------
app/tools/gimplevelstool.c | 42 +++++++++------------
6 files changed, 133 insertions(+), 90 deletions(-)
---
diff --git a/app/operations/gimpcurvesconfig.c b/app/operations/gimpcurvesconfig.c
index fdb6085..3f1e670 100644
--- a/app/operations/gimpcurvesconfig.c
+++ b/app/operations/gimpcurvesconfig.c
@@ -20,12 +20,9 @@
#include "config.h"
-#include <string.h>
-
#include <cairo.h>
#include <gegl.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <glib/gstdio.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
@@ -499,26 +496,34 @@ gimp_curves_config_reset_channel (GimpCurvesConfig *config)
gboolean
gimp_curves_config_load_cruft (GimpCurvesConfig *config,
- gpointer fp,
+ GInputStream *input,
GError **error)
{
- FILE *file = fp;
- gint i, j;
- gint fields;
- gchar buf[50];
- gint index[5][GIMP_CURVE_N_CRUFT_POINTS];
- gint value[5][GIMP_CURVE_N_CRUFT_POINTS];
+ GDataInputStream *data_input;
+ gint index[5][GIMP_CURVE_N_CRUFT_POINTS];
+ gint value[5][GIMP_CURVE_N_CRUFT_POINTS];
+ gchar *line;
+ gsize line_len;
+ gint i, j;
g_return_val_if_fail (GIMP_IS_CURVES_CONFIG (config), FALSE);
- g_return_val_if_fail (file != NULL, FALSE);
+ g_return_val_if_fail (G_IS_INPUT_STREAM (input), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (! fgets (buf, sizeof (buf), file) ||
- strcmp (buf, "# GIMP Curves File\n") != 0)
+ data_input = g_data_input_stream_new (input);
+
+ line_len = 64;
+ line = g_data_input_stream_read_line (data_input, &line_len,
+ NULL, error);
+ if (! line)
+ return FALSE;
+
+ if (strcmp (line, "# GIMP Curves File") != 0)
{
- g_set_error_literal (error,
- GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
+ g_set_error_literal (error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
_("not a GIMP Curves file"));
+ g_object_unref (data_input);
+ g_free (line);
return FALSE;
}
@@ -526,19 +531,41 @@ gimp_curves_config_load_cruft (GimpCurvesConfig *config,
{
for (j = 0; j < GIMP_CURVE_N_CRUFT_POINTS; j++)
{
- fields = fscanf (file, "%d %d ", &index[i][j], &value[i][j]);
- if (fields != 2)
+ gchar *x_str = NULL;
+ gchar *y_str = NULL;
+
+ if (! (x_str = g_data_input_stream_read_upto (data_input, " ", -1,
+ NULL, NULL, error)) ||
+ ! g_data_input_stream_read_byte (data_input, NULL, error) ||
+ ! (y_str = g_data_input_stream_read_upto (data_input, " ", -1,
+ NULL, NULL, error)) ||
+ ! g_data_input_stream_read_byte (data_input, NULL, error))
+ {
+ g_free (x_str);
+ g_free (y_str);
+ g_object_unref (data_input);
+ return FALSE;
+ }
+
+ if (sscanf (x_str, "%d", &index[i][j]) != 1 ||
+ sscanf (y_str, "%d", &value[i][j]) != 1)
{
- /* FIXME: should have a helpful error message here */
- g_printerr ("fields != 2");
g_set_error_literal (error,
GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
- _("parse error"));
+ _("Parse error, didn't find 2 integers"));
+ g_free (x_str);
+ g_free (y_str);
+ g_object_unref (data_input);
return FALSE;
}
+
+ g_free (x_str);
+ g_free (y_str);
}
}
+ g_object_unref (data_input);
+
g_object_freeze_notify (G_OBJECT (config));
for (i = 0; i < 5; i++)
diff --git a/app/operations/gimpcurvesconfig.h b/app/operations/gimpcurvesconfig.h
index 0f1064b..990a8e9 100644
--- a/app/operations/gimpcurvesconfig.h
+++ b/app/operations/gimpcurvesconfig.h
@@ -69,7 +69,7 @@ GObject * gimp_curves_config_new_explicit_cruft (gint32 channel,
void gimp_curves_config_reset_channel (GimpCurvesConfig *config);
gboolean gimp_curves_config_load_cruft (GimpCurvesConfig *config,
- gpointer fp,
+ GInputStream *input,
GError **error);
gboolean gimp_curves_config_save_cruft (GimpCurvesConfig *config,
GFile *file,
diff --git a/app/operations/gimplevelsconfig.c b/app/operations/gimplevelsconfig.c
index 0ad84a4..ead15ce 100644
--- a/app/operations/gimplevelsconfig.c
+++ b/app/operations/gimplevelsconfig.c
@@ -21,12 +21,10 @@
#include "config.h"
#include <errno.h>
-#include <string.h>
#include <cairo.h>
#include <gegl.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
-#include <glib/gstdio.h>
#include "libgimpbase/gimpbase.h"
#include "libgimpcolor/gimpcolor.h"
@@ -740,52 +738,77 @@ gimp_levels_config_to_curves_config (GimpLevelsConfig *config)
gboolean
gimp_levels_config_load_cruft (GimpLevelsConfig *config,
- gpointer fp,
+ GInputStream *input,
GError **error)
{
- FILE *file = fp;
- gint low_input[5];
- gint high_input[5];
- gint low_output[5];
- gint high_output[5];
- gdouble gamma[5];
- gint i;
- gint fields;
- gchar buf[50];
- gchar *nptr;
+ GDataInputStream *data_input;
+ gint low_input[5];
+ gint high_input[5];
+ gint low_output[5];
+ gint high_output[5];
+ gdouble gamma[5];
+ gchar *line;
+ gsize line_len;
+ gint i;
g_return_val_if_fail (GIMP_IS_LEVELS_CONFIG (config), FALSE);
- g_return_val_if_fail (file != NULL, FALSE);
+ g_return_val_if_fail (G_IS_INPUT_STREAM (input), FALSE);
g_return_val_if_fail (error == NULL || *error == NULL, FALSE);
- if (! fgets (buf, sizeof (buf), file) ||
- strcmp (buf, "# GIMP Levels File\n") != 0)
+ data_input = g_data_input_stream_new (input);
+
+ line_len = 64;
+ line = g_data_input_stream_read_line (data_input, &line_len,
+ NULL, error);
+ if (! line)
+ return FALSE;
+
+ if (strcmp (line, "# GIMP Levels File") != 0)
{
g_set_error_literal (error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
_("not a GIMP Levels file"));
+ g_object_unref (data_input);
+ g_free (line);
return FALSE;
}
+ g_free (line);
+
for (i = 0; i < 5; i++)
{
- fields = fscanf (file, "%d %d %d %d ",
+ gchar float_buf[32];
+ gchar *endp;
+ gint fields;
+
+ line_len = 64;
+ line = g_data_input_stream_read_line (data_input, &line_len,
+ NULL, error);
+ if (! line)
+ {
+ g_object_unref (data_input);
+ return FALSE;
+ }
+
+ fields = sscanf (line, "%d %d %d %d %31s",
&low_input[i],
&high_input[i],
&low_output[i],
- &high_output[i]);
+ &high_output[i],
+ float_buf);
- if (fields != 4)
- goto error;
+ g_free (line);
- if (! fgets (buf, 50, file))
+ if (fields != 5)
goto error;
- gamma[i] = g_ascii_strtod (buf, &nptr);
+ gamma[i] = g_ascii_strtod (float_buf, &endp);
- if (buf == nptr || errno == ERANGE)
+ if (endp == float_buf || errno == ERANGE)
goto error;
}
+ g_object_unref (data_input);
+
g_object_freeze_notify (G_OBJECT (config));
for (i = 0; i < 5; i++)
@@ -808,6 +831,8 @@ gimp_levels_config_load_cruft (GimpLevelsConfig *config,
return TRUE;
error:
+ g_object_unref (data_input);
+
g_set_error_literal (error, GIMP_CONFIG_ERROR, GIMP_CONFIG_ERROR_PARSE,
_("parse error"));
return FALSE;
diff --git a/app/operations/gimplevelsconfig.h b/app/operations/gimplevelsconfig.h
index 84b4b1b..71ac037 100644
--- a/app/operations/gimplevelsconfig.h
+++ b/app/operations/gimplevelsconfig.h
@@ -76,7 +76,7 @@ GimpCurvesConfig *
gimp_levels_config_to_curves_config (GimpLevelsConfig *config);
gboolean gimp_levels_config_load_cruft (GimpLevelsConfig *config,
- gpointer fp,
+ GInputStream *input,
GError **error);
gboolean gimp_levels_config_save_cruft (GimpLevelsConfig *config,
GFile *file,
diff --git a/app/tools/gimpcurvestool.c b/app/tools/gimpcurvestool.c
index ce0a9dc..07392ff 100644
--- a/app/tools/gimpcurvestool.c
+++ b/app/tools/gimpcurvestool.c
@@ -598,30 +598,27 @@ gimp_curves_tool_settings_import (GimpImageMapTool *image_map_tool,
GError **error)
{
GimpCurvesTool *tool = GIMP_CURVES_TOOL (image_map_tool);
- gchar *path;
- FILE *f;
+ GInputStream *input;
gchar header[64];
+ gsize bytes_read;
- path = g_file_get_path (file);
- f = g_fopen (path, "rt");
- g_free (path);
-
- if (! f)
+ input = G_INPUT_STREAM (g_file_read (file, NULL, error));
+ if (! input)
{
- g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
- _("Could not open '%s' for reading: %s"),
- gimp_file_get_utf8_name (file),
- g_strerror (errno));
+ g_prefix_error (error,
+ _("Could not open '%s' for reading: "),
+ gimp_file_get_utf8_name (file));
return FALSE;
}
- if (! fgets (header, sizeof (header), f))
+ if (! g_input_stream_read_all (input, header, sizeof (header),
+ &bytes_read, NULL, error) ||
+ bytes_read != sizeof (header))
{
- g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
- _("Could not read header from '%s': %s"),
- gimp_file_get_utf8_name (file),
- g_strerror (errno));
- fclose (f);
+ g_prefix_error (error,
+ _("Could not read header from '%s': "),
+ gimp_file_get_utf8_name (file));
+ g_object_unref (input);
return FALSE;
}
@@ -629,16 +626,16 @@ gimp_curves_tool_settings_import (GimpImageMapTool *image_map_tool,
{
gboolean success;
- rewind (f);
+ g_seekable_seek (G_SEEKABLE (input), 0, G_SEEK_SET, NULL, NULL);
- success = gimp_curves_config_load_cruft (tool->config, f, error);
+ success = gimp_curves_config_load_cruft (tool->config, input, error);
- fclose (f);
+ g_object_unref (input);
return success;
}
- fclose (f);
+ g_object_unref (input);
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (image_map_tool,
file,
diff --git a/app/tools/gimplevelstool.c b/app/tools/gimplevelstool.c
index 1181b82..b4ff5c1 100644
--- a/app/tools/gimplevelstool.c
+++ b/app/tools/gimplevelstool.c
@@ -17,9 +17,6 @@
#include "config.h"
-#include <errno.h>
-
-#include <glib/gstdio.h>
#include <gegl.h>
#include <gtk/gtk.h>
@@ -618,30 +615,27 @@ gimp_levels_tool_settings_import (GimpImageMapTool *image_map_tool,
GError **error)
{
GimpLevelsTool *tool = GIMP_LEVELS_TOOL (image_map_tool);
- gchar *path;
- FILE *f;
+ GInputStream *input;
gchar header[64];
+ gsize bytes_read;
- path = g_file_get_path (file);
- f = g_fopen (path, "rt");
- g_free (path);
-
- if (! f)
+ input = G_INPUT_STREAM (g_file_read (file, NULL, error));
+ if (! input)
{
- g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
- _("Could not open '%s' for reading: %s"),
- gimp_file_get_utf8_name (file),
- g_strerror (errno));
+ g_prefix_error (error,
+ _("Could not open '%s' for reading: "),
+ gimp_file_get_utf8_name (file));
return FALSE;
}
- if (! fgets (header, sizeof (header), f))
+ if (! g_input_stream_read_all (input, header, sizeof (header),
+ &bytes_read, NULL, error) ||
+ bytes_read != sizeof (header))
{
- g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
- _("Could not read header from '%s': %s"),
- gimp_file_get_utf8_name (file),
- g_strerror (errno));
- fclose (f);
+ g_prefix_error (error,
+ _("Could not read header from '%s': "),
+ gimp_file_get_utf8_name (file));
+ g_object_unref (input);
return FALSE;
}
@@ -649,16 +643,16 @@ gimp_levels_tool_settings_import (GimpImageMapTool *image_map_tool,
{
gboolean success;
- rewind (f);
+ g_seekable_seek (G_SEEKABLE (input), 0, G_SEEK_SET, NULL, NULL);
- success = gimp_levels_config_load_cruft (tool->config, f, error);
+ success = gimp_levels_config_load_cruft (tool->config, input, error);
- fclose (f);
+ g_object_unref (input);
return success;
}
- fclose (f);
+ g_object_unref (input);
return GIMP_IMAGE_MAP_TOOL_CLASS (parent_class)->settings_import (image_map_tool,
file,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]