aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerry DeLisle <jvdelisle@gcc.gnu.org>2006-12-05 00:51:26 +0000
committerJerry DeLisle <jvdelisle@gcc.gnu.org>2006-12-05 00:51:26 +0000
commitdb7317c3cf3dd7382077783e2da8fe84bc9b1f7e (patch)
tree183a941f2c393552c39658128aff3a7f90722949
parente5ebbea51eb1a2d044a8761cf3f95d40b67f1329 (diff)
downloadgcc-db7317c3cf3dd7382077783e2da8fe84bc9b1f7e.zip
gcc-db7317c3cf3dd7382077783e2da8fe84bc9b1f7e.tar.gz
gcc-db7317c3cf3dd7382077783e2da8fe84bc9b1f7e.tar.bz2
re PR libfortran/30005 (Open errors (not/already exists etc.): show also the file name)
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
-rw-r--r--libgfortran/ChangeLog6
-rw-r--r--libgfortran/io/open.c30
2 files changed, 35 insertions, 1 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index ca82392..8844e9a 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -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
diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c
index 06fba75..ef1ce1e 100644
--- a/libgfortran/io/open.c
+++ b/libgfortran/io/open.c
@@ -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;
}