Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | merge current trunk |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | tip-388-impl |
Files: | files | file ages | folders |
SHA1: |
daf00045323d85d59e4a2e5bde84d190 |
User & Date: | jan.nijtmans 2011-08-16 09:18:06 |
Context
2011-08-17
| ||
14:01 | Merge to feature branch check-in: 8286568880 user: jan.nijtmans tags: tip-388-impl | |
2011-08-16
| ||
09:18 | merge current trunk check-in: daf0004532 user: jan.nijtmans tags: tip-388-impl | |
07:40 | merge-mark check-in: 82122d5063 user: jan.nijtmans tags: trunk | |
2011-08-12
| ||
08:02 | TIP 388 implementation check-in: 28fe328b17 user: jan.nijtmans tags: tip-388-impl | |
Changes
Changes to ChangeLog.
1 2 | 2011-08-10 Alexandre Ferrieux <[email protected]> | > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | 2011-08-15 Don Porter <[email protected]> * generic/tclBasic.c: [Bug 3390272] Leak of [info script] value. 2011-08-15 Jan Nijtmans <[email protected]> * generic/tclPosixStr.c: [Bug 3388350] mingw64 compiler warnings * win/tclWinPort.h: * win/configure.in * win/configure 2011-08-14 Jan Nijtmans <[email protected]> * doc/FindExec.3: [Patch 3124554]: Move WishPanic from Tk to Tcl * doc/Panic.3 Added Documentation 2011-08-12 Don Porter <[email protected]> * generic/tclPathObj.c: [Bug 3389764] Eliminate possibility that dup of a "path" value can create reference cycle. 2011-08-12 Donal K. Fellows <[email protected]> * generic/tclZlib.c (ZlibTransformOutput): [Bug 3390073]: Return the correct length of written data for a compressing transform. 2011-08-10 Alexandre Ferrieux <[email protected]> * generic/tclTestObj.c: [Bug 3386721]: Allow multiple [load]ing of the Tcltest package. 2011-08-09 Alexandre Ferrieux <[email protected]> * generic/tclBasic.c: [Bug 2919042]: Restore "valgrindability" of Tcl * generic/tclEvent.c: that was lost by the streamlining of [exit], by * generic/tclExecute.c: conditionally forcing a full Finalize: * generic/tclInt.h: use -DPURIFY or ::env(TCL_FINALIZE_ON_EXIT) 2011-08-09 Alexandre Ferrieux <[email protected]> * generic/tclCompCmds.c: [Bug 3386417]: Avoid a reference loop between * generic/tclInt.h: the bytecode and its companion errostack * generic/tclResult.c: when compiling a syntax error. 2011-08-09 Jan Nijtmans <[email protected]> * win/tclWinConsole.c: [Bug 3388350]: mingw64 compiler warnings * win/tclWinDde.c * win/tclWinPipe.c * win/tclWinSerial.c 2011-08-09 Jan Nijtmans <[email protected]> * generic/tclInt.h: Change the signature of TclParseHex(), such that |
︙ | ︙ |
Changes to doc/FindExec.3.
︙ | ︙ | |||
40 41 42 43 44 45 46 47 48 49 50 51 52 53 | \fIargv[0]\fR as its argument. It is important not to change the working directory before the invocation. \fBTcl_FindExecutable\fR uses \fIargv0\fR along with the \fBPATH\fR environment variable to find the application's executable, if possible. If it fails to find the binary, then future calls to \fBinfo nameofexecutable\fR will return an empty string. .PP \fBTcl_GetNameOfExecutable\fR simply returns a pointer to the internal full path name of the executable file as computed by \fBTcl_FindExecutable\fR. This procedure call is the C API equivalent to the \fBinfo nameofexecutable\fR command. NULL is returned if the internal full path name has not been computed or unknown. | > > > > > > > | 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | \fIargv[0]\fR as its argument. It is important not to change the working directory before the invocation. \fBTcl_FindExecutable\fR uses \fIargv0\fR along with the \fBPATH\fR environment variable to find the application's executable, if possible. If it fails to find the binary, then future calls to \fBinfo nameofexecutable\fR will return an empty string. .PP On Windows platforms this procedure is typically invoked as the very first thing in the application's main program as well; Its \fIargv[0]\fR argument is only used to indicate wheter the executable has a stderr channel (any non-null value) or not (the value null). If \fBTcl_SetPanicProc\fR is never called and no debugger is running, this determines whether the panic message is sent to stderr or to a standard system dialog. .PP \fBTcl_GetNameOfExecutable\fR simply returns a pointer to the internal full path name of the executable file as computed by \fBTcl_FindExecutable\fR. This procedure call is the C API equivalent to the \fBinfo nameofexecutable\fR command. NULL is returned if the internal full path name has not been computed or unknown. |
︙ | ︙ |
Changes to doc/Panic.3.
︙ | ︙ | |||
45 46 47 48 49 50 51 | same formatting rules used by the \fBprintf\fR family of functions. The same formatting rules are also used by the built-in Tcl command \fBformat\fR. .PP In a freshly loaded Tcl library, \fBTcl_Panic\fR prints the formatted error message to the standard error file of the process, and then calls \fBabort\fR to terminate the process. \fBTcl_Panic\fR does not | | > > > | < < | | | | < < < | 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | same formatting rules used by the \fBprintf\fR family of functions. The same formatting rules are also used by the built-in Tcl command \fBformat\fR. .PP In a freshly loaded Tcl library, \fBTcl_Panic\fR prints the formatted error message to the standard error file of the process, and then calls \fBabort\fR to terminate the process. \fBTcl_Panic\fR does not return. On Windows, when a debugger is running, the formatted error message is sent to the debugger in stead. If the windows executable does not have a stderr channel (e.g. \fBwish.exe\fR), then a system dialog box is used to display the panic message. .PP \fBTcl_SetPanicProc\fR may be used to modify the behavior of \fBTcl_Panic\fR. The \fIpanicProc\fR argument should match the type \fBTcl_PanicProc\fR: .PP .CS typedef void \fBTcl_PanicProc\fR( const char *\fBformat\fR, \fBarg\fR, \fBarg\fR,...); .CE .PP After \fBTcl_SetPanicProc\fR returns, any future calls to \fBTcl_Panic\fR will call \fIpanicProc\fR, passing along the \fIformat\fR and \fIarg\fR arguments. \fIpanicProc\fR should avoid making calls into the Tcl library, or into other libraries that may call the Tcl library, since the original call to \fBTcl_Panic\fR indicates the Tcl library is not in a state of reliable operation. .PP The typical use of \fBTcl_SetPanicProc\fR arranges for the error message to be displayed or reported in a manner more suitable for the application or the platform. .PP Although the primary callers of \fBTcl_Panic\fR are the procedures of the Tcl library, \fBTcl_Panic\fR is a public function and may be called by any extension or application that wishes to abort the process and have a panic message displayed the same way that panic messages from Tcl will be displayed. .PP |
︙ | ︙ |
Changes to generic/tclBasic.c.
︙ | ︙ | |||
1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 | } TclFreePackageInfo(iPtr); while (iPtr->tracePtr != NULL) { Tcl_DeleteTrace((Tcl_Interp *) iPtr, (Tcl_Trace) iPtr->tracePtr); } if (iPtr->execEnvPtr != NULL) { TclDeleteExecEnv(iPtr->execEnvPtr); } Tcl_DecrRefCount(iPtr->emptyObjPtr); iPtr->emptyObjPtr = NULL; resPtr = iPtr->resolverPtr; while (resPtr) { nextResPtr = resPtr->nextPtr; | > > > > | 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 | } TclFreePackageInfo(iPtr); while (iPtr->tracePtr != NULL) { Tcl_DeleteTrace((Tcl_Interp *) iPtr, (Tcl_Trace) iPtr->tracePtr); } if (iPtr->execEnvPtr != NULL) { TclDeleteExecEnv(iPtr->execEnvPtr); } if (iPtr->scriptFile) { Tcl_DecrRefCount(iPtr->scriptFile); iPtr->scriptFile = NULL; } Tcl_DecrRefCount(iPtr->emptyObjPtr); iPtr->emptyObjPtr = NULL; resPtr = iPtr->resolverPtr; while (resPtr) { nextResPtr = resPtr->nextPtr; |
︙ | ︙ |
Changes to generic/tclPathObj.c.
︙ | ︙ | |||
2613 2614 2615 2616 2617 2618 2619 | Tcl_Obj *copyPtr) /* Path obj with internal rep to set. */ { FsPath *srcFsPathPtr = PATHOBJ(srcPtr); FsPath *copyFsPathPtr = ckalloc(sizeof(FsPath)); SETPATHOBJ(copyPtr, copyFsPathPtr); | | > > > | < < | > > > | < < < | | < | | 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 | Tcl_Obj *copyPtr) /* Path obj with internal rep to set. */ { FsPath *srcFsPathPtr = PATHOBJ(srcPtr); FsPath *copyFsPathPtr = ckalloc(sizeof(FsPath)); SETPATHOBJ(copyPtr, copyFsPathPtr); if (srcFsPathPtr->translatedPathPtr == srcPtr) { /* Cycle in src -> make cycle in copy. */ copyFsPathPtr->translatedPathPtr = copyPtr; } else { copyFsPathPtr->translatedPathPtr = srcFsPathPtr->translatedPathPtr; if (copyFsPathPtr->translatedPathPtr != NULL) { Tcl_IncrRefCount(copyFsPathPtr->translatedPathPtr); } } if (srcFsPathPtr->normPathPtr == srcPtr) { /* Cycle in src -> make cycle in copy. */ copyFsPathPtr->normPathPtr = copyPtr; } else { copyFsPathPtr->normPathPtr = srcFsPathPtr->normPathPtr; if (copyFsPathPtr->normPathPtr != NULL) { Tcl_IncrRefCount(copyFsPathPtr->normPathPtr); } } copyFsPathPtr->cwdPtr = srcFsPathPtr->cwdPtr; if (copyFsPathPtr->cwdPtr != NULL) { Tcl_IncrRefCount(copyFsPathPtr->cwdPtr); } copyFsPathPtr->flags = srcFsPathPtr->flags; if (srcFsPathPtr->fsRecPtr != NULL && srcFsPathPtr->nativePathPtr != NULL) { Tcl_FSDupInternalRepProc *dupProc = |
︙ | ︙ |
Changes to generic/tclPosixStr.c.
︙ | ︙ | |||
31 32 33 34 35 36 37 | *---------------------------------------------------------------------- */ const char * Tcl_ErrnoId(void) { switch (errno) { | | | 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | *---------------------------------------------------------------------- */ const char * Tcl_ErrnoId(void) { switch (errno) { #if defined(E2BIG) && (!defined(EOVERFLOW) || (E2BIG != EOVERFLOW)) case E2BIG: return "E2BIG"; #endif #ifdef EACCES case EACCES: return "EACCES"; #endif #ifdef EADDRINUSE case EADDRINUSE: return "EADDRINUSE"; |
︙ | ︙ | |||
490 491 492 493 494 495 496 | */ const char * Tcl_ErrnoMsg( int err) /* Error number (such as in errno variable). */ { switch (err) { | | | 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 | */ const char * Tcl_ErrnoMsg( int err) /* Error number (such as in errno variable). */ { switch (err) { #if defined(E2BIG) && (!defined(EOVERFLOW) || (E2BIG != EOVERFLOW)) case E2BIG: return "argument list too long"; #endif #ifdef EACCES case EACCES: return "permission denied"; #endif #ifdef EADDRINUSE case EADDRINUSE: return "address already in use"; |
︙ | ︙ |
Changes to generic/tclZlib.c.
︙ | ︙ | |||
2456 2457 2458 2459 2460 2461 2462 | if (e != Z_OK) { Tcl_SetChannelError(cd->parent, Tcl_NewStringObj(cd->outStream.msg, -1)); *errorCodePtr = EINVAL; return -1; } | | | 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 | if (e != Z_OK) { Tcl_SetChannelError(cd->parent, Tcl_NewStringObj(cd->outStream.msg, -1)); *errorCodePtr = EINVAL; return -1; } return toWrite - cd->outStream.avail_in; } static int ZlibTransformSetOption( /* not used */ ClientData instanceData, Tcl_Interp *interp, const char *optionName, |
︙ | ︙ |
Changes to tests/zlib.test.
︙ | ︙ | |||
152 153 154 155 156 157 158 159 160 161 162 163 164 165 | } append total --> [file size $file] } -cleanup { close $fout close $srv removeFile $file } -result 81920-->81920 test zlib-9.1 "check fcopy with push" -constraints zlib -setup { set sfile [makeFile {} testsrc.gz] set file [makeFile {} test.gz] set f [open $sfile wb] puts -nonewline $f [zlib gzip [string repeat a 81920]] close $f } -body { | > | 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 | } append total --> [file size $file] } -cleanup { close $fout close $srv removeFile $file } -result 81920-->81920 test zlib-9.1 "check fcopy with push" -constraints zlib -setup { set sfile [makeFile {} testsrc.gz] set file [makeFile {} test.gz] set f [open $sfile wb] puts -nonewline $f [zlib gzip [string repeat a 81920]] close $f } -body { |
︙ | ︙ | |||
565 566 567 568 569 570 571 572 573 574 575 576 577 578 | vwait ::total set ::total } -cleanup { close $srv rename bgerror {} rename zlibRead {} } -result {error {invalid block type}} ::tcltest::cleanupTests return # Local Variables: # mode: tcl # End: | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 | vwait ::total set ::total } -cleanup { close $srv rename bgerror {} rename zlibRead {} } -result {error {invalid block type}} test zlib-11.1 "Bug #3390073: mis-appled gzip filtering" -setup { set file [makeFile {} test.input] } -constraints zlib -body { set f [open $file wb] puts -nonewline [zlib push gzip $f] [string repeat "hello" 1000] close $f set f [open $file rb] set d [read $f] close $f set d [zlib gunzip $d] list [regexp -all "hello" $d] [string length [regsub -all "hello" $d {}]] } -cleanup { removeFile $file } -result {1000 0} test zlib-11.2 "Bug #3390073: mis-appled gzip filtering" -setup { set file [makeFile {} test.input] } -constraints zlib -body { set f [open $file wb] puts -nonewline [zlib push gzip $f -header {filename /foo/bar}] \ [string repeat "hello" 1000] close $f set f [open $file rb] set d [read $f] close $f set d [zlib gunzip $d -header h] list [regexp -all "hello" $d] [dict get $h filename] \ [string length [regsub -all "hello" $d {}]] } -cleanup { removeFile $file } -result {1000 /foo/bar 0} ::tcltest::cleanupTests return # Local Variables: # mode: tcl # End: |
Changes to win/configure.
︙ | ︙ | |||
3481 3482 3483 3484 3485 3486 3487 | #define HAVE_CAST_TO_UNION 1 _ACEOF fi # Check to see if struct _stat32i64 exists in mingw's sys/stat.h | | | | 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 | #define HAVE_CAST_TO_UNION 1 _ACEOF fi # Check to see if struct _stat32i64 exists in mingw's sys/stat.h echo "$as_me:$LINENO: checking if struct _stat32i64 missing" >&5 echo $ECHO_N "checking if struct _stat32i64 missing... $ECHO_C" >&6 if test "${tcl_struct_stat32i64+set}" = set; then echo $ECHO_N "(cached) $ECHO_C" >&6 else cat >conftest.$ac_ext <<_ACEOF /* confdefs.h. */ _ACEOF cat confdefs.h >>conftest.$ac_ext |
︙ | ︙ | |||
3528 3529 3530 3531 3532 3533 3534 | (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then | | | | | 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 | (exit $ac_status); }; } && { ac_try='test -s conftest.$ac_objext' { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 (eval $ac_try) 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); }; }; then tcl_struct_stat32i64=no else echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 tcl_struct_stat32i64=yes fi rm -f conftest.err conftest.$ac_objext conftest.$ac_ext fi echo "$as_me:$LINENO: result: $tcl_struct_stat32i64" >&5 echo "${ECHO_T}$tcl_struct_stat32i64" >&6 if test "$tcl_struct_stat32i64" = "yes" ; then cat >>confdefs.h <<\_ACEOF #define HAVE_NO_STRUCT_STAT32I64 1 _ACEOF fi # See if declarations like FINDEX_INFO_LEVELS are # missing from winbase.h. This is known to be |
︙ | ︙ |
Changes to win/configure.in.
︙ | ︙ | |||
223 224 225 226 227 228 229 | if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi # Check to see if struct _stat32i64 exists in mingw's sys/stat.h | | | | | | | 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 | if test "$tcl_cv_cast_to_union" = "yes"; then AC_DEFINE(HAVE_CAST_TO_UNION, 1, [Defined when compiler supports casting to union type.]) fi # Check to see if struct _stat32i64 exists in mingw's sys/stat.h AC_CACHE_CHECK(if struct _stat32i64 missing, tcl_struct_stat32i64, AC_TRY_COMPILE([ #include <sys/types.h> #include <sys/stat.h> ], [ struct _stat32i64 foo; ], tcl_struct_stat32i64=no, tcl_struct_stat32i64=yes) ) if test "$tcl_struct_stat32i64" = "yes" ; then AC_DEFINE(HAVE_NO_STRUCT_STAT32I64, 1, [Defined when sys/stat.h is missing struct _stat32i64]) fi # See if declarations like FINDEX_INFO_LEVELS are # missing from winbase.h. This is known to be # a problem with VC++ 5.2. |
︙ | ︙ | |||
395 396 397 398 399 400 401 | AC_CHECK_TYPE([intptr_t], [ AC_DEFINE([HAVE_INTPTR_T], 1, [Do we have the intptr_t type?])], [ AC_CACHE_CHECK([for pointer-size signed integer type], tcl_cv_intptr_t, [ for tcl_cv_intptr_t in "int" "long" "long long" none; do if test "$tcl_cv_intptr_t" != none; then AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], | | | | 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | AC_CHECK_TYPE([intptr_t], [ AC_DEFINE([HAVE_INTPTR_T], 1, [Do we have the intptr_t type?])], [ AC_CACHE_CHECK([for pointer-size signed integer type], tcl_cv_intptr_t, [ for tcl_cv_intptr_t in "int" "long" "long long" none; do if test "$tcl_cv_intptr_t" != none; then AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], [[sizeof (void *) <= sizeof ($tcl_cv_intptr_t)]])], [tcl_ok=yes], [tcl_ok=no]) test "$tcl_ok" = yes && break; fi done]) if test "$tcl_cv_intptr_t" != none; then AC_DEFINE_UNQUOTED([intptr_t], [$tcl_cv_intptr_t], [Signed integer type wide enough to hold a pointer.]) fi ]) AC_CHECK_TYPE([uintptr_t], [ AC_DEFINE([HAVE_UINTPTR_T], 1, [Do we have the uintptr_t type?])], [ AC_CACHE_CHECK([for pointer-size unsigned integer type], tcl_cv_uintptr_t, [ for tcl_cv_uintptr_t in "unsigned int" "unsigned long" "unsigned long long" \ none; do if test "$tcl_cv_uintptr_t" != none; then AC_COMPILE_IFELSE([AC_LANG_BOOL_COMPILE_TRY([AC_INCLUDES_DEFAULT], [[sizeof (void *) <= sizeof ($tcl_cv_uintptr_t)]])], [tcl_ok=yes], [tcl_ok=no]) test "$tcl_ok" = yes && break; fi done]) if test "$tcl_cv_uintptr_t" != none; then AC_DEFINE_UNQUOTED([uintptr_t], [$tcl_cv_uintptr_t], [Unsigned integer type wide enough to hold a pointer.]) fi |
︙ | ︙ |
Changes to win/tclWinPort.h.
︙ | ︙ | |||
114 115 116 117 118 119 120 | #endif /* __MWERKS__ */ #include <time.h> /* * Not all mingw32 versions have this struct. */ | | | 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 | #endif /* __MWERKS__ */ #include <time.h> /* * Not all mingw32 versions have this struct. */ #if !defined(__BORLANDC__) && !defined(_MSC_VER) && !defined(_WIN64) && defined(HAVE_NO_STRUCT_STAT32I64) struct _stat32i64 { dev_t st_dev; ino_t st_ino; unsigned short st_mode; short st_nlink; short st_uid; short st_gid; |
︙ | ︙ |