From 846b884eb55267e5fb678b6f958152df16c51dd2 Mon Sep 17 00:00:00 2001 From: Dirk Zimoch Date: Tue, 21 Aug 2018 16:03:03 +0200 Subject: [PATCH] fix (and simplify) reading strings into waveform, aai, aao, lsi, lso --- src/devaaiStream.c | 10 ++-------- src/devaaoStream.c | 10 ++-------- src/devlsiStream.c | 27 ++++++++++++--------------- src/devlsoStream.c | 21 ++++++++++----------- src/devwaveformStream.c | 10 ++-------- 5 files changed, 28 insertions(+), 50 deletions(-) diff --git a/src/devaaiStream.c b/src/devaaiStream.c index 451cdd7..a8164bf 100644 --- a/src/devaaiStream.c +++ b/src/devaaiStream.c @@ -116,17 +116,11 @@ static long readData(dbCommon *record, format_t *format) if ((length = streamScanfN(record, format, (char *)aai->bptr, aai->nelm)) == ERROR) { - memset(aai->bptr, 0, aai->nelm); return ERROR; } - if (lval < (ssize_t)aai->nelm) + if (length < (ssize_t)aai->nelm) { - memset(((char*)aai->bptr)+lval , 0, aai->nelm-lval); - lval++; - } - else - { - ((char*)aai->bptr)[aai->nelm-1] = 0; + ((char*)aai->bptr)[length] = 0; } aai->nord = (long)length; return OK; diff --git a/src/devaaoStream.c b/src/devaaoStream.c index 86d964b..affdd8c 100644 --- a/src/devaaoStream.c +++ b/src/devaaoStream.c @@ -108,22 +108,16 @@ static long readData(dbCommon *record, format_t *format) case DBF_CHAR: case DBF_UCHAR: { - ssize_t length; + ssize_t length; aao->nord = 0; if ((length = streamScanfN(record, format, (char *)aao->bptr, aao->nelm)) == ERROR) { - memset(aao->bptr, 0, aao->nelm); return ERROR; } if (length < (ssize_t)aao->nelm) { - memset(((char*)aao->bptr)+lval , 0, aao->nelm-lval); - lval++; - } - else - { - ((char*)aao->bptr)[aao->nelm-1] = 0; + ((char*)aao->bptr)[length] = 0; } aao->nord = (long)length; goto end_no_check; diff --git a/src/devlsiStream.c b/src/devlsiStream.c index d0eec1e..bf1a3a2 100644 --- a/src/devlsiStream.c +++ b/src/devlsiStream.c @@ -23,30 +23,27 @@ static long readData(dbCommon *record, format_t *format) { lsiRecord *lsi = (lsiRecord *)record; + ssize_t length; - if (format->type == DBF_STRING) + if (format->type != DBF_STRING) return ERROR; + if ((length = streamScanfN(record, format, lsi->val, (long)lsi->sizv)) == ERROR) { - long len; - if ((len = streamScanfN(record, format, lsi->val, lsi->sizv) == ERROR)) - { - lsi->len = 0; - return ERROR; - } - lsi->len = len; - return OK; + return ERROR; } - return ERROR; + if (length < (ssize_t)lsi->sizv) + { + lsi->val[length] = 0; + } + lsi->len = length; + return OK; } static long writeData(dbCommon *record, format_t *format) { lsiRecord *lsi = (lsiRecord *)record; - if (format->type == DBF_STRING) - { - return streamPrintf(record, format, lsi->val); - } - return ERROR; + if (format->type != DBF_STRING) return ERROR; + return streamPrintf(record, format, lsi->val); } static long initRecord(dbCommon *record) diff --git a/src/devlsoStream.c b/src/devlsoStream.c index c95ef55..be5e3c9 100644 --- a/src/devlsoStream.c +++ b/src/devlsoStream.c @@ -24,17 +24,19 @@ static long readData(dbCommon *record, format_t *format) { lsoRecord *lso = (lsoRecord *)record; - long len; + ssize_t length; unsigned short monitor_mask; - if (format->type != DBF_STRING) - return ERROR; - if ((len = streamScanfN(record, format, lso->val, lso->sizv) == ERROR)) + if (format->type != DBF_STRING) return ERROR; + if ((length = streamScanfN(record, format, lso->val, lso->sizv)) == ERROR) { - lso->len = 0; return ERROR; } - lso->len = len; + if (length < (ssize_t)lso->sizv) + { + lso->val[length] = 0; + } + lso->len = length; if (record->pact) return OK; /* In @init handler, no processing, enforce monitor updates. */ monitor_mask = recGblResetAlarms(record); @@ -60,11 +62,8 @@ static long writeData(dbCommon *record, format_t *format) { lsoRecord *lso = (lsoRecord *)record; - if (format->type == DBF_STRING) - { - return streamPrintf(record, format, lso->val); - } - return ERROR; + if (format->type != DBF_STRING) return ERROR; + return streamPrintf(record, format, lso->val); } static long initRecord(dbCommon *record) diff --git a/src/devwaveformStream.c b/src/devwaveformStream.c index 1bb63c5..8a68ca5 100644 --- a/src/devwaveformStream.c +++ b/src/devwaveformStream.c @@ -117,21 +117,15 @@ static long readData(dbCommon *record, format_t *format) if ((length = streamScanfN(record, format, (char *)wf->bptr, wf->nelm)) == ERROR) { - memset(wf->bptr, 0, wf->nelm); return ERROR; } if (length < (ssize_t)wf->nelm) { - memset(((char*)wf->bptr)+lval , 0, wf->nelm-lval); - lval++; - } - else - { - ((char*)wf->bptr)[wf->nelm-1] = 0; + ((char*)wf->bptr)[length] = 0; } wf->nord = (long)length; return OK; - } + } default: errlogSevPrintf(errlogFatal, "readData %s: can't convert from string to %s\n",