[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [19975] trunk/blender/source/blender/ blenkernel/intern/blender.c: 2.5+ file read provision for 2.49

Ton Roosendaal ton at blender.org
Wed Apr 29 17:25:16 CEST 2009


Revision: 19975
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=19975
Author:   ton
Date:     2009-04-29 17:25:13 +0200 (Wed, 29 Apr 2009)

Log Message:
-----------
2.5+ file read provision for 2.49

I've managed to find a basic fail-safe method to prevent using the read
data with an OK popup. I then still will read the file, but wait for user
confirmation to continue, or just free the database.

The pupup tells the user that at least animation data will be lost.

For background renders of 2.5+ things are more tricky, so here I've added
a default failure to read, returning 0, which will typically gracefully
quit blender.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/blender.c

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c	2009-04-29 12:43:09 UTC (rev 19974)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c	2009-04-29 15:25:13 UTC (rev 19975)
@@ -423,18 +423,31 @@
 	MEM_freeN(bfd);
 }
 
-static void handle_subversion_warning(Main *main)
+static int handle_subversion_warning(Main *main)
 {
 	if(main->minversionfile > BLENDER_VERSION ||
 	   (main->minversionfile == BLENDER_VERSION && 
 		 main->minsubversionfile > BLENDER_SUBVERSION)) {
 		
+		extern int okee(char *str, ...);	// XXX BAD LEVEL, DO NOT PORT TO 2.5!
 		char str[128];
-		
-		sprintf(str, "File written by newer Blender binary: %d.%d , expect loss of data!", main->minversionfile, main->minsubversionfile);
-		error(str);
+
+		if(main->minversionfile >= 250) {
+			sprintf(str, "You have opened a %d file, key information will get lost, like animation data. Continue?", main->minversionfile);
+			
+			if(G.background) {
+				printf("ERROR: cannot render %d file\n", main->versionfile);
+				return 0;
+			}
+			else
+				return okee(str);
+		}
+		else {
+			sprintf(str, "File written by newer Blender binary: %d.%d , expect loss of data!", main->minversionfile, main->minsubversionfile);
+			error(str);
+		}
 	}
-		
+	return 1;
 }
 
 /* returns:
@@ -458,9 +471,14 @@
 		if (type_r)
 			*((BlenFileType*)type_r)= bfd->type;
 		
-		setup_app_data(bfd, dir);
+		if(0==handle_subversion_warning(bfd->main)) {
+			free_main(bfd->main);
+			MEM_freeN(bfd);
+			bfd= NULL;
+		}
+		else
+			setup_app_data(bfd, dir); // frees BFD
 		
-		handle_subversion_warning(G.main);
 	} 
 	else {
 		error("Loading %s failed: %s", dir, BLO_bre_as_string(bre));





More information about the Bf-blender-cvs mailing list