Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Tue, 30 Aug 2016 17:20:02 -0400
From: Rich Felker <>
To: Per Johansson <>
Subject: Re: syslog.h prioritynames define not compatible with

On Thu, Aug 25, 2016 at 09:47:06AM +0200, Per Johansson wrote:
> Hello,
> I'm trying to port a code base to musl. I've run into an issue with
> prioritynames as defined by syslog.h:
> CODE *pri_code = prioritynames;
> produces
> error: initialization discards 'const' qualifier from pointer target
> type [-Werror=discarded-qualifiers]
> This is repeated once per element in the array.
> While the error message points to -Wdiscarded-qualifiers I believe
> this is actually due to us using -Wwrite-strings which turns string
> literals into type const char* instead of char*.

This is a nasty problem with how -Wwrite-strings is implemented. It
does not act as a warning option but fundamentally changes the
languages semantics in a way that is not C. I have an open bug report
against gcc for this:

> I suppose the most compatible solution would be to cast each string
> literal to char* in the define. It's either that or use const char* in
> the struct, but that's likely to cause issues in other programs.
> Or use some trickery to disable the warning I suppose, wouldn't know about that.
> Please CC me on any reply as I'm currently not subscribed.
> Minimal code to reproduce:
> #define SYSLOG_NAMES
> #include <syslog.h>
> CODE *c = prioritynames;
> Compiles without warning:
> gcc -nostdinc -isystem include -isystem obj/include -c test.c
> Adding -Wwrite-strings give warnings:
> gcc -Wwrite-strings -nostdinc -isystem include -isystem obj/include -c test.c

Based on the above, I don't consider this a bug in musl but a bug in
gcc's -Wwrite-strings. However, there are a lot of other problems
created by the current implementation of the SYSLOG_NAMES stuff, and
it needs to be redone entirely, probably more closely matching how
legacy implementations did it (the SYSLOG_NAMES stuff is all legacy
cruft anyway and shouldn't be used in modern code).


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.