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