/* If stdio is working correctly, after this is run infile and outfile will have the same contents. If the bug (found in GNU C library 0.3) exhibits itself, outfile will be missing the 2nd through 1023rd characters. */ #include <stdio.h> #include <stdlib.h> #include <unistd.h> static char buf[8192]; int main (void) { FILE *in; FILE *out; static char inname[] = "/tmp/bug5.in"; static char outname[] = "/tmp/bug5.out"; char *printbuf; size_t i; int result; /* Create a test file. */ in = fopen (inname, "w+"); if (in == NULL) { perror (inname); return 1; } for (i = 0; i < 1000; ++i) fprintf (in, "%Zu\n", i); out = fopen (outname, "w"); if (out == NULL) { perror (outname); return 1; } if (fseek (in, 0L, SEEK_SET) != 0) abort (); putc (getc (in), out); i = fread (buf, 1, sizeof (buf), in); if (i == 0) { perror ("fread"); return 1; } if (fwrite (buf, 1, i, out) != i) { perror ("fwrite"); return 1; } fclose (in); fclose (out); puts ("There should be no further output from this test."); fflush (stdout); /* We must remove this entry to assure the `cmp' binary does not use the perhaps incompatible new shared libraries. */ unsetenv ("LD_LIBRARY_PATH"); asprintf (&printbuf, "cmp %s %s", inname, outname); result = system (printbuf); remove (inname); remove (outname); exit ((result != 0)); }