[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [17935] branches/blender2.5/blender/source : 2.5: Change blenloader module to use the Report system for reporting errors.

Brecht Van Lommel brecht at blender.org
Fri Dec 19 01:50:21 CET 2008


Revision: 17935
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17935
Author:   blendix
Date:     2008-12-19 01:50:21 +0100 (Fri, 19 Dec 2008)

Log Message:
-----------
2.5: Change blenloader module to use the Report system for reporting errors.

Modified Paths:
--------------
    branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h
    branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
    branches/blender2.5/blender/source/blender/blenkernel/intern/report.c
    branches/blender2.5/blender/source/blender/blenloader/BLO_readfile.h
    branches/blender2.5/blender/source/blender/blenloader/BLO_writefile.h
    branches/blender2.5/blender/source/blender/blenloader/intern/readblenentry.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.c
    branches/blender2.5/blender/source/blender/blenloader/intern/readfile.h
    branches/blender2.5/blender/source/blender/blenloader/intern/writefile.c
    branches/blender2.5/blender/source/blender/makesdna/DNA_fileglobal_types.h
    branches/blender2.5/blender/source/blender/readblenfile/BLO_readblenfile.h
    branches/blender2.5/blender/source/blender/readblenfile/intern/BLO_readblenfile.c
    branches/blender2.5/blender/source/blender/windowmanager/intern/wm_files.c
    branches/blender2.5/blender/source/gameengine/BlenderRoutines/BL_KetsjiEmbedStart.cpp
    branches/blender2.5/blender/source/gameengine/GamePlayer/ActiveX/BlenderPlayerCtl.cpp
    branches/blender2.5/blender/source/gameengine/GamePlayer/common/GPC_Engine.cpp
    branches/blender2.5/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp
    branches/blender2.5/blender/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_engine_data_wraps.h
    branches/blender2.5/blender/source/gameengine/GamePlayer/netscape/src/ketsji/KXH_ketsji_hooks.cpp

Modified: branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h	2008-12-19 00:43:37 UTC (rev 17934)
+++ branches/blender2.5/blender/source/blender/blenkernel/BKE_report.h	2008-12-19 00:50:21 UTC (rev 17935)
@@ -48,7 +48,8 @@
 
 enum ReportListFlags {
 	RPT_PRINT = 1,
-	RPT_STORE = 2
+	RPT_STORE = 2,
+	RPT_HAS_ERROR = 4
 };
 
 typedef struct Report {
@@ -60,21 +61,25 @@
 
 typedef struct ReportList {
 	ListBase list;
-	ReportType level;
-	int flags;
+	ReportType printlevel;
+	ReportType storelevel;
+	int flag;
 } ReportList;
 
-void BKE_report_list_init(ReportList *reports, int flag);
-void BKE_report_list_clear(ReportList *reports);
+void BKE_reports_init(ReportList *reports, int flag);
+void BKE_reports_clear(ReportList *reports);
 
 void BKE_report(ReportList *reports, ReportType type, const char *message);
 void BKE_reportf(ReportList *reports, ReportType type, const char *format, ...);
 
-ReportType BKE_report_level(ReportList *reports);
-void BKE_report_level_set(ReportList *reports, ReportType level);
+ReportType BKE_report_print_level(ReportList *reports);
+void BKE_report_print_level_set(ReportList *reports, ReportType level);
 
-int BKE_report_has_error(ReportList *reports);
+ReportType BKE_report_store_level(ReportList *reports);
+void BKE_report_store_level_set(ReportList *reports, ReportType level);
 
+void BKE_reports_print(ReportList *reports, ReportType level);
+
 #ifdef __cplusplus
 }
 #endif

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2008-12-19 00:43:37 UTC (rev 17934)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/blender.c	2008-12-19 00:50:21 UTC (rev 17935)
@@ -77,6 +77,7 @@
 #include "BKE_main.h"
 #include "BKE_node.h"
 #include "BKE_object.h"
+#include "BKE_report.h"
 #include "BKE_scene.h"
 #include "BKE_screen.h"
 #include "BKE_sound.h"
@@ -435,11 +436,13 @@
 
 int BKE_read_file(bContext *C, char *dir, void *unused) 
 {
-	BlendReadError bre;
+	ReportList reports;
 	BlendFileData *bfd;
 	int retval= 1;
 	
-	bfd= BLO_read_from_file(dir, &bre);
+	BKE_reports_init(&reports, RPT_STORE);
+
+	bfd= BLO_read_from_file(dir, &reports);
 	if (bfd) {
 		if(bfd->user) retval= 2;
 		
@@ -450,38 +453,48 @@
 	else {
 // XXX		error("Loading %s failed: %s", dir, BLO_bre_as_string(bre));
 	}
+
+	BKE_reports_clear(&reports);
 		
 	return (bfd?retval:0);
 }
 
 int BKE_read_file_from_memory(bContext *C, char* filebuf, int filelength, void *unused)
 {
-	BlendReadError bre;
+	ReportList reports;
 	BlendFileData *bfd;
-			
-	bfd= BLO_read_from_memory(filebuf, filelength, &bre);
+
+	BKE_reports_init(&reports, RPT_STORE);
+
+	bfd= BLO_read_from_memory(filebuf, filelength, &reports);
 	if (bfd) {
 		setup_app_data(C, bfd, "<memory2>");
 	} else {
 // XXX		error("Loading failed: %s", BLO_bre_as_string(bre));
 	}
 		
+	BKE_reports_clear(&reports);
+
 	return (bfd?1:0);
 }
 
 /* memfile is the undo buffer */
 int BKE_read_file_from_memfile(bContext *C, MemFile *memfile)
 {
-	BlendReadError bre;
+	ReportList reports;
 	BlendFileData *bfd;
 	
-	bfd= BLO_read_from_memfile(G.sce, memfile, &bre);
+	BKE_reports_init(&reports, RPT_STORE);
+
+	bfd= BLO_read_from_memfile(G.sce, memfile, &reports);
 	if (bfd) {
 		setup_app_data(C, bfd, "<memory1>");
 	} else {
 // XXX		error("Loading failed: %s", BLO_bre_as_string(bre));
 	}
 		
+	BKE_reports_clear(&reports);
+
 	return (bfd?1:0);
 }
 
@@ -568,8 +581,9 @@
 
 	/* disk save version */
 	if(UNDO_DISK) {
+		ReportList reports;
 		static int counter= 0;
-		char *err, tstr[FILE_MAXDIR+FILE_MAXFILE];
+		char tstr[FILE_MAXDIR+FILE_MAXFILE];
 		char numstr[32];
 		
 		/* calculate current filename */
@@ -579,18 +593,22 @@
 		sprintf(numstr, "%d.blend", counter);
 		BLI_make_file_string("/", tstr, btempdir, numstr);
 	
-		success= BLO_write_file(C, tstr, G.fileflags, &err);
+		BKE_reports_init(&reports, 0);
+		success= BLO_write_file(C, tstr, G.fileflags, &reports);
+		BKE_reports_clear(&reports);
 		
 		strcpy(curundo->str, tstr);
 	}
 	else {
+		ReportList reports;
 		MemFile *prevfile=NULL;
-		char *err;
 		
 		if(curundo->prev) prevfile= &(curundo->prev->memfile);
 		
 		memused= MEM_get_memory_in_use();
-		success= BLO_write_file_mem(C, prevfile, &curundo->memfile, G.fileflags, &err);
+		BKE_reports_init(&reports, 0);
+		success= BLO_write_file_mem(C, prevfile, &curundo->memfile, G.fileflags, &reports);
+		BKE_reports_clear(&reports);
 		curundo->undosize= MEM_get_memory_in_use() - memused;
 	}
 

Modified: branches/blender2.5/blender/source/blender/blenkernel/intern/report.c
===================================================================
--- branches/blender2.5/blender/source/blender/blenkernel/intern/report.c	2008-12-19 00:43:37 UTC (rev 17934)
+++ branches/blender2.5/blender/source/blender/blenkernel/intern/report.c	2008-12-19 00:50:21 UTC (rev 17935)
@@ -57,15 +57,16 @@
 	}
 }
 
