+2010-08-01 Janne Blomqvist <jb@gcc.gnu.org>
+
+ * io/unix.c (file_exists): Use access(2) instead of stat(2) to
+ test file existence.
+ (fallback_access): Move up in file, implement F_OK.
+
2010-07-31 David Edelsohn <edelsohn@gnu.org>
* io/inquire.c: Include io.h before string.h.
* write_float.def (output_float): Use a gfc_char4_t pointer and
update memset4 and memcpy calls. (write_infnan): Likewise.
(output_float_FMT_G_): Likewise.
-
+
2010-07-16 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/37077
#endif
+#ifndef HAVE_ACCESS
+
+#ifndef W_OK
+#define W_OK 2
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#endif
+
+#ifndef F_OK
+#define F_OK 0
+#endif
+
+/* Fallback implementation of access() on systems that don't have it.
+ Only modes R_OK, W_OK and F_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;
+
+ if (mode == F_OK)
+ {
+ gfstat_t st;
+ return stat (path, &st);
+ }
+
+ return 0;
+}
+
+#undef access
+#define access fallback_access
+#endif
+
+
/* Unix and internal stream I/O module */
static const int BUFFER_SIZE = 8192;
file_exists (const char *file, gfc_charlen_type file_len)
{
char path[PATH_MAX + 1];
- gfstat_t statbuf;
if (unpack_filename (path, file, file_len))
return 0;
- if (stat (path, &statbuf) < 0)
- return 0;
-
- return 1;
+ return !(access (path, F_OK));
}
}
-#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. */