From d065b69aacda7ac769c6962189e2e0701dc12ab2 Mon Sep 17 00:00:00 2001 From: Marcel Poul Date: Wed, 2 Nov 2011 10:06:07 +0000 Subject: [PATCH] function that makes error messages added --- emi.canl.canl-c/Makefile | 18 +++++++++------- emi.canl.canl-c/src/canl_err.c | 46 +++++++++++++++++++++++++++++++++++++++++ emi.canl.canl-c/src/canl_locl.h | 2 ++ 3 files changed, 59 insertions(+), 7 deletions(-) create mode 100644 emi.canl.canl-c/src/canl_err.c diff --git a/emi.canl.canl-c/Makefile b/emi.canl.canl-c/Makefile index 6894403..07ec35a 100644 --- a/emi.canl.canl-c/Makefile +++ b/emi.canl.canl-c/Makefile @@ -3,7 +3,7 @@ PATH_ROOT=/home/marvel/canl/emi.canl.canl-c PATH_SRC=${PATH_ROOT}/src CC=gcc CFLAGS_LIB=-Wall -fPIC -c -LFLAGS_LIB=-shared -o libcanl.so +LFLAGS_LIB=-shared -o libcanl.so -lcares CFLAGS_CLI=-Wall -c LFLAGS_CLI=-L${PATH_ROOT} -I${PATH_ROOT} -o client -lcanl @@ -11,9 +11,7 @@ LFLAGS_CLI=-L${PATH_ROOT} -I${PATH_ROOT} -o client -lcanl CFLAGS_SER=-Wall -c LFLAGS_SER=-L${PATH_ROOT} -I${PATH_ROOT} -o server -lcanl -SRC_CANL=${PATH_SRC}/canl.c ${PATH_SRC}/canl_dns.c HEAD_CANL=${PATH_SRC}/canl.h ${PATH_SRC}/canl_locl.h -OBJ_CANL=canl.o SRC_CLI=${PATH_SRC}/canl_sample_client.c HEAD_CLI=${PATH_SRC}/canl.h @@ -23,11 +21,17 @@ SRC_SER=${PATH_SRC}/canl_sample_server.c HEAD_SER=${PATH_SRC}/canl.h OBJ_SER=canl_sample_server.o -libcanl.so: ${OBJ_CANL} - ${CC} ${OBJ_CANL} ${LFLAGS_LIB} +libcanl.so: canl.o canl_err.o canl_dns.o + ${CC} canl.o canl_err.o canl_dns.o ${LFLAGS_LIB} -${OBJ_CANL}: ${SRC_CANL} ${HEAD_CANL} - ${CC} ${SRC_CANL} ${CFLAGS_LIB} +canl.o: ${PATH_SRC}/canl.c ${HEAD_CANL} + ${CC} ${PATH_SRC}/canl.c ${CFLAGS_LIB} + +canl_dns.o: ${PATH_SRC}/canl_dns.c ${HEAD_CANL} + ${CC} ${PATH_SRC}/canl_dns.c ${CFLAGS_LIB} + +canl_err.o: ${PATH_SRC}/canl_err.c ${HEAD_CANL} + ${CC} ${PATH_SRC}/canl_err.c ${CFLAGS_LIB} client: ${OBJ_CLI} ${CC} ${OBJ_CLI} ${LFLAGS_CLI} diff --git a/emi.canl.canl-c/src/canl_err.c b/emi.canl.canl-c/src/canl_err.c new file mode 100644 index 0000000..b56fa2e --- /dev/null +++ b/emi.canl.canl-c/src/canl_err.c @@ -0,0 +1,46 @@ +#include +#include +#include +#include +#include "canl_locl.h" + +/* Save error message into err_msg + * use NULL for empty err_format */ +void make_err_msg (char **err_msg, const char *err_format, ...) +{ + unsigned int err_msg_len = 0; + va_list ap; + char *new_msg = NULL; + int err_format_len = 0; + unsigned int err_msg_sum = 0; // sum of msg and format lengths + + if (err_format == NULL) + return; + + if (*err_msg != NULL) + err_msg_len = strlen(*err_msg); + + /* make new error message */ + va_start(ap, err_format); + err_format_len = vsnprintf(NULL, 0, err_format, ap ); + new_msg = (char*) malloc ( (err_format_len +1) * sizeof(char)); + vsprintf(new_msg, err_format, ap); + if (err_format_len < 1) + return; + + /* Add new error message to older one */ + err_msg_sum = err_format_len + err_msg_len; + /* separator ; and ending '\0' -> 2 bytes */ + *err_msg = (char *) realloc (*err_msg, (err_msg_sum + 2)*sizeof(char)); + if (*err_msg == NULL) + { + free(new_msg); + return; + } + if (err_msg_len == 0) + (*err_msg)[0] = '\0'; + strcat (*err_msg, new_msg); + strcat (*err_msg, ";"); + + free(new_msg); +} diff --git a/emi.canl.canl-c/src/canl_locl.h b/emi.canl.canl-c/src/canl_locl.h index a0f64c3..5831123 100644 --- a/emi.canl.canl-c/src/canl_locl.h +++ b/emi.canl.canl-c/src/canl_locl.h @@ -24,4 +24,6 @@ struct asyn_result { int err; }; +void make_err_msg (char **err_msg, const char *err_format, ...); + #endif -- 1.8.2.3