-void BKE_report_list_init(ReportList *reports, int flags)
+void BKE_reports_init(ReportList *reports, int flag)
 {
 	memset(reports, 0, sizeof(ReportList));
 
-	reports->level= RPT_WARNING;
-	reports->flags= flags;
+	reports->storelevel= RPT_WARNING;
+	reports->printlevel= RPT_WARNING;
+	reports->flag= flag;
 }
 
-void BKE_report_list_clear(ReportList *reports)
+void BKE_reports_clear(ReportList *reports)
 {
 	Report *report;
 
@@ -80,15 +81,18 @@
 	Report *report;
 	int len;
 
-	if(!reports || type < reports->level)
+	if(!reports)
 		return;
+	
+	if(type >= RPT_ERROR)
+		reports->flag |= RPT_HAS_ERROR;
 
-	if(reports->flags & RPT_PRINT) {
+	if((reports->flag & RPT_PRINT) && (type >= reports->printlevel)) {
 		printf("%s: %s\n", report_type_str(type), message);
 		fflush(stdout); /* this ensures the message is printed before a crash */
 	}
 
-	if(reports->flags & RPT_STORE) {
+	if((reports->flag & RPT_STORE) && (type >= reports->storelevel)) {
 		report= MEM_callocN(sizeof(Report), "Report");
 		report->type= type;
 		report->typestr= report_type_str(type);
@@ -108,17 +112,20 @@
 	char *message;
 	int len= 256, maxlen= 65536, retval;
 
-	if(!reports || type < reports->level)
+	if(!reports)
 		return;
 
-	if(reports->flags & RPT_PRINT) {
+	if(type >= RPT_ERROR)
+		reports->flag |= RPT_HAS_ERROR;
+
+	if((reports->flag & RPT_PRINT) && (type >= reports->printlevel)) {
 		va_start(args, format);
 		vprintf(format, args);
 		va_end(args);
 		fflush(stdout); /* this ensures the message is printed before a crash */
 	}
 
-	if(reports->flags & RPT_STORE) {
+	if((reports->flag & RPT_STORE) && (type >= reports->storelevel)) {
 		while(1) {
 			message= MEM_callocN(sizeof(char)*len+1, "ReportMessage");
 
@@ -160,27 +167,37 @@
 	}
 }
 
-ReportType BKE_report_level(ReportList *reports)
+ReportType BKE_report_print_level(ReportList *reports)
 {
-	return reports->level;
+	return reports->printlevel;
 }
 
-void BKE_report_level_set(ReportList *reports, ReportType level)
+void BKE_report_print_level_set(ReportList *reports, ReportType level)
 {
-	reports->level= level;
+	reports->printlevel= level;
 }
 
-int BKE_report_has_error(ReportList *reports)
+ReportType BKE_report_store_level(ReportList *reports)
 {
+	return reports->storelevel;
+}
+
+void BKE_report_store_level_set(ReportList *reports, ReportType level)
+{
+	reports->storelevel= level;
+}
+
+void BKE_reports_print(ReportList *reports, ReportType level)
+{
 	Report *report;
 
 	if(!reports)
-		return 0;
+		return;
+	
+	for(report=reports->list.first; report; report=report->next)
+		if(report->type >= level)
+			printf("%s: %s\n", report->typestr, report->message);
 
-	for(report=reports->list.first; report; report=report->next)
-		if(report->type >= RPT_ERROR)
-			return 1;
-	
-	return 0;
+	fflush(stdout);
 }
 

Modified: branches/blender2.5/blender/source/blender/blenloader/BLO_readfile.h
===================================================================
--- branches/blender2.5/blender/source/blender/blenloader/BLO_readfile.h	2008-12-19 00:43:37 UTC (rev 17934)
+++ branches/blender2.5/blender/source/blender/blenloader/BLO_readfile.h	2008-12-19 00:50:21 UTC (rev 17935)
@@ -34,16 +34,17 @@
 extern "C" {
 #endif
 
-struct SpaceFile;
-struct SpaceImaSel;
+struct bScreen;
+struct direntry;
 struct FileList;
 struct LinkNode;
 struct Main;
-struct UserDef;
-struct bScreen;
-struct Scene;
 struct MemFile;
-struct direntry;
+struct ReportList;
+struct Scene;
+struct SpaceFile;
+struct SpaceImaSel;
+struct UserDef;
 
 typedef struct BlendHandle	BlendHandle;
 
@@ -53,29 +54,6 @@
 	BLENFILETYPE_RUNTIME= 3
 } BlenFileType;
 
-typedef enum {
-	BRE_NONE, 
-	
-	BRE_UNABLE_TO_OPEN, 
-	BRE_UNABLE_TO_READ, 
-
-	BRE_OUT_OF_MEMORY, 
-	BRE_INTERNAL_ERROR, 
-
-	BRE_NOT_A_BLEND, 
-	BRE_NOT_A_PUBFILE,
-	BRE_INCOMPLETE, 
-	BRE_CORRUPT, 
-	
-	BRE_TOO_NEW, 
-	BRE_NOT_ALLOWED, 
-	
-	BRE_NO_SCREEN, 
-	BRE_NO_SCENE, 
-	
-	BRE_INVALID
-} BlendReadError;
-
 typedef struct BlendFileData {
 	struct Main*	main;
 	struct UserDef*	user;
@@ -93,48 +71,35 @@
 
 	/**
 	 * Open a blender file from a pathname. The function
-	 * returns NULL and sets the @a error_r argument if
+	 * returns NULL and sets a report in the list if
 	 * it cannot open the file.
 	 * 
 	 * @param file The path of the file to open.
-	 * @param error_r If the return value is NULL, an error
-	 * code indicating the cause of the failure.
+	 * @param reports If the return value is NULL, errors
+	 * indicating the cause of the failure.
 	 * @return The data of the file.
 	 */
-BlendFileData*	BLO_read_from_file		(char *file, BlendReadError *error_r);
+BlendFileData*	BLO_read_from_file		(char *file, struct ReportList *reports);
 
 	/**
 	 * Open a blender file from memory. The function
-	 * returns NULL and sets the @a error_r argument if
+	 * returns NULL and sets a report in the list if
 	 * it cannot open the file.
 	 * 
 	 * @param mem The file data.
 	 * @param memsize The length of @a mem.
-	 * @param error_r If the return value is NULL, an error
-	 * code indicating the cause of the failure.
+	 * @param reports If the return value is NULL, errors
+	 * indicating the cause of the failure.
 	 * @return The data of the file.
 	 */
-BlendFileData*	BLO_read_from_memory(void *mem, int memsize, BlendReadError *error_r);
+BlendFileData*	BLO_read_from_memory(void *mem, int memsize, struct ReportList *reports);
 
 /**
  * file name is current file, only for retrieving library data */
 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list