1 /* vi: set sw=4 ts=4: */
2 /*
3  * prioritynames[] and facilitynames[]
4  *
5  * Copyright (C) 2008 by Denys Vlasenko <vda.linux@gmail.com>
6  *
7  * Licensed under GPLv2, see file LICENSE in this source tree.
8  */
9 #include "libbb.h"
10 #include "common_bufsiz.h"
11 #define SYSLOG_NAMES
12 #define SYSLOG_NAMES_CONST
13 #include <syslog.h>
14 
15 #if 0
16 /* For the record: with SYSLOG_NAMES <syslog.h> defines
17  * (not declares) the following:
18  */
19 typedef struct _code {
20 	/*const*/ char *c_name;
21 	int c_val;
22 } CODE;
23 /*const*/ CODE prioritynames[] = {
24     { "alert", LOG_ALERT },
25 ...
26     { NULL, -1 }
27 };
28 /* same for facilitynames[] */
29 
30 /* This MUST occur only once per entire executable,
31  * therefore we can't just do it in syslogd.c and logger.c -
32  * there will be two copies of it.
33  *
34  * We cannot even do it in separate file and then just reference
35  * prioritynames[] from syslogd.c and logger.c - bare <syslog.h>
36  * will not emit extern decls for prioritynames[]! Attempts to
37  * emit "matching" struct _code declaration defeat the whole purpose
38  * of <syslog.h>.
39  *
40  * For now, syslogd.c and logger.c are simply compiled into
41  * one object file.
42  */
43 #endif
44 
45 /* musl decided to be funny and it implements these as giant defines
46  * of the form: ((CODE *)(const CODE []){ ... })
47  * Which works, but causes _every_ function using them
48  * to have a copy on stack (at least with gcc-6.3.0).
49  * If we reference them just once, this saves 150 bytes.
50  * The pointers themselves are optimized out
51  * (no size change on uclibc).
52  */
53 static const CODE *const bb_prioritynames = prioritynames;
54 static const CODE *const bb_facilitynames = facilitynames;
55 
56 
57 #if ENABLE_SYSLOGD
58 #include "syslogd.c"
59 #endif
60 
61 #if ENABLE_LOGGER
62 #include "logger.c"
63 #endif
64