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.
Yea, hopefully. > 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... Greetings, Andres Freund -- Andres Freund http://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Training & Services
/* confdefs.h */ #define UINT64_FORMAT "%llu" /* end confdefs.h. */ #include <stdio.h> #include <string.h> int main() { char buf64[100]; char bufz[100]; /* * 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"); else fprintf(stderr, "can do %%z\n"); }
-- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers