From: Pierre-Marc Fournier Date: Wed, 16 Sep 2009 04:46:56 +0000 (-0400) Subject: improve error handling macros X-Git-Tag: v0.1~137 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=d61bfa72a22d7faf64c1babe1bc663aeb280717b;p=ust.git improve error handling macros --- diff --git a/share/usterr.h b/share/usterr.h index 6a3e2a3..93333e5 100644 --- a/share/usterr.h +++ b/share/usterr.h @@ -1,6 +1,8 @@ #ifndef USTERR_H #define USTERR_H +#include + #ifndef UST_COMPONENT //#error UST_COMPONENT is undefined #define UST_COMPONENT libust @@ -14,14 +16,30 @@ #define DEBUG #ifdef DEBUG -# define DBG(fmt, args...) do { fprintf(stderr, UST_STR_COMPONENT ": " fmt "(" __FILE__ ":" XSTR(__LINE__) ")\n", ## args); fflush(stderr); } while(0) +# define DBG(fmt, args...) do { fprintf(stderr, UST_STR_COMPONENT ": " fmt " (" __FILE__ ":" XSTR(__LINE__) ")\n", ## args); fflush(stderr); } while(0) #else # define DBG(fmt, args...) do {} while(0) #endif #define WARN(fmt, args...) fprintf(stderr, UST_STR_COMPONENT ": Warning: " fmt "\n", ## args); fflush(stderr) #define ERR(fmt, args...) fprintf(stderr, UST_STR_COMPONENT ": Error: " fmt "\n", ## args); fflush(stderr) #define BUG(fmt, args...) fprintf(stderr, UST_STR_COMPONENT ": BUG: " fmt "\n", ## args); fflush(stderr) -#define PERROR(call) perror(UST_STR_COMPONENT ": Error: " call) + +#if (_POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600) && !defined(_GNU_SOURCE) +#define PERROR(call, args...)\ + do { \ + char buf[200] = "Error in strerror_r()"; \ + strerror_r(errno, buf, sizeof(buf)); \ + fprintf(stderr, UST_STR_COMPONENT ": Error: " call ": %s\n", ## args, buf); fflush(stderr); \ + } while(0); +#else +#define PERROR(call, args...)\ + do { \ + char *buf; \ + char tmp[200]; \ + buf = strerror_r(errno, tmp, sizeof(tmp)); \ + fprintf(stderr, UST_STR_COMPONENT ": Error: " call ": %s\n", ## args, buf); fflush(stderr); \ + } while(0); +#endif #define BUG_ON(condition) do { if (unlikely(condition)) ERR("condition not respected (BUG)"); } while(0) #define WARN_ON(condition) do { if (unlikely(condition)) WARN("condition not respected on line %s:%d", __FILE__, __LINE__); } while(0)