1 #pragma once
2 
3 #ifdef __cplusplus
4 extern "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 
58 void closelog(void);
59 void openlog(const char*, int, int);
60 int setlogmask(int);
61 void 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>
67 void vsyslog(int, const char*, va_list);
68 #if defined(SYSLOG_NAMES)
69 #define INTERNAL_NOPRI 0x10
70 #define INTERNAL_MARK (LOG_NFACILITIES << 3)
71 typedef 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