summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-19 12:17:50 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2012-11-19 12:17:50 (GMT)
commit9c8731a3a9259e66d93d399531844eebc954544e (patch)
treeec43417960db7d374d3c38a73b91204b253c0435
parent8374fd0678ba9780d5378bdcc96080b6af6de97e (diff)
parentdc94f0158e25e5fd110f4aee8c223078cb4a4757 (diff)
downloadtcl-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.decls12
-rw-r--r--generic/tclDecls.h33
-rw-r--r--generic/tclIO.c63
-rw-r--r--generic/tclIOCmd.c6
-rw-r--r--generic/tclIOUtil.c2
-rw-r--r--generic/tclInt.decls8
-rw-r--r--generic/tclIntDecls.h8
-rw-r--r--generic/tclPipe.c2
-rw-r--r--generic/tclStubInit.c22
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 */