And here is a more light-wight variant, suggested by Nightstrike:
Using '.' instead of creating a new directory - and checking for __WIN32__ instead for __MINGW32__. The only downside of this variant is that it does not check whether "close(10,status='delete')" will delete a directory without failing with an error. – If the latter makes sense, I think a follow-up check should be added to ensure the directory has indeed been removed by 'close'. Thoughts about which variant is better? Other suggestions or comments? Tobias PS: On my x86-64 Linux, OPEN works but READ fails with EISDIR/errno == 21. On 19.12.22 10:09, Tobias Burnus wrote:
As discussed in #gfortran IRC, on Windows opening a directory fails with EACCESS. (It works under Cygwin - nightstrike was so kind to test this.) Additionally, '[ -d dir ] || mkdir dir' is also not very portable. Hence, I use an auxiliary C file calling the POSIX functions and expect a fail for non-Cygwin windows. Comments? Suggestions? - If there aren't any, I plan to commit it as obvious tomorrow.
----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201, 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer: Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München; Registergericht München, HRB 106955
gfortran.dg/read_dir.f90: Make PASS on Windows Avoid call to the shell using POSIX syntax and use '.' instead. Additionally, expect fail on non-Cygwin Windows as opening a directory is documented to fail with EACCESS. gcc/testsuite/ChangeLog: * gfortran.dg/read_dir.f90: Open '.' instead of a freshly created directory; expect error on Windows when opening a directory. gcc/testsuite/gfortran.dg/read_dir.f90 | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gcc/testsuite/gfortran.dg/read_dir.f90 b/gcc/testsuite/gfortran.dg/read_dir.f90 index c7ddc51fb90..c91d0f78413 100644 --- a/gcc/testsuite/gfortran.dg/read_dir.f90 +++ b/gcc/testsuite/gfortran.dg/read_dir.f90 @@ -1,20 +1,27 @@ ! { dg-do run } +! { dg-additional-options "-cpp" } +! ! PR67367 + program bug implicit none character(len=1) :: c - character(len=256) :: message integer ios - call system('[ -d junko.dir ] || mkdir junko.dir') - open(unit=10, file='junko.dir',iostat=ios,action='read',access='stream') + open(unit=10, file='.',iostat=ios,action='read',access='stream') + +#if defined(__WIN32__) && !defined(__CYGWIN__) + ! Windows is documented to fail with EACCESS when trying to open a directory + if (ios == 0) & + stop 3 ! Expected EACCESS + stop 0 ! OK +#endif + if (ios.ne.0) then - call system('rmdir junko.dir') STOP 1 end if read(10, iostat=ios) c - if (ios.ne.21.and.ios.ne.0) then - close(10, status='delete') + close(10) + if (ios.ne.21.and.ios.ne.0) then ! EISDIR has often the value 21 STOP 2 end if - close(10, status='delete') end program bug