bugfix [#23405] PNG Images bigger then 2gig wont load with blender.
authorCampbell Barton <ideasman42@gmail.com>
Wed, 15 Sep 2010 06:43:36 +0000 (06:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 15 Sep 2010 06:43:36 +0000 (06:43 +0000)
all image formats should be able to load files bigger then 2gig (when its supported)

24 files changed:
extern/libopenjpeg/CMakeLists.txt
source/blender/blenkernel/intern/effect.c
source/blender/blenkernel/intern/exotic.c
source/blender/blenkernel/intern/fluidsim.c
source/blender/blenkernel/intern/particle_system.c
source/blender/blenlib/BLI_storage.h
source/blender/blenlib/intern/bpath.c
source/blender/blenlib/intern/storage.c
source/blender/blenloader/intern/readblenentry.c
source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/intern/IMB_filetype.h
source/blender/imbuf/intern/allocimbuf.c
source/blender/imbuf/intern/bmp.c
source/blender/imbuf/intern/filetype.c
source/blender/imbuf/intern/iris.c
source/blender/imbuf/intern/jp2.c
source/blender/imbuf/intern/jpeg.c
source/blender/imbuf/intern/module.c
source/blender/imbuf/intern/png.c
source/blender/imbuf/intern/radiance_hdr.c
source/blender/imbuf/intern/readimage.c
source/blender/imbuf/intern/targa.c
source/blender/imbuf/intern/tiff.c
source/blender/readblenfile/intern/BLO_readblenfile.c

index d7b25ed141282ffe02cfae6559b00a40be577266..8cdd804dfbaa02c2d0de260fa54984cf3cba586e 100644 (file)
@@ -24,9 +24,7 @@
 #
 # ***** END GPL LICENSE BLOCK *****
 
-SET(INC . src)
+SET(INC .)
 
-FILE(GLOB SRC *.c except t1_generate_luts.c)
-ADD_DEFINITIONS(-DWITH_OPENJPEG)
+FILE(GLOB SRC *.c)
 BLENDERLIB(extern_openjpeg "${SRC}" "${INC}")
-#, libtype=['international','player'], priority=[5, 210])
index 05fcabd371f843f9781f54e41087f5a51d69bcdb..0da5e0da2c4398df32462b6bd3b4769575bfd247 100644 (file)
@@ -29,6 +29,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <stddef.h>
 #include "BLI_storage.h" /* _LARGEFILE_SOURCE */
 
 #include <math.h>
index bd001649bf5287f4d7d1467ea2556b4ce79047fb..973c18531c4ef3555b8cd2a81513dd044dc1af5a 100644 (file)
  *
  * ***** END GPL LICENSE BLOCK *****/
 
+#include <stddef.h>
 #include "BLI_storage.h"
 
+#include <stdlib.h>
 #include <ctype.h> /* isdigit, isspace */
 #include <math.h>
 #include <stdio.h>
-#include <stdlib.h>
+
 #include <fcntl.h>
 #include <string.h>
 #include <errno.h>
index 04ce6c39694771d8800e873f31c241048ff86800..ef89d39864a9823be4e1933992059ce2cd36fb3f 100644 (file)
@@ -28,6 +28,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <stddef.h>
 #include "BLI_storage.h" /* _LARGEFILE_SOURCE */
 
 #include "MEM_guardedalloc.h"
index 0d14c3cb9f69db22624325355bc6201eabe06743..598dd3c03fec7dbb9ca5d6651de036f9a11bfb79 100644 (file)
@@ -29,6 +29,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <stddef.h>
 #include "BLI_storage.h" /* _LARGEFILE_SOURCE */
 
 #include <stdlib.h>
index 0d9db40fc97574047c8c6519a1971389a5ef76e1..83537e4f3c425ae5187dd8fc8ed4234b4be642f9 100644 (file)
 
 struct direntry;
 
+
 void   BLI_adddirstrings(void);
 void   BLI_builddir(char *dirname, char *relname);
 int    BLI_compare(struct direntry *entry1, struct direntry *entry2);
 
-int    BLI_filesize(int file);
-int    BLI_filepathsize(const char *path);
+size_t BLI_filesize(int file);
+size_t BLI_filepathsize(const char *path);
 double BLI_diskfree(char *dir);
 char *BLI_getwdN(char *dir);
 
index d1a8de141812f23eeda158b055b791e118c6e8ee..cf7eb8734096c79773f69de40ec8fec456461331 100644 (file)
@@ -633,7 +633,7 @@ static int findFileRecursive(char *filename_new, const char *dirname, const char
                if (S_ISREG(status.st_mode)) { /* is file */
                        if (strncmp(filename, de->d_name, FILE_MAX)==0) { /* name matches */
                                /* open the file to read its size */
-                               size = BLI_filepathsize(path);
+                               size = status.st_size;
                                if ((size > 0) && (size > *filesize)) { /* find the biggest file */
                                        *filesize = size;
                                        BLI_strncpy(filename_new, path, FILE_MAX);
index 80310b1ef8a9ae1cbfe5975b0d231a912a4b894a..9c31557619b23cccddd0f951de25b0dcb5cadd68 100644 (file)
@@ -421,7 +421,7 @@ unsigned int BLI_getdir(char *dirname,  struct direntry **filelist)
 }
 
 
-int BLI_filesize(int file)
+size_t BLI_filesize(int file)
 {
        struct stat buf;
 
@@ -430,11 +430,11 @@ int BLI_filesize(int file)
        return (buf.st_size);
 }
 
-int BLI_filepathsize(const char *path)
+size_t BLI_filepathsize(const char *path)
 {
        int size, file = open(path, O_BINARY|O_RDONLY);
        
-       if (file < 0)
+       if (file == -1)
                return -1;
        
        size = BLI_filesize(file);
index da441214b37dc1487f0444700fd5e837414f0bfd..b637d538b917aac0b908c5cb4cd9aeab886d2210 100644 (file)
@@ -28,6 +28,7 @@
  * .blend file reading entry point
  */
 
+#include <stddef.h>
 #include "BLI_storage.h" /* _LARGEFILE_SOURCE */
 
 #include <stdlib.h>
index 07b99dddfa57d32872bca0a475159bf070162da4..c39c5d31f804c4853a91159304c367f17e936406 100644 (file)
@@ -93,7 +93,7 @@ void IMB_exit(void);
  *
  * @attention Defined in readimage.c
  */
-struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags);
+struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags);
 
 /**
  *
index 9fd4108bee978f92ec058c4f8b8604d63df6dac6..8529c72c7ae56aa050dc814707e0ad2d66a996a2 100644 (file)
@@ -37,9 +37,9 @@ typedef struct ImFileType {
 
        int (*is_a)(unsigned char *buf);
        int (*ftype)(struct ImFileType *type, struct ImBuf *ibuf);
-       struct ImBuf *(*load)(unsigned char *mem, int size, int flags);
+       struct ImBuf *(*load)(unsigned char *mem, size_t size, int flags);
        int (*save)(struct ImBuf *ibuf, char *name, int flags);
-       void (*load_tile)(struct ImBuf *ibuf, unsigned char *mem, int size, int tx, int ty, unsigned int *rect);
+       void (*load_tile)(struct ImBuf *ibuf, unsigned char *mem, size_t size, int tx, int ty, unsigned int *rect);
 
        int flag;
        int filetype;
@@ -60,59 +60,59 @@ void imb_tile_cache_tile_free(struct ImBuf *ibuf, int tx, int ty);
 
 /* png */
 int imb_is_a_png(unsigned char *buf);
-struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags);
 int imb_savepng(struct ImBuf *ibuf, char *name, int flags);
 
 /* targa */
 int imb_is_a_targa(unsigned char *buf);
-struct ImBuf *imb_loadtarga(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadtarga(unsigned char *mem, size_t size, int flags);
 int imb_savetarga(struct ImBuf * ibuf, char *name, int flags);
 
 /* iris */
 int imb_is_a_iris(unsigned char *mem);
-struct ImBuf *imb_loadiris(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags);
 int imb_saveiris(struct ImBuf * ibuf, char *name, int flags);
 
 /* jp2 */
 int imb_is_a_jp2(unsigned char *buf);
-struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags);
 int imb_savejp2(struct ImBuf *ibuf, char *name, int flags);
 
 /* jpeg */
 int imb_is_a_jpeg(unsigned char *mem);
 int imb_savejpeg(struct ImBuf * ibuf, char * name, int flags);
 struct ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags);
-struct ImBuf * imb_load_jpeg (unsigned char * buffer, int size, int flags);
+struct ImBuf * imb_load_jpeg (unsigned char * buffer, size_t size, int flags);
 
 /* bmp */
 int imb_is_a_bmp(unsigned char *buf);
-struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags);
 int imb_savebmp(struct ImBuf *ibuf, char *name, int flags);
 
 /* cocoa */
-struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, size_t size, int flags);
 short imb_cocoaSaveImage(struct ImBuf *ibuf, char *name, int flags);
 
 /* cineon */
 int imb_savecineon(struct ImBuf *buf, char *myfil, int flags);
