]> granicus.if.org Git - postgresql/commit
Rationalize snprintf.c's handling of "ll" formats.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Oct 2018 18:33:13 +0000 (14:33 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 3 Oct 2018 18:33:13 +0000 (14:33 -0400)
commit595a0eab7f425e3484639fae1f7e221fe9c2651a
treed59f5057b6b3641884a5e05395143e7ee2346074
parent6d842be6c11887930a0f4128fd6aa4de427cfd2a
Rationalize snprintf.c's handling of "ll" formats.

Although all known platforms define "long long" as 64 bits, it still feels
a bit shaky to be using "va_arg(args, int64)" to pull out an argument that
the caller thought was declared "long long".  The reason it was coded like
this, way back in commit 3311c7669, was to work around the possibility that
the compiler had no type named "long long" --- and, at the time, that it
maybe didn't have 64-bit ints at all.  Now that we're requiring compilers
to support C99, those concerns are moot.  Let's make the code clearer and
more bulletproof by writing "long long" where we mean "long long".

This does introduce a hazard that we'd inefficiently use 128-bit arithmetic
to convert plain old integers.  The way to tackle that would be to provide
two versions of fmtint(), one for "long long" and one for narrower types.
Since, as of today, no platforms require that, we won't bother with the
extra code for now.

Discussion: https://postgr.es/m/1680.1538587115@sss.pgh.pa.us
src/port/snprintf.c