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