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 */ 19typedef 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 */ 53static const CODE *const bb_prioritynames = prioritynames; 54static 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