| /* 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)); |
| } |