fix memory leak

This commit is contained in:
Marty Kraimer
2004-04-07 13:14:00 +00:00
parent 5b30180c3f
commit 93b46f62a5

View File

@@ -203,11 +203,14 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
}
}
my_buffer = dbCalloc(MY_BUFFER_SIZE,sizeof(char));
macHandle = NULL;
ellInit(&inputFileList);
ellInit(&tempList);
freeListInitPvt(&freeListPvt,sizeof(tempListNode),100);
if(substitutions) {
if(macCreateHandle(&macHandle,NULL)) {
epicsPrintf("macCreateHandle error\n");
return(-1);
status = -1;
goto cleanup;
}
macParseDefns(macHandle,(char *)substitutions,&macPairs);
if(macPairs ==NULL) {
@@ -219,27 +222,23 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
mac_input_buffer = dbCalloc(MY_BUFFER_SIZE,sizeof(char));
}
}
ellInit(&inputFileList);
ellInit(&tempList);
freeListInitPvt(&freeListPvt,sizeof(tempListNode),100);
pinputFile = dbCalloc(1,sizeof(inputFile));
if(filename) {
pinputFile->filename = macEnvExpand(filename);
}
if(!fp) {
FILE *fp;
FILE *fp1;
if(pinputFile->filename) pinputFile->path = dbOpenFile(pdbbase,pinputFile->filename,&fp);
if(!pinputFile->filename || !fp) {
if(pinputFile->filename) pinputFile->path = dbOpenFile(pdbbase,pinputFile->filename,&fp1);
if(!pinputFile->filename || !fp1) {
errPrintf(0,__FILE__, __LINE__,
"dbRead opening file %s",pinputFile->filename);
free((void *)my_buffer);
freeListCleanup(freeListPvt);
free((void *)pinputFile->filename);
free((void *)pinputFile);
return(-1);
status = -1;
goto cleanup;
}
pinputFile->fp = fp;
pinputFile->fp = fp1;
} else {
pinputFile->fp = fp;
}
@@ -252,14 +251,6 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
if(status) {
fprintf(stderr,"db_parse returned %ld\n",status);
}
if(macHandle) {
macDeleteHandle(macHandle);
macHandle = NULL;
free((void *)mac_input_buffer);
}
freeListCleanup(freeListPvt);
free((void *)my_buffer);
freeInputFileList();
dbFreePath(pdbbase);
if(!status) { /*add RTYP and VERS as an attribute */
DBENTRY dbEntry;
@@ -283,6 +274,16 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
}
dbFinishEntry(pdbEntry);
}
cleanup:
if(macHandle) macDeleteHandle(macHandle);
macHandle = NULL;
if(mac_input_buffer) free((void *)mac_input_buffer);
mac_input_buffer = NULL;
if(freeListPvt) freeListCleanup(freeListPvt);
freeListPvt = NULL;
if(my_buffer) free((void *)my_buffer);
my_buffer = NULL;
freeInputFileList();
return(status);
}