Skip to content

Commit

Permalink
Use xmlFree() instead of free() in ModelDescription.c (#520)
Browse files Browse the repository at this point in the history
  • Loading branch information
t-sommer authored Jun 24, 2024
1 parent 816be18 commit ff49ecc
Showing 1 changed file with 31 additions and 31 deletions.
62 changes: 31 additions & 31 deletions fmusim/FMIModelDescription.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,21 +34,21 @@
static bool getBooleanAttribute(const xmlNodePtr node, const char* name) {
char* literal = (char*)xmlGetProp(node, (xmlChar*)name);
bool value = literal && (strcmp(literal, "true") == 0 || strcmp(literal, "1") == 0);
free(literal);
xmlFree(literal);
return value;
}

static uint32_t getUInt32Attribute(const xmlNodePtr node, const char* name) {
char* literal = (char*)xmlGetProp(node, (xmlChar*)name);
uint32_t value = strtoul(literal, NULL, 0);
free(literal);
xmlFree(literal);
return value;
}

static FMIVariableNamingConvention getVariableNamingConvention(const xmlNodePtr node) {
const char* value = (char*)xmlGetProp(node, (xmlChar*)"variableNamingConvention");
FMIVariableNamingConvention variableNamingConvention = (value && !strcmp(value, "structured")) ? FMIStructured : FMIFlat;
free((void*)value);
xmlFree((void*)value);
return variableNamingConvention;
}

Expand Down Expand Up @@ -160,7 +160,7 @@ static FMIModelDescription* readModelDescriptionFMI1(xmlNodePtr root) {
variable->variability = FMIContinuous;
}

free((void*)variability);
xmlFree((void*)variability);

if (!strcmp(typeName, "Real")) {
const char* variability = (char*)xmlGetProp(variableNode, (xmlChar*)"variability");
Expand All @@ -169,7 +169,7 @@ static FMIModelDescription* readModelDescriptionFMI1(xmlNodePtr root) {
} else {
variable->type = FMIRealType;
}
free((void*)variability);
xmlFree((void*)variability);
} else if (!strcmp(typeName, "Integer") || !strcmp(typeName, "Enumeration")) {
variable->type = FMIIntegerType;
} else if (!strcmp(typeName, "Boolean")) {
Expand Down Expand Up @@ -231,7 +231,7 @@ static void readUnknownsFMI2(xmlXPathContextPtr xpathCtx, FMIModelDescription* m

(*unknowns)[i].modelVariable = FMIModelVariableForIndexLiteral(modelDescription, indexLiteral);

free((void*)indexLiteral);
xmlFree((void*)indexLiteral);
}

xmlXPathFreeObject(xpathObj);
Expand Down Expand Up @@ -362,7 +362,7 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {
variable->variability = FMIContinuous;
}

free((void*)variability);
xmlFree((void*)variability);

if (!strcmp(typeName, "Real")) {
variable->type = variable->variability == FMIDiscrete ? FMIDiscreteRealType : FMIRealType;
Expand All @@ -380,7 +380,7 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {

variable->valueReference = FMIValueReferenceForLiteral(vr);

free((void*)vr);
xmlFree((void*)vr);

const char* causality = (char*)xmlGetProp(variableNode, (xmlChar*)"causality");

Expand All @@ -398,7 +398,7 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {
variable->causality = FMILocal;
}

free((void*)causality);
xmlFree((void*)causality);
}

xmlXPathFreeObject(xpathObj);
Expand All @@ -421,7 +421,7 @@ static FMIModelDescription* readModelDescriptionFMI2(xmlNodePtr root) {
FMILogError("Failed to resolve attribute derivative=\"%s\" for model variable \"%s\".", literal, variable->name);
nProblems++;
}
free(literal);
xmlFree(literal);
}
}

Expand Down Expand Up @@ -547,7 +547,7 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {
variable->variability = FMIContinuous;
}

free((void*)variability);
xmlFree((void*)variability);

if (!strcmp(name, "Float32")) {
switch (variable->variability) {
Expand Down Expand Up @@ -615,7 +615,7 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {

variable->valueReference = FMIValueReferenceForLiteral(vr);

free((void*)vr);
xmlFree((void*)vr);

const char* causality = (char*)xmlGetProp(variableNode, (xmlChar*)"causality");

Expand All @@ -637,7 +637,7 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {
variable->causality = FMILocal;
}

free((void*)causality);
xmlFree((void*)causality);

variable->derivative = (FMIModelVariable*)xmlGetProp(variableNode, (xmlChar*)"derivative");

Expand Down Expand Up @@ -712,7 +712,7 @@ static FMIModelDescription* readModelDescriptionFMI3(xmlNodePtr root) {
nProblems++;
FMILogError("Failed to resolve attribute derivative=\"%s\" for model variable \"%s\".\n", literal, variable->name);
}
free(literal);
xmlFree(literal);
}

}
Expand Down Expand Up @@ -848,39 +848,39 @@ void FMIFreeModelDescription(FMIModelDescription* modelDescription) {
}

xmlFree((void*)modelDescription->fmiVersion);
free((void*)modelDescription->modelName);
free((void*)modelDescription->instantiationToken);
free((void*)modelDescription->description);
free((void*)modelDescription->generationTool);
free((void*)modelDescription->generationDate);
xmlFree((void*)modelDescription->modelName);
xmlFree((void*)modelDescription->instantiationToken);
xmlFree((void*)modelDescription->description);
xmlFree((void*)modelDescription->generationTool);
xmlFree((void*)modelDescription->generationDate);

if (modelDescription->modelExchange) {
free((void*)modelDescription->modelExchange->modelIdentifier);
free(modelDescription->modelExchange);
xmlFree((void*)modelDescription->modelExchange->modelIdentifier);
xmlFree(modelDescription->modelExchange);
}

if (modelDescription->coSimulation) {
free((void*)modelDescription->coSimulation->modelIdentifier);
free(modelDescription->coSimulation);
xmlFree((void*)modelDescription->coSimulation->modelIdentifier);
xmlFree(modelDescription->coSimulation);
}

if (modelDescription->defaultExperiment) {
free((void*)modelDescription->defaultExperiment->startTime);
free((void*)modelDescription->defaultExperiment->stopTime);
free((void*)modelDescription->defaultExperiment->stepSize);
free(modelDescription->defaultExperiment);
xmlFree((void*)modelDescription->defaultExperiment->startTime);
xmlFree((void*)modelDescription->defaultExperiment->stopTime);
xmlFree((void*)modelDescription->defaultExperiment->stepSize);
xmlFree(modelDescription->defaultExperiment);
}

for (size_t i = 0; i < modelDescription->nModelVariables; i++) {
FMIModelVariable* variable = &modelDescription->modelVariables[i];
free((void*)variable->name);
free((void*)variable->start);
free((void*)variable->description);
xmlFree((void*)variable->name);
xmlFree((void*)variable->start);
xmlFree((void*)variable->description);
}

free(modelDescription->modelVariables);

free(modelDescription);
xmlFree(modelDescription);
}

FMIValueReference FMIValueReferenceForLiteral(const char* literal) {
Expand Down

0 comments on commit ff49ecc

Please sign in to comment.