X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=libserialport_internal.h;h=031ffeffde76150fcb3b5e6d4af4426dad19a114;hb=da8730199a215c9ccd938202fb55ac9e3f58a0b2;hp=3553b124d715c819f6f956f62699f1d30dfeb86d;hpb=48a4076f692ffe34026c37815580a32b2f70592b;p=libserialport.git diff --git a/libserialport_internal.h b/libserialport_internal.h index 3553b12..031ffef 100644 --- a/libserialport_internal.h +++ b/libserialport_internal.h @@ -18,6 +18,10 @@ * along with this program. If not, see . */ +#ifdef __linux__ +#define _BSD_SOURCE // for timeradd, timersub, timercmp +#endif + #include #include #include @@ -28,11 +32,14 @@ #include #include #ifdef _WIN32 +#include + #include #include #include #include #include +#include #else #include #include @@ -155,15 +162,25 @@ extern const struct std_baudrate std_baudrates[]; extern void (*sp_debug_handler)(const char *format, ...); /* Debug output macros. */ -#define DEBUG(fmt, ...) do { if (sp_debug_handler) sp_debug_handler(fmt ".\n", ##__VA_ARGS__); } while (0) -#define DEBUG_ERROR(err, fmt, ...) DEBUG("%s returning " #err ": " fmt, __func__, ##__VA_ARGS__) -#define DEBUG_FAIL(fmt, ...) do { \ +#define DEBUG_FMT(fmt, ...) do { \ + if (sp_debug_handler) \ + sp_debug_handler(fmt ".\n", __VA_ARGS__); \ +} while (0) +#define DEBUG(msg) DEBUG_FMT(msg, NULL) +#define DEBUG_ERROR(err, msg) DEBUG_FMT("%s returning " #err ": " msg, __func__) +#define DEBUG_FAIL(msg) do { \ char *errmsg = sp_last_error_message(); \ - DEBUG("%s returning SP_ERR_FAIL: "fmt": %s", __func__,##__VA_ARGS__,errmsg); \ + DEBUG_FMT("%s returning SP_ERR_FAIL: " msg ": %s", __func__, errmsg); \ sp_free_error_message(errmsg); \ } while (0); -#define RETURN() do { DEBUG("%s returning", __func__); return; } while(0) -#define RETURN_CODE(x) do { DEBUG("%s returning " #x, __func__); return x; } while (0) +#define RETURN() do { \ + DEBUG_FMT("%s returning", __func__); \ + return; \ +} while(0) +#define RETURN_CODE(x) do { \ + DEBUG_FMT("%s returning " #x, __func__); \ + return x; \ +} while (0) #define RETURN_CODEVAL(x) do { \ switch (x) { \ case SP_OK: RETURN_CODE(SP_OK); \ @@ -174,21 +191,38 @@ extern void (*sp_debug_handler)(const char *format, ...); } \ } while (0) #define RETURN_OK() RETURN_CODE(SP_OK); -#define RETURN_ERROR(err, ...) do { DEBUG_ERROR(err, __VA_ARGS__); return err; } while (0) -#define RETURN_FAIL(...) do { DEBUG_FAIL(__VA_ARGS__); return SP_ERR_FAIL; } while (0) -#define RETURN_VALUE(fmt, x) do { \ - typeof(x) _x = x; \ - DEBUG("%s returning " fmt, __func__, _x); \ +#define RETURN_ERROR(err, msg) do { \ + DEBUG_ERROR(err, msg); \ + return err; \ +} while (0) +#define RETURN_FAIL(msg) do { \ + DEBUG_FAIL(msg); \ + return SP_ERR_FAIL; \ +} while (0) +#define RETURN_INT(x) do { \ + int _x = x; \ + DEBUG_FMT("%s returning %d", __func__, _x); \ + return _x; \ +} while (0) +#define RETURN_STRING(x) do { \ + char *_x = x; \ + DEBUG_FMT("%s returning %s", __func__, _x); \ + return _x; \ +} while (0) +#define RETURN_POINTER(x) do { \ + void *_x = x; \ + DEBUG_FMT("%s returning %p", __func__, _x); \ return _x; \ } while (0) #define SET_ERROR(val, err, msg) do { DEBUG_ERROR(err, msg); val = err; } while (0) #define SET_FAIL(val, msg) do { DEBUG_FAIL(msg); val = SP_ERR_FAIL; } while (0) -#define TRACE(fmt, ...) DEBUG("%s(" fmt ") called", __func__, ##__VA_ARGS__) +#define TRACE(fmt, ...) DEBUG_FMT("%s(" fmt ") called", __func__, __VA_ARGS__) +#define TRACE_VOID() DEBUG_FMT("%s() called", __func__) #define TRY(x) do { int ret = x; if (ret != SP_OK) RETURN_CODEVAL(ret); } while (0) -struct sp_port **list_append(struct sp_port **list, const char *portname); +SP_PRIV struct sp_port **list_append(struct sp_port **list, const char *portname); /* OS-specific Helper functions. */ -enum sp_return get_port_details(struct sp_port *port); -enum sp_return list_ports(struct sp_port ***list); +SP_PRIV enum sp_return get_port_details(struct sp_port *port); +SP_PRIV enum sp_return list_ports(struct sp_port ***list);