From 49ef896a3622a4ac383835295e3158cfef3a79e8 Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Fri, 15 Aug 2008 18:58:18 +0000 Subject: [PATCH] Cleanup, remove some unnecessary casting. --- src/db/dbAccess.c | 28 +- src/db/dbAddr.h | 37 ++- src/db/dbCa.c | 661 ++++++++++++++++++++-------------------- src/db/dbConvert.c | 12 +- src/db/dbFastLinkConv.c | 8 +- src/db/dbNotify.c | 2 +- src/db/dbTest.c | 2 +- src/db/recGbl.c | 12 +- src/dbStatic/link.h | 4 +- 9 files changed, 389 insertions(+), 377 deletions(-) diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index 84f5198c4..d6de0c2b4 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -121,7 +121,7 @@ static void get_enum_strs(DBADDR *paddr, char **ppbuffer, struct rset *prset,long *options) { short field_type=paddr->field_type; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pdbFldDes = paddr->pfldDes; dbMenu *pdbMenu; dbDeviceMenu *pdbDeviceMenu; char **papChoice; @@ -370,7 +370,7 @@ static void getOptions(DBADDR *paddr,char **poriginal,long *options,void *pflin) struct rset * epicsShareAPI dbGetRset(const struct dbAddr *paddr) { - struct dbFldDes *pfldDes = (struct dbFldDes *)paddr->pfldDes; + struct dbFldDes *pfldDes = paddr->pfldDes; if(!pfldDes) return(0); return(pfldDes->pdbRecordType->prset); @@ -402,7 +402,7 @@ int epicsShareAPI dbIsValueField(const struct dbFldDes *pdbFldDes) int epicsShareAPI dbGetFieldIndex(const struct dbAddr *paddr) { - return(((struct dbFldDes *)paddr->pfldDes)->indRecordType); + return paddr->pfldDes->indRecordType; } long epicsShareAPI dbGetNelements(const struct link *plink,long *nelements) @@ -654,11 +654,11 @@ long epicsShareAPI dbNameToAddr(const char *pname,DBADDR *paddr) paddr->pfield = dbEntry.pfield; pflddes = dbEntry.pflddes; dbFinishEntry(&dbEntry); - paddr->pfldDes = (void *)pflddes; - paddr->field_type = pflddes->field_type; + paddr->pfldDes = pflddes; + paddr->field_type = pflddes->field_type; paddr->dbr_field_type = mapDBFToDBR[pflddes->field_type]; - paddr->field_size = pflddes->size; - paddr->special = pflddes->special; + paddr->field_size = pflddes->size; + paddr->special = pflddes->special; /*if special is SPC_DBADDR then call cvt_dbaddr */ /*it may change pfield,no_elements,field_type,dbr_field_type,*/ @@ -899,7 +899,7 @@ long epicsShareAPI dbGetField(DBADDR *paddr,short dbrType, dbScanLock(precord); if(dbfType>=DBF_INLINK && dbfType<=DBF_FWDLINK) { DBENTRY dbEntry; - dbFldDes *pfldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pfldDes = paddr->pfldDes; char *rtnString; char *pbuf = (char *)pbuffer; @@ -1039,7 +1039,7 @@ static long dbPutFieldLink( DBLINK *plink = (DBLINK *)paddr->pfield; const char *pstring = (const char *)pbuffer; DBENTRY dbEntry; - dbFldDes *pfldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pfldDes = paddr->pfldDes; DBADDR dbaddr; devSup *pdevSup = NULL; struct dset *new_dset = NULL; @@ -1220,10 +1220,10 @@ long epicsShareAPI dbPutField( DBADDR *paddr,short dbrType,const void *pbuffer,long nRequest) { long status = 0; - long special=paddr->special; - dbFldDes *pfldDes=(dbFldDes *)(paddr->pfldDes); - dbCommon *precord = (dbCommon *)(paddr->precord); - short dbfType = paddr->field_type; + long special = paddr->special; + dbFldDes *pfldDes = paddr->pfldDes; + dbCommon *precord = paddr->precord; + short dbfType = paddr->field_type; if(special==SPC_ATTRIBUTE) return S_db_noMod; @@ -1347,7 +1347,7 @@ long epicsShareAPI dbPut(DBADDR *paddr,short dbrType, } /* propagate events for this field */ /* if the field is VAL and pvlMask&pvlOptPP is true dont propagate*/ - pfldDes = (dbFldDes *)(paddr->pfldDes); + pfldDes = paddr->pfldDes; isValueField = dbIsValueField(pfldDes); if (isValueField) precord->udf=FALSE; if(precord->mlis.count && diff --git a/src/db/dbAddr.h b/src/db/dbAddr.h index 45510e654..d7fdd94e9 100644 --- a/src/db/dbAddr.h +++ b/src/db/dbAddr.h @@ -1,36 +1,33 @@ /*************************************************************************\ -* Copyright (c) 2002 The University of Chicago, as Operator of Argonne +* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. -* EPICS BASE Versions 3.13.7 -* and higher are distributed subject to a Software License Agreement found +* EPICS BASE is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. \*************************************************************************/ #ifndef dbAddrh #define dbAddrh -#ifdef __cplusplus - struct dbCommon; -#endif +struct dbCommon; +struct dbFldDes; -typedef struct dbAddr{ - struct dbCommon *precord;/* address of record */ - void *pfield; /* address of field */ - void *pfldDes; /* address of struct fldDes */ - void *asPvt; /* Access Security Private */ - long no_elements; /* number of elements (arrays) */ - short field_type; /* type of database field */ - short field_size; /* size (bytes) of the field being accessed */ - short special; /* special processing */ - short dbr_field_type; /* field type as seen by database request*/ - /*DBR_STRING,...,DBR_ENUM,DBR_NOACCESS*/ -}dbAddr; +typedef struct dbAddr { + struct dbCommon *precord; /* address of record */ + void *pfield; /* address of field */ + struct dbFldDes *pfldDes; /* address of struct fldDes */ + long no_elements; /* number of elements (arrays) */ + short field_type; /* type of database field */ + short field_size; /* size of the field being accessed */ + short special; /* special processing */ + short dbr_field_type; /* field type as seen by database request*/ + /* DBR_STRING,...,DBR_ENUM,DBR_NOACCESS */ +} dbAddr; typedef dbAddr DBADDR; -unsigned dbNameOfPV ( const dbAddr * paddr, char * pBuf, unsigned bufLen ); -unsigned dbNameSizeOfPV ( const dbAddr * paddr ); +unsigned dbNameOfPV (const dbAddr * paddr, char * pBuf, unsigned bufLen); +unsigned dbNameSizeOfPV (const dbAddr * paddr); #endif /* dbAddrh */ diff --git a/src/db/dbCa.c b/src/db/dbCa.c index 2428edcfc..df1103cb6 100644 --- a/src/db/dbCa.c +++ b/src/db/dbCa.c @@ -1,23 +1,18 @@ /*************************************************************************\ -* Copyright (c) 2002 The University of Chicago, as Operator of Argonne +* Copyright (c) 2008 UChicago Argonne LLC, as Operator of Argonne * National Laboratory. * Copyright (c) 2002 The Regents of the University of California, as * Operator of Los Alamos National Laboratory. -* EPICS BASE Versions 3.13.7 -* and higher are distributed subject to a Software License Agreement found +* EPICS BASE is distributed subject to a Software License Agreement found * in file LICENSE that is included with this distribution. \*************************************************************************/ -/* dbCa.c */ -/**************************************************************** -* -* Current Author: Bob Dalesio -* Contributing Author: Marty Kraimer -* Date: 26MAR96 -* -* Complete replacement for dbCaDblink.c dbCaLink.c (Nicholas T. Karonis) -* -****************************************************************/ +/* $Id$ + * + * Original Authors: Bob Dalesio and Marty Kraimer + * Date: 26MAR96 + * + */ #include #include @@ -30,6 +25,7 @@ #include "epicsEvent.h" #include "epicsThread.h" #include "epicsTime.h" +#include "epicsString.h" #include "errlog.h" #include "taskwd.h" #include "alarm.h" @@ -40,8 +36,10 @@ #include "cadef.h" #include "epicsAssert.h" #include "epicsExit.h" -/*following because we cant include dbStaticLib.h*/ + +/* We can't include dbStaticLib.h here */ epicsShareFunc void * epicsShareAPI dbCalloc(size_t nobj,size_t size); + #define epicsExportSharedSymbols #include "db_access_routines.h" #include "db_convert.h" @@ -51,12 +49,15 @@ epicsShareFunc void * epicsShareAPI dbCalloc(size_t nobj,size_t size); #include "dbCaPvt.h" #include "recSup.h" +extern void dbServiceIOInit(); + static ELLLIST workList; /* Work list for dbCaTask */ static epicsMutexId workListLock; /*Mutual exclusions semaphores for workList*/ static epicsEventId workListEvent; /*wakeup event for dbCaTask*/ static int removesOutstanding = 0; -static int removesOutstandingWarning = 10000; +#define removesOutstandingWarning 10000 + static enum { ctlRun, ctlPause, ctlExit } dbCaCtl; @@ -64,14 +65,14 @@ static epicsEventId startStopEvent; struct ca_client_context * dbCaClientContext; - +/* Forward declarations */ static void dbCaTask(void *); -extern void dbServiceIOInit(); #define printLinks(pcaLink) \ errlogPrintf("%s has DB CA link to %s\n",\ - ((dbCommon*)((pcaLink)->plink->value.pv_link.precord))->name,(pcaLink->pvname)) - + pcaLink->plink->value.pv_link.precord->name, pcaLink->pvname) + + /* caLink locking * * workListLock @@ -117,51 +118,53 @@ extern void dbServiceIOInit(); * If any channel access callback gets called before the ca_clear_channel * it finds pca->plink=0 and does nothing. Once ca_clear_channel * is called no other callback for this caLink will be called. - * + * * dbCaPutLinkCallback causes an additional complication because - * because when dbCaRemoveLink is called The callback may not have occured. + * when dbCaRemoveLink is called the callback may not have occured. * What is done is the following: * If callback has not occured dbCaRemoveLink sets plinkPutCallback=plink * If putCallback is called before dbCaTask calls ca_clear_channel - * It does NOT call the users callback. + * it does NOT call the users callback. * dbCaTask calls the users callback passing plinkPutCallback AFTER * it has called ca_clear_channel - * Thus the users callback will get called exactly once + * Thus the users callback will get called exactly once. */ - + static void addAction(caLink *pca, short link_action) -{ - int callAdd = FALSE; +{ + int callAdd; epicsMutexMustLock(workListLock); - if(pca->link_action==0) callAdd = TRUE; - if((pca->link_action&CA_CLEAR_CHANNEL)!=0) { - errlogPrintf("dbCa:addAction %d but CA_CLEAR_CHANNEL already requested\n", + callAdd = (pca->link_action == 0); + if (pca->link_action & CA_CLEAR_CHANNEL) { + errlogPrintf("dbCa::addAction %d with CA_CLEAR_CHANNEL set\n", link_action); printLinks(pca); - callAdd = FALSE; - link_action=0; + link_action = 0; } - if(link_action&CA_CLEAR_CHANNEL) { - if(++removesOutstanding>=removesOutstandingWarning) { - errlogPrintf("dbCa: Warning removesOutstanding %d\n",removesOutstanding); + if (link_action & CA_CLEAR_CHANNEL) { + if (++removesOutstanding >= removesOutstandingWarning) { + errlogPrintf("dbCa::addAction pausing, %d channels to clear\n", + removesOutstanding); printLinks(pca); } - while(removesOutstanding>=removesOutstandingWarning) { + while (removesOutstanding >= removesOutstandingWarning) { epicsMutexUnlock(workListLock); epicsThreadSleep(1.0); epicsMutexMustLock(workListLock); } } pca->link_action |= link_action; - if(callAdd) ellAdd(&workList,&pca->node); - epicsMutexUnlock(workListLock); /*Give it back immediately*/ - if(callAdd) epicsEventSignal(workListEvent); + if (callAdd) + ellAdd(&workList, &pca->node); + epicsMutexUnlock(workListLock); + if (callAdd) + epicsEventSignal(workListEvent); } - + void epicsShareAPI dbCaCallbackProcess(struct link *plink) { - dbCommon *pdbCommon = (dbCommon *)plink->value.pv_link.precord; + dbCommon *pdbCommon = plink->value.pv_link.precord; dbScanLock(pdbCommon); pdbCommon->rset->process(pdbCommon); @@ -204,163 +207,178 @@ void epicsShareAPI dbCaPause(void) dbCaCtl = ctlPause; epicsEventSignal(workListEvent); } - -void epicsShareAPI dbCaAddLinkCallback( struct link *plink, - dbCaCallback connect,dbCaCallback monitor,void *userPvt) + +void epicsShareAPI dbCaAddLinkCallback(struct link *plink, + dbCaCallback connect, dbCaCallback monitor, void *userPvt) { caLink *pca; - char *pvname; assert(!plink->value.pv_link.pvt); - pca = (caLink*)dbCalloc(1,sizeof(caLink)); + + pca = (caLink *)dbCalloc(1, sizeof(caLink)); pca->lock = epicsMutexMustCreate(); - epicsMutexMustLock(pca->lock); pca->plink = plink; - pvname = plink->value.pv_link.pvname; - pca->pvname = dbCalloc(1,strlen(pvname) +1); - strcpy(pca->pvname,pvname); + pca->pvname = epicsStrDup(plink->value.pv_link.pvname); pca->connect = connect; pca->monitor = monitor; pca->userPvt = userPvt; + + epicsMutexMustLock(pca->lock); plink->type = CA_LINK; plink->value.pv_link.pvt = pca; - addAction(pca,CA_CONNECT); + addAction(pca, CA_CONNECT); epicsMutexUnlock(pca->lock); - return; } -void epicsShareAPI dbCaRemoveLink( struct link *plink) +void epicsShareAPI dbCaRemoveLink(struct link *plink) { - caLink *pca = (caLink *)plink->value.pv_link.pvt; + caLink *pca = (caLink *)plink->value.pv_link.pvt; assert(pca); epicsMutexMustLock(pca->lock); pca->plink = 0; plink->value.pv_link.pvt = 0; - if(pca->putCallback) pca->plinkPutCallback = plink; - /*Must unlock before addAction. Otherwise dbCaTask might free first*/ + if (pca->putCallback) + pca->plinkPutCallback = plink; + /* Unlock before addAction or dbCaTask might free first */ epicsMutexUnlock(pca->lock); - addAction(pca,CA_CLEAR_CHANNEL); + addAction(pca, CA_CLEAR_CHANNEL); } - + long epicsShareAPI dbCaGetLink(struct link *plink,short dbrType, void *pdest, - unsigned short *psevr,long *nelements) + unsigned short *psevr,long *nelements) { - caLink *pca = (caLink *)plink->value.pv_link.pvt; - long status = 0; - long (*pconvert)(); - short link_action = 0; + caLink *pca = (caLink *)plink->value.pv_link.pvt; + long status = 0; + short link_action = 0; + int newType; assert(pca); epicsMutexMustLock(pca->lock); assert(pca->plink); - if(!pca->isConnected || !pca->hasReadAccess) { - pca->sevr = INVALID_ALARM; status = -1; + if (!pca->isConnected || !pca->hasReadAccess) { + pca->sevr = INVALID_ALARM; + status = -1; goto done; } - if((pca->dbrType == DBR_ENUM) && (dbDBRnewToDBRold[dbrType] == DBR_STRING)){ - /*Must ask server for DBR_STRING*/ - if(!pca->pgetString) { + if (pca->dbrType == DBR_ENUM && dbDBRnewToDBRold[dbrType] == DBR_STRING){ + long (*fConvert)(const void *from, void *to, struct dbAddr *paddr); + + /* Subscribe as DBR_STRING */ + if (!pca->pgetString) { plink->value.pv_link.pvlMask |= pvlOptInpString; link_action |= CA_MONITOR_STRING; } - if(!pca->gotInString) { - pca->sevr = INVALID_ALARM; status = -1; + if (!pca->gotInString) { + pca->sevr = INVALID_ALARM; + status = -1; goto done; } - if(nelements) *nelements = 1; - pconvert=dbFastGetConvertRoutine[dbDBRoldToDBFnew[DBR_STRING]][dbrType]; - status = (*(pconvert))(pca->pgetString, pdest, 0); + if (nelements) *nelements = 1; + fConvert = dbFastGetConvertRoutine[dbDBRoldToDBFnew[DBR_STRING]][dbrType]; + status = fConvert(pca->pgetString, pdest, 0); goto done; } - if(!pca->pgetNative) { + if (!pca->pgetNative) { plink->value.pv_link.pvlMask |= pvlOptInpNative; link_action |= CA_MONITOR_NATIVE; } - if(!pca->gotInNative){ - pca->sevr = INVALID_ALARM; status = -1; + if (!pca->gotInNative){ + pca->sevr = INVALID_ALARM; + status = -1; goto done; } - if(!nelements || *nelements == 1){ - pconvert= dbFastGetConvertRoutine[dbDBRoldToDBFnew[pca->dbrType]][dbrType]; - assert(pca->pgetNative); - (*(pconvert))(pca->pgetNative, pdest, 0); + newType = dbDBRoldToDBFnew[pca->dbrType]; + if (!nelements || *nelements == 1) { + long (*fConvert)(const void *from, void *to, struct dbAddr *paddr); + + fConvert = dbFastGetConvertRoutine[newType][dbrType]; + assert(pca->pgetNative); + status = fConvert(pca->pgetNative, pdest, 0); } else { unsigned long ntoget = *nelements; - struct dbAddr dbAddr; - - if(ntoget > pca->nelements) ntoget = pca->nelements; + struct dbAddr dbAddr; + long (*aConvert)(struct dbAddr *paddr, void *to, long nreq, long nto, long off); + + aConvert = dbGetConvertRoutine[newType][dbrType]; + assert(pca->pgetNative); + + if (ntoget > pca->nelements) + ntoget = pca->nelements; *nelements = ntoget; - pconvert = dbGetConvertRoutine[dbDBRoldToDBFnew[pca->dbrType]][dbrType]; - memset((void *)&dbAddr,0,sizeof(dbAddr)); + + memset((void *)&dbAddr, 0, sizeof(dbAddr)); dbAddr.pfield = pca->pgetNative; - assert(dbAddr.pfield); /*Following will only be used for pca->dbrType == DBR_STRING*/ dbAddr.field_size = MAX_STRING_SIZE; /*Ignore error return*/ - (*(pconvert))(&dbAddr,pdest,ntoget,ntoget,0); + aConvert(&dbAddr, pdest, ntoget, ntoget, 0); } done: - if(psevr) *psevr = pca->sevr; - if(link_action) addAction(pca,link_action); + if (psevr) *psevr = pca->sevr; + if (link_action) addAction(pca, link_action); epicsMutexUnlock(pca->lock); - return(status); + return status; } long epicsShareAPI dbCaPutLinkCallback(struct link *plink,short dbrType, const void *pbuffer,long nRequest,dbCaCallback callback,void *userPvt) { - caLink *pca = (caLink *)plink->value.pv_link.pvt; - long (*pconvert)(); - long status = 0; - short link_action = 0; + caLink *pca = (caLink *)plink->value.pv_link.pvt; + long status = 0; + short link_action = 0; assert(pca); /* put the new value in */ epicsMutexMustLock(pca->lock); assert(pca->plink); - if(!pca->isConnected || !pca->hasWriteAccess) { + if (!pca->isConnected || !pca->hasWriteAccess) { epicsMutexUnlock(pca->lock); - return(-1); + return -1; } - if((pca->dbrType == DBR_ENUM) && (dbDBRnewToDBRold[dbrType] == DBR_STRING)){ - /*Must send DBR_STRING*/ - if(!pca->pputString) { - pca->pputString = dbCalloc(MAX_STRING_SIZE,sizeof(char)); + if (pca->dbrType == DBR_ENUM && dbDBRnewToDBRold[dbrType] == DBR_STRING) { + long (*fConvert)(const void *from, void *to, struct dbAddr *paddr); + + /* Send as DBR_STRING */ + if (!pca->pputString) { + pca->pputString = dbCalloc(1, MAX_STRING_SIZE); plink->value.pv_link.pvlMask |= pvlOptOutString; } - pconvert=dbFastPutConvertRoutine[dbrType][dbDBRoldToDBFnew[DBR_STRING]]; - status = (*(pconvert))(pbuffer,pca->pputString, 0); + fConvert = dbFastPutConvertRoutine[dbrType][dbDBRoldToDBFnew[DBR_STRING]]; + status = fConvert(pbuffer, pca->pputString, 0); link_action |= CA_WRITE_STRING; pca->gotOutString = TRUE; - if(pca->newOutString) pca->nNoWrite++; + if (pca->newOutString) pca->nNoWrite++; pca->newOutString = TRUE; } else { - if(!pca->pputNative) { + int newType = dbDBRoldToDBFnew[pca->dbrType]; + if (!pca->pputNative) { pca->pputNative = dbCalloc(pca->nelements, - dbr_value_size[ca_field_type(pca->chid)]); + dbr_value_size[ca_field_type(pca->chid)]); plink->value.pv_link.pvlMask |= pvlOptOutString; } - if(nRequest == 1){ - pconvert = dbFastPutConvertRoutine - [dbrType][dbDBRoldToDBFnew[pca->dbrType]]; - status = (*(pconvert))(pbuffer,pca->pputNative, 0); - }else{ - struct dbAddr dbAddr; - pconvert = dbPutConvertRoutine - [dbrType][dbDBRoldToDBFnew[pca->dbrType]]; - memset((void *)&dbAddr,0,sizeof(dbAddr)); + if (nRequest == 1){ + long (*fConvert)(const void *from, void *to, struct dbAddr *paddr); + + fConvert = dbFastPutConvertRoutine[dbrType][newType]; + status = fConvert(pbuffer, pca->pputNative, 0); + } else { + struct dbAddr dbAddr; + long (*aConvert)(struct dbAddr *paddr, const void *from, long nreq, long nfrom, long off); + + aConvert = dbPutConvertRoutine[dbrType][newType]; + memset((void *)&dbAddr, 0, sizeof(dbAddr)); dbAddr.pfield = pca->pputNative; /*Following only used for DBF_STRING*/ dbAddr.field_size = MAX_STRING_SIZE; - status = (*(pconvert))(&dbAddr,pbuffer,nRequest,pca->nelements,0); + status = aConvert(&dbAddr, pbuffer, nRequest, pca->nelements, 0); } link_action |= CA_WRITE_NATIVE; pca->gotOutNative = TRUE; - if(pca->newOutNative) pca->nNoWrite++; + if (pca->newOutNative) pca->nNoWrite++; pca->newOutNative = TRUE; } - if(callback) { + if (callback) { pca->putType = CA_PUT_CALLBACK; pca->putCallback = callback; pca->putUserPvt = userPvt; @@ -368,90 +386,83 @@ long epicsShareAPI dbCaPutLinkCallback(struct link *plink,short dbrType, pca->putType = CA_PUT; pca->putCallback = 0; } - addAction(pca,link_action); + addAction(pca, link_action); epicsMutexUnlock(pca->lock); - return(status); + return status; } - + +int epicsShareAPI dbCaIsLinkConnected(const struct link *plink) +{ + caLink *pca; + + if (!plink || plink->type != CA_LINK) return FALSE; + pca = (caLink *)plink->value.pv_link.pvt; + if (!pca || !pca->chid) return FALSE; + return pca->isConnected; +} + #define pcaGetCheck \ assert(plink); \ - if(plink->type!=CA_LINK) return(-1); \ + if (plink->type != CA_LINK) return -1; \ pca = (caLink *)plink->value.pv_link.pvt; \ assert(pca); \ epicsMutexMustLock(pca->lock); \ assert(pca->plink); \ - if(!pca->isConnected) { \ + if (!pca->isConnected) { \ epicsMutexUnlock(pca->lock); \ - return(-1); \ - } + return -1; \ + } -long epicsShareAPI dbCaGetNelements( - const struct link *plink,long *nelements) +long epicsShareAPI dbCaGetNelements(const struct link *plink, long *nelements) { - caLink *pca; + caLink *pca; pcaGetCheck *nelements = pca->nelements; epicsMutexUnlock(pca->lock); - return(0); + return 0; } -long epicsShareAPI dbCaGetSevr( - const struct link *plink,short *severity) +long epicsShareAPI dbCaGetSevr(const struct link *plink, short *severity) { - caLink *pca; + caLink *pca; pcaGetCheck *severity = pca->sevr; epicsMutexUnlock(pca->lock); - return(0); + return 0; } -long epicsShareAPI dbCaGetTimeStamp( - const struct link *plink,epicsTimeStamp *pstamp) +long epicsShareAPI dbCaGetTimeStamp(const struct link *plink, + epicsTimeStamp *pstamp) { - caLink *pca; + caLink *pca; pcaGetCheck - memcpy(pstamp,&pca->timeStamp,sizeof(epicsTimeStamp)); + memcpy(pstamp, &pca->timeStamp, sizeof(epicsTimeStamp)); epicsMutexUnlock(pca->lock); - return(0); + return 0; } -int epicsShareAPI dbCaIsLinkConnected( - const struct link *plink) +int epicsShareAPI dbCaGetLinkDBFtype(const struct link *plink) { - caLink *pca; - - if(!plink) return(FALSE); - if(plink->type != CA_LINK) return(FALSE); - pca = (caLink *)plink->value.pv_link.pvt; - if(!pca) return(FALSE); - if(!pca->chid) return(FALSE); - if(pca->isConnected) return(TRUE); - return(FALSE); -} - -int epicsShareAPI dbCaGetLinkDBFtype( - const struct link *plink) -{ - caLink *pca; - short type; + caLink *pca; + int type; pcaGetCheck type = dbDBRoldToDBFnew[pca->dbrType]; epicsMutexUnlock(pca->lock); - return(type); + return type; } - + long epicsShareAPI dbCaGetAttributes(const struct link *plink, dbCaCallback callback,void *userPvt) { - caLink *pca; + caLink *pca; int gotAttributes; assert(plink); - if(plink->type!=CA_LINK) return(-1); + if (plink->type != CA_LINK) return -1; pca = (caLink *)plink->value.pv_link.pvt; assert(pca); epicsMutexMustLock(pca->lock); @@ -460,122 +471,123 @@ long epicsShareAPI dbCaGetAttributes(const struct link *plink, pca->getAttributesPvt = userPvt; gotAttributes = pca->gotAttributes; epicsMutexUnlock(pca->lock); - if(gotAttributes&&callback) callback(userPvt); - return(0); + if (gotAttributes && callback) callback(userPvt); + return 0; } -long epicsShareAPI dbCaGetControlLimits( - const struct link *plink,double *low, double *high) +long epicsShareAPI dbCaGetControlLimits(const struct link *plink, + double *low, double *high) { - caLink *pca; - int gotAttributes; + caLink *pca; + int gotAttributes; pcaGetCheck gotAttributes = pca->gotAttributes; - if(gotAttributes) { - *low = pca->controlLimits[0]; + if (gotAttributes) { + *low = pca->controlLimits[0]; *high = pca->controlLimits[1]; } epicsMutexUnlock(pca->lock); - return(gotAttributes ? 0 : -1); + return gotAttributes ? 0 : -1; } -long epicsShareAPI dbCaGetGraphicLimits( - const struct link *plink,double *low, double *high) +long epicsShareAPI dbCaGetGraphicLimits(const struct link *plink, + double *low, double *high) { - caLink *pca; - int gotAttributes; + caLink *pca; + int gotAttributes; pcaGetCheck gotAttributes = pca->gotAttributes; - if(gotAttributes) { - *low = pca->displayLimits[0]; + if (gotAttributes) { + *low = pca->displayLimits[0]; *high = pca->displayLimits[1]; } epicsMutexUnlock(pca->lock); - return(gotAttributes ? 0 : -1); + return gotAttributes ? 0 : -1; } - -long epicsShareAPI dbCaGetAlarmLimits( - const struct link *plink, + +long epicsShareAPI dbCaGetAlarmLimits(const struct link *plink, double *lolo, double *low, double *high, double *hihi) { - caLink *pca; - int gotAttributes; + caLink *pca; + int gotAttributes; pcaGetCheck gotAttributes = pca->gotAttributes; - if(gotAttributes) { + if (gotAttributes) { *lolo = pca->alarmLimits[0]; - *low = pca->alarmLimits[1]; + *low = pca->alarmLimits[1]; *high = pca->alarmLimits[2]; *hihi = pca->alarmLimits[3]; } - epicsMutexUnlock(pca->lock); - return(gotAttributes ? 0 : -1); + epicsMutexUnlock(pca->lock); + return gotAttributes ? 0 : -1; } -long epicsShareAPI dbCaGetPrecision( - const struct link *plink,short *precision) +long epicsShareAPI dbCaGetPrecision(const struct link *plink, short *precision) { - caLink *pca; - int gotAttributes; + caLink *pca; + int gotAttributes; pcaGetCheck gotAttributes = pca->gotAttributes; - if(gotAttributes) *precision = pca->precision; + if (gotAttributes) *precision = pca->precision; epicsMutexUnlock(pca->lock); - return(gotAttributes ? 0 : -1); + return gotAttributes ? 0 : -1; } -long epicsShareAPI dbCaGetUnits( - const struct link *plink,char *units,int unitsSize) +long epicsShareAPI dbCaGetUnits(const struct link *plink, + char *units, int unitsSize) { - caLink *pca; - int gotAttributes; + caLink *pca; + int gotAttributes; pcaGetCheck gotAttributes = pca->gotAttributes; - if(unitsSize>sizeof(pca->units)) unitsSize = sizeof(pca->units); - if(gotAttributes) strncpy(units,pca->units,unitsSize); + if (unitsSize > sizeof(pca->units)) unitsSize = sizeof(pca->units); + if (gotAttributes) strncpy(units, pca->units, unitsSize); units[unitsSize-1] = 0; - epicsMutexUnlock(pca->lock); - return(gotAttributes ? 0 : -1); + epicsMutexUnlock(pca->lock); + return gotAttributes ? 0 : -1; } - + static void connectionCallback(struct connection_handler_args arg) { - caLink *pca; - short link_action = 0; - struct link *plink; + caLink *pca; + short link_action = 0; + struct link *plink; pca = ca_puser(arg.chid); assert(pca); epicsMutexMustLock(pca->lock); plink = pca->plink; - if(!plink) goto done; - pca->isConnected = (ca_state(arg.chid)==cs_conn) ? TRUE : FALSE ; - if(!pca->isConnected) { - struct pv_link *ppv_link = &(plink->value.pv_link); - dbCommon *precord = ppv_link->precord; + if (!plink) goto done; + pca->isConnected = (ca_state(arg.chid) == cs_conn); + if (!pca->isConnected) { + struct pv_link *ppv_link = &plink->value.pv_link; + dbCommon *precord = ppv_link->precord; pca->nDisconnect++; - if(precord) { - if((ppv_link->pvlMask&pvlOptCP) - || ((ppv_link->pvlMask&pvlOptCPP)&&(precord->scan==0))) + if (precord && + ((ppv_link->pvlMask & pvlOptCP) || + ((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0))) scanOnce(precord); - } goto done; } pca->hasReadAccess = ca_read_access(arg.chid); pca->hasWriteAccess = ca_write_access(arg.chid); - if(pca->gotFirstConnection) { - if((pca->nelements != ca_element_count(arg.chid)) - || (pca->dbrType != ca_field_type(arg.chid))){ - /* field type or nelements changed */ - /* Let next dbCaGetLink and/or dbCaPutLink determine options*/ + if (pca->gotFirstConnection) { + if (pca->nelements != ca_element_count(arg.chid) || + pca->dbrType != ca_field_type(arg.chid)) { + /* BUG: We have no way to clear any old subscription with the + * originally chosen data type/size. That will continue + * to send us data and will result in an assert() fail. + */ + /* Let next dbCaGetLink and/or dbCaPutLink determine options */ plink->value.pv_link.pvlMask &= - ~(pvlOptInpNative|pvlOptInpString|pvlOptOutNative|pvlOptOutString); + ~(pvlOptInpNative | pvlOptInpString | + pvlOptOutNative | pvlOptOutString); pca->gotInNative = 0; pca->gotOutNative=0; @@ -590,50 +602,51 @@ static void connectionCallback(struct connection_handler_args arg) pca->gotFirstConnection = TRUE; pca->nelements = ca_element_count(arg.chid); pca->dbrType = ca_field_type(arg.chid); - if((plink->value.pv_link.pvlMask & pvlOptInpNative) && (!pca->pgetNative)){ + if ((plink->value.pv_link.pvlMask & pvlOptInpNative) && !pca->pgetNative) { link_action |= CA_MONITOR_NATIVE; } - if((plink->value.pv_link.pvlMask & pvlOptInpString) && (!pca->pgetString)){ + if ((plink->value.pv_link.pvlMask & pvlOptInpString) && !pca->pgetString) { link_action |= CA_MONITOR_STRING; } - if((plink->value.pv_link.pvlMask & pvlOptOutNative) && (pca->gotOutNative)){ + if ((plink->value.pv_link.pvlMask & pvlOptOutNative) && pca->gotOutNative) { link_action |= CA_WRITE_NATIVE; } - if((plink->value.pv_link.pvlMask & pvlOptOutString) && (pca->gotOutString)){ + if ((plink->value.pv_link.pvlMask & pvlOptOutString) && pca->gotOutString) { link_action |= CA_WRITE_STRING; } pca->gotAttributes = 0; - if(pca->dbrType!=DBR_STRING) { + if (pca->dbrType != DBR_STRING) { link_action |= CA_GET_ATTRIBUTES; } done: - if(link_action) addAction(pca,link_action); + if (link_action) addAction(pca, link_action); epicsMutexUnlock(pca->lock); } - + static void eventCallback(struct event_handler_args arg) { - caLink *pca = (caLink *)arg.usr; - DBLINK *plink; - long size; + caLink *pca = (caLink *)arg.usr; + DBLINK *plink; + size_t size; dbCommon *precord = 0; struct dbr_time_double *pdbr_time_double; dbCaCallback monitor = 0; - void *userPvt = 0; + void *userPvt = 0; assert(pca); epicsMutexMustLock(pca->lock); plink = pca->plink; - if(!plink) goto done; + if (!plink) goto done; monitor = pca->monitor; userPvt = pca->userPvt; - precord = (dbCommon *)plink->value.pv_link.precord; - if(arg.status != ECA_NORMAL) { - if(precord) { - if((arg.status!=ECA_NORDACCESS) && (arg.status!=ECA_GETFAIL)) - errlogPrintf("dbCa: eventCallback record %s error %s\n", - precord->name,ca_message(arg.status)); - } else { + precord = plink->value.pv_link.precord; + if (arg.status != ECA_NORMAL) { + if (precord) { + if (arg.status != ECA_NORDACCESS && + arg.status != ECA_GETFAIL) + errlogPrintf("dbCa: eventCallback record %s error %s\n", + precord->name, ca_message(arg.status)); + } else { errlogPrintf("dbCa: eventCallback error %s\n", ca_message(arg.status)); } @@ -641,9 +654,10 @@ static void eventCallback(struct event_handler_args arg) } assert(arg.dbr); size = arg.count * dbr_value_size[arg.type]; - if((arg.type==DBR_TIME_STRING) && (ca_field_type(pca->chid)==DBR_ENUM)) { + if (arg.type == DBR_TIME_STRING && + ca_field_type(pca->chid) == DBR_ENUM) { assert(pca->pgetString); - memcpy(pca->pgetString,dbr_value_ptr(arg.dbr,arg.type),size); + memcpy(pca->pgetString, dbr_value_ptr(arg.dbr, arg.type), size); pca->gotInString = TRUE; } else switch (arg.type){ case DBR_TIME_STRING: @@ -654,26 +668,26 @@ static void eventCallback(struct event_handler_args arg) case DBR_TIME_LONG: case DBR_TIME_DOUBLE: assert(pca->pgetNative); - memcpy(pca->pgetNative,dbr_value_ptr(arg.dbr,arg.type),size); + memcpy(pca->pgetNative, dbr_value_ptr(arg.dbr, arg.type), size); pca->gotInNative = TRUE; break; default: - errMessage(-1,"dbCa: eventCallback Logic Error\n"); + errMessage(-1, "dbCa: eventCallback Logic Error\n"); break; } pdbr_time_double = (struct dbr_time_double *)arg.dbr; - pca->sevr = (unsigned short)pdbr_time_double->severity; - memcpy(&pca->timeStamp,&pdbr_time_double->stamp,sizeof(epicsTimeStamp)); - if(precord) { - struct pv_link *ppv_link = &(plink->value.pv_link); + pca->sevr = pdbr_time_double->severity; + memcpy(&pca->timeStamp, &pdbr_time_double->stamp, sizeof(epicsTimeStamp)); + if (precord) { + struct pv_link *ppv_link = &plink->value.pv_link; - if((ppv_link->pvlMask&pvlOptCP) - || ((ppv_link->pvlMask&pvlOptCPP)&&(precord->scan==0))) + if ((ppv_link->pvlMask & pvlOptCP) || + ((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0)) scanOnce(precord); } done: epicsMutexUnlock(pca->lock); - if(monitor) monitor(userPvt); + if (monitor) monitor(userPvt); } static void exceptionCallback(struct exception_handler_args args) @@ -686,7 +700,7 @@ static void exceptionCallback(struct exception_handler_args args) errlogPrintf( "DB CA Link Exception: channel \"%s\"\n", ca_name(args.chid)); - if (ca_state(args.chid)==cs_conn) { + if (ca_state(args.chid) == cs_conn) { errlogPrintf( "DB CA Link Exception: native T=%s, request T=%s," " native N=%ld, request N=%ld, " @@ -710,7 +724,7 @@ static void putCallback(struct event_handler_args arg) epicsMutexMustLock(pca->lock); plink = pca->plink; - if(!plink) goto done; + if (!plink) goto done; callback = pca->putCallback; userPvt = pca->putUserPvt; pca->putCallback = 0; @@ -718,49 +732,49 @@ static void putCallback(struct event_handler_args arg) pca->putUserPvt = 0; done: epicsMutexUnlock(pca->lock); - if(callback) callback(userPvt); + if (callback) callback(userPvt); } static void accessRightsCallback(struct access_rights_handler_args arg) { - caLink *pca = (caLink *)ca_puser(arg.chid); + caLink *pca = (caLink *)ca_puser(arg.chid); struct link *plink; struct pv_link *ppv_link; dbCommon *precord; assert(pca); - if(ca_state(pca->chid) != cs_conn) return;/*connectionCallback will handle*/ + if (ca_state(pca->chid) != cs_conn) + return; /* connectionCallback will handle */ epicsMutexMustLock(pca->lock); plink = pca->plink; - if(!plink) goto done; + if (!plink) goto done; pca->hasReadAccess = ca_read_access(arg.chid); pca->hasWriteAccess = ca_write_access(arg.chid); - if(pca->hasReadAccess && pca->hasWriteAccess) goto done; - ppv_link = &(plink->value.pv_link); + if (pca->hasReadAccess && pca->hasWriteAccess) goto done; + ppv_link = &plink->value.pv_link; precord = ppv_link->precord; - if(precord) { - if((ppv_link->pvlMask&pvlOptCP) - || ((ppv_link->pvlMask&pvlOptCPP)&&(precord->scan==0))) - scanOnce(precord); - } + if (precord && + ((ppv_link->pvlMask & pvlOptCP) || + ((ppv_link->pvlMask & pvlOptCPP) && precord->scan == 0))) + scanOnce(precord); done: epicsMutexUnlock(pca->lock); } - + static void getAttribEventCallback(struct event_handler_args arg) { - caLink *pca = (caLink *)arg.usr; - struct link *plink; - struct dbr_ctrl_double *pdbr; + caLink *pca = (caLink *)arg.usr; + struct link *plink; + struct dbr_ctrl_double *pdbr; dbCaCallback connect = 0; - void *userPvt = 0; + void *userPvt = 0; dbCaCallback getAttributes = 0; - void *getAttributesPvt; + void *getAttributesPvt; assert(pca); epicsMutexMustLock(pca->lock); plink = pca->plink; - if(!plink) { + if (!plink) { epicsMutexUnlock(pca->lock); return; } @@ -768,12 +782,12 @@ static void getAttribEventCallback(struct event_handler_args arg) userPvt = pca->userPvt; getAttributes = pca->getAttributes; getAttributesPvt = pca->getAttributesPvt; - if(arg.status != ECA_NORMAL) { - dbCommon *precord = (dbCommon *)plink->value.pv_link.precord; - if(precord) { + if (arg.status != ECA_NORMAL) { + dbCommon *precord = plink->value.pv_link.precord; + if (precord) { errlogPrintf("dbCa: getAttribEventCallback record %s error %s\n", - precord->name,ca_message(arg.status)); - } else { + precord->name, ca_message(arg.status)); + } else { errlogPrintf("dbCa: getAttribEventCallback error %s\n", ca_message(arg.status)); } @@ -792,12 +806,12 @@ static void getAttribEventCallback(struct event_handler_args arg) pca->alarmLimits[2] = pdbr->upper_warning_limit; pca->alarmLimits[3] = pdbr->upper_alarm_limit; pca->precision = pdbr->precision; - memcpy(pca->units,pdbr->units,MAX_UNITS_SIZE); + memcpy(pca->units, pdbr->units, MAX_UNITS_SIZE); epicsMutexUnlock(pca->lock); - if(getAttributes) getAttributes(getAttributesPvt); - if(connect) connect(userPvt); + if (getAttributes) getAttributes(getAttributesPvt); + if (connect) connect(userPvt); } - + static void dbCaTask(void *arg) { int chan_count = 0; @@ -821,25 +835,25 @@ static void dbCaTask(void *arg) int status; epicsMutexMustLock(workListLock); - if(!(pca = (caLink *)ellGet(&workList))){/*Take off list head*/ + if (!(pca = (caLink *)ellGet(&workList))){ /* Take off list head */ epicsMutexUnlock(workListLock); if (dbCaCtl == ctlExit) goto shutdown; - break; /*workList is empty*/ + break; /* workList is empty */ } link_action = pca->link_action; pca->link_action = 0; - if(link_action&CA_CLEAR_CHANNEL) --removesOutstanding; - epicsMutexUnlock(workListLock); /*Give it back immediately*/ - if(link_action&CA_CLEAR_CHANNEL) {/*This must be first*/ + if (link_action & CA_CLEAR_CHANNEL) --removesOutstanding; + epicsMutexUnlock(workListLock); /* Give back immediately */ + if (link_action & CA_CLEAR_CHANNEL) { /* This must be first */ dbCaCallback callback; struct link *plinkPutCallback = 0; - if(pca->chid) { + if (pca->chid) { ca_clear_channel(pca->chid); --chan_count; } callback = pca->putCallback; - if(callback) { + if (callback) { plinkPutCallback = pca->plinkPutCallback; pca->plinkPutCallback = 0; pca->putCallback = 0; @@ -852,15 +866,15 @@ static void dbCaTask(void *arg) free(pca->pvname); epicsMutexDestroy(pca->lock); free(pca); - /*No alarm is raised. Since link is changing so what.*/ - if(callback) callback(plinkPutCallback); - continue; /*No other link_action makes sense*/ + /* No alarm is raised. Since link is changing so what? */ + if (callback) callback(plinkPutCallback); + continue; /* No other link_action makes sense */ } - if(link_action&CA_CONNECT) { + if (link_action & CA_CONNECT) { status = ca_create_channel( pca->pvname,connectionCallback,(void *)pca, CA_PRIORITY_DB_LINKS, &(pca->chid)); - if(status!=ECA_NORMAL) { + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_create_channel %s\n", ca_message(status)); printLinks(pca); @@ -869,103 +883,102 @@ static void dbCaTask(void *arg) chan_count++; status = ca_replace_access_rights_event(pca->chid, accessRightsCallback); - if(status!=ECA_NORMAL) { + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask replace_access_rights_event %s\n", ca_message(status)); printLinks(pca); } continue; /*Other options must wait until connect*/ } - if(ca_state(pca->chid) != cs_conn) continue; - if(link_action&CA_WRITE_NATIVE) { + if (ca_state(pca->chid) != cs_conn) continue; + if (link_action & CA_WRITE_NATIVE) { assert(pca->pputNative); - if(pca->putType==CA_PUT) { + if (pca->putType == CA_PUT) { status = ca_array_put( - pca->dbrType,pca->nelements, - pca->chid,pca->pputNative); - } else if(pca->putType==CA_PUT_CALLBACK) { + pca->dbrType, pca->nelements, + pca->chid, pca->pputNative); + } else if (pca->putType==CA_PUT_CALLBACK) { status = ca_array_put_callback( - pca->dbrType,pca->nelements, - pca->chid,pca->pputNative, - putCallback,pca); + pca->dbrType, pca->nelements, + pca->chid, pca->pputNative, + putCallback, pca); } else { status = ECA_PUTFAIL; } - if(status!=ECA_NORMAL) { + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_array_put %s\n", ca_message(status)); printLinks(pca); } epicsMutexMustLock(pca->lock); - if(status==ECA_NORMAL) pca->newOutNative = FALSE; + if (status == ECA_NORMAL) pca->newOutNative = FALSE; epicsMutexUnlock(pca->lock); } - if(link_action&CA_WRITE_STRING) { + if (link_action & CA_WRITE_STRING) { assert(pca->pputString); - if(pca->putType==CA_PUT) { + if (pca->putType == CA_PUT) { status = ca_array_put( - DBR_STRING,1, - pca->chid,pca->pputString); - } else if(pca->putType==CA_PUT_CALLBACK) { + DBR_STRING, 1, + pca->chid, pca->pputString); + } else if (pca->putType==CA_PUT_CALLBACK) { status = ca_array_put_callback( - DBR_STRING,1, - pca->chid,pca->pputString, - putCallback,pca); + DBR_STRING, 1, + pca->chid, pca->pputString, + putCallback, pca); } else { status = ECA_PUTFAIL; } - if(status!=ECA_NORMAL) { + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_array_put %s\n", ca_message(status)); printLinks(pca); } epicsMutexMustLock(pca->lock); - if(status==ECA_NORMAL) pca->newOutString = FALSE; + if (status == ECA_NORMAL) pca->newOutString = FALSE; epicsMutexUnlock(pca->lock); } /*CA_GET_ATTRIBUTES before CA_MONITOR so that attributes available * before the first monitor callback */ - if(link_action&CA_GET_ATTRIBUTES) { + if (link_action & CA_GET_ATTRIBUTES) { status = ca_get_callback(DBR_CTRL_DOUBLE, - pca->chid,getAttribEventCallback,pca); - if(status!=ECA_NORMAL) { + pca->chid, getAttribEventCallback, pca); + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_get_callback %s\n", ca_message(status)); printLinks(pca); } } - if(link_action&CA_MONITOR_NATIVE) { - short element_size; + if (link_action & CA_MONITOR_NATIVE) { + size_t element_size; element_size = dbr_value_size[ca_field_type(pca->chid)]; epicsMutexMustLock(pca->lock); - pca->pgetNative = dbCalloc(pca->nelements,element_size); + pca->pgetNative = dbCalloc(pca->nelements, element_size); epicsMutexUnlock(pca->lock); status = ca_add_array_event( ca_field_type(pca->chid)+DBR_TIME_STRING, ca_element_count(pca->chid), - pca->chid, eventCallback,pca,0.0,0.0,0.0,0); - if(status!=ECA_NORMAL) { + pca->chid, eventCallback, pca, 0.0, 0.0, 0.0, 0); + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_add_array_event %s\n", ca_message(status)); printLinks(pca); } } - if(link_action&CA_MONITOR_STRING) { + if (link_action & CA_MONITOR_STRING) { epicsMutexMustLock(pca->lock); - pca->pgetString = dbCalloc(MAX_STRING_SIZE,sizeof(char)); + pca->pgetString = dbCalloc(1, MAX_STRING_SIZE); epicsMutexUnlock(pca->lock); - status = ca_add_array_event(DBR_TIME_STRING,1, - pca->chid, eventCallback,pca,0.0,0.0,0.0, - 0); - if(status!=ECA_NORMAL) { + status = ca_add_array_event(DBR_TIME_STRING, 1, + pca->chid, eventCallback, pca, 0.0, 0.0, 0.0, 0); + if (status != ECA_NORMAL) { errlogPrintf("dbCaTask ca_add_array_event %s\n", ca_message(status)); printLinks(pca); } } } - SEVCHK(ca_flush_io(),"dbCaTask"); + SEVCHK(ca_flush_io(), "dbCaTask"); } shutdown: taskwdRemove(0); diff --git a/src/db/dbConvert.c b/src/db/dbConvert.c index ebbc728f2..d500869d0 100644 --- a/src/db/dbConvert.c +++ b/src/db/dbConvert.c @@ -2126,8 +2126,8 @@ static long getEnumEnum( static long getMenuString(DBADDR *paddr, void *pto, long nRequest, long no_elements, long offset) { - char *pbuffer = (char *)pto; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + char *pbuffer = (char *)pto; + dbFldDes *pdbFldDes = paddr->pfldDes; dbMenu *pdbMenu; char **papChoiceValue; char *pchoice; @@ -2152,8 +2152,8 @@ static long getMenuString(DBADDR *paddr, void *pto, static long getDeviceString(DBADDR *paddr, void *pto, long nRequest, long no_elements, long offset) { - char *pbuffer = (char *)pto; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + char *pbuffer = (char *)pto; + dbFldDes *pdbFldDes = paddr->pfldDes; dbDeviceMenu *pdbDeviceMenu; char **papChoice; char *pchoice; @@ -2499,7 +2499,7 @@ static long putStringMenu( DBADDR *paddr,const void *pfrom,long nRequest,long no_elements,long offset) { const char *pbuffer = (const char *)pfrom; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pdbFldDes = paddr->pfldDes; dbMenu *pdbMenu; char **papChoiceValue; char *pchoice; @@ -2536,7 +2536,7 @@ static long putStringDevice( DBADDR *paddr,const void *pfrom,long nRequest,long no_elements,long offset) { const char *pbuffer = (const char *)pfrom; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pdbFldDes = paddr->pfldDes; dbDeviceMenu *pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt; char **papChoice; char *pchoice; diff --git a/src/db/dbFastLinkConv.c b/src/db/dbFastLinkConv.c index da4626582..1a67316f5 100644 --- a/src/db/dbFastLinkConv.c +++ b/src/db/dbFastLinkConv.c @@ -299,7 +299,7 @@ static long cvt_st_menu( epicsEnum16 *to, struct dbAddr *paddr) { - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pdbFldDes = paddr->pfldDes; dbMenu *pdbMenu = (dbMenu *)pdbFldDes->ftPvt; char **papChoiceValue; char *pchoice; @@ -331,7 +331,7 @@ static long cvt_st_device( epicsEnum16 *to, struct dbAddr *paddr) { - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes; + dbFldDes *pdbFldDes = paddr->pfldDes; dbDeviceMenu *pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt; char **papChoice; char *pchoice; @@ -1043,7 +1043,7 @@ static long cvt_menu_st( char *pchoice; if(! paddr - || !(pdbFldDes = (dbFldDes *)paddr->pfldDes) + || !(pdbFldDes = paddr->pfldDes) || !(pdbMenu = (dbMenu *)pdbFldDes->ftPvt) || *from>=pdbMenu->nChoice || !(papChoiceValue = pdbMenu->papChoiceValue) @@ -1068,7 +1068,7 @@ static long cvt_device_st( char *pchoice; if(!paddr - || !(pdbFldDes = (dbFldDes *)paddr->pfldDes) + || !(pdbFldDes = paddr->pfldDes) || !(pdbDeviceMenu = (dbDeviceMenu *)pdbFldDes->ftPvt) || *from>=pdbDeviceMenu->nChoice || !(papChoice= pdbDeviceMenu->papChoice) diff --git a/src/db/dbNotify.c b/src/db/dbNotify.c index e389fcd92..662e5601d 100644 --- a/src/db/dbNotify.c +++ b/src/db/dbNotify.c @@ -201,7 +201,7 @@ STATIC void callUser(dbCommon *precord,putNotify *ppn) STATIC void putNotifyCommon(putNotify *ppn,dbCommon *precord) { long status=0; - dbFldDes *pfldDes=(dbFldDes *)(ppn->paddr->pfldDes); + dbFldDes *pfldDes = ppn->paddr->pfldDes; putNotifyPvt *pputNotifyPvt = (putNotifyPvt *)ppn->pputNotifyPvt; if(precord->ppn && pputNotifyPvt->state!=putNotifyRestartCallbackRequested) diff --git a/src/db/dbTest.c b/src/db/dbTest.c index 759870020..4558604f7 100644 --- a/src/db/dbTest.c +++ b/src/db/dbTest.c @@ -622,7 +622,7 @@ static void printDbAddr(DBADDR *paddr) { short field_type; short dbr_field_type; - dbFldDes *pdbFldDes = (dbFldDes *)paddr->pfldDes;; + dbFldDes *pdbFldDes = paddr->pfldDes; printf("Record Address: %p",(void *)paddr->precord); printf(" Field Address: %p",paddr->pfield); diff --git a/src/db/recGbl.c b/src/db/recGbl.c index e973460d5..9dfddd164 100644 --- a/src/db/recGbl.c +++ b/src/db/recGbl.c @@ -87,12 +87,12 @@ void epicsShareAPI recGblRecSupError(long status, struct dbAddr *paddr, const char *pmessage, const char *psupport_name) { dbCommon *precord = 0; - dbFldDes *pdbFldDes = 0; - dbRecordType *pdbRecordType = 0; + dbFldDes *pdbFldDes = 0; + dbRecordType *pdbRecordType = 0; if(paddr) { precord = paddr->precord; - pdbFldDes=(dbFldDes *)(paddr->pfldDes); + pdbFldDes = paddr->pfldDes; if(pdbFldDes) pdbRecordType = pdbFldDes->pdbRecordType; } errPrintf(status,0,0, @@ -110,7 +110,7 @@ void epicsShareAPI recGblRecSupError(long status, struct dbAddr *paddr, void epicsShareAPI recGblGetPrec(struct dbAddr *paddr,long *precision) { - dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes); + dbFldDes *pdbFldDes = paddr->pfldDes; switch(pdbFldDes->field_type){ case(DBF_SHORT): @@ -138,7 +138,7 @@ void epicsShareAPI recGblGetPrec(struct dbAddr *paddr,long *precision) void epicsShareAPI recGblGetGraphicDouble( struct dbAddr *paddr,struct dbr_grDouble *pgd) { - dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes); + dbFldDes *pdbFldDes = paddr->pfldDes; getMaxRangeValues(pdbFldDes->field_type,&pgd->upper_disp_limit, &pgd->lower_disp_limit); @@ -160,7 +160,7 @@ void epicsShareAPI recGblGetAlarmDouble( void epicsShareAPI recGblGetControlDouble( struct dbAddr *paddr,struct dbr_ctrlDouble *pcd) { - dbFldDes *pdbFldDes=(dbFldDes *)(paddr->pfldDes); + dbFldDes *pdbFldDes=paddr->pfldDes; getMaxRangeValues(pdbFldDes->field_type,&pcd->upper_ctrl_limit, &pcd->lower_ctrl_limit); diff --git a/src/dbStatic/link.h b/src/dbStatic/link.h index d839d0653..fb8c97512 100644 --- a/src/dbStatic/link.h +++ b/src/dbStatic/link.h @@ -72,9 +72,11 @@ struct macro_link { char *macroStr; }; +struct dbCommon; + struct pv_link { char *pvname; /*pvname to link to*/ - void *precord; /*Address of record containing link*/ + struct dbCommon *precord; /*Address of record containing link*/ void *pvt; /*CA or DB private*/ LINKCVT getCvt; /*input conversion function*/ short pvlMask; /*Options mask*/