From 6ba949cdb42be9fd7e4d9f99c54c4ea84c68f817 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Mon, 1 May 2017 16:02:14 -0400 Subject: [PATCH] ioc/dbStatic: add dbInitEntryFromRecord() --- src/ioc/db/dbAccess.c | 17 +++++++++++++++-- src/ioc/dbStatic/dbStaticLib.h | 7 +++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c index df6b7adc8..712d63d6d 100644 --- a/src/ioc/db/dbAccess.c +++ b/src/ioc/db/dbAccess.c @@ -686,14 +686,27 @@ void dbInitEntryFromAddr(struct dbAddr *paddr, DBENTRY *pdbentry) { struct dbCommon *prec = paddr->precord; dbCommonPvt *ppvt = CONTAINER(prec, dbCommonPvt, common); + + memset((char *)pdbentry,'\0',sizeof(DBENTRY)); + pdbentry->pdbbase = pdbbase; pdbentry->precordType = prec->rdes; pdbentry->precnode = ppvt->node; pdbentry->pflddes = paddr->pfldDes; - pdbentry->pinfonode = NULL; pdbentry->pfield = paddr->pfield; pdbentry->indfield = -1; /* invalid */ - pdbentry->message = NULL; +} + +void dbInitEntryFromRecord(struct dbCommon *prec, DBENTRY *pdbentry) +{ + dbCommonPvt *ppvt = CONTAINER(prec, dbCommonPvt, common); + + memset((char *)pdbentry,'\0',sizeof(DBENTRY)); + + pdbentry->pdbbase = pdbbase; + pdbentry->precordType = prec->rdes; + pdbentry->precnode = ppvt->node; + pdbentry->indfield = -1; /* invalid */ } long dbValueSize(short dbr_type) diff --git a/src/ioc/dbStatic/dbStaticLib.h b/src/ioc/dbStatic/dbStaticLib.h index 32fa584c4..dbbd8db11 100644 --- a/src/ioc/dbStatic/dbStaticLib.h +++ b/src/ioc/dbStatic/dbStaticLib.h @@ -58,6 +58,7 @@ typedef struct{ } DBENTRY; struct dbAddr; +struct dbCommon; /*dbDumpFldDes is obsolete. It is only provided for compatibility*/ #define dbDumpFldDes dbDumpField @@ -74,6 +75,12 @@ epicsShareFunc void dbInitEntry(DBBASE *pdbbase, * except that DBENTRY::indfield is not set */ epicsShareFunc void dbInitEntryFromAddr(struct dbAddr *paddr, DBENTRY *pdbentry); +/** Initialize DBENTRY from a valid record (dbCommon*). + * Constant time equivalent of dbInitEntry() then dbFindRecord() + * when no field is specified (pflddes and pfield are NULL). + * except that DBENTRY::indfield is not set. + */ +epicsShareFunc void dbInitEntryFromRecord(struct dbCommon *prec, DBENTRY *pdbentry); epicsShareFunc void dbFinishEntry(DBENTRY *pdbentry); epicsShareFunc DBENTRY * dbCopyEntry(DBENTRY *pdbentry); epicsShareFunc void dbCopyEntryContents(DBENTRY *pfrom,