diff options
author | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-11 13:44:13 (GMT) |
---|---|---|
committer | jan.nijtmans <nijtmans@users.sourceforge.net> | 2013-01-11 13:44:13 (GMT) |
commit | 88d1478f11c909825177d31143fb0e99a2883eca (patch) | |
tree | 8609ed56e76ee7d4497872a844c74d51af722490 | |
parent | bc7431c642aff27e60df2e20defacc9cf304d91d (diff) | |
parent | 193ad73d549eeb177bd467a9d894e21ff53845e9 (diff) | |
download | tcl-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.decls | 9 | ||||
-rw-r--r-- | generic/tclDecls.h | 24 | ||||
-rw-r--r-- | generic/tclInt.decls | 5 | ||||
-rw-r--r-- | generic/tclIntDecls.h | 12 | ||||
-rw-r--r-- | generic/tclStubInit.c | 32 | ||||
-rw-r--r-- | win/tclWinFile.c | 31 |
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; |