Hi Simon, > > It matters if you are asking to > > print a 64-bit long, but passed a 32-bit int. To be safe, you should be > > using 1L or even 1UL to match the %lx. > > My system is all 32-bit (debian i386 unstable). Using 1UL or even using > a 'long int l = 12345' and passing that as a parameter to asprintf > doesn't change anything.
But there may be 64-bit systems which pass arguments on the stack. On these platforms, the test would fail (on big-endian ones always, on little-endian ones with a certain probability). Even though the test does not fail on Solaris 64-bit (both x86_64 and sparc64), it's worth fixing: > building this under Cygwin on native Windows works fine. Confirmed. One more reason to recommend Cygwin for mingw builds: you don't have to worry whether a bug comes from the Debian packaging, from the fact that autoconf tests choose the "cross-compiling" alternative, or from Wine. 2010-04-24 Bruno Haible <br...@clisp.org> Avoid a gcc warning. * tests/test-vasprintf.c (test_vasprintf, test_asprintf): Pass argument of correct type for %08lx directive. Reported by Eric Blake. --- tests/test-vasprintf.c.orig Sat Apr 24 17:52:33 2010 +++ tests/test-vasprintf.c Sat Apr 24 17:49:47 2010 @@ -60,7 +60,7 @@ for (repeat = 0; repeat <= 8; repeat++) { char *result; - int retval = my_asprintf (&result, "%08lx", 12345); + int retval = my_asprintf (&result, "%08lx", 12345UL); ASSERT (retval == 8); ASSERT (result != NULL); ASSERT (strcmp (result, "00003039") == 0); @@ -86,7 +86,7 @@ for (repeat = 0; repeat <= 8; repeat++) { char *result; - int retval = asprintf (&result, "%08lx", 12345); + int retval = asprintf (&result, "%08lx", 12345UL); ASSERT (retval == 8); ASSERT (result != NULL); ASSERT (strcmp (result, "00003039") == 0);