summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Woelders <kim@woelders.dk>2019-11-26 17:48:52 +0100
committerKim Woelders <kim@woelders.dk>2020-02-29 18:04:34 +0100
commit6c2fe14b8247fa7df489e58d45ca374d413292dc (patch)
tree9746c72a61a5bb7e1a4f599e4e1105e3902fed84
parentb9166551ac620382a82b79124ff969b1d9e5b340 (diff)
downloadimlib2-6c2fe14b8247fa7df489e58d45ca374d413292dc.tar.gz
Move loaders to load2()
-rw-r--r--src/modules/loaders/loader_argb.c15
-rw-r--r--src/modules/loaders/loader_bmp.c29
-rw-r--r--src/modules/loaders/loader_bz2.c17
-rw-r--r--src/modules/loaders/loader_ff.c15
-rw-r--r--src/modules/loaders/loader_gif.c9
-rw-r--r--src/modules/loaders/loader_ico.c16
-rw-r--r--src/modules/loaders/loader_id3.c17
-rw-r--r--src/modules/loaders/loader_jpeg.c13
-rw-r--r--src/modules/loaders/loader_lbm.c133
-rw-r--r--src/modules/loaders/loader_png.c18
-rw-r--r--src/modules/loaders/loader_pnm.c39
-rw-r--r--src/modules/loaders/loader_tga.c10
-rw-r--r--src/modules/loaders/loader_tiff.c23
-rw-r--r--src/modules/loaders/loader_webp.c16
-rw-r--r--src/modules/loaders/loader_xpm.c17
-rw-r--r--src/modules/loaders/loader_zlib.c17
16 files changed, 149 insertions, 255 deletions
diff --git a/src/modules/loaders/loader_argb.c b/src/modules/loaders/loader_argb.c
index 1aa23a5..ec58ca3 100644
--- a/src/modules/loaders/loader_argb.c
+++ b/src/modules/loaders/loader_argb.c
@@ -1,19 +1,13 @@
#include "loader_common.h"
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
- FILE *f;
int w = 0, h = 0, alpha = 0;
DATA32 *ptr;
int y;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
rc = LOAD_FAIL;
/* header */
@@ -21,7 +15,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
char buf[256], buf2[256];
buf[0] = '\0';
- if (!fgets(buf, 255, f))
+ if (!fgets(buf, 255, im->fp))
goto quit;
buf2[0] = '\0';
@@ -54,7 +48,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
for (y = 0; y < h; y++)
{
- if (fread(ptr, im->w, 4, f) != 4)
+ if (fread(ptr, im->w, 4, im->fp) != 4)
goto quit;
#ifdef WORDS_BIGENDIAN
@@ -75,7 +69,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
quit:
if (rc <= 0)
__imlib_FreeData(im);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_bmp.c b/src/modules/loaders/loader_bmp.c
index 564a8a2..8c71f6e 100644
--- a/src/modules/loaders/loader_bmp.c
+++ b/src/modules/loaders/loader_bmp.c
@@ -133,12 +133,10 @@ WriteleLong(FILE * file, unsigned long val)
return 1;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
- FILE *f;
unsigned int offset;
unsigned int size, comp, imgsize;
unsigned int bitcount, ncols, skip;
@@ -155,10 +153,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
int ashift2, rshift2, gshift2, bshift2;
bih_t bih;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
rc = LOAD_FAIL;
buffer = NULL;
@@ -167,14 +161,14 @@ load(ImlibImage * im, ImlibProgressFunction progress,
struct stat statbuf;
bfh_t bfh;
- if (fstat(fileno(f), &statbuf) < 0)
+ if (fstat(fileno(im->fp), &statbuf) < 0)
goto quit;
size = statbuf.st_size;
if (size != statbuf.st_size)
goto quit;
- if (fread(&bfh, sizeof(bfh), 1, f) != 1)
+ if (fread(&bfh, sizeof(bfh), 1, im->fp) != 1)
goto quit;
if (bfh.header[0] != 'B' || bfh.header[1] != 'M')
@@ -187,7 +181,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
goto quit;
memset(&bih, 0, sizeof(bih));
- if (fread(&bih, 4, 1, f) != 1)
+ if (fread(&bih, 4, 1, im->fp) != 1)
goto quit;
SWAP_LE_32_INPLACE(bih.header_size);
@@ -198,7 +192,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (bih.header_size < 12 || bih.header_size > sizeof(bih))
goto quit;
- if (fread(&bih.header_size + 1, bih.header_size - 4, 1, f) != 1)
+ if (fread(&bih.header_size + 1, bih.header_size - 4, 1, im->fp) != 1)
goto quit;
w = h = 0;
@@ -232,7 +226,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (bih.header_size == 40)
{
ncols = (comp == BI_ALPHABITFIELDS) ? 4 : 3;
- if (fread(&bih.bih.mask_r, 4, ncols, f) != ncols)
+ if (fread(&bih.bih.mask_r, 4, ncols, im->fp) != ncols)
goto quit;
}
rmask = SWAP_LE_32(bih.bih.mask_r);
@@ -273,7 +267,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (ncols > 256)
ncols = 256;
for (i = 0; i < ncols; i++)
- if (fread(&rgbQuads[i], 3, 1, f) != 1)
+ if (fread(&rgbQuads[i], 3, 1, im->fp) != 1)
goto quit;
}
else
@@ -281,7 +275,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ncols /= 4;
if (ncols > 256)
ncols = 256;
- if (fread(rgbQuads, 4, ncols, f) != ncols)
+ if (fread(rgbQuads, 4, ncols, im->fp) != ncols)
goto quit;
}
for (i = 0; i < ncols; i++)
@@ -398,7 +392,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
/* Load data */
- fseek(f, offset, SEEK_SET);
+ fseek(im->fp, offset, SEEK_SET);
if (!__imlib_AllocateData(im))
goto quit;
@@ -407,7 +401,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!buffer)
goto quit;
- if (fread(buffer, imgsize, 1, f) != 1)
+ if (fread(buffer, imgsize, 1, im->fp) != 1)
goto quit;
buffer_ptr = buffer;
@@ -787,7 +781,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (rc <= 0)
__imlib_FreeData(im);
free(buffer);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_bz2.c b/src/modules/loaders/loader_bz2.c
index f5348ac..800d78c 100644
--- a/src/modules/loaders/loader_bz2.c
+++ b/src/modules/loaders/loader_bz2.c
@@ -44,12 +44,10 @@ uncompress_file(FILE * fp, int dest)
return ret;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
ImlibLoader *loader;
- FILE *fp;
int dest, res;
const char *s, *p, *q;
char tmp[] = "/tmp/imlib2_loader_bz2-XXXXXX";
@@ -75,17 +73,10 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!loader)
return 0;
- if (!(fp = fopen(im->real_file, "rb")))
- return 0;
-
if ((dest = mkstemp(tmp)) < 0)
- {
- fclose(fp);
- return 0;
- }
+ return 0;
- res = uncompress_file(fp, dest);
- fclose(fp);
+ res = uncompress_file(im->fp, dest);
close(dest);
if (!res)
diff --git a/src/modules/loaders/loader_ff.c b/src/modules/loaders/loader_ff.c
index 7a1bc85..18a3a78 100644
--- a/src/modules/loaders/loader_ff.c
+++ b/src/modules/loaders/loader_ff.c
@@ -6,26 +6,20 @@
#define LEN(x) (sizeof((x)) / sizeof(*(x)))
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
- FILE *f;
size_t rowlen, i, j;
uint32_t hdr[2 + 1 + 1], w, h;
uint16_t *row;
uint8_t *dat;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
rc = LOAD_FAIL;
row = NULL;
/* read and check the header */
- if (fread(hdr, sizeof(uint32_t), LEN(hdr), f) != LEN(hdr) ||
+ if (fread(hdr, sizeof(uint32_t), LEN(hdr), im->fp) != LEN(hdr) ||
memcmp("farbfeld", hdr, sizeof("farbfeld") - 1))
goto quit;
@@ -58,7 +52,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
dat = (uint8_t *) im->data;
for (i = 0; i < h; i++, dat += rowlen)
{
- if (fread(row, sizeof(uint16_t), rowlen, f) != rowlen)
+ if (fread(row, sizeof(uint16_t), rowlen, im->fp) != (size_t)rowlen)
goto quit;
for (j = 0; j < rowlen; j += 4)
@@ -86,7 +80,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
free(row);
if (rc <= 0)
__imlib_FreeData(im);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_gif.c b/src/modules/loaders/loader_gif.c
index b05be2e..d012bf2 100644
--- a/src/modules/loaders/loader_gif.c
+++ b/src/modules/loaders/loader_gif.c
@@ -4,9 +4,8 @@
#include <fcntl.h>
#include <gif_lib.h>
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
static const int intoffset[] = { 0, 4, 2, 1 };
static const int intjump[] = { 8, 8, 4, 2 };
@@ -21,9 +20,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
int fd;
DATA32 colormap[256];
- fd = open(im->real_file, O_RDONLY);
- if (fd < 0)
- return LOAD_FAIL;
+ fd = dup(fileno(im->fp));
#if GIFLIB_MAJOR >= 5
gif = DGifOpenFileHandle(fd, NULL);
diff --git a/src/modules/loaders/loader_ico.c b/src/modules/loaders/loader_ico.c
index e5e6571..c15ff98 100644
--- a/src/modules/loaders/loader_ico.c
+++ b/src/modules/loaders/loader_ico.c
@@ -74,9 +74,6 @@ ico_delete(ico_t * ico)
{
int i;
- if (ico->fp)
- fclose(ico->fp);
-
if (ico->ie)
{
for (i = 0; i < ico->idir.icons; i++)
@@ -216,7 +213,7 @@ ico_read_icon(ico_t * ico, int ino)
}
static ico_t *
-ico_read(char *filename)
+ico_read(FILE * fp)
{
ico_t *ico;
unsigned int nr, i;
@@ -225,9 +222,7 @@ ico_read(char *filename)
if (!ico)
return NULL;
- ico->fp = fopen(filename, "rb");
- if (!ico->fp)
- goto bail;
+ ico->fp = fp;
nr = fread(&ico->idir, 1, sizeof(ico->idir), ico->fp);
if (nr != sizeof(ico->idir))
@@ -418,14 +413,13 @@ ico_load(ico_t * ico, ImlibImage * im, int load_data)
return 1;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
ico_t *ico;
int ok;
- ico = ico_read(im->real_file);
+ ico = ico_read(im->fp);
if (!ico)
return 0;
diff --git a/src/modules/loaders/loader_id3.c b/src/modules/loaders/loader_id3.c
index 5f7e1ef..803c966 100644
--- a/src/modules/loaders/loader_id3.c
+++ b/src/modules/loaders/loader_id3.c
@@ -247,7 +247,7 @@ typedef struct lopt {
} lopt;
static char
-get_options(lopt * opt, const ImlibImage * im, FILE * f)
+get_options(lopt * opt, const ImlibImage * im)
{
unsigned int handle = 0, index = 0, traverse = 0;
context *ctx;
@@ -295,7 +295,7 @@ get_options(lopt * opt, const ImlibImage * im, FILE * f)
if (handle)
ctx = context_get(handle);
else if (!(ctx = context_get_by_name(im->real_file)) &&
- !(ctx = context_create(im->real_file, f)))
+ !(ctx = context_create(im->real_file, im->fp)))
return 0;
if (!index)
@@ -495,11 +495,9 @@ write_tags(ImlibImage * im, lopt * opt)
}
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
- FILE *f;
ImlibLoader *loader;
lopt opt;
int res;
@@ -507,11 +505,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
res = LOAD_FAIL;
opt.ctx = NULL;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
- if (!get_options(&opt, im, f))
+ if (!get_options(&opt, im))
goto fail_context;
if (!get_loader(&opt, &loader))
@@ -602,7 +596,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
fail_context:
if (opt.ctx)
context_delref(opt.ctx);
- fclose(f);
return res;
}
diff --git a/src/modules/loaders/loader_jpeg.c b/src/modules/loaders/loader_jpeg.c
index 3a31a01..4f009a6 100644
--- a/src/modules/loaders/loader_jpeg.c
+++ b/src/modules/loaders/loader_jpeg.c
@@ -57,22 +57,16 @@ _jdata_init(ImLib_JPEG_data * jd)
return jem;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int w, h, rc;
struct jpeg_decompress_struct cinfo;
ImLib_JPEG_data jdata;
- FILE *f;
DATA8 *ptr, *line[16];
DATA32 *ptr2;
int x, y, l, i, scans;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
/* set up error handling */
cinfo.err = _jdata_init(&jdata);
if (sigsetjmp(jdata.setjmp_buffer, 1))
@@ -84,7 +78,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
rc = LOAD_FAIL;
jpeg_create_decompress(&cinfo);
- jpeg_stdio_src(&cinfo, f);
+ jpeg_stdio_src(&cinfo, im->fp);
jpeg_read_header(&cinfo, TRUE);
im->w = w = cinfo.image_width;
@@ -182,7 +176,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
free(jdata.data);
if (rc <= 0)
__imlib_FreeData(im);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_lbm.c b/src/modules/loaders/loader_lbm.c
index 79e53d8..434f723 100644
--- a/src/modules/loaders/loader_lbm.c
+++ b/src/modules/loaders/loader_lbm.c
@@ -69,10 +69,9 @@ freeilbm(ILBM * ilbm)
* Format FORMsizeILBMtag.size....tag.size....tag.size....
*------------------------------------------------------------------------------*/
static int
-loadchunks(char *name, ILBM * ilbm, int full)
+loadchunks(FILE * f, ILBM * ilbm, int full)
{
CHUNK *c;
- FILE *f;
size_t s;
long formsize, pos, z;
int ok, seek;
@@ -80,81 +79,76 @@ loadchunks(char *name, ILBM * ilbm, int full)
ok = 0;
- f = fopen(name, "rb");
- if (f)
+ s = fread(buf, 1, 12, f);
+ if (s == 12 && !memcmp(buf, "FORM", 4) && !memcmp(buf + 8, "ILBM", 4))
{
- s = fread(buf, 1, 12, f);
- if (s == 12 && !memcmp(buf, "FORM", 4) && !memcmp(buf + 8, "ILBM", 4))
+ memset(ilbm, 0, sizeof(*ilbm));
+ formsize = L2RLONG(buf + 4);
+
+ while (1)
{
- memset(ilbm, 0, sizeof(*ilbm));
- formsize = L2RLONG(buf + 4);
+ pos = ftell(f);
+ if (pos < 0 || pos >= formsize + 8)
+ break; /* Error or FORM data is finished. */
+ seek = 1;
+
+ s = fread(buf, 1, 8, f);
+ if (s != 8)
+ break; /* Error or short file. */
+
+ z = L2RLONG(buf + 4);
+ if (z < 0)
+ break; /* Corrupt file. */
+
+ c = NULL;
+ if (!memcmp(buf, "BMHD", 4))
+ c = &(ilbm->bmhd);
+ else if (full)
+ {
+ if (!memcmp(buf, "CAMG", 4))
+ c = &(ilbm->camg);
+ else if (!memcmp(buf, "CMAP", 4))
+ c = &(ilbm->cmap);
+ else if (!memcmp(buf, "CTBL", 4))
+ c = &(ilbm->ctbl);
+ else if (!memcmp(buf, "SHAM", 4))
+ c = &(ilbm->sham);
+ else if (!memcmp(buf, "BODY", 4))
+ c = &(ilbm->body);
+ }
- while (1)
+ if (c && !c->data)
{
- pos = ftell(f);
- if (pos < 0 || pos >= formsize + 8)
- break; /* Error or FORM data is finished. */
- seek = 1;
+ c->size = z;
+ c->data = malloc(c->size);
+ if (!c->data)
+ break; /* Out of memory. */
- s = fread(buf, 1, 8, f);
- if (s != 8)
+ s = fread(c->data, 1, c->size, f);
+ if (s != (size_t)c->size)
break; /* Error or short file. */
- z = L2RLONG(buf + 4);
- if (z < 0)
- break; /* Corrupt file. */
-
- c = NULL;
- if (!memcmp(buf, "BMHD", 4))
- c = &(ilbm->bmhd);
- else if (full)
- {
- if (!memcmp(buf, "CAMG", 4))
- c = &(ilbm->camg);
- else if (!memcmp(buf, "CMAP", 4))
- c = &(ilbm->cmap);
- else if (!memcmp(buf, "CTBL", 4))
- c = &(ilbm->ctbl);
- else if (!memcmp(buf, "SHAM", 4))
- c = &(ilbm->sham);
- else if (!memcmp(buf, "BODY", 4))
- c = &(ilbm->body);
- }
-
- if (c && !c->data)
- {
- c->size = z;
- c->data = malloc(c->size);
- if (!c->data)
- break; /* Out of memory. */
-
- s = fread(c->data, 1, c->size, f);
- if (s != (size_t)c->size)
- break; /* Error or short file. */
-
- seek = 0;
- if (!full)
- { /* Only BMHD required. */
- ok = 1;
- break;
- }
+ seek = 0;
+ if (!full)
+ { /* Only BMHD required. */
+ ok = 1;
+ break;
}
-
- if (pos + 8 + z >= formsize + 8)
- break; /* This was last chunk. */
-
- if (seek && fseek(f, z, SEEK_CUR) != 0)
- break;
}
- /* File may end strangely, especially if body size is uneven, but it's
- * ok if we have the chunks we want. !full check is already done. */
- if (ilbm->bmhd.data && ilbm->body.data)
- ok = 1;
- if (!ok)
- freeilbm(ilbm);
+ if (pos + 8 + z >= formsize + 8)
+ break; /* This was last chunk. */
+
+ if (seek && fseek(f, z, SEEK_CUR) != 0)
+ break;
}
- fclose(f);
+
+ /* File may end strangely, especially if body size is uneven, but it's
+ * ok if we have the chunks we want. !full check is already done. */
+ if (ilbm->bmhd.data && ilbm->body.data)
+ ok = 1;
+ if (!ok)
+ freeilbm(ilbm);
}
return ok;
@@ -447,9 +441,8 @@ deplane(DATA32 * row, int w, ILBM * ilbm, unsigned char *plane[])
*
* Imlib2 doesn't support reading comment chunks like ANNO.
*------------------------------------------------------------------------------*/
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
char *env;
@@ -461,7 +454,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
* Load the chunk(s) we're interested in. If load_data is not true, then we only
* want the image size and format.
*----------*/
- rc = loadchunks(im->real_file, &ilbm, load_data);
+ rc = loadchunks(im->fp, &ilbm, load_data);
if (rc == 0)
return LOAD_FAIL;
diff --git a/src/modules/loaders/loader_png.c b/src/modules/loaders/loader_png.c
index bf3cc5c..5e90b33 100644
--- a/src/modules/loaders/loader_png.c
+++ b/src/modules/loaders/loader_png.c
@@ -17,36 +17,31 @@ comment_free(ImlibImage * im, void *data)
free(data);
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
png_uint_32 w32, h32;
int w, h;
char hasa;
- FILE *f;
png_structp png_ptr = NULL;
png_infop info_ptr = NULL;
int bit_depth, color_type, interlace_type;
ImLib_PNG_data pdata;
int i;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
/* read header */
rc = LOAD_FAIL;
pdata.lines = NULL;
- if (fread(pdata.buf, 1, PNG_BYTES_TO_CHECK, f) != PNG_BYTES_TO_CHECK)
+ if (fread(pdata.buf, 1, PNG_BYTES_TO_CHECK, im->fp) != PNG_BYTES_TO_CHECK)
goto quit;
if (png_sig_cmp(pdata.buf, 0, PNG_BYTES_TO_CHECK))
goto quit;
- rewind(f);
+ rewind(im->fp);
+
png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
if (!png_ptr)
goto quit;
@@ -61,7 +56,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
goto quit;
}
- png_init_io(png_ptr, f);
+ png_init_io(png_ptr, im->fp);
png_read_info(png_ptr, info_ptr);
png_get_IHDR(png_ptr, info_ptr, (png_uint_32 *) (&w32),
(png_uint_32 *) (&h32), &bit_depth, &color_type,
@@ -192,7 +187,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
png_destroy_read_struct(&png_ptr, &info_ptr, NULL);
if (rc <= 0)
__imlib_FreeData(im);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_pnm.c b/src/modules/loaders/loader_pnm.c
index 4b89c64..4f251c6 100644
--- a/src/modules/loaders/loader_pnm.c
+++ b/src/modules/loaders/loader_pnm.c
@@ -1,12 +1,10 @@
#include "loader_common.h"
#include <ctype.h>
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
- FILE *f;
char p = ' ', numbers = 3, count = 0;
int w = 0, h = 0, v = 255, c = 0;
char buf[256];
@@ -16,19 +14,15 @@ load(ImlibImage * im, ImlibProgressFunction progress,
DATA32 *ptr2, rval, gval, bval;
int i, j, x, y;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
/* read the header info */
rc = LOAD_FAIL;
- c = fgetc(f);
+ c = fgetc(im->fp);
if (c != 'P')
goto quit;
- p = fgetc(f);
+ p = fgetc(im->fp);
if (p == '1' || p == '4')
numbers = 2; /* bitimages don't have max value */
@@ -38,19 +32,19 @@ load(ImlibImage * im, ImlibProgressFunction progress,
count = 0;
while (count < numbers)
{
- c = fgetc(f);
+ c = fgetc(im->fp);
if (c == EOF)
goto quit;
/* eat whitespace */
while (isspace(c))
- c = fgetc(f);
+ c = fgetc(im->fp);
/* if comment, eat that */
if (c == '#')
{
do
- c = fgetc(f);
+ c = fgetc(im->fp);
while (c != '\n' && c != EOF);
}
/* no comment -> proceed */
@@ -62,7 +56,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
while (c != EOF && !isspace(c) && (i < 255))
{
buf[i++] = c;
- c = fgetc(f);
+ c = fgetc(im->fp);
}
if (i)
{
@@ -119,7 +113,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
{
for (x = 0; x < w; x++)
{
- j = fscanf(f, "%u", &gval);
+ j = fscanf(im->fp, "%u", &gval);
if (j <= 0)
goto quit;
@@ -140,7 +134,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
{
for (x = 0; x < w; x++)
{
- j = fscanf(f, "%u", &gval);
+ j = fscanf(im->fp, "%u", &gval);
if (j <= 0)
goto quit;
@@ -165,7 +159,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
{
for (x = 0; x < w; x++)
{
- j = fscanf(f, "%u %u %u", &rval, &gval, &bval);
+ j = fscanf(im->fp, "%u %u %u", &rval, &gval, &bval);
if (j <= 2)
goto quit;
@@ -194,7 +188,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ptr2 = im->data;
for (y = 0; y < h; y++)
{
- if (!fread(data, (w + 7) / 8, 1, f))
+ if (!fread(data, (w + 7) / 8, 1, im->fp))
goto quit;
ptr = data;
@@ -224,7 +218,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ptr2 = im->data;
for (y = 0; y < h; y++)
{
- if (!fread(data, w * 1, 1, f))
+ if (!fread(data, w * 1, 1, im->fp))
goto quit;
ptr = data;
@@ -263,7 +257,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ptr2 = im->data;
for (y = 0; y < h; y++)
{
- if (!fread(data, w * 3, 1, f))
+ if (!fread(data, w * 3, 1, im->fp))
goto quit;
ptr = data;
@@ -302,7 +296,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ptr2 = im->data;
for (y = 0; y < h; y++)
{
- if (!fread(data, w * 1, 1, f))
+ if (!fread(data, w * 1, 1, im->fp))
goto quit;
ptr = data;
@@ -334,7 +328,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
ptr2 = im->data;
for (y = 0; y < h; y++)
{
- if (!fread(data, w * 4, 1, f))
+ if (!fread(data, w * 4, 1, im->fp))
goto quit;
ptr = data;
@@ -379,7 +373,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (rc == 0)
__imlib_FreeData(im);
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_tga.c b/src/modules/loaders/loader_tga.c
index c0a56ba..e9729b0 100644
--- a/src/modules/loaders/loader_tga.c
+++ b/src/modules/loaders/loader_tga.c
@@ -163,9 +163,8 @@ save(ImlibImage * im, ImlibProgressFunction progress, char progress_granularity)
* There are several other (uncommon) Targa formats which this function can't currently handle
*/
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int fd, rc;
void *seg, *filedata;
@@ -181,9 +180,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
unsigned char a, r, g, b;
unsigned int pix16;
- fd = open(im->real_file, O_RDONLY);
- if (fd < 0)
- return LOAD_FAIL;
+ fd = fileno(im->fp);
rc = LOAD_FAIL;
seg = MAP_FAILED;
@@ -566,7 +563,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
__imlib_FreeData(im);
if (seg != MAP_FAILED)
munmap(seg, ss.st_size);
- close(fd);
return rc;
}
diff --git a/src/modules/loaders/loader_tiff.c b/src/modules/loaders/loader_tiff.c
index 3caea0d..9cb3038 100644
--- a/src/modules/loaders/loader_tiff.c
+++ b/src/modules/loaders/loader_tiff.c
@@ -237,12 +237,10 @@ raster(TIFFRGBAImage_Extra * img, uint32 * rast,
}
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
- FILE *f;
TIFF *tif = NULL;
int fd;
uint16 magic_number;
@@ -250,14 +248,10 @@ load(ImlibImage * im, ImlibProgressFunction progress,
uint32 *rast = NULL;
char txt[1024];
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
rc = LOAD_FAIL;
rgba_image.image = NULL;
- fd = fileno(f);
+ fd = fileno(im->fp);
if (read(fd, &magic_number, sizeof(uint16)) != sizeof(uint16))
goto quit;
@@ -265,14 +259,15 @@ load(ImlibImage * im, ImlibProgressFunction progress,
&& (magic_number != TIFF_LITTLEENDIAN))
goto quit;
- fd = dup(fd);
lseek(fd, 0, SEEK_SET);
- fclose(f);
- f = NULL;
+ fd = dup(fd);
tif = TIFFFdOpen(fd, im->real_file, "r");
if (!tif)
- goto quit;
+ {
+ close(fd);
+ goto quit;
+ }
strcpy(txt, "Cannot be processed by libtiff");
if (!TIFFRGBAImageOK(tif, txt))
@@ -360,8 +355,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
TIFFRGBAImageEnd((TIFFRGBAImage *) & rgba_image);
if (tif)
TIFFClose(tif);
- if (f)
- fclose(f);
return rc;
}
diff --git a/src/modules/loaders/loader_webp.c b/src/modules/loaders/loader_webp.c
index bc0ec1f..9810540 100644
--- a/src/modules/loaders/loader_webp.c
+++ b/src/modules/loaders/loader_webp.c
@@ -31,9 +31,8 @@ webp_strerror(VP8StatusCode code)
}
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
uint8_t *encoded_data;
@@ -42,11 +41,11 @@ load(ImlibImage * im, ImlibProgressFunction progress,
WebPBitstreamFeatures features;
VP8StatusCode vp8return;
- if (stat(im->real_file, &stats) < 0)
+ encoded_fd = fileno(im->fp);
+ if (encoded_fd < 0)
return LOAD_FAIL;
- encoded_fd = open(im->real_file, O_RDONLY);
- if (encoded_fd < 0)
+ if (fstat(encoded_fd, &stats) < 0)
return LOAD_FAIL;
rc = LOAD_FAIL;
@@ -58,9 +57,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (read(encoded_fd, encoded_data, stats.st_size) < stats.st_size)
goto quit;
- close(encoded_fd);
- encoded_fd = -1;
-
if (WebPGetInfo(encoded_data, stats.st_size, &im->w, &im->h) == 0)
goto quit;
@@ -104,8 +100,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (rc <= 0)
__imlib_FreeData(im);
free(encoded_data);
- if (encoded_fd >= 0)
- close(encoded_fd);
return rc;
}
diff --git a/src/modules/loaders/loader_xpm.c b/src/modules/loaders/loader_xpm.c
index f2a6815..86ccad7 100644
--- a/src/modules/loaders/loader_xpm.c
+++ b/src/modules/loaders/loader_xpm.c
@@ -127,13 +127,11 @@ xpm_cmap_lookup(const cmap_t * cmap, int nc, int cpp, const char *s)
return cmap[i1].pixel;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
int rc;
DATA32 *ptr;
- FILE *f;
int pc, c, i, j, k, w, h, ncolors, cpp;
int comment, transp, quote, context, len, done, backslash;
char *line, s[256], tok[256], col[256];
@@ -143,17 +141,13 @@ load(ImlibImage * im, ImlibProgressFunction progress,
int count, pixels;
int last_row = 0;
- f = fopen(im->real_file, "rb");
- if (!f)
- return LOAD_FAIL;
-
rc = LOAD_FAIL;
done = 0;
transp = -1;
line = NULL;
cmap = NULL;
- len = fread(s, 1, sizeof(s) - 1, f);
+ len = fread(s, 1, sizeof(s) - 1, im->fp);
if (len < 9)
goto quit;
@@ -161,7 +155,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!strstr(s, " XPM */"))
goto quit;
- rewind(f);
+ rewind(im->fp);
i = 0;
j = 0;
@@ -186,7 +180,7 @@ load(ImlibImage * im, ImlibProgressFunction progress,
while (!done)
{
pc = c;
- c = fgetc(f);
+ c = fgetc(im->fp);
if (c == EOF)
break;
@@ -456,7 +450,6 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (rc <= 0)
__imlib_FreeData(im);
- fclose(f);
free(cmap);
free(line);
diff --git a/src/modules/loaders/loader_zlib.c b/src/modules/loaders/loader_zlib.c
index 22e7d1b..357fc12 100644
--- a/src/modules/loaders/loader_zlib.c
+++ b/src/modules/loaders/loader_zlib.c
@@ -37,12 +37,10 @@ uncompress_file(FILE * fp, int dest)
return ret;
}
-char
-load(ImlibImage * im, ImlibProgressFunction progress,
- char progress_granularity, char load_data)
+int
+load2(ImlibImage * im, int load_data)
{
ImlibLoader *loader;
- FILE *fp;
int dest, res;
const char *s, *p, *q;
char tmp[] = "/tmp/imlib2_loader_zlib-XXXXXX";
@@ -68,17 +66,10 @@ load(ImlibImage * im, ImlibProgressFunction progress,
if (!loader)
return 0;
- if (!(fp = fopen(im->real_file, "rb")))
- return 0;
-
if ((dest = mkstemp(tmp)) < 0)
- {
- fclose(fp);
- return 0;
- }
+ return 0;
- res = uncompress_file(fp, dest);
- fclose(fp);
+ res = uncompress_file(im->fp, dest);
close(dest);
if (!res)