From c92c3758a8e8c29b54d0ac40952fa661ecdf9ca0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 18 May 2011 06:48:52 +0000 Subject: - check paths are not empty strings before making blend file paths absolute or relative. - 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 | 12 ++++++++++-- source/blender/blenloader/intern/writefile.c | 14 +++++++++++--- source/blender/editors/space_file/filelist.c | 2 +- 3 files changed, 22 insertions(+), 6 deletions(-) (limited to 'source/blender') diff --git a/source/blender/blenlib/intern/bpath.c b/source/blender/blenlib/intern/bpath.c index 640091b1ab3..63a8df3f73a 100644 --- a/source/blender/blenlib/intern/bpath.c +++ b/source/blender/blenlib/intern/bpath.c @@ -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)) { diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index fa88a44977d..5285d717148 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -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); diff --git a/source/blender/editors/space_file/filelist.c b/source/blender/editors/space_file/filelist.c index 155c19f0763..4daaea4513c 100644 --- a/source/blender/editors/space_file/filelist.c +++ b/source/blender/editors/space_file/filelist.c @@ -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; } } -- cgit v1.2.3