From: Felix Fietkau Date: Wed, 23 Jan 2008 07:21:02 +0000 (+0100) Subject: improved debugging X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=cc9710af5381d20ffa200978816a0fec999bbb62;p=oweals%2Fuci.git improved debugging --- diff --git a/Makefile b/Makefile index 01063a8..a738f53 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ COPTS=-g -O2 -CFLAGS=$(COPTS) -fPIC -Wall -pedantic -std=gnu99 -Wno-unused -Werror +CFLAGS=$(COPTS) -fPIC -Wall -pedantic -std=gnu99 -Wno-unused -Werror $(if $(DEBUG),-DDEBUG_ALL) AR=ar CC=gcc diff --git a/libuci.c b/libuci.c index 92205e8..af240ce 100644 --- a/libuci.c +++ b/libuci.c @@ -22,8 +22,6 @@ #include #include #include "uci.h" - -#define DEBUG #include "err.h" static const char *uci_errstr[] = { diff --git a/list.c b/list.c index 357b2e4..ea1c1ac 100644 --- a/list.c +++ b/list.c @@ -51,13 +51,14 @@ static inline void uci_list_del(struct uci_list *ptr) } static struct uci_element * -uci_alloc_generic(struct uci_context *ctx, const char *name, int size) +uci_alloc_generic(struct uci_context *ctx, int type, const char *name, int size) { struct uci_element *e; void *ptr; ptr = uci_malloc(ctx, size + strlen(name) + 1); e = (struct uci_element *) ptr; + e->type = type; e->name = (char *) ptr + size; strcpy(e->name, name); uci_list_init(&e->list); diff --git a/uci.h b/uci.h index 96bebf5..a4e3f96 100644 --- a/uci.h +++ b/uci.h @@ -24,6 +24,10 @@ * */ +#ifdef DEBUG_ALL +#define UCI_DEBUG +#define UCI_DEBUG_TYPECAST +#endif #include #include @@ -124,9 +128,9 @@ extern char **uci_list_configs(struct uci_context *ctx); /* UCI data structures */ enum uci_type { - UCI_TYPE_PACKAGE, - UCI_TYPE_SECTION, - UCI_TYPE_OPTION + uci_type_package = 0, + uci_type_section = 1, + uci_type_option = 2 }; struct uci_element @@ -273,28 +277,28 @@ struct uci_history /* element typecasting */ #ifdef UCI_DEBUG_TYPECAST static const char *uci_typestr[] = { - [UCI_TYPE_PACKAGE] = "package", - [UCI_TYPE_SECTION] = "section", - [UCI_TYPE_OPTION] = "option" -} + [uci_type_package] = "package", + [uci_type_section] = "section", + [uci_type_option] = "option" +}; static void uci_typecast_error(int from, int to) { fprintf(stderr, "Invalid typecast from '%s' to '%s'\n", uci_typestr[from], uci_typestr[to]); } -#define BUILD_CAST(type, val) \ - static inline struct uci_ ## type *uci_to_ ## type (struct uci_element *e) \ +#define BUILD_CAST(_type) \ + static inline struct uci_ ## _type *uci_to_ ## _type (struct uci_element *e) \ { \ - if (e->type != val) { \ - uci_typecast_error(e->type, val); \ + if (e->type != uci_type_ ## _type) { \ + uci_typecast_error(e->type, uci_type_ ## _type); \ } \ - return (struct uci_ ## type *) e; \ + return (struct uci_ ## _type *) e; \ } -BUILD_CAST(package, UCI_TYPE_PACKAGE) -BUILD_CAST(section, UCI_TYPE_SECTION) -BUILD_CAST(option, UCI_TYPE_OPTION) +BUILD_CAST(package) +BUILD_CAST(section) +BUILD_CAST(option) #else #define uci_to_package(ptr) container_of(ptr, struct uci_package, e) @@ -310,7 +314,7 @@ BUILD_CAST(option, UCI_TYPE_OPTION) * @datasize: additional buffer size to reserve at the end of the struct */ #define uci_alloc_element(ctx, type, name, datasize) \ - uci_to_ ## type (uci_alloc_generic(ctx, name, sizeof(struct uci_ ## type) + datasize)) + uci_to_ ## type (uci_alloc_generic(ctx, uci_type_ ## type, name, sizeof(struct uci_ ## type) + datasize)) #define uci_dataptr(ptr) \ (((char *) ptr) + sizeof(*ptr))