-struct ImBuf *imb_loadcineon(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadcineon(unsigned char *mem, size_t size, int flags);
 int imb_is_cineon(unsigned char *buf);
 
 /* dpx */
 int imb_save_dpx(struct ImBuf *buf, char *myfile, int flags);
-struct ImBuf *imb_loaddpx(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loaddpx(unsigned char *mem, size_t size, int flags);
 int imb_is_dpx(unsigned char *buf);
 
 /* hdr */
 int imb_is_a_hdr(unsigned char *buf);
-struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags);
+struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags);
 int imb_savehdr(struct ImBuf * ibuf, char *name, int flags);
 
 /* tiff */
 void imb_inittiff(void);
 int imb_is_a_tiff(unsigned char *buf);
-struct ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags);
-void imb_loadtiletiff(struct ImBuf *ibuf, unsigned char *mem, int size,
+struct ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags);
+void imb_loadtiletiff(struct ImBuf *ibuf, unsigned char *mem, size_t size,
        int tx, int ty, unsigned int *rect);
 int imb_savetiff(struct ImBuf *ibuf, char *name, int flags);
 void *libtiff_findsymbol(char *name);
index 3f440c0bf6f779e42843003b6f0be5d231dbae02..02fc98f2d63bebdfc3872d70bf61c4d373a40c2c 100644 (file)
@@ -32,6 +32,8 @@
 /* It's become a bit messy... Basically, only the IMB_ prefixed files
  * should remain. */
 
+#include <stddef.h>
+
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 
index bdcf60090c3bbb7f3436fae679c5464a695a38c1..450b09c923b50d8b981486347558d2dee7984f73 100644 (file)
@@ -101,7 +101,7 @@ int imb_is_a_bmp(unsigned char *buf) {
        return checkbmp(buf);
 }
 
-struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_bmp_decode(unsigned char *mem, size_t size, int flags)
 {
        struct ImBuf *ibuf = 0;
        BMPINFOHEADER bmi;
index db2eef759dc80188200e735c1b33c1f798177e01..fb5d2f2e4d7a2f103650eac3be0c201c26c6ec65 100644 (file)
@@ -22,6 +22,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <stddef.h>
 #include "IMB_imbuf.h"
 #include "IMB_imbuf_types.h"
 #include "IMB_filetype.h"
index c676c401ccde631d0065c5f83bd5fadef14a1b55..883de82374517e082d7f1e65ecee554830c641c7 100644 (file)
@@ -244,7 +244,7 @@ int imb_is_a_iris(unsigned char *mem)
  *
  */
 
-struct ImBuf *imb_loadiris(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadiris(unsigned char *mem, size_t size, int flags)
 {
        unsigned int *base, *lptr = NULL;
        float *fbase, *fptr = NULL;
index 558eaedf8b2bd8db88767c5fc2b5c85107d58cae..a70c154014ae0938abb7bd3fbea3028580247df1 100644 (file)
@@ -90,7 +90,7 @@ void info_callback(const char *msg, void *client_data) {
 
 
 
-struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_jp2_decode(unsigned char *mem, size_t size, int flags)
 {
        struct ImBuf *ibuf = 0;
        int use_float = 0; /* for precision higher then 8 use float */
index 2bae722822099e0e81ff67d16f7deaee89fd3790..855c0bf343362cec2af09b81d20793518793c0f9 100644 (file)
@@ -58,7 +58,7 @@ static void init_source(j_decompress_ptr cinfo);
 static boolean fill_input_buffer(j_decompress_ptr cinfo);
 static void skip_input_data(j_decompress_ptr cinfo, long num_bytes);
 static void term_source(j_decompress_ptr cinfo);
-static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, int size);
+static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t size);
 static boolean handle_app1 (j_decompress_ptr cinfo);
 static ImBuf * ibJpegImageFromCinfo(struct jpeg_decompress_struct * cinfo, int flags);
 
@@ -167,7 +167,7 @@ static void term_source(j_decompress_ptr cinfo)
 {
 }
 
-static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, int size)
+static void memory_source(j_decompress_ptr cinfo, unsigned char *buffer, size_t size)
 {
        my_src_ptr src;
 
@@ -459,7 +459,7 @@ ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags)
        return(ibuf);
 }
 
-ImBuf * imb_load_jpeg (unsigned char * buffer, int size, int flags)
+ImBuf * imb_load_jpeg (unsigned char * buffer, size_t size, int flags)
 {
        struct jpeg_decompress_struct _cinfo, *cinfo = &_cinfo;
        struct my_error_mgr jerr;
index 5438066d16435b0e72d7a01dda3eba16c736c12c..f291c0de776dda2d298b17aa252f4f9c9ae09793 100644 (file)
@@ -22,6 +22,7 @@
  * ***** END GPL LICENSE BLOCK *****
  */
 
+#include <stddef.h>
 #include "IMB_imbuf.h"
 #include "IMB_filetype.h"
 
index 6344b227174c10bd807881c1cd26d868fba76ff6..6b21f20b3fb6ddcd8a3824da3a79a0b36fa23b1e 100644 (file)
@@ -286,7 +286,7 @@ int imb_savepng(struct ImBuf *ibuf, char *name, int flags)
        return(1);
 }
 
-struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadpng(unsigned char *mem, size_t size, int flags)
 {
        struct ImBuf *ibuf = 0;
        png_structp png_ptr;
@@ -317,7 +317,7 @@ struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags)
                return 0;
        }
 
