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.