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 753065d5a3eeddc6851f35193bf1613709a53412
Author: Kim Woelders <[email protected]>
AuthorDate: Mon Mar 28 14:23:18 2022 +0200
loading: Centralize mmap handling
Loader interface should be stable now.
---
src/lib/Imlib2_Loader.h | 2 +-
src/lib/image.c | 13 +++++++++++++
src/lib/image.h | 1 +
src/modules/loaders/decompress_load.c | 9 +--------
src/modules/loaders/loader_argb.c | 12 ++----------
src/modules/loaders/loader_bmp.c | 12 ++----------
src/modules/loaders/loader_ff.c | 12 ++----------
src/modules/loaders/loader_gif.c | 10 +---------
src/modules/loaders/loader_heif.c | 12 ++----------
src/modules/loaders/loader_ico.c | 9 +--------
src/modules/loaders/loader_id3.c | 3 +++
src/modules/loaders/loader_j2k.c | 15 ++++-----------
src/modules/loaders/loader_jpeg.c | 9 +--------
src/modules/loaders/loader_jxl.c | 11 ++---------
src/modules/loaders/loader_lbm.c | 10 +---------
src/modules/loaders/loader_png.c | 26 +++++++++++---------------
src/modules/loaders/loader_pnm.c | 9 +--------
src/modules/loaders/loader_ps.c | 9 +--------
src/modules/loaders/loader_svg.c | 12 ++----------
src/modules/loaders/loader_tga.c | 12 ++----------
src/modules/loaders/loader_tiff.c | 11 ++---------
src/modules/loaders/loader_webp.c | 9 +--------
src/modules/loaders/loader_xbm.c | 12 ++----------
src/modules/loaders/loader_xpm.c | 13 +++----------
24 files changed, 62 insertions(+), 191 deletions(-)
diff --git a/src/lib/Imlib2_Loader.h b/src/lib/Imlib2_Loader.h
index 4dccfdc..5f826d0 100644
--- a/src/lib/Imlib2_Loader.h
+++ b/src/lib/Imlib2_Loader.h
@@ -10,7 +10,6 @@
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
-#include <sys/mman.h>
/* types.h */
@@ -118,6 +117,7 @@ typedef struct _ImlibImageFileInfo {
struct _ImlibImageFileInfo *next;
char *name;
FILE *fp;
+ const void *fdata;
off_t fsize;
} ImlibImageFileInfo;
diff --git a/src/lib/image.c b/src/lib/image.c
index a7844b2..225566f 100644
--- a/src/lib/image.c
+++ b/src/lib/image.c
@@ -9,6 +9,7 @@
#include <stdlib.h>
#include <string.h>
#include <time.h>
+#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -78,6 +79,7 @@ static int
__imlib_FileContextOpen(ImlibImageFileInfo * fi, FILE * fp, off_t fsize)
{
struct stat st;
+ void *fdata;
if (fp)
{
@@ -101,6 +103,12 @@ __imlib_FileContextOpen(ImlibImageFileInfo * fi, FILE * fp, off_t fsize)
fi->fsize = fsize;
}
+ fdata = mmap(NULL, fi->fsize, PROT_READ, MAP_SHARED, fileno(fi->fp), 0);
+ if (fdata == MAP_FAILED)
+ return -1;
+
+ fi->fdata = fdata;
+
return 0;
}
@@ -109,6 +117,11 @@ __imlib_FileContextClose(ImlibImageFileInfo * fi)
{
if (!fi->keep_fp)
{
+ if (fi->fdata)
+ {
+ munmap((void *)fi->fdata, fi->fsize);
+ fi->fdata = NULL;
+ }
if (fi->fp)
{
fclose(fi->fp);
diff --git a/src/lib/image.h b/src/lib/image.h
index b2dee40..41983f6 100644
--- a/src/lib/image.h
+++ b/src/lib/image.h
@@ -30,6 +30,7 @@ typedef struct _ImlibImageFileInfo {
struct _ImlibImageFileInfo *next;
char *name;
FILE *fp;
+ const void *fdata;
off_t fsize;
/* vvv Private vvv */
char keep_fp;
diff --git a/src/modules/loaders/decompress_load.c b/src/modules/loaders/decompress_load.c
index a65a977..10238da 100644
--- a/src/modules/loaders/decompress_load.c
+++ b/src/modules/loaders/decompress_load.c
@@ -11,7 +11,6 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
const char *s, *p, *q;
char tmp[] = "/tmp/imlib2_loader_dec-XXXXXX";
char *real_ext;
- void *fdata;
rc = LOAD_FAIL;
@@ -47,15 +46,10 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
if (!loader)
return rc;
- 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->fi->fsize, dest);
+ res = fdec(im->fi->fdata, im->fi->fsize, dest);
close(dest);
@@ -65,7 +59,6 @@ decompress_load(ImlibImage * im, int load_data, const char *const *pext,
unlink(tmp);
quit:
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c
index f54061e..fe70ea7 100644
--- a/src/modules/loaders/loader_argb.c
+++ b/src/modules/loaders/loader_argb.c
@@ -37,7 +37,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
int alpha;
uint32_t *ptr;
int y;
@@ -50,16 +49,11 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- 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->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
/* header */
- fptr = fdata;
+ fptr = im->fi->fdata;
size = im->fi->fsize > 31 ? 31 : im->fi->fsize; /* Look for \n in at most 31 byte */
row = memchr(fptr, '\n', size);
if (!row)
@@ -108,8 +102,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c
index 86378f3..9838fdd 100644
--- a/src/modules/loaders/loader_bmp.c
+++ b/src/modules/loaders/loader_bmp.c
@@ -158,7 +158,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
const unsigned char *fptr;
bfh_t bfh;
unsigned int bfh_offset;
@@ -179,13 +178,8 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- 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->fi->fsize);
+ fptr = im->fi->fdata;
+ mm_init(im->fi->fdata, im->fi->fsize);
/* Load header */
@@ -760,8 +754,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_ff.c b/src/modules/loaders/loader_ff.c
index c9f6591..aaacadb 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->fi->fsize)
+#define mm_check(p) ((const char *)(p) <= (const char *)im->fi->fdata + im->fi->fsize)
typedef struct {
unsigned char magic[8];
@@ -17,7 +17,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
int rowlen, i, j;
const ff_hdr_t *hdr;
const uint16_t *row;
@@ -28,13 +27,8 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < (long)sizeof(ff_hdr_t))
return rc;
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return LOAD_BADFILE;
-
/* read and check the header */
- hdr = fdata;
+ hdr = im->fi->fdata;
if (memcmp("farbfeld", hdr->magic, sizeof(hdr->magic)))
goto quit;
@@ -83,8 +77,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
index a152e77..1ccba8b 100644
--- a/src/modules/loaders/loader_gif.c
+++ b/src/modules/loaders/loader_gif.c
@@ -57,7 +57,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc, err;
- void *fdata;
uint32_t *ptr;
GifFileType *gif;
GifRowType *rows;
@@ -68,15 +67,10 @@ _load(ImlibImage * im, int load_data)
uint32_t colormap[256];
int fcount, frame, multiframe;
- 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->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
#if GIFLIB_MAJOR >= 5
gif = DGifOpen(NULL, mm_read, &err);
@@ -302,8 +296,6 @@ _load(ImlibImage * im, int load_data)
DGifCloseFile(gif);
#endif
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_heif.c b/src/modules/loaders/loader_heif.c
index 86bf3db..4a4742f 100644
--- a/src/modules/loaders/loader_heif.c
+++ b/src/modules/loaders/loader_heif.c
@@ -20,7 +20,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
int img_has_alpha;
int stride = 0;
int bytes_per_px;
@@ -39,13 +38,8 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < HEIF_BYTES_TO_CHECK)
return rc;
- 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->fi->fsize))
+ switch (heif_check_filetype(im->fi->fdata, im->fi->fsize))
{
case heif_filetype_no:
case heif_filetype_yes_unsupported:
@@ -62,7 +56,7 @@ _load(ImlibImage * im, int load_data)
if (!ctx)
goto quit;
- error = heif_context_read_from_memory_without_copy(ctx, fdata,
+ error = heif_context_read_from_memory_without_copy(ctx, im->fi->fdata,
im->fi->fsize, NULL);
if (error.code != heif_error_Ok)
goto quit;
@@ -156,8 +150,6 @@ _load(ImlibImage * im, int load_data)
heif_context_free(ctx);
heif_decoding_options_free(decode_opts);
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_ico.c b/src/modules/loaders/loader_ico.c
index 20c8666..461d5de 100644
--- a/src/modules/loaders/loader_ico.c
+++ b/src/modules/loaders/loader_ico.c
@@ -396,18 +396,12 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
ico_t ico;
unsigned int i;
rc = LOAD_FAIL;
- 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->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
ico.ie = NULL;
if (mm_read(&ico.idir, sizeof(ico.idir)))
@@ -444,7 +438,6 @@ _load(ImlibImage * im, int load_data)
quit:
ico_delete(&ico);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_id3.c b/src/modules/loaders/loader_id3.c
index dcc54c1..2d0a14c 100644
--- a/src/modules/loaders/loader_id3.c
+++ b/src/modules/loaders/loader_id3.c
@@ -500,6 +500,9 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
opt.ctx = NULL;
+ if (!im->fi->fp)
+ return rc;
+
if (!get_options(&opt, im))
goto quit;
diff --git a/src/modules/loaders/loader_j2k.c b/src/modules/loaders/loader_j2k.c
index 4fa78bd..30385ef 100644
--- a/src/modules/loaders/loader_j2k.c
+++ b/src/modules/loaders/loader_j2k.c
@@ -96,7 +96,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
int ok;
opj_dparameters_t jparam;
opj_codec_t *jcodec;
@@ -108,11 +107,6 @@ _load(ImlibImage * im, int load_data)
OPJ_INT32 *pa, *pr, *pg, *pb;
unsigned char a, r, g, b;
- 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;
jcodec = NULL;
jstream = NULL;
@@ -122,10 +116,10 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < 12)
goto quit;
- if (memcmp(fdata, JP2_MAGIC, 4) == 0 ||
- memcmp(fdata, JP2_RFC3745_MAGIC, 12) == 0)
+ if (memcmp(im->fi->fdata, JP2_MAGIC, 4) == 0 ||
+ memcmp(im->fi->fdata, JP2_RFC3745_MAGIC, 12) == 0)
jfmt = OPJ_CODEC_JP2;
- else if (memcmp(fdata, J2K_CODESTREAM_MAGIC, 4) == 0)
+ else if (memcmp(im->fi->fdata, J2K_CODESTREAM_MAGIC, 4) == 0)
jfmt = OPJ_CODEC_J2K;
else
goto quit;
@@ -164,7 +158,7 @@ _load(ImlibImage * im, int load_data)
if (!jstream)
goto quit;
- mm_init(fdata, im->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
opj_stream_set_user_data(jstream, &mdata, NULL);
opj_stream_set_user_data_length(jstream, im->fi->fsize);
opj_stream_set_read_function(jstream, mm_read);
@@ -275,7 +269,6 @@ _load(ImlibImage * im, int load_data)
opj_stream_destroy(jstream);
if (jcodec)
opj_destroy_codec(jcodec);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c
index 5faa648..1fb263a 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -68,7 +68,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int w, h, rc;
- void *fdata;
struct jpeg_decompress_struct jds;
ImLib_JPEG_data jdata;
uint8_t *ptr, *line[16];
@@ -78,18 +77,13 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return rc;
-
/* set up error handling */
jds.err = _jdata_init(&jdata);
if (sigsetjmp(jdata.setjmp_buffer, 1))
QUIT_WITH_RC(LOAD_FAIL);
jpeg_create_decompress(&jds);
- jpeg_mem_src(&jds, fdata, im->fi->fsize);
+ jpeg_mem_src(&jds, im->fi->fdata, im->fi->fsize);
jpeg_save_markers(&jds, JPEG_APP0 + 1, 256);
jpeg_read_header(&jds, TRUE);
@@ -252,7 +246,6 @@ _load(ImlibImage * im, int load_data)
quit:
jpeg_destroy_decompress(&jds);
free(jdata.data);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_jxl.c b/src/modules/loaders/loader_jxl.c
index 2fc4bee..7ddeaf3 100644
--- a/src/modules/loaders/loader_jxl.c
+++ b/src/modules/loaders/loader_jxl.c
@@ -43,7 +43,6 @@ _load(ImlibImage * im, int load_data)
};
int rc;
- void *fdata;
JxlDecoderStatus jst;
JxlDecoder *dec;
JxlBasicInfo info;
@@ -55,15 +54,10 @@ _load(ImlibImage * im, int load_data)
JxlParallelRunner *runner = NULL;
#endif
- 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;
dec = NULL;
- switch (JxlSignatureCheck(fdata, 128))
+ switch (JxlSignatureCheck(im->fi->fdata, 128))
{
default:
// case JXL_SIG_NOT_ENOUGH_BYTES:
@@ -101,7 +95,7 @@ _load(ImlibImage * im, int load_data)
if (jst != JXL_DEC_SUCCESS)
goto quit;
- jst = JxlDecoderSetInput(dec, fdata, im->fi->fsize);
+ jst = JxlDecoderSetInput(dec, im->fi->fdata, im->fi->fsize);
if (jst != JXL_DEC_SUCCESS)
goto quit;
@@ -214,7 +208,6 @@ _load(ImlibImage * im, int load_data)
#endif
if (dec)
JxlDecoderDestroy(dec);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_lbm.c b/src/modules/loaders/loader_lbm.c
index 2f72d0c..1f50ba8 100644
--- a/src/modules/loaders/loader_lbm.c
+++ b/src/modules/loaders/loader_lbm.c
@@ -443,7 +443,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
char *env;
int i, n, y, z;
unsigned char *plane[40];
@@ -451,11 +450,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return LOAD_BADFILE;
-
plane[0] = NULL;
memset(&ilbm, 0, sizeof(ilbm));
@@ -463,7 +457,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->fi->fsize, &ilbm, load_data))
+ if (!loadchunks(im->fi->fdata, im->fi->fsize, &ilbm, load_data))
goto quit;
rc = LOAD_BADIMAGE; /* Format accepted */
@@ -569,8 +563,6 @@ _load(ImlibImage * im, int load_data)
freeilbm(&ilbm);
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index b020433..f69883a 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -29,6 +29,8 @@ static const char *const _formats[] = { "png" };
#define APNG_BLEND_OP_SOURCE 0
#define APNG_BLEND_OP_OVER 1
+#define mm_check(p) ((const char *)(p) <= (const char *)im->fi->fdata + im->fi->fsize)
+
typedef struct {
uint32_t len;
union {
@@ -290,7 +292,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
ctx_t ctx = { 0 };
@@ -308,13 +309,8 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < _PNG_MIN_SIZE)
return rc;
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return LOAD_BADFILE;
-
/* Signature check */
- if (png_sig_cmp(fdata, 0, _PNG_SIG_SIZE))
+ if (png_sig_cmp(im->fi->fdata, 0, _PNG_SIG_SIZE))
goto quit;
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL,
@@ -347,15 +343,16 @@ _load(ImlibImage * im, int load_data)
frame = 0; /* Frame number */
ctx.pch_fctl = NULL; /* Ponter to requested frame fcTL chunk */
- fptr = (unsigned char *)fdata + _PNG_SIG_SIZE;
+ fptr = (unsigned char *)im->fi->fdata;
+ fptr += _PNG_SIG_SIZE;
for (ic = 0;; ic++, fptr += 8 + len + 4)
{
chunk = (const png_chunk_t *)fptr;
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->fi->fsize)
+ fptr - (unsigned char *)im->fi->fdata, len, chunk->hdr.name);
+ if (!mm_check(fptr + len))
break;
switch (chunk->hdr.type)
@@ -414,18 +411,18 @@ _load(ImlibImage * im, int load_data)
save_fdat = 0;
/* At this point we start "progressive" PNG data processing */
- fptr = fdata;
+ fptr = (unsigned char *)im->fi->fdata;
png_process_data(png_ptr, info_ptr, fptr, _PNG_SIG_SIZE);
- fptr = (unsigned char *)fdata + _PNG_SIG_SIZE;
+ fptr += _PNG_SIG_SIZE;
for (ic = 0;; ic++, fptr += 8 + len + 4)
{
chunk = (const png_chunk_t *)fptr;
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->fi->fsize)
+ fptr - (unsigned char *)im->fi->fdata, len, chunk->hdr.name);
+ if (!mm_check(fptr + len))
break;
switch (chunk->hdr.type)
@@ -567,7 +564,6 @@ _load(ImlibImage * im, int load_data)
quit:
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c
index 71e35af..b6f06b6 100644
--- a/src/modules/loaders/loader_pnm.c
+++ b/src/modules/loaders/loader_pnm.c
@@ -118,7 +118,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
int c, p;
int w, h, v, numbers, count;
uint8_t *data = "" /* for the binary versions */
@@ -129,12 +128,7 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_FAIL;
- 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->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
/* read the header info */
@@ -465,7 +459,6 @@ _load(ImlibImage * im, int load_data)
quit:
free(idata);
free(data);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_ps.c b/src/modules/loaders/loader_ps.c
index 2a0cba0..bb162d0 100644
--- a/src/modules/loaders/loader_ps.c
+++ b/src/modules/loaders/loader_ps.c
@@ -11,7 +11,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
SpectreDocument *spdoc;
SpectrePage *sppage;
SpectreStatus spst;
@@ -24,18 +23,13 @@ _load(ImlibImage * im, int load_data)
uint32_t *dst;
int i, j;
- 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;
spdoc = NULL;
sppage = NULL;
sprc = NULL;
/* Signature check */
- if (memcmp(fdata, "%!PS", 4) != 0)
+ if (memcmp(im->fi->fdata, "%!PS", 4) != 0)
goto quit;
spdoc = spectre_document_new();
@@ -138,7 +132,6 @@ _load(ImlibImage * im, int load_data)
spectre_page_free(sppage);
if (spdoc)
spectre_document_free(spdoc);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_svg.c b/src/modules/loaders/loader_svg.c
index 6ff1db3..97ad9e1 100644
--- a/src/modules/loaders/loader_svg.c
+++ b/src/modules/loaders/loader_svg.c
@@ -72,7 +72,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
RsvgHandle *rsvg;
GError *error;
gboolean ok;
@@ -80,22 +79,16 @@ _load(ImlibImage * im, int load_data)
cairo_t *cr;
rc = LOAD_FAIL;
-
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return LOAD_BADFILE;
-
error = NULL;
rsvg = NULL;
surface = NULL;
cr = NULL;
/* Signature check */
- if (_sig_check(fdata, im->fi->fsize))
+ if (_sig_check(im->fi->fdata, im->fi->fsize))
goto quit;
- rsvg = rsvg_handle_new_from_data(fdata, im->fi->fsize, &error);
+ rsvg = rsvg_handle_new_from_data(im->fi->fdata, im->fi->fsize, &error);
if (!rsvg)
goto quit;
@@ -242,7 +235,6 @@ _load(ImlibImage * im, int load_data)
cairo_destroy(cr);
if (rsvg)
g_object_unref(rsvg);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index 61e678a..992a8d8 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -71,7 +71,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
const unsigned char *fptr;
const tga_header *header;
const tga_footer *footer;
@@ -90,13 +89,8 @@ _load(ImlibImage * im, int load_data)
(uintmax_t) im->fi->fsize > SIZE_MAX)
return rc;
- 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;
+ fptr = im->fi->fdata;
+ header = im->fi->fdata;
if (im->fi->fsize > (int)(sizeof(tga_footer)))
{
@@ -466,8 +460,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c
index 40e43a5..c9a4ec4 100644
--- a/src/modules/loaders/loader_tiff.c
+++ b/src/modules/loaders/loader_tiff.c
@@ -336,7 +336,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
TIFF *tif = NULL;
uint16_t magic_number;
TIFFRGBAImage_Extra rgba_image;
@@ -352,17 +351,12 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < (int)TIFF_BYTES_TO_CHECK)
return rc;
- fdata =
- mmap(NULL, im->fi->fsize, PROT_READ, MAP_SHARED, fileno(im->fi->fp), 0);
- if (fdata == MAP_FAILED)
- return LOAD_BADFILE;
-
- magic_number = *(uint16_t *) fdata;
+ magic_number = *(const uint16_t *)im->fi->fdata;
if (magic_number != TIFF_BIGENDIAN && magic_number != TIFF_LITTLEENDIAN)
return rc;
- mm_init(fdata, im->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
tif = TIFFClientOpen(im->fi->name, "r", NULL, _tiff_read, _tiff_write,
_tiff_seek, _tiff_close, _tiff_size,
@@ -450,7 +444,6 @@ _load(ImlibImage * im, int load_data)
TIFFRGBAImageEnd((TIFFRGBAImage *) & rgba_image);
if (tif)
TIFFClose(tif);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_webp.c b/src/modules/loaders/loader_webp.c
index e3e20db..053a11a 100644
--- a/src/modules/loaders/loader_webp.c
+++ b/src/modules/loaders/loader_webp.c
@@ -13,7 +13,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
WebPData webp_data;
WebPDemuxer *demux;
WebPIterator iter;
@@ -24,12 +23,7 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < 12)
return rc;
- 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.bytes = im->fi->fdata;
webp_data.size = im->fi->fsize;
/* Init (includes signature check) */
@@ -102,7 +96,6 @@ _load(ImlibImage * im, int load_data)
quit:
if (demux)
WebPDemuxDelete(demux);
- munmap(fdata, im->fi->fsize);
return rc;
}
diff --git a/src/modules/loaders/loader_xbm.c b/src/modules/loaders/loader_xbm.c
index a004336..77f8fe3 100644
--- a/src/modules/loaders/loader_xbm.c
+++ b/src/modules/loaders/loader_xbm.c
@@ -85,7 +85,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
char buf[4096], tok1[1024], tok2[1024];
uint32_t *ptr, pixel;
int i, x, y, bit, nl;
@@ -97,19 +96,14 @@ _load(ImlibImage * im, int load_data)
if (im->fi->fsize < 64)
return rc; /* Not XBM */
- 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;
+ s = im->fi->fdata;
nlen = s[0] == '/' && s[1] == '*' ? 4096 : 256;
nlen = im->fi->fsize > nlen ? nlen : im->fi->fsize;
if (!memmem(s, nlen, "#define", 7))
goto quit;
- mm_init(fdata, im->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
ptr = NULL;
x = y = 0;
@@ -212,8 +206,6 @@ _load(ImlibImage * im, int load_data)
rc = LOAD_SUCCESS;
quit:
- munmap(fdata, im->fi->fsize);
-
return rc;
}
diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c
index c447b8b..7a96c86 100644
--- a/src/modules/loaders/loader_xpm.c
+++ b/src/modules/loaders/loader_xpm.c
@@ -157,7 +157,6 @@ static int
_load(ImlibImage * im, int load_data)
{
int rc;
- void *fdata;
uint32_t *ptr;
int pc, c, i, j, k, w, h, ncolors, cpp;
int comment, transp, quote, context, len, done, backslash;
@@ -174,17 +173,13 @@ _load(ImlibImage * im, int load_data)
line = NULL;
cmap = NULL;
- 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->fi->fsize <= 256 ? im->fi->fsize : 256, " XPM */", 7))
+ if (!memmem(im->fi->fdata,
+ im->fi->fsize <= 256 ? im->fi->fsize : 256, " XPM */", 7))
goto quit;
rc = LOAD_BADIMAGE; /* Format accepted */
- mm_init(fdata, im->fi->fsize);
+ mm_init(im->fi->fdata, im->fi->fsize);
j = 0;
w = 10;
@@ -473,8 +468,6 @@ _load(ImlibImage * im, int load_data)
xpm_parse_done();
- munmap(fdata, im->fi->fsize);
-
return rc;
}
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.