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...


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");
          fprintf(stderr, "can do %%z\n");
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:

Reply via email to