Changed dbtpf so it only accepts valid strings for numberic types

This commit is contained in:
Marty Kraimer
1993-08-04 12:51:44 +00:00
parent db1387f9c5
commit cbcd4f9a72

View File

@@ -462,6 +462,7 @@ long dbtpf(char *pname,char *pvalue)
TAB_BUFFER *pMsgBuff = &msg_Buff;
char *pmsg = pMsgBuff->message;
int tab_size;
int validNumber;
tab_size = 10;
@@ -482,7 +483,8 @@ long dbtpf(char *pname,char *pvalue)
printBuffer(status,addr.dbr_field_type,pbuffer,0L,0L,no_elements,pMsgBuff,tab_size);
}
/* DBR_CHAR */
if(sscanf(pvalue,"%hd",&svalue)==1) {
validNumber=(strspn(pvalue,"0123456789+-eE. ")==strlen(pvalue))?TRUE:FALSE;
if(validNumber && sscanf(pvalue,"%hd",&svalue)==1) {
cvalue = (char)svalue;
status=dbPutField(&addr,DBR_CHAR,&cvalue,1L);
if(status!=0) errMessage(status,"DBR_UCHAR failed");
@@ -496,7 +498,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_CHAR\n");
/* DBR_UCHAR */
if(sscanf(pvalue,"%hu",&usvalue)==1) {
if(validNumber && sscanf(pvalue,"%hu",&usvalue)==1) {
ucvalue = (unsigned char)usvalue;
status=dbPutField(&addr,DBR_UCHAR,&ucvalue,1L);
if(status!=0) errMessage(status,"DBR_UCHAR failed");
@@ -510,7 +512,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_UCHAR\n");
/* DBR_SHORT */
if(sscanf(pvalue,"%hd",&svalue)==1) {
if(validNumber && sscanf(pvalue,"%hd",&svalue)==1) {
status=dbPutField(&addr,DBR_SHORT,&svalue,1L);
if(status!=0) errMessage(status,"DBR_SHORT failed");
else {
@@ -523,7 +525,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_SHORT\n");
/* DBR_USHORT */
if(sscanf(pvalue,"%hu",&usvalue)==1) {
if(validNumber && sscanf(pvalue,"%hu",&usvalue)==1) {
status=dbPutField(&addr,DBR_USHORT,&usvalue,1L);
if(status!=0) errMessage(status,"DBR_USHORT failed");
else {
@@ -536,7 +538,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_USHORT\n");
/* DBR_LONG */
if(sscanf(pvalue,"%ld",&lvalue)==1) {
if(validNumber && sscanf(pvalue,"%ld",&lvalue)==1) {
status=dbPutField(&addr,DBR_LONG,&lvalue,1L);
if(status!=0) errMessage(status,"DBR_LONG failed");
else {
@@ -549,7 +551,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_LONG\n");
/* DBR_ULONG */
if(sscanf(pvalue,"%lu",&ulvalue)==1) {
if(validNumber && sscanf(pvalue,"%lu",&ulvalue)==1) {
status=dbPutField(&addr,DBR_ULONG,&ulvalue,1L);
if(status!=0) errMessage(status,"DBR_ULONG failed");
else {
@@ -562,7 +564,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_ULONG\n");
/* DBR_FLOAT */
if(sscanf(pvalue,"%e",&fvalue)==1) {
if(validNumber && sscanf(pvalue,"%e",&fvalue)==1) {
status=dbPutField(&addr,DBR_FLOAT,&fvalue,1L);
if(status!=0) errMessage(status,"DBR_FLOAT failed");
else {
@@ -575,7 +577,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_FLOAT\n");
/* DBR_DOUBLE */
if(sscanf(pvalue,"%le",&dvalue)==1) {
if(validNumber && sscanf(pvalue,"%le",&dvalue)==1) {
status=dbPutField(&addr,DBR_DOUBLE,&dvalue,1L);
if(status!=0) errMessage(status,"DBR_DOUBLE failed");
else {
@@ -588,7 +590,7 @@ long dbtpf(char *pname,char *pvalue)
}
} else printf("sscanf failed for DBR_DOUBLE\n");
/* DBR_ENUM */
if(sscanf(pvalue,"%hu",&svalue)==1) {
if(validNumber && sscanf(pvalue,"%hu",&svalue)==1) {
status=dbPutField(&addr,DBR_ENUM,&svalue,1L);
if(status!=0) errMessage(status,"DBR_ENUM failed");
else {