From e53208f6c43d600fbc3c2226e43b034fbb7c0509 Mon Sep 17 00:00:00 2001 From: Janne Blomqvist Date: Sun, 3 Jan 2010 18:09:37 +0000 Subject: PR libfortran/42420 Large file capable stat for MingW git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@155593 138bc75d-0d04-0410-961f-82ee72b054a4 --- libgfortran/ChangeLog | 13 +++++++++++++ libgfortran/io/unix.c | 28 ++++++++++++++++++---------- 2 files changed, 31 insertions(+), 10 deletions(-) (limited to 'libgfortran') diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index 8b137891791..a6ee35084a2 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1 +1,14 @@ +2010-01-03 Janne Blomqvist + + PR libfortran/42420 + * io/unix.c: Defines for MINGW stat and fstat. + (gfstat_t): New typedef. + (id_from_fd): Use gfstat_t instead of struct stat. + (fd_to_stream): Likewise. + (compare_file_filename): Likewise. + (find_file): Likewise. + (file_exists): Likewise. + (inquire_sequential): Likewise. + (inquire_direct): Likewise. + (inquire_formatted): Likewise. diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index 07aa4d95972..bd2b6594d52 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -42,13 +42,17 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see /* For mingw, we don't identify files by their inode number, but by a 64-bit identifier created from a BY_HANDLE_FILE_INFORMATION. */ -#if defined(__MINGW32__) && !HAVE_WORKING_STAT +#ifdef __MINGW32__ #define WIN32_LEAN_AND_MEAN #include #define lseek _lseeki64 +#define fstat _fstati64 +#define stat _stati64 +typedef struct _stati64 gfstat_t; +#ifndef HAVE_WORKING_STAT static uint64_t id_from_handle (HANDLE hFile) { @@ -92,6 +96,10 @@ id_from_fd (const int fd) #endif +#else +typedef struct stat gfstat_t; +#endif + #ifndef PATH_MAX #define PATH_MAX 1024 #endif @@ -781,7 +789,7 @@ open_internal (char *base, int length, gfc_offset offset) static stream * fd_to_stream (int fd, int prot) { - struct stat statbuf; + gfstat_t statbuf; unix_stream *s; s = get_mem (sizeof (unix_stream)); @@ -1220,9 +1228,9 @@ int compare_file_filename (gfc_unit *u, const char *name, int len) { char path[PATH_MAX + 1]; - struct stat st1; + gfstat_t st1; #ifdef HAVE_WORKING_STAT - struct stat st2; + gfstat_t st2; #else # ifdef __MINGW32__ uint64_t id1, id2; @@ -1261,7 +1269,7 @@ compare_file_filename (gfc_unit *u, const char *name, int len) #ifdef HAVE_WORKING_STAT -# define FIND_FILE0_DECL struct stat *st +# define FIND_FILE0_DECL gfstat_t *st # define FIND_FILE0_ARGS st #else # define FIND_FILE0_DECL uint64_t id, const char *file, gfc_charlen_type file_len @@ -1318,7 +1326,7 @@ gfc_unit * find_file (const char *file, gfc_charlen_type file_len) { char path[PATH_MAX + 1]; - struct stat st[2]; + gfstat_t st[2]; gfc_unit *u; #if defined(__MINGW32__) && !HAVE_WORKING_STAT uint64_t id = 0ULL; @@ -1455,7 +1463,7 @@ int file_exists (const char *file, gfc_charlen_type file_len) { char path[PATH_MAX + 1]; - struct stat statbuf; + gfstat_t statbuf; if (unpack_filename (path, file, file_len)) return 0; @@ -1478,7 +1486,7 @@ const char * inquire_sequential (const char *string, int len) { char path[PATH_MAX + 1]; - struct stat statbuf; + gfstat_t statbuf; if (string == NULL || unpack_filename (path, string, len) || stat (path, &statbuf) < 0) @@ -1502,7 +1510,7 @@ const char * inquire_direct (const char *string, int len) { char path[PATH_MAX + 1]; - struct stat statbuf; + gfstat_t statbuf; if (string == NULL || unpack_filename (path, string, len) || stat (path, &statbuf) < 0) @@ -1526,7 +1534,7 @@ const char * inquire_formatted (const char *string, int len) { char path[PATH_MAX + 1]; - struct stat statbuf; + gfstat_t statbuf; if (string == NULL || unpack_filename (path, string, len) || stat (path, &statbuf) < 0) -- cgit v1.2.3