+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
#include <unistd.h>
#include <stdio.h>
#include <string.h>
+#include <errno.h>
#include "libgfortran.h"
#include "io.h"
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;
}