From db7317c3cf3dd7382077783e2da8fe84bc9b1f7e Mon Sep 17 00:00:00 2001 From: Jerry DeLisle Date: Tue, 5 Dec 2006 00:51:26 +0000 Subject: [PATCH] re PR libfortran/30005 (Open errors (not/already exists etc.): show also the file name) 2006-12-04 Jerry DeLisle 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 | 6 ++++++ libgfortran/io/open.c | 30 +++++++++++++++++++++++++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index ca823924d0b..8844e9ad336 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,9 @@ +2006-12-04 Jerry DeLisle + + 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 PR libfortran/29568 diff --git a/libgfortran/io/open.c b/libgfortran/io/open.c index 06fba75e1df..ef1ce1e0228 100644 --- a/libgfortran/io/open.c +++ b/libgfortran/io/open.c @@ -32,6 +32,7 @@ Boston, MA 02110-1301, USA. */ #include #include #include +#include #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; }