From 798b5d29cbf21649b04532f415f3cae4eac35886 Mon Sep 17 00:00:00 2001
From: Anders Blomdell <anders.blomdell@control.lth.se>
Date: Mon, 25 May 2015 19:24:33 +0200
Subject: [PATCH] Slowly improving error handling.

---
 lib/c/2014/labcomm2014_decoder.c |  6 ++++++
 lib/c/2014/labcomm2014_error.c   | 14 ++++++++++----
 lib/c/2014/labcomm2014_error.h   |  3 +++
 3 files changed, 19 insertions(+), 4 deletions(-)

diff --git a/lib/c/2014/labcomm2014_decoder.c b/lib/c/2014/labcomm2014_decoder.c
index 9ed6329..4935e4d 100644
--- a/lib/c/2014/labcomm2014_decoder.c
+++ b/lib/c/2014/labcomm2014_decoder.c
@@ -199,6 +199,12 @@ free_signature_signature:
   labcomm2014_memory_free(d->memory, 1,  signature.signature);
 free_signature_name:
   if (signature.name) {
+    if (result == -ENOENT) {
+      labcomm2014_error_warning(d->error,
+                                LABCOMM2014_ERROR_DEC_NO_REG_SIGNATURE,
+                                "Signature not found: %s\n",
+                                signature.name);
+    }
     labcomm2014_memory_free(d->memory, 0, signature.name);
   }
 out:
diff --git a/lib/c/2014/labcomm2014_error.c b/lib/c/2014/labcomm2014_error.c
index 9a29a76..a002026 100644
--- a/lib/c/2014/labcomm2014_error.c
+++ b/lib/c/2014/labcomm2014_error.c
@@ -24,15 +24,21 @@
 #include <stdarg.h>
 #include "labcomm2014_error.h"
 
+static char *description[] = {
+#define LABCOMM2014_ERROR(name, description) description ,
+#include "labcomm2014_error.h"
+#undef LABCOMM2014_ERROR
+};
+
 void labcomm2014_error_fatal_global(enum labcomm2014_error error,
                                     char *format,
                                     ...)
 {
   va_list args;
 
-  fprintf(stderr, "Fatal error %d\n", error);
+  fprintf(stderr, "Fatal error %d (%s)\n", error, description[error]);
   va_start(args, format);
-  vprintf(format, args);
+  vfprintf(stderr, format, args);
   va_end(args);
 
   exit(1);
@@ -45,9 +51,9 @@ void labcomm2014_error_warning(struct labcomm2014_error_handler *e,
 {
   va_list args;
 
-  fprintf(stderr, "Fatal warning %d\n", error);
+  fprintf(stderr, "Fatal warning %d (%s)\n", error, description[error]);
   va_start(args, format);
-  vprintf(format, args);
+  vfprintf(stderr, format, args);
   va_end(args);
 
   exit(1);
diff --git a/lib/c/2014/labcomm2014_error.h b/lib/c/2014/labcomm2014_error.h
index 9162e63..ae6ae08 100644
--- a/lib/c/2014/labcomm2014_error.h
+++ b/lib/c/2014/labcomm2014_error.h
@@ -52,6 +52,9 @@ LABCOMM2014_ERROR(LABCOMM2014_ERROR_ENC_NO_REG_SIGNATURE,
                   "Encoder has no registration for this signature")
 LABCOMM2014_ERROR(LABCOMM2014_ERROR_ENC_BUF_FULL,
                   "The labcomm2014 buffer is full")
+
+LABCOMM2014_ERROR(LABCOMM2014_ERROR_DEC_NO_REG_SIGNATURE,
+                  "Decoder has no registration for this signature")
 LABCOMM2014_ERROR(LABCOMM2014_ERROR_DEC_UNKNOWN_DATATYPE,
                   "Decoder: Unknown datatype")
 LABCOMM2014_ERROR(LABCOMM2014_ERROR_DEC_INDEX_MISMATCH,
-- 
GitLab