Remove memory leaks in cmpp.
Two small ones (a few bytes) are still there, difficult to assess.
This commit is contained in:
parent
15c034803d
commit
146f94392d
|
|
@ -301,6 +301,7 @@ Status_t write_ifs_c_file(const char *filename, Ifs_Table_t *ifs_table);
|
||||||
|
|
||||||
FILE *fopen_cmpp(const char **path_p, const char *mode);
|
FILE *fopen_cmpp(const char **path_p, const char *mode);
|
||||||
|
|
||||||
|
void rem_ifs_table(Ifs_Table_t *ifs_table);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* type safe variants of the <ctype.h> functions for char arguments
|
* type safe variants of the <ctype.h> functions for char arguments
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,11 @@ NON-STANDARD FEATURES
|
||||||
|
|
||||||
/* *********************************************************************** */
|
/* *********************************************************************** */
|
||||||
|
|
||||||
|
static void txfree(void *ptr)
|
||||||
|
{
|
||||||
|
if(ptr)
|
||||||
|
free(ptr);
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
preprocess_ifs_file
|
preprocess_ifs_file
|
||||||
|
|
@ -65,7 +70,6 @@ void preprocess_ifs_file(void)
|
||||||
|
|
||||||
Status_t status; /* Return status */
|
Status_t status; /* Return status */
|
||||||
|
|
||||||
|
|
||||||
/* Read the entire ifspec.ifs file and load the data into ifs_table */
|
/* Read the entire ifspec.ifs file and load the data into ifs_table */
|
||||||
|
|
||||||
status = read_ifs_file(IFSPEC_FILENAME,GET_IFS_TABLE,&ifs_table);
|
status = read_ifs_file(IFSPEC_FILENAME,GET_IFS_TABLE,&ifs_table);
|
||||||
|
|
@ -82,7 +86,34 @@ void preprocess_ifs_file(void)
|
||||||
if(status != OK) {
|
if(status != OK) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
rem_ifs_table(&ifs_table);
|
||||||
|
}
|
||||||
|
|
||||||
|
void rem_ifs_table(Ifs_Table_t *ifs_table)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
/* Remove the ifs_table */
|
||||||
|
txfree(ifs_table->name.c_fcn_name);
|
||||||
|
txfree(ifs_table->name.description);
|
||||||
|
txfree(ifs_table->name.model_name);
|
||||||
|
|
||||||
|
for(i = 0; i < ifs_table->num_conn; i++) {
|
||||||
|
txfree(ifs_table->conn[i].name);
|
||||||
|
txfree(ifs_table->conn[i].description);
|
||||||
|
txfree(ifs_table->conn[i].default_type);
|
||||||
|
}
|
||||||
|
|
||||||
|
for(i = 0; i < ifs_table->num_param; i++) {
|
||||||
|
txfree(ifs_table->param[i].name);
|
||||||
|
txfree(ifs_table->param[i].description);
|
||||||
|
}
|
||||||
|
for(i = 0; i < ifs_table->num_inst_var; i++) {
|
||||||
|
txfree(ifs_table->inst_var[i].name);
|
||||||
|
txfree(ifs_table->inst_var[i].description);
|
||||||
|
}
|
||||||
|
txfree(ifs_table->conn);
|
||||||
|
txfree(ifs_table->param);
|
||||||
|
txfree(ifs_table->inst_var);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -193,7 +193,16 @@ void preprocess_lst_files(void)
|
||||||
if(status != OK) {
|
if(status != OK) {
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
/* remove model_info and node_info */
|
||||||
|
if (model_info) {
|
||||||
|
if(model_info->cfunc_name) free(model_info->cfunc_name);
|
||||||
|
if(model_info->path_name) free(model_info->path_name);
|
||||||
|
if(model_info->spice_name) free(model_info->spice_name);
|
||||||
|
}
|
||||||
|
if (node_info) {
|
||||||
|
if(node_info->node_name) free(node_info->node_name);
|
||||||
|
if(node_info->path_name) free(node_info->path_name);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -309,6 +318,9 @@ static Status_t read_modpath(
|
||||||
*num_models = n;
|
*num_models = n;
|
||||||
*model_info = model;
|
*model_info = model;
|
||||||
|
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
|
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -424,6 +436,9 @@ static Status_t read_udnpath(
|
||||||
*num_nodes = n;
|
*num_nodes = n;
|
||||||
*node_info = node;
|
*node_info = node;
|
||||||
|
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
|
|
||||||
return(OK);
|
return(OK);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -467,14 +482,17 @@ static Status_t read_model_names(
|
||||||
|
|
||||||
/* Transfer the names into the model_info structure */
|
/* Transfer the names into the model_info structure */
|
||||||
if(status == OK) {
|
if(status == OK) {
|
||||||
model_info[i].spice_name = ifs_table.name.model_name;
|
model_info[i].spice_name = strdup(ifs_table.name.model_name);
|
||||||
model_info[i].cfunc_name = ifs_table.name.c_fcn_name;
|
model_info[i].cfunc_name = strdup(ifs_table.name.c_fcn_name);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
all_found = FALSE;
|
all_found = FALSE;
|
||||||
print_error("ERROR - Problems reading %s in directory %s",
|
print_error("ERROR - Problems reading %s in directory %s",
|
||||||
IFSPEC_FILENAME, model_info[i].path_name);
|
IFSPEC_FILENAME, model_info[i].path_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Remove the ifs_table */
|
||||||
|
rem_ifs_table(&ifs_table);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(all_found)
|
if(all_found)
|
||||||
|
|
@ -767,6 +785,8 @@ static Status_t write_CMextrn(
|
||||||
|
|
||||||
/* Close the file and return */
|
/* Close the file and return */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -808,6 +828,8 @@ static Status_t write_CMinfo(
|
||||||
|
|
||||||
/* Close the file and return */
|
/* Close the file and return */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -853,6 +875,8 @@ static Status_t write_UDNextrn(
|
||||||
|
|
||||||
/* Close the file and return */
|
/* Close the file and return */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -895,6 +919,8 @@ static Status_t write_UDNinfo(
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Close the file and return */
|
/* Close the file and return */
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
@ -947,6 +973,8 @@ static Status_t write_objects_inc(
|
||||||
|
|
||||||
/* Close the file and return */
|
/* Close the file and return */
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
return(OK);
|
return(OK);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -976,6 +1004,7 @@ static Status_t read_udn_type_name(
|
||||||
|
|
||||||
/* Open the file from which the node type name will be read */
|
/* Open the file from which the node type name will be read */
|
||||||
fp = fopen_cmpp(&path, "r");
|
fp = fopen_cmpp(&path, "r");
|
||||||
|
free((char*)path);
|
||||||
if(fp == NULL)
|
if(fp == NULL)
|
||||||
return(ERROR);
|
return(ERROR);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,7 +159,10 @@ void preprocess_mod_file (
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
fclose (mod_yyout);
|
fclose (mod_yyout);
|
||||||
mod_yyrestart(NULL);
|
if(output_filename)
|
||||||
|
free((char*)output_filename);
|
||||||
|
rem_ifs_table(&ifs_table);
|
||||||
|
mod_yyrestart(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
|
||||||
|
|
@ -150,6 +150,10 @@ static Status_t read_ifs_table(
|
||||||
assert (ifs_table);
|
assert (ifs_table);
|
||||||
assert (fp);
|
assert (fp);
|
||||||
|
|
||||||
|
ifs_table->name.description =
|
||||||
|
ifs_table->name.c_fcn_name =
|
||||||
|
ifs_table->name.model_name = NULL;
|
||||||
|
|
||||||
ifs_yylineno = 1;
|
ifs_yylineno = 1;
|
||||||
ifs_yyin = fp;
|
ifs_yyin = fp;
|
||||||
parser_just_names = (mode == GET_IFS_NAME) ? TRUE : FALSE;
|
parser_just_names = (mode == GET_IFS_NAME) ? TRUE : FALSE;
|
||||||
|
|
|
||||||
|
|
@ -155,7 +155,8 @@ Status_t write_ifs_c_file(
|
||||||
/* Close the ifspec.c file and return */
|
/* Close the ifspec.c file and return */
|
||||||
|
|
||||||
int_status = fclose(fp);
|
int_status = fclose(fp);
|
||||||
|
if(filename)
|
||||||
|
free((char*)filename);
|
||||||
if(int_status == 0)
|
if(int_status == 0)
|
||||||
return(OK);
|
return(OK);
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue