diff --git a/modules/database/src/ioc/db/dbConstLink.c b/modules/database/src/ioc/db/dbConstLink.c index 282493992..c05915717 100644 --- a/modules/database/src/ioc/db/dbConstLink.c +++ b/modules/database/src/ioc/db/dbConstLink.c @@ -27,6 +27,7 @@ #include "dbFldTypes.h" #include "dbLink.h" #include "link.h" +#include "errlog.h" /**************************** Convert functions ****************************/ @@ -178,17 +179,23 @@ static long dbConstLoadLS(struct link *plink, char *pbuffer, epicsUInt32 size, epicsUInt32 *plen) { const char *pstr = plink->value.constantStr; + long status; if (!pstr) return S_db_badField; - return dbLSConvertJSON(pstr, pbuffer, size, plen); + status = dbLSConvertJSON(pstr, pbuffer, size, plen); + if (status) + errlogPrintf("... while parsing link %s.%s %s\n", + plink->precord->name, dbLinkFieldName(plink), pstr); + return status; } static long dbConstLoadArray(struct link *plink, short dbrType, void *pbuffer, long *pnReq) { const char *pstr = plink->value.constantStr; + long status; if (!pstr) return S_db_badField; @@ -197,7 +204,11 @@ static long dbConstLoadArray(struct link *plink, short dbrType, void *pbuffer, if (dbrType == DBF_MENU || dbrType == DBF_ENUM || dbrType == DBF_DEVICE) dbrType = DBF_USHORT; - return dbPutConvertJSON(pstr, dbrType, pbuffer, pnReq); + status = dbPutConvertJSON(pstr, dbrType, pbuffer, pnReq); + if (status) + errlogPrintf("... while parsing link %s.%s %s\n", + plink->precord->name, dbLinkFieldName(plink), pstr); + return status; } static long dbConstGetNelements(const struct link *plink, long *nelements) diff --git a/modules/database/src/ioc/db/dbConvertJSON.c b/modules/database/src/ioc/db/dbConvertJSON.c index 2f54aa0d9..f4bc81940 100644 --- a/modules/database/src/ioc/db/dbConvertJSON.c +++ b/modules/database/src/ioc/db/dbConvertJSON.c @@ -162,6 +162,11 @@ long dbPutConvertJSON(const char *json, short dbrType, if(INVALID_DB_REQ(dbrType)) return S_db_badDbrtype; + if (!jlen) { + *pnRequest = 0; + return 0; + } + parser->depth = 0; parser->dbrType = dbrType; parser->dbrSize = dbValueSize(dbrType); @@ -186,7 +191,7 @@ long dbPutConvertJSON(const char *json, short dbrType, case yajl_status_error: { unsigned char *err = yajl_get_error(yh, 1, (const unsigned char *) json, jlen); - fprintf(stderr, "dbConvertJSON: %s\n", err); + errlogPrintf("dbConvertJSON: %s\n", err); yajl_free_error(yh, err); } /* fall through */ @@ -242,7 +247,7 @@ long dbLSConvertJSON(const char *json, char *pdest, epicsUInt32 size, case yajl_status_error: { unsigned char *err = yajl_get_error(yh, 1, (const unsigned char *) json, jlen); - fprintf(stderr, "dbLoadLS_JSON: %s\n", err); + errlogPrintf("dbLoadLS_JSON: %s\n", err); yajl_free_error(yh, err); } /* fall through */