forked from old/legacy-imlib2
Introduce more loader return codes
Used to avoid potentially wasting time trying to load corrupt images by trying loaders which won't recognize the image anyway.
This commit is contained in:
parent
f3db9c99b6
commit
bf93574b8b
|
@ -82,7 +82,9 @@ typedef enum {
|
|||
IMLIB_LOAD_ERROR_OUT_OF_FILE_DESCRIPTORS,
|
||||
IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_WRITE,
|
||||
IMLIB_LOAD_ERROR_OUT_OF_DISK_SPACE,
|
||||
IMLIB_LOAD_ERROR_UNKNOWN
|
||||
IMLIB_LOAD_ERROR_UNKNOWN,
|
||||
IMLIB_LOAD_ERROR_IMAGE_READ,
|
||||
IMLIB_LOAD_ERROR_IMAGE_FRAME
|
||||
} Imlib_Load_Error;
|
||||
|
||||
/* Encodings known to Imlib2 (so far) */
|
||||
|
|
|
@ -359,7 +359,7 @@ __imlib_LoadImageWrapper(const ImlibLoader * l, ImlibImage * im, int load_data)
|
|||
if (rc <= LOAD_FAIL)
|
||||
{
|
||||
/* Failed - clean up */
|
||||
DP("%s: Failed\n", __func__);
|
||||
DP("%s: Failed (rc=%d)\n", __func__, rc);
|
||||
|
||||
if (im->w != 0 || im->h != 0)
|
||||
{
|
||||
|
@ -552,13 +552,16 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
|
|||
if (best_loader)
|
||||
loader_ret = __imlib_LoadImageWrapper(best_loader, im, ila->immed);
|
||||
|
||||
if (loader_ret > LOAD_FAIL)
|
||||
switch (loader_ret)
|
||||
{
|
||||
case LOAD_BREAK: /* Break signaled by progress callback */
|
||||
case LOAD_SUCCESS: /* Image loaded successfully */
|
||||
/* Loader accepted image */
|
||||
im->loader = best_loader;
|
||||
}
|
||||
else
|
||||
{
|
||||
ImlibLoader **loaders = __imlib_GetLoaderList();
|
||||
break;
|
||||
|
||||
case LOAD_FAIL: /* Image was not recognized by loader */
|
||||
ImlibLoader ** loaders = __imlib_GetLoaderList();
|
||||
ImlibLoader *l, *previous_l;
|
||||
|
||||
errno = 0;
|
||||
|
@ -588,6 +591,16 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
|
|||
*loaders = l;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default: /* We should not go here */
|
||||
case LOAD_OOM: /* Could not allocate memory */
|
||||
case LOAD_BADFILE: /* File could not be accessed */
|
||||
/* Unlikely that another loader will succeed */
|
||||
case LOAD_BADIMAGE: /* Image is corrupt */
|
||||
case LOAD_BADFRAME: /* Requested frame not found */
|
||||
/* Signature was good but file was somehow not */
|
||||
break;
|
||||
}
|
||||
|
||||
im->lc = NULL;
|
||||
|
@ -596,11 +609,31 @@ __imlib_LoadImage(const char *file, ImlibLoadArgs * ila)
|
|||
fclose(im->fp);
|
||||
im->fp = NULL;
|
||||
|
||||
/* all loaders have been tried and they all failed. free the skeleton */
|
||||
/* image struct we had and return NULL */
|
||||
if (loader_ret <= LOAD_FAIL)
|
||||
{
|
||||
ila->err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;
|
||||
/* Image loading failed.
|
||||
* Free the skeleton image struct we had and return NULL */
|
||||
switch (loader_ret)
|
||||
{
|
||||
default: /* We should not go here */
|
||||
ila->err = IMLIB_LOAD_ERROR_UNKNOWN;
|
||||
break;
|
||||
case LOAD_FAIL:
|
||||
ila->err = IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT;
|
||||
break;
|
||||
case LOAD_OOM:
|
||||
ila->err = IMLIB_LOAD_ERROR_OUT_OF_MEMORY;
|
||||
break;
|
||||
case LOAD_BADFILE:
|
||||
ila->err = IMLIB_LOAD_ERROR_PERMISSION_DENIED_TO_READ;
|
||||
break;
|
||||
case LOAD_BADIMAGE:
|
||||
ila->err = IMLIB_LOAD_ERROR_IMAGE_READ;
|
||||
break;
|
||||
case LOAD_BADFRAME:
|
||||
ila->err = IMLIB_LOAD_ERROR_IMAGE_FRAME;
|
||||
break;
|
||||
}
|
||||
__imlib_ConsumeImage(im);
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -143,9 +143,13 @@ int __imlib_CurrentCacheSize(void);
|
|||
#define UPDATE_FLAG(flags, f, set) \
|
||||
do { if (set) SET_FLAG(flags, f); else UNSET_FLAG(flags, f); } while(0)
|
||||
|
||||
#define LOAD_FAIL 0
|
||||
#define LOAD_SUCCESS 1
|
||||
#define LOAD_BREAK 2
|
||||
#define LOAD_BREAK 2 /* Break signaled by progress callback */
|
||||
#define LOAD_SUCCESS 1 /* Image loaded successfully */
|
||||
#define LOAD_FAIL 0 /* Image was not recognized by loader */
|
||||
#define LOAD_OOM -1 /* Could not allocate memory */
|
||||
#define LOAD_BADFILE -2 /* File could not be accessed */
|
||||
#define LOAD_BADIMAGE -3 /* Image is corrupt */
|
||||
#define LOAD_BADFRAME -4 /* Requested frame not found */
|
||||
|
||||
/* 32767 is the maximum pixmap dimension and ensures that
|
||||
* (w * h * sizeof(DATA32)) won't exceed ULONG_MAX */
|
||||
|
|
|
@ -51,7 +51,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
mm_init(fdata, im->fsize);
|
||||
|
||||
|
@ -67,22 +67,24 @@ load2(ImlibImage * im, int load_data)
|
|||
im->w = im->h = alpha = 0;
|
||||
sscanf(fptr, "ARGB %i %i %i", &im->w, &im->h, &alpha);
|
||||
|
||||
if (im->w <= 0 || im->h <= 0)
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
if (!IMAGE_DIMENSIONS_OK(im->w, im->h))
|
||||
goto quit;
|
||||
|
||||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, alpha);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
ptr = __imlib_AllocateData(im);
|
||||
if (!ptr)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
mm_seek(row - fptr);
|
||||
|
||||
|
@ -98,10 +100,7 @@ load2(ImlibImage * im, int load_data)
|
|||
ptr += im->w;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
@ -109,8 +108,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -154,10 +152,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
ptr += im->w;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
|
|
@ -180,7 +180,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
fptr = fdata;
|
||||
mm_init(fdata, im->fsize);
|
||||
|
@ -215,6 +215,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (mm_read(&bih.header_size + 1, bih.header_size - 4))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
comp = BI_RGB;
|
||||
amask = rmask = gmask = bmask = 0;
|
||||
ashift1 = rshift1 = gshift1 = bshift1 = 0;
|
||||
|
@ -397,15 +399,12 @@ load2(ImlibImage * im, int load_data)
|
|||
im->h = h;
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
fptr += bfh_offset;
|
||||
|
||||
|
@ -441,10 +440,7 @@ load2(ImlibImage * im, int load_data)
|
|||
ptr -= w * 2;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -549,10 +545,7 @@ load2(ImlibImage * im, int load_data)
|
|||
progress_bc4:
|
||||
if (im->lc && (x == w) &&
|
||||
__imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -572,10 +565,7 @@ load2(ImlibImage * im, int load_data)
|
|||
ptr -= w * 2;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -664,10 +654,7 @@ load2(ImlibImage * im, int load_data)
|
|||
progress_bc8:
|
||||
if (im->lc && (x == w) &&
|
||||
__imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -684,10 +671,7 @@ load2(ImlibImage * im, int load_data)
|
|||
buffer_ptr += skip;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -717,10 +701,7 @@ load2(ImlibImage * im, int load_data)
|
|||
buffer_ptr += skip;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -741,10 +722,7 @@ load2(ImlibImage * im, int load_data)
|
|||
buffer_ptr += skip;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
|
||||
|
@ -772,10 +750,7 @@ load2(ImlibImage * im, int load_data)
|
|||
buffer_ptr += skip;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, h - y - 1, -1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
@ -785,8 +760,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -45,12 +45,15 @@ uncompress_file(FILE * fp, int dest)
|
|||
int
|
||||
load2(ImlibImage * im, int load_data)
|
||||
{
|
||||
int rc;
|
||||
ImlibLoader *loader;
|
||||
int dest, res;
|
||||
const char *s, *p, *q;
|
||||
char tmp[] = "/tmp/imlib2_loader_bz2-XXXXXX";
|
||||
char *real_ext;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
/* make sure this file ends in ".bz2" and that there's another ext
|
||||
* (e.g. "foo.png.bz2") */
|
||||
for (p = s = im->real_file, q = NULL; *s; s++)
|
||||
|
@ -61,18 +64,18 @@ load2(ImlibImage * im, int load_data)
|
|||
p = s + 1;
|
||||
}
|
||||
if (!q || strcasecmp(p, "bz2"))
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
if (!(real_ext = strndup(q, p - q - 1)))
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
loader = __imlib_FindBestLoaderForFormat(real_ext, 0);
|
||||
free(real_ext);
|
||||
if (!loader)
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
if ((dest = mkstemp(tmp)) < 0)
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
res = uncompress_file(im->fp, dest);
|
||||
close(dest);
|
||||
|
|
|
@ -13,4 +13,7 @@ __EXPORT__ char save(ImlibImage * im, ImlibProgressFunction progress,
|
|||
char progress_granularity);
|
||||
__EXPORT__ void formats(ImlibLoader * l);
|
||||
|
||||
#define QUIT_WITH_RC(_err) { rc = _err; goto quit; }
|
||||
#define QUITx_WITH_RC(_err, _lbl) { rc = _err; goto _lbl; }
|
||||
|
||||
#endif /* __LOADER_COMMON_H */
|
||||
|
|
|
@ -29,13 +29,15 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
/* read and check the header */
|
||||
hdr = fdata;
|
||||
if (memcmp("farbfeld", hdr->magic, sizeof(hdr->magic)))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
im->w = ntohl(hdr->w);
|
||||
im->h = ntohl(hdr->h);
|
||||
if (!IMAGE_DIMENSIONS_OK(im->w, im->h))
|
||||
|
@ -44,15 +46,12 @@ load2(ImlibImage * im, int load_data)
|
|||
SET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
rowlen = 4 * im->w; /* RGBA */
|
||||
|
||||
|
@ -76,10 +75,7 @@ load2(ImlibImage * im, int load_data)
|
|||
}
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, i, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
@ -87,8 +83,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
@ -145,10 +140,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
goto quit;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, i, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
|
|
@ -51,7 +51,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!gif)
|
||||
return LOAD_FAIL;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
rows = NULL;
|
||||
transp = -1;
|
||||
fcount = 0;
|
||||
|
@ -144,13 +145,13 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
rows = calloc(im->h, sizeof(GifRowType));
|
||||
if (!rows)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
for (i = 0; i < im->h; i++)
|
||||
{
|
||||
rows[i] = calloc(im->w, sizeof(GifPixelType));
|
||||
if (!rows[i])
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
}
|
||||
|
||||
if (gif->Image.Interlace)
|
||||
|
@ -221,19 +222,21 @@ load2(ImlibImage * im, int load_data)
|
|||
im->frame_flags |= FF_IMAGE_ANIMATED;
|
||||
|
||||
if (!rows)
|
||||
goto quit;
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
if (frame > 1 && frame > im->frame_count)
|
||||
QUIT_WITH_RC(LOAD_BADFRAME);
|
||||
|
||||
goto quit;
|
||||
}
|
||||
|
||||
if (!load_data)
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
ptr = __imlib_AllocateData(im);
|
||||
if (!ptr)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
for (i = 0; i < im->h; i++)
|
||||
{
|
||||
|
@ -243,10 +246,7 @@ load2(ImlibImage * im, int load_data)
|
|||
}
|
||||
|
||||
if (!multiframe && im->lc && __imlib_LoadProgressRows(im, i, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
if (multiframe && im->lc)
|
||||
|
|
|
@ -398,7 +398,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
mm_init(fdata, im->fsize);
|
||||
|
||||
|
@ -416,7 +416,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
ico.ie = calloc(ico.idir.icons, sizeof(ie_t));
|
||||
if (!ico.ie)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
D("Loading '%s' Nicons = %d\n", im->real_file, ico.idir.icons);
|
||||
|
||||
|
@ -426,6 +426,8 @@ load2(ImlibImage * im, int load_data)
|
|||
ico_read_icon(&ico, i);
|
||||
}
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
if (ico_load(&ico, im, load_data))
|
||||
{
|
||||
if (im->lc)
|
||||
|
@ -437,8 +439,7 @@ load2(ImlibImage * im, int load_data)
|
|||
ico_delete(&ico);
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
|
|
@ -496,28 +496,30 @@ write_tags(ImlibImage * im, lopt * opt)
|
|||
int
|
||||
load2(ImlibImage * im, int load_data)
|
||||
{
|
||||
int rc;
|
||||
ImlibLoader *loader;
|
||||
lopt opt;
|
||||
int res;
|
||||
|
||||
res = LOAD_FAIL;
|
||||
rc = LOAD_FAIL;
|
||||
opt.ctx = NULL;
|
||||
|
||||
if (!get_options(&opt, im))
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
if (!get_loader(&opt, &loader))
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
|
||||
if (loader)
|
||||
{
|
||||
char tmp[] = "/tmp/imlib2_loader_id3-XXXXXX";
|
||||
int dest;
|
||||
int dest, res;
|
||||
|
||||
if ((dest = mkstemp(tmp)) < 0)
|
||||
{
|
||||
fprintf(stderr, "Unable to create a temporary file\n");
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
}
|
||||
|
||||
res = extract_pic(id3_tag_get_frame(opt.ctx->tag, opt.index - 1), dest);
|
||||
|
@ -526,10 +528,10 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!res)
|
||||
{
|
||||
unlink(tmp);
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
}
|
||||
|
||||
res = __imlib_LoadEmbedded(loader, im, tmp, load_data);
|
||||
rc = __imlib_LoadEmbedded(loader, im, tmp, load_data);
|
||||
|
||||
unlink(tmp);
|
||||
}
|
||||
|
@ -550,7 +552,7 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!data || !length)
|
||||
{
|
||||
fprintf(stderr, "No link image URL present\n");
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
}
|
||||
url = (char *)malloc((length + 1) * sizeof(char));
|
||||
strncpy(url, data, length);
|
||||
|
@ -560,10 +562,10 @@ load2(ImlibImage * im, int load_data)
|
|||
{
|
||||
fprintf(stderr, "No loader found for file %s\n", file);
|
||||
free(url);
|
||||
goto fail_context;
|
||||
goto quit;
|
||||
}
|
||||
|
||||
res = __imlib_LoadEmbedded(loader, im, file, load_data);
|
||||
rc = __imlib_LoadEmbedded(loader, im, file, load_data);
|
||||
|
||||
if (!im->loader)
|
||||
__imlib_AttachTag(im, "id3-link-url", 0, url, destructor_data);
|
||||
|
@ -589,11 +591,11 @@ load2(ImlibImage * im, int load_data)
|
|||
}
|
||||
#endif
|
||||
|
||||
fail_context:
|
||||
quit:
|
||||
if (opt.ctx)
|
||||
context_delref(opt.ctx);
|
||||
|
||||
return res;
|
||||
return rc;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -75,10 +75,7 @@ load2(ImlibImage * im, int load_data)
|
|||
/* set up error handling */
|
||||
jds.err = _jdata_init(&jdata);
|
||||
if (sigsetjmp(jdata.setjmp_buffer, 1))
|
||||
{
|
||||
rc = LOAD_FAIL;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_FAIL);
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
|
@ -87,6 +84,8 @@ load2(ImlibImage * im, int load_data)
|
|||
jpeg_save_markers(&jds, JPEG_APP0 + 1, 256);
|
||||
jpeg_read_header(&jds, TRUE);
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
/* Get orientation */
|
||||
ei.orientation = ORIENT_TOPLEFT;
|
||||
|
||||
|
@ -119,10 +118,7 @@ load2(ImlibImage * im, int load_data)
|
|||
UNSET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
|
@ -135,12 +131,12 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
jdata.data = malloc(w * 16 * jds.output_components);
|
||||
if (!jdata.data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
/* must set the im->data member before callign progress function */
|
||||
ptr2 = __imlib_AllocateData(im);
|
||||
if (!ptr2)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
for (y = 0; y < jds.rec_outbuf_height; y++)
|
||||
line[y] = jdata.data + (y * w * jds.output_components);
|
||||
|
@ -232,11 +228,9 @@ load2(ImlibImage * im, int load_data)
|
|||
if (ei.orientation != ORIENT_TOPLEFT &&
|
||||
ei.orientation != ORIENT_TOPRIGHT)
|
||||
continue;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, l, scans))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
if (ei.orientation != ORIENT_TOPLEFT && ei.orientation != ORIENT_TOPRIGHT)
|
||||
{
|
||||
|
@ -345,10 +339,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
jpeg_write_scanlines(&jcs, jbuf, 1);
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
|
|
@ -449,12 +449,13 @@ load2(ImlibImage * im, int load_data)
|
|||
ILBM ilbm;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
plane[0] = NULL;
|
||||
memset(&ilbm, 0, sizeof(ilbm));
|
||||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
plane[0] = NULL;
|
||||
memset(&ilbm, 0, sizeof(ilbm));
|
||||
|
||||
/*----------
|
||||
* Load the chunk(s) we're interested in. If load_data is not true, then we only
|
||||
|
@ -463,6 +464,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!loadchunks(fdata, im->fsize, &ilbm, load_data))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
/*----------
|
||||
* Use and check header.
|
||||
*----------*/
|
||||
|
@ -495,10 +498,7 @@ load2(ImlibImage * im, int load_data)
|
|||
UNSET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
ilbm.ham = 0;
|
||||
ilbm.hbrite = 0;
|
||||
|
@ -528,16 +528,15 @@ load2(ImlibImage * im, int load_data)
|
|||
* 0 bit.
|
||||
*----------*/
|
||||
|
||||
__imlib_AllocateData(im);
|
||||
if (!im->data)
|
||||
goto quit;
|
||||
if (!__imlib_AllocateData(im))
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
n = ilbm.depth;
|
||||
if (ilbm.mask == 1)
|
||||
n++;
|
||||
plane[0] = malloc(((im->w + 15) / 16) * 2 * n);
|
||||
if (!plane[0])
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
for (i = 1; i < n; i++)
|
||||
plane[i] = plane[i - 1] + ((im->w + 15) / 16) * 2;
|
||||
|
@ -554,10 +553,7 @@ load2(ImlibImage * im, int load_data)
|
|||
ilbm.row++;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
@ -574,8 +570,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
freeilbm(&ilbm);
|
||||
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -41,7 +41,7 @@ load2(ImlibImage * im, int load_data)
|
|||
fdata =
|
||||
mmap(NULL, PNG_BYTES_TO_CHECK, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
ok = png_sig_cmp(fdata, 0, PNG_BYTES_TO_CHECK) == 0;
|
||||
|
||||
|
@ -58,11 +58,10 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!info_ptr)
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
if (setjmp(png_jmpbuf(png_ptr)))
|
||||
{
|
||||
rc = LOAD_FAIL;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BADIMAGE);
|
||||
|
||||
png_init_io(png_ptr, im->fp);
|
||||
png_read_info(png_ptr, info_ptr);
|
||||
|
@ -85,10 +84,7 @@ load2(ImlibImage * im, int load_data)
|
|||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, hasa);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
|
@ -129,11 +125,11 @@ load2(ImlibImage * im, int load_data)
|
|||
#endif
|
||||
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
pdata.lines = malloc(im->h * sizeof(unsigned char *));
|
||||
if (!pdata.lines)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
for (i = 0; i < im->h; i++)
|
||||
pdata.lines[i] = (unsigned char *)(im->data + i * im->w);
|
||||
|
@ -152,10 +148,7 @@ load2(ImlibImage * im, int load_data)
|
|||
png_read_rows(png_ptr, &pdata.lines[y], NULL, nrows);
|
||||
|
||||
if (__imlib_LoadProgressRows(im, y, nrows))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit1;
|
||||
}
|
||||
QUITx_WITH_RC(LOAD_BREAK, quit1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -330,10 +323,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
png_write_rows(png_ptr, &row_ptr, 1);
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
|
||||
ptr += im->w;
|
||||
}
|
||||
|
|
|
@ -90,14 +90,12 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
mm_init(fdata, im->fsize);
|
||||
|
||||
/* read the header info */
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
c = mm_getc();
|
||||
if (c != 'P')
|
||||
goto quit;
|
||||
|
@ -163,6 +161,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if ((v < 0) || (v > 255))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
im->w = w;
|
||||
im->h = h;
|
||||
if (!IMAGE_DIMENSIONS_OK(w, h))
|
||||
|
@ -171,16 +171,13 @@ load2(ImlibImage * im, int load_data)
|
|||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, p == '8');
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
ptr2 = __imlib_AllocateData(im);
|
||||
if (!ptr2)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
/* start reading the data */
|
||||
switch (p)
|
||||
|
@ -261,7 +258,7 @@ load2(ImlibImage * im, int load_data)
|
|||
case '4': /* binary 1bit monochrome */
|
||||
data = malloc((w + 7) / 8 * sizeof(DATA8));
|
||||
if (!data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
ptr2 = im->data;
|
||||
for (y = 0; y < h; y++)
|
||||
|
@ -291,7 +288,7 @@ load2(ImlibImage * im, int load_data)
|
|||
case '5': /* binary 8bit grayscale GGGGGGGG */
|
||||
data = malloc(1 * sizeof(DATA8) * w);
|
||||
if (!data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
ptr2 = im->data;
|
||||
for (y = 0; y < h; y++)
|
||||
|
@ -330,7 +327,7 @@ load2(ImlibImage * im, int load_data)
|
|||
case '6': /* 24bit binary RGBRGBRGB */
|
||||
data = malloc(3 * sizeof(DATA8) * w);
|
||||
if (!data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
ptr2 = im->data;
|
||||
for (y = 0; y < h; y++)
|
||||
|
@ -369,7 +366,7 @@ load2(ImlibImage * im, int load_data)
|
|||
case '7': /* XV's 8bit 332 format */
|
||||
data = malloc(1 * sizeof(DATA8) * w);
|
||||
if (!data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
ptr2 = im->data;
|
||||
for (y = 0; y < h; y++)
|
||||
|
@ -401,7 +398,7 @@ load2(ImlibImage * im, int load_data)
|
|||
case '8': /* 24bit binary RGBARGBARGBA */
|
||||
data = malloc(4 * sizeof(DATA8) * w);
|
||||
if (!data)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
ptr2 = im->data;
|
||||
for (y = 0; y < h; y++)
|
||||
|
@ -448,8 +445,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
free(idata);
|
||||
free(data);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
if (rc == 0)
|
||||
__imlib_FreeData(im);
|
||||
|
|
|
@ -132,10 +132,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
|
||||
/* report progress every row */
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
/* write the header */
|
||||
|
@ -181,15 +178,14 @@ load2(ImlibImage * im, int load_data)
|
|||
unsigned int pix16;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
fdata = MAP_FAILED;
|
||||
|
||||
if (im->fsize < (int)(sizeof(tga_header)) ||
|
||||
(uintmax_t) im->fsize > SIZE_MAX)
|
||||
goto quit;
|
||||
return rc;
|
||||
|
||||
fdata = mmap(0, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
goto quit;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
fptr = fdata;
|
||||
header = fdata;
|
||||
|
@ -274,6 +270,8 @@ load2(ImlibImage * im, int load_data)
|
|||
break;
|
||||
}
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
/* endian-safe loading of 16-bit sizes */
|
||||
im->w = (header->widthHi << 8) | header->widthLo;
|
||||
im->h = (header->heightHi << 8) | header->heightLo;
|
||||
|
@ -287,10 +285,7 @@ load2(ImlibImage * im, int load_data)
|
|||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, hasa);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* find out how much data must be read from the file */
|
||||
/* (this is NOT simply width*height*4, due to compression) */
|
||||
|
@ -325,7 +320,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
/* allocate the destination buffer */
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
/* dataptr is the next 32-bit pixel to be filled in */
|
||||
dataptr = im->data;
|
||||
|
@ -565,8 +560,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -257,7 +257,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, TIFF_BYTES_TO_CHECK, PROT_READ, MAP_SHARED, fd, 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
magic_number = *(uint16_t *) fdata;
|
||||
|
||||
|
@ -278,6 +278,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!TIFFRGBAImageOK(tif, txt))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
strcpy(txt, "Cannot begin reading tiff");
|
||||
if (!TIFFRGBAImageBegin((TIFFRGBAImage *) & rgba_image, tif, 1, txt))
|
||||
goto quit;
|
||||
|
@ -315,21 +317,18 @@ load2(ImlibImage * im, int load_data)
|
|||
rgba_image.rgba.alpha != EXTRASAMPLE_UNSPECIFIED);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
rast = _TIFFmalloc(sizeof(uint32_t) * im->w * im->h);
|
||||
if (!rast)
|
||||
{
|
||||
fprintf(stderr, "imlib2-tiffloader: Out of memory\n");
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
}
|
||||
|
||||
if (rgba_image.rgba.isContig)
|
||||
|
@ -490,10 +489,7 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
|
|||
goto quit;
|
||||
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
}
|
||||
|
||||
rc = LOAD_SUCCESS;
|
||||
|
|
|
@ -22,9 +22,9 @@ load2(ImlibImage * im, int load_data)
|
|||
if (im->fsize < 12)
|
||||
return rc;
|
||||
|
||||
fdata = mmap(0, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
webp_data.bytes = fdata;
|
||||
webp_data.size = im->fsize;
|
||||
|
@ -34,6 +34,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (!demux)
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
frame = 1;
|
||||
if (im->frame_num > 0)
|
||||
{
|
||||
|
@ -48,7 +50,7 @@ load2(ImlibImage * im, int load_data)
|
|||
im->canvas_w, im->canvas_h, im->frame_count);
|
||||
|
||||
if (frame > 1 && frame > im->frame_count)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_BADFRAME);
|
||||
}
|
||||
|
||||
if (!WebPDemuxGetFrame(demux, frame, &iter))
|
||||
|
@ -77,15 +79,12 @@ load2(ImlibImage * im, int load_data)
|
|||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, iter.has_alpha);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
/* Load data */
|
||||
|
||||
if (!__imlib_AllocateData(im))
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
if (WebPDecodeBGRAInto
|
||||
(iter.fragment.bytes, iter.fragment.size, (uint8_t *) im->data,
|
||||
|
@ -102,8 +101,7 @@ load2(ImlibImage * im, int load_data)
|
|||
__imlib_FreeData(im);
|
||||
if (demux)
|
||||
WebPDemuxDelete(demux);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -98,7 +98,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
/* Signature check ("#define") allow longish initial comment */
|
||||
s = fdata;
|
||||
|
@ -151,18 +151,17 @@ load2(ImlibImage * im, int load_data)
|
|||
goto quit;
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
UNSET_FLAG(im->flags, F_HAS_ALPHA);
|
||||
|
||||
header = 0;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
ptr = __imlib_AllocateData(im);
|
||||
if (!ptr)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -194,10 +193,7 @@ load2(ImlibImage * im, int load_data)
|
|||
if (x >= im->w)
|
||||
{
|
||||
if (im->lc && __imlib_LoadProgressRows(im, y, 1))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
|
||||
x = 0;
|
||||
y += 1;
|
||||
|
@ -214,8 +210,7 @@ load2(ImlibImage * im, int load_data)
|
|||
quit:
|
||||
if (rc <= 0)
|
||||
__imlib_FreeData(im);
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -175,11 +175,13 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
fdata = mmap(NULL, im->fsize, PROT_READ, MAP_SHARED, fileno(im->fp), 0);
|
||||
if (fdata == MAP_FAILED)
|
||||
return rc;
|
||||
return LOAD_BADFILE;
|
||||
|
||||
if (!memmem(fdata, im->fsize, " XPM */", 7))
|
||||
goto quit;
|
||||
|
||||
rc = LOAD_BADIMAGE; /* Format accepted */
|
||||
|
||||
mm_init(fdata, im->fsize);
|
||||
|
||||
j = 0;
|
||||
|
@ -196,7 +198,7 @@ load2(ImlibImage * im, int load_data)
|
|||
count = 0;
|
||||
line = malloc(lsz);
|
||||
if (!line)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
len = 0;
|
||||
|
||||
backslash = 0;
|
||||
|
@ -256,7 +258,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
cmap = calloc(ncolors, sizeof(cmap_t));
|
||||
if (!cmap)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
|
||||
pixels = w * h;
|
||||
|
||||
|
@ -363,14 +365,11 @@ load2(ImlibImage * im, int load_data)
|
|||
UPDATE_FLAG(im->flags, F_HAS_ALPHA, transp >= 0);
|
||||
|
||||
if (!load_data)
|
||||
{
|
||||
rc = LOAD_SUCCESS;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_SUCCESS);
|
||||
|
||||
ptr = __imlib_AllocateData(im);
|
||||
if (!ptr)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -410,10 +409,8 @@ load2(ImlibImage * im, int load_data)
|
|||
if (im->lc && i > last_row)
|
||||
{
|
||||
if (__imlib_LoadProgressRows(im, last_row, i - last_row))
|
||||
{
|
||||
rc = LOAD_BREAK;
|
||||
goto quit;
|
||||
}
|
||||
QUIT_WITH_RC(LOAD_BREAK);
|
||||
|
||||
last_row = i;
|
||||
}
|
||||
}
|
||||
|
@ -451,7 +448,7 @@ load2(ImlibImage * im, int load_data)
|
|||
lsz += 256;
|
||||
nline = realloc(line, lsz);
|
||||
if (!nline)
|
||||
goto quit;
|
||||
QUIT_WITH_RC(LOAD_OOM);
|
||||
line = nline;
|
||||
}
|
||||
|
||||
|
@ -477,8 +474,7 @@ load2(ImlibImage * im, int load_data)
|
|||
|
||||
xpm_parse_done();
|
||||
|
||||
if (fdata != MAP_FAILED)
|
||||
munmap(fdata, im->fsize);
|
||||
munmap(fdata, im->fsize);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
|
|
@ -38,12 +38,15 @@ uncompress_file(FILE * fp, int dest)
|
|||
int
|
||||
load2(ImlibImage * im, int load_data)
|
||||
{
|
||||
int rc;
|
||||
ImlibLoader *loader;
|
||||
int dest, res;
|
||||
const char *s, *p, *q;
|
||||
char tmp[] = "/tmp/imlib2_loader_zlib-XXXXXX";
|
||||
char *real_ext;
|
||||
|
||||
rc = LOAD_FAIL;
|
||||
|
||||
/* make sure this file ends in ".gz" and that there's another ext
|
||||
* (e.g. "foo.png.gz") */
|
||||
for (p = s = im->real_file, q = NULL; *s; s++)
|
||||
|
@ -54,18 +57,18 @@ load2(ImlibImage * im, int load_data)
|
|||
p = s + 1;
|
||||
}
|
||||
if (!q || strcasecmp(p, "gz"))
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
if (!(real_ext = strndup(q, p - q - 1)))
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
loader = __imlib_FindBestLoaderForFormat(real_ext, 0);
|
||||
free(real_ext);
|
||||
if (!loader)
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
if ((dest = mkstemp(tmp)) < 0)
|
||||
return 0;
|
||||
return rc;
|
||||
|
||||
res = uncompress_file(im->fp, dest);
|
||||
close(dest);
|
||||
|
|
Loading…
Reference in New Issue