From 615fd741b94f6940d39039b5a29d7f801ece571d Mon Sep 17 00:00:00 2001 From: Andrew Johnson Date: Tue, 18 Dec 2012 14:13:23 -0600 Subject: [PATCH] rec: Fix precision where link not set Don't just force the precision to 15 if an INPx link is not set, default to PREC field instead. --- src/std/rec/aSubRecord.c | 13 ++++++++----- src/std/rec/calcRecord.c | 7 +++---- src/std/rec/calcoutRecord.c | 10 +++++----- src/std/rec/subRecord.c | 9 ++++----- 4 files changed, 20 insertions(+), 19 deletions(-) diff --git a/src/std/rec/aSubRecord.c b/src/std/rec/aSubRecord.c index 1efeabdd9..0bb33dac3 100644 --- a/src/std/rec/aSubRecord.c +++ b/src/std/rec/aSubRecord.c @@ -360,22 +360,25 @@ static long get_precision(DBADDR *paddr, long *pprecision) aSubRecord *prec = (aSubRecord *)paddr->precord; int fieldIndex = dbGetFieldIndex(paddr); int linkNumber; - short precision; *pprecision = prec->prec; linkNumber = get_inlinkNumber(fieldIndex); if (linkNumber >= 0) { + short precision; + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) *pprecision = precision; return 0; - } + } + linkNumber = get_outlinkNumber(fieldIndex); if (linkNumber >= 0) { + short precision; + if (dbGetPrecision(&prec->outa + linkNumber, &precision) == 0) *pprecision = precision; - return 0; - } - recGblGetPrec(paddr, pprecision); + } else + recGblGetPrec(paddr, pprecision); return 0; } diff --git a/src/std/rec/calcRecord.c b/src/std/rec/calcRecord.c index a55ec5d98..c048cf2e3 100644 --- a/src/std/rec/calcRecord.c +++ b/src/std/rec/calcRecord.c @@ -188,16 +188,15 @@ static long get_precision(DBADDR *paddr, long *pprecision) int linkNumber; *pprecision = prec->prec; - if (fieldIndex == indexof(VAL)) { + if (fieldIndex == indexof(VAL)) return 0; - } + linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { short precision; + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) *pprecision = precision; - else - *pprecision = 15; } else recGblGetPrec(paddr, pprecision); return 0; diff --git a/src/std/rec/calcoutRecord.c b/src/std/rec/calcoutRecord.c index c21caa863..1c712eaa3 100644 --- a/src/std/rec/calcoutRecord.c +++ b/src/std/rec/calcoutRecord.c @@ -414,21 +414,21 @@ static long get_precision(DBADDR *paddr, long *pprecision) int fieldIndex = dbGetFieldIndex(paddr); int linkNumber; - if(fieldIndex == indexof(ODLY)) { + if (fieldIndex == indexof(ODLY)) { *pprecision = calcoutODLYprecision; return 0; } + *pprecision = prec->prec; - if (fieldIndex == indexof(VAL)) { + if (fieldIndex == indexof(VAL)) return 0; - } + linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { short precision; + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) *pprecision = precision; - else - *pprecision = 15; } else recGblGetPrec(paddr, pprecision); return 0; diff --git a/src/std/rec/subRecord.c b/src/std/rec/subRecord.c index 780e9b5e1..8a8d7822e 100644 --- a/src/std/rec/subRecord.c +++ b/src/std/rec/subRecord.c @@ -222,16 +222,15 @@ static long get_precision(DBADDR *paddr, long *pprecision) int linkNumber; *pprecision = prec->prec; - if (fieldIndex == indexof(VAL)) { - return 0; - } + if (fieldIndex == indexof(VAL)) + return 0; + linkNumber = get_linkNumber(fieldIndex); if (linkNumber >= 0) { short precision; + if (dbGetPrecision(&prec->inpa + linkNumber, &precision) == 0) *pprecision = precision; - else - *pprecision = 15; } else recGblGetPrec(paddr, pprecision); return 0;