loading: Centralize mmap handling

Loader interface should be stable now.
This commit is contained in:
Kim Woelders 2022-03-28 14:23:18 +02:00
parent e55208f4d6
commit 753065d5a3
24 changed files with 62 additions and 191 deletions

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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 = NULL; /* 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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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;
}