Use access(2) instead of stat(2) to test file existence.

From-SVN: r162798
This commit is contained in:
Janne Blomqvist 2010-08-01 14:22:18 +03:00
parent 22db1fbca9
commit 47dad3ff97
2 changed files with 48 additions and 36 deletions

View File

@ -1,3 +1,9 @@
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.
@ -36,7 +42,7 @@
* 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

View File

@ -131,6 +131,46 @@ typedef struct stat gfstat_t;
#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;
@ -1580,15 +1620,11 @@ int
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));
}
@ -1695,36 +1731,6 @@ inquire_unformatted (const char *string, int len)
}
#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. */