ulogd: Use (FILE *)(-1) as dummy logfile when logging to syslog
PATCH 3/4 ulogd: Use (FILE *)(-1) as dummy logfile when logging to syslog
Fixes compilation error with musl libc:
ulogd.c:86:13: error: storage size of 'syslog_dummy' isn't known
static FILE syslog_dummy;
--- src/ulogd.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
src/ulogd.c +5 -5
@@ -83,7 +83,7 @@ static char *ulogd_logfile = NULL;static const char *ulogd_configfile =ULOGD_CONFIGFILE ;static const char *ulogd_pidfile =NULL ;static int ulogd_pidfile_fd =-1 ; -static FILE syslog_dummy; +#define SYSLOG_DUMMY ((FILE *)(-1))static int info_mode =0 ;
@@ -427,7 +427,7 @@ void __ulogd_log(int level, char *file, int line, const char *format, ...)if (level < loglevel_ce.u.value)return ; -if (logfile == &syslog_dummy) { +if (logfile ==SYSLOG_DUMMY ) {/* FIXME: this omits the 'file' string */ va_start (ap, format);vsyslog (ulogd2syslog_level (level), format, ap);
@@ -950,7 +950,7 @@ static int logfile_open(const char *name) logfile = stdout; }else if (!strcmp (name,"syslog" )) {openlog ("ulogd" ,LOG_PID ,LOG_DAEMON ); - logfile = &syslog_dummy; + logfile =SYSLOG_DUMMY ; }else { logfile =fopen (ulogd_logfile,"a" );if (!logfile) {
@@ -1240,7 +1240,7 @@ static void sigterm_handler(int signal)unload_plugins ();#endif -if (logfile !=NULL && logfile != stdout && logfile != &syslog_dummy) { +if (logfile !=NULL && logfile != stdout && logfile !=SYSLOG_DUMMY ) {fclose (logfile); logfile =NULL ; }
@@ -1262,7 +1262,7 @@ static void signal_handler(int signal)switch (signal) {case SIGHUP :/* reopen logfile */ -if (logfile != stdout && logfile != &syslog_dummy) { +if (logfile != stdout && logfile !=SYSLOG_DUMMY ) {fclose (logfile); logfile =fopen (ulogd_logfile,"a" );if (!logfile) {
Signature · 1 line
2.3.6
src/ulogd.c static char *ulogd_logfile = NULL; · line 86
Quoted 2 lines · Felix Janda
src/ulogd.c +1
-1-static FILE syslog_dummy; +#define SYSLOG_DUMMY ((FILE *)(-1))
^This will likely introduce a "cast to pointer from integer of different size" warning on LP64 targets.
syslog_dummy = fopen("/dev/null", "w");
would be, at the cost of one more open fd, a "nice" solution, since syslog_dummy is guaranteed to be unique, without making any assumptions about any magic value(s) being unused.
That, or turn the assumptive macro into
#define SYSLOG_DUMMY ((FILE *)(intptr_t)-1)
Quoted 8 lines · Jan Engelhardt
src/ulogd.c static char *ulogd_logfile = NULL; · line 86
Quoted 2 lines · Felix Janda
src/ulogd.c +1
-1-static FILE syslog_dummy; +#define SYSLOG_DUMMY ((FILE *)(-1))^This will likely introduce a "cast to pointer from integer of different size" warning on LP64 targets.
Quoted 5 lines
syslog_dummy=fopen("/dev/null", "w");would be, at the cost of one more open fd, a "nice" solution, since
syslog_dummyis guaranteed to be unique, without making any assumptions about any magic value(s) being unused.
This seems seems like a cleaner approach.
Preparing a new patch...
Quoted 2 lines
That, or turn the assumptive macro into
#define SYSLOG_DUMMY ((FILE *)(intptr_t)-1)
Thanks,
Felix