diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c index a2ebe6453..b9a1923d4 100644 --- a/src/ioc/dbStatic/dbLexRoutines.c +++ b/src/ioc/dbStatic/dbLexRoutines.c @@ -194,7 +194,16 @@ static void freeInputFileList(void) free((void *)pinputFileNow); } } - + +static +int cmp_dbRecordNode(const ELLNODE *lhs, const ELLNODE *rhs) +{ + dbRecordNode *LHS = (dbRecordNode*)lhs, + *RHS = (dbRecordNode*)rhs; + + return strcmp(LHS->recordname, RHS->recordname); +} + static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp, const char *path,const char *substitutions) { @@ -289,6 +298,15 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp, dbFinishEntry(pdbEntry); } cleanup: + { + ELLNODE *cur; + for(cur = ellFirst(&pdbbase->recordTypeList); cur; cur=ellNext(cur)) + { + dbRecordType *rtype = CONTAINER(cur, dbRecordType, node); + + ellSortStable(&rtype->recList, &cmp_dbRecordNode); + } + } if(macHandle) macDeleteHandle(macHandle); macHandle = NULL; if(mac_input_buffer) free((void *)mac_input_buffer); diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index 715612165..6cbefe61c 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -1426,17 +1426,7 @@ long dbCreateRecord(DBENTRY *pdbentry,const char *precordName) pNewRecNode->recordname = dbRecordName(pdbentry); ellInit(&pNewRecNode->infoList); /* install record node in list in sorted postion */ - status = dbFirstRecord(pdbentry); - while(status==0) { - if(strcmp(precordName,dbGetRecordName(pdbentry)) < 0) break; - status = dbNextRecord(pdbentry); - } - if(status==0) { - precnode = pdbentry->precnode; - ellInsert(preclist,ellPrevious(&precnode->node),&pNewRecNode->node); - } else { - ellAdd(preclist,&pNewRecNode->node); - } + ellAdd(preclist, &pNewRecNode->node); pdbentry->precnode = pNewRecNode; ppvd = dbPvdAdd(pdbentry->pdbbase,precordType,pNewRecNode); if(!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);}