diff --git a/sources/auth.c b/sources/auth.c index 4f8d27b5..a72e90b1 100644 --- a/sources/auth.c +++ b/sources/auth.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/backend.c b/sources/backend.c index a3ec8605..e4a57c9c 100644 --- a/sources/backend.c +++ b/sources/backend.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/cancel.c b/sources/cancel.c index 607c6bee..a6def6dd 100644 --- a/sources/cancel.c +++ b/sources/cancel.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/client_pool.c b/sources/client_pool.c index 1df76d20..33426dbd 100644 --- a/sources/client_pool.c +++ b/sources/client_pool.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/config.c b/sources/config.c index f34d5007..a6d02a02 100644 --- a/sources/config.c +++ b/sources/config.c @@ -23,6 +23,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/console.c b/sources/console.c index 2512ce5c..8f1a73fc 100644 --- a/sources/console.c +++ b/sources/console.c @@ -19,6 +19,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/error.h b/sources/error.h new file mode 100644 index 00000000..e6c91fcd --- /dev/null +++ b/sources/error.h @@ -0,0 +1,67 @@ +#ifndef OD_ERROR_H +#define OD_ERROR_H + +/* + * Odissey. + * + * Advanced PostgreSQL connection pooler. +*/ + +typedef struct od_error od_error_t; + +struct od_error +{ + char file[256]; + int file_len; + char function[128]; + int function_len; + char error[256]; + int error_len; + int line; +}; + +static inline void +od_error_init(od_error_t *error) +{ + error->file[0] = 0; + error->file_len = 0; + error->function[0] = 0; + error->function_len = 0; + error->error[0] = 0; + error->error_len = 0; + error->line = 0; +} + +static inline void +od_error_setv(od_error_t *error, + const char *file, + const char *function, int line, + char *fmt, va_list args) +{ + error->file_len = + snprintf(error->file, sizeof(error->file), "%s", file); + error->function_len = + snprintf(error->function, sizeof(error->function), "%s", function); + error->line = line; + int len; + len = vsnprintf(error->error, sizeof(error->error), fmt, args); + error->error_len = len; +} + +static inline int +od_error_set(od_error_t *error, + const char *file, + const char *function, int line, + char *fmt, ...) +{ + va_list args; + va_start(args, fmt); + od_error_setv(error, file, function, line, fmt, args); + va_end(args); + return -1; +} + +#define od_errorf(error, fmt, ...) \ + od_error_set(error, __FILE__, __func__, __LINE__, fmt, __VA_ARGS__) + +#endif /* OD_ERROR_H */ diff --git a/sources/frontend.c b/sources/frontend.c index 2e1de55a..ea111245 100644 --- a/sources/frontend.c +++ b/sources/frontend.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/instance.c b/sources/instance.c index 31dac8ea..579eeefa 100644 --- a/sources/instance.c +++ b/sources/instance.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/periodic.c b/sources/periodic.c index d8e59402..b0e05892 100644 --- a/sources/periodic.c +++ b/sources/periodic.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/pooler.c b/sources/pooler.c index 4c7d3dd0..b489c1a6 100644 --- a/sources/pooler.c +++ b/sources/pooler.c @@ -20,6 +20,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/relay.c b/sources/relay.c index 988fb395..c0ade8d5 100644 --- a/sources/relay.c +++ b/sources/relay.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/relay_pool.c b/sources/relay_pool.c index cba8ebb3..f9640bb5 100644 --- a/sources/relay_pool.c +++ b/sources/relay_pool.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/reset.c b/sources/reset.c index d9c1b651..d8e6fd89 100644 --- a/sources/reset.c +++ b/sources/reset.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/router.c b/sources/router.c index e1e87791..e199bd17 100644 --- a/sources/router.c +++ b/sources/router.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h" diff --git a/sources/scheme.c b/sources/scheme.c index 680679af..895e64d4 100644 --- a/sources/scheme.c +++ b/sources/scheme.c @@ -15,6 +15,7 @@ #include #include "sources/macro.h" +#include "sources/error.h" #include "sources/list.h" #include "sources/pid.h" #include "sources/id.h" diff --git a/sources/tls.c b/sources/tls.c index 293a5ea5..74978aff 100644 --- a/sources/tls.c +++ b/sources/tls.c @@ -18,6 +18,7 @@ #include "sources/macro.h" #include "sources/version.h" +#include "sources/error.h" #include "sources/atomic.h" #include "sources/list.h" #include "sources/pid.h"