From 47fd2ba86c1af053a9db19fd391a519253fb9f4c Mon Sep 17 00:00:00 2001 From: "Janet B. Anderson" Date: Thu, 9 May 1991 08:44:37 +0000 Subject: [PATCH] mrk changes to fix sync of val,stat,sevr --- src/db/dbEvent.c | 50 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) diff --git a/src/db/dbEvent.c b/src/db/dbEvent.c index 2508c404c..7b397db7e 100644 --- a/src/db/dbEvent.c +++ b/src/db/dbEvent.c @@ -332,21 +332,47 @@ db_event_get_field(paddr, buffer_type, pbuffer, no_elements, pfl) db_field_log *pfl; { int status; + char * pfield_save; - status = db_get_field(paddr,buffer_type,pbuffer,no_elements); - - if (pfl == NULL) return(status); - if (buffer_type >= DBR_STS_STRING && buffer_type <= DBR_CTRL_DOUBLE) { - struct dbr_sts_string *pstatus = (struct dbr_sts_string *) pbuffer; - pstatus->status = pfl->stat; - pstatus->severity = pfl->sevr; + if(no_elements>1) return(db_get_field(paddr,buffer_type,pbuffer,no_elements)); + pfield_save = paddr->pfield; + if(buffer_type>=DBR_INT && buffer_type<=DBR_DOUBLE) { + if(pfl!=NULL)paddr->pfield = (char *)(&pfl->field); + status = db_get_field(paddr,buffer_type,pbuffer,no_elements); + paddr->pfield = pfield_save; + return(status); } - if (buffer_type >= DBR_TIME_STRING && buffer_type <= DBR_TIME_DOUBLE) { - struct dbr_time_string *ptime = (struct dbr_time_string *) pbuffer; - ptime->stamp = pfl->time; - } - return(status); + if(buffer_type>=DBR_STS_INT && buffer_type<=DBR_STS_DOUBLE) { + struct dbr_sts_int *ps = (struct dbr_sts_int *)pbuffer; + short request_type = buffer_type - DBR_STS_STRING; + if(pfl!=NULL) { + ps->status = pfl->stat; + ps->severity = pfl->sevr; + paddr->pfield = (char *)(&pfl->field); + status=db_get_field(paddr,request_type,&ps->value,no_elements); + paddr->pfield = pfield_save; + return(status); + } + return(db_get_field(paddr,buffer_type,pbuffer,no_elements)); + } + if(buffer_type>=DBR_TIME_INT && buffer_type<=DBR_TIME_DOUBLE) { + struct dbr_time_short *ps = (struct dbr_time_short *)pbuffer; + short request_type = buffer_type - DBR_TIME_STRING; + + if(pfl!=NULL) { + ps->status = pfl->stat; + ps->severity = pfl->sevr; + ps->stamp = pfl->time; + paddr->pfield = (char *)(&pfl->field); + status=db_get_field(paddr,request_type,&ps->value,no_elements); + paddr->pfield = pfield_save; + return(status); + } + return(db_get_field(paddr,buffer_type,pbuffer,no_elements)); + } + + return(db_get_field(paddr,buffer_type,pbuffer,no_elements)); }