commit e6b6fd9d106da9b8083f56782f68228ff56955fc
parent 1f5ae4bc004bc22b6c021536e6f28e44f97bbb63
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Wed, 23 Apr 2025 16:12:49 +0200
Update writer finalization
Finalization is assumed to always succeed. Partial finalization
corrupts the output, and it would be too hasardous to try returning to
the previous state. Finally, detecting a finalization error prevents
the writer from being released, adding a memory leak to the
finalization error, which could be impossible to resolve.
Diffstat:
1 file changed, 2 insertions(+), 4 deletions(-)
diff --git a/src/sstl_writer.c b/src/sstl_writer.c
@@ -367,9 +367,7 @@ finalize_binary(struct sstl_writer* writer)
* should not exist */
ASSERT(writer->ntris < 0 || writer->ntris_written <= writer->ntris);
if(writer->ntris >= 0 && writer->ntris_written < writer->ntris) {
- ERROR(writer, "%s: triangles are missing\n", str_cget(&writer->filename));
- res = RES_BAD_ARG;
- goto error;
+ WARN(writer, "%s: triangles are missing\n", str_cget(&writer->filename));
}
if(writer->ntris_offset >= 0) {
@@ -415,7 +413,7 @@ release_writer(ref_T* ref)
struct sstl_writer* writer = CONTAINER_OF(ref, struct sstl_writer, ref);
ASSERT(ref);
- if(writer->is_init) finalize(writer);
+ if(writer->is_init) CHK(finalize(writer) == RES_OK);
if(writer->is_fp_intern) CHK(fclose(writer->fp) == 0);
str_release(&writer->filename);
MEM_RM(writer->allocator, writer);