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 e55208f4d67f4516af7fc5cb281d7e3b270f5750
Author: Kim Woelders <[email protected]>
AuthorDate: Sun Mar 27 10:28:03 2022 +0200
loading: Introduce __imlib_ImageFileContextPush/Pop()
Makes dealing with nested file contexts much easier.
---
src/lib/Imlib2_Loader.h | 12 ++-
src/lib/image.c | 158 ++++++++++++++++++++++------------
src/lib/image.h | 19 ++--
src/modules/loaders/decompress_load.c | 9 +-
src/modules/loaders/loader_argb.c | 11 +--
src/modules/loaders/loader_bmp.c | 11 +--
src/modules/loaders/loader_ff.c | 11 +--
src/modules/loaders/loader_gif.c | 7 +-
src/modules/loaders/loader_heif.c | 11 +--
src/modules/loaders/loader_ico.c | 10 ++-
src/modules/loaders/loader_id3.c | 8 +-
src/modules/loaders/loader_j2k.c | 14 +--
src/modules/loaders/loader_jpeg.c | 9 +-
src/modules/loaders/loader_jxl.c | 7 +-
src/modules/loaders/loader_lbm.c | 7 +-
src/modules/loaders/loader_png.c | 13 +--
src/modules/loaders/loader_pnm.c | 9 +-
src/modules/loaders/loader_ps.c | 7 +-
src/modules/loaders/loader_svg.c | 9 +-
src/modules/loaders/loader_tga.c | 19 ++--
src/modules/loaders/loader_tiff.c | 13 +--
src/modules/loaders/loader_webp.c | 11 +--
src/modules/loaders/loader_xbm.c | 15 ++--
src/modules/loaders/loader_xpm.c | 9 +-
24 files changed, 242 insertions(+), 167 deletions(-)
diff --git a/src/lib/Imlib2_Loader.h b/src/lib/Imlib2_Loader.h
index 8808711..4dccfdc 100644
--- a/src/lib/Imlib2_Loader.h
+++ b/src/lib/Imlib2_Loader.h
@@ -114,6 +114,13 @@ unsigned int __imlib_time_us(void);
#define LOAD_BADIMAGE -3 /* Image is corrupt */
#define LOAD_BADFRAME -4 /* Requested frame not found */
+typedef struct _ImlibImageFileInfo {
+ struct _ImlibImageFileInfo *next;
+ char *name;
+ FILE *fp;
+ off_t fsize;
+} ImlibImageFileInfo;
+
typedef struct _imlibldctx ImlibLdCtx;
typedef struct _ImlibImageTag {
@@ -125,10 +132,7 @@ typedef struct _ImlibImageTag {
} ImlibImageTag;
struct _ImlibImage {
- char *real_file;
- FILE *fp;
- off_t fsize;
-
+ ImlibImageFileInfo *fi;
ImlibLdCtx *lc;
int w, h;
diff --git a/src/lib/image.c b/src/lib/image.c
index ac1222c..a7844b2 100644
--- a/src/lib/image.c
+++ b/src/lib/image.c
@@ -74,6 +74,77 @@ __imlib_ReplaceData(ImlibImage * im, unsigned int *new_data)
im->data_memory_func = NULL;
}
+static int
+__imlib_FileContextOpen(ImlibImageFileInfo * fi, FILE * fp, off_t fsize)
+{
+ struct stat st;
+
+ if (fp)
+ {
+ fi->keep_fp = true;
+ fi->fp = fp;
+ }
+ else
+ {
+ fi->fp = fopen(fi->name, "rb");
+ if (!fi->fp)
+ return -1;
+ }
+
+ if (fi->fsize == 0)
+ {
+ if (fsize == 0)
+ {
+ __imlib_FileStat(fi->name, &st);
+ fsize = st.st_size;
+ }
+ fi->fsize = fsize;
+ }
+
+ return 0;
+}
+
+static void
+__imlib_FileContextClose(ImlibImageFileInfo * fi)
+{
+ if (!fi->keep_fp)
+ {
+ if (fi->fp)
+ {
+ fclose(fi->fp);
+ fi->fp = NULL;
+ }
+ }
+}
+
+static int
+__imlib_ImageFileContextPush(ImlibImage * im, bool load, char *file)
+{
+ ImlibImageFileInfo *fi;
+
+ fi = calloc(1, sizeof(ImlibImageFileInfo));
+ if (!fi)
+ return -1;
+
+ fi->name = file; /* file must have been alloced, will be freed */
+
+ fi->next = im->fi;
+ im->fi = fi;
+
+ return 0;
+}
+
+static void
+__imlib_ImageFileContextPop(ImlibImage * im)
+{
+ ImlibImageFileInfo *fi = im->fi;
+
+ im->fi = fi->next;
+
+ free(fi->name);
+ free(fi);
+}
+
/* create an image data struct and fill it in */
static ImlibImage *
__imlib_ProduceImage(void)
@@ -96,14 +167,16 @@ __imlib_ConsumeImage(ImlibImage * im)
__imlib_FreeAllTags(im);
- if (im->real_file && im->real_file != im->file)
- free(im->real_file);
- free(im->file);
+ if (im->fi && im->fi->name && im->fi->name != im->file)
+ free(im->file);
free(im->key);
if (im->data && !IM_FLAG_ISSET(im, F_DONT_FREE_DATA))
__imlib_FreeData(im);
free(im->format);
+ if (im->fi)
+ __imlib_ImageFileContextPop(im);
+
free(im);
}
@@ -127,7 +200,7 @@ __imlib_FindCachedImage(const char *file, int frame)
im->next = images;
images = im;
}
- DP(" got %p: '%s' frame %d\n", im, im->real_file, im->frame_num);
+ DP(" got %p: '%s' frame %d\n", im, im->fi->name, im->frame_num);
return im;
}
}
@@ -139,7 +212,7 @@ __imlib_FindCachedImage(const char *file, int frame)
static void
__imlib_AddImageToCache(ImlibImage * im)
{
- DP("%s: %p: '%s' frame %d\n", __func__, im, im->real_file, im->frame_num);
+ DP("%s: %p: '%s' frame %d\n", __func__, im, im->fi->name, im->frame_num);
im->next = images;
images = im;
}
@@ -151,7 +224,7 @@ __imlib_RemoveImageFromCache(ImlibImage * im_del)
ImlibImage *im, *im_prev;
im = im_del;
- DP("%s: %p: '%s' frame %d\n", __func__, im, im->real_file, im->frame_num);
+ DP("%s: %p: '%s' frame %d\n", __func__, im, im->fi->name, im->frame_num);
for (im = images, im_prev = NULL; im; im_prev = im, im = im->next)
{
@@ -278,7 +351,7 @@ __imlib_LoadImageWrapper(const ImlibLoader * l, ImlibImage * im, int load_data)
int rc;
DP("%s: fmt='%s' file='%s'(%s), imm=%d\n", __func__,
- l->name, im->file, im->real_file, load_data);
+ l->name, im->file, im->fi->name, load_data);
#if IMLIB2_DEBUG
unsigned int t0 = __imlib_time_us();
@@ -286,22 +359,10 @@ __imlib_LoadImageWrapper(const ImlibLoader * l, ImlibImage * im, int load_data)
if (l->module->load)
{
- FILE *fp = NULL;
-
- if (!im->fp)
- {
- fp = im->fp = fopen(im->real_file, "rb");
- if (!im->fp)
- return 0;
- }
-
if (!im->format)
im->format = strdup(l->name);
rc = l->module->load(im, load_data);
-
- if (fp)
- fclose(fp);
}
else
{
@@ -309,7 +370,7 @@ __imlib_LoadImageWrapper(const ImlibLoader * l, ImlibImage * im, int load_data)
}
DP("%s: %-4s: %s: Elapsed time: %.3f ms\n", __func__,
- l->name, im->file, 1e-3 * (__imlib_time_us() - t0));
+ l->name, im->fi->name, 1e-3 * (__imlib_time_us() - t0));
if (rc <= LOAD_FAIL)
{
@@ -389,7 +450,7 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
current_modified_time = ila->fp ?
__imlib_FileModDateFd(fileno(ila->fp)) :
- __imlib_FileModDate(im->real_file);
+ __imlib_FileModDate(im->fi->name);
/* if the file on disk is newer than the cached one */
if (current_modified_time != im->moddate)
{
@@ -450,17 +511,11 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
/* so produce a new one and load an image into that */
im = __imlib_ProduceImage();
im->file = strdup(file);
- im->fsize = st.st_size;
- im->real_file = im_file ? im_file : im->file;
im->key = im_key;
im->frame_num = ila->frame;
- if (ila->fp)
- im->fp = ila->fp;
- else
- im->fp = fopen(im->real_file, "rb");
-
- if (!im->fp)
+ if (__imlib_ImageFileContextPush(im, true, im_file ? im_file : im->file) ||
+ __imlib_FileContextOpen(im->fi, ila->fp, st.st_size))
{
ila->err = errno;
__imlib_ConsumeImage(im);
@@ -478,7 +533,7 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
}
/* take a guess by extension on the best loader to use */
- best_loader = __imlib_FindBestLoader(im->real_file, NULL, 0);
+ best_loader = __imlib_FindBestLoader(im->fi->name, NULL, 0);
loader_ret = LOAD_FAIL;
loaders = NULL;
@@ -527,8 +582,8 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
case LOAD_FAIL:
/* Image was not recognized by loader - try next */
- fflush(im->fp);
- rewind(im->fp);
+ fflush(im->fi->fp);
+ rewind(im->fi->fp);
continue;
default: /* We should not go here */
@@ -548,8 +603,7 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
im->lc = NULL;
if (!ila->fp)
- fclose(im->fp);
- im->fp = NULL;
+ __imlib_FileContextClose(im->fi);
if (loader_ret <= LOAD_FAIL)
{
@@ -585,8 +639,13 @@ __imlib_LoadImageData(ImlibImage * im)
if (!im->loader)
return IMLIB_ERR_INTERNAL;
+ err = __imlib_FileContextOpen(im->fi, NULL, 0);
+ if (err)
+ return err;
err = __imlib_LoadImageWrapper(im->loader, im, 1);
+ __imlib_FileContextClose(im->fi);
+
return __imlib_LoadErrorToErrno(err, 0);
}
@@ -595,29 +654,19 @@ __imlib_LoadEmbedded(ImlibLoader * l, ImlibImage * im, const char *file,
int load_data)
{
int rc;
- struct stat st;
- char *file_save;
- FILE *fp_save;
- off_t fsize_save;
if (!l || !im)
return 0;
- /* remember the original filename */
- file_save = im->real_file;
- im->real_file = strdup(file);
- fp_save = im->fp;
- im->fp = NULL;
- fsize_save = im->fsize;
- __imlib_FileStat(file, &st);
- im->fsize = st.st_size;
+ __imlib_ImageFileContextPush(im, true, strdup(file));
+ rc = __imlib_FileContextOpen(im->fi, NULL, 0);
+ if (rc)
+ return LOAD_FAIL;
rc = __imlib_LoadImageWrapper(l, im, load_data);
- im->fp = fp_save;
- free(im->real_file);
- im->real_file = file_save;
- im->fsize = fsize_save;
+ __imlib_FileContextClose(im->fi);
+ __imlib_ImageFileContextPop(im);
return rc;
}
@@ -720,7 +769,6 @@ void
__imlib_SaveImage(ImlibImage * im, const char *file, ImlibLoadArgs * ila)
{
ImlibLoader *l;
- char *pfile;
ImlibLdCtx ilc;
int loader_ret;
@@ -742,16 +790,12 @@ __imlib_SaveImage(ImlibImage * im, const char *file, ImlibLoadArgs * ila)
if (ila->pfunc)
__imlib_LoadCtxInit(im, &ilc, ila->pfunc, ila->pgran);
- /* set the filename to the user supplied one */
- pfile = im->real_file;
- im->real_file = strdup(file);
+ __imlib_ImageFileContextPush(im, false, strdup(file));
/* call the saver */
loader_ret = l->module->save(im);
- /* set the filename back to the laoder image filename */
- free(im->real_file);
- im->real_file = pfile;
+ __imlib_ImageFileContextPop(im);
im->lc = NULL;
diff --git a/src/lib/image.h b/src/lib/image.h
index e3989a0..b2dee40 100644
--- a/src/lib/image.h
+++ b/src/lib/image.h
@@ -7,8 +7,6 @@
#include "types.h"
-typedef struct _imlibldctx ImlibLdCtx;
-
typedef void (*ImlibDataDestructorFunction)(ImlibImage * im, void *data);
typedef void *(*ImlibImageDataMemoryFunction)(void *, size_t size);
@@ -28,6 +26,18 @@ typedef int (*ImlibProgressFunction)(ImlibImage * im, char percent,
#define FF_FRAME_DISPOSE_CLEAR (1 << 2) /* Clear before rendering next frame */
#define FF_FRAME_DISPOSE_PREV (1 << 3) /* Revert before rendering next frame */
+typedef struct _ImlibImageFileInfo {
+ struct _ImlibImageFileInfo *next;
+ char *name;
+ FILE *fp;
+ off_t fsize;
+ /* vvv Private vvv */
+ char keep_fp;
+ /* ^^^ Private ^^^ */
+} ImlibImageFileInfo;
+
+typedef struct _imlibldctx ImlibLdCtx;
+
typedef struct {
int left, right, top, bottom;
} ImlibBorder;
@@ -41,10 +51,7 @@ typedef struct _ImlibImageTag {
} ImlibImageTag;
struct _ImlibImage {
- char *real_file;
- FILE *fp;
- off_t fsize;
-
+ ImlibImageFileInfo *fi;
ImlibLdCtx *lc;
int w, h;
diff --git a/src/modules/loaders/decompress_load.c b/src/modules/loaders/decompress_load.c
index aeca4a9..a65a977 100644
--- a/src/modules/loaders/decompress_load.c
+++ b/src/modules/loaders/decompress_load.c
@@ -17,7 +17,7 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
/* make sure this file ends in a known name and that there's another ext
* (e.g. "foo.png.bz2") */
- for (p = s = im->real_file, q = NULL; *s; s++)
+ for (p = s = im->fi->name, q = NULL; *s; s++)
{
if (*s != '.' && *s != '/')
continue;
@@ -47,14 +47,15 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
if (!loader)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
if ((dest = mkstemp(tmp)) < 0)
QUIT_WITH_RC(LOAD_OOM);
- res = fdec(fdata, im->fsize, dest);
+ res = fdec(fdata, im->fi->fsize, dest);
close(dest);
@@ -64,7 +65,7 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
unlink(tmp);
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c
index c66e923..f54061e 100644
--- a/src/modules/loaders/loader_argb.c
+++ b/src/modules/loaders/loader_argb.c
@@ -50,16 +50,17 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
/* header */
fptr = fdata;
- size = im->fsize > 31 ? 31 : im->fsize; /* Look for \n in at most 31 byte */
+ size = im->fi->fsize > 31 ? 31 : im->fi->fsize; /* Look for \n in at most 31 byte */
row = memchr(fptr, '\n', size);
if (!row)
goto quit;
@@ -107,7 +108,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -120,7 +121,7 @@ _save(ImlibImage * im)
uint32_t *ptr;
int y, alpha = 0;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c
index f651112..86378f3 100644
--- a/src/modules/loaders/loader_bmp.c
+++ b/src/modules/loaders/loader_bmp.c
@@ -179,12 +179,13 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
fptr = fdata;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
/* Load header */
@@ -194,7 +195,7 @@ _load(ImlibImage * im, int load_data)
if (bfh.header[0] != 'B' || bfh.header[1] != 'M')
goto quit;
- size = im->fsize;
+ size = im->fi->fsize;
#define WORD_LE_32(p8) (((p8)[3] << 24) | ((p8)[2] << 16) | ((p8)[1] << 8) | (p8)[0])
bfh_offset = WORD_LE_32(bfh.offs);
@@ -759,7 +760,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -772,7 +773,7 @@ _save(ImlibImage * im)
int i, j, pad;
uint32_t pixel;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_ff.c b/src/modules/loaders/loader_ff.c
index 4058886..c9f6591 100644
--- a/src/modules/loaders/loader_ff.c
+++ b/src/modules/loaders/loader_ff.c
@@ -6,7 +6,7 @@
static const char *const _formats[] = { "ff" };
-#define mm_check(p) ((const char *)(p) <= (const char *)fdata + im->fsize)
+#define mm_check(p) ((const char *)(p) <= (const char *)fdata + im->fi->fsize)
typedef struct {
unsigned char magic[8];
@@ -25,10 +25,11 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- if (im->fsize < (long)sizeof(ff_hdr_t))
+ if (im->fi->fsize < (long)sizeof(ff_hdr_t))
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -82,7 +83,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -97,7 +98,7 @@ _save(ImlibImage * im)
uint16_t *row;
uint8_t *dat;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
index 0618fad..a152e77 100644
--- a/src/modules/loaders/loader_gif.c
+++ b/src/modules/loaders/loader_gif.c
@@ -68,14 +68,15 @@ _load(ImlibImage * im, int load_data)
uint32_t colormap[256];
int fcount, frame, multiframe;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
rc = LOAD_FAIL;
rows = NULL;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
#if GIFLIB_MAJOR >= 5
gif = DGifOpen(NULL, mm_read, &err);
@@ -301,7 +302,7 @@ _load(ImlibImage * im, int load_data)
DGifCloseFile(gif);
#endif
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_heif.c b/src/modules/loaders/loader_heif.c
index a751d5d..86bf3db 100644
--- a/src/modules/loaders/loader_heif.c
+++ b/src/modules/loaders/loader_heif.c
@@ -36,15 +36,16 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
/* input data needs to be atleast 12 bytes */
- if (im->fsize < HEIF_BYTES_TO_CHECK)
+ if (im->fi->fsize < HEIF_BYTES_TO_CHECK)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
/* check signature */
- switch (heif_check_filetype(fdata, im->fsize))
+ switch (heif_check_filetype(fdata, im->fi->fsize))
{
case heif_filetype_no:
case heif_filetype_yes_unsupported:
@@ -62,7 +63,7 @@ _load(ImlibImage * im, int load_data)
goto quit;
error = heif_context_read_from_memory_without_copy(ctx, fdata,
- im->fsize, NULL);
+ im->fi->fsize, NULL);
if (error.code != heif_error_Ok)
goto quit;
@@ -155,7 +156,7 @@ _load(ImlibImage * im, int load_data)
heif_context_free(ctx);
heif_decoding_options_free(decode_opts);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_ico.c b/src/modules/loaders/loader_ico.c
index 231d19f..20c8666 100644
--- a/src/modules/loaders/loader_ico.c
+++ b/src/modules/loaders/loader_ico.c
@@ -402,11 +402,12 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
ico.ie = NULL;
if (mm_read(&ico.idir, sizeof(ico.idir)))
@@ -424,7 +425,7 @@ _load(ImlibImage * im, int load_data)
if (!ico.ie)
QUIT_WITH_RC(LOAD_OOM);
- D("Loading '%s' Nicons = %d\n", im->real_file, ico.idir.icons);
+ D("Loading '%s' Nicons = %d\n", im->fi->name, ico.idir.icons);
for (i = 0; i < ico.idir.icons; i++)
{
@@ -443,7 +444,8 @@ _load(ImlibImage * im, int load_data)
quit:
ico_delete(&ico);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
+
return rc;
}
diff --git a/src/modules/loaders/loader_id3.c b/src/modules/loaders/loader_id3.c
index 9c73caa..dcc54c1 100644
--- a/src/modules/loaders/loader_id3.c
+++ b/src/modules/loaders/loader_id3.c
@@ -287,8 +287,8 @@ get_options(lopt * opt, const ImlibImage * im)
}
if (handle)
ctx = context_get(handle);
- else if (!(ctx = context_get_by_name(im->real_file)) &&
- !(ctx = context_create(im->real_file, im->fp)))
+ else if (!(ctx = context_get_by_name(im->fi->name)) &&
+ !(ctx = context_create(im->fi->name, im->fi->fp)))
return 0;
if (!index)
@@ -481,8 +481,8 @@ write_tags(ImlibImage * im, lopt * opt)
<= id3_tag_get_numframes(opt->ctx->tag)
&& (opt->index + opt->traverse) > 0)
{
- buf = (char *)malloc((strlen(im->real_file) + 50) * sizeof(char));
- sprintf(buf, "%s:index=%d,traverse=%d", im->real_file,
+ buf = (char *)malloc((strlen(im->fi->name) + 50) * sizeof(char));
+ sprintf(buf, "%s:index=%d,traverse=%d", im->fi->name,
opt->index + opt->traverse, opt->traverse);
}
__imlib_AttachTag(im, "next", 0, buf, destructor_data);
diff --git a/src/modules/loaders/loader_j2k.c b/src/modules/loaders/loader_j2k.c
index 16d98bb..4fa78bd 100644
--- a/src/modules/loaders/loader_j2k.c
+++ b/src/modules/loaders/loader_j2k.c
@@ -108,7 +108,8 @@ _load(ImlibImage * im, int load_data)
OPJ_INT32 *pa, *pr, *pg, *pb;
unsigned char a, r, g, b;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -118,7 +119,7 @@ _load(ImlibImage * im, int load_data)
jimage = NULL;
/* Signature check */
- if (im->fsize < 12)
+ if (im->fi->fsize < 12)
goto quit;
if (memcmp(fdata, JP2_MAGIC, 4) == 0 ||
@@ -155,8 +156,7 @@ _load(ImlibImage * im, int load_data)
if (getenv("JP2_USE_FILE"))
{
- jstream =
- opj_stream_create_default_file_stream(im->real_file, OPJ_TRUE);
+ jstream = opj_stream_create_default_file_stream(im->fi->name, OPJ_TRUE);
}
else
{
@@ -164,9 +164,9 @@ _load(ImlibImage * im, int load_data)
if (!jstream)
goto quit;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
opj_stream_set_user_data(jstream, &mdata, NULL);
- opj_stream_set_user_data_length(jstream, im->fsize);
+ opj_stream_set_user_data_length(jstream, im->fi->fsize);
opj_stream_set_read_function(jstream, mm_read);
opj_stream_set_skip_function(jstream, mm_seek_cur);
opj_stream_set_seek_function(jstream, mm_seek_set);
@@ -275,7 +275,7 @@ _load(ImlibImage * im, int load_data)
opj_stream_destroy(jstream);
if (jcodec)
opj_destroy_codec(jcodec);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c
index 89751f6..5faa648 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -78,7 +78,8 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return rc;
@@ -88,7 +89,7 @@ _load(ImlibImage * im, int load_data)
QUIT_WITH_RC(LOAD_FAIL);
jpeg_create_decompress(&jds);
- jpeg_mem_src(&jds, fdata, im->fsize);
+ jpeg_mem_src(&jds, fdata, im->fi->fsize);
jpeg_save_markers(&jds, JPEG_APP0 + 1, 256);
jpeg_read_header(&jds, TRUE);
@@ -251,7 +252,7 @@ _load(ImlibImage * im, int load_data)
quit:
jpeg_destroy_decompress(&jds);
free(jdata.data);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -277,7 +278,7 @@ _save(ImlibImage * im)
rc = LOAD_FAIL;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
goto quit;
diff --git a/src/modules/loaders/loader_jxl.c b/src/modules/loaders/loader_jxl.c
index b3d4408..2fc4bee 100644
--- a/src/modules/loaders/loader_jxl.c
+++ b/src/modules/loaders/loader_jxl.c
@@ -55,7 +55,8 @@ _load(ImlibImage * im, int load_data)
JxlParallelRunner *runner = NULL;
#endif
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -100,7 +101,7 @@ _load(ImlibImage * im, int load_data)
if (jst != JXL_DEC_SUCCESS)
goto quit;
- jst = JxlDecoderSetInput(dec, fdata, im->fsize);
+ jst = JxlDecoderSetInput(dec, fdata, im->fi->fsize);
if (jst != JXL_DEC_SUCCESS)
goto quit;
@@ -213,7 +214,7 @@ _load(ImlibImage * im, int load_data)
#endif
if (dec)
JxlDecoderDestroy(dec);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_lbm.c b/src/modules/loaders/loader_lbm.c
index ac78537..2f72d0c 100644
--- a/src/modules/loaders/loader_lbm.c
+++ b/src/modules/loaders/loader_lbm.c
@@ -451,7 +451,8 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -462,7 +463,7 @@ _load(ImlibImage * im, int load_data)
* Load the chunk(s) we're interested in. If load_data is not true, then we only
* want the image size and format.
*----------*/
- if (!loadchunks(fdata, im->fsize, &ilbm, load_data))
+ if (!loadchunks(fdata, im->fi->fsize, &ilbm, load_data))
goto quit;
rc = LOAD_BADIMAGE; /* Format accepted */
@@ -568,7 +569,7 @@ _load(ImlibImage * im, int load_data)
freeilbm(&ilbm);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index 84cd7d4..b020433 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -305,10 +305,11 @@ _load(ImlibImage * im, int load_data)
/* read header */
rc = LOAD_FAIL;
- if (im->fsize < _PNG_MIN_SIZE)
+ if (im->fi->fsize < _PNG_MIN_SIZE)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -354,7 +355,7 @@ _load(ImlibImage * im, int load_data)
len = htonl(chunk->hdr.len);
D("Scan %3d: %06lx: %6d: %.4s: ", ic,
fptr - (unsigned char *)fdata, len, chunk->hdr.name);
- if (fptr + len - (unsigned char *)fdata > im->fsize)
+ if (fptr + len - (unsigned char *)fdata > im->fi->fsize)
break;
switch (chunk->hdr.type)
@@ -424,7 +425,7 @@ _load(ImlibImage * im, int load_data)
len = htonl(chunk->hdr.len);
D("Chunk %3d: %06lx: %6d: %.4s: ", ic,
fptr - (unsigned char *)fdata, len, chunk->hdr.name);
- if (fptr + len - (unsigned char *)fdata > im->fsize)
+ if (fptr + len - (unsigned char *)fdata > im->fi->fsize)
break;
switch (chunk->hdr.type)
@@ -566,7 +567,7 @@ _load(ImlibImage * im, int load_data)
quit:
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -587,7 +588,7 @@ _save(ImlibImage * im)
int pass, n_passes = 1;
int has_alpha;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c
index d6d297e..71e35af 100644
--- a/src/modules/loaders/loader_pnm.c
+++ b/src/modules/loaders/loader_pnm.c
@@ -129,11 +129,12 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
/* read the header info */
@@ -464,7 +465,7 @@ _load(ImlibImage * im, int load_data)
quit:
free(idata);
free(data);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -478,7 +479,7 @@ _save(ImlibImage * im)
uint32_t *ptr;
int x, y;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_ps.c b/src/modules/loaders/loader_ps.c
index 4e63ddf..2a0cba0 100644
--- a/src/modules/loaders/loader_ps.c
+++ b/src/modules/loaders/loader_ps.c
@@ -24,7 +24,8 @@ _load(ImlibImage * im, int load_data)
uint32_t *dst;
int i, j;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -41,7 +42,7 @@ _load(ImlibImage * im, int load_data)
if (!spdoc)
goto quit;
- spectre_document_load(spdoc, im->real_file);
+ spectre_document_load(spdoc, im->fi->name);
spst = spectre_document_status(spdoc);
if (spst != SPECTRE_STATUS_SUCCESS)
{
@@ -137,7 +138,7 @@ _load(ImlibImage * im, int load_data)
spectre_page_free(sppage);
if (spdoc)
spectre_document_free(spdoc);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_svg.c b/src/modules/loaders/loader_svg.c
index c2cc802..6ff1db3 100644
--- a/src/modules/loaders/loader_svg.c
+++ b/src/modules/loaders/loader_svg.c
@@ -81,7 +81,8 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -91,10 +92,10 @@ _load(ImlibImage * im, int load_data)
cr = NULL;
/* Signature check */
- if (_sig_check(fdata, im->fsize))
+ if (_sig_check(fdata, im->fi->fsize))
goto quit;
- rsvg = rsvg_handle_new_from_data(fdata, im->fsize, &error);
+ rsvg = rsvg_handle_new_from_data(fdata, im->fi->fsize, &error);
if (!rsvg)
goto quit;
@@ -241,7 +242,7 @@ _load(ImlibImage * im, int load_data)
cairo_destroy(cr);
if (rsvg)
g_object_unref(rsvg);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index eaa9912..61e678a 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -86,20 +86,21 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- if (im->fsize < (int)(sizeof(tga_header)) ||
- (uintmax_t) im->fsize > SIZE_MAX)
+ if (im->fi->fsize < (int)(sizeof(tga_header)) ||
+ (uintmax_t) im->fi->fsize > SIZE_MAX)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
fptr = fdata;
header = fdata;
- if (im->fsize > (int)(sizeof(tga_footer)))
+ if (im->fi->fsize > (int)(sizeof(tga_footer)))
{
- footer = (tga_footer *) (fptr + im->fsize - sizeof(tga_footer));
+ footer = (tga_footer *) (fptr + im->fi->fsize - sizeof(tga_footer));
/* check the footer to see if we have a v2.0 TGA file */
footer_present = memcmp(footer->signature, TGA_SIGNATURE,
@@ -110,7 +111,7 @@ _load(ImlibImage * im, int load_data)
footer_present = 0;
}
- if ((size_t)im->fsize < sizeof(tga_header) + header->idLength +
+ if ((size_t)im->fi->fsize < sizeof(tga_header) + header->idLength +
(footer_present ? sizeof(tga_footer) : 0))
goto quit;
@@ -197,7 +198,7 @@ _load(ImlibImage * im, int load_data)
/* find out how much data must be read from the file */
/* (this is NOT simply width*height*4, due to compression) */
- datasize = im->fsize - sizeof(tga_header) - header->idLength -
+ datasize = im->fi->fsize - sizeof(tga_header) - header->idLength -
(footer_present ? sizeof(tga_footer) : 0);
palette = NULL;
@@ -465,7 +466,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -510,7 +511,7 @@ _save(ImlibImage * im)
int y;
tga_header header;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c
index 2d2c000..40e43a5 100644
--- a/src/modules/loaders/loader_tiff.c
+++ b/src/modules/loaders/loader_tiff.c
@@ -349,10 +349,11 @@ _load(ImlibImage * im, int load_data)
/* Do initial signature check */
#define TIFF_BYTES_TO_CHECK sizeof(magic_number)
- if (im->fsize < (int)TIFF_BYTES_TO_CHECK)
+ if (im->fi->fsize < (int)TIFF_BYTES_TO_CHECK)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
@@ -361,9 +362,9 @@ _load(ImlibImage * im, int load_data)
if (magic_number != TIFF_BIGENDIAN && magic_number != TIFF_LITTLEENDIAN)
return rc;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
- tif = TIFFClientOpen(im->real_file, "r", NULL, _tiff_read, _tiff_write,
+ tif = TIFFClientOpen(im->fi->name, "r", NULL, _tiff_read, _tiff_write,
_tiff_seek, _tiff_close, _tiff_size,
_tiff_map, _tiff_unmap);
if (!tif)
@@ -449,7 +450,7 @@ _load(ImlibImage * im, int load_data)
TIFFRGBAImageEnd((TIFFRGBAImage *) & rgba_image);
if (tif)
TIFFClose(tif);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -472,7 +473,7 @@ _save(ImlibImage * im)
int i;
ImlibImageTag *tag;
- tif = TIFFOpen(im->real_file, "w");
+ tif = TIFFOpen(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 4b8a9bc..e3e20db 100644
--- a/src/modules/loaders/loader_webp.c
+++ b/src/modules/loaders/loader_webp.c
@@ -21,15 +21,16 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- if (im->fsize < 12)
+ if (im->fi->fsize < 12)
return rc;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
webp_data.bytes = fdata;
- webp_data.size = im->fsize;
+ webp_data.size = im->fi->fsize;
/* Init (includes signature check) */
demux = WebPDemux(&webp_data);
@@ -101,7 +102,7 @@ _load(ImlibImage * im, int load_data)
quit:
if (demux)
WebPDemuxDelete(demux);
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -116,7 +117,7 @@ _save(ImlibImage * im)
uint8_t *fdata;
size_t encoded_size;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_xbm.c b/src/modules/loaders/loader_xbm.c
index 505e27f..a004336 100644
--- a/src/modules/loaders/loader_xbm.c
+++ b/src/modules/loaders/loader_xbm.c
@@ -94,21 +94,22 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- if (im->fsize < 64)
+ if (im->fi->fsize < 64)
return rc; /* Not XBM */
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
/* Signature check ("#define") allow longish initial comment */
s = fdata;
nlen = s[0] == '/' && s[1] == '*' ? 4096 : 256;
- nlen = im->fsize > nlen ? nlen : im->fsize;
+ nlen = im->fi->fsize > nlen ? nlen : im->fi->fsize;
if (!memmem(s, nlen, "#define", 7))
goto quit;
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
ptr = NULL;
x = y = 0;
@@ -211,7 +212,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
@@ -226,13 +227,13 @@ _save(ImlibImage * im)
int i, k, x, y, bits, nval, val;
uint32_t *ptr;
- f = fopen(im->real_file, "wb");
+ f = fopen(im->fi->name, "wb");
if (!f)
return LOAD_FAIL;
rc = LOAD_SUCCESS;
- name = im->real_file;
+ name = im->fi->name;
if ((s = strrchr(name, '/')) != 0)
name = s + 1;
diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c
index e8f138c..c447b8b 100644
--- a/src/modules/loaders/loader_xpm.c
+++ b/src/modules/loaders/loader_xpm.c
@@ -174,16 +174,17 @@ _load(ImlibImage * im, int load_data)
line = NULL;
cmap = NULL;
- fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
+ fdata =
+ mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
if (fdata == MAP_FAILED)
return LOAD_BADFILE;
- if (!memmem(fdata, im->fsize <= 256 ? im->fsize : 256, " XPM */", 7))
+ if (!memmem(fdata, im->fi->fsize <= 256 ? im->fi->fsize : 256, " XPM */", 7))
goto quit;
rc = LOAD_BADIMAGE; /* Format accepted */
- mm_init(fdata, im->fsize);
+ mm_init(fdata, im->fi->fsize);
j = 0;
w = 10;
@@ -472,7 +473,7 @@ _load(ImlibImage * im, int load_data)
xpm_parse_done();
- munmap(fdata, im->fsize);
+ munmap(fdata, im->fi->fsize);
return rc;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.