From 7ed26a671c8b9bfe83a5b3691ea7f82986816a7d Mon Sep 17 00:00:00 2001 From: Tobias Burnus Date: Fri, 1 Jun 2012 07:53:31 +0200 Subject: [PATCH] chmod.c (chmod_func): On MinGW, don't set is_dir 2012-06-01 Tobias Burnus * intrinsics/chmod.c (chmod_func): On MinGW, don't set is_dir * and fix octal-mode handling. * io/unit.c (get_internal_unit): Add cast. * io/unix.c (min): Undef "min" before defining it. * runtime/backtrace.c (show_backtrace): Move label into ifndef __MINGW__ block. From-SVN: r188098 --- libgfortran/ChangeLog | 15 ++++++++++++--- libgfortran/intrinsics/chmod.c | 13 +++++++++---- libgfortran/io/unit.c | 3 ++- libgfortran/io/unix.c | 20 ++++++++++++-------- libgfortran/runtime/backtrace.c | 2 +- 5 files changed, 36 insertions(+), 17 deletions(-) diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index b629d30dab9..fc464a153ff 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,8 +1,17 @@ +2012-06-01 Tobias Burnus + + * intrinsics/chmod.c (chmod_func): On MinGW, don't set is_dir and + fix octal-mode handling. + * io/unit.c (get_internal_unit): Add cast. + * io/unix.c (min): Undef "min" before defining it. + * runtime/backtrace.c (show_backtrace): Move label into + ifndef __MINGW__ block. + 2012-05-31 Benjamin Kosnik - PR libstdc++/51007 - * configure.ac: Allow gnu, gnu* variants for --enable-symvers argument. - * configure: Regenerated. + PR libstdc++/51007 + * configure.ac: Allow gnu, gnu* variants for --enable-symvers argument. + * configure: Regenerated. 2012-05-31 Tobias Burnus diff --git a/libgfortran/intrinsics/chmod.c b/libgfortran/intrinsics/chmod.c index e8a81d54ba2..43b8de2e279 100644 --- a/libgfortran/intrinsics/chmod.c +++ b/libgfortran/intrinsics/chmod.c @@ -74,7 +74,10 @@ chmod_func (char *name, char *mode, gfc_charlen_type name_len, bool ugo[3]; bool rwxXstugo[9]; int set_mode, part; - bool is_dir, honor_umask, continue_clause = false; + bool honor_umask, continue_clause = false; +#ifndef __MINGW32__ + bool is_dir; +#endif mode_t mode_mask, file_mode, new_mode; struct stat stat_buf; @@ -93,10 +96,10 @@ chmod_func (char *name, char *mode, gfc_charlen_type name_len, if (mode[0] >= '0' && mode[0] <= '9') { #ifdef __MINGW32__ - unsigned mode; - if (sscanf (mode, "%o", &mode) != 1) + unsigned fmode; + if (sscanf (mode, "%o", &fmode) != 1) return 1; - file_mode = (mode_t) mode; + file_mode = (mode_t) fmode; #else if (sscanf (mode, "%o", &file_mode) != 1) return 1; @@ -109,7 +112,9 @@ chmod_func (char *name, char *mode, gfc_charlen_type name_len, return 1; file_mode = stat_buf.st_mode & ~S_IFMT; +#ifndef __MINGW32__ is_dir = stat_buf.st_mode & S_IFDIR; +#endif #ifdef HAVE_UMASK /* Obtain the umask without distroying the setting. */ diff --git a/libgfortran/io/unit.c b/libgfortran/io/unit.c index 911521d5df7..8b0926d63d3 100644 --- a/libgfortran/io/unit.c +++ b/libgfortran/io/unit.c @@ -430,7 +430,8 @@ get_internal_unit (st_parameter_dt *dtp) else { dtp->internal_unit_len = - string_len_trim_char4 (dtp->internal_unit_len, dtp->internal_unit); + string_len_trim_char4 (dtp->internal_unit_len, + (const gfc_char4_t*) dtp->internal_unit); iunit->recl = dtp->internal_unit_len; } } diff --git a/libgfortran/io/unix.c b/libgfortran/io/unix.c index c81163f2563..1a9faea486e 100644 --- a/libgfortran/io/unix.c +++ b/libgfortran/io/unix.c @@ -41,13 +41,6 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see #include -/* min macro that evaluates its arguments only once. */ -#define min(a,b) \ - ({ typeof (a) _a = (a); \ - typeof (b) _b = (b); \ - _a < _b ? _a : _b; }) - - /* For mingw, we don't identify files by their inode number, but by a 64-bit identifier created from a BY_HANDLE_FILE_INFORMATION. */ #ifdef __MINGW32__ @@ -106,8 +99,19 @@ id_from_fd (const int fd) return id_from_handle ((HANDLE) _get_osfhandle (fd)); } +#endif /* HAVE_WORKING_STAT */ +#endif /* __MINGW32__ */ + + +/* min macro that evaluates its arguments only once. */ +#ifdef min +#undef min #endif -#endif + +#define min(a,b) \ + ({ typeof (a) _a = (a); \ + typeof (b) _b = (b); \ + _a < _b ? _a : _b; }) #ifndef PATH_MAX #define PATH_MAX 1024 diff --git a/libgfortran/runtime/backtrace.c b/libgfortran/runtime/backtrace.c index 6bfc560de39..9d88d136a8b 100644 --- a/libgfortran/runtime/backtrace.c +++ b/libgfortran/runtime/backtrace.c @@ -270,9 +270,9 @@ fallback: } while (0); +fallback_noerr: #endif /* CAN_PIPE */ -fallback_noerr: /* Fallback to the simple backtrace without addr2line. */ state.direct_output = 1; _Unwind_Backtrace (trace_function, &state);