str-to-enum.patch applied

This commit is contained in:
zimoch
2012-03-20 10:29:50 +00:00
parent c4b3eb98c2
commit 159c738e9e
4 changed files with 84 additions and 9 deletions

View File

@@ -416,7 +416,7 @@ static long getCharChar(
char *pbuffer = (char *)pto;
char *psrc=(char *)(paddr->pfield);
if (paddr->pfldDes->field_type == DBF_STRING) {
if (paddr->pfldDes && paddr->pfldDes->field_type == DBF_STRING) {
pbuffer[--nRequest] = 0;
if (nRequest == 0) return(0);
}
@@ -440,7 +440,7 @@ static long getCharUchar(
unsigned char *pbuffer = (unsigned char *)pto;
char *psrc=(char *)(paddr->pfield);
if (paddr->pfldDes->field_type == DBF_STRING) {
if (paddr->pfldDes && paddr->pfldDes->field_type == DBF_STRING) {
pbuffer[--nRequest] = 0;
if (nRequest == 0) return(0);
}
@@ -2594,7 +2594,7 @@ static long putStringEnum(
status = (*prset->get_enum_strs)(paddr,&enumStrs);
if(!status) {
nchoices = enumStrs.no_str;
nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nchoices) {
*pfield = ind;
return(0);
@@ -2643,7 +2643,7 @@ static long putStringMenu(
return(0);
}
}
nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nChoice) {
*pfield = ind;
return(0);
@@ -2681,7 +2681,7 @@ static long putStringDevice(
return(0);
}
}
nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nChoice) {
*pfield = ind;
return(0);

View File

@@ -272,7 +272,7 @@ static long cvt_st_e(
status = (*prset->get_enum_strs)(paddr,&enumStrs);
if(!status) {
nchoices = enumStrs.no_str;
nargs = sscanf(from," %u %n",&ind,&nchars);
nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nchoices) {
*pfield = ind;
return(0);
@@ -315,7 +315,7 @@ static long cvt_st_menu(
return(0);
}
}
nargs = sscanf(from," %u %n",&ind,&nchars);
nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
*to = ind;
return(0);
@@ -347,7 +347,7 @@ static long cvt_st_device(
return(0);
}
}
nargs = sscanf(from," %u %n",&ind,&nchars);
nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
*to = ind;
return(0);

View File

@@ -317,7 +317,7 @@ long epicsShareAPI dbpf(const char *pname,const char *pvalue)
if (nameToAddr(pname, &addr)) return -1;
/* For enumerated types must allow for ENUM rather than string*/
/* If entire field is digits then use DBR_ENUM else DBR_STRING*/
if (addr.dbr_field_type == DBR_ENUM && !*pvalue &&
if (addr.dbr_field_type == DBR_ENUM && *pvalue &&
strspn(pvalue,"0123456789") == strlen(pvalue)) {
unsigned short value;

75
str-to-enum.patch Normal file
View File

@@ -0,0 +1,75 @@
=== modified file 'src/db/dbConvert.c'
--- src/db/dbConvert.c 2012-01-11 22:47:37 +0000
+++ src/db/dbConvert.c 2012-01-26 23:05:05 +0000
@@ -2600,7 +2600,7 @@
status = (*prset->get_enum_strs)(paddr,&enumStrs);
if(!status) {
nchoices = enumStrs.no_str;
- nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
+ nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nchoices) {
*pfield = ind;
return(0);
@@ -2649,7 +2649,7 @@
return(0);
}
}
- nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
+ nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nChoice) {
*pfield = ind;
return(0);
@@ -2687,7 +2687,7 @@
return(0);
}
}
- nargs = sscanf(pbuffer," %u %n",&ind,&nchars);
+ nargs = sscanf(pbuffer,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(pbuffer) && ind<nChoice) {
*pfield = ind;
return(0);
=== modified file 'src/db/dbFastLinkConv.c'
--- src/db/dbFastLinkConv.c 2010-10-05 19:27:37 +0000
+++ src/db/dbFastLinkConv.c 2012-01-26 23:05:11 +0000
@@ -272,7 +272,7 @@
status = (*prset->get_enum_strs)(paddr,&enumStrs);
if(!status) {
nchoices = enumStrs.no_str;
- nargs = sscanf(from," %u %n",&ind,&nchars);
+ nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nchoices) {
*pfield = ind;
return(0);
@@ -315,7 +315,7 @@
return(0);
}
}
- nargs = sscanf(from," %u %n",&ind,&nchars);
+ nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
*to = ind;
return(0);
@@ -347,7 +347,7 @@
return(0);
}
}
- nargs = sscanf(from," %u %n",&ind,&nchars);
+ nargs = sscanf(from,"%u%n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nChoice) {
*to = ind;
return(0);
=== modified file 'src/db/dbTest.c'
--- src/db/dbTest.c 2010-10-05 19:27:37 +0000
+++ src/db/dbTest.c 2012-01-26 21:34:42 +0000
@@ -317,7 +317,7 @@
if (nameToAddr(pname, &addr)) return -1;
/* For enumerated types must allow for ENUM rather than string*/
/* If entire field is digits then use DBR_ENUM else DBR_STRING*/
- if (addr.dbr_field_type == DBR_ENUM && !*pvalue &&
+ if (addr.dbr_field_type == DBR_ENUM && *pvalue &&
strspn(pvalue,"0123456789") == strlen(pvalue)) {
unsigned short value;