summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2018-06-25 20:04:20 +0200
committerMatthias Vogelgesang <matthias.vogelgesang@kit.edu>2018-06-25 20:04:20 +0200
commit39f64817b9fd5d222866d09bb5e8ceb45f924f6c (patch)
treedf44a20219d5c27e7e4356a2ae74df8446365b0e /src
parent04510c8bcd057412fdc4a125d86780b0f6e74fe7 (diff)
downloadufo-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.c20
-rw-r--r--src/readers/ufo-hdf5-reader.c5
-rw-r--r--src/readers/ufo-raw-reader.c6
-rw-r--r--src/readers/ufo-reader.c7
-rw-r--r--src/readers/ufo-reader.h10
-rw-r--r--src/readers/ufo-tiff-reader.c7
-rw-r--r--src/ufo-read-task.c3
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)
/*