From 8c60e7e2cb40efc1f1ea300b03bd327b6bd500d0 Mon Sep 17 00:00:00 2001 From: Michael Davidsaver Date: Fri, 1 Aug 2014 11:28:10 -0400 Subject: [PATCH] track INP/OUT field in struct dbFldDes avoid string comparisons --- src/ioc/db/dbAccess.c | 3 +-- src/ioc/dbStatic/dbBase.h | 1 + src/ioc/dbStatic/dbLexRoutines.c | 2 ++ src/ioc/dbStatic/dbStaticLib.c | 3 +-- src/ioc/misc/iocInit.c | 3 +-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/ioc/db/dbAccess.c b/src/ioc/db/dbAccess.c index bf0f00dec..2abbe8ea2 100644 --- a/src/ioc/db/dbAccess.c +++ b/src/ioc/db/dbAccess.c @@ -942,8 +942,7 @@ static long dbPutFieldLink(DBADDR *paddr, if (status) goto finish; isDevLink = ellCount(&precord->rdes->devList) > 0 && - (strcmp(pfldDes->name, "INP") == 0 || - strcmp(pfldDes->name, "OUT") == 0); + pfldDes->isDevLink; dbLockSetGblLock(); dbLockSetRecordLock(precord); diff --git a/src/ioc/dbStatic/dbBase.h b/src/ioc/dbStatic/dbBase.h index 691953442..2aa9a6084 100644 --- a/src/ioc/dbStatic/dbBase.h +++ b/src/ioc/dbStatic/dbBase.h @@ -81,6 +81,7 @@ typedef struct dbFldDes{ /* field description */ ctType base; /*base for integer to string conversions*/ short promptgroup; /*prompt, i.e. gui group */ short interest; /*interest level */ + short isDevLink; /* true for INP/OUT fields */ asLevel as_level; /*access security level */ char *initial; /*initial value */ /*If (DBF_MENU,DBF_DEVICE) ftPvt is (pdbMenu,pdbDeviceMenu) */ diff --git a/src/ioc/dbStatic/dbLexRoutines.c b/src/ioc/dbStatic/dbLexRoutines.c index cf2406556..063701751 100644 --- a/src/ioc/dbStatic/dbLexRoutines.c +++ b/src/ioc/dbStatic/dbLexRoutines.c @@ -484,6 +484,8 @@ static void dbRecordtypeFieldHead(char *name,char *type) allocTemp(pdbFldDes); pdbFldDes->name = epicsStrDup(name); pdbFldDes->as_level = ASL1; + pdbFldDes->isDevLink = strcmp(pdbFldDes->name, "INP")==0 || + strcmp(pdbFldDes->name, "OUT")==0; for(i=0; ifield_type = pamapdbfType[i].value; diff --git a/src/ioc/dbStatic/dbStaticLib.c b/src/ioc/dbStatic/dbStaticLib.c index 43a371b7a..9f953a673 100644 --- a/src/ioc/dbStatic/dbStaticLib.c +++ b/src/ioc/dbStatic/dbStaticLib.c @@ -2106,8 +2106,7 @@ long dbPutString(DBENTRY *pdbentry,const char *pstring) goto done; } - if (strcmp(pflddes->name, "INP") == 0 || - strcmp(pflddes->name, "OUT") == 0) { + if (pflddes->isDevLink) { status = setLinkType(pdbentry); /* This uses DTYP to look up and set plink->type, necessary for default DTYP */ if (status) { errMessage(status,"in dbPutString from setLinkType"); diff --git a/src/ioc/misc/iocInit.c b/src/ioc/misc/iocInit.c index 73f8ebd00..1e224d2f5 100644 --- a/src/ioc/misc/iocInit.c +++ b/src/ioc/misc/iocInit.c @@ -484,8 +484,7 @@ static void doResolveLinks(dbRecordType *pdbRecordType, dbCommon *precord, dbFldDes *pdbFldDes = papFldDes[link_ind[j]]; DBLINK *plink = (DBLINK *)((char *)precord + pdbFldDes->offset); - if (ellCount(&precord->rdes->devList) > 0 && - (strcmp(pdbFldDes->name, "INP") == 0 || strcmp(pdbFldDes->name, "OUT") == 0)) { + if (ellCount(&precord->rdes->devList) > 0 && pdbFldDes->isDevLink) { devSup *pdevSup = dbDTYPtoDevSup(pdbRecordType, precord->dtyp); if (pdevSup) {