From 5d8c7d37dc1fbf6da6cb38d2d029506b95c18ef3 Mon Sep 17 00:00:00 2001 From: Anders Blomdell <anders.blomdell@control.lth.se> Date: Mon, 22 Apr 2013 17:38:09 +0200 Subject: [PATCH] Corrected labcomm_pack32 to use current labcomm_writer interface. --- lib/c/labcomm_private.h | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/c/labcomm_private.h b/lib/c/labcomm_private.h index 00c9461..2d67778 100644 --- a/lib/c/labcomm_private.h +++ b/lib/c/labcomm_private.h @@ -346,11 +346,36 @@ static inline void labcomm_pack32(labcomm_writer_t *w, unsigned int data) w->write(w, labcomm_writer_continue, n); } switch (n) { - case 5: w->data[w->pos++] = tag; tag = 0; - case 4: w->data[w->pos++] = tmp[0] | tag; tag = 0; - case 3: w->data[w->pos++] = tmp[1] | tag; tag = 0; - case 2: w->data[w->pos++] = tmp[2] | tag; tag = 0; - case 1: w->data[w->pos++] = tmp[3] | tag; + case 5: { + if (w->pos >= w->count) { + w->write(w, labcomm_writer_continue); + } + w->data[w->pos++] = tag; tag = 0; + } + case 4: { + if (w->pos >= w->count) { + w->write(w, labcomm_writer_continue); + } + w->data[w->pos++] = tmp[0] | tag; tag = 0; + } + case 3: { + if (w->pos >= w->count) { + w->write(w, labcomm_writer_continue); + } + w->data[w->pos++] = tmp[1] | tag; tag = 0; + } + case 2: { + if (w->pos >= w->count) { + w->write(w, labcomm_writer_continue); + } + w->data[w->pos++] = tmp[2] | tag; tag = 0; + } + case 1: { + if (w->pos >= w->count) { + w->write(w, labcomm_writer_continue); + } + w->data[w->pos++] = tmp[3] | tag; + } } } -- GitLab