aboutsummaryrefslogtreecommitdiffstats
path: root/src/csn1_dec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/csn1_dec.c')
-rw-r--r--src/csn1_dec.c62
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;
}