aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libgfortran/ChangeLog15
-rw-r--r--libgfortran/intrinsics/chmod.c13
-rw-r--r--libgfortran/io/unit.c3
-rw-r--r--libgfortran/io/unix.c20
-rw-r--r--libgfortran/runtime/backtrace.c2
5 files changed, 36 insertions, 17 deletions
diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog
index b629d30..fc464a1 100644
--- a/libgfortran/ChangeLog
+++ b/libgfortran/ChangeLog
@@ -1,8 +1,17 @@
+2012-06-01 Tobias Burnus <burnus@net-b.de>
+
+ * 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 <bkoz@redhat.com>
- 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 <burnus@net-b.de>
diff --git a/libgfortran/intrinsics/chmod.c b/libgfortran/intrinsics/chmod.c
index e8a81d5..43b8de2 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 911521d..8b0926d 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 c81163f..1a9faea 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 <errno.h>
-/* 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 6bfc560..9d88d13 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);