re PR libfortran/21185 (Improve testsuite results on newlib targets)
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sat, 15 Sep 2007 14:52:46 +0000 (14:52 +0000)
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>
Sat, 15 Sep 2007 14:52:46 +0000 (14:52 +0000)
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.

From-SVN: r128512

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 b2ab1f01a0193274c8df48da6bad6bc43b04a472..58943ae3ba3e6ba52e63e575d5c1252bbcb0e684 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 877fc5a6e0174e89f72440ee7554180a7074ee53..f805c437695b1c6df77c3e0809457edac06a3de9 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 f71c5900f2e677a17ce0de5a8d01412b1b993324..be685a43f186937c79ac21751a8048a4ff05aa0d 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 8aa3b637785e3a56d8791d630940a4b7e4a0236d..a4588e17a7a04aa7290a4fb2ba919cbcad723c92 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 e0826808ec29968d2b74fb5421ab017c2c5e0558..60ec6feb1fe44db438e4a6f97a6978a11826ffa7 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 8acc02e9399468c8754a23b7f40d5d584f56fab4..6cb578f1cc02f8bb663e06b511dea61869ea4096 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 94e1f604b2a70c726b2ca804cca988ace26d82ba..8e0a3fe30ceddad6979afb7ed7cfa324996c585d 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 be12c591529e92c69fb59ed33a6722ff9a083d6a..86777d9c70e34ea8911c52a2ad503d46e7f09fd9 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);