diff options
author | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2018-06-25 20:04:20 +0200 |
---|---|---|
committer | Matthias Vogelgesang <matthias.vogelgesang@kit.edu> | 2018-06-25 20:04:20 +0200 |
commit | 39f64817b9fd5d222866d09bb5e8ceb45f924f6c (patch) | |
tree | df44a20219d5c27e7e4356a2ae74df8446365b0e /src | |
parent | 04510c8bcd057412fdc4a125d86780b0f6e74fe7 (diff) | |
download | ufo-filters-39f64817b9fd5d222866d09bb5e8ceb45f924f6c.tar.gz ufo-filters-39f64817b9fd5d222866d09bb5e8ceb45f924f6c.tar.bz2 ufo-filters-39f64817b9fd5d222866d09bb5e8ceb45f924f6c.tar.xz ufo-filters-39f64817b9fd5d222866d09bb5e8ceb45f924f6c.zip |
read: report errors on _get_meta
Diffstat (limited to 'src')
-rw-r--r-- | src/readers/ufo-edf-reader.c | 20 | ||||
-rw-r--r-- | src/readers/ufo-hdf5-reader.c | 5 | ||||
-rw-r--r-- | src/readers/ufo-raw-reader.c | 6 | ||||
-rw-r--r-- | src/readers/ufo-reader.c | 7 | ||||
-rw-r--r-- | src/readers/ufo-reader.h | 10 | ||||
-rw-r--r-- | src/readers/ufo-tiff-reader.c | 7 | ||||
-rw-r--r-- | src/ufo-read-task.c | 3 |
7 files changed, 37 insertions, 21 deletions
diff --git a/src/readers/ufo-edf-reader.c b/src/readers/ufo-edf-reader.c index 187256c..cc52ef1 100644 --- a/src/readers/ufo-edf-reader.c +++ b/src/readers/ufo-edf-reader.c @@ -189,10 +189,11 @@ ufo_edf_reader_get_depth (const gchar *value, UfoBufferDepth *depth, guint *byte *bytes = 1; } -static void +static gboolean ufo_edf_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth) + UfoBufferDepth *bitdepth, + GError **error) { UfoEdfReaderPrivate *priv; gchar **tokens; @@ -203,21 +204,26 @@ ufo_edf_reader_get_meta (UfoReader *reader, header = g_malloc (priv->size); if (fread (header, 1, priv->size, priv->fp) != (gsize) priv->size) { + g_set_error_literal (error, UFO_TASK_ERROR, UFO_TASK_ERROR_SETUP, + "Could not read EDF header."); g_free (header); fclose (priv->fp); priv->fp = NULL; - return; + return FALSE; } header_trig_position = g_strstr_len (header, -1, "}"); data_position = header_trig_position - header + 2; + if (header_trig_position == NULL || data_position % 512) { - g_warning ("Edf header corrupted"); + g_set_error_literal (error, UFO_TASK_ERROR, UFO_TASK_ERROR_SETUP, + "Corrupt EDF header or not an EDF file."); g_free (header); fclose (priv->fp); priv->fp = NULL; - return; + return FALSE; } + /* Go to the data position */ fseek (priv->fp, data_position, SEEK_SET); /* Don't process binary data */ @@ -249,8 +255,7 @@ ufo_edf_reader_get_meta (UfoReader *reader, else if (!g_strcmp0 (key, "DataType")) { ufo_edf_reader_get_depth (value, bitdepth, &priv->bytes_per_sample); } - else if (!g_strcmp0 (key, "ByteOrder") && - !g_strcmp0 (value, "HighByteFirst")) { + else if (!g_strcmp0 (key, "ByteOrder") && !g_strcmp0 (value, "HighByteFirst")) { priv->big_endian = TRUE; } else if (!g_strcmp0 (key, "Size")) { @@ -267,6 +272,7 @@ ufo_edf_reader_get_meta (UfoReader *reader, g_strfreev (tokens); g_free (header); + return TRUE; } static void diff --git a/src/readers/ufo-hdf5-reader.c b/src/readers/ufo-hdf5-reader.c index 7147ace..f875463 100644 --- a/src/readers/ufo-hdf5-reader.c +++ b/src/readers/ufo-hdf5-reader.c @@ -146,10 +146,11 @@ ufo_hdf5_reader_read (UfoReader *reader, priv->current++; } -static void +static gboolean ufo_hdf5_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth) + UfoBufferDepth *bitdepth, + GError **error) { UfoHdf5ReaderPrivate *priv; diff --git a/src/readers/ufo-raw-reader.c b/src/readers/ufo-raw-reader.c index 06a772d..d9b06b9 100644 --- a/src/readers/ufo-raw-reader.c +++ b/src/readers/ufo-raw-reader.c @@ -146,10 +146,11 @@ ufo_raw_reader_read (UfoReader *reader, fseek (priv->fp, priv->post_offset, SEEK_CUR); } -static void +static gboolean ufo_raw_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth) + UfoBufferDepth *bitdepth, + GError **error) { UfoRawReaderPrivate *priv; @@ -158,6 +159,7 @@ ufo_raw_reader_get_meta (UfoReader *reader, requisition->dims[0] = priv->width; requisition->dims[1] = priv->height; *bitdepth = priv->bitdepth; + return TRUE; } static void diff --git a/src/readers/ufo-reader.c b/src/readers/ufo-reader.c index be7d8ee..499abf0 100644 --- a/src/readers/ufo-reader.c +++ b/src/readers/ufo-reader.c @@ -52,12 +52,13 @@ ufo_reader_data_available (UfoReader *reader) return UFO_READER_GET_IFACE (reader)->data_available (reader); } -void +gboolean ufo_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth) + UfoBufferDepth *bitdepth, + GError **error) { - UFO_READER_GET_IFACE (reader)->get_meta (reader, requisition, bitdepth); + return UFO_READER_GET_IFACE (reader)->get_meta (reader, requisition, bitdepth, error); } void diff --git a/src/readers/ufo-reader.h b/src/readers/ufo-reader.h index 7ab440e..52c6c4b 100644 --- a/src/readers/ufo-reader.h +++ b/src/readers/ufo-reader.h @@ -46,9 +46,10 @@ struct _UfoReaderIface { GError **error); void (*close) (UfoReader *reader); gboolean (*data_available) (UfoReader *reader); - void (*get_meta) (UfoReader *reader, + gboolean (*get_meta) (UfoReader *reader, UfoRequisition *requisition, - guint *bitdepth); + guint *bitdepth, + GError **error); void (*read) (UfoReader *reader, UfoBuffer *buffer, UfoRequisition *requisition, @@ -65,9 +66,10 @@ gboolean ufo_reader_open (UfoReader *reader, GError **error); void ufo_reader_close (UfoReader *reader); gboolean ufo_reader_data_available (UfoReader *reader); -void ufo_reader_get_meta (UfoReader *reader, +gboolean ufo_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth); + UfoBufferDepth *bitdepth, + GError **error); void ufo_reader_read (UfoReader *reader, UfoBuffer *buffer, UfoRequisition *requisition, diff --git a/src/readers/ufo-tiff-reader.c b/src/readers/ufo-tiff-reader.c index c67629e..336d4c3 100644 --- a/src/readers/ufo-tiff-reader.c +++ b/src/readers/ufo-tiff-reader.c @@ -194,10 +194,11 @@ ufo_tiff_reader_read (UfoReader *reader, priv->more = TIFFReadDirectory (priv->tiff) == 1; } -static void +static gboolean ufo_tiff_reader_get_meta (UfoReader *reader, UfoRequisition *requisition, - UfoBufferDepth *bitdepth) + UfoBufferDepth *bitdepth, + GError **error) { UfoTiffReaderPrivate *priv; guint32 width; @@ -228,6 +229,8 @@ ufo_tiff_reader_get_meta (UfoReader *reader, default: *bitdepth = UFO_BUFFER_DEPTH_32F; } + + return TRUE; } static void diff --git a/src/ufo-read-task.c b/src/ufo-read-task.c index 4a92abe..6efbd1d 100644 --- a/src/ufo-read-task.c +++ b/src/ufo-read-task.c @@ -319,7 +319,8 @@ ufo_read_task_get_requisition (UfoTask *task, return; } - ufo_reader_get_meta (priv->reader, requisition, &priv->depth); + if (!ufo_reader_get_meta (priv->reader, requisition, &priv->depth, error)) + return; if (priv->depth > 32) /* |