replace ImBuf.depth with ImBuf.planes to match ImageFormatData.planes & to avoid...
[blender.git] / source / blender / imbuf / intern / targa.c
index 3c14189a2921896545b37404148cf800e9560bfa..895f922a0da9e94f777ed0e62f606cb3df2eba21 100644 (file)
@@ -1,5 +1,4 @@
-/**
- *
+/*
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * Contributor(s): none yet.
  *
  * ***** END GPL LICENSE BLOCK *****
- * $Id$
  */
 
+/** \file blender/imbuf/intern/targa.c
+ *  \ingroup imbuf
+ */
+
+
 #ifdef WIN32
 #include <io.h>
 #endif
 #include "BLI_blenlib.h"
+#include "MEM_guardedalloc.h"
 
 #include "imbuf.h"
 
@@ -190,26 +194,26 @@ static int dumptarga(struct ImBuf * ibuf, FILE * file)
        int size;
        uchar *rect;
 
-       if (ibuf == 0) return (0);
-       if (ibuf->rect == 0) return (0);
+       if (ibuf == NULL) return (0);
+       if (ibuf->rect == NULL) return (0);
 
        size = ibuf->x * ibuf->y;
        rect = (uchar *) ibuf->rect;
 
-       if (ibuf->depth <= 8) {
+       if (ibuf->planes <= 8) {
                while(size > 0){
                        if (putc(*rect, file) == EOF) return (0);
                        size--;
                        rect += 4;
                }
-       } else if (ibuf->depth <= 16) {
+       } else if (ibuf->planes <= 16) {
                while(size > 0){
                        putc(rect[0], file);
                        if (putc(rect[1], file) == EOF) return (0);
                        size--;
                        rect += 4;
                }
-       } else if (ibuf->depth <= 24) {
+       } else if (ibuf->planes <= 24) {
                while(size > 0){
                        putc(rect[2], file);
                        putc(rect[1], file);
@@ -217,7 +221,7 @@ static int dumptarga(struct ImBuf * ibuf, FILE * file)
                        size--;
                        rect += 4;
                }
-       } else if (ibuf->depth <= 32) {
+       } else if (ibuf->planes <= 32) {
                while(size > 0){
                        putc(rect[2], file);
                        putc(rect[1], file);
@@ -232,21 +236,16 @@ static int dumptarga(struct ImBuf * ibuf, FILE * file)
 }
 
 
-int imb_savetarga(struct ImBuf * ibuf, char *name, int flags)
+int imb_savetarga(struct ImBuf * ibuf, const char *name, int flags)
 {
-       char buf[20];
+       char buf[20]= {0};
        FILE *fildes;
        short ok = 0;
+       
+       (void)flags; /* unused */
 
-       if (ibuf == 0) return (0);
-       if (ibuf->rect == 0) return (0);
-
-       memset(buf,0,sizeof(buf));
-
-       /* buf[0] = 0;  length string */
-
-       buf[16] = (ibuf->depth + 0x7 ) & ~0x7;
-       if (ibuf->depth > 8 ){
+       buf[16] = (ibuf->planes + 0x7 ) & ~0x7;
+       if (ibuf->planes > 8 ){
                buf[2] = 10;
        } else{
                buf[2] = 11;
@@ -266,7 +265,7 @@ int imb_savetarga(struct ImBuf * ibuf, char *name, int flags)
 
        /* Don't forget to indicate that your 32 bit
         * targa uses 8 bits for the alpha channel! */
-       if (ibuf->depth==32) {
+       if (ibuf->planes==32) {
                buf[17] |= 0x08;
        }
        fildes = fopen(name,"wb");
@@ -280,7 +279,7 @@ int imb_savetarga(struct ImBuf * ibuf, char *name, int flags)
        if (ibuf->ftype == RAWTGA) {
                ok = dumptarga(ibuf, fildes);
        } else {                
-               switch((ibuf->depth + 7) >> 3){
+               switch((ibuf->planes + 7) >> 3){
                case 1:
                        ok = makebody_tga(ibuf, fildes, tga_out1);
                        break;
@@ -337,7 +336,8 @@ static int checktarga(TARGA *tga, unsigned char *mem)
        return(1);
 }
 
-int imb_is_a_targa(unsigned char *buf) {
+int imb_is_a_targa(unsigned char *buf)
+{
        TARGA tga;
        
        return checktarga(&tga, buf);
@@ -358,15 +358,15 @@ static void complete_partial_load(struct ImBuf *ibuf, unsigned int *rect)
        }
 }
 
-static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, int mem_size, int psize)
+static void decodetarga(struct ImBuf *ibuf, unsigned char *mem, size_t mem_size, int psize)
 {
        unsigned char *mem_end = mem+mem_size;
        int count, col, size;
        unsigned int *rect;
        uchar * cp = (uchar *) &col;
        
-       if (ibuf == 0) return;
-       if (ibuf->rect == 0) return;
+       if (ibuf == NULL) return;
+       if (ibuf->rect == NULL) return;
 
        size = ibuf->x * ibuf->y;
        rect = ibuf->rect;
@@ -469,15 +469,15 @@ partial_load:
        complete_partial_load(ibuf, rect);
 }
 
-static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, int mem_size, int psize)
+static void ldtarga(struct ImBuf * ibuf,unsigned char * mem, size_t mem_size, int psize)
 {
        unsigned char *mem_end = mem+mem_size;
        int col,size;
        unsigned int *rect;
        uchar * cp = (uchar *) &col;
 
-       if (ibuf == 0) return;
-       if (ibuf->rect == 0) return;
+       if (ibuf == NULL) return;
+       if (ibuf->rect == NULL) return;
 
        size = ibuf->x * ibuf->y;
        rect = ibuf->rect;
@@ -526,20 +526,20 @@ partial_load:
 }
 
 
-struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
+struct ImBuf *imb_loadtarga(unsigned char *mem, size_t mem_size, int flags)
 {
        TARGA tga;
        struct ImBuf * ibuf;
        int col, count, size;
-       unsigned int *rect, *cmap= NULL, mincol= 0, maxcol= 0;
+       unsigned int *rect, *cmap= NULL /*, mincol= 0*/, maxcol= 0;
        uchar * cp = (uchar *) &col;
        
-       if (checktarga(&tga,mem) == 0) return(0);
+       if (checktarga(&tga,mem) == 0) return(NULL);
 
-       if (flags & IB_test) ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,tga.pixsize, 0, 0);
-       else ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,(tga.pixsize + 0x7) & ~0x7, IB_rect, 0);
+       if (flags & IB_test) ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,tga.pixsize, 0);
+       else ibuf = IMB_allocImBuf(tga.xsize,tga.ysize,(tga.pixsize + 0x7) & ~0x7, IB_rect);
 
-       if (ibuf == 0) return(0);
+       if (ibuf == NULL) return(NULL);
        ibuf->ftype = TGA;
        ibuf->profile = IB_PROFILE_SRGB;
        mem = mem + 18 + tga.numid;
@@ -549,7 +549,7 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
        
        if (tga.mapsize){
                /* load color map */
-               mincol = tga.maporig;
+               /*mincol = tga.maporig;*/ /*UNUSED*/
                maxcol = tga.mapsize;
                cmap = MEM_callocN(sizeof(unsigned int)*maxcol, "targa cmap");
 
@@ -582,18 +582,20 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
                
                size = 0;
                for (col = maxcol - 1; col > 0; col >>= 1) size++;
-               ibuf->depth = size;
+               ibuf->planes = size;
 
                if (tga.mapbits != 32) {        /* set alpha bits  */
-                       cmap[0] &= BIG_LONG(0x00ffffff);
+                       cmap[0] &= BIG_LONG(0x00ffffffl);
                }
        }
        
        if (flags & IB_test) return (ibuf);
 
        if (tga.imgtyp != 1 && tga.imgtyp != 9) { /* happens sometimes (beuh) */
-               MEM_freeN(cmap); 
-               cmap= NULL;
+               if(cmap) {
+                       MEM_freeN(cmap); 
+                       cmap= NULL;
+               }
        }
 
        switch(tga.imgtyp){
@@ -641,7 +643,7 @@ struct ImBuf *imb_loadtarga(unsigned char *mem, int mem_size, int flags)
                        cp[3] += cp[3] >> 5;
                        cp[0] = 0xff;
                }
-               ibuf->depth = 24;
+               ibuf->planes = 24;
        }
        
        if (tga.imgtyp == 3 || tga.imgtyp == 11){