-       ps.size = size;
+       ps.size = size; /* XXX, 4gig limit! */
        ps.data = mem;
        ps.seek = 0;
 
index c5122ebe46c2d3d20104a1a47212dfbce63ea87f..4064246c866e0794a34c17dc2e849e7a0085bd84 100644 (file)
@@ -173,7 +173,7 @@ int imb_is_a_hdr(unsigned char *buf)
        return 0;
 }
 
-struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags)
+struct ImBuf *imb_loadhdr(unsigned char *mem, size_t size, int flags)
 {
        struct ImBuf* ibuf;
        RGBE* sline;
index 3f4e177c78ba61436364b6db3390e15a050a0eaa..a56007f15f07c13c7e37dff9b73b2a3bbdca80cb 100644 (file)
@@ -46,7 +46,7 @@
 #include "IMB_imbuf.h"
 #include "IMB_filetype.h"
 
-ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags)
+ImBuf *IMB_ibImageFromMemory(unsigned char *mem, size_t size, int flags)
 {
        ImBuf *ibuf;
        ImFileType *type;
@@ -79,7 +79,7 @@ ImBuf *IMB_loadifffile(int file, int flags)
 {
        ImBuf *ibuf;
        unsigned char *mem;
-       int size;
+       size_t size;
 
        if(file == -1) return 0;
 
@@ -166,7 +166,7 @@ static void imb_loadtilefile(ImBuf *ibuf, int file, int tx, int ty, unsigned int
 {
        ImFileType *type;
        unsigned char *mem;
-       int size;
+       size_t size;
 
        if(file == -1) return;
 
index b5434b85b5a8b319af0071c8d1cecafbd797e391..ada1f448bfc711427d5ea6f51e8d60e2a279c0dc 100644 (file)
@@ -359,7 +359,7 @@ 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;
@@ -470,7 +470,7 @@ 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;
@@ -527,7 +527,7 @@ 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;
index 6b94583f17d98304ad227a373b9e59a72c514fe6..5b77c6c7c365e0337da1af60a52b94a01820f271 100644 (file)
@@ -262,7 +262,7 @@ static toff_t imb_tiff_SizeProc(thandle_t handle)
        return (toff_t)(mfile->size);
 }
 
-static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, int size)
+static TIFF *imb_tiff_client_open(ImbTIFFMemFile *memFile, unsigned char *mem, size_t size)
 {
        /* open the TIFF client layer interface to the in-memory file */
        memFile->mem = mem;
@@ -464,7 +464,7 @@ void imb_inittiff(void)
  *
  * @return: A newly allocated ImBuf structure if successful, otherwise NULL.
  */
-ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags)
+ImBuf *imb_loadtiff(unsigned char *mem, size_t size, int flags)
 {
        TIFF *image = NULL;
        ImBuf *ibuf = NULL, *hbuf;
@@ -573,7 +573,7 @@ ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags)
        return ibuf;
 }
 
-void imb_loadtiletiff(ImBuf *ibuf, unsigned char *mem, int size, int tx, int ty, unsigned int *rect)
+void imb_loadtiletiff(ImBuf *ibuf, unsigned char *mem, size_t size, int tx, int ty, unsigned int *rect)
 {
        TIFF *image = NULL;
        uint32 width, height;
index 7c876c96a86e3544f573109ef26e8794fc0980ea..dfcdaf756f78d11c3ec2836d9882e34c709aa352 100644 (file)
@@ -132,7 +132,8 @@ blo_read_runtime(
        ReportList *reports)
 {
        BlendFileData *bfd= NULL;
-       int fd, actualsize, datastart;
+       size_t actualsize;
+       int fd, datastart;
        char buf[8];
 
        fd= open(path, O_BINARY|O_RDONLY, 0);