Distinguish printf-like functions that support %m from those that don't.
Tom Lane <tgl@sss.pgh.pa.us>
Distinguish printf-like functions that support %m from those that don't. The elog/ereport family of functions certainly support the %m format spec, because they implement it "by hand". But elsewhere we have printf wrappers that might or might not allow it depending on whether the platform's printf does. (Most non-glibc versions don't, and notably, src/port/snprintf.c doesn't.) Hence, rather than using the gnu_printf format archetype interchangeably for all these functions, use it only for elog/ereport. This will allow us to get compiler warnings for mistakes like the ones fixed in commit a13b47a59, at least on platforms where printf doesn't take %m and gcc is correctly configured to know it. (Unfortunately, that won't happen on Linux, nor on macOS according to my testing. It remains to be seen what the buildfarm's gcc-on-Windows animals will think of this, but we may well have to rely on less-popular platforms to warn us about unportable code of this kind.) Discussion: https://postgr.es/m/2975.1526862605@sss.pgh.pa.us
Files
| Path | Change | +/− |
|---|---|---|
| config/c-compiler.m4 | modified | +7 −7 |
| configure | modified | +3 −3 |
| src/include/c.h | modified | +5 −1 |
| src/include/pg_config.h.in | modified | +2 −2 |
| src/include/utils/elog.h | modified | +15 −15 |
Discussion
- Allowing printf("%m") only where it actually works 50 messages · 2018-05-21 → 2018-10-09