diff options
Diffstat (limited to 'libcrystfel/src/image.c')
-rw-r--r-- | libcrystfel/src/image.c | 20 |
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, |