Fix for two proxy + undo related crashes:
[blender.git] / source / blender / blenloader / intern / readblenentry.c
index dfa06ebdeb8465b7289a7afadcd3f18c351d9833..e4bc6e3abb208b8e07ce0a82dee5bbbccc0ebaac 100644 (file)
@@ -1,15 +1,12 @@
 /**
  * $Id$
  *
- * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
+ * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU General Public License
  * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. The Blender
- * Foundation also sells licenses for use in proprietary software under
- * the Blender License.  See http://www.blender.org/BL/ for information
- * about this.
+ * of the License, or (at your option) any later version.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -27,7 +24,7 @@
  *
  * Contributor(s): none yet.
  *
- * ***** END GPL/BL DUAL LICENSE BLOCK *****
+ * ***** END GPL LICENSE BLOCK *****
  * .blend file reading entry point
  */
 
@@ -66,6 +63,8 @@
 
 #include "BLO_readblenfile.h"
 
+#include "BLO_sys_types.h" // needed for intptr_t
+
        /**
         * IDType stuff, I plan to move this
         * out into its own file + prefix, and
@@ -196,7 +195,7 @@ void BLO_blendhandle_print_sizes(BlendHandle *bh, void *fp)
                        buf[2]= buf[2]?buf[2]:' ';
                        buf[3]= buf[3]?buf[3]:' ';
                        
-                       fprintf(fp, "['%.4s', '%s', %d, %ld ], \n", buf, name, bhead->nr, (long)bhead->len+sizeof(BHead));
+                       fprintf(fp, "['%.4s', '%s', %d, %ld ], \n", buf, name, bhead->nr, (intptr_t)bhead->len+sizeof(BHead));
                }
        }
        fprintf(fp, "]\n");
@@ -233,7 +232,7 @@ LinkNode *BLO_blendhandle_get_previews(BlendHandle *bh, int ofblocktype)
        for (bhead= blo_firstbhead(fd); bhead; bhead= blo_nextbhead(fd, bhead)) {
                if (bhead->code==ofblocktype) {
                        ID *id= (ID*) (bhead+1);
-                       if (GS(id->name) == ID_MA) {
+                       if ( (GS(id->name) == ID_MA) || (GS(id->name) == ID_TE)) {
                                new_prv = MEM_callocN(sizeof(PreviewImage), "newpreview");
                                BLI_linklist_prepend(&previews, new_prv);
                                looking = 1;
@@ -365,6 +364,9 @@ BlendFileData *BLO_read_from_memfile(const char *filename, MemFile *memfile, Ble
        if (fd) {
                strcpy(fd->filename, filename);
                
+               /* clear ob->proxy_from pointers in G.main */
+               blo_clear_proxy_pointers_from_lib(fd);
+
                /* separate libraries from G.main */
                blo_split_main(&mainlist, G.main);
                /* add the library pointers in oldmap lookup */