Read and write BMP file in C

And a simple test. I feel this one is a little messy. I'm not so sure about the helper functions I've made.

#include #include // for EXIT_SUCCESS and EXIT_FAILURE #include "bmp.h" BMPImage *read_image(const char *filename, char **error); void write_image(const char *filename, BMPImage *image, char **error); FILE *_open_file(const char *filename, const char *mode); void _handle_error(char **error, FILE *fp, BMPImage *image); void _clean_up(FILE *fp, BMPImage *image, char **error); int main(void) < char *error = NULL; BMPImage *image = read_image("6x6_24bit.bmp", &error); write_image("copy.bmp", image, &error); BMPImage *crop_image = crop_bmp(image, 2, 3, 4, 2, &error); write_image("crop.bmp", crop_image, &error); bool is_valid = check_bmp_header(&crop_image->header, fopen("crop.bmp", "rb")); _clean_up(NULL, image, &error); _clean_up(NULL, crop_image, &error); return EXIT_SUCCESS; > BMPImage *read_image(const char *filename, char **error) < FILE *input_ptr = _open_file(filename, "rb"); BMPImage *image = read_bmp(input_ptr, error); if (*error != NULL) < _handle_error(error, input_ptr, image); >fclose(input_ptr); return image; > void write_image(const char *filename, BMPImage *image, char **error) < FILE *output_ptr = _open_file(filename, "wb"); if (!write_bmp(output_ptr, image, error)) < _handle_error(error, output_ptr, image); >fclose(output_ptr); > /* * Open file. In case of error, print message and exit. */ FILE *_open_file(const char *filename, const char *mode) < FILE *fp = fopen(filename, mode); if (fp == NULL) < fprintf(stderr, "Could not open file %s", filename); exit(EXIT_FAILURE); >return fp; > /* * Print error message and clean up resources. */ void _handle_error(char **error, FILE *fp, BMPImage *image) < fprintf(stderr, "ERROR: %s\n", *error); _clean_up(fp, image, error); exit(EXIT_FAILURE); >/* * Close file and release memory. */ void _clean_up(FILE *fp, BMPImage *image, char **error) < if (fp != NULL) < fclose(fp); >free_bmp(image); free(*error); >