diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-11-19 12:17:50 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2012-11-19 12:17:50 (GMT) |
commit | 9c8731a3a9259e66d93d399531844eebc954544e (patch) | |
tree | ec43417960db7d374d3c38a73b91204b253c0435 | |
parent | 8374fd0678ba9780d5378bdcc96080b6af6de97e (diff) | |
parent | dc94f0158e25e5fd110f4aee8c223078cb4a4757 (diff) | |
download | tcl-9c8731a3a9259e66d93d399531844eebc954544e.zip tcl-9c8731a3a9259e66d93d399531844eebc954544e.tar.gz tcl-9c8731a3a9259e66d93d399531844eebc954544e.tar.bz2 |
Merge trunk
<p>Adapt Tcl_Tell and Tcl_Seek to use the new type
-rw-r--r-- | generic/tcl.decls | 12 | ||||
-rw-r--r-- | generic/tclDecls.h | 33 | ||||
-rw-r--r-- | generic/tclIO.c | 63 | ||||
-rw-r--r-- | generic/tclIOCmd.c | 6 | ||||
-rw-r--r-- | generic/tclIOUtil.c | 2 | ||||
-rw-r--r-- | generic/tclInt.decls | 8 | ||||
-rw-r--r-- | generic/tclIntDecls.h | 8 | ||||
-rw-r--r-- | generic/tclPipe.c | 2 | ||||
-rw-r--r-- | generic/tclStubInit.c | 22 |
9 files changed, 75 insertions, 81 deletions
diff --git a/generic/tcl.decls b/generic/tcl.decls index 986f2d7..b3fa687 100644 --- a/generic/tcl.decls +++ b/generic/tcl.decls @@ -780,9 +780,8 @@ declare 218 { declare 219 { int Tcl_ScanCountedElement(const char *src, int length, int *flagPtr) } -# Obsolete declare 220 { - int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode) + TCL_SIZE_T Tcl_Seek(Tcl_Channel chan, TCL_SIZE_T offset, int mode) } declare 221 { int Tcl_ServiceAll(void) @@ -868,9 +867,8 @@ declare 244 { declare 245 { int Tcl_StringMatch(const char *str, const char *pattern) } -# Obsolete declare 246 { - int Tcl_TellOld(Tcl_Channel chan) + TCL_SIZE_T Tcl_Tell(Tcl_Channel chan) } declare 247 { int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags, @@ -1753,11 +1751,13 @@ declare 489 { declare 490 { Tcl_StatBuf *Tcl_AllocStatBuf(void) } +# Kept on Tcl9, for binary compatibility with Tcl8 declare 491 { - Tcl_WideInt Tcl_Seek(Tcl_Channel chan, Tcl_WideInt offset, int mode) + Tcl_WideInt Tcl_SeekOld(Tcl_Channel chan, Tcl_WideInt offset, int mode) } +# Kept on Tcl9, for binary compatibility with Tcl8 declare 492 { - Tcl_WideInt Tcl_Tell(Tcl_Channel chan) + Tcl_WideInt Tcl_TellOld(Tcl_Channel chan) } # TIP#91 (back-compat enhancements for channels) dkf diff --git a/generic/tclDecls.h b/generic/tclDecls.h index 3690a77..05ca87b 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -649,7 +649,8 @@ EXTERN int Tcl_ScanElement(const char *src, int *flagPtr); EXTERN int Tcl_ScanCountedElement(const char *src, int length, int *flagPtr); /* 220 */ -EXTERN int Tcl_SeekOld(Tcl_Channel chan, int offset, int mode); +EXTERN TCL_SIZE_T Tcl_Seek(Tcl_Channel chan, TCL_SIZE_T offset, + int mode); /* 221 */ EXTERN int Tcl_ServiceAll(void); /* 222 */ @@ -719,7 +720,7 @@ EXTERN void Tcl_StaticPackage(Tcl_Interp *interp, /* 245 */ EXTERN int Tcl_StringMatch(const char *str, const char *pattern); /* 246 */ -EXTERN int Tcl_TellOld(Tcl_Channel chan); +EXTERN TCL_SIZE_T Tcl_Tell(Tcl_Channel chan); /* 247 */ EXTERN int Tcl_TraceVar(Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, @@ -1391,10 +1392,10 @@ EXTERN void Tcl_SetWideIntObj(Tcl_Obj *objPtr, /* 490 */ EXTERN Tcl_StatBuf * Tcl_AllocStatBuf(void); /* 491 */ -EXTERN Tcl_WideInt Tcl_Seek(Tcl_Channel chan, Tcl_WideInt offset, +EXTERN Tcl_WideInt Tcl_SeekOld(Tcl_Channel chan, Tcl_WideInt offset, int mode); /* 492 */ -EXTERN Tcl_WideInt Tcl_Tell(Tcl_Channel chan); +EXTERN Tcl_WideInt Tcl_TellOld(Tcl_Channel chan); /* 493 */ EXTERN Tcl_DriverWideSeekProc * Tcl_ChannelWideSeekProc( const Tcl_ChannelType *chanTypePtr); @@ -2048,7 +2049,7 @@ typedef struct TclStubs { void (*tcl_ResetResult) (Tcl_Interp *interp); /* 217 */ int (*tcl_ScanElement) (const char *src, int *flagPtr); /* 218 */ int (*tcl_ScanCountedElement) (const char *src, int length, int *flagPtr); /* 219 */ - int (*tcl_SeekOld) (Tcl_Channel chan, int offset, int mode); /* 220 */ + TCL_SIZE_T (*tcl_Seek) (Tcl_Channel chan, TCL_SIZE_T offset, int mode); /* 220 */ int (*tcl_ServiceAll) (void); /* 221 */ int (*tcl_ServiceEvent) (int flags); /* 222 */ void (*tcl_SetAssocData) (Tcl_Interp *interp, const char *name, Tcl_InterpDeleteProc *proc, ClientData clientData); /* 223 */ @@ -2074,7 +2075,7 @@ typedef struct TclStubs { void (*tcl_SplitPath) (const char *path, int *argcPtr, const char ***argvPtr); /* 243 */ void (*tcl_StaticPackage) (Tcl_Interp *interp, const char *pkgName, Tcl_PackageInitProc *initProc, Tcl_PackageInitProc *safeInitProc); /* 244 */ int (*tcl_StringMatch) (const char *str, const char *pattern); /* 245 */ - int (*tcl_TellOld) (Tcl_Channel chan); /* 246 */ + TCL_SIZE_T (*tcl_Tell) (Tcl_Channel chan); /* 246 */ int (*tcl_TraceVar) (Tcl_Interp *interp, const char *varName, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 247 */ int (*tcl_TraceVar2) (Tcl_Interp *interp, const char *part1, const char *part2, int flags, Tcl_VarTraceProc *proc, ClientData clientData); /* 248 */ char * (*tcl_TranslateFileName) (Tcl_Interp *interp, const char *name, Tcl_DString *bufferPtr); /* 249 */ @@ -2319,8 +2320,8 @@ typedef struct TclStubs { Tcl_Obj * (*tcl_NewWideIntObj) (Tcl_WideInt wideValue); /* 488 */ void (*tcl_SetWideIntObj) (Tcl_Obj *objPtr, Tcl_WideInt wideValue); /* 489 */ Tcl_StatBuf * (*tcl_AllocStatBuf) (void); /* 490 */ - Tcl_WideInt (*tcl_Seek) (Tcl_Channel chan, Tcl_WideInt offset, int mode); /* 491 */ - Tcl_WideInt (*tcl_Tell) (Tcl_Channel chan); /* 492 */ + Tcl_WideInt (*tcl_SeekOld) (Tcl_Channel chan, Tcl_WideInt offset, int mode); /* 491 */ + Tcl_WideInt (*tcl_TellOld) (Tcl_Channel chan); /* 492 */ Tcl_DriverWideSeekProc * (*tcl_ChannelWideSeekProc) (const Tcl_ChannelType *chanTypePtr); /* 493 */ int (*tcl_DictObjPut) (Tcl_Interp *interp, Tcl_Obj *dictPtr, Tcl_Obj *keyPtr, Tcl_Obj *valuePtr); /* 494 */ int (*tcl_DictObjGet) (Tcl_Interp *interp, Tcl_Obj *dictPtr, Tcl_Obj *keyPtr, Tcl_Obj **valuePtrPtr); /* 495 */ @@ -2931,8 +2932,8 @@ extern const TclStubs *tclStubsPtr; (tclStubsPtr->tcl_ScanElement) /* 218 */ #define Tcl_ScanCountedElement \ (tclStubsPtr->tcl_ScanCountedElement) /* 219 */ -#define Tcl_SeekOld \ - (tclStubsPtr->tcl_SeekOld) /* 220 */ +#define Tcl_Seek \ + (tclStubsPtr->tcl_Seek) /* 220 */ #define Tcl_ServiceAll \ (tclStubsPtr->tcl_ServiceAll) /* 221 */ #define Tcl_ServiceEvent \ @@ -2983,8 +2984,8 @@ extern const TclStubs *tclStubsPtr; (tclStubsPtr->tcl_StaticPackage) /* 244 */ #define Tcl_StringMatch \ (tclStubsPtr->tcl_StringMatch) /* 245 */ -#define Tcl_TellOld \ - (tclStubsPtr->tcl_TellOld) /* 246 */ +#define Tcl_Tell \ + (tclStubsPtr->tcl_Tell) /* 246 */ #define Tcl_TraceVar \ (tclStubsPtr->tcl_TraceVar) /* 247 */ #define Tcl_TraceVar2 \ @@ -3470,10 +3471,10 @@ extern const TclStubs *tclStubsPtr; (tclStubsPtr->tcl_SetWideIntObj) /* 489 */ #define Tcl_AllocStatBuf \ (tclStubsPtr->tcl_AllocStatBuf) /* 490 */ -#define Tcl_Seek \ - (tclStubsPtr->tcl_Seek) /* 491 */ -#define Tcl_Tell \ - (tclStubsPtr->tcl_Tell) /* 492 */ +#define Tcl_SeekOld \ + (tclStubsPtr->tcl_SeekOld) /* 491 */ +#define Tcl_TellOld \ + (tclStubsPtr->tcl_TellOld) /* 492 */ #define Tcl_ChannelWideSeekProc \ (tclStubsPtr->tcl_ChannelWideSeekProc) /* 493 */ #define Tcl_DictObjPut \ diff --git a/generic/tclIO.c b/generic/tclIO.c index 98ce8f9..e213e72 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -6813,10 +6813,10 @@ GetInput( *---------------------------------------------------------------------- */ -Tcl_WideInt +TCL_SIZE_T Tcl_Seek( Tcl_Channel chan, /* The channel on which to seek. */ - Tcl_WideInt offset, /* Offset to seek to. */ + TCL_SIZE_T offset, /* Offset to seek to. */ int mode) /* Relative to which location to seek? */ { Channel *chanPtr = (Channel *) chan; @@ -6826,13 +6826,13 @@ Tcl_Seek( int inputBuffered, outputBuffered; /* # bytes held in buffers. */ int result; /* Of device driver operations. */ - Tcl_WideInt curPos; /* Position on the device. */ + TCL_SIZE_T curPos; /* Position on the device. */ int wasAsync; /* Was the channel nonblocking before the seek * operation? If so, must restore to * non-blocking mode after the seek. */ if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) { - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -6843,7 +6843,7 @@ Tcl_Seek( */ if (CheckForDeadChannel(NULL, statePtr)) { - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -6859,7 +6859,7 @@ Tcl_Seek( if (chanPtr->typePtr->seekProc == NULL) { Tcl_SetErrno(EINVAL); - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -6872,7 +6872,7 @@ Tcl_Seek( if ((inputBuffered != 0) && (outputBuffered != 0)) { Tcl_SetErrno(EFAULT); - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -6987,7 +6987,7 @@ Tcl_Seek( *---------------------------------------------------------------------- */ -Tcl_WideInt +TCL_SIZE_T Tcl_Tell( Tcl_Channel chan) /* The channel to return pos for. */ { @@ -6995,13 +6995,13 @@ Tcl_Tell( /* The real IO channel. */ ChannelState *statePtr = chanPtr->state; /* State info for channel */ - int inputBuffered, outputBuffered; + TCL_SIZE_T inputBuffered, outputBuffered; /* # bytes held in buffers. */ int result; /* Of calling device driver. */ - Tcl_WideInt curPos; /* Position on device. */ + TCL_SIZE_T curPos; /* Position on device. */ if (CheckChannelErrors(statePtr, TCL_WRITABLE | TCL_READABLE) != 0) { - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -7012,7 +7012,7 @@ Tcl_Tell( */ if (CheckForDeadChannel(NULL, statePtr)) { - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -7028,7 +7028,7 @@ Tcl_Tell( if (chanPtr->typePtr->seekProc == NULL) { Tcl_SetErrno(EINVAL); - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } /* @@ -7045,10 +7045,10 @@ Tcl_Tell( * wideSeekProc if that is available and non-NULL... */ - curPos = ChanSeek(chanPtr, Tcl_LongAsWide(0), SEEK_CUR, &result); - if (curPos == Tcl_LongAsWide(-1)) { + curPos = ChanSeek(chanPtr, 0, SEEK_CUR, &result); + if (curPos == TCL_NOSIZE) { Tcl_SetErrno(result); - return Tcl_LongAsWide(-1); + return TCL_NOSIZE; } if (inputBuffered != 0) { @@ -7062,13 +7062,13 @@ Tcl_Tell( * * Tcl_SeekOld, Tcl_TellOld -- * - * Backward-compatability versions of the seek/tell interface that do not - * support 64-bit offsets. This interface is not documented or expected + * Backward-compatability versions of the seek/tell interface which used + * 64-bit offsets. This interface is not documented or expected * to be supported indefinitely. * * Results: - * As for Tcl_Seek and Tcl_Tell respectively, except truncated to - * whatever value will fit in an 'int'. + * As for Tcl_Seek and Tcl_Tell respectively, except expanded to + * 64-bits even on platforms which support only 32-bits. * * Side effects: * As for Tcl_Seek and Tcl_Tell respectively. @@ -7076,26 +7076,31 @@ Tcl_Tell( *--------------------------------------------------------------------------- */ -int +Tcl_WideInt Tcl_SeekOld( Tcl_Channel chan, /* The channel on which to seek. */ - int offset, /* Offset to seek to. */ + Tcl_WideInt offset, /* Offset to seek to. */ int mode) /* Relative to which location to seek? */ { - Tcl_WideInt wOffset, wResult; + TCL_SIZE_T wResult; - wOffset = Tcl_LongAsWide((long) offset); - wResult = Tcl_Seek(chan, wOffset, mode); - return (int) Tcl_WideAsLong(wResult); + wResult = Tcl_Seek(chan, (TCL_SIZE_T) offset, mode); + if (wResult == TCL_NOSIZE) { + return -1; + } + return (Tcl_WideInt) wResult; } -int +Tcl_WideInt Tcl_TellOld( Tcl_Channel chan) /* The channel to return pos for. */ { - Tcl_WideInt wResult = Tcl_Tell(chan); + TCL_SIZE_T wResult = Tcl_Tell(chan); - return (int) Tcl_WideAsLong(wResult); + if (wResult == TCL_NOSIZE) { + return -1; + } + return (Tcl_WideInt) wResult; } /* diff --git a/generic/tclIOCmd.c b/generic/tclIOCmd.c index 1e1ebc0..df732dd 100644 --- a/generic/tclIOCmd.c +++ b/generic/tclIOCmd.c @@ -531,7 +531,7 @@ Tcl_SeekObjCmd( mode = modeArray[optionIndex]; } - result = Tcl_Seek(chan, offset, mode); + result = Tcl_SeekOld(chan, offset, mode); if (result == Tcl_LongAsWide(-1)) { /* * TIP #219. @@ -592,7 +592,7 @@ Tcl_TellObjCmd( return TCL_ERROR; } - newLoc = Tcl_Tell(chan); + newLoc = Tcl_TellOld(chan); /* * TIP #219. @@ -1807,7 +1807,7 @@ ChanTruncateObjCmd( * User wants to truncate to the current file position. */ - length = Tcl_Tell(chan); + length = Tcl_TellOld(chan); if (length == Tcl_WideAsLong(-1)) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( "could not determine current location in \"%s\": %s", diff --git a/generic/tclIOUtil.c b/generic/tclIOUtil.c index e87661b..671be06 100644 --- a/generic/tclIOUtil.c +++ b/generic/tclIOUtil.c @@ -2258,7 +2258,7 @@ Tcl_FSOpenFileChannel( * Apply appropriate flags parsed out above. */ - if (seekFlag && Tcl_Seek(retVal, (Tcl_WideInt) 0, SEEK_END) + if (seekFlag && Tcl_Seek(retVal, 0, SEEK_END) < (Tcl_WideInt) 0) { if (interp != NULL) { Tcl_SetObjResult(interp, Tcl_ObjPrintf( diff --git a/generic/tclInt.decls b/generic/tclInt.decls index a6c5285..97e8da8 100644 --- a/generic/tclInt.decls +++ b/generic/tclInt.decls @@ -420,9 +420,10 @@ declare 103 { int TclSockGetPort(Tcl_Interp *interp, const char *str, const char *proto, int *portPtr) } -declare 104 { - int TclSockMinimumBuffersOld(int sock, int size) -} +# Removed in Tcl 9 +#declare 104 { +# int TclSockMinimumBuffersOld(int sock, int size) +#} # Replaced by Tcl_FSStat in 8.4: #declare 105 { # int TclStat(const char *path, Tcl_StatBuf *buf) @@ -993,6 +994,7 @@ declare 247 { void TclResetRewriteEnsemble(Tcl_Interp *interp, int isRootEnsemble) } +# Kept on Tcl9, for binary compatibility with Tcl8 declare 248 { int TclCopyChannelOld(Tcl_Interp *interp, Tcl_Channel inChan, Tcl_Channel outChan, Tcl_WideInt toRead, Tcl_Obj *cmdPtr) diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h index 0a8f5e4..9efda41 100644 --- a/generic/tclIntDecls.h +++ b/generic/tclIntDecls.h @@ -260,8 +260,7 @@ EXTERN void TclSetupEnv(Tcl_Interp *interp); /* 103 */ EXTERN int TclSockGetPort(Tcl_Interp *interp, const char *str, const char *proto, int *portPtr); -/* 104 */ -EXTERN int TclSockMinimumBuffersOld(int sock, int size); +/* Slot 104 is reserved */ /* Slot 105 is reserved */ /* Slot 106 is reserved */ /* Slot 107 is reserved */ @@ -707,7 +706,7 @@ typedef struct TclIntStubs { const char * (*tclSetPreInitScript) (const char *string); /* 101 */ void (*tclSetupEnv) (Tcl_Interp *interp); /* 102 */ int (*tclSockGetPort) (Tcl_Interp *interp, const char *str, const char *proto, int *portPtr); /* 103 */ - int (*tclSockMinimumBuffersOld) (int sock, int size); /* 104 */ + void (*reserved104)(void); void (*reserved105)(void); void (*reserved106)(void); void (*reserved107)(void); @@ -1029,8 +1028,7 @@ extern const TclIntStubs *tclIntStubsPtr; (tclIntStubsPtr->tclSetupEnv) /* 102 */ #define TclSockGetPort \ (tclIntStubsPtr->tclSockGetPort) /* 103 */ -#define TclSockMinimumBuffersOld \ - (tclIntStubsPtr->tclSockMinimumBuffersOld) /* 104 */ +/* Slot 104 is reserved */ /* Slot 105 is reserved */ /* Slot 106 is reserved */ /* Slot 107 is reserved */ diff --git a/generic/tclPipe.c b/generic/tclPipe.c index dbc9914..1dd9309 100644 --- a/generic/tclPipe.c +++ b/generic/tclPipe.c @@ -370,7 +370,7 @@ TclCleanupChildren( int count; Tcl_Obj *objPtr; - Tcl_Seek(errorChan, (Tcl_WideInt)0, SEEK_SET); + Tcl_Seek(errorChan, 0, SEEK_SET); objPtr = Tcl_NewObj(); count = Tcl_ReadChars(errorChan, objPtr, TCL_NOSIZE, 0); if (count < 0) { diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c index 8397471..76523f3 100644 --- a/generic/tclStubInit.c +++ b/generic/tclStubInit.c @@ -42,18 +42,6 @@ #undef TclpGetPid #undef TclSockMinimumBuffers -/* See bug 510001: TclSockMinimumBuffers needs plat imp */ -#ifdef _WIN64 -# define TclSockMinimumBuffersOld 0 -#else -#define TclSockMinimumBuffersOld sockMinimumBuffersOld -static int TclSockMinimumBuffersOld(int sock, int size) -{ - return TclSockMinimumBuffers(INT2PTR(sock), size); -} -#endif - - #if defined(_WIN32) || defined(__CYGWIN__) #undef TclWinNToHS #define TclWinNToHS winNToHS @@ -289,7 +277,7 @@ static const TclIntStubs tclIntStubs = { TclSetPreInitScript, /* 101 */ TclSetupEnv, /* 102 */ TclSockGetPort, /* 103 */ - TclSockMinimumBuffersOld, /* 104 */ + 0, /* 104 */ 0, /* 105 */ 0, /* 106 */ 0, /* 107 */ @@ -874,7 +862,7 @@ const TclStubs tclStubs = { Tcl_ResetResult, /* 217 */ Tcl_ScanElement, /* 218 */ Tcl_ScanCountedElement, /* 219 */ - Tcl_SeekOld, /* 220 */ + Tcl_Seek, /* 220 */ Tcl_ServiceAll, /* 221 */ Tcl_ServiceEvent, /* 222 */ Tcl_SetAssocData, /* 223 */ @@ -900,7 +888,7 @@ const TclStubs tclStubs = { Tcl_SplitPath, /* 243 */ Tcl_StaticPackage, /* 244 */ Tcl_StringMatch, /* 245 */ - Tcl_TellOld, /* 246 */ + Tcl_Tell, /* 246 */ Tcl_TraceVar, /* 247 */ Tcl_TraceVar2, /* 248 */ Tcl_TranslateFileName, /* 249 */ @@ -1145,8 +1133,8 @@ const TclStubs tclStubs = { Tcl_NewWideIntObj, /* 488 */ Tcl_SetWideIntObj, /* 489 */ Tcl_AllocStatBuf, /* 490 */ - Tcl_Seek, /* 491 */ - Tcl_Tell, /* 492 */ + Tcl_SeekOld, /* 491 */ + Tcl_TellOld, /* 492 */ Tcl_ChannelWideSeekProc, /* 493 */ Tcl_DictObjPut, /* 494 */ Tcl_DictObjGet, /* 495 */ |