bugfix [#23674] Fix for texture path corruptions (bug 23337)
authorCampbell Barton <ideasman42@gmail.com>
Mon, 6 Sep 2010 12:54:54 +0000 (12:54 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Mon, 6 Sep 2010 12:54:54 +0000 (12:54 +0000)
from Mathew Burrack (mburrack)
...also applied a fix so this flag wont be written but including this patch for older startup.blend's.

--- from the tracker
I've created a patch for the texture path corruption bug, 23337. Basically, G_FILE_RELATIVE_REMAP was improperly getting
saved out to the startup.blend file, causing issues when the autosave timer went off. The proper fix is to mask out
that flag so it doesn't get written out to .blend files itself, but since that doesn't fix any pre-existing startup.blend
files, I just mask it out when startup.blend is read in instead.

I've tested it locally and so far, it seems to fix all the issues I've had with texture image paths getting corrupted.
I haven't figured out how to properly test the remap-on-save option in the save as dialog, though, so I don't know if
I accidentally broke that or not (although I don't see how I could have).

source/blender/blenloader/intern/writefile.c
source/blender/windowmanager/intern/wm_files.c

index f9f66ed8504cddec82d98b0d0d117a1379bb2430..dc5a0dbeafa5a69b6375295a89555dddbf0487d6 100644 (file)
@@ -273,7 +273,7 @@ static void mywrite( WriteData *wd, void *adr, int len)
  * @param write_flags Write parameters
  * @warning Talks to other functions with global parameters
  */
-static WriteData *bgnwrite(int file, MemFile *compare, MemFile *current, int write_flags)
+static WriteData *bgnwrite(int file, MemFile *compare, MemFile *current)
 {
        WriteData *wd= writedata_new(file);
 
@@ -2349,7 +2349,7 @@ static void write_global(WriteData *wd, int fileflags, Main *mainvar)
        fg.curscene= screen->scene;
        fg.displaymode= G.displaymode;
        fg.winpos= G.winpos;
-       fg.fileflags= (fileflags & ~G_FILE_NO_UI);      // prevent to save this, is not good convention, and feature with concerns...
+       fg.fileflags= (fileflags & ~(G_FILE_NO_UI|G_FILE_RELATIVE_REMAP));      // prevent to save this, is not good convention, and feature with concerns...
        fg.globalf= G.f;
        BLI_strncpy(fg.filename, mainvar->name, sizeof(fg.filename));
 
@@ -2384,7 +2384,7 @@ static int write_file_handle(Main *mainvar, int handle, MemFile *compare, MemFil
 
        blo_split_main(&mainlist, mainvar);
 
-       wd= bgnwrite(handle, compare, current, write_flags);
+       wd= bgnwrite(handle, compare, current);
        
        sprintf(buf, "BLENDER%c%c%.3d", (sizeof(void*)==8)?'-':'_', (ENDIAN_ORDER==B_ENDIAN)?'V':'v', BLENDER_VERSION);
        mywrite(wd, buf, 12);
index b24e0333baccd679c14906e5edba0389a911bae4..1264f496103e7a01876c65666055158522c7a042 100644 (file)
@@ -374,6 +374,10 @@ int WM_read_homefile(bContext *C, wmOperator *op)
                if (wmbase.first == NULL) wm_clear_default_size(C);
        }
        
+       /* prevent buggy files that had G_FILE_RELATIVE_REMAP written out by mistake. Screws up autosaves otherwise
+        * can remove this eventually, only in a 2.53 and older, now its not written */
+       G.fileflags &= ~G_FILE_RELATIVE_REMAP;
+
        /* match the read WM with current WM */
        wm_window_match_do(C, &wmbase); 
        WM_check(C); /* opens window(s), checks keymaps */