Hi, someone made some effort to build gfortran on an android phone (see the PR). One problem was that libgfortran was using the old BSD S_IREAD and S_IWRITE mode flags instead of the POSIX S_IRUSR and S_IWUSR. The attached patch replaces the usage of these BSD flags with the POSIX ones. I decided to omit any ifdef dance in case the target doesn't support the POSIX flags, since it turns out that we have used those unconditionally in io/unix.c going back at least to the 4.0 branch.
Ok for trunk? 2011-12-21 Janne Blomqvist <j...@gcc.gnu.org> Tobias Burnus <bur...@net-b.de> PR libfortran/51646 * acinclude.m4 (LIBGFOR_CHECK_UNLINK_OPEN_FILE): Use POSIX mode flags, omit mode argument when flags argument does not have O_CREAT. * io/unix.c (tempfile): Use POSIX mode flags. -- Janne Blomqvist
Index: acinclude.m4 =================================================================== --- acinclude.m4 (revision 182581) +++ acinclude.m4 (working copy) @@ -119,7 +119,7 @@ { int fd; - fd = open ("testfile", O_RDWR | O_CREAT, S_IWRITE | S_IREAD); + fd = open ("testfile", O_RDWR | O_CREAT, S_IWUSR | S_IRUSR); if (fd <= 0) return 0; if (unlink ("testfile") == -1) @@ -127,7 +127,7 @@ write (fd, "This is a test\n", 15); close (fd); - if (open ("testfile", O_RDONLY, S_IWRITE | S_IREAD) == -1 && errno == ENOENT) + if (open ("testfile", O_RDONLY) == -1 && errno == ENOENT) return 0; else return 1; Index: io/unix.c =================================================================== --- io/unix.c (revision 182581) +++ io/unix.c (working copy) @@ -1112,9 +1112,9 @@ #if defined(HAVE_CRLF) && defined(O_BINARY) fd = open (template, O_RDWR | O_CREAT | O_EXCL | O_BINARY, - S_IREAD | S_IWRITE); + S_IRUSR | S_IWUSR); #else - fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IREAD | S_IWRITE); + fd = open (template, O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); #endif } while (fd == -1 && errno == EEXIST);