summaryrefslogtreecommitdiff
path: root/include/merror.h
blob: 7be6fc704774b06e885498ceba8f07148b7b5082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/* Copyright (c) 2024 Freya Murphy */
#ifndef __MERROR_H__
#define __MERROR_H__

#include <errno.h>

/* Error codes
 */
#define M_SUCCESS 0
#define M_EOF     1
#define M_ERROR   -1

#define __DEBUG   1
#define __WARNING 2
#define __ERROR   3

__attribute__((format(printf, 4, 5)))
void __log_impl_pos(int line, int column, int type, const char *format, ...);
void __log_impl(int type, const char *format, ...);

#define DEBUG(format, ...) \
        __log_impl(__DEBUG, format, ##__VA_ARGS__)

#define WARNING(format, ...) \
        __log_impl(__WARNING, format, ##__VA_ARGS__)

#define ERROR(format, ...) \
        __log_impl(__ERROR, format, ##__VA_ARGS__)

#define DEBUG_POS(pos, format, ...) \
        __log_impl_pos(pos.y, pos.x, __DEBUG, format, ##__VA_ARGS__)

#define WARNING_POS(pos, format, ...) \
        __log_impl_pos(pos.y, pos.x, __WARNING, format, ##__VA_ARGS__)

#define ERROR_POS(pos, format, ...) \
        __log_impl_pos(pos.y, pos.x, __ERROR, format, ##__VA_ARGS__)

#define PERROR(format, ...) \
        __log_impl(__ERROR, format ": %s", ##__VA_ARGS__, (strerror(errno)))

#endif /* __MERROR_H__ */