summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2013-01-11 13:44:13 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2013-01-11 13:44:13 (GMT)
commit88d1478f11c909825177d31143fb0e99a2883eca (patch)
tree8609ed56e76ee7d4497872a844c74d51af722490
parentbc7431c642aff27e60df2e20defacc9cf304d91d (diff)
parent193ad73d549eeb177bd467a9d894e21ff53845e9 (diff)
downloadtcl-88d1478f11c909825177d31143fb0e99a2883eca.zip
tcl-88d1478f11c909825177d31143fb0e99a2883eca.tar.gz
tcl-88d1478f11c909825177d31143fb0e99a2883eca.tar.bz2
merge trunk
Add Tcl_Canceled, Tcl_BackgroundException to the list as well.
-rw-r--r--generic/tcl.decls9
-rw-r--r--generic/tclDecls.h24
-rw-r--r--generic/tclInt.decls5
-rw-r--r--generic/tclIntDecls.h12
-rw-r--r--generic/tclStubInit.c32
-rw-r--r--win/tclWinFile.c31
6 files changed, 79 insertions, 34 deletions
diff --git a/generic/tcl.decls b/generic/tcl.decls
index 2ad3362..9e7952c 100644
--- a/generic/tcl.decls
+++ b/generic/tcl.decls
@@ -1795,14 +1795,19 @@ declare 573 {
int objc, Tcl_Obj *const objv[], ClientData *clientDataPtr)
}
-# (Exposed starting with 8.6)
+# Public in Tcl 8.6:
+declare 581 {
+ int TclCanceled(Tcl_Interp *interp, int flags)
+}
declare 605 {
int TclGetErrorLine(Tcl_Interp *interp)
}
declare 606 {
void TclSetErrorLine(Tcl_Interp *interp, int lineNum)
}
-
+declare 609 {
+ void TclBackgroundException(Tcl_Interp *interp, int code)
+}
declare 630 {
void TclUnusedStubEntry(void)
}
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 05e0f33..0fc31d2 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -1636,7 +1636,9 @@ EXTERN int Tcl_PkgRequireProc _ANSI_ARGS_((Tcl_Interp *interp,
/* Slot 578 is reserved */
/* Slot 579 is reserved */
/* Slot 580 is reserved */
-/* Slot 581 is reserved */
+/* 581 */
+EXTERN int TclCanceled _ANSI_ARGS_((Tcl_Interp *interp,
+ int flags));
/* Slot 582 is reserved */
/* Slot 583 is reserved */
/* Slot 584 is reserved */
@@ -1667,7 +1669,9 @@ EXTERN void TclSetErrorLine _ANSI_ARGS_((Tcl_Interp *interp,
int lineNum));
/* Slot 607 is reserved */
/* Slot 608 is reserved */
-/* Slot 609 is reserved */
+/* 609 */
+EXTERN void TclBackgroundException _ANSI_ARGS_((
+ Tcl_Interp *interp, int code));
/* Slot 610 is reserved */
/* Slot 611 is reserved */
/* Slot 612 is reserved */
@@ -2306,7 +2310,7 @@ typedef struct TclStubs {
VOID *reserved578;
VOID *reserved579;
VOID *reserved580;
- VOID *reserved581;
+ int (*tclCanceled) _ANSI_ARGS_((Tcl_Interp *interp, int flags)); /* 581 */
VOID *reserved582;
VOID *reserved583;
VOID *reserved584;
@@ -2334,7 +2338,7 @@ typedef struct TclStubs {
void (*tclSetErrorLine) _ANSI_ARGS_((Tcl_Interp *interp, int lineNum)); /* 606 */
VOID *reserved607;
VOID *reserved608;
- VOID *reserved609;
+ void (*tclBackgroundException) _ANSI_ARGS_((Tcl_Interp *interp, int code)); /* 609 */
VOID *reserved610;
VOID *reserved611;
VOID *reserved612;
@@ -4459,7 +4463,10 @@ extern TclStubs *tclStubsPtr;
/* Slot 578 is reserved */
/* Slot 579 is reserved */
/* Slot 580 is reserved */
-/* Slot 581 is reserved */
+#ifndef TclCanceled
+#define TclCanceled \
+ (tclStubsPtr->tclCanceled) /* 581 */
+#endif
/* Slot 582 is reserved */
/* Slot 583 is reserved */
/* Slot 584 is reserved */
@@ -4493,7 +4500,10 @@ extern TclStubs *tclStubsPtr;
#endif
/* Slot 607 is reserved */
/* Slot 608 is reserved */
-/* Slot 609 is reserved */
+#ifndef TclBackgroundException
+#define TclBackgroundException \
+ (tclStubsPtr->tclBackgroundException) /* 609 */
+#endif
/* Slot 610 is reserved */
/* Slot 611 is reserved */
/* Slot 612 is reserved */
@@ -4523,6 +4533,8 @@ extern TclStubs *tclStubsPtr;
/* !END!: Do not edit above this line. */
+#undef TclCanceled
+#undef TclBackgroundException
#undef TclGetErrorLine
#undef TclSetErrorLine
#undef TclUnusedStubEntry
diff --git a/generic/tclInt.decls b/generic/tclInt.decls
index 18d1bdf..967b7cd 100644
--- a/generic/tclInt.decls
+++ b/generic/tclInt.decls
@@ -695,7 +695,10 @@ declare 183 {
declare 199 {
int TclMatchIsTrivial(const char *pattern)
}
-
+# TIP 337 made this one public
+declare 236 {
+ void TclBackgroundException(Tcl_Interp *interp, int code)
+}
declare 249 {
void TclUnusedStubEntry(void)
}
diff --git a/generic/tclIntDecls.h b/generic/tclIntDecls.h
index 3bb9795..317dd8c 100644
--- a/generic/tclIntDecls.h
+++ b/generic/tclIntDecls.h
@@ -541,7 +541,9 @@ EXTERN int TclMatchIsTrivial _ANSI_ARGS_((CONST char *pattern));
/* Slot 233 is reserved */
/* Slot 234 is reserved */
/* Slot 235 is reserved */
-/* Slot 236 is reserved */
+/* 236 */
+EXTERN void TclBackgroundException _ANSI_ARGS_((
+ Tcl_Interp *interp, int code));
/* Slot 237 is reserved */
/* Slot 238 is reserved */
/* Slot 239 is reserved */
@@ -797,7 +799,7 @@ typedef struct TclIntStubs {
VOID *reserved233;
VOID *reserved234;
VOID *reserved235;
- VOID *reserved236;
+ void (*tclBackgroundException) _ANSI_ARGS_((Tcl_Interp *interp, int code)); /* 236 */
VOID *reserved237;
VOID *reserved238;
VOID *reserved239;
@@ -1471,7 +1473,10 @@ extern TclIntStubs *tclIntStubsPtr;
/* Slot 233 is reserved */
/* Slot 234 is reserved */
/* Slot 235 is reserved */
-/* Slot 236 is reserved */
+#ifndef TclBackgroundException
+#define TclBackgroundException \
+ (tclIntStubsPtr->tclBackgroundException) /* 236 */
+#endif
/* Slot 237 is reserved */
/* Slot 238 is reserved */
/* Slot 239 is reserved */
@@ -1499,5 +1504,6 @@ extern TclIntStubs *tclIntStubsPtr;
# define TclSockMinimumBuffers(a,b) TclSockMinimumBuffersOld((int)(a),b)
#endif
#undef TclUnusedStubEntry
+#undef TclBackgroundException
#endif /* _TCLINTDECLS */
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index d9a2aa0..f0f5e08 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -70,13 +70,31 @@ int TclSockMinimumBuffersOld(sock, size)
}
#endif
+#define TclBackgroundException backgroundException
+static void TclBackgroundException(interp, code)
+ Tcl_Interp *interp;
+ int code;
+{
+ Tcl_BackgroundError(interp);
+}
+#define TclCanceled canceled
+static int TclCanceled(interp)
+ Tcl_Interp *interp;
+{
+ return TCL_OK;
+}
#define TclGetErrorLine getErrorLine
-static int TclGetErrorLine(Tcl_Interp *interp) {
- return interp->errorLine;
+static int TclGetErrorLine(interp)
+ Tcl_Interp *interp;
+{
+ return interp->errorLine;
}
#define TclSetErrorLine setErrorLine
-static void TclSetErrorLine(Tcl_Interp *interp, int errorline) {
- interp->errorLine = errorline;
+static void TclSetErrorLine(interp, lineNum)
+ Tcl_Interp *interp;
+ int lineNum;
+{
+ interp->errorLine = lineNum;
}
#ifdef __WIN32__
@@ -451,7 +469,7 @@ TclIntStubs tclIntStubs = {
NULL, /* 233 */
NULL, /* 234 */
NULL, /* 235 */
- NULL, /* 236 */
+ TclBackgroundException, /* 236 */
NULL, /* 237 */
NULL, /* 238 */
NULL, /* 239 */
@@ -1195,7 +1213,7 @@ TclStubs tclStubs = {
NULL, /* 578 */
NULL, /* 579 */
NULL, /* 580 */
- NULL, /* 581 */
+ TclCanceled, /* 581 */
NULL, /* 582 */
NULL, /* 583 */
NULL, /* 584 */
@@ -1223,7 +1241,7 @@ TclStubs tclStubs = {
TclSetErrorLine, /* 606 */
NULL, /* 607 */
NULL, /* 608 */
- NULL, /* 609 */
+ TclBackgroundException, /* 609 */
NULL, /* 610 */
NULL, /* 611 */
NULL, /* 612 */
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 4abd215..d1078f5 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -117,6 +117,7 @@ typedef struct _REPARSE_DATA_BUFFER {
WORD SubstituteNameLength;
WORD PrintNameOffset;
WORD PrintNameLength;
+ ULONG Flags;
WCHAR PathBuffer[1];
} SymbolicLinkReparseBuffer;
struct {
@@ -359,18 +360,18 @@ WinSymLinkDirectory(LinkDirectory, LinkTarget)
/* Build the reparse info */
memset(reparseBuffer, 0, sizeof(DUMMY_REPARSE_BUFFER));
reparseBuffer->ReparseTag = IO_REPARSE_TAG_MOUNT_POINT;
- reparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength =
+ reparseBuffer->MountPointReparseBuffer.SubstituteNameLength =
wcslen(nativeTarget) * sizeof(WCHAR);
reparseBuffer->Reserved = 0;
- reparseBuffer->SymbolicLinkReparseBuffer.PrintNameLength = 0;
- reparseBuffer->SymbolicLinkReparseBuffer.PrintNameOffset =
- reparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength
+ reparseBuffer->MountPointReparseBuffer.PrintNameLength = 0;
+ reparseBuffer->MountPointReparseBuffer.PrintNameOffset =
+ reparseBuffer->MountPointReparseBuffer.SubstituteNameLength
+ sizeof(WCHAR);
- memcpy(reparseBuffer->SymbolicLinkReparseBuffer.PathBuffer, nativeTarget,
+ memcpy(reparseBuffer->MountPointReparseBuffer.PathBuffer, nativeTarget,
sizeof(WCHAR)
- + reparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength);
+ + reparseBuffer->MountPointReparseBuffer.SubstituteNameLength);
reparseBuffer->ReparseDataLength =
- reparseBuffer->SymbolicLinkReparseBuffer.SubstituteNameLength + 12;
+ reparseBuffer->MountPointReparseBuffer.SubstituteNameLength + 12;
return NativeWriteReparse(LinkDirectory, reparseBuffer);
}
@@ -505,10 +506,10 @@ WinReadLinkDirectory(LinkDirectory)
* that changes in the future, this code will have to be
* generalised.
*/
- if (reparseBuffer->SymbolicLinkReparseBuffer.PathBuffer[0]
+ if (reparseBuffer->MountPointReparseBuffer.PathBuffer[0]
== L'\\') {
/* Check whether this is a mounted volume */
- if (wcsncmp(reparseBuffer->SymbolicLinkReparseBuffer.PathBuffer,
+ if (wcsncmp(reparseBuffer->MountPointReparseBuffer.PathBuffer,
L"\\??\\Volume{",11) == 0) {
char drive;
/*
@@ -516,14 +517,14 @@ WinReadLinkDirectory(LinkDirectory)
* we have to fix here. It doesn't seem very well
* documented.
*/
- reparseBuffer->SymbolicLinkReparseBuffer
+ reparseBuffer->MountPointReparseBuffer
.PathBuffer[1] = L'\\';
/*
* Check if a corresponding drive letter exists, and
* use that if it is found
*/
drive = TclWinDriveLetterForVolMountPoint(reparseBuffer
- ->SymbolicLinkReparseBuffer.PathBuffer);
+ ->MountPointReparseBuffer.PathBuffer);
if (drive != -1) {
char driveSpec[3] = {
drive, ':', '\0'
@@ -544,11 +545,11 @@ WinReadLinkDirectory(LinkDirectory)
*/
Tcl_SetErrno(EINVAL);
return NULL;
- } else if (wcsncmp(reparseBuffer->SymbolicLinkReparseBuffer
+ } else if (wcsncmp(reparseBuffer->MountPointReparseBuffer
.PathBuffer, L"\\\\?\\",4) == 0) {
/* Strip off the prefix */
offset = 4;
- } else if (wcsncmp(reparseBuffer->SymbolicLinkReparseBuffer
+ } else if (wcsncmp(reparseBuffer->MountPointReparseBuffer
.PathBuffer, L"\\??\\",4) == 0) {
/* Strip off the prefix */
offset = 4;
@@ -556,8 +557,8 @@ WinReadLinkDirectory(LinkDirectory)
}
Tcl_WinTCharToUtf(
- (CONST char*)reparseBuffer->SymbolicLinkReparseBuffer.PathBuffer,
- (int)reparseBuffer->SymbolicLinkReparseBuffer
+ (CONST char*)reparseBuffer->MountPointReparseBuffer.PathBuffer,
+ (int)reparseBuffer->MountPointReparseBuffer
.SubstituteNameLength, &ds);
copy = Tcl_DStringValue(&ds)+offset;