ioc/db: Add dbCommonPvt
Add some hidden "fields" for every record. Allows Base internal hidden accounting which can be changed without an ABI break.
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
14
src/ioc/db/dbCommonPvt.h
Normal file
14
src/ioc/db/dbCommonPvt.h
Normal file
@@ -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
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user