- check paths are not empty strings before making blend file paths absolute or relative.
authorCampbell Barton <ideasman42@gmail.com>
Wed, 18 May 2011 06:48:52 +0000 (06:48 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Wed, 18 May 2011 06:48:52 +0000 (06:48 +0000)
- when saving blend file with 'Remap Relative' enabled, don't try make paths absolute if the internal filename is invalid.
- use case insensitive path comparison on windows when checking if path remapping is needed & for comparing next/prev dirs in the file selector.

source/blender/blenlib/intern/bpath.c
source/blender/blenloader/intern/writefile.c
source/blender/editors/space_file/filelist.c

index 640091b1ab34cf046a72655c16b994a27994f32b..63a8df3f73a1e9e0f3d65849e24808f564c6bd01 100644 (file)
@@ -699,7 +699,12 @@ void makeFilesRelative(Main *bmain, const char *basedir, ReportList *reports) {
        
        /* be sure there is low chance of the path being too short */
        char filepath_relative[(FILE_MAXDIR * 2) + FILE_MAXFILE];
-       
+
+       if(basedir[0] == '\0') {
+               printf("makeFilesRelative: basedir='', this is a bug\n");
+               return;
+       }
+
        BLI_bpathIterator_init(&bpi, bmain, basedir, 0);
        while (!BLI_bpathIterator_isDone(bpi)) {
                BLI_bpathIterator_getPath(bpi, filepath);
@@ -751,7 +756,10 @@ void makeFilesAbsolute(Main *bmain, const char *basedir, ReportList *reports)
        /* be sure there is low chance of the path being too short */
        char filepath_absolute[(FILE_MAXDIR * 2) + FILE_MAXFILE];
 
-       BLI_assert(basedir[0] != '\0');
+       if(basedir[0] == '\0') {
+               printf("makeFilesAbsolute: basedir='', this is a bug\n");
+               return;
+       }
 
        BLI_bpathIterator_init(&bpi, bmain, basedir, 0);
        while (!BLI_bpathIterator_isDone(bpi)) {
index fa88a44977d7c7a96963d257dce78cd24948996b..5285d7171484bf82ddabf8fe2abeae754e4bd932 100644 (file)
@@ -2547,10 +2547,18 @@ int BLO_write_file(Main *mainvar, const char *filepath, int write_flags, ReportL
                BLI_cleanup_dir(mainvar->name, dir1);
                BLI_cleanup_dir(mainvar->name, dir2);
 
-               if(strcmp(dir1, dir2)==0)
+               if(BLI_path_cmp(dir1, dir2)==0) {
                        write_flags &= ~G_FILE_RELATIVE_REMAP;
-               else
-                       makeFilesAbsolute(mainvar, G.main->name, NULL);
+               }
+               else {
+                       if(G.relbase_valid) {
+                               /* blend may not have been saved before. Tn this case
+                                * we should not have any relative paths, but if there
+                                * is somehow, an invalid or empty G.main->name it will
+                                * print an error, dont try make the absolute in this case. */
+                               makeFilesAbsolute(mainvar, G.main->name, NULL);
+                       }
+               }
        }
 
        BLI_make_file_string(G.main->name, userfilename, BLI_get_folder_create(BLENDER_USER_CONFIG, NULL), BLENDER_STARTUP_FILE);
index 155c19f076319f98b8b77ba0f6e459d7f23f3f9b..4daaea4513c671e60d4e1b237f35329ef464df1d 100644 (file)
@@ -433,7 +433,7 @@ void folderlist_pushdir(ListBase* folderlist, const char *dir)
 
        // check if already exists
        if(previous_folder && previous_folder->foldername){
-               if(! strcmp(previous_folder->foldername, dir)){
+               if(BLI_path_cmp(previous_folder->foldername, dir)==0){
                        return;
                }
        }