kwo pushed a commit to branch master. http://git.enlightenment.org/legacy/imlib2.git/commit/?id=6a7eb67f46064f9133ce0a54d17aebd92c61f0a5
commit 6a7eb67f46064f9133ce0a54d17aebd92c61f0a5 Author: Kim Woelders <[email protected]> Date: Wed Dec 4 17:25:16 2019 +0100 Saver cleanups - Do exit cleanups at exit. - Use LOAD_FAIL/SUCCESS/BREAK for save() exit code. - Cosmetics. --- src/modules/loaders/loader_argb.c | 26 ++++++++++-------- src/modules/loaders/loader_bmp.c | 11 ++++---- src/modules/loaders/loader_ff.c | 48 ++++++++++++++++---------------- src/modules/loaders/loader_jpeg.c | 36 ++++++++++-------------- src/modules/loaders/loader_png.c | 58 +++++++++++++++++---------------------- src/modules/loaders/loader_pnm.c | 34 ++++++++++------------- src/modules/loaders/loader_tga.c | 25 ++++++++--------- src/modules/loaders/loader_tiff.c | 54 ++++++++++-------------------------- src/modules/loaders/loader_webp.c | 29 +++++++++----------- 9 files changed, 136 insertions(+), 185 deletions(-) diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c index 041f56f..63fe81d 100644 --- a/src/modules/loaders/loader_argb.c +++ b/src/modules/loaders/loader_argb.c @@ -96,6 +96,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; FILE *f; DATA32 *ptr; int y, pl = 0, alpha = 0; @@ -105,15 +106,17 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) DATA32 *buf = (DATA32 *) malloc(im->w * 4); #endif - /* no image data? abort */ - if (!im->data) - return 0; f = fopen(im->real_file, "wb"); if (!f) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; + if (im->flags & F_HAS_ALPHA) alpha = 1; + fprintf(f, "ARGB %i %i %i\n", im->w, im->h, alpha); + ptr = im->data; for (y = 0; y < im->h; y++) { @@ -141,25 +144,26 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) l = y - pl; if (!progress(im, per, 0, (y - l), im->w, l)) { -#ifdef WORDS_BIGENDIAN - if (buf) - free(buf); -#endif - fclose(f); - return 2; + rc = LOAD_BREAK; + goto quit; } pper = per; pl = y; } } } + + rc = LOAD_SUCCESS; + + quit: /* finish off */ #ifdef WORDS_BIGENDIAN if (buf) free(buf); #endif fclose(f); - return 1; + + return rc; } void diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c index b84833d..4385e97 100644 --- a/src/modules/loaders/loader_bmp.c +++ b/src/modules/loaders/loader_bmp.c @@ -904,16 +904,16 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; FILE *f; int i, j, pad; DATA32 pixel; - if (!im->data) - return 0; - f = fopen(im->real_file, "wb"); if (!f) - return 0; + return LOAD_FAIL; + + rc = LOAD_SUCCESS; /* calculate number of bytes to pad on end of each row */ pad = (4 - ((im->w * 3) % 4)) & 0x03; @@ -951,7 +951,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) } fclose(f); - return 1; + + return rc; } void diff --git a/src/modules/loaders/loader_ff.c b/src/modules/loaders/loader_ff.c index 601a439..f6942d2 100644 --- a/src/modules/loaders/loader_ff.c +++ b/src/modules/loaders/loader_ff.c @@ -89,42 +89,39 @@ load(ImlibImage * im, ImlibProgressFunction progress, } char -save(ImlibImage * im, ImlibProgressFunction progress, char progress_gran) +save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; FILE *f; size_t rowlen, i, j; uint32_t tmp32; uint16_t *row; uint8_t *dat; - /* open the file for writing */ - if (!(f = fopen(im->real_file, "wb"))) - { - return 0; - } + f = fopen(im->real_file, "wb"); + if (!f) + return LOAD_FAIL; + + rc = LOAD_FAIL; + row = NULL; /* write header */ fputs("farbfeld", f); + tmp32 = htonl(im->w); if (fwrite(&tmp32, sizeof(uint32_t), 1, f) != 1) - { - fclose(f); - return 0; - } + goto quit; + tmp32 = htonl(im->h); if (fwrite(&tmp32, sizeof(uint32_t), 1, f) != 1) - { - fclose(f); - return 0; - } + goto quit; /* write data */ rowlen = im->w * (sizeof("RGBA") - 1); - if (!(row = malloc(rowlen * sizeof(uint16_t)))) - { - fclose(f); - return 0; - } + row = malloc(rowlen * sizeof(uint16_t)); + if (!row) + goto quit; + dat = (uint8_t *) im->data; for (i = 0; i < (uint32_t) im->h; ++i, dat += rowlen) { @@ -140,20 +137,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_gran) row[j + 3] = htons(dat[j + 3] * 257); } if (fwrite(row, sizeof(uint16_t), rowlen, f) != rowlen) - { - free(row); - fclose(f); - return 0; - } + goto quit; } + if (progress) { progress(im, 100, 0, 0, im->w, im->h); } + rc = LOAD_SUCCESS; + + quit: free(row); fclose(f); - return 1; + + return rc; } void diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c index c691799..2c0999a 100644 --- a/src/modules/loaders/loader_jpeg.c +++ b/src/modules/loaders/loader_jpeg.c @@ -202,6 +202,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; struct jpeg_compress_struct cinfo; ImLib_JPEG_data jdata; FILE *f; @@ -213,31 +214,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) int i, j, pl; char pper; - /* no image data? abort */ - if (!im->data) - return 0; - /* allocate a small buffer to convert image data */ buf = malloc(im->w * 3 * sizeof(DATA8)); if (!buf) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; f = fopen(im->real_file, "wb"); if (!f) - { - free(buf); - return 0; - } + goto quit; /* set up error handling */ cinfo.err = _jdata_init(&jdata); if (sigsetjmp(jdata.setjmp_buffer, 1)) - { - jpeg_destroy_compress(&cinfo); - free(buf); - fclose(f); - return 0; - } + goto quit; /* setup compress params */ jpeg_create_compress(&cinfo); @@ -310,24 +301,25 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) l = y - pl; if (!progress(im, per, 0, (y - l), im->w, l)) { - jpeg_finish_compress(&cinfo); - jpeg_destroy_compress(&cinfo); - free(buf); - fclose(f); - return 2; + rc = LOAD_BREAK; + goto quit; } pper = per; pl = y; } } } + + rc = LOAD_SUCCESS; + + quit: /* finish off */ jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); free(buf); fclose(f); - return 1; - progress = NULL; + + return rc; } void diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c index 7509f7c..ff771d8 100644 --- a/src/modules/loaders/loader_png.c +++ b/src/modules/loaders/loader_png.c @@ -206,6 +206,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; FILE *f; png_structp png_ptr; png_infop info_ptr; @@ -216,32 +217,24 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) ImlibImageTag *tag; int quality = 75, compression = 3, num_passes = 1, pass; - if (!im->data) - return 0; - f = fopen(im->real_file, "wb"); if (!f) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; + info_ptr = NULL; + data = NULL; + png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (!png_ptr) - { - fclose(f); - return 0; - } + goto quit; + info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) - { - fclose(f); - png_destroy_write_struct(&png_ptr, (png_infopp) NULL); - return 0; - } + goto quit; + if (setjmp(png_jmpbuf(png_ptr))) - { - fclose(f); - png_destroy_write_struct(&png_ptr, (png_infopp) & info_ptr); - png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr); - return 0; - } + goto quit; /* check whether we should use interlacing */ interlace = PNG_INTERLACE_NONE; @@ -252,7 +245,6 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) #endif } - data = NULL; png_init_io(png_ptr, f); if (im->flags & F_HAS_ALPHA) { @@ -352,15 +344,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) l = y - pl; if (!progress(im, per, 0, (y - l), im->w, l)) { - if (data) - free(data); - png_write_end(png_ptr, info_ptr); - png_destroy_write_struct(&png_ptr, - (png_infopp) & info_ptr); - png_destroy_info_struct(png_ptr, - (png_infopp) & info_ptr); - fclose(f); - return 2; + rc = LOAD_BREAK; + goto quit; } pper = per; pl = y; @@ -369,14 +354,21 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) ptr += im->w; } } - if (data) - free(data); + + rc = LOAD_SUCCESS; + + quit: + free(data); png_write_end(png_ptr, info_ptr); png_destroy_write_struct(&png_ptr, (png_infopp) & info_ptr); - png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr); + if (info_ptr) + png_destroy_info_struct(png_ptr, (png_infopp) & info_ptr); + if (png_ptr) + png_destroy_write_struct(&png_ptr, (png_infopp) NULL); fclose(f); - return 1; + + return rc; } /* fills the ImlibLoader struct with a string array of format file */ diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c index a7fd178..8f23acd 100644 --- a/src/modules/loaders/loader_pnm.c +++ b/src/modules/loaders/loader_pnm.c @@ -421,24 +421,22 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) int x, y, pl = 0; char pper = 0; - /* no image data? abort */ - if (!im->data) - return 0; f = fopen(im->real_file, "wb"); if (!f) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; - rc = 0; /* Error */ + /* allocate a small buffer to convert image data */ + buf = malloc(im->w * 4 * sizeof(DATA8)); + if (!buf) + goto quit; + + ptr = im->data; /* if the image has a useful alpha channel */ if (im->flags & F_HAS_ALPHA) { - /* allocate a small buffer to convert image data */ - buf = malloc(im->w * 4 * sizeof(DATA8)); - if (!buf) - goto quit; - - ptr = im->data; fprintf(f, "P8\n" "# PNM File written by Imlib2\n" "%i %i\n" "255\n", im->w, im->h); for (y = 0; y < im->h; y++) @@ -462,12 +460,6 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) } else { - /* allocate a small buffer to convert image data */ - buf = malloc(im->w * 3 * sizeof(DATA8)); - if (!buf) - goto quit; - - ptr = im->data; fprintf(f, "P6\n" "# PNM File written by Imlib2\n" "%i %i\n" "255\n", im->w, im->h); for (y = 0; y < im->h; y++) @@ -489,15 +481,17 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) } } - rc = 1; /* Ok */ + rc = LOAD_SUCCESS; + quit: /* finish off */ free(buf); - quit: fclose(f); + return rc; + quit_progress: - rc = 2; + rc = LOAD_BREAK; goto quit; } diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c index ffd8869..523a5c6 100644 --- a/src/modules/loaders/loader_tga.c +++ b/src/modules/loaders/loader_tga.c @@ -65,20 +65,19 @@ typedef struct { char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; FILE *f; DATA32 *dataptr; unsigned char *buf, *bufptr; int y, pl = 0; char pper = 0; - tga_header header; - if (!im->data) - return 0; - f = fopen(im->real_file, "wb"); if (!f) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; /* assemble the TGA header information */ @@ -109,10 +108,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) /* allocate a buffer to receive the BGRA-swapped pixel values */ buf = malloc(im->w * im->h * ((im->flags & F_HAS_ALPHA) ? 4 : 3)); if (!buf) - { - fclose(f); - return 0; - } + goto quit; /* now we have to read from im->data into buf, swapping RGBA to BGRA */ dataptr = im->data; @@ -147,9 +143,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) l = y - pl; if (!progress(im, per, 0, (y - l), im->w, l)) { - free(buf); - fclose(f); - return 2; + rc = LOAD_BREAK; + goto quit; } pper = per; pl = y; @@ -163,9 +158,13 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) /* write the image data */ fwrite(buf, 1, im->w * im->h * ((im->flags & F_HAS_ALPHA) ? 4 : 3), f); + rc = LOAD_SUCCESS; + + quit: free(buf); fclose(f); - return 1; + + return rc; } /* Load up a TGA file diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c index 585a873..14f22e0 100644 --- a/src/modules/loaders/loader_tiff.c +++ b/src/modules/loaders/loader_tiff.c @@ -400,6 +400,7 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; TIFF *tif = NULL; uint8 *buf = NULL; DATA32 pixel, *data = im->data; @@ -415,13 +416,11 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) ImlibImageTag *tag; int compression_type = COMPRESSION_DEFLATE; - if (!im->data) - return 0; - tif = TIFFOpen(im->real_file, "w"); - if (!tif) - return 0; + return LOAD_FAIL; + + rc = LOAD_FAIL; /* None of the TIFFSetFields are checked for errors, but since they */ /* shouldn't fail, this shouldn't be a problem */ @@ -445,49 +444,27 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) switch (compression_type) { case COMPRESSION_NONE: - break; case COMPRESSION_CCITTRLE: - break; case COMPRESSION_CCITTFAX3: - break; case COMPRESSION_CCITTFAX4: - break; case COMPRESSION_LZW: - break; case COMPRESSION_OJPEG: - break; case COMPRESSION_JPEG: - break; case COMPRESSION_NEXT: - break; case COMPRESSION_CCITTRLEW: - break; case COMPRESSION_PACKBITS: - break; case COMPRESSION_THUNDERSCAN: - break; case COMPRESSION_IT8CTPAD: - break; case COMPRESSION_IT8LW: - break; case COMPRESSION_IT8MP: - break; case COMPRESSION_IT8BL: - break; case COMPRESSION_PIXARFILM: - break; case COMPRESSION_PIXARLOG: - break; case COMPRESSION_DEFLATE: - break; case COMPRESSION_ADOBE_DEFLATE: - break; case COMPRESSION_DCS: - break; case COMPRESSION_JBIG: - break; case COMPRESSION_SGILOG: - break; case COMPRESSION_SGILOG24: break; default: @@ -511,12 +488,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, TIFFDefaultStripSize(tif, 0)); buf = (uint8 *) _TIFFmalloc(TIFFScanlineSize(tif)); - if (!buf) - { - TIFFClose(tif); - return 0; - } + goto quit; for (y = 0; y < im->h; y++) { @@ -547,11 +520,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) } if (!TIFFWriteScanline(tif, buf, y, 0)) - { - _TIFFfree(buf); - TIFFClose(tif); - return 0; - } + goto quit; if (progress) { @@ -569,10 +538,15 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) } } - _TIFFfree(buf); - TIFFClose(tif); + rc = LOAD_SUCCESS; + + quit: + if (buf) + _TIFFfree(buf); + if (tif) + TIFFClose(tif); - return 1; + return rc; } void diff --git a/src/modules/loaders/loader_webp.c b/src/modules/loaders/loader_webp.c index 626ee58..42b4285 100644 --- a/src/modules/loaders/loader_webp.c +++ b/src/modules/loaders/loader_webp.c @@ -113,23 +113,20 @@ load(ImlibImage * im, ImlibProgressFunction progress, char save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) { + int rc; int encoded_fd; ImlibImageTag *quality_tag; float quality; uint8_t *encoded_data; ssize_t encoded_size; - if (!im->data) - return 0; - encoded_fd = open(im->real_file, O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH); - if (encoded_fd < 0) - { - perror(im->real_file); - return 0; - } + return LOAD_FAIL; + + rc = LOAD_FAIL; + encoded_data = NULL; quality = 75; quality_tag = __imlib_GetTag(im, "quality"); @@ -157,16 +154,16 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity) im->w * 4, quality, &encoded_data); if (write(encoded_fd, encoded_data, encoded_size) < encoded_size) - { - close(encoded_fd); - WebPFree(encoded_data); - perror(im->real_file); - return 0; - } + goto quit; + + rc = LOAD_SUCCESS; + quit: + if (encoded_data) + WebPFree(encoded_data); close(encoded_fd); - WebPFree(encoded_data); - return 1; + + return rc; } void --
