Date: Tue, 6 Oct 2015 17:14:28 -0400 From: Rich Felker <dalias@...c.org> To: musl@...ts.openwall.com Subject: Re: Bug in macro LOG_MAKEPRI in syslog.h On Tue, Oct 06, 2015 at 05:09:31PM -0400, Rich Felker wrote: > On Tue, Oct 06, 2015 at 09:06:49PM +0200, Pepe Aracil wrote: > > Hi all. > > > > > > Now the macro is defined as: > > #define LOG_MAKEPRI(f, p) (((f)<<3) | (p)) > > And must be: > > #define LOG_MAKEPRI(f, p) ((f) | (p)) > > > > The next example posts wrong facility (LOG_LOCAL1) because LOG_LOCAL1 is > > already rotated ( #define LOG_LOCAL1 (17<<3) ). > > > > syslog (LOG_MAKEPRI(LOG_LOCAL1, LOG_ERROR), > > "Unable to make network connection to %s. Error=%m", host); > > LOG_MAKEPRI is not supposed to be used for this; it's not even a > standard API. The documented way to use syslog is to pass > LOG_LOCAL1|LOG_ERROR. See the specification at > http://pubs.opengroup.org/onlinepubs/9699919799/functions/syslog.html > > I agree with your reasoning that the <<3 does not make sense, but > glibc and other historical systems, where the nonstandard macro was > copied from, do the same, and there does not seem to be any value in > offering an incompatible version of a nonstandard/legacy macro like > this. Presumably you're supposed to use LOG_FAC() first to do the >>3 > if you want to use these legacy macros, as in: > > LOG_MAKEPRI(LOG_FAC(LOG_LOCAL1), LOG_ERROR) > > Yes this is ugly.. Hmm, Alexander Monakov just pointed me to this: https://sourceware.org/bugzilla/show_bug.cgi?id=14347 So maybe we should change it. In any case I think it's a really bad idea to use this macro since it was "wrong" for a very long time on glibc (and on musl). The documented correct way to achieve the same thing is simply the | operator. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.