Mercurial > hg > CbC > CbC_gcc
diff libgfortran/io/open.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | 84e7813d76e9 |
children |
line wrap: on
line diff
--- a/libgfortran/io/open.c Thu Oct 25 07:37:49 2018 +0900 +++ b/libgfortran/io/open.c Thu Feb 13 11:34:05 2020 +0900 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2018 Free Software Foundation, Inc. +/* Copyright (C) 2002-2020 Free Software Foundation, Inc. Contributed by Andy Vaught F2003 I/O support contributed by Jerry DeLisle @@ -515,7 +515,8 @@ Do not error if opening file preconnected to stdin, stdout, stderr. */ u2 = NULL; - if ((opp->common.flags & IOPARM_OPEN_HAS_FILE) != 0) + if ((opp->common.flags & IOPARM_OPEN_HAS_FILE) != 0 + && !(compile_options.allow_std & GFC_STD_F2018)) u2 = find_file (opp->file, opp->file_len); if (u2 != NULL && (options.stdin_unit < 0 || u2->unit_number != options.stdin_unit) @@ -530,6 +531,14 @@ if (u2 != NULL) unlock_unit (u2); + /* If the unit specified is preconnected with a file specified to be open, + then clear the format buffer. */ + if ((opp->common.unit == options.stdin_unit || + opp->common.unit == options.stdout_unit || + opp->common.unit == options.stderr_unit) + && (opp->common.flags & IOPARM_OPEN_HAS_FILE) != 0) + fbuf_destroy (u); + /* Open file. */ s = open_external (opp, flags); @@ -705,12 +714,12 @@ if (u->filename && u->flags.status == STATUS_SCRATCH) remove (u->filename); #endif - free (u->filename); - u->filename = NULL; - + free (u->filename); + u->filename = NULL; + u = new_unit (opp, u, flags); if (u != NULL) - unlock_unit (u); + unlock_unit (u); return; }