summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-01-21 08:31:08 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-01-21 08:31:08 (GMT)
commitcf850be37c59a3eba3ffe4e91083df63b0884e2d (patch)
tree1f6bd48dcd1089e042cf19078684ace2bdf980bb
parent14a4ac7508a9dcc47f15868e2623d6431d498bad (diff)
parentebf98dc88745b06ea047608ddb438cf2f7ce74d4 (diff)
downloadtcl-cf850be37c59a3eba3ffe4e91083df63b0884e2d.zip
tcl-cf850be37c59a3eba3ffe4e91083df63b0884e2d.tar.gz
tcl-cf850be37c59a3eba3ffe4e91083df63b0884e2d.tar.bz2
Bug-3474726 minGW Tcl_StatBuf not defined correctly in tcl.h
-rw-r--r--ChangeLog11
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclFCmd.c5
-rw-r--r--generic/tclTest.c5
-rwxr-xr-xwin/configure70
-rw-r--r--win/configure.in20
-rw-r--r--win/tclWinPort.h10
7 files changed, 23 insertions, 100 deletions
diff --git a/ChangeLog b/ChangeLog
index 85b7534..e5187ba 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,13 @@
-2012-01-19 Don Porter <dgp@users.sourceforge.net>
+2012-01-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug-3474726]: Eliminate detection of struct
+ * generic/tclWinPort.h: _stat32i64, just use _stati64 in combination
+ * generic/tclFCmd.c: with _USE_32BIT_TIME_T, which is the same then.
+ * generic/tclTest.c: Only keep _stat32i64 usage for cygwin, so it
+ * win/configure.in: will not conflict with cygwin's own struct stat.
+ * win/configure:
+
+2012-01-21 Don Porter <dgp@users.sourceforge.net>
* generic/tclCmdMZ.c: [Bug 3475667] Prevent buffer read overflow.
Thanks to "sebres" for the report and fix.
diff --git a/generic/tcl.h b/generic/tcl.h
index e5e38a8..21cd0c4 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -360,7 +360,7 @@ typedef struct stati64 Tcl_StatBuf;
# else /* __BORLANDC__ */
# if defined(_WIN64)
typedef struct __stat64 Tcl_StatBuf;
-# elif (defined(_MSC_VER) && (_MSC_VER < 1400))
+# elif (defined(_MSC_VER) && (_MSC_VER < 1400)) || defined(_USE_32BIT_TIME_T)
typedef struct _stati64 Tcl_StatBuf;
# else
typedef struct _stat32i64 Tcl_StatBuf;
diff --git a/generic/tclFCmd.c b/generic/tclFCmd.c
index 2b4977b..cc4f013 100644
--- a/generic/tclFCmd.c
+++ b/generic/tclFCmd.c
@@ -10,6 +10,11 @@
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
+#ifndef _WIN64
+/* See [Bug 2935503]: file mtime sets wrong time */
+# define _USE_32BIT_TIME_T
+#endif
+
#include "tclInt.h"
/*
diff --git a/generic/tclTest.c b/generic/tclTest.c
index 98208af..cb0faad 100644
--- a/generic/tclTest.c
+++ b/generic/tclTest.c
@@ -15,6 +15,11 @@
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
+#ifndef _WIN64
+/* See [Bug 2935503]: file mtime sets wrong time */
+# define _USE_32BIT_TIME_T
+#endif
+
#define TCL_TEST
#include "tclInt.h"
diff --git a/win/configure b/win/configure
index 0e5e92f..07a9436 100755
--- a/win/configure
+++ b/win/configure
@@ -3550,76 +3550,6 @@ _ACEOF
fi
-# Check to see if struct _stat32i64 exists in mingw's sys/stat.h
-
-echo "$as_me:$LINENO: checking if struct _stat32i64 missing" >&5
-echo $ECHO_N "checking if struct _stat32i64 missing... $ECHO_C" >&6
-if test "${tcl_struct_stat32i64+set}" = set; then
- echo $ECHO_N "(cached) $ECHO_C" >&6
-else
- cat >conftest.$ac_ext <<_ACEOF
-/* confdefs.h. */
-_ACEOF
-cat confdefs.h >>conftest.$ac_ext
-cat >>conftest.$ac_ext <<_ACEOF
-/* end confdefs.h. */
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-int
-main ()
-{
-
- struct _stat32i64 foo;
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.$ac_objext
-if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
- (eval $ac_compile) 2>conftest.er1
- ac_status=$?
- grep -v '^ *+' conftest.er1 >conftest.err
- rm -f conftest.er1
- cat conftest.err >&5
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); } &&
- { ac_try='test -z "$ac_c_werror_flag"
- || test ! -s conftest.err'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; } &&
- { ac_try='test -s conftest.$ac_objext'
- { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
- (eval $ac_try) 2>&5
- ac_status=$?
- echo "$as_me:$LINENO: \$? = $ac_status" >&5
- (exit $ac_status); }; }; then
- tcl_struct_stat32i64=no
-else
- echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-tcl_struct_stat32i64=yes
-fi
-rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-echo "$as_me:$LINENO: result: $tcl_struct_stat32i64" >&5
-echo "${ECHO_T}$tcl_struct_stat32i64" >&6
-if test "$tcl_struct_stat32i64" = "yes" ; then
-
-cat >>confdefs.h <<\_ACEOF
-#define HAVE_NO_STRUCT_STAT32I64 1
-_ACEOF
-
-fi
-
-
# See if declarations like FINDEX_INFO_LEVELS are
# missing from winbase.h. This is known to be
# a problem with VC++ 5.2.
diff --git a/win/configure.in b/win/configure.in
index 306dbac..1b8c25a 100644
--- a/win/configure.in
+++ b/win/configure.in
@@ -241,26 +241,6 @@ if test "$tcl_cv_cast_to_union" = "yes"; then
[Defined when compiler supports casting to union type.])
fi
-# Check to see if struct _stat32i64 exists in mingw's sys/stat.h
-
-AC_CACHE_CHECK(if struct _stat32i64 missing,
- tcl_struct_stat32i64,
-AC_TRY_COMPILE([
-#include <sys/types.h>
-#include <sys/stat.h>
-],
-[
- struct _stat32i64 foo;
-],
- tcl_struct_stat32i64=no,
- tcl_struct_stat32i64=yes)
-)
-if test "$tcl_struct_stat32i64" = "yes" ; then
- AC_DEFINE(HAVE_NO_STRUCT_STAT32I64, 1,
- [Defined when sys/stat.h is missing struct _stat32i64])
-fi
-
-
# See if declarations like FINDEX_INFO_LEVELS are
# missing from winbase.h. This is known to be
# a problem with VC++ 5.2.
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index 493b824..c5a726a 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -108,9 +108,9 @@
#define ENOTSUP -1030507
/*
- * Not all mingw32 versions have this struct.
+ * cygwin does not have this struct.
*/
-#if !defined(__BORLANDC__) && !defined(_MSC_VER) && !defined(_WIN64) && defined(HAVE_NO_STRUCT_STAT32I64)
+#ifdef __CYGWIN__
struct _stat32i64 {
dev_t st_dev;
ino_t st_ino;
@@ -120,15 +120,9 @@
short st_gid;
dev_t st_rdev;
__int64 st_size;
-#ifdef __CYGWIN__
struct {long tv_sec;} st_atim;
struct {long tv_sec;} st_mtim;
struct {long tv_sec;} st_ctim;
-#else
- long st_atime;
- long st_mtime;
- long st_ctime;
-#endif
};
#endif