simplify memory cleanup & free

This commit is contained in:
Alexey Fedoseev
2024-04-13 18:46:33 +03:00
parent df900c7803
commit 3900eb492f

View File

@@ -1285,9 +1285,7 @@ CyberiadaDocument* cyberiada_new_sm_document(void)
int cyberiada_init_sm_document(CyberiadaDocument* doc)
{
if (doc) {
doc->format = NULL;
doc->meta_info = NULL;
doc->state_machines = NULL;
memset(doc, 0, sizeof(CyberiadaDocument));
}
return CYBERIADA_NO_ERROR;
}
@@ -4144,21 +4142,23 @@ int cyberiada_write_sm_document(CyberiadaDocument* doc, const char* filename, Cy
writer = xmlNewTextWriterFilename(filename, 0);
if (!writer) {
ERROR("cannot open xml writter for file %s\n", filename);
xmlCleanupParser();
return CYBERIADA_XML_ERROR;
}
do {
res = xmlTextWriterStartDocument(writer, NULL, GRAPHML_XML_ENCODING, NULL);
if (res < 0) {
ERROR("error writing xml start document: %d\n", res);
xmlFreeTextWriter(writer);
return CYBERIADA_XML_ERROR;
res = CYBERIADA_XML_ERROR;
break;
}
if (format == cybxmlYED) {
if (!doc->state_machines || doc->state_machines->next) {
ERROR("YED format supports only single SM documents\n");
xmlFreeTextWriter(writer);
return CYBERIADA_BAD_PARAMETER;
res = CYBERIADA_BAD_PARAMETER;
break;
}
res = cyberiada_write_sm_document_yed(doc, writer);
} else if (format == cybxmlCyberiada10) {
@@ -4166,18 +4166,25 @@ int cyberiada_write_sm_document(CyberiadaDocument* doc, const char* filename, Cy
}
if (res != CYBERIADA_NO_ERROR) {
ERROR("error writing xml %d\n", res);
xmlFreeTextWriter(writer);
return CYBERIADA_XML_ERROR;
res = CYBERIADA_XML_ERROR;
break;
}
res = xmlTextWriterEndDocument(writer);
if (res < 0) {
ERROR("error writing xml end document: %d\n", res);
xmlFreeTextWriter(writer);
return CYBERIADA_XML_ERROR;
res = CYBERIADA_XML_ERROR;
break;
}
res = CYBERIADA_NO_ERROR;
} while (0);
xmlFreeTextWriter(writer);
if (res != CYBERIADA_NO_ERROR) {
return res;
} else {
return CYBERIADA_NO_ERROR;
}
}