aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/image.c
diff options
context:
space:
mode:
Diffstat (limited to 'libcrystfel/src/image.c')
-rw-r--r--libcrystfel/src/image.c20
1 files changed, 15 insertions, 5 deletions
diff --git a/libcrystfel/src/image.c b/libcrystfel/src/image.c
index b70b920f..b9450fc0 100644
--- a/libcrystfel/src/image.c
+++ b/libcrystfel/src/image.c
@@ -479,27 +479,37 @@ struct image *image_read(DataTemplate *dtempl, const char *filename,
{
struct image *image;
int i;
+ int r;
if ( dtempl == NULL ) {
ERROR("NULL data template!\n");
return NULL;
}
+ image = image_new();
+ if ( image == NULL ) {
+ ERROR("Couldn't allocate image structure.\n");
+ return NULL;
+ }
+
if ( is_hdf5_file(filename) ) {
- image = image_hdf5_read(dtempl, filename, event);
+ r = image_hdf5_read(image, dtempl, filename, event);
} else if ( is_cbf_file(filename) ) {
- image = image_cbf_read(dtempl, filename, event, 0);
+ r = image_cbf_read(image, dtempl, filename, event, 0);
} else if ( is_cbfgz_file(filename) ) {
- image = image_cbf_read(dtempl, filename, event, 1);
+ r = image_cbf_read(image, dtempl, filename, event, 1);
} else {
ERROR("Unrecognised file type: %s\n", filename);
- return NULL;
+ r = 1;
}
- if ( image == NULL ) return NULL;
+ if ( r ) {
+ image_free(image);
+ return NULL;
+ }
/* Wavelength might be needed to create detgeom (adu_per_eV) */
image->lambda = convert_to_m(get_value(image,