From 12d68e6021b48ca6599331aa3940977c46918bf8 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 28 Apr 2017 18:37:14 -0400 Subject: [PATCH] ioc/db: Add dbCommonPvt Add some hidden "fields" for every record. Allows Base internal hidden accounting which can be changed without an ABI break. --- src/ioc/db/dbAccess.c | 5 +++-- src/ioc/db/dbCommon.dbd | 6 ------ src/ioc/db/dbCommonPvt.h | 14 ++++++++++++++ src/ioc/dbStatic/dbStaticRun.c | 10 ++++++---- 4 files changed, 23 insertions(+), 12 deletions(-) create mode 100644 src/ioc/db/dbCommonPvt.h diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c index 4fb25f0bd..ae21634b2 100644 --- a/src/ioc/db/dbAccess.c +++ b/src/ioc/db/dbAccess.c @@ -42,7 +42,7 @@ #include "dbBase.h" #include "dbBkpt.h" #include "dbCa.h" -#include "dbCommon.h" +#include "dbCommonPvt.h" #include "dbConvertFast.h" #include "dbConvert.h" #include "dbEvent.h" @@ -685,9 +685,10 @@ finish: void dbInitEntryFromChannel(struct dbAddr *paddr, DBENTRY *pdbentry) { struct dbCommon *prec = paddr->precord; + dbCommonPvt *ppvt = CONTAINER(prec, dbCommonPvt, common); pdbentry->pdbbase = pdbbase; pdbentry->precordType = prec->rdes; - pdbentry->precnode = prec->rnde; + pdbentry->precnode = ppvt->node; pdbentry->pflddes = paddr->pfldDes; pdbentry->pinfonode = NULL; pdbentry->pfield = paddr->pfield; diff --git a/src/ioc/db/dbCommon.dbd b/src/ioc/db/dbCommon.dbd index 2df9957b8..1b093e6a8 100644 --- a/src/ioc/db/dbCommon.dbd +++ b/src/ioc/db/dbCommon.dbd @@ -217,12 +217,6 @@ interest(4) extra("struct dbRecordType *rdes") } - field(RNDE,DBF_NOACCESS) { - prompt("Address of dbRecordNode") - special(SPC_NOMOD) - interest(4) - extra("struct dbRecordNode *rnde") - } field(LSET,DBF_NOACCESS) { prompt("Lock Set") special(SPC_NOMOD) diff --git a/src/ioc/db/dbCommonPvt.h b/src/ioc/db/dbCommonPvt.h new file mode 100644 index 000000000..eddb12060 --- /dev/null +++ b/src/ioc/db/dbCommonPvt.h @@ -0,0 +1,14 @@ +#ifndef DBCOMMONPVT_H +#define DBCOMMONPVT_H + +#include "dbCommon.h" + +/** Base internal additional information for every record + */ +typedef struct dbCommonPvt { + struct dbRecordNode *node; + + struct dbCommon common; +} dbCommonPvt; + +#endif // DBCOMMONPVT_H diff --git a/src/ioc/dbStatic/dbStaticRun.c b/src/ioc/dbStatic/dbStaticRun.c index a08322abf..0855a4d0f 100644 --- a/src/ioc/dbStatic/dbStaticRun.c +++ b/src/ioc/dbStatic/dbStaticRun.c @@ -25,7 +25,7 @@ #define epicsExportSharedSymbols #include "dbBase.h" -#include "dbCommon.h" +#include "dbCommonPvt.h" #include "dbStaticLib.h" #include "dbStaticPvt.h" #include "devSup.h" @@ -69,6 +69,7 @@ long dbAllocRecord(DBENTRY *pdbentry,const char *precordName) dbRecordNode *precnode = pdbentry->precnode; dbFldDes *pflddes; int i; + dbCommonPvt *ppvt; dbCommon *precord; char *pfield; @@ -85,8 +86,9 @@ long dbAllocRecord(DBENTRY *pdbentry,const char *precordName) precordName, pdbRecordType->name, pdbRecordType->rec_size); return(S_dbLib_noRecSup); } - precord = dbCalloc(1, pdbRecordType->rec_size); - precord->rnde = precnode; + ppvt = dbCalloc(1, offsetof(dbCommonPvt, common) + pdbRecordType->rec_size); + precord = &ppvt->common; + ppvt->node = precnode; precnode->precord = precord; pflddes = pdbRecordType->papFldDes[0]; if(!pflddes) { @@ -171,7 +173,7 @@ long dbFreeRecord(DBENTRY *pdbentry) if(!pdbRecordType) return(S_dbLib_recordTypeNotFound); if(!precnode) return(S_dbLib_recNotFound); if(!precnode->precord) return(S_dbLib_recNotFound); - free(precnode->precord); + free(CONTAINER(precnode->precord, dbCommonPvt, common)); precnode->precord = NULL; return(0); }