From 3b19b6c33fa5a68309efe99c49fca0df60db02aa Mon Sep 17 00:00:00 2001 From: Ton Roosendaal Date: Wed, 29 Apr 2009 15:25:13 +0000 Subject: [PATCH] 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. --- source/blender/blenkernel/intern/blender.c | 32 +++++++++++++++++----- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 5dcccc56d06..906971f8bae 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -423,18 +423,31 @@ static void setup_app_data(BlendFileData *bfd, char *filename) 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 @@ int BKE_read_file(char *dir, void *type_r) 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));