From f210ffe74f14d8dff505a4b2e706492bbac12346 Mon Sep 17 00:00:00 2001 From: hades Date: Thu, 5 Apr 2001 13:51:19 +0000 Subject: [PATCH] *** empty log message *** --- allParam/ca/server/Makefile | 3 ++- allParam/ca/server/arrayDest.cc | 21 +++++++++++++++++++++ allParam/ca/server/arrayDest.h | 19 +++++++++++++++++++ allParam/ca/server/paramBlobRecord.cc | 6 +++--- allParam/ca/server/paramFilenameRecord.cc | 5 ++--- allParam/ca/server/paramIntRecord.cc | 5 ++--- allParam/ca/server/paramIntRecord.h | 1 + allParam/ca/server/paramRecord.cc | 9 ++------- allParam/ca/server/paramRecord.h | 6 ++---- allParam/ca/server/paramRecordSet.cc | 8 -------- allParam/ca/server/paramRecordSet.h | 2 +- allParam/ca/server/paramStringRecord.cc | 9 +++------ 12 files changed, 58 insertions(+), 36 deletions(-) create mode 100644 allParam/ca/server/arrayDest.cc create mode 100644 allParam/ca/server/arrayDest.h diff --git a/allParam/ca/server/Makefile b/allParam/ca/server/Makefile index fbd7d61..42e3628 100644 --- a/allParam/ca/server/Makefile +++ b/allParam/ca/server/Makefile @@ -11,7 +11,7 @@ LOADLIBES = -L$(EPICS_BASE)/lib/$(HOST_ARCH) -lcas -lgdd -lca -lCom # Objects -OBJS = record.o paramRecord.o paramIntRecord.o paramStringRecord.o \ +OBJS = record.o paramRecord.o arrayDest.o paramIntRecord.o paramStringRecord.o \ paramFilenameRecord.o paramBlobRecord.o paramRecordSet.o paramServer.o ########### @@ -49,6 +49,7 @@ paramRecordSet.o: paramRecordSet.cc paramRecordSet.h \ paramRecord.h record.h record.o : record.cc record.h +arrayDest.o : arrayDest.cc arrayDest.h paramRecord.o: paramRecord.cc paramRecord.h record.h paramIntRecord.o: paramIntRecord.cc paramIntRecord.h paramRecord.h record.h paramStringRecord.o: paramStringRecord.cc paramStringRecord.h paramRecord.h \ diff --git a/allParam/ca/server/arrayDest.cc b/allParam/ca/server/arrayDest.cc new file mode 100644 index 0000000..2147a25 --- /dev/null +++ b/allParam/ca/server/arrayDest.cc @@ -0,0 +1,21 @@ +#define _POSIX_C_SOURCE 199509L + +#include + +#include "arrayDest.h" + +void ArrayDestructor::run(void *todelete) { + aitUint32 *pd = (aitUint32 *) todelete; + delete [] pd; +} + +void ArrayIntDestructor::run(void *todelete) { + aitUint32 *pd = (aitUint32 *) todelete; + delete [] pd; +} + +void ArrayStringDestructor::run(void *todelete) { + aitString *pd = (aitString *) todelete; + delete [] pd; +} + diff --git a/allParam/ca/server/arrayDest.h b/allParam/ca/server/arrayDest.h new file mode 100644 index 0000000..bee9b9b --- /dev/null +++ b/allParam/ca/server/arrayDest.h @@ -0,0 +1,19 @@ +#ifndef ARRAYDEST_H +#define ARRAYDEST_H + +#include + +class ArrayDestructor : public gddDestructor { + virtual void run(void *); +}; + +class ArrayIntDestructor : public ArrayDestructor { + virtual void run(void *); +}; + +class ArrayStringDestructor : public ArrayDestructor { + virtual void run(void *); +}; + +#endif + diff --git a/allParam/ca/server/paramBlobRecord.cc b/allParam/ca/server/paramBlobRecord.cc index f663c66..8203dda 100644 --- a/allParam/ca/server/paramBlobRecord.cc +++ b/allParam/ca/server/paramBlobRecord.cc @@ -14,6 +14,9 @@ ParamBlobRecord::ParamBlobRecord(caServer& cas, const Param *p, const char *rn, { size_t size; FILE *tmp; + + pDest = new ArrayIntDestructor; + if(Param_getBlob(param, name, idx, &size, &tmp) == 0) { index = (unsigned int) ((size - 1) / sizeof(aitUint32)) + 2; if (index > EPICS_MAX_INDEX) { @@ -89,7 +92,6 @@ caStatus ParamBlobRecord::scan() FILE *blob; size_t size; int retVal; - ArrayDestructor *pDest = new ArrayDestructor; caServer *pCAS = this->getCAS(); @@ -116,8 +118,6 @@ caStatus ParamBlobRecord::scan() this->postEvent (select, *val); } - delete pDest; - return S_cas_success; } diff --git a/allParam/ca/server/paramFilenameRecord.cc b/allParam/ca/server/paramFilenameRecord.cc index 62a51b9..b4e27b3 100644 --- a/allParam/ca/server/paramFilenameRecord.cc +++ b/allParam/ca/server/paramFilenameRecord.cc @@ -12,6 +12,8 @@ ParamFilenameRecord::ParamFilenameRecord(caServer& cas, const Param *p, const ch int rows; char *tmp[PARAM_MAX_ARRAY_LEN]; + pDest = new ArrayStringDestructor; + for (int i = 0 ; i < PARAM_MAX_ARRAY_LEN ; i++) { tmp[i] = new char[PARAM_MAX_VALUE_LEN]; } @@ -107,7 +109,6 @@ caStatus ParamFilenameRecord::scan() caServer *pCAS = this->getCAS(); int pretVal; int rows; - ArrayDestructor *pDest = new ArrayDestructor; for (int i = 0 ; i < PARAM_MAX_ARRAY_LEN ; i++) { ourValue[i] = new char[PARAM_MAX_VALUE_LEN]; @@ -147,8 +148,6 @@ caStatus ParamFilenameRecord::scan() this->postEvent (select, *val); } - delete pDest; - return retVal; } diff --git a/allParam/ca/server/paramIntRecord.cc b/allParam/ca/server/paramIntRecord.cc index fb8bb88..bbb077a 100644 --- a/allParam/ca/server/paramIntRecord.cc +++ b/allParam/ca/server/paramIntRecord.cc @@ -12,6 +12,8 @@ ParamIntRecord::ParamIntRecord(caServer& cas, const Param *p, const char *rn, co int rows; unsigned long int tmp[PARAM_MAX_ARRAY_LEN]; + pDest = new ArrayIntDestructor; + if(Param_getIntArray(param, name, idx, PARAM_MAX_ARRAY_LEN, &rows, tmp) == 0) { if ((rows == 0) || (rows == 1)) { index = 1; @@ -92,7 +94,6 @@ caStatus ParamIntRecord::scan() caServer *pCAS = this->getCAS(); int rows; int retVal; - ArrayDestructor *pDest = new ArrayDestructor; retVal = Param_getIntArray(param, name, idx, PARAM_MAX_ARRAY_LEN, &rows, ourValue); if((retVal != 0) || (rows == 0)) { @@ -126,8 +127,6 @@ caStatus ParamIntRecord::scan() this->postEvent (select, *val); } - delete pDest; - return S_cas_success; } diff --git a/allParam/ca/server/paramIntRecord.h b/allParam/ca/server/paramIntRecord.h index 518378d..3814600 100644 --- a/allParam/ca/server/paramIntRecord.h +++ b/allParam/ca/server/paramIntRecord.h @@ -2,6 +2,7 @@ #define PARAMINTRECORD_H #include "paramRecord.h" +#include "arrayDest.h" class ParamIntRecord : public ParamRecord { private: diff --git a/allParam/ca/server/paramRecord.cc b/allParam/ca/server/paramRecord.cc index 7b07378..e229d9d 100644 --- a/allParam/ca/server/paramRecord.cc +++ b/allParam/ca/server/paramRecord.cc @@ -8,11 +8,6 @@ extern "C" { #include "paramRecord.h" -void ArrayDestructor::run(void *todelete) { - aitString *pd = (aitString *) todelete; - delete [] pd; -} - ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const char *u) : Record(cas, rn, u, aitEnumString), param(p) { @@ -25,8 +20,7 @@ ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const ch strcpy(buf1, ""); strcpy(buf2, ""); strcpy(buf3, ""); - sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &tmp, buf1, buf2, buf3); - if(strcmp(buf3, "") == 0) { + if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &tmp, buf1, buf2, buf3) != 4) { strcpy(name, buf1); strcpy(idx, buf2); } else { @@ -45,6 +39,7 @@ ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const ch ParamRecord::~ParamRecord() { + delete pDest; } const char *ParamRecord::getPVName() diff --git a/allParam/ca/server/paramRecord.h b/allParam/ca/server/paramRecord.h index d595cc5..5a37f56 100644 --- a/allParam/ca/server/paramRecord.h +++ b/allParam/ca/server/paramRecord.h @@ -8,13 +8,11 @@ extern "C" { } #include "record.h" - -class ArrayDestructor : public gddDestructor { - virtual void run(void *); -}; +#include "arrayDest.h" class ParamRecord : public Record { protected: + ArrayDestructor *pDest; const Param *param; char pPVName[PARAM_MAX_VALUE_LEN]; char name[PARAM_MAX_VALUE_LEN]; diff --git a/allParam/ca/server/paramRecordSet.cc b/allParam/ca/server/paramRecordSet.cc index ad1e722..c685048 100644 --- a/allParam/ca/server/paramRecordSet.cc +++ b/allParam/ca/server/paramRecordSet.cc @@ -75,10 +75,6 @@ pvExistReturn ParamRecordSet::pvExistTest(const casCtx &ctx, const char *pPVName if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) { if (sscanf(pPVName, "HAD:P%*c:%[^:]:%[^:]:%[^:]", buf1, buf2, buf3) != 3) { -#if 0 - sscanf(pPVName, "HAD:P%*c:%[^:]:%[^:]:%[^:]", buf1, buf2, buf3); - if (strcmp(buf3, "") == 0) { -#endif setup = NULL; } else { setup = buf1; @@ -124,10 +120,6 @@ pvCreateReturn ParamRecordSet::createPV(const casCtx &ctx, const char *pPVName) if(strncmp(pPVName, "HAD:P", strlen("HAD:P")) == 0) { if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3) != 4) { -#if 0 - sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &type, buf1, buf2, buf3); - if (strcmp(buf3, "") == 0) { -#endif setup = NULL; } else { setup = buf1; diff --git a/allParam/ca/server/paramRecordSet.h b/allParam/ca/server/paramRecordSet.h index cf72ddf..16830a1 100644 --- a/allParam/ca/server/paramRecordSet.h +++ b/allParam/ca/server/paramRecordSet.h @@ -9,7 +9,7 @@ extern "C" { #include "paramRecord.h" -#define MAX_PARAM_SRC 16 +#define MAX_PARAM_SRC 128 #define MAX_NUM_PV 1024 class ParamRecordSet : public caServer { diff --git a/allParam/ca/server/paramStringRecord.cc b/allParam/ca/server/paramStringRecord.cc index ab0cc66..fe40569 100644 --- a/allParam/ca/server/paramStringRecord.cc +++ b/allParam/ca/server/paramStringRecord.cc @@ -12,6 +12,8 @@ ParamStringRecord::ParamStringRecord(caServer& cas, const Param *p, const char * int rows; char *tmp[PARAM_MAX_ARRAY_LEN]; + pDest = new ArrayStringDestructor; + for (int i = 0 ; i < PARAM_MAX_ARRAY_LEN ; i++) { tmp[i] = new char[PARAM_MAX_VALUE_LEN]; } @@ -108,7 +110,6 @@ caStatus ParamStringRecord::scan() caServer *pCAS = this->getCAS(); int pretVal; int rows; - ArrayDestructor *pDest = new ArrayDestructor; for (int i = 0 ; i < PARAM_MAX_ARRAY_LEN ; i++) { ourValue[i] = new char[PARAM_MAX_VALUE_LEN]; @@ -133,7 +134,7 @@ caStatus ParamStringRecord::scan() val = new gddAtomic(gddAppType_value, aitEnumString, 1, index); - val->putRef(stringValue); + val->putRef(stringValue, pDest); retVal = S_casApp_success; } @@ -142,18 +143,14 @@ caStatus ParamStringRecord::scan() delete [] ourValue[i]; } -#if 0 val->setStat(epicsAlarmNone); val->setSevr(epicsSevNone); -#endif if (this->interest == aitTrue && pCAS != NULL) { casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask); this->postEvent (select, *val); } - delete pDest; - return retVal; } -- 2.43.0