On Jan 11, 7:39am, k...@munnari.oz.au (Robert Elz) wrote: -- Subject: Re: CVS commit: src/lib/libwrap
| | PR/53851: Andreas Gustafsson: libwrap prints "m" instead of errno | | Handle %m inline if needed, otherwise vasprintf strips the %m and... | | That change handles the simple case of %m but fails on %%m (though | that is, I assume, unlikely, in libwrap error messages). This is not intended to be a general solution. In fact it is a compromise: I thought of changing all %m's to %s, strerror(errno) in the messages and I decided that it was more intrusive than the simplistic change. | The simple change, making the test be ... | | if ((ptr = strstr(fmt, "%m")) != NULL && | (ptr == fmt || ptr[-1] != '%')) | | fails on %%%m (though I would guess that is even less likely). | | There's no good way to correctly fix this using this technique, what | is needed is to do as the syslog() functions do, and actually do a | (restricted) parse of the format string. I understand, this is why I grepped the source for %m and saw that there was no use other than " %m\0". | For this though, I suspect it would be overkill. The point of this message | is just to make sure everyone is aware of this, and perhaps, if there is | some suitable place to document it, that that be done. Yes, the perfect being the enemy of the good. | Oh for the ability to simply add application specific format specifiers | to printf - I think plan9 has something along those lines. It would be | farily easy to add, if only gcc didn't go and do printf format string | analysis and complain when it sees something it does not understand. Yes, that is something I wished for many times. But then there are trade-offs (such as compile time checking) and other safety guarantees. christos