diff --git a/src/db/dbAccess.c b/src/db/dbAccess.c index 5d8013b48..37297d726 100644 --- a/src/db/dbAccess.c +++ b/src/db/dbAccess.c @@ -37,6 +37,7 @@ * Fixed bug in special processing of SPC_MOD (100) * .07 12-02-91 jba Writing to PROC will always force record process * .08 02-05-92 jba Changed function arguments from paddr to precord + * .09 03-02-92 jba Added function dbrValueSize to replace db_value_size */ /* This is a major revision of the original implementation of database access.*/ @@ -98,15 +99,21 @@ * long options; * long no_elements; * returns: number of bytes as a long + * + * dbrValueSize(dbr_type) + * short dbr_type; + * returns: sizeof DBR request type as a long */ #include #include #include #include -#include -#include +#include +#include #include +#include +#include #include #include @@ -318,7 +325,7 @@ long dbNameToAddr(pname,paddr) } *precName = 0; if (pvdGetRec(&recName[0],&(paddr->record_type),&record_number) < 0){ - (long)(paddr->precord) = -1; + paddr->precord = (void *)-1; paddr->record_type = -1; return(S_db_notFound); } @@ -332,7 +339,7 @@ long dbNameToAddr(pname,paddr) } if (!(pfldDes=pvdGetFld(paddr->record_type,pfieldName))){ paddr->field_type = -1; - (long)(paddr->pfield) = -1; + paddr->pfield = (void *)-1; paddr->field_size = -1; return(S_db_notFound); } @@ -438,6 +445,26 @@ long dbPutField( dbScanUnlock(paddr->precord); return(status); } + +long dbrValueSize( + short dbr_type +) +{ + /* sizes for value associated with each DBR request type */ + static long size[] = { + MAX_STRING_SIZE, /* STRING */ + sizeof(char), /* CHAR */ + sizeof(unsigned char), /* UCHAR */ + sizeof(short), /* SHORT */ + sizeof(unsigned short), /* USHORT */ + sizeof(long), /* LONG */ + sizeof(unsigned long), /* ULONG */ + sizeof(float), /* FLOAT */ + sizeof(double), /* DOUBLE */ + sizeof(unsigned short)}; /* ENUM */ + + return(size[dbr_type]); +} long dbBufferSize( short dbr_type, @@ -447,7 +474,7 @@ long dbBufferSize( { long nbytes=0; - nbytes += dbr_value_size[dbr_type] * no_elements; + nbytes += dbrValueSize(dbr_type) * no_elements; if(options & DBR_STATUS) nbytes += dbr_status_size; if(options & DBR_UNITS) nbytes += dbr_units_size; if(options & DBR_PRECISION) nbytes += dbr_precision_size; @@ -3016,7 +3043,7 @@ void *pflin if( prset && prset->get_units ){ (*prset->get_units)(paddr,pbuffer); } else { - bzero(pbuffer,dbr_units_size); + memset(pbuffer,'\0',dbr_units_size); *options = (*options) ^ DBR_UNITS; /*Turn off DBR_UNITS*/ } pbuffer += dbr_units_size; @@ -3029,7 +3056,7 @@ void *pflin if(pdbr_precision->field_width<=0) pdbr_precision->field_width = pdbr_precision->precision + 5; } else { - bzero(pbuffer,dbr_precision_size); + memset(pbuffer,'\0',dbr_precision_size); *options = (*options) ^ DBR_PRECISION; /*Turn off DBR_PRECISION*/ } pbuffer += dbr_precision_size; @@ -3083,7 +3110,7 @@ GET_DATA: if(pfl!=NULL) { struct dbAddr localAddr; - bcopy(paddr,&localAddr,sizeof(localAddr)); + memcpy(&localAddr,paddr,sizeof(localAddr)); /*Use longest field size*/ localAddr.pfield = (char *)&pfl->field; status=(*pconvert_routine)(&localAddr,pbuffer,*nRequest, @@ -3112,7 +3139,7 @@ long *options; struct dbr_enumStrs *pdbr_enumStrs=(struct dbr_enumStrs*)(*ppbuffer); int i; - bzero(pdbr_enumStrs,dbr_enumStrs_size); + memset(pdbr_enumStrs,'\0',dbr_enumStrs_size); switch(field_type) { case DBF_ENUM: if( prset && prset->get_enum_strs ) { @@ -3185,10 +3212,8 @@ char **ppbuffer; struct rset *prset; long *options; { - short field_type=paddr->field_type; struct dbr_grDouble grd; int got_data=FALSE; - long ltemp;/*vxWorks does not support double to unsigned long*/ if( prset && prset->get_graphic_double ) { (*prset->get_graphic_double)(paddr,&grd); @@ -3202,7 +3227,7 @@ long *options; pgr->upper_disp_limit = grd.upper_disp_limit; pgr->lower_disp_limit = grd.lower_disp_limit; } else { - bzero(pbuffer,dbr_grLong_size); + memset(pbuffer,'\0',dbr_grLong_size); *options = (*options) ^ DBR_GR_LONG; /*Turn off option*/ } *ppbuffer += dbr_grLong_size; @@ -3215,7 +3240,7 @@ long *options; pgr->upper_disp_limit = grd.upper_disp_limit; pgr->lower_disp_limit = grd.lower_disp_limit; } else { - bzero(pbuffer,dbr_grDouble_size); + memset(pbuffer,'\0',dbr_grDouble_size); *options = (*options) ^ DBR_GR_DOUBLE; /*Turn off option*/ } *ppbuffer += dbr_grDouble_size; @@ -3229,10 +3254,8 @@ char **ppbuffer; struct rset *prset; long *options; { - short field_type=paddr->field_type; struct dbr_ctrlDouble ctrld; int got_data=FALSE; - long ltemp;/*vxWorks does not support double to unsigned long*/ if( prset && prset->get_control_double ) { (*prset->get_control_double)(paddr,&ctrld); @@ -3246,7 +3269,7 @@ long *options; pctrl->upper_ctrl_limit = ctrld.upper_ctrl_limit; pctrl->lower_ctrl_limit = ctrld.lower_ctrl_limit; } else { - bzero(pbuffer,dbr_ctrlLong_size); + memset(pbuffer,'\0',dbr_ctrlLong_size); *options = (*options) ^ DBR_CTRL_LONG; /*Turn off option*/ } *ppbuffer += dbr_ctrlLong_size; @@ -3259,7 +3282,7 @@ long *options; pctrl->upper_ctrl_limit = ctrld.upper_ctrl_limit; pctrl->lower_ctrl_limit = ctrld.lower_ctrl_limit; } else { - bzero(pbuffer,dbr_ctrlDouble_size); + memset(pbuffer,'\0',dbr_ctrlDouble_size); *options = (*options) ^ DBR_CTRL_DOUBLE; /*Turn off option*/ } *ppbuffer += dbr_ctrlDouble_size; @@ -3273,10 +3296,8 @@ char **ppbuffer; struct rset *prset; long *options; { - short field_type=paddr->field_type; struct dbr_alDouble ald; int got_data=FALSE; - long ltemp;/*vxWorks does not support double to unsigned long*/ if( prset && prset->get_alarm_double ) { (*prset->get_alarm_double)(paddr,&ald); @@ -3292,7 +3313,7 @@ long *options; pal->lower_warning_limit = ald.lower_warning_limit; pal->lower_alarm_limit = ald.lower_alarm_limit; } else { - bzero(pbuffer,dbr_alLong_size); + memset(pbuffer,'\0',dbr_alLong_size); *options = (*options) ^ DBR_AL_LONG; /*Turn off option*/ } *ppbuffer += dbr_alLong_size; @@ -3307,7 +3328,7 @@ long *options; pal->lower_warning_limit = ald.lower_warning_limit; pal->lower_alarm_limit = ald.lower_alarm_limit; } else { - bzero(pbuffer,dbr_alDouble_size); + memset(pbuffer,'\0',dbr_alDouble_size); *options = (*options) ^ DBR_AL_DOUBLE; /*Turn off option*/ } *ppbuffer += dbr_alDouble_size;