1#pragma once
2
3#ifdef __cplusplus
4extern "C" {
5#endif
6
7#include <features.h>
8
9#define LOG_EMERG 0
10#define LOG_ALERT 1
11#define LOG_CRIT 2
12#define LOG_ERR 3
13#define LOG_WARNING 4
14#define LOG_NOTICE 5
15#define LOG_INFO 6
16#define LOG_DEBUG 7
17
18#define LOG_PRIMASK 7
19#define LOG_PRI(p) ((p)&LOG_PRIMASK)
20#define LOG_MAKEPRI(f, p) (((f) << 3) | (p))
21
22#define LOG_MASK(p) (1 << (p))
23#define LOG_UPTO(p) ((1 << ((p) + 1)) - 1)
24
25#define LOG_KERN (0 << 3)
26#define LOG_USER (1 << 3)
27#define LOG_MAIL (2 << 3)
28#define LOG_DAEMON (3 << 3)
29#define LOG_AUTH (4 << 3)
30#define LOG_SYSLOG (5 << 3)
31#define LOG_LPR (6 << 3)
32#define LOG_NEWS (7 << 3)
33#define LOG_UUCP (8 << 3)
34#define LOG_CRON (9 << 3)
35#define LOG_AUTHPRIV (10 << 3)
36#define LOG_FTP (11 << 3)
37
38#define LOG_LOCAL0 (16 << 3)
39#define LOG_LOCAL1 (17 << 3)
40#define LOG_LOCAL2 (18 << 3)
41#define LOG_LOCAL3 (19 << 3)
42#define LOG_LOCAL4 (20 << 3)
43#define LOG_LOCAL5 (21 << 3)
44#define LOG_LOCAL6 (22 << 3)
45#define LOG_LOCAL7 (23 << 3)
46
47#define LOG_NFACILITIES 24
48#define LOG_FACMASK 0x3f8
49#define LOG_FAC(p) (((p)&LOG_FACMASK) >> 3)
50
51#define LOG_PID 0x01
52#define LOG_CONS 0x02
53#define LOG_ODELAY 0x04
54#define LOG_NDELAY 0x08
55#define LOG_NOWAIT 0x10
56#define LOG_PERROR 0x20
57
58void closelog(void);
59void openlog(const char*, int, int);
60int setlogmask(int);
61void syslog(int, const char*, ...);
62
63#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
64#define _PATH_LOG "/dev/log"
65#define __NEED_va_list
66#include <bits/alltypes.h>
67void vsyslog(int, const char*, va_list);
68#if defined(SYSLOG_NAMES)
69#define INTERNAL_NOPRI 0x10
70#define INTERNAL_MARK (LOG_NFACILITIES << 3)
71typedef struct {
72    char* c_name;
73    int c_val;
74} CODE;
75#define prioritynames                                \
76    ((CODE*)(const CODE[]){{"alert", LOG_ALERT},     \
77                           {"crit", LOG_CRIT},       \
78                           {"debug", LOG_DEBUG},     \
79                           {"emerg", LOG_EMERG},     \
80                           {"err", LOG_ERR},         \
81                           {"error", LOG_ERR},       \
82                           {"info", LOG_INFO},       \
83                           {"none", INTERNAL_NOPRI}, \
84                           {"notice", LOG_NOTICE},   \
85                           {"panic", LOG_EMERG},     \
86                           {"warn", LOG_WARNING},    \
87                           {"warning", LOG_WARNING}, \
88                           {0, -1}})
89#define facilitynames                                  \
90    ((CODE*)(const CODE[]){{"auth", LOG_AUTH},         \
91                           {"authpriv", LOG_AUTHPRIV}, \
92                           {"cron", LOG_CRON},         \
93                           {"daemon", LOG_DAEMON},     \
94                           {"ftp", LOG_FTP},           \
95                           {"kern", LOG_KERN},         \
96                           {"lpr", LOG_LPR},           \
97                           {"mail", LOG_MAIL},         \
98                           {"mark", INTERNAL_MARK},    \
99                           {"news", LOG_NEWS},         \
100                           {"security", LOG_AUTH},     \
101                           {"syslog", LOG_SYSLOG},     \
102                           {"user", LOG_USER},         \
103                           {"uucp", LOG_UUCP},         \
104                           {"local0", LOG_LOCAL0},     \
105                           {"local1", LOG_LOCAL1},     \
106                           {"local2", LOG_LOCAL2},     \
107                           {"local3", LOG_LOCAL3},     \
108                           {"local4", LOG_LOCAL4},     \
109                           {"local5", LOG_LOCAL5},     \
110                           {"local6", LOG_LOCAL6},     \
111                           {"local7", LOG_LOCAL7},     \
112                           {0, -1}})
113#endif
114#endif
115
116#ifdef __cplusplus
117}
118#endif
119