Adjust cdecl__emit to avoid some known problems with snprintf
implementations:
* some implementations (e.g., newlib 1.8.2) write to the destination
when the size is zero.
* some implementations (e.g., HP-UX 11) return -1 when the string is
truncated.
* some implementations (e.g., the replacement provided by gnulib!)
allocate memory even for trivial conversions and return -1 on malloc
failure.
Since we currently use gnulib, only the last one is presently a concern,
but the plan is to eventually remove the library dependency on gnulib
snprintf since in reality we barely need any snprintf functionality.
Adjust the cdecl__emit implementation to simply avoid tripping over these
sorts of problems. Other snprintf calls in the library remain as before.