On 2014-01-23 11:25:56 -0500, Tom Lane wrote:
> Andres Freund <and...@2ndquadrant.com> writes:
> > I was wondering more about the nature of the runtime check than the fact
> > that it's a runtime check at all... E.g. snprintf.c simply skips over
> > unknown format characters and might not have been detected as faulty on
> > 32bit platforms by that check. Which might be considered a good thing :)
> Oh ... gotcha. Yeah, it's possible that snprintf would behave in a way
> that masks the fact that it doesn't really recognize the "z" flag, but
> that seems rather unlikely to me. More likely it would abandon processing
> the %-sequence on grounds it's malformed.
> I will try the patch on my old HPUX dinosaur, which I'm pretty sure
> does not know "z", and verify this is the case.
I don't know how, but I've introduced a typo in the version I sent if
you haven't noticed yet, there's a " missing in
PGAC_FUNC_PRINTF_SIZE_T_SUPPORT. "%zu" instead of "%zu
> Also, I'm guessing Windows' version of snprintf doesn't have "z" either.
> Could someone try the patch's configure test program on Windows and see
> what the result is?
I've attached a version of that here, for $windowsperson's
convenience. I hope I got the llp stuff right...
Andres Freund http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Training & Services
/* confdefs.h */
#define UINT64_FORMAT "%llu"
/* end confdefs.h. */
* Check whether we print correctly using %z by printing the biggest
* unsigned number fitting in a size_t and using both %zu and the format for
* 64bit numbers.
snprintf(bufz, 100, "%zu", ~(size_t)0);
snprintf(buf64, 100, UINT64_FORMAT, ~(size_t)0);
if (strcmp(bufz, buf64) != 0)
fprintf(stderr, "no can do %%z\n");
fprintf(stderr, "can do %%z\n");
Sent via pgsql-hackers mailing list (email@example.com)
To make changes to your subscription: