]> git.draconx.ca Git - liblbx.git/commitdiff
Allow embedded palettes to override arbitrary locations in the palette.
authorNick Bowler <draconx@gmail.com>
Mon, 31 Dec 2007 22:56:13 +0000 (17:56 -0500)
committerNick Bowler <draconx@gmail.com>
Mon, 31 Dec 2007 22:56:13 +0000 (17:56 -0500)
The first word of the palette header indicates where to start writing.
This (at least) makes techsel.lbx.000 work.

src/image.c

index 4f1a2bd0c805e718f234c9ca92794058afcddb62..2b1c2113c3974aa400b43f457b333404fba52050 100644 (file)
@@ -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,