diff options
Diffstat (limited to 'src/csn1_dec.c')
-rw-r--r-- | src/csn1_dec.c | 62 |
1 files changed, 35 insertions, 27 deletions
diff --git a/src/csn1_dec.c b/src/csn1_dec.c index 2d3f2421..4bc74f36 100644 --- a/src/csn1_dec.c +++ b/src/csn1_dec.c @@ -388,22 +388,26 @@ csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, struct bitvec *vector { gint16 Status; csnStream_t arT = *ar; - LOGPC(DCSN1, LOGL_DEBUG, " : %s | ", pDescr->sz); - csnStreamInit(&arT, bit_offset, remaining_bits_len); - Status = csnStreamDecoder(&arT, (const CSN_DESCR*)pDescr->descr.ptr, vector, readIndex, pvDATA(data, pDescr->offset)); - LOGPC(DCSN1, LOGL_DEBUG, ": End %s | ", pDescr->sz); - if (Status >= 0) - { - remaining_bits_len = arT.remaining_bits_len; - bit_offset = arT.bit_offset; - pDescr++; - } - else + if (pDescr->may_be_null && remaining_bits_len == 0) { - /* Has already been processed: ProcessError("csnStreamDecoder", Status, pDescr); */ - return Status; + LOGPC(DCSN1, LOGL_DEBUG, " : %s = NULL | ", pDescr->sz); + } else { + LOGPC(DCSN1, LOGL_DEBUG, " : %s | ", pDescr->sz); + csnStreamInit(&arT, bit_offset, remaining_bits_len); + Status = csnStreamDecoder(&arT, (const CSN_DESCR*)pDescr->descr.ptr, vector, readIndex, pvDATA(data, pDescr->offset)); + LOGPC(DCSN1, LOGL_DEBUG, ": End %s | ", pDescr->sz); + if (Status >= 0) + { + remaining_bits_len = arT.remaining_bits_len; + bit_offset = arT.bit_offset; + } + else + { + /* Has already been processed: ProcessError("csnStreamDecoder", Status, pDescr); */ + return Status; + } } - + pDescr++; break; } @@ -838,21 +842,25 @@ csnStreamDecoder(csnStream_t* ar, const CSN_DESCR* pDescr, struct bitvec *vector { gint16 Status; csnStream_t arT = *ar; - LOGPC(DCSN1, LOGL_DEBUG, " : %s | ", pDescr->sz); - csnStreamInit(&arT, bit_offset, remaining_bits_len); - Status = csnStreamDecoder(&arT, (const CSN_DESCR*)pDescr->descr.ptr, vector, readIndex, pvDATA(data, pDescr->offset)); - LOGPC(DCSN1, LOGL_DEBUG, " : End %s | ", pDescr->sz); - if (Status >= 0) + if (pDescr->may_be_null && remaining_bits_len == 0) { - remaining_bits_len = arT.remaining_bits_len; - bit_offset = arT.bit_offset; - pDescr++; - } - else - { /* return error code Has already been processed: */ - return Status; + LOGPC(DCSN1, LOGL_DEBUG, " : %s = NULL | ", pDescr->sz); + } else { + LOGPC(DCSN1, LOGL_DEBUG, " : %s | ", pDescr->sz); + csnStreamInit(&arT, bit_offset, remaining_bits_len); + Status = csnStreamDecoder(&arT, (const CSN_DESCR*)pDescr->descr.ptr, vector, readIndex, pvDATA(data, pDescr->offset)); + LOGPC(DCSN1, LOGL_DEBUG, " : End %s | ", pDescr->sz); + if (Status >= 0) + { + remaining_bits_len = arT.remaining_bits_len; + bit_offset = arT.bit_offset; + } + else + { /* return error code Has already been processed: */ + return Status; + } } - + pDescr++; break; } |