2018-08-28 14:43:46 +00:00
|
|
|
#ifndef ODYSSEY_ERROR_H
|
|
|
|
#define ODYSSEY_ERROR_H
|
2017-09-15 13:08:42 +00:00
|
|
|
|
|
|
|
/*
|
2018-03-12 14:03:15 +00:00
|
|
|
* Odyssey.
|
2017-09-15 13:08:42 +00:00
|
|
|
*
|
2018-04-04 13:19:58 +00:00
|
|
|
* Scalable PostgreSQL connection pooler.
|
2020-04-02 11:00:56 +00:00
|
|
|
*/
|
2017-09-15 13:08:42 +00:00
|
|
|
|
|
|
|
typedef struct od_error od_error_t;
|
|
|
|
|
2020-07-08 06:26:17 +00:00
|
|
|
#define OD_ERROR_MAX_LEN 256
|
|
|
|
|
2017-09-15 13:08:42 +00:00
|
|
|
struct od_error
|
|
|
|
{
|
|
|
|
char file[256];
|
2020-04-02 11:00:56 +00:00
|
|
|
int file_len;
|
2017-09-15 13:08:42 +00:00
|
|
|
char function[128];
|
2020-04-02 11:00:56 +00:00
|
|
|
int function_len;
|
2020-07-08 06:26:17 +00:00
|
|
|
char error[OD_ERROR_MAX_LEN];
|
2020-04-02 11:00:56 +00:00
|
|
|
int error_len;
|
|
|
|
int line;
|
2017-09-15 13:08:42 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
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,
|
2020-04-02 11:00:56 +00:00
|
|
|
const char *function,
|
|
|
|
int line,
|
|
|
|
char *fmt,
|
|
|
|
va_list args)
|
2017-09-15 13:08:42 +00:00
|
|
|
{
|
2020-04-02 11:00:56 +00:00
|
|
|
error->file_len = od_snprintf(error->file, sizeof(error->file), "%s", file);
|
2017-09-15 13:08:42 +00:00
|
|
|
error->function_len =
|
2020-04-02 11:00:56 +00:00
|
|
|
od_snprintf(error->function, sizeof(error->function), "%s", function);
|
2017-09-15 13:08:42 +00:00
|
|
|
error->line = line;
|
|
|
|
int len;
|
2017-11-27 12:54:16 +00:00
|
|
|
len = od_vsnprintf(error->error, sizeof(error->error), fmt, args);
|
2017-09-15 13:08:42 +00:00
|
|
|
error->error_len = len;
|
|
|
|
}
|
|
|
|
|
|
|
|
static inline int
|
|
|
|
od_error_set(od_error_t *error,
|
|
|
|
const char *file,
|
2020-04-02 11:00:56 +00:00
|
|
|
const char *function,
|
|
|
|
int line,
|
|
|
|
char *fmt,
|
|
|
|
...)
|
2017-09-15 13:08:42 +00:00
|
|
|
{
|
|
|
|
va_list args;
|
|
|
|
va_start(args, fmt);
|
|
|
|
od_error_setv(error, file, function, line, fmt, args);
|
|
|
|
va_end(args);
|
|
|
|
return -1;
|
|
|
|
}
|
|
|
|
|
2020-04-02 11:00:56 +00:00
|
|
|
#define od_errorf(error, fmt, ...) \
|
2017-09-15 13:08:42 +00:00
|
|
|
od_error_set(error, __FILE__, __func__, __LINE__, fmt, __VA_ARGS__)
|
|
|
|
|
2018-08-28 14:43:46 +00:00
|
|
|
#endif /* ODYSSEY_ERROR_H */
|