This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix for PR fortran/38956 - take 2


PR PR38956 is the failure of testsuite/gfortran.dg/chmod_{1,2,3}.f90 on i686-pc-cygwin.

The problem is due to a mismatch between Windows and POSIX file access models.
Under Windows, accounts with Administrator rights can write to any file
regardless of the file permission.  There is no easy way to check for this
from Fortran.

This is Take 2 of a patch for the problem.  The offending part of the test is
not compiled on cygwin.

2009-01-31 David Billinghurst (billingd@gcc.gnu.org)

    PR fortran/38956
    * gfortran.dg/chmod_1.f90: Conditionally compile test that fails on cygwin
    * gfortran.dg/chmod_2.f90: Likewise
    * gfortran.dg/chmod_3.f90: Likewise
    * gfortran.dg/open_errors.f90: Likewise


--- chmod_1.f90.orig 2009-01-31 22:45:29.890125000 +1100 +++ chmod_1.f90 2009-01-31 22:49:29.827625000 +1100 @@ -1,5 +1,5 @@ ! { dg-do run { target { ! *-*-mingw* } } } -! { dg-options "-std=gnu" } +! { dg-options "-std=gnu -x f95-cpp-input" } implicit none character(len=*), parameter :: n = "foobar_file" integer :: i @@ -19,10 +19,13 @@ if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort end if

+! Fails on *-*-cygwin if user has Administrator rights
+#ifndef __CYGWIN__
   call chmod (n, "a-w", i)
   if (i == 0 .and. getuid() /= 0) then
     if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
   end if
+#endif

   open (10,file=n)
   close (10,status="delete")

--- chmod_2.f90.orig    2009-01-31 22:45:35.624500000 +1100
+++ chmod_2.f90 2009-01-31 22:50:12.843250000 +1100
@@ -1,5 +1,5 @@
 ! { dg-do run { target { ! *-*-mingw* } } }
-! { dg-options "-std=gnu" }
+! { dg-options "-std=gnu -x f95-cpp-input" }
   implicit none
   character(len=*), parameter :: n = "foobar_file"
   integer :: i
@@ -19,10 +19,13 @@
     if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort
   end if

+! Fails on *-*-cygwin if user has Administrator rights
+#ifndef __CYGWIN__
   i = chmod (n, "a-w")
   if (i == 0 .and. getuid() /= 0) then
     if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
   end if
+#endif

   open (10,file=n)
   close (10,status="delete")

--- chmod_3.f90.orig    2009-01-31 22:45:41.358875000 +1100
+++ chmod_3.f90 2009-01-31 22:49:27.108875000 +1100
@@ -1,5 +1,5 @@
 ! { dg-do run { target { ! *-*-mingw* } } }
-! { dg-options "-std=gnu -fdefault-integer-8" }
+! { dg-options "-std=gnu -fdefault-integer-8 -x f95-cpp-input" }
   implicit none
   character(len=*), parameter :: n = "foobar_file"
   integer :: i
@@ -19,10 +19,13 @@
     if (access(n,"x") /= 0 .or. access(n,"X") /= 0) call abort
   end if

+! Fails on *-*-cygwin if user has Administrator rights
+#ifndef __CYGWIN__
   i = chmod (n, "a-w")
   if (i == 0 .and. getuid() /= 0) then
     if (access(n,"w") == 0 .or. access(n,"W") == 0) call abort
   end if
+#endif

   open (10,file=n)
   close (10,status="delete")

--- open_errors.f90.orig        2009-01-31 22:54:53.952625000 +1100
+++ open_errors.f90     2009-01-31 22:54:13.030750000 +1100
@@ -1,4 +1,5 @@
 ! { dg-do run { target { ! *-*-mingw* } } }
+! { dg-options "-x f95-cpp-input" }
 ! PR30005 Enhanced error messages for OPEN
 ! Submitted by Jerry DeLisle  <jvdelisle@gcc.gnu.org>
 character(60) :: msg
@@ -25,12 +26,15 @@

 open(77,file=n,status="new")
 i = chmod(n, "-w")
+! Fails on *-*-cygwin if user has Administrator rights
+#ifndef __CYGWIN__
 if (i == 0 .and. getuid() /= 0) then
  close(77, status="keep")
  open(77,file=n, iomsg=msg, iostat=i, action="write")
  if (i == 0) call abort()
  if (msg /= "Permission denied trying to open file 'temptestfile'") call abort()
 endif
+#endif

 i = chmod(n,"+w")
 open(77,file=n, iomsg=msg, iostat=i, action="read")


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]