[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [26109] trunk/blender/source/blender/ blenkernel/intern/customdata.c: Added extra check & prints for multires data failing to write to

Brecht Van Lommel brecht at blender.org
Tue Jan 19 16:15:48 CET 2010


Revision: 26109
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=26109
Author:   blendix
Date:     2010-01-19 16:15:48 +0100 (Tue, 19 Jan 2010)

Log Message:
-----------
Added extra check & prints for multires data failing to write to
external file.

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

Modified: trunk/blender/source/blender/blenkernel/intern/customdata.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/customdata.c	2010-01-19 15:12:14 UTC (rev 26108)
+++ trunk/blender/source/blender/blenkernel/intern/customdata.c	2010-01-19 15:15:48 UTC (rev 26109)
@@ -2347,8 +2347,10 @@
 	customdata_external_filename(filename, id, external);
 
 	cdf= cdf_create(CDF_TYPE_MESH);
-	if(!cdf_read_open(cdf, filename))
+	if(!cdf_read_open(cdf, filename)) {
+		fprintf(stderr, "Failed to read %s layer from %s.\n", layerType_getName(layer->type), filename);
 		return;
+	}
 
 	for(i=0; i<data->totlayer; i++) {
 		layer = &data->layers[i];
@@ -2388,6 +2390,7 @@
 	if(!external)
 		return;
 
+	/* test if there is anything to write */
 	for(i=0; i<data->totlayer; i++) {
 		layer = &data->layers[i];
 		typeInfo = layerType_getInfo(layer->type);
@@ -2400,7 +2403,9 @@
 	if(!update)
 		return;
 
+	/* make sure data is read before we try to write */
 	CustomData_external_read(data, id, mask, totelem);
+	customdata_external_filename(filename, id, external);
 
 	cdf= cdf_create(CDF_TYPE_MESH);
 
@@ -2408,14 +2413,22 @@
 		layer = &data->layers[i];
 		typeInfo = layerType_getInfo(layer->type);
 
-		if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->filesize)
-			cdf_layer_add(cdf, layer->type, layer->name,
-				typeInfo->filesize(cdf, layer->data, totelem));
+		if((layer->flag & CD_FLAG_EXTERNAL) && typeInfo->filesize) {
+			if(layer->flag & CD_FLAG_IN_MEMORY) {
+				cdf_layer_add(cdf, layer->type, layer->name,
+					typeInfo->filesize(cdf, layer->data, totelem));
+			}
+			else {
+				cdf_free(cdf);
+				return; /* read failed for a layer! */
+			}
+		}
 	}
 
-	customdata_external_filename(filename, id, external);
-	if(!cdf_write_open(cdf, filename))
+	if(!cdf_write_open(cdf, filename)) {
+		fprintf(stderr, "Failed to open %s for writing.\n", filename);
 		return;
+	}
 
 	for(i=0; i<data->totlayer; i++) {
 		layer = &data->layers[i];
@@ -2434,6 +2447,7 @@
 	}
 
 	if(i != data->totlayer) {
+		fprintf(stderr, "Failed to write data to %s.\n", filename);
 		cdf_free(cdf);
 		return;
 	}





More information about the Bf-blender-cvs mailing list