Ranier> Where " ends up with two copies of pg_ultoa_n inlined into it", Ranier> in this simplified example?
The two references to sprintf are both inlined copies of your pg_utoa.
Ranier> (b) I call this tail cut, I believe it saves time, for sure.
You seem to have missed the point that the pg_ultoa_n / pg_ulltoa_n functions DO NOT ADD A TRAILING NUL. Which means that pg_ltoa / pg_lltoa can't just tail call them, since they must add the NUL after.
Ranier> Regarding bugs:
Ranier> (c) your version don't check size of a var, when pg_ulltoa_n Ranier> warning about "least MAXINT8LEN bytes."
Ranier> So in theory, I could blow it up, by calling pg_lltoa.
No. Callers of pg_lltoa are required to provide a buffer of at least MAXINT8LEN+1 bytes.
Thanks for explanations.
So I would change, just the initialization (var uvalue), even though it is irrelevant.
int pg_lltoa(int64 value, char *a) { int len = 0; uint64 uvalue;