From 7e9d9460c9857683950cab8bc492c71e4469ddb5 Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Tue, 19 Jan 2010 15:15:48 +0000 Subject: Added extra check & prints for multires data failing to write to external file. --- source/blender/blenkernel/intern/customdata.c | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'source/blender/blenkernel/intern/customdata.c') diff --git a/source/blender/blenkernel/intern/customdata.c b/source/blender/blenkernel/intern/customdata.c index 78e673b9e79..fb31ed3d610 100644 --- a/source/blender/blenkernel/intern/customdata.c +++ b/source/blender/blenkernel/intern/customdata.c @@ -2347,8 +2347,10 @@ void CustomData_external_read(CustomData *data, ID *id, CustomDataMask mask, int 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; itotlayer; i++) { layer = &data->layers[i]; @@ -2388,6 +2390,7 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in if(!external) return; + /* test if there is anything to write */ for(i=0; itotlayer; i++) { layer = &data->layers[i]; typeInfo = layerType_getInfo(layer->type); @@ -2400,7 +2403,9 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in 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 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in 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; itotlayer; i++) { layer = &data->layers[i]; @@ -2434,6 +2447,7 @@ void CustomData_external_write(CustomData *data, ID *id, CustomDataMask mask, in } if(i != data->totlayer) { + fprintf(stderr, "Failed to write data to %s.\n", filename); cdf_free(cdf); return; } -- cgit v1.2.3