Incidentally, is there a reason that strerror_lr is not exposed to userland, it has no prototype (not even one guarded by _NETBSD_SOURCE) anywhere in /usr/include/* and there's actually no alias for it (all that actually exists is the internal _strerror_lr name).
That violates your "We have _l versions of every function that depends on the (global) locale" doesn't it? strerror_r depends upon the global locale, yet it appears that we don't actually have an _l version of that one. Is this really intended only as an internal libc function (the one that actually does all the real work for all the strerror*() functions) or is it intended for users to be able to use that as well? [If it matters, I vote for the latter interpretation.] It seems like to expose it, all we need is a weak_alias() in strerror_r.c and a prototype in <string.h> (and doc...) Also, can someone explain strerror_ss() and strerror_r_ss() - which look to be implementations of the ancient (pre locale) strerror() functions, and as best I can see, exist solely for the purposes of jemalloc() ? They are exposed in libc, but have no prototypes - and I assume should not be used without a very good reason, and hence not be documented either. kre ps: I'm going to hold off on the promised man page update until this is resolved, so it can document all (but only) what we actually provide.