diff options
author | andreas_kupries <akupries@shaw.ca> | 2008-05-23 21:00:42 (GMT) |
---|---|---|
committer | andreas_kupries <akupries@shaw.ca> | 2008-05-23 21:00:42 (GMT) |
commit | 330add62d15d66049d37d4e23a769b78074d15ab (patch) | |
tree | 790b682b0a84cd68f66fcb8593ecfeb7cd290440 /generic | |
parent | 0cc498df8a623e2490e79096ec68eb60a01a2c2b (diff) | |
download | tcl-330add62d15d66049d37d4e23a769b78074d15ab.zip tcl-330add62d15d66049d37d4e23a769b78074d15ab.tar.gz tcl-330add62d15d66049d37d4e23a769b78074d15ab.tar.bz2 |
* win/tclWinChan.c (FileWideSeekProc): Accepted a patch by
Alexandre Ferrieux <ferrieux@users.sourceforge.net> to fix the
[Bug 1965787]. 'tell' now works for locations > 2 GB as well
instead of going negative.
* generic/tclIO.c (Tcl_SetChannelBufferSize): Accepted a patch by
* tests/io.test: Alexandre Ferrieux <ferrieux@users.sourceforge.net>
* tests/chanio.test: to fix the [Bug 1969953]. Buffersize outside
of the supported range are now clipped to nearest boundary instead
of ignored.
Diffstat (limited to 'generic')
-rw-r--r-- | generic/tclIO.c | 13 | ||||
-rw-r--r-- | generic/tclVar.c | 15 |
2 files changed, 20 insertions, 8 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c index 1d917ba..08d73ec 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclIO.c,v 1.142 2008/04/15 18:34:47 andreas_kupries Exp $ + * RCS: @(#) $Id: tclIO.c,v 1.143 2008/05/23 21:00:44 andreas_kupries Exp $ */ #include "tclInt.h" @@ -224,6 +224,8 @@ static Tcl_ObjType tclChannelType = { #define BUSY_STATE(st,fl) \ ((((st)->csPtrR) && ((fl) & TCL_READABLE)) || \ (((st)->csPtrW) && ((fl) & TCL_WRITABLE))) + +#define MAX_CHANNEL_BUFFER_SIZE (1024*1024) /* *--------------------------------------------------------------------------- @@ -6937,12 +6939,13 @@ Tcl_SetChannelBufferSize( ChannelState *statePtr; /* State of real channel structure. */ /* - * If the buffer size is smaller than 1 byte or larger than one MByte, do - * not accept the requested size and leave the current buffer size. + * Clip the buffer size to force it into the [1,1M] range */ - if (sz < 1 || sz > 1024*1024) { - return; + if (sz < 1) { + sz = 1; + } else if (sz > MAX_CHANNEL_BUFFER_SIZE) { + sz = MAX_CHANNEL_BUFFER_SIZE; } statePtr = ((Channel *) chan)->state; diff --git a/generic/tclVar.c b/generic/tclVar.c index 3bcc527..a88f15c 100644 --- a/generic/tclVar.c +++ b/generic/tclVar.c @@ -16,7 +16,7 @@ * See the file "license.terms" for information on usage and redistribution of * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tclVar.c,v 1.160 2008/03/11 17:23:56 msofer Exp $ + * RCS: @(#) $Id: tclVar.c,v 1.161 2008/05/23 21:00:45 andreas_kupries Exp $ */ #include "tclInt.h" @@ -67,10 +67,19 @@ VarHashCreateVar( #define VarHashFindVar(tablePtr, key) \ VarHashCreateVar((tablePtr), (key), NULL) - +#ifdef _AIX +/* Work around AIX cc problem causing crash in TclDeleteVars. Possible + * optimizer bug. Do _NOT_ inline this function, this re-activates the + * problem. + */ +static void +VarHashInvalidateEntry(Var* varPtr) { + varPtr->flags |= VAR_DEAD_HASH; +} +#else #define VarHashInvalidateEntry(varPtr) \ ((varPtr)->flags |= VAR_DEAD_HASH) - +#endif #define VarHashDeleteEntry(varPtr) \ Tcl_DeleteHashEntry(&(((VarInHash *) varPtr)->entry)) |