rem: *(r++) = color_table[0][k]; *(g++) = color_table[1][k]; *(b++) = color_table[2][k]; if (a) *(a++) = color_table[3][k];
add: *r = color_table[0][k]; *g = color_table[1][k]; *b = color_table[2][k]; if (a) { *a = color_table[3][k]; r += 4; g += 4; b += 4; a += 4; } else { r += 3; g += 3; b += 3; }
context: RGetImageFromXPMData(RContext *context, char **data){    RImage *image = NULL;    unsigned char *color_table[4];    unsigned short *symbol_table;    unsigned char *r, *g, *b, *a;    int i, j, k, line = 0;    int transp;    unsigned short color;    int bsize;    int w, h, ccount, csize;    if (sscanf(data[line++], "%i %i %i %i", &w, &h, &ccount, &csize)!=4	|| w <= 0 || h <= 0 || ccount <= 0 || csize <= 0)	goto bad_format;        if (csize!=1 && csize!=2) 	goto bad_format;    color_table[0] = alloca(ccount);    color_table[1] = alloca(ccount);    color_table[2] = alloca(ccount);    color_table[3] = alloca(ccount);    symbol_table = alloca(ccount * sizeof(unsigned short));        bsize = csize * w + 16;    if (!color_table[0] || !color_table[1] || !color_table[2] ||	!color_table[3] || !symbol_table || !bsize) {	RErrorCode = RERR_NOMEMORY;	alloca(0);	return NULL;    }    transp = 0;    /* get color table */    for (i=0; i<ccount; i++) {	symbol_table[i] = data[line][0];	if (csize==2)	    symbol_table[i] |= data[line][1]<<8;	j = csize;	while (data[line][j]!='#' && data[line][j]!=0	       && data[line][j]!='N') j++;	if (data[line][j]=='#') {	    unsigned int red, green, blue;	    	    k = 0;	    j++;	    while (data[line][j+k]!=0) k++;	    if (k==6) {		if (sscanf(&(data[line][j]), "%2x%2x%2x", &red, &green, &blue)!=3)		    goto bad_format;	    } else if (k==12) {				if (sscanf(&(data[line][j]), "%4x%4x%4x", &red, &green, &blue)!=3)		    goto bad_format;		red >>= 8;		green >>= 8;		blue >>= 8;	    } else		goto bad_format;	    	    color_table[0][i] = red;	    color_table[1][i] = green;	    color_table[2][i] = blue;	    color_table[3][i] = 255;	} else if (strncmp(&(data[line][j]), "None", 4)==0		   || strncmp(&(data[line][j]), "none", 4)==0) {	    color_table[3][i] = 0;	    transp = 1;	} else {	    goto bad_format;	}	line++;    }    image = RCreateImage(w, h, transp);    if (!image) {	alloca(0);	return NULL;    }    r = image->data;    g = image->data+1;    b = image->data+2;    if (image->format == RRGBAFormat)	a = image->data+3;    else	a = NULL;    for (i=0; i<h; i++) {	if (csize==1) {	    for (j=0; j<w; j++) {		color = data[line][j];				for (k=0; k<ccount; k++) {		    if (symbol_table[k] == color)			break;		}		if (k==ccount)		    k = 0;				*(r++) = color_table[0][k];		*(g++) = color_table[1][k];		*(b++) = color_table[2][k];		if (a)		    *(a++) = color_table[3][k];	    }	} else {	    for (j=0; j<w*2; j++) {		color = data[line][j++];		color |= data[line][j];				for (k=0; k<ccount; k++) {		    if (symbol_table[k] == color)			break;		}			if (k==ccount)		    k = 0;			*(r++) = color_table[0][k];		*(g++) = color_table[1][k];		*(b++) = color_table[2][k];		if (a)		    *(a++) = color_table[3][k];	    }	}	line++;    }#ifdef C_ALLOCA    alloca(0);#endif    return image;  bad_format:    RErrorCode = RERR_BADIMAGEFILE;#ifdef C_ALLOCA    alloca(0);#endif    if (image)	RDestroyImage(image);    return NULL;}