/* Regression test for fseek and freopen bugs. */ #include int main (int argc, char *argv[]) { int lose = 0; char filename[L_tmpnam]; FILE *fp; if (tmpnam (filename) == NULL) { printf ("tmpnam failed\n"); lose = 1; } else { fp = fopen (filename, "w+"); fprintf (fp, "Hello world!\n"); fflush (fp); fseek (fp, 5L, SEEK_SET); if (fseek (fp, -1L, SEEK_CUR) < 0) { printf ("seek failed\n"); lose = 1; } fclose (fp); remove (filename); } { FILE *file1; FILE *file2; char filename1[L_tmpnam]; char filename2[L_tmpnam]; int ch; if (tmpnam (filename1) == NULL || tmpnam (filename2) == NULL) { printf ("tmpnam failed\n"); lose = 1; } else { file1 = fopen (filename1, "w"); fclose (file1); file2 = fopen (filename2, "w"); fputc ('x', file2); fclose (file2); file1 = fopen (filename1, "r"); file2 = freopen (filename2, "r", file1); if ((ch = fgetc (file2)) != 'x') { printf ("wrong character in reopened file, value = %d\n", ch); lose = 1; } fclose (file2); remove (filename1); remove (filename2); } } puts (lose ? "Test FAILED!" : "Test succeeded."); return lose; }