This is an automated email from the git hooks/post-receive script.

git pushed a commit to branch master
in repository legacy-imlib2.

View the commit online.

commit c3d524924ea4d879293d2fdc531a1106f21a4b4e
Author: Kim Woelders <[email protected]>
AuthorDate: Sat Feb 4 07:43:16 2023 +0100

    Savers: Centralize file open/close
    
    As done for the loaders a while back.
---
 src/lib/Imlib2_Loader.h           |  2 +-
 src/lib/image.c                   | 11 +++++++++++
 src/lib/loaders.h                 |  2 +-
 src/modules/loaders/loader_argb.c |  7 +------
 src/modules/loaders/loader_bmp.c  |  8 +-------
 src/modules/loaders/loader_ff.c   |  7 +------
 src/modules/loaders/loader_jpeg.c |  7 +------
 src/modules/loaders/loader_png.c  |  8 +-------
 src/modules/loaders/loader_pnm.c  |  7 +------
 src/modules/loaders/loader_tga.c  |  7 +------
 src/modules/loaders/loader_tiff.c |  2 +-
 src/modules/loaders/loader_webp.c |  7 +------
 src/modules/loaders/loader_xbm.c  |  8 +-------
 13 files changed, 23 insertions(+), 60 deletions(-)

diff --git a/src/lib/Imlib2_Loader.h b/src/lib/Imlib2_Loader.h
index b5b4cbf..8349fad 100644
--- a/src/lib/Imlib2_Loader.h
+++ b/src/lib/Imlib2_Loader.h
@@ -195,7 +195,7 @@ int                 __imlib_LoadProgressRows(ImlibImage * im,
 
 /* loader.h */
 
-#define IMLIB2_LOADER_VERSION 1
+#define IMLIB2_LOADER_VERSION 2
 
 typedef struct {
    unsigned char       ldr_version;     /* Module ABI version */
diff --git a/src/lib/image.c b/src/lib/image.c
index cc366cd..801d100 100644
--- a/src/lib/image.c
+++ b/src/lib/image.c
@@ -866,6 +866,7 @@ __imlib_SaveImage(ImlibImage * im, const char *file, ImlibLoadArgs * ila)
 {
    ImlibLoader        *l;
    ImlibLoaderCtx      ilc;
+   FILE               *fp;
    int                 loader_ret;
 
    if (!file)
@@ -883,14 +884,24 @@ __imlib_SaveImage(ImlibImage * im, const char *file, ImlibLoadArgs * ila)
         return;
      }
 
+   fp = fopen(file, "wb");
+   if (!fp)
+     {
+        ila->err = errno;
+        return;
+     }
+
    if (ila->pfunc)
       __imlib_LoadCtxInit(im, &ilc, ila->pfunc, ila->pgran);
 
    __imlib_ImageFileContextPush(im, strdup(file));
+   im->fi->fp = fp;
 
    /* call the saver */
    loader_ret = l->module->save(im);
 
+   fclose(fp);
+
    __imlib_ImageFileContextPop(im);
 
    im->lc = NULL;
diff --git a/src/lib/loaders.h b/src/lib/loaders.h
index f8c61ba..e10691a 100644
--- a/src/lib/loaders.h
+++ b/src/lib/loaders.h
@@ -3,7 +3,7 @@
 
 #include "types.h"
 
-#define IMLIB2_LOADER_VERSION 1
+#define IMLIB2_LOADER_VERSION 2
 
 typedef struct {
    unsigned char       ldr_version;     /* Module ABI version */
diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c
index fe70ea7..ca97799 100644
--- a/src/modules/loaders/loader_argb.c
+++ b/src/modules/loaders/loader_argb.c
@@ -109,14 +109,10 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    uint32_t           *ptr;
    int                 y, alpha = 0;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
 #ifdef WORDS_BIGENDIAN
    uint32_t           *buf = (uint32_t *) malloc(im->w * 4);
 #endif
@@ -153,7 +149,6 @@ _save(ImlibImage * im)
 #ifdef WORDS_BIGENDIAN
    free(buf);
 #endif
-   fclose(f);
 
    return rc;
 }
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c
index c47363a..95d25b1 100644
--- a/src/modules/loaders/loader_bmp.c
+++ b/src/modules/loaders/loader_bmp.c
@@ -761,14 +761,10 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    int                 i, j, pad;
    uint32_t            pixel;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_SUCCESS;
 
    /* calculate number of bytes to pad on end of each row */
@@ -806,8 +802,6 @@ _save(ImlibImage * im)
            WriteleByte(f, 0);
      }
 
-   fclose(f);
-
    return rc;
 }
 
diff --git a/src/modules/loaders/loader_ff.c b/src/modules/loaders/loader_ff.c
index aaacadb..1d62266 100644
--- a/src/modules/loaders/loader_ff.c
+++ b/src/modules/loaders/loader_ff.c
@@ -84,16 +84,12 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    size_t              rowlen, i, j;
    uint32_t            tmp32;
    uint16_t           *row;
    uint8_t            *dat;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_FAIL;
    row = NULL;
 
