This is the mail archive of the libc-alpha@cygnus.com mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: Bug in 64-bit printf on PPC


>>>>> Franz Sirl writes:
Franz> This should probably be added to the testsuite.

Ok, I've copied tiformat and added your examples.  The appended
program tllformat.c should show the same bugs as your program - and
can easily be added to glibc.

Andreas

1999-02-14  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* stdio-common/Makefile (tests): tllformat added.

	* stdio-common/tllformat.c: New program, based on tiformat.c with
	examples from Franz Sirl <Franz.Sirl-kernel@lauterbach.com>.

Program tllformat.c:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include <stdio.h>
#include <string.h>

/* The original file was tiformat.c and it has been changed for long long tests. */
typedef struct {
  int line;
  long long value;
  const char *result;
  const char *format_string;
} sprint_int_type;

sprint_int_type sprint_ints[] =
{
  {__LINE__, 0x00000000ULL,		"0", "%llx"},
  {__LINE__, 0xffff00000000208bULL,	"ffff00000000208b", "%llx"},
  {__LINE__, 0xffff00000000208bULL,	"18446462598732849291", "%llu"},
  {__LINE__, 18446462598732849291ULL,	"ffff00000000208b", "%llx"},
  {__LINE__, 18446462598732849291ULL,	"18446462598732849291", "%llu"},
  {__LINE__, 18359476226655002763ULL,	"fec9f65b0000208b", "%llx"},
  {__LINE__, 18359476226655002763ULL,	"18359476226655002763", "%llu"},

  {0},
};

int
main(void)
{
    int errcount = 0;
    int testcount = 0;
#define BSIZE 1024
    char buffer[BSIZE];
    sprint_int_type *iptr;
    for (iptr = sprint_ints; iptr->line; iptr++) {
	sprintf(buffer, iptr->format_string, iptr->value);
	if (strcmp(buffer, iptr->result) != 0) {
	    errcount++;
	    printf(
    "Error in line %d using \"%s\".  Result is \"%s\"; should be: \"%s\".\n",
		    iptr->line, iptr->format_string, buffer, iptr->result);
	}
	testcount++;
    }

    if (errcount == 0) {
	printf ("Encountered no errors in %d tests.\n", testcount);
	return 0;
    }
    else {
	printf ("Encountered %d errors in %d tests.\n",
		errcount, testcount);
	return 1;
    }
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

--- stdio-common/Makefile.~1~	Sun Feb  7 12:29:12 1999
+++ stdio-common/Makefile	Sun Feb 14 21:53:27 1999
@@ -47,7 +47,7 @@
 	 temptest tst-fileno test-fwrite tst-ungetc tst-ferror \
 	 xbug errnobug \
 	 bug1 bug2 bug3 bug4 bug5 bug6 bug7 bug8 bug9 bug10 bug11 bug12 \
-	 tfformat tiformat tstdiomisc tst-printfsz tst-wc-printf \
+	 tfformat tiformat tllformat tstdiomisc tst-printfsz tst-wc-printf \
 	 scanf1 scanf2 scanf3 scanf4 scanf5 scanf7 scanf8 scanf9 scanf10 \
 	 scanf12 tst-tmpnam
 

-- 
 Andreas Jaeger   aj@arthur.rhein-neckar.de    jaeger@informatik.uni-kl.de
  for pgp-key finger ajaeger@aixd1.rhrk.uni-kl.de


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]