Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2008-04-29 01:29:15 +0400
committerCampbell Barton <ideasman42@gmail.com>2008-04-29 01:29:15 +0400
commit96cec2e99bc4d09f368b3737b8e2161ff5345fa9 (patch)
tree495db3116fefeba54e20fefdda4f4fb89619fb04 /source/blender/blenlib
parent082b706e8d13c6c086b1632242adda4e4e2a4c19 (diff)
if a blend file was opened with /./ in the path (for example "some/./path/to/./model.blend" ) the relative paths from created from that location would be incorrect. This results in linked library paths being loaded incorrectly.
Diffstat (limited to 'source/blender/blenlib')
-rw-r--r--source/blender/blenlib/intern/util.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/source/blender/blenlib/intern/util.c b/source/blender/blenlib/intern/util.c
index c79f1b56f1d..cdac1ba7061 100644
--- a/source/blender/blenlib/intern/util.c
+++ b/source/blender/blenlib/intern/util.c
@@ -858,6 +858,8 @@ int BLI_strcaseeq(char *a, char *b) {
* take the dir name, make it absolute, and clean it up, replacing
* excess file entry stuff (like /tmp/../tmp/../)
* note that dir isn't protected for max string names...
+ *
+ * If relbase is NULL then its ignored
*/
void BLI_cleanup_dir(const char *relabase, char *dir)
@@ -874,9 +876,9 @@ void BLI_cleanup_file(const char *relabase, char *dir)
{
short a;
char *start, *eind;
-
- BLI_convertstringcode(dir, relabase, 0);
-
+ if (relabase) {
+ BLI_convertstringcode(dir, relabase, 0);
+ }
#ifdef WIN32
if(dir[0]=='.') { /* happens for example in FILE_MAIN */
get_default_root(dir);
@@ -954,7 +956,7 @@ void BLI_makestringcode(const char *relfile, char *file)
char * lslash;
char temp[FILE_MAXDIR+FILE_MAXFILE];
char res[FILE_MAXDIR+FILE_MAXFILE];
-
+
/* if file is already relative, bail out */
if(file[0]=='/' && file[1]=='/') return;
@@ -986,7 +988,11 @@ void BLI_makestringcode(const char *relfile, char *file)
BLI_char_switch(temp, '\\', '/');
BLI_char_switch(file, '\\', '/');
-
+
+ /* remove /./ which confuse the following slash counting... */
+ BLI_cleanup_file(NULL, file);
+ BLI_cleanup_file(NULL, temp);
+
/* the last slash in the file indicates where the path part ends */
lslash = BLI_last_slash(temp);
@@ -1065,6 +1071,8 @@ int BLI_convertstringcode(char *path, const char *basepath, int framenum)
BLI_strncpy(base, basepath, FILE_MAX);
+ BLI_cleanup_file(NULL, base);
+
/* push slashes into unix mode - strings entering this part are
potentially messed up: having both back- and forward slashes.
Here we push into one conform direction, and at the end we
@@ -1147,7 +1155,7 @@ int BLI_convertstringcode(char *path, const char *basepath, int framenum)
*/
BLI_char_switch(path+2, '/', '\\');
#endif
-
+
return wasrelative;
}