summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2013-01-24 14:56:10 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2013-01-24 14:56:10 (GMT)
commit9df34dd7c3b9ed251e319e644d916a7c0898230e (patch)
treef90b6033f77820bd87ea88fdf29ae43ef4022bf1 /generic
parent95f644550660d554a898a5034562036f7306e9ce (diff)
parent5025e386f4e080f615186dee9b4ef82d61eea79f (diff)
downloadtcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.zip
tcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.tar.gz
tcl-9df34dd7c3b9ed251e319e644d916a7c0898230e.tar.bz2
merge core-8-5-branchbug_3601260
Diffstat (limited to 'generic')
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclIndexObj.c14
-rw-r--r--generic/tclPort.h5
3 files changed, 12 insertions, 9 deletions
diff --git a/generic/tcl.h b/generic/tcl.h
index 33730d4..5fde9dc 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -436,7 +436,7 @@ typedef unsigned TCL_WIDE_INT_TYPE Tcl_WideUInt;
struct {long tv_sec;} st_ctim;
/* Here is a 4-byte gap */
} Tcl_StatBuf;
-#elif defined(HAVE_STRUCT_STAT64)
+#elif defined(HAVE_STRUCT_STAT64) && !defined(__APPLE__)
typedef struct stat64 Tcl_StatBuf;
#else
typedef struct stat Tcl_StatBuf;
diff --git a/generic/tclIndexObj.c b/generic/tclIndexObj.c
index 944fb8e..8ec1b68 100644
--- a/generic/tclIndexObj.c
+++ b/generic/tclIndexObj.c
@@ -53,12 +53,12 @@ typedef struct {
* The following macros greatly simplify moving through a table...
*/
-#define STRING_AT(table, offset, index) \
- (*((const char *const *)(((char *)(table)) + ((offset) * (index)))))
+#define STRING_AT(table, offset) \
+ (*((const char *const *)(((char *)(table)) + (offset))))
#define NEXT_ENTRY(table, offset) \
- (&(STRING_AT(table, offset, 1)))
+ (&(STRING_AT(table, offset)))
#define EXPAND_OF(indexRep) \
- STRING_AT((indexRep)->tablePtr, (indexRep)->offset, (indexRep)->index)
+ STRING_AT((indexRep)->tablePtr, (indexRep)->offset*(indexRep)->index)
/*
*----------------------------------------------------------------------
@@ -138,7 +138,7 @@ Tcl_GetIndexFromObj(
* proper match, then TCL_ERROR is returned and an error message is left
* in interp's result (unless interp is NULL). The msg argument is used
* in the error message; for example, if msg has the value "option" then
- * the error message will say something flag 'bad option "foo": must be
+ * the error message will say something like 'bad option "foo": must be
* ...'
*
* Side effects:
@@ -170,6 +170,10 @@ Tcl_GetIndexFromObjStruct(
Tcl_Obj *resultPtr;
IndexRep *indexRep;
+ /* Protect against invalid values, like -1 or 0. */
+ if (offset < (int)sizeof(char *)) {
+ offset = (int)sizeof(char *);
+ }
/*
* See if there is a valid cached result from a previous lookup.
*/
diff --git a/generic/tclPort.h b/generic/tclPort.h
index 7021b8d..12a60db 100644
--- a/generic/tclPort.h
+++ b/generic/tclPort.h
@@ -19,11 +19,10 @@
#endif
#if defined(_WIN32)
# include "tclWinPort.h"
-#endif
-#include "tcl.h"
-#if !defined(_WIN32)
+#else
# include "tclUnixPort.h"
#endif
+#include "tcl.h"
#if !defined(LLONG_MIN)
# ifdef TCL_WIDE_INT_IS_LONG