#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#include <features.h>
#define LOG_EMERG 0
#define LOG_ALERT 1
#define LOG_CRIT 2
#define LOG_ERR 3
#define LOG_WARNING 4
#define LOG_NOTICE 5
#define LOG_INFO 6
#define LOG_DEBUG 7
#define LOG_PRIMASK 7
#define LOG_PRI(p) ((p)&LOG_PRIMASK)
#define LOG_MAKEPRI(f, p) (((f) << 3) | (p))
#define LOG_MASK(p) (1 << (p))
#define LOG_UPTO(p) ((1 << ((p) + 1)) - 1)
#define LOG_KERN (0 << 3)
#define LOG_USER (1 << 3)
#define LOG_MAIL (2 << 3)
#define LOG_DAEMON (3 << 3)
#define LOG_AUTH (4 << 3)
#define LOG_SYSLOG (5 << 3)
#define LOG_LPR (6 << 3)
#define LOG_NEWS (7 << 3)
#define LOG_UUCP (8 << 3)
#define LOG_CRON (9 << 3)
#define LOG_AUTHPRIV (10 << 3)
#define LOG_FTP (11 << 3)
#define LOG_LOCAL0 (16 << 3)
#define LOG_LOCAL1 (17 << 3)
#define LOG_LOCAL2 (18 << 3)
#define LOG_LOCAL3 (19 << 3)
#define LOG_LOCAL4 (20 << 3)
#define LOG_LOCAL5 (21 << 3)
#define LOG_LOCAL6 (22 << 3)
#define LOG_LOCAL7 (23 << 3)
#define LOG_NFACILITIES 24
#define LOG_FACMASK 0x3f8
#define LOG_FAC(p) (((p)&LOG_FACMASK) >> 3)
#define LOG_PID 0x01
#define LOG_CONS 0x02
#define LOG_ODELAY 0x04
#define LOG_NDELAY 0x08
#define LOG_NOWAIT 0x10
#define LOG_PERROR 0x20
void closelog(void);
void openlog(const char*, int, int);
int setlogmask(int);
void syslog(int, const char*, ...);
#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define _PATH_LOG "/dev/log"
#define __NEED_va_list
#include <bits/alltypes.h>
void vsyslog(int, const char*, va_list);
#if defined(SYSLOG_NAMES)
#define INTERNAL_NOPRI 0x10
#define INTERNAL_MARK (LOG_NFACILITIES << 3)
typedef struct {
char* c_name;
int c_val;
} CODE;
#define prioritynames \
((CODE*)(const CODE[]){{"alert", LOG_ALERT}, \
{"crit", LOG_CRIT}, \
{"debug", LOG_DEBUG}, \
{"emerg", LOG_EMERG}, \
{"err", LOG_ERR}, \
{"error", LOG_ERR}, \
{"info", LOG_INFO}, \
{"none", INTERNAL_NOPRI}, \
{"notice", LOG_NOTICE}, \
{"panic", LOG_EMERG}, \
{"warn", LOG_WARNING}, \
{"warning", LOG_WARNING}, \
{0, -1}})
#define facilitynames \
((CODE*)(const CODE[]){{"auth", LOG_AUTH}, \
{"authpriv", LOG_AUTHPRIV}, \
{"cron", LOG_CRON}, \
{"daemon", LOG_DAEMON}, \
{"ftp", LOG_FTP}, \
{"kern", LOG_KERN}, \
{"lpr", LOG_LPR}, \
{"mail", LOG_MAIL}, \
{"mark", INTERNAL_MARK}, \
{"news", LOG_NEWS}, \
{"security", LOG_AUTH}, \
{"syslog", LOG_SYSLOG}, \
{"user", LOG_USER}, \
{"uucp", LOG_UUCP}, \
{"local0", LOG_LOCAL0}, \
{"local1", LOG_LOCAL1}, \
{"local2", LOG_LOCAL2}, \
{"local3", LOG_LOCAL3}, \
{"local4", LOG_LOCAL4}, \
{"local5", LOG_LOCAL5}, \
{"local6", LOG_LOCAL6}, \
{"local7", LOG_LOCAL7}, \
{0, -1}})
#endif
#endif
#ifdef __cplusplus
}
#endif