BLI_split_dirfile was being used in cases it should not have been,
authorCampbell Barton <ideasman42@gmail.com>
Sat, 26 Apr 2008 13:08:57 +0000 (13:08 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 26 Apr 2008 13:08:57 +0000 (13:08 +0000)
Added BLI_split_dirfile_basic, that only splits the path into directory and file. without checking the dir exists or creating it, without changing the original string that is passed to it.

source/blender/blenkernel/intern/pointcache.c
source/blender/blenkernel/intern/text.c
source/blender/blenlib/BLI_blenlib.h
source/blender/blenlib/intern/bpath.c
source/blender/blenlib/intern/util.c
source/blender/python/BPY_interface.c
source/blender/src/editscreen.c
source/blender/src/usiblender.c

index 8407dd2b7c3798169e710af58759f9c96f4eb664..fdaeedf7e385a0314928ad553c7de39b3b4047a7 100644 (file)
@@ -177,7 +177,7 @@ static int ptcache_path(PTCacheID *pid, char *filename)
 
                blendfilename= (lib)? lib->filename: G.sce;
 
-               BLI_split_dirfile(blendfilename, dir, file);
+               BLI_split_dirfile_basic(blendfilename, NULL, file);
                i = strlen(file);
                
                /* remove .blend */
index 23c3a1eacb602028c1000ae93852517a42a01d39..b6552be93a9859ea4f901e5eba0e73b9a0cf4e5b 100644 (file)
@@ -212,7 +212,6 @@ int reopen_text(Text *text)
        int i, llen, len;
        unsigned char *buffer;
        TextLine *tmp;
-       char sdir[FILE_MAXDIR];
        char sfile[FILE_MAXFILE];
        char str[FILE_MAXDIR+FILE_MAXFILE];
 
@@ -220,7 +219,7 @@ int reopen_text(Text *text)
        
        BLI_strncpy(str, text->name, FILE_MAXDIR+FILE_MAXFILE);
        BLI_convertstringcode(str, G.sce, G.scene->r.cfra);
-       BLI_split_dirfile(str, sdir, sfile);
+       BLI_split_dirfile_basic(str, NULL, sfile);
        
        fp= fopen(str, "r");
        if(fp==NULL) return 0;
@@ -312,14 +311,13 @@ Text *add_text(char *file)
        unsigned char *buffer;
        TextLine *tmp;
        Text *ta;
-       char sdir[FILE_MAXDIR];
        char sfile[FILE_MAXFILE];
        char str[FILE_MAXDIR+FILE_MAXFILE];
 
        BLI_strncpy(str, file, FILE_MAXDIR+FILE_MAXFILE);
        if (G.scene) /* can be NULL (bg mode) */
                BLI_convertstringcode(str, G.sce, G.scene->r.cfra);
-       BLI_split_dirfile(str, sdir, sfile);
+       BLI_split_dirfile_basic(str, NULL, sfile);
        
        fp= fopen(str, "r");
        if(fp==NULL) return NULL;
index 6c0e42fe42af4d35e2827b9f1d7b5d7f72e25cc7..33567d92c992d6c127de981479e9478776bd57c0 100644 (file)
@@ -96,6 +96,7 @@ void BLI_make_file_string(const char *relabase, char *string,  const char *dir,
 void BLI_make_exist(char *dir);
 void BLI_make_existing_file(char *name);
 void BLI_split_dirfile(char *string, char *dir, char *file);
+void BLI_split_dirfile_basic(const char *string, char *dir, char *file);
 void BLI_join_dirfile(char *string, const char *dir, const char *file);
 int BLI_testextensie(const char *str, const char *ext);
 void addlisttolist(ListBase *list1, ListBase *list2);
index 4e4b47b2c927c58762d673e85270746bf1bedb82..05e8b08f2d1205bfa411f6f4cd2598f0b69793c1 100644 (file)
@@ -259,22 +259,7 @@ void seq_setpath(struct BPathIterator *bpi, char *path) {
        
        if (SEQ_HAS_PATH(seq)) {
                if (seq->type == SEQ_IMAGE || seq->type == SEQ_MOVIE) {
-                       
-                       int lslash, i = 0;
-                       for (i=0; path[i]!='\0'; i++) {
-                               if (path[i]=='\\' || path[i]=='/')
-                                       lslash = i+1;
-                       }
-                       
-                       if (lslash) {
-                               BLI_strncpy( seq->strip->dir, path, lslash+1); /* +1 to include the slash and the last char */
-                       } else {
-                               path[0] = '\0';
-                       }
-                       
-                       if (seq->strip->stripdata) { /* should always be true! */
-                               BLI_strncpy( seq->strip->stripdata->name, path+lslash, sizeof(seq->strip->stripdata->name));
-                       }
+                       BLI_split_dirfile_basic(path, seq->strip->dir, seq->strip->stripdata->name);
                } else {
                        /* simple case */
                        BLI_strncpy(seq->strip->dir, path, sizeof(seq->strip->dir));
@@ -657,7 +642,7 @@ void findMissingFiles(char *str) {
        
        waitcursor( 1 );
        
-       BLI_split_dirfile(str, dirname, dummyname);
+       BLI_split_dirfile_basic(str, dirname, NULL);
        
        BLI_bpathIterator_init(&bpi);
        
@@ -678,7 +663,7 @@ void findMissingFiles(char *str) {
                                /* can the dir be opened? */
                                filesize = -1;
                                recur_depth = 0;
-                               BLI_split_dirfile(filepath, dummyname, filename); /* the file to find */
+                               BLI_split_dirfile_basic(filepath, NULL, filename); /* the file to find */
                                
                                findFileRecursive(filename_new, dirname, filename, &filesize, &recur_depth);
                                if (filesize == -1) { /* could not open dir */
index 623389a6ba2bb29efa78d40d7050949aa9ad8c0d..c79f1b56f1d58d1db849c23b2d49dd5389ca5e82 100644 (file)
@@ -1426,8 +1426,41 @@ int BLI_testextensie(const char *str, const char *ext)
        return (retval);
 }
 
+/*
+ * This is a simple version of BLI_split_dirfile that has the following advantages...
+ * 
+ * Converts "/foo/bar.txt" to "/foo/" and "bar.txt"
+ * - wont change 'string'
+ * - wont create any directories
+ * - dosnt use CWD, or deal with relative paths.
+ * - Only fill's in *dir and *file when they are non NULL
+ * */
+void BLI_split_dirfile_basic(const char *string, char *dir, char *file)
+{
+       int lslash=0, i = 0;
+       for (i=0; string[i]!='\0'; i++) {
+               if (string[i]=='\\' || string[i]=='/')
+                       lslash = i+1;
+       }
+       if (dir) {
+               if (lslash) {
+                       BLI_strncpy( dir, string, lslash+1); /* +1 to include the slash and the last char */
+               } else {
+                       dir[0] = '\0';
+               }
+       }
+       
+       if (file) {
+               strcpy( file, string+lslash);
+       }
+}
+
 
-/* warning, can modify 'string' */
+/* Warning,
+ * - May modify 'string' variable
+ * - May create the directory if it dosnt exist
+ * if this is not needed use BLI_split_dirfile_basic(...)
+ */
 void BLI_split_dirfile(char *string, char *dir, char *file)
 {
        int a;
index 9d1d0e0f7d6f22e2536ded08e6f93902753b9aff..5858b933562606f39d68e844f9f7af4d85b5cb0a 100644 (file)
@@ -796,7 +796,7 @@ int BPY_run_script(Script *script)
                
                if (bpyhome) {
                        BLI_strncpy(ftmp, script->scriptname, sizeof(ftmp));
-                       BLI_split_dirfile(ftmp, fpath, fname); /* get the filename only - fname */
+                       BLI_split_dirfile_basic(ftmp, NULL, fname); /* get the filename only - fname */
                        BLI_strncpy(fpath, bpy_gethome(1), sizeof(fpath));
                        BLI_add_slash(fpath);
                        strcat(fpath, fname);
index 58c3c6e1267698247bb2e406c98c3f638e5c564a..2df92af5bcab0591b9b219df4ca4dcf27e12bc41 100644 (file)
@@ -1589,7 +1589,7 @@ void mainwindow_set_filename_to_title(char *filename)
        char dir[FILE_MAXDIR];
        char file[FILE_MAXFILE];
 
-       BLI_split_dirfile(filename, dir, file);
+       BLI_split_dirfile_basic(filename, dir, file);
 
        if(BLI_streq(file, ".B.blend") || filename[0] =='\0')
                sprintf(str, "Blender");
index dfcfc0d57f72289ac34cbc8513b9dc868421e06c..8d6bf830dbf4d67911eb76f71ff47195ae7278c2 100644 (file)
@@ -786,7 +786,7 @@ static void readBlog(void)
        fsmenu_append_separator();
        
        /* add last saved file */
-       BLI_split_dirfile(G.sce, name, filename); /* G.sce shouldn't be relative */
+       BLI_split_dirfile_basic(G.sce, name, filename); /* G.sce shouldn't be relative */
        
        fsmenu_insert_entry(name, 0, 0);