]> gcc.gnu.org Git - gcc.git/commitdiff
re PR libfortran/30005 (Open errors (not/already exists etc.): show also the file...
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Tue, 5 Dec 2006 00:51:26 +0000 (00:51 +0000)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Tue, 5 Dec 2006 00:51:26 +0000 (00:51 +0000)
2006-12-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

PR libfortran/30005
* io/open.c: Add errno.h include.
(new_unit): Add new error messages with file name for file open.

From-SVN: r119530

libgfortran/ChangeLog
libgfortran/io/open.c

index ca823924d0b0fb4abb654f34c08ebe88966c81ec..8844e9ad336d873e5d95320c50915b6588f3b5e3 100644 (file)
@@ -1,3 +1,9 @@
+2006-12-04  Jerry DeLisle  <jvdelisle@gcc.gnu.org>
+
+       PR libfortran/30005
+       * io/open.c: Add errno.h include.
+       (new_unit): Add new error messages with file name for file open.
+
 2006-12-01  Thomas Koenig  <Thomas.Koenig@online.de>
 
        PR libfortran/29568
index 06fba75e1df0af11eeba2e4c05ecde57aa2226bc..ef1ce1e02282861d821a0d2ab0e10b25e4dd4dfd 100644 (file)
@@ -32,6 +32,7 @@ Boston, MA 02110-1301, USA.  */
 #include <unistd.h>
 #include <stdio.h>
 #include <string.h>
+#include <errno.h>
 #include "libgfortran.h"
 #include "io.h"
 
@@ -374,7 +375,34 @@ new_unit (st_parameter_open *opp, gfc_unit *u, unit_flags * flags)
   s = open_external (opp, flags);
   if (s == NULL)
     {
-      generate_error (&opp->common, ERROR_OS, NULL);
+      char *path, *msg;
+      path = (char *) gfc_alloca (opp->file_len + 1);
+      msg = (char *) gfc_alloca (opp->file_len + 51);
+      unpack_filename (path, opp->file, opp->file_len);
+
+      switch (errno)
+       {
+       case ENOENT: 
+         st_sprintf (msg, "File '%s' does not exist", path);
+         break;
+
+       case EEXIST:
+         st_sprintf (msg, "File '%s' already exists", path);
+         break;
+
+       case EACCES:
+         st_sprintf (msg, "Permission denied trying to open file '%s'", path);
+         break;
+
+       case EISDIR:
+         st_sprintf (msg, "'%s' is a directory", path);
+         break;
+
+       default:
+         msg = NULL;
+       }
+
+      generate_error (&opp->common, ERROR_OS, msg);
       goto cleanup;
     }
 
This page took 0.062009 seconds and 5 git commands to generate.