Patches for max array size determination as suggested by Malcolm Waters (Diamond).

This commit is contained in:
Ralph Lange
2006-06-07 07:24:19 +00:00
parent 2bed5dd8bf
commit 402d22eac6
2 changed files with 19 additions and 13 deletions

View File

@@ -167,11 +167,14 @@ int caget (pv *pvs, int nPvs, RequestT request, OutputT format,
}
}
/* Adjust array count */
if (reqElems == 0 || pvs[n].nElems < reqElems)
reqElems = pvs[n].nElems;
/* Remember dbrType and reqElems */
if (reqElems == 0 || pvs[n].nElems < reqElems){
pvs[n].reqElems = pvs[n].nElems; /* Use full number of points */
} else {
pvs[n].reqElems = reqElems; /* Limit to specified number */
}
/* Remember dbrType */
pvs[n].dbrType = dbrType;
pvs[n].reqElems = reqElems;
/* Issue CA request */
/* ---------------- */
@@ -183,15 +186,15 @@ int caget (pv *pvs, int nPvs, RequestT request, OutputT format,
if (request == callback)
{ /* Event handler will allocate value */
result = ca_array_get_callback(dbrType,
reqElems,
pvs[n].reqElems,
pvs[n].chid,
event_handler,
(void*)&pvs[n]);
} else {
/* Allocate value structure */
pvs[n].value = calloc(1, dbr_size_n(dbrType, reqElems));
pvs[n].value = calloc(1, dbr_size_n(dbrType, pvs[n].reqElems));
result = ca_array_get(dbrType,
reqElems,
pvs[n].reqElems,
pvs[n].chid,
pvs[n].value);
}

View File

@@ -131,11 +131,14 @@ void connection_handler ( struct connection_handler_args args )
dbrType = DBR_TIME_STRING;
}
/* Adjust array count */
if (reqElems == 0 || ppv->nElems < reqElems)
reqElems = ppv->nElems;
/* Remember dbrType and reqElems */
if (reqElems == 0 || ppv->nElems < reqElems){
ppv->reqElems = ppv->nElems; /* Use full number of points */
} else {
ppv->reqElems = reqElems; /* Limit to specified number */
}
/* Remember dbrType */
ppv->dbrType = dbrType;
ppv->reqElems = reqElems;
ppv->onceConnected = 1;
nConn++;
@@ -144,10 +147,10 @@ void connection_handler ( struct connection_handler_args args )
/* install monitor once with first connect */
if ( ! ppv->value ) {
/* Allocate value structure */
ppv->value = calloc(1, dbr_size_n(dbrType, reqElems));
ppv->value = calloc(1, dbr_size_n(dbrType, ppv->reqElems));
if ( ppv->value ) {
ppv->status = ca_create_subscription(dbrType,
reqElems,
ppv->reqElems,
ppv->chid,
eventMask,
event_handler,