Merge changes from 3.15 branch, to revno 12701

This commit is contained in:
Andrew Johnson
2015-08-20 11:24:07 -05:00
5 changed files with 64 additions and 48 deletions
+6 -6
View File
@@ -1255,20 +1255,20 @@ long dbPut(DBADDR *paddr, short dbrType,
status = dbPutConvertRoutine[dbrType][field_type](paddr, pbuffer,
nRequest, no_elements, offset);
}
if (status) goto done;
/* update array info */
if (paddr->pfldDes->special == SPC_DBADDR &&
if (!status &&
paddr->pfldDes->special == SPC_DBADDR &&
prset && prset->put_array_info) {
status = prset->put_array_info(paddr, nRequest);
}
if (status) goto done;
/* check if special processing is required */
/* Always do special processing if needed */
if (special) {
status = dbPutSpecial(paddr,1);
if (status) goto done;
long status2 = dbPutSpecial(paddr, 1);
if (status2) goto done;
}
if (status) goto done;
/* Propagate monitor events for this field, */
/* unless the field is VAL and PP is true. */
+1 -11
View File
@@ -334,7 +334,6 @@ long dbpf(const char *pname,const char *pvalue)
{
DBADDR addr;
long status;
epicsUInt16 value;
short dbrType;
size_t n = 1;
@@ -346,16 +345,7 @@ long 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 &&
strspn(pvalue,"0123456789") == strlen(pvalue)) {
sscanf(pvalue, "%hu", &value);
pvalue = (char *) &value;
dbrType = DBR_ENUM;
}
else if (addr.no_elements > 1 &&
if (addr.no_elements > 1 &&
(addr.dbr_field_type == DBR_CHAR || addr.dbr_field_type == DBR_UCHAR)) {
dbrType = addr.dbr_field_type;
n = strlen(pvalue) + 1;
+8 -3
View File
@@ -1099,14 +1099,19 @@ long dbGetAttributePart(DBENTRY *pdbentry, const char **ppname)
const char *pname = *ppname;
dbRecordAttribute *pattribute;
if (!precordType) return S_dbLib_recordTypeNotFound;
if (!precordType)
return S_dbLib_recordTypeNotFound;
pattribute = (dbRecordAttribute *)ellFirst(&precordType->attributeList);
while (pattribute) {
size_t nameLen = strlen(pattribute->name);
int compare = strncmp(pattribute->name, pname, nameLen);
int ch = pname[nameLen];
if (compare == 0) {
if (!(ch == '_' || isalnum(ch))) {
int ch = pname[nameLen];
if (ch != '_' && !isalnum(ch)) {
/* Any other character can't be in the attribute name */
pdbentry->pflddes = pattribute->pdbFldDes;
pdbentry->pfield = pattribute->value;
*ppname = &pname[nameLen];