From d33ec2c1162442940d35688b52f7a723ec2e8a0e Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Mon, 31 Dec 2007 17:56:13 -0500 Subject: [PATCH] Allow embedded palettes to override arbitrary locations in the palette. The first word of the palette header indicates where to start writing. This (at least) makes techsel.lbx.000 work. --- src/image.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/image.c b/src/image.c index 4f1a2bd..2b1c211 100644 --- a/src/image.c +++ b/src/image.c @@ -267,7 +267,7 @@ lbximg_getpalette(struct lbx_image *img, struct lbx_colour palette[static 256]) unsigned int i; size_t rc; - uint16_t zero, count; + uint16_t start, count; uint8_t entry[4]; /* Do nothing if the image doesn't have embedded palette data. */ @@ -279,17 +279,17 @@ lbximg_getpalette(struct lbx_image *img, struct lbx_colour palette[static 256]) return -1; /* Palette header */ - if (fread(&zero, sizeof zero, 1, img->f) != 1) goto readerr; + if (fread(&start, sizeof start, 1, img->f) != 1) goto readerr; if (fread(&count, sizeof count, 1, img->f) != 1) goto readerr; - zero = letohs(zero); img->foff += sizeof zero; + start = letohs(start); img->foff += sizeof start; count = letohs(count); img->foff += sizeof count; - if (zero != 0 || count > 256) { + if (start + count > 256) { lbx_errno = LBX_EFORMAT; return -1; } - if (hdrlen + 2*(sizeof zero) + count*(sizeof entry) > img->offsets[0]) { + if (hdrlen + 2*sizeof start + count*sizeof entry > img->offsets[0]) { lbx_errno = LBX_EFORMAT; return -1; } @@ -307,7 +307,7 @@ lbximg_getpalette(struct lbx_image *img, struct lbx_colour palette[static 256]) return -1; } - palette[i] = (struct lbx_colour){ + palette[start + i] = (struct lbx_colour){ .red = entry[1] << 2, .green = entry[2] << 2, .blue = entry[3] << 2, -- 2.43.2