X-Git-Url: http://git.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=libuci.c;h=4dfffffc77efa00a400a2eb944b3a48fe66194ae;hp=c3a8fc06f6a0127999613d6b943415600d3e2ecc;hb=7952092949fb0dccd126d5ff6f73807feb4211b8;hpb=4535c379ced2bdb6a4b414f71080fa0c6f5180aa diff --git a/libuci.c b/libuci.c index c3a8fc0..4dfffff 100644 --- a/libuci.c +++ b/libuci.c @@ -42,7 +42,7 @@ static const char *uci_errstr[] = { static void *uci_malloc(struct uci_context *ctx, size_t size) { void *ptr; - + ptr = malloc(size); if (!ptr) UCI_THROW(ctx, UCI_ERR_MEM); @@ -63,6 +63,20 @@ static void *uci_realloc(struct uci_context *ctx, void *ptr, size_t size) return ptr; } +/* + * UCI wrapper for strdup, which uses exception handling + */ +static char *uci_strdup(struct uci_context *ctx, const char *str) +{ + char *ptr; + + ptr = strdup(str); + if (!ptr) + UCI_THROW(ctx, UCI_ERR_MEM); + + return ptr; +} + #include "list.c" #include "parse.c" @@ -71,10 +85,11 @@ static void *uci_realloc(struct uci_context *ctx, void *ptr, size_t size) struct uci_context *uci_alloc(void) { struct uci_context *ctx; - + ctx = (struct uci_context *) malloc(sizeof(struct uci_context)); memset(ctx, 0, sizeof(struct uci_context)); - + uci_list_init(&ctx->root); + return ctx; } @@ -93,7 +108,7 @@ void uci_perror(struct uci_context *ctx, const char *str) err = UCI_ERR_INVAL; else err = ctx->errno; - + if ((err < 0) || (err >= UCI_ERR_LAST)) err = UCI_ERR_UNKNOWN;