fix for some errors when saving blend files.
authorCampbell Barton <ideasman42@gmail.com>
Fri, 17 Sep 2010 08:53:39 +0000 (08:53 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Fri, 17 Sep 2010 08:53:39 +0000 (08:53 +0000)
- when comparing with libraries, relative paths were used which could easily fail.
- testing libraries was done before adding the .blend extension.

source/blender/windowmanager/WM_api.h
source/blender/windowmanager/intern/wm_files.c

index d04e08e..690d8ad 100644 (file)
@@ -80,7 +80,7 @@ void          WM_window_open_temp     (struct bContext *C, struct rcti *position, int type);
 int                    WM_read_homefile        (struct bContext *C, struct wmOperator *op);
 int                    WM_write_homefile       (struct bContext *C, struct wmOperator *op);
 void           WM_read_file            (struct bContext *C, char *name, struct ReportList *reports);
-int                    WM_write_file           (struct bContext *C, char *target, int fileflags, struct ReportList *reports, int copy);
+int                    WM_write_file           (struct bContext *C, const char *target, int fileflags, struct ReportList *reports, int copy);
 void           WM_read_autosavefile(struct bContext *C);
 void           WM_autosave_init        (struct wmWindowManager *wm);
 
index 038270a..f0b8577 100644 (file)
@@ -585,7 +585,7 @@ int write_crash_blend(void)
        }
 }
 
-int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports, int copy)
+int WM_write_file(bContext *C, const char *target, int fileflags, ReportList *reports, int copy)
 {
        Library *li;
        int len;
@@ -606,25 +606,20 @@ int WM_write_file(bContext *C, char *target, int fileflags, ReportList *reports,
                return -1;
        }
  
+       BLI_strncpy(di, target, FILE_MAX);
+       BLI_replace_extension(di, FILE_MAX, ".blend");
+       /* dont use 'target' anymore */
+       
        /* send the OnSave event */
        for (li= G.main->library.first; li; li= li->id.next) {
-               if (BLI_streq(li->name, target)) {
-                       BKE_report(reports, RPT_ERROR, "Cannot overwrite used library");
+               if (strcmp(li->filepath, di) == 0) {
+                       BKE_reportf(reports, RPT_ERROR, "Can't overwrite used library '%f'", di);
                        return -1;
                }
        }
-       
-       if (!BLO_has_bfile_extension(target) && (len+6 < FILE_MAX)) {
-               sprintf(di, "%s.blend", target);
-       } else {
-               strcpy(di, target);
-       }
 
-//     if (BLI_exists(di)) {
-// XXX         if(!saveover(di))
-// XXX                 return; 
-//     }
-       
+       /* operator now handles overwrite checks */
+
        if (G.fileflags & G_AUTOPACK) {
                packAll(G.main, reports);
        }