Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 6 Oct 2015 17:14:28 -0400
From: Rich Felker <>
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) ).
> > 
> >         "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
> 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:
> Yes this is ugly..

Hmm, Alexander Monakov just pointed me to this:

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.


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.