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

-- 


Reply via email to