X-Git-Url: https://git.archive.openwrt.org/?a=blobdiff_plain;f=err.h;h=078fdbec1ef8f5dcce0809ad1fc9bd05324c6e29;hb=4aa3fd762e2190a4e418581cf24446484d0b7df5;hp=2e1e606e7040be3fd97bc9c58d273a117fa91c79;hpb=cd857cc9c374f33631eb536339fb1915fd102ea9;p=project%2Fuci.git diff --git a/err.h b/err.h index 2e1e606..078fdbe 100644 --- a/err.h +++ b/err.h @@ -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