It is exceedingly rare for malloc() to give you a recovery chance on failure. Folks are so used to the Linux model of overcommit+OOM killer that almost nobody's code can gracefully deal with memory exhaustion.
Alternatively: don’t call printf from your interposed malloc, bad things will happen ;)
I'd like to point out that FreeBSD's printf only does this if:
1. you use a lot of arguments (i.e. a compile-time decision, and quite rare)
2. use wchar_t support (also a compile-time decision and quite rare)
3. the output is to something that buffers/mallocs (i.e. stdio)
4. locale support does it for some reason (I simply haven't checked this)
Which makes it great to use in e.g. crash handlers. It's actually Async-Signal-Safe if you cut out the stdio bits. And it's available under BSD license... and actually a nice read (more on that in a separate post.)
I feel like you've just saved my future self from a terrible bug in the future. Thanks
The Linux kernel style suffix extensions (cf. https://www.kernel.org/doc/Documentation/printk-formats.txt) are much better on the latter front.
You can avoid this by doing something like:
setvbuf(stdout, NULL, _IONBF, 0);https://sourceware.org/git/?p=glibc.git;a=blob;f=stdio-commo...
1. printf may malloc so don't use it in an out of memory situation. Though I think this problem is vanishingly unlikely these days.
2. printf of floats used to require linking to the math library on some platforms (-lm)
3. I am pathetically grateful for nice diagnostics you get when you use the wrong % formatter in more recent C compilers. This used to be a rich source of errors and non-portability.