PR libfortran/21185
authorfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Sep 2007 14:52:46 +0000 (14:52 +0000)
committerfxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4>
Sat, 15 Sep 2007 14:52:46 +0000 (14:52 +0000)
* runtime/compile_options.c (set_options): Fix typo.
* runtime/main.c (store_exe_path): If getcwd is not available,
don't use it.
* intrinsics/getcwd.c: Same thing here.
* io/unix.c (fallback_access): New fallback function for access.
(fix_fd): Don't use dup if it's not available.
* configure.ac: Check for dup and getcwd.
* configure: Regenerate.
* config.h.in: Regenerate.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@128512 138bc75d-0d04-0410-961f-82ee72b054a4

libgfortran/ChangeLog
libgfortran/config.h.in
libgfortran/configure
libgfortran/configure.ac
libgfortran/intrinsics/getcwd.c
libgfortran/io/unix.c
libgfortran/runtime/compile_options.c
libgfortran/runtime/main.c

index b2ab1f0..58943ae 100644 (file)
@@ -1,3 +1,16 @@
+2007-09-15  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
+
+       PR libfortran/21185
+       * runtime/compile_options.c (set_options): Fix typo.
+       * runtime/main.c (store_exe_path): If getcwd is not available,
+       don't use it.
+       * intrinsics/getcwd.c: Same thing here.
+       * io/unix.c (fallback_access): New fallback function for access.
+       (fix_fd): Don't use dup if it's not available.
+       * configure.ac: Check for dup and getcwd.
+       * configure: Regenerate.
+       * config.h.in: Regenerate.
+
 2007-09-12  Francois-Xavier Coudert  <fxcoudert@gcc.gnu.org>
 
        * io/io.h: Include libgfortran.h first.
index 877fc5a..f805c43 100644 (file)
 /* Define to 1 if you have the <dlfcn.h> header file. */
 #undef HAVE_DLFCN_H
 
+/* Define to 1 if you have the `dup' function. */
+#undef HAVE_DUP
+
 /* Define to 1 if you have the `dup2' function. */
 #undef HAVE_DUP2
 
 /* Define to 1 if you have the `ftruncate' function. */
 #undef HAVE_FTRUNCATE
 
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
 /* libc includes geteuid */
 #undef HAVE_GETEUID
 
index f71c590..be685a4 100755 (executable)
@@ -18481,7 +18481,9 @@ done
 
 
 
-for ac_func in gettimeofday stat fstat lstat getpwuid vsnprintf
+
+
+for ac_func in gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd
 do
 as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
 echo "$as_me:$LINENO: checking for $ac_func" >&5
index 8aa3b63..a4588e1 100644 (file)
@@ -192,7 +192,7 @@ AC_CHECK_FUNCS(getrusage times mkstemp strtof strtold snprintf ftruncate chsize)
 AC_CHECK_FUNCS(chdir strerror getlogin gethostname kill link symlink perror)
 AC_CHECK_FUNCS(sleep time ttyname signal alarm ctime clock access fork execl)
 AC_CHECK_FUNCS(wait setmode execvp pipe dup2 close fdopen strcasestr getrlimit)
-AC_CHECK_FUNCS(gettimeofday stat fstat lstat getpwuid vsnprintf)
+AC_CHECK_FUNCS(gettimeofday stat fstat lstat getpwuid vsnprintf dup getcwd)
 
 # Check for glibc backtrace functions
 AC_CHECK_FUNCS(backtrace backtrace_symbols)
index e082680..60ec6fe 100644 (file)
@@ -37,6 +37,8 @@ Boston, MA 02110-1301, USA.  */
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_GETCWD
+
 extern void getcwd_i4_sub (char *, GFC_INTEGER_4 *, gfc_charlen_type);
 iexport_proto(getcwd_i4_sub);
 
@@ -82,3 +84,5 @@ PREFIX(getcwd) (char *cwd, gfc_charlen_type cwd_len)
   getcwd_i4_sub (cwd, &status, cwd_len);
   return status;
 }
+
+#endif
index 8acc02e..6cb578f 100644 (file)
@@ -211,13 +211,13 @@ move_pos_offset (stream* st, int pos_off)
 static int
 fix_fd (int fd)
 {
+#ifdef HAVE_DUP
   int input, output, error;
 
   input = output = error = 0;
 
   /* Unix allocates the lowest descriptors first, so a loop is not
      required, but this order is. */
-
   if (fd == STDIN_FILENO)
     {
       fd = dup (fd);
@@ -240,6 +240,7 @@ fix_fd (int fd)
     close (STDOUT_FILENO);
   if (error)
     close (STDERR_FILENO);
+#endif
 
   return fd;
 }
@@ -1775,6 +1776,36 @@ inquire_unformatted (const char *string, int len)
 }
 
 
+#ifndef HAVE_ACCESS
+
+#ifndef W_OK
+#define W_OK 2
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#endif
+
+/* Fallback implementation of access() on systems that don't have it.
+   Only modes R_OK and W_OK are used in this file.  */
+
+static int
+fallback_access (const char *path, int mode)
+{
+  if ((mode & R_OK) && open (path, O_RDONLY) < 0)
+    return -1;
+
+  if ((mode & W_OK) && open (path, O_WRONLY) < 0)
+    return -1;
+
+  return 0;
+}
+
+#undef access
+#define access fallback_access
+#endif
+
+
 /* inquire_access()-- Given a fortran string, determine if the file is
  * suitable for access. */
 
index 94e1f60..8e0a3fe 100644 (file)
@@ -108,8 +108,8 @@ set_options (int num, int options[])
 
   /* If backtrace is required, we set signal handlers on most common
      signals.  */
-#if defined(HAVE_SIGNAL_H) && (defined(SIGSEGV) || defined(SIGBUS) \
-                              || defined(SIGILL) || defined(SIGFPE))
+#if defined(HAVE_SIGNAL) && (defined(SIGSEGV) || defined(SIGBUS) \
+                            || defined(SIGILL) || defined(SIGFPE))
   if (compile_options.backtrace)
     {
 #if defined(SIGSEGV)
index be12c59..86777d9 100644 (file)
@@ -120,7 +120,11 @@ store_exe_path (const char * argv0)
     }
 
   memset (buf, 0, sizeof (buf));
+#ifdef HAVE_GETCWD
   cwd = getcwd (buf, sizeof (buf));
+#else
+  cwd = "";
+#endif
 
   /* exe_path will be cwd + "/" + argv[0] + "\0" */
   path = malloc (strlen (cwd) + 1 + strlen (argv0) + 1);