diff options
author | Kim Woelders <kim@woelders.dk> | 2019-11-26 17:48:52 +0100 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2020-02-29 18:04:34 +0100 |
commit | 6c2fe14b8247fa7df489e58d45ca374d413292dc (patch) | |
tree | 9746c72a61a5bb7e1a4f599e4e1105e3902fed84 | |
parent | b9166551ac620382a82b79124ff969b1d9e5b340 (diff) | |
download | imlib2-6c2fe14b8247fa7df489e58d45ca374d413292dc.tar.gz |
Move loaders to load2()
-rw-r--r-- | src/modules/loaders/loader_argb.c | 15 | ||||
-rw-r--r-- | src/modules/loaders/loader_bmp.c | 29 | ||||
-rw-r--r-- | src/modules/loaders/loader_bz2.c | 17 | ||||
-rw-r--r-- | src/modules/loaders/loader_ff.c | 15 | ||||
-rw-r--r-- | src/modules/loaders/loader_gif.c | 9 | ||||
-rw-r--r-- | src/modules/loaders/loader_ico.c | 16 | ||||
-rw-r--r-- | src/modules/loaders/loader_id3.c | 17 | ||||
-rw-r--r-- | src/modules/loaders/loader_jpeg.c | 13 | ||||
-rw-r--r-- | src/modules/loaders/loader_lbm.c | 133 | ||||
-rw-r--r-- | src/modules/loaders/loader_png.c | 18 | ||||
-rw-r--r-- | src/modules/loaders/loader_pnm.c | 39 | ||||
-rw-r--r-- | src/modules/loaders/loader_tga.c | 10 | ||||
-rw-r--r-- | src/modules/loaders/loader_tiff.c | 23 | ||||
-rw-r--r-- | src/modules/loaders/loader_webp.c | 16 | ||||
-rw-r--r-- | src/modules/loaders/loader_xpm.c | 17 | ||||
-rw-r--r-- | src/modules/loaders/loader_zlib.c | 17 |
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) |