diff options
author | Kim Woelders <kim@woelders.dk> | 2021-12-23 09:30:06 +0100 |
---|---|---|
committer | Kim Woelders <kim@woelders.dk> | 2021-12-26 12:22:20 +0100 |
commit | 34b54a8fc29c447802a8b2d689af6a48a11ccf01 (patch) | |
tree | 369d465301bd1d5c82b856eede0670df522d8213 | |
parent | 8bc72491e88f0560c59d049409a0b2b25b63c917 (diff) | |
download | imlib2-34b54a8fc29c447802a8b2d689af6a48a11ccf01.tar.gz |
ICO loader: Mostly cosmetic changes (inline ico_read())
Avoids unnecessary memory allocation, simplifies error handling.
-rw-r--r-- | src/modules/loaders/loader_ico.c | 77 |
1 files changed, 26 insertions, 51 deletions
diff --git a/src/modules/loaders/loader_ico.c b/src/modules/loaders/loader_ico.c index 16013a1..b957953 100644 --- a/src/modules/loaders/loader_ico.c +++ b/src/modules/loaders/loader_ico.c @@ -89,7 +89,6 @@ typedef struct { } ie_t; typedef struct { - FILE *fp; idir_t idir; /* ICONDIR */ ie_t *ie; /* Icon entries */ } ico_t; @@ -109,8 +108,6 @@ ico_delete(ico_t * ico) } free(ico->ie); } - - free(ico); } static void @@ -231,48 +228,6 @@ ico_read_icon(ico_t * ico, int ino) ie->w = ie->h = 0; /* Mark invalid */ } -static ico_t * -ico_read(ImlibImage * im, void *data, unsigned int size) -{ - ico_t *ico; - unsigned int i; - - ico = calloc(1, sizeof(ico_t)); - if (!ico) - return NULL; - - ico->fp = im->fp; - - if (mm_read(&ico->idir, sizeof(ico->idir))) - goto bail; - - SWAP_LE_16_INPLACE(ico->idir.rsvd); - SWAP_LE_16_INPLACE(ico->idir.type); - SWAP_LE_16_INPLACE(ico->idir.icons); - - if (ico->idir.rsvd != 0 || - (ico->idir.type != 1 && ico->idir.type != 2) || ico->idir.icons <= 0) - goto bail; - - ico->ie = calloc(ico->idir.icons, sizeof(ie_t)); - if (!ico->ie) - goto bail; - - D("Loading '%s' Nicons = %d\n", im->real_file, ico->idir.icons); - - for (i = 0; i < ico->idir.icons; i++) - { - ico_read_idir(ico, i); - ico_read_icon(ico, i); - } - - return ico; - - bail: - ico_delete(ico); - return NULL; -} - static int ico_data_get_bit(DATA8 * data, int w, int x, int y) { @@ -436,7 +391,8 @@ load2(ImlibImage * im, int load_data) { int rc; void *fdata; - ico_t *ico; + ico_t ico; + unsigned int i; rc = LOAD_FAIL; @@ -446,20 +402,39 @@ load2(ImlibImage * im, int load_data) mm_init(fdata, im->fsize); - ico = ico_read(im, fdata, im->fsize); - if (!ico) + ico.ie = NULL; + if (mm_read(&ico.idir, sizeof(ico.idir))) + goto quit; + + SWAP_LE_16_INPLACE(ico.idir.rsvd); + SWAP_LE_16_INPLACE(ico.idir.type); + SWAP_LE_16_INPLACE(ico.idir.icons); + + if (ico.idir.rsvd != 0 || + (ico.idir.type != 1 && ico.idir.type != 2) || ico.idir.icons <= 0) + goto quit; + + ico.ie = calloc(ico.idir.icons, sizeof(ie_t)); + if (!ico.ie) goto quit; - if (ico_load(ico, im, load_data)) + D("Loading '%s' Nicons = %d\n", im->real_file, ico.idir.icons); + + for (i = 0; i < ico.idir.icons; i++) + { + ico_read_idir(&ico, i); + ico_read_icon(&ico, i); + } + + if (ico_load(&ico, im, load_data)) { if (im->lc) __imlib_LoadProgressRows(im, 0, im->h); rc = LOAD_SUCCESS; } - ico_delete(ico); - quit: + ico_delete(&ico); if (rc <= 0) __imlib_FreeData(im); if (fdata != MAP_FAILED) |