diff options
Diffstat (limited to 'stdio-common/bug7.c')
-rw-r--r-- | stdio-common/bug7.c | 72 |
1 files changed, 42 insertions, 30 deletions
diff --git a/stdio-common/bug7.c b/stdio-common/bug7.c index 7b320ae..2b1efe3 100644 --- a/stdio-common/bug7.c +++ b/stdio-common/bug7.c @@ -6,50 +6,62 @@ int main (int argc, char *argv[]) { int lose = 0; - char filename[] = "/tmp/foo"; + char filename[L_tmpnam]; FILE *fp; - fp = fopen (filename, "w+"); - fprintf (fp, "Hello world!\n"); - fflush (fp); - fseek (fp, 5L, SEEK_SET); - if (fseek (fp, -1L, SEEK_CUR) < 0) + if (tmpnam (filename) == NULL) { - printf ("seek failed\n"); + printf ("tmpnam failed\n"); lose = 1; } - fclose (fp); - remove (filename); + 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[] = "/tmp/foo"; - char filename2[] = "/tmp/bar"; + char filename1[L_tmpnam]; + char filename2[L_tmpnam]; int ch; - 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') + if (tmpnam (filename1) == NULL || tmpnam (filename2) == NULL) { - printf ("wrong character in reopened file, value = %d\n", ch); + printf ("tmpnam failed\n"); lose = 1; } -#if 0 - /* Hey, how did this ever worked? `file1' is already closed!!! - -- drepper@gnu */ - fclose (file1); -#endif - fclose (file2); - remove (filename1); - remove (filename2); + 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."); |