@@ -139,7 +135,6 @@ _save(ImlibImage * im)
 
  quit:
    free(row);
-   fclose(f);
 
    return rc;
 }
diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c
index b224425..906e8c1 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -256,7 +256,7 @@ _save(ImlibImage * im)
    int                 rc;
    struct jpeg_compress_struct jcs;
    ImLib_JPEG_data     jdata;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    uint8_t            *buf;
    uint32_t           *ptr;
    JSAMPROW           *jbuf;
@@ -271,10 +271,6 @@ _save(ImlibImage * im)
 
    rc = LOAD_FAIL;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      goto quit;
-
    /* set up error handling */
    jcs.err = _jdata_init(&jdata);
    if (sigsetjmp(jdata.setjmp_buffer, 1))
@@ -353,7 +349,6 @@ _save(ImlibImage * im)
    jpeg_finish_compress(&jcs);
    jpeg_destroy_compress(&jcs);
    free(buf);
-   fclose(f);
 
    return rc;
 }
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index b6536d9..8c6b79d 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -595,7 +595,7 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    png_structp         png_ptr;
    png_infop           info_ptr;
    uint32_t           *ptr;
@@ -607,10 +607,6 @@ _save(ImlibImage * im)
    int                 pass, n_passes = 1;
    int                 has_alpha;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_FAIL;
    info_ptr = NULL;
    data = ""
@@ -750,8 +746,6 @@ _save(ImlibImage * im)
    if (png_ptr)
       png_destroy_write_struct(&png_ptr, (png_infopp) NULL);
 
-   fclose(f);
-
    return rc;
 }
 
diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c
index 2f8b937..32ca492 100644
--- a/src/modules/loaders/loader_pnm.c
+++ b/src/modules/loaders/loader_pnm.c
@@ -615,15 +615,11 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    uint8_t            *buf, *bptr;
    uint32_t           *ptr;
    int                 x, y;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_FAIL;
 
    /* allocate a small buffer to convert image data */
@@ -683,7 +679,6 @@ _save(ImlibImage * im)
  quit:
    /* finish off */
    free(buf);
-   fclose(f);
 
    return rc;
 
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index 03285d4..3c95f39 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -498,16 +498,12 @@ static int
 _save(ImlibImage * im)
 {
    int                 rc;
-   FILE               *f;
+   FILE               *f = im->fi->fp;
    uint32_t           *dataptr;
    unsigned char      *buf, *bufptr;
    int                 y;
    tga_header          header;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_FAIL;
 
    /* assemble the TGA header information */
@@ -577,7 +573,6 @@ _save(ImlibImage * im)
 
  quit:
    free(buf);
-   fclose(f);
 
    return rc;
 }
diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c
index 00ca8cb..1770249 100644
--- a/src/modules/loaders/loader_tiff.c
+++ b/src/modules/loaders/loader_tiff.c
@@ -466,7 +466,7 @@ _save(ImlibImage * im)
    int                 i;
    ImlibImageTag      *tag;
 
-   tif = TIFFOpen(im->fi->name, "w");
+   tif = TIFFFdOpen(fileno(im->fi->fp), im->fi->name, "w");
    if (!tif)
       return LOAD_FAIL;
 
diff --git a/src/modules/loaders/loader_webp.c b/src/modules/loaders/loader_webp.c
index 81d14a9..5b74c2b 100644
--- a/src/modules/loaders/loader_webp.c
+++ b/src/modules/loaders/loader_webp.c
@@ -117,17 +117,13 @@ _load(ImlibImage * im, int load_data)
 static int
 _save(ImlibImage * im)
 {
-   FILE               *f;
    int                 rc;
+   FILE               *f = im->fi->fp;
    ImlibImageTag      *quality_tag;
    float               quality;
    uint8_t            *fdata;
    size_t              encoded_size;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_FAIL;
    fdata = NULL;
 
@@ -164,7 +160,6 @@ _save(ImlibImage * im)
  quit:
    if (fdata)
       WebPFree(fdata);
-   fclose(f);
 
    return rc;
 }
diff --git a/src/modules/loaders/loader_xbm.c b/src/modules/loaders/loader_xbm.c
index fc06b72..0b7abbc 100644
--- a/src/modules/loaders/loader_xbm.c
+++ b/src/modules/loaders/loader_xbm.c
@@ -211,17 +211,13 @@ _load(ImlibImage * im, int load_data)
 static int
 _save(ImlibImage * im)
 {
-   FILE               *f;
    int                 rc;
+   FILE               *f = im->fi->fp;
    const char         *s, *name;
    char               *bname;
    int                 i, k, x, y, bits, nval, val;
    uint32_t           *ptr;
 
-   f = fopen(im->fi->name, "wb");
-   if (!f)
-      return LOAD_FAIL;
-
    rc = LOAD_SUCCESS;
 
    name = im->fi->name;
@@ -261,8 +257,6 @@ _save(ImlibImage * im)
 
    fprintf(f, "};\n");
 
-   fclose(f);
-
    return rc;
 }
 

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.

Reply via email to