diff --git a/documentation/RELEASE_NOTES.html b/documentation/RELEASE_NOTES.html index 837b7e024..bec510c5c 100644 --- a/documentation/RELEASE_NOTES.html +++ b/documentation/RELEASE_NOTES.html @@ -13,6 +13,10 @@ +

Back-ported dbLoadRecordsHook from the 3.15 branch

+ +

See the Release Notes from the Base 3.15.1 release for details.

+

Enhanced API for asTrapWrite listeners

External software such as the CA Put Logging module that registers a listener diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index d3e47062c..787bdbe1e 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -61,6 +61,10 @@ epicsShareDef struct dbBase *pdbbase = 0; epicsShareDef volatile int interruptAccept=FALSE; +/* Hook Routines */ + +epicsShareDef DB_LOAD_RECORDS_HOOK_ROUTINE dbLoadRecordsHook = NULL; + static short mapDBFToDBR[DBF_NTYPES] = { /* DBF_STRING => */ DBR_STRING, /* DBF_CHAR => */ DBR_CHAR, @@ -817,7 +821,11 @@ int epicsShareAPI dbLoadDatabase(const char *file, const char *path, const char int epicsShareAPI dbLoadRecords(const char* file, const char* subs) { - return dbReadDatabase(&pdbbase, file, 0, subs); + int status = dbReadDatabase(&pdbbase, file, 0, subs); + + if (!status && dbLoadRecordsHook) + dbLoadRecordsHook(file, subs); + return status; } diff --git a/src/db/dbAccessDefs.h b/src/db/dbAccessDefs.h index 73d68c4ef..472ad6bd1 100644 --- a/src/db/dbAccessDefs.h +++ b/src/db/dbAccessDefs.h @@ -276,9 +276,14 @@ epicsShareFunc long epicsShareAPI dbBufferSize( short dbrType,long options,long nRequest); epicsShareFunc long epicsShareAPI dbValueSize(short dbrType); +/* Hook Routine */ + +typedef void (*DB_LOAD_RECORDS_HOOK_ROUTINE)(const char* filename, + const char* substitutions); +epicsShareExtern DB_LOAD_RECORDS_HOOK_ROUTINE dbLoadRecordsHook; + epicsShareFunc int epicsShareAPI dbLoadDatabase( const char *filename, const char *path, const char *substitutions); - epicsShareFunc int epicsShareAPI dbLoadRecords( const char* filename, const char* substitutions);