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