X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=err.h;h=078fdbec1ef8f5dcce0809ad1fc9bd05324c6e29;hp=9dd5a59ff083ee0570c518940549f2f90aad2247;hb=4aa3fd762e2190a4e418581cf24446484d0b7df5;hpb=8a57a274ffb49afe113ad86de9632db927326778 diff --git a/err.h b/err.h index 9dd5a59..078fdbe 100644 --- a/err.h +++ b/err.h @@ -16,7 +16,7 @@ * functions for debug and error handling, for internal use only */ -#ifdef DEBUG +#ifdef UCI_DEBUG #define DPRINTF(...) fprintf(stderr, __VA_ARGS__) #else #define DPRINTF(...) @@ -27,6 +27,7 @@ * in the context. */ #define UCI_THROW(ctx, err) do { \ + DPRINTF("Exception: %s in %s, %s:%d\n", #err, __func__, __FILE__, __LINE__); \ longjmp(ctx->trap, err); \ } while (0) @@ -40,10 +41,12 @@ * and UCI_TRAP_RESTORE. */ #define UCI_HANDLE_ERR(ctx) do { \ - int __val; \ + int __val = 0; \ if (!ctx) \ return UCI_ERR_INVAL; \ - __val = setjmp(ctx->trap); \ + if (!ctx->internal) \ + __val = setjmp(ctx->trap); \ + ctx->internal = false; \ if (__val) { \ ctx->errno = __val; \ return __val; \ @@ -70,6 +73,11 @@ memcpy(ctx->trap, __old_trap, sizeof(ctx->trap)); \ } while(0) +#define UCI_INTERNAL(func, ctx, ...) do { \ + ctx->internal = true; \ + func(ctx, __VA_ARGS__); \ +} while (0); + /* * check the specified condition. * throw an invalid argument exception if it's false