str_t_e did not allow for numeric value

This commit is contained in:
Marty Kraimer
1997-02-05 19:27:31 +00:00
parent a16f99b8d0
commit 6f6e34dced
+33 -10
View File
@@ -270,17 +270,40 @@ static long cvt_st_e(
unsigned short *to,
struct dbAddr *paddr)
{
struct rset *prset = 0;
long status;
struct rset *prset = 0;
long status;
unsigned short *pfield= (unsigned short*)(paddr->pfield);
unsigned int nchoices,ind;
int nargs,nchars;
struct dbr_enumStrs enumStrs;
if(paddr) prset = dbGetRset(paddr);
if (prset && prset->put_enum_str)
return (*prset->put_enum_str)(paddr, from);
status = S_db_noRSET;
recGblRecSupError(status, paddr, "dbPutField", "put_enum_str");
return(S_db_badDbrtype);
if(paddr && (prset=dbGetRset(paddr))
&& (prset->put_enum_str)) {
status = (*prset->put_enum_str)(paddr,from);
if(!status) return(0);
if(prset->get_enum_strs) {
status = (*prset->get_enum_strs)(paddr,&enumStrs);
if(!status) {
nchoices = enumStrs.no_str;
nargs = sscanf(from," %u %n",&ind,&nchars);
if(nargs==1 && nchars==strlen(from) && ind<nchoices) {
*pfield = ind;
return(0);
}
status = S_db_badChoice;
}
}else {
status=S_db_noRSET;
}
} else {
status=S_db_noRSET;
}
if(status == S_db_noRSET) {
recGblRecSupError(status,paddr,"dbPutField","put_enum_str");
} else {
recGblRecordError(status,(void *)paddr->precord,from);
}
return(status);
}
/* Convert String to Menu */