a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
0
|
// Copyright (C) 2023, Jakob Wakeling |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
1
|
// All rights reserved. |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
2
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
3
|
#include "log.h" |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
4
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
5
|
#include <stdarg.h> |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
6
|
#include <stdio.h> |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
7
|
#include <stdlib.h> |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
8
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
9
|
bool __debug, __warned; |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
10
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
11
|
[[noreturn]] void log_abort(const char *restrict format, ...) { |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
12
|
fflush(stderr); va_list args; va_start(args, format); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
13
|
vfprintf(stderr, format, args); fputc('\n', stderr); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
14
|
va_end(args); abort(); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
15
|
} |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
16
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
17
|
[[noreturn]] void log_fatal(int status, const char *restrict format, ...) { |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
18
|
fflush(stderr); va_list args; va_start(args, format); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
19
|
vfprintf(stderr, format, args); fputc('\n', stderr); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
20
|
va_end(args); exit(status); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
21
|
} |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
22
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
23
|
void log_print(const char *restrict format, ...) { |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
24
|
fflush(stderr); va_list args; va_start(args, format); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
25
|
vfprintf(stderr, format, args); fputc('\n', stderr); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
26
|
va_end(args); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
27
|
} |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
28
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
29
|
void log_debug(const char *restrict format, ...) { |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
30
|
if (!__debug) { return; } |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
31
|
|
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
32
|
fflush(stderr); va_list args; va_start(args, format); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
33
|
vfprintf(stderr, format, args); fputc('\n', stderr); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
34
|
va_end(args); |
a1eb486 |
Jakob Wakeling |
2023-12-27 13:01:35 |
35
|
} |
|
|
|
36
|
|