From: Rich Felker <dalias@libc.org>
To: "Gary E. Miller" <gem@rellim.com>
Cc: musl@lists.openwall.com
Subject: Re: [musl] *strerror_r() bug in musl
Date: Wed, 13 Apr 2022 16:38:35 -0400 [thread overview]
Message-ID: <20220413203835.GW7074@brightrain.aerifal.cx> (raw)
In-Reply-To: <20220413103651.0087ca81@spidey.rellim.com>
On Wed, Apr 13, 2022 at 10:36:51AM -0700, Gary E. Miller wrote:
> Yo Rich!
>
> On Wed, 13 Apr 2022 10:05:33 -0400
> Rich Felker <dalias@libc.org> wrote:
>
> > > > When _GNU_SOURCE is defined with glibc, then strerror_r() returns
> > > > a char *.
> > >
> > > I have met this in multiple places the last decade. The usual way to
> > > fix it is to also check for GNU libc in addition to _GNU_SOURCE.
> > >
> > > #if defined (__GLIBC__) && defined (_GNU_SOURCE)
> > > /* non-standard GLIBC exception */
> > > #else
> > > /* standard behavior for everything else */
> > > #endif
> >
> > That, or probe for the signature with a configure-style check and use
> > the result of that, as in
> >
> > #ifdef HAVE_GNU_STRERROR_R
> > // handle the GNU version
> > #else
> > // code written to the standard
> > #endif
>
> gpsd runs on a huge variety of hardware and software. We used to have
> rats nests of #ifdef's as suggested above. But that only works when
> your library code actually follows your documentation, and our dev
> actually read and understood your documentation.
>
> Since you doc fails to mention this "quirk", it is not possible to
> forsee this issue before debugging the rare crash.
Our docs say we aim to conform to ISO C and POSIX. The alternate glibc
strerror_r does not conform to POSIX and therefore we don't do it.
This isn't musl being weird, it's glibc being weird. I agree it would
be helpful to highlight this difference though. We have material on
the wiki covering a bunch of differences from glibc, but somehow this
was overlooked:
https://wiki.musl-libc.org/functional-differences-from-glibc.html
In general, none of these affect software which is not making
non-portable glibc-specific assumptions.
> Now consider that gpsd supports well over 100 targets, back to POSIX
> 2001. glibc has a long history of changes around strerror_r(), and gpsd
> has to support each one. Then there are all the other libc. That is a
> lot of doc to check. And a lot of #ifdeff version chacks.
>
> OBTW: did I mention musl does not appear to have any #defines to
> specify its current version? Or even that it is musl? Or did I
> miss something else in the doc?
No, that's intentional. The macros that tell you what to expect are
_POSIX_VERSION and others from unistd.h. Attempting to hard-code
asssumptions about musl is explicitly unsupported usage. You have to
either detect or just assume standard behavior. It's covered in the
FAQ:
https://wiki.musl-libc.org/faq.html
> So you expect me to use the glibc #defines, because musl lacks them.
No, I expect you not to assume non-conforming glibc behavior on
platforms that aren't glibc. The same would apply on any of the BSDs.
Rich
next prev parent reply other threads:[~2022-04-13 20:38 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-12 20:43 [musl] ✘strerror_r() " Gary E. Miller
2022-04-12 20:48 ` alice
2022-04-12 21:04 ` Gary E. Miller
2022-04-12 20:56 ` Alex Xu (Hello71)
2022-04-12 21:07 ` Gary E. Miller
2022-04-12 23:16 ` Wolf
2022-04-13 0:15 ` Gary E. Miller
2022-04-12 21:13 ` Gary E. Miller
2022-04-13 3:44 ` Rich Felker
2022-04-13 12:24 ` [musl] *strerror_r() " Natanael Copa
2022-04-13 14:05 ` Rich Felker
2022-04-13 17:36 ` Gary E. Miller
2022-04-13 20:38 ` Rich Felker [this message]
2022-04-13 21:16 ` Gary E. Miller
2022-04-13 22:27 ` Rich Felker
2022-04-13 22:43 ` Gary E. Miller
2022-04-13 22:58 ` Rich Felker
2022-04-13 23:07 ` Gary E. Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220413203835.GW7074@brightrain.aerifal.cx \
--to=dalias@libc.org \
--cc=gem@rellim.com \
--cc=musl@lists.openwall.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.vuxu.org/mirror/musl/
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).