Compare commits

...
4558 Commits
Author SHA1 Message Date
jan.nijtmans 99e9ce3656 Use more TCL_AUTO_LENGTH, when appropriate 2018-10-06 19:20:43 +00:00
jan.nijtmans d84d03b91a merge trunk 2018-10-06 18:33:42 +00:00
jan.nijtmans a51d80f377 Merge 8.7 2018-10-06 17:22:38 +00:00
jan.nijtmans ac711bcf45 protect Tcl_WinUtfToTChar/Tcl_WinTCharToUtf against NULL input values: return empty string in that case.
Add TIP #494-compatible definitions of TCL_IO_FAILURE/TCL_AUTO_LENGTH, and use it in some appropriate places.
2018-10-06 17:12:46 +00:00
dkf b5f75d3392 More regularizing of function names, field names and testing styles 2018-10-06 16:49:40 +00:00
dkf ffc7a9f0b9 More cleaning up. 2018-10-06 13:07:52 +00:00
dkf a557024511 Cleanup work on zipfs(n) 2018-10-06 06:41:28 +00:00
dkf 0efc494b97 More tidying up of zipfs 2018-10-06 06:22:57 +00:00
jan.nijtmans 7a674da778 Merge 8.7 2018-10-05 21:22:53 +00:00
jan.nijtmans 70fb513ba3 Merge 8.6 2018-10-05 21:22:13 +00:00
jan.nijtmans 8985ee2114 Better implementations of Tcl_WinTCharToUtf() and Tcl_WinUtfToTChar(). They don't make any assumption on whether encodings are initialized, or specific win32 handling of special characters. 2018-10-05 20:54:59 +00:00
dgp 54f90bae0f merge 8.7 2018-10-05 19:41:45 +00:00
dgp 33d71c61d9 merge 8.6 2018-10-05 19:41:28 +00:00
jan.nijtmans 85aac3aef7 Fix wrong usage of Tcl_WinTCharToUtf() contract: nativePath should never be NULL, but actually it can be. 2018-10-05 19:37:38 +00:00
dgp c3c71b5f3c Post-TIP 505 editing of [lreplace] documentation. 2018-10-05 17:20:40 +00:00
jan.nijtmans 9c4ab4170b merge trunk 2018-10-04 21:07:27 +00:00
jan.nijtmans 0624d7cbb7 Merge 8.7 2018-10-04 19:27:10 +00:00
jan.nijtmans d1ec31a73d Merge 8.6 2018-10-04 19:26:18 +00:00
jan.nijtmans 9feb8b7c29 In registry, protect "keyName" from being NULL: This actually can lead to crashed (I experienced this ...). Update version to 1.3.3, and align implementation in all branches (core-8-6-branch and higher) 2018-10-04 19:22:37 +00:00
dkf b45b819dfe Clean up zipfs implementation a bit. 2018-10-04 10:42:11 +00:00
sebres 5919affa3d merge 8.7 2018-10-04 08:06:40 +00:00
sebres c365555a69 fixed TclGetWideBitsFromObj - minus applied to unsigned type 2018-10-04 08:04:08 +00:00
dkf 9707adf634 Added Emacs metadata to a bunch of nroff source files. 2018-10-04 07:27:32 +00:00
jan.nijtmans 024406099a Merge 8.7 2018-10-03 20:19:10 +00:00
jan.nijtmans 05e0ee4c06 Merge 8.6 2018-10-03 20:02:25 +00:00
jan.nijtmans 50a1375461 Tcl_UniCharToUtfDString: Don't allocate too much memory for this function.
Tcl_UtfToUniCharDString: Don't allocate too much memory for this function. And make sure that we never access more than 'length' bytes from the string, not even when encountering invalid UTF-8.
2018-10-03 19:24:13 +00:00
hypnotoad 8f20d609b9 Eliminating whitespace changes introduced by the prior checkin 2018-10-01 18:01:13 +00:00
hypnotoad ef381abdfd Pulling back in changes to fix testing on cross compiled static builds 2018-10-01 17:05:00 +00:00
hypnotoad 3dc49c128c Adjust when tcl consults zipfs until AFTER it has checked that env(TCL_LIBRARY)
has not been set
2018-10-01 16:41:12 +00:00
hypnotoad 38dcdcb300 Fixed the arguments that zipfs mount was sending in auto.tcl.
Standardized on 8 spaces instead of tab characters inside of that file.

(The indent pattern was not consistent and editing the file in a modern
editor was... painful.)

Added logic to check the current path for a zipfile with the name of the 
package being loaded. This allows wish to load tcl_library from a zip file in the same
directory as the executable. And in fact, any package which uses the 
tcl_findLibrary mechanism with get this behavior for free.
2018-09-30 23:12:13 +00:00
hypnotoad d0ac3d107b Adding Zipfile to the list of products produced for builds 2018-09-30 22:21:50 +00:00
hypnotoad f08ec44049 Adding logic for static builds to load a properly named zipfile
in the present working directory if that zipfile was not present in
either the install directory or the source directory.
2018-09-30 10:17:44 +00:00
jan.nijtmans b9d97ed6af Merge trunk 2018-09-29 21:56:35 +00:00
jan.nijtmans 51dbd66fe3 Merge 8.7 2018-09-29 20:52:42 +00:00
jan.nijtmans acbdbb87fb Add support for wine. So windows test-cases can now be run on Linux/Mac/whatever. 2018-09-29 20:39:10 +00:00
dkf a9dab78604 More readability improvements to unix makefile 2018-09-29 08:51:42 +00:00
jan.nijtmans 6dbdbb7d1b Merge trunk 2018-09-28 19:56:49 +00:00
jan.nijtmans d2edfcf2bd Merge 8.7 2018-09-28 18:57:25 +00:00
jan.nijtmans 3f2c2080cc Merge 8.6 2018-09-28 18:49:45 +00:00
jan.nijtmans 3d5f129cb0 Another patch contributed by Gustaf Neumann: shifting negative numbers is undefined behavior in the C standard
https://stackoverflow.com/questions/8415895/is-left-and-right-shifting-negative-integers-defined-behavior
2018-09-28 18:45:34 +00:00
jan.nijtmans 6d137e77a5 nmake build fixes for zipfs (ongoing, zip attachments not done yet) 2018-09-28 18:21:10 +00:00
jan.nijtmans 37b9b4dedc code/doc cleanup 2018-09-28 18:19:04 +00:00
dkf 4ee2aeb33d Small fixes to unix makefile 2018-09-28 13:59:19 +00:00
dkf fd03d49b6f Better phrasing from TIP 509 2018-09-28 09:54:24 +00:00
dkf 29fbee5784 Implement TIP 509: reentrant mutexes on all platforms 2018-09-28 09:50:58 +00:00
dkf eede8c60a1 Clean up code style and add key phrases to documentation. 2018-09-28 09:49:57 +00:00
dkf 9dabbdf40b merge core-8-branch 2018-09-28 09:18:49 +00:00
dkf 2f3fc1cfa2 Fix minor typo 2018-09-28 07:24:59 +00:00
jan.nijtmans 45d39f0444 ckalloc -> Tcl_Alloc 2018-09-27 21:45:01 +00:00
jan.nijtmans a29938f899 Merge trunk 2018-09-27 21:36:45 +00:00
dkf b4ae859604 Batch of TIP implementations. 2018-09-27 18:48:11 +00:00
dkf b1e6b58b6a Implementation of TIP 426: Determining the "Type" of Commands 2018-09-27 11:08:14 +00:00
dkf 6ec7c04557 Restricted the information made available to safe interpreters a bit. 2018-09-27 11:06:59 +00:00
dkf bfdc5233eb merge core-8-branch 2018-09-27 08:24:26 +00:00
dkf 1146932b9e Implementation of TIP 505: Make [lreplace] Accept All Out-of-Range Index Values 2018-09-27 08:22:07 +00:00
dkf 6cdb3193ec Implementation of TIP 505: Make [lreplace] Accept All Out-of-Range Index Values 2018-09-27 08:19:18 +00:00
dkf bf46b6a1da Updated documentation 2018-09-27 07:44:50 +00:00
dkf 00d5f9266b Implementation of TIP 516: More OO Slot Operations and TIP 515: Level Value Reform 2018-09-27 07:25:04 +00:00
dkf efa79f01e6 Implementation of TIP 516: More OO Slot Operations 2018-09-27 07:22:42 +00:00
jan.nijtmans 9f745ab1cd Implementatin of TIP #515: Level Value Reform 2018-09-26 23:43:00 +00:00
dkf f0ab769a7c Implementation of TIP 508: [array default] 2018-09-26 23:17:48 +00:00
jan.nijtmans de5344f487 Merge trunk 2018-09-26 20:09:49 +00:00
jan.nijtmans ea1a9cc17e Merge 8.7 2018-09-26 19:38:44 +00:00
jan.nijtmans 59f808eb7a Improvements for zipfs. Document that TclZipfs_AppHook only works on Windows in UNICODE mode. Also, remove this from the stub table because it should never be called this way.
Prevent a possible crash on win32 startup.
2018-09-26 19:38:08 +00:00
jan.nijtmans f36f29ad95 Bug-fix (actually a workaround): The "registry" extensions sometimes calls Tcl_DStringSetLength() with length -1 or -2. At least, don't let it crash then. 2018-09-26 19:34:56 +00:00
dkf 9aa47b2cfa Improved comment. 2018-09-26 13:09:20 +00:00
dkf 761a7867d5 Make defaults work even when [upvar]ed to just a non-existent element. 2018-09-26 13:08:46 +00:00
dkf 46c087f956 merge core-8-branch 2018-09-26 09:47:14 +00:00
dkf 3b77852126 Fix semantics of [lappend] with defaults in a procedure. 2018-09-26 08:12:34 +00:00
jan.nijtmans f12dda1428 Merge 8.7 2018-09-25 21:18:30 +00:00
jan.nijtmans f0f3d8a55b merge 8.6 2018-09-25 21:18:03 +00:00
jan.nijtmans d5583552c0 Contributed patch from Gustaf Neumann, preventing problems where "localCachePtr" can be NULL 2018-09-25 21:16:32 +00:00
dgp 283e5ff856 merge trunk 2018-09-25 15:05:42 +00:00
dkf b1f92f4888 Added test cases for errors 2018-09-25 10:18:32 +00:00
dkf beac2287a9 Corrected the semantics of [append] with defaults 2018-09-25 07:36:09 +00:00
dkf 7b0e9cef60 More correct variable existence checks 2018-09-25 07:27:31 +00:00
dkf 76e2e078e3 Correct variable existence check in [array default exists] 2018-09-25 07:24:44 +00:00
dkf 036cd8c9be merge core-8-branch 2018-09-25 07:24:04 +00:00
jan.nijtmans 1f6a76bca6 Merge 8.7 2018-09-24 23:33:00 +00:00
jan.nijtmans ac61d77a41 More fixes in Tcl_WinTChar2Utf: Don't restart loop when output contains null-byte. 2018-09-24 23:24:00 +00:00
dgp 50bedec272 merge 8.7 2018-09-24 16:35:06 +00:00
dgp d0fab95780 merge 8.6 2018-09-24 16:19:17 +00:00
dgp 338b9ec9d2 Silence debugging message in test suite. 2018-09-24 16:15:25 +00:00
dkf 4719e1f68d Add tests. Exposes quite a few bugs in the implementation... 2018-09-24 08:21:36 +00:00
dkf be629669a5 Added docs 2018-09-23 17:29:46 +00:00
dkf 8a6dda8529 merge core-8-branch 2018-09-23 16:42:11 +00:00
jan.nijtmans 9865f6dc47 Merge trunk 2018-09-23 14:57:31 +00:00
jan.nijtmans 14d9c80d61 Merge 8.7 2018-09-23 13:30:53 +00:00
jan.nijtmans 243ea5f7a3 Merge 8.6 2018-09-23 13:29:42 +00:00
jan.nijtmans 6d3aeef45e Give lambda function a name "ReceiveChunked" for easier testing. New function quoteString and code cleanup 2018-09-23 13:27:14 +00:00
jan.nijtmans fbdc68b6a2 Handle the (unlikely) case that Tcl_DStringSetLength() results in a re-allocation of the buffer 2018-09-22 16:51:43 +00:00
jan.nijtmans d6a9a5d664 Merge 8.7 2018-09-22 13:24:33 +00:00
jan.nijtmans d298eafcf5 Merge 8.7 2018-09-22 13:19:44 +00:00
jan.nijtmans 9f9a9e291d Change ULLONG_MAX -> UWIDE_MAX, LLONG_MAX -> WIDE_MAX and LLONG_MIN -> WIDE_MIN everywhere, because not all platforms equal Tcl_WideInt type as equal to "long long". This should fix test-cases on platforms where Tcl_WideInt != long long, and have no effect on 'normal' platforms 2018-09-22 13:18:49 +00:00
jan.nijtmans 4ec357c743 merge 8.7 2018-09-22 12:45:29 +00:00
jan.nijtmans b59b81e172 merge-mark 2018-09-22 12:30:39 +00:00
jan.nijtmans 31b9d1f712 Fix a couple of test-cases, since http1.0 is no longer there 2018-09-22 12:29:46 +00:00
jan.nijtmans c0b6ad149e merge 8.7 2018-09-22 12:06:08 +00:00
jan.nijtmans 25ac7e62ba forgot one location for http version number 2018-09-22 12:05:14 +00:00
jan.nijtmans d19917714c merge 8.7 2018-09-22 10:23:56 +00:00
jan.nijtmans 854cf964d2 Merge 8.6 2018-09-22 10:21:36 +00:00
jan.nijtmans 63ef0e3d26 Update http version number, and fix some related test-cases 2018-09-22 10:20:28 +00:00
jan.nijtmans df89a7f211 Prevent possible build order problem, due to missing dde/registry dll's.
Make sure that Tcl_WinTChar2Utf() never produces intermediate null-bytes.
2018-09-22 10:09:23 +00:00
dkf d025ae5c08 merge core-8-branch 2018-09-21 09:29:24 +00:00
kjnash 39318d91b7 merge bug-46b6edad51-concurrent-http 2018-09-20 13:41:13 +00:00
kjnash d24a3eb2ba merge 8.6 2018-09-15 18:41:23 +00:00
jan.nijtmans 69eafefa76 merge trunk 2018-09-13 20:52:48 +00:00
jan.nijtmans 73e0989e22 merge 8.7 2018-09-13 20:52:12 +00:00
jan.nijtmans bd42171094 missing type-cast 2018-09-13 20:37:44 +00:00
jan.nijtmans c5943ec574 Eliminate the use of macro's like LLONG_MAX|MIN, since they assume that Tcl_WideInt equals "long long". Also eliminate uses of Tcl_WideAsLong() and friends, as - often - simple type cases make things more clear. 2018-09-13 20:33:58 +00:00
jan.nijtmans f11320b6b0 Fix various test-cases, which started failing on Windows due to TIP #430 2018-09-13 20:31:45 +00:00
jan.nijtmans 1775284940 Fix test-case registry-6.20, which started failing starting with the TIP #389 commit. 2018-09-13 20:30:20 +00:00
jan.nijtmans 2154b6c5ba Merge trunk 2018-09-12 20:00:56 +00:00
jan.nijtmans 004ac14973 compensate for the removal of the http1.0 directory 2018-09-12 19:44:15 +00:00
jan.nijtmans 4abfb9ea2c Merge 8.7 (TIP #430 implementation) 2018-09-12 19:34:16 +00:00
jan.nijtmans 3200ec75ef Stub fix, safe interpreter fix, and use more size_t wherever possible 2018-09-12 19:32:31 +00:00
jan.nijtmans 9b45aaa5b0 TIP #430 implementation 2018-09-12 19:30:00 +00:00
jan.nijtmans 1a3cef4874 Make ready for TIP #494 compatibility 2018-09-11 22:41:00 +00:00
dkf 90e3bdc291 Simplify the slot resolution protocol 2018-09-11 07:44:04 +00:00
dgp cdce5491b3 Rebase TIP 505 implementation a patch for 8.6. 2018-09-10 15:28:23 +00:00
dkf 4f17861678 Tests and docs 2018-09-10 08:33:11 +00:00
jan.nijtmans 0babbf966b slightly better: Use GetFileSizeEx() on win64 and GetFileSize on win32 2018-09-09 17:05:38 +00:00
jan.nijtmans a35eba4ac2 Merge core-8-branch 2018-09-08 21:18:57 +00:00
dkf 0d73b8a7c0 Implementation of TIP 516 2018-09-08 12:52:06 +00:00
jan.nijtmans 6e39ca4071 Merge 8.7 2018-09-07 22:27:00 +00:00
jan.nijtmans 945b10776d Merge 8.6 2018-09-07 22:23:00 +00:00
jan.nijtmans c828e5de43 merge trunk 2018-09-07 22:09:00 +00:00
sebres 9a15a1b586 small code review (duplicate code removed) 2018-09-07 14:24:49 +00:00
dgp 58b8920b8f merge 8.7 2018-09-07 12:11:45 +00:00
dgp 4b7caf2e4a merge 8.6 2018-09-07 12:11:01 +00:00
dgp 95db69f27b Added test for [631b4c45df]. 2018-09-07 12:04:32 +00:00
sebres 737e63d3bc merge 8.7 (segfault fix) 2018-09-07 12:04:07 +00:00
sebres e94df65350 merge 8.6 (segfault fix) 2018-09-07 12:02:25 +00:00
jan.nijtmans b8d2426e1b Use GetFileSizeEx() in stead of GetFileSize(), to get the file size on Windows.
Minor improvement: attach empty .zip file to tclsh.exe (both for Windows and UNIX), zo "zip -A" can be used to modify its zip contents.
2018-09-07 11:56:40 +00:00
sebres e80eaec4d3 amend to [e8ab4d85fa], proc.test: extended with new test-case to cover situation like [631b4c45df] 2018-09-07 11:55:01 +00:00
sebres b9577c0641 closes [631b4c45df]: segfault by usage of wrong length (no string representation) 2018-09-07 10:45:30 +00:00
jan.nijtmans 833b02bc83 TIP #515 implementation: Level Value Reform 2018-09-07 09:53:17 +00:00
jan.nijtmans 6269e32c3b Bug-fix: Move TclZipfs_AppHook() from 0 -> 2 in the stub table, otherwise it overrides the entry for Tcl_MacOSXOpenBundleResources (since MacOSX is UNIX as well...). 2018-09-06 11:25:41 +00:00
jan.nijtmans 3e7ffcaf4b Code review 2018-09-06 09:47:30 +00:00
jan.nijtmans 21113a4394 Merge trunk. Also rename TCL_NO_LENGTH -> TCL_AUTO_LENGTH 2018-09-05 14:54:26 +00:00
jan.nijtmans 1f6ac7f87e Merge 8.7.
Change some internal function signatures, accounting for the 64-bit era.
2018-09-05 13:45:15 +00:00
jan.nijtmans 5c9968a001 Minor code cleanup.
win/tclWinPipe.c: Eliminate some compiler warnings on mingw-w64
win/tclWinNotify.c: Eliminate tsdPtr->timeout variable, since it's only being written to.
other files: code cleanup, eliminate unnecessary type casts
2018-09-05 12:11:13 +00:00
dkf fbef9aa840 merge core-8-branch 2018-09-04 19:47:55 +00:00
jan.nijtmans 2562ea174b Merge 8.7 2018-09-04 14:37:43 +00:00
jan.nijtmans fdf1df3b29 Fix [540bed4bde]: binary format can result in "integer value too large to represent".
Implemented a new utility function TclGetWideBitsFromObj(), which handles the overflowing of integers using bignums. 
This function can be used in a _LOT_ of other places, preventing code duplication. Done that as well.
Those changes have no effect on other commands, only two new "binary format" test-cases for this specific situation: binary-44.5 and binary-44.6
2018-09-04 14:37:01 +00:00
jan.nijtmans 3250944e1f merge 8.7 2018-09-03 12:54:42 +00:00
jan.nijtmans 2f2b7f6ac7 Eliminate use of wideBiggerThanInt test constraint, since it's the same as {longIs32bit wideIs64bit}. And ... it's name is actually wrong ...
Don't use int() any more in any test constraint, since it's semantics might change. We don't want the test constraints to change with it. (See: TIP# 514)
Simplify implementation of wideIs64bit test constraint, just testing for 64-bit sign bit is enough.
2018-09-03 12:53:15 +00:00
dkf 6b9510ca19 Implement TIP 478: Add Expected Class Level Behaviors to oo::class 2018-09-02 13:48:56 +00:00
dkf 5f1bd2f2e3 Implement TIP 478: Add Expected Class Level Behaviors to oo::class 2018-09-02 13:48:22 +00:00
jan.nijtmans ba417d3ce6 Change ckalloc and friends to Tcl_Alloc and friends. Add two defines, TCL_IO_FAILURE and TCL_NO_LENGTH (experimental, still open to be renamed following discussion) 2018-09-01 22:01:35 +00:00
sebres 195f90c951 merge 8.7 2018-08-30 11:16:07 +00:00
sebres 0787b1d152 merge 8.6 2018-08-30 11:14:15 +00:00
sebres cb9f3f9268 merge 8.5 2018-08-30 11:13:09 +00:00
sebres 6d88b01d1e test-cases to cover quoting of the newline character, and the documentation extended. 2018-08-30 11:08:51 +00:00
jan.nijtmans e663097026 Minor code cleanup 2018-08-29 18:33:58 +00:00
jan.nijtmans 2c081dcd0c merge trunk 2018-08-29 18:07:14 +00:00
sebres ce1c1edacb merge 8.7 2018-08-29 17:02:13 +00:00
sebres 6dfe3f5de6 merge 8.6 2018-08-29 17:01:22 +00:00
sebres 77a26f5c95 merge 8.5 2018-08-29 16:59:10 +00:00
sebres 9cec6bac27 tcltest: forgotten built-in constraint "slowTest" 2018-08-29 16:58:06 +00:00
sebres 2f19b0f346 small amend to [cae24931ed] (no _CRT_glob in both cases __GNUC__ || TCL_BROKEN_MAINARGS). 2018-08-29 16:55:36 +00:00
sebres 265c9d416f partially cherry-picking of [5099a81b50], never reached 8.6, so for example build for MINGW breaks tests winpipe-8.1 etc, because "*" will be expanded. 2018-08-29 15:55:13 +00:00
sebres db610f91eb code review after merge with 8.5 (restore usage of some functions, after lost by conflict resolving) 2018-08-29 15:49:19 +00:00
sebres afb5bf5583 merge 8.5 ([21b0629c81] 0-day vulnerability - insufficient escape by exec of batch-files for windows) 2018-08-29 15:41:55 +00:00
sebres 9b7ce068fe closes [21b0629c81] 0-day vulnerability - insufficient escape by exec of batch-files for windows 2018-08-29 14:45:57 +00:00
jan.nijtmans 8623f173db Eliminate static function AddObjErrorInfo, which is only used once 2018-08-28 20:30:42 +00:00
jan.nijtmans e754f7aad1 merge core-8-branch 2018-08-28 18:59:25 +00:00
dkf d4d1014e7d merge core-8-branch 2018-08-26 11:07:37 +00:00
sebres 820a737a2f code review, skip slow test winpipe-8.2 executed args from injectList particularly (normally winpipe-8.3 covers the same but jointly), to enable use parameter -constraints slowTest, added new test with randomly generated potentially dangerous args 2018-08-23 10:26:03 +00:00
sebres c2d61d8dbc code review, restored backwards compatibility of the simplest escape of quote-chars (so reverted several tests winpipe-7.x) 2018-08-23 08:00:32 +00:00
sebres fb0bf9d1b9 fixes escape for special cases (+ more test-cases):
- `%` char to be escaped (quoted) in any case (regardless pairing flag), otherwise `%username%` will be interpolated as username.
- escape of multiple backslashes before quote is different (as without following quote) in unpaired quote syntax (upaired flag set)
2018-08-21 18:52:21 +00:00
sebres 01dd016ad8 because executable (1st argument) always proper escaped now, don't need to replace long path name of batch-executable with short path name (reduced to 16-bit applications only). 2018-08-20 19:58:44 +00:00
sebres d660b325b5 small amend: avoid reset of unpaired quote flag between arguments (previous affects next) + test cases extended with several injection checks. 2018-08-20 16:15:37 +00:00
sebres 26b477b907 win: fixes [21b0629c81] - exec/open process pipe under windows (0-day vulnerability - insufficient escape) 2018-08-20 14:35:44 +00:00
jan.nijtmans 89ff80fbdd merge-mark 2018-08-19 09:16:30 +00:00
jan.nijtmans b3993adcfb Merge 8.6 2018-08-17 22:21:12 +00:00
jan.nijtmans 90afac281e Minor fix to entier(): Allow it to convert to "wideInt" as well when range is appropriate 2018-08-17 22:15:49 +00:00
sebres aed158b518 win: TclpCreateProcess or [exec process ...] - search for application extended with ".cmd" extension:
automatically tries appending ".com", ".exe", ".bat" and ".cmd", in that order, to the name, looking for an executable.
(partially cherry-picked from 8.6 branch)
2018-08-17 18:26:10 +00:00
hypnotoad 9b285dde85 Merging changes with 8.7 2018-08-14 08:46:22 +00:00
pooryorick e5270637c0 Reposition the MODULE_SCOPE definition so that packages like tbcload don't get
an error when they include tclPort.h.
2018-08-14 05:43:17 +00:00
jan.nijtmans b880f036f9 merge trunk 2018-08-11 22:02:14 +00:00
dkf f5efc84600 Added a note about the genesis of the compiled header. 2018-08-11 12:01:06 +00:00
dkf 245151ad96 Improve script compilation. Prove that compilation works with safe interps. 2018-08-11 11:18:20 +00:00
pooryorick 65f3d0f56b Repair breakage in recent refactoring of env.test. 2018-08-10 18:57:53 +00:00
pooryorick 18c102aa70 minor changes to documentation 2018-08-10 18:44:41 +00:00
pooryorick e53f3cf9c6 Tighten up SaveResult.3, make installManPage more robust against newlines. 2018-08-10 15:03:14 +00:00
dgp 6c78bf0adc Repair breakage in recent refactoring of env.test 2018-08-08 20:48:06 +00:00
jan.nijtmans 62c8a18cdc Merge 8.7 2018-08-08 06:52:48 +00:00
jan.nijtmans 12647cc4fb Merge 8.6 2018-08-08 06:46:31 +00:00
jan.nijtmans 8346cad0dd Fix harmless gcc warning 2018-08-08 06:45:29 +00:00
jan.nijtmans 8ec7000cfd Merge 8.7 2018-08-07 08:23:27 +00:00
jan.nijtmans 620b4d531d merge 8.6 (test cases fix in ioTrans) 2018-08-07 08:22:28 +00:00
dkf ed3e9c60ba Combine the two bits of scripted code inside TclOO's definition into one. 2018-08-05 20:14:04 +00:00
dkf d87884d51b Make it much easier to maintain the TclOO initialisation script. 2018-08-05 15:01:30 +00:00
sebres de5637f853 ioTrans.test: fixed cleanup - avoids error deleting "tempchanfile": permission denied: file seems to be locked/opened inside interp $idb 2018-08-03 13:46:30 +00:00
jan.nijtmans 1bc2496e01 Merge 8.7 2018-08-02 23:08:00 +00:00
jan.nijtmans 40947c7d3e Purge end-of-line spacing 2018-08-02 22:37:00 +00:00
jan.nijtmans c3cec2c712 Merge trunk. Use TCL_8_COMPAT in stead of TCL_USE_INT_RETURN 2018-08-02 07:35:28 +00:00
jan.nijtmans 6042bb0be1 merge 8.7 2018-07-31 20:36:29 +00:00
jan.nijtmans cff4a9d980 merge 8.6 2018-07-31 20:22:18 +00:00
jan.nijtmans c1ae69114b Remove some actually dead code 2018-07-31 19:49:51 +00:00
jan.nijtmans 485410de9b merge trunk 2018-07-30 19:00:29 +00:00
sebres e68dfbc8af merge 8.7 2018-07-26 19:10:41 +00:00
sebres ad757b50dc merge 8.6: bug [d051b77fc1] fixed 2018-07-26 18:58:03 +00:00
sebres 5902889825 amend after merge: 8.6th provide additionally an error-code (so missing errCode = "OVERFLOW") 2018-07-26 18:56:41 +00:00
sebres 04c687936c merge 8.5 - bug [d051b77fc1] fixed 2018-07-26 18:51:03 +00:00
sebres 304b569170 merge test cases from 8.6 2018-07-26 18:15:17 +00:00
sebres 2133e40e58 amend to [d498578df4], still one test for [Bug ba921a8d98] with inplace by subst inside string (compiled as "strcat" instruction) 2018-07-26 18:07:34 +00:00
sebres c7cdc550c4 test cases added to cover width overflow by format (should cause limit exceeded) 2018-07-26 16:46:47 +00:00
dgp 7633450128 [ba921a8d98] Make sure [string cat] includes all data from all bytearrays. 2018-07-26 16:14:44 +00:00
sebres 7e727bed70 closes [d051b77fc18d7340]: fixed segfault by integer overflow (if width by format like "%4000000000g" overflows to negative values by scan of length) 2018-07-26 15:57:38 +00:00
dgp 164a7f04c0 New test for [Bug ba921a8d98]. 2018-07-26 15:51:28 +00:00
Kevin B Kenny 54fbd7dbcb Resolve inadvertent fork 2018-07-25 01:43:43 +00:00
pooryorick 772d2da10b Fix for [ba921a8d98e02a96] - concatenating binary array with empty string yields the empty string. 2018-07-22 20:44:16 +00:00
Kevin B Kenny 5c0692322d Merge 8.7: Add a note in the 'clock' man page about the interpretation of impossible values on [clock scan] 2018-07-21 18:46:08 +00:00
Kevin B Kenny 0ae1df9bfc Merge 8.6: Add a note in the 'clock' man page about the interpretation of impossible values on [clock scan] 2018-07-21 18:45:41 +00:00
Kevin B Kenny 814c867db4 Add a note in the 'clock' man page about the interpretation of impossible values on [clock scan] 2018-07-21 18:45:09 +00:00
sebres 0704a6f87b merge 8.7 2018-07-20 16:07:43 +00:00
sebres 6667ddcb54 merge 8.6 2018-07-20 16:05:48 +00:00
sebres d00a212e82 win: avoids warning by x64-build in function 'TclWinCPUID' - pointer targets in passing argument 1 of '__cpuid' differ in signedness [-Wpointer-sign] (int* vs unsigned int*) 2018-07-20 15:58:56 +00:00
sebres 7fb72851e8 win: fixes x64-build within gcc-compile runtime env for (mingw64, etc): "$do64bit" may be "amd64|x64|yes", so it could find & copy wrong zlib.dll. 2018-07-20 15:54:11 +00:00
andy 45f814fec7 Minor documentation wording change to clean up an awkward construct 2018-07-18 03:34:14 +00:00
sebres 4a3f32b84a win: fixed test-cases (see [525ccacaef]) running under windows outside of temp-folder 2018-07-16 13:59:29 +00:00
dkf 77aceb5c5f Added more tests and made [initialize] an alternate spelling for [initialise]. 2018-07-15 15:46:33 +00:00
sebres 7547e67f40 merge 8.7 2018-07-12 15:32:34 +00:00
sebres 8a7c004dbc merge 8.6 2018-07-12 15:31:27 +00:00
sebres a1790a1683 merge 8.5 2018-07-12 14:25:09 +00:00
sebres 885a163b3c win: closes [3f7af0e21e13f1f5] - avoid "permissions denied" by file delete, if file stat (TclpObjStat) used internally in other worker, for example by usage of file mkdir etc. 2018-07-12 14:17:57 +00:00
jan.nijtmans ec3c18e54e Remove 4 unneeded compatibility macro's, because those functions never return -1 anyway.
Change documentation to use void * in stead of ClientData
2018-07-10 19:18:17 +00:00
sebres 40e253fe8a merge 8.7 (merge point only after cherry-pick, no functional changes) 2018-07-10 08:20:40 +00:00
sebres 87e508c590 amend to [1830f9f520e2abdd], fixed package.test if built without test - avoids test file error: package "Tcltest" isn't loaded statically 2018-07-10 08:19:08 +00:00
sebres 142fa0ec7c amend to [1830f9f520e2abdd], fixed package.test if built without test - avoids test file error: package "Tcltest" isn't loaded statically 2018-07-09 19:24:07 +00:00
sebres 10c6cd5a2c merge 8.7 2018-07-09 19:09:17 +00:00
sebres a76637248c merge 8.6 2018-07-09 19:03:38 +00:00
sebres 2a46a48670 merge 8.5 2018-07-09 18:15:34 +00:00
jan.nijtmans 9a9c228341 typo in compatibility macro (discovered by compiling Tk) 2018-07-09 18:06:40 +00:00
sebres 51aecf205d closes [270f78ca95b642fb]: fix the race condition for file mkdir if some worker deletes directory immediately after the succeded create inside 3rd worker. 2018-07-09 17:18:07 +00:00
jan.nijtmans 5f1c7cb11e Don't mark ckalloc and friends as deprecate yet, Tk is still heavily using it 2018-07-09 16:12:31 +00:00
jan.nijtmans 2b4ed03502 Experimental Tcl-8 compatibility macro's. Still to be tested. 2018-07-07 22:39:55 +00:00
jan.nijtmans 20b21aaa69 Fix build on MacOSX 2018-07-07 20:11:05 +00:00
dkf d0f8889c8f And another test 2018-07-07 08:57:49 +00:00
dkf 27110774bd Added direct tests for [myclass] 2018-07-07 08:45:00 +00:00
dkf 5a06fd4bcf Document the [myclass] command; someone might find it useful besides me. 2018-07-07 08:22:13 +00:00
jan.nijtmans d4a30d2344 remaining external API. Looks like complete now. Milestone! Still more testing needed 2018-07-06 21:36:40 +00:00
jan.nijtmans 7f445021a0 more progress 2018-07-06 19:53:03 +00:00
dkf 969f9f571c Improving the singleton 2018-07-06 13:50:54 +00:00
jan.nijtmans 04e4629c9f Merge trunk
Handle TclCopyAndCollapse, *Trace* et al
2018-07-05 21:25:40 +00:00
jan.nijtmans f74cbbd446 Merge 8.7. Also remove some more unneeded #undef's. 2018-07-05 19:50:49 +00:00
jan.nijtmans 64cbe6e187 Merge 8.6. Also remove a useless #undef/#define which will be overrided later. 2018-07-05 19:46:24 +00:00
jan.nijtmans 367ce9ad48 tclDictObj.c:366: warning: dereferencing type-punned pointer will break strict-aliasing rules
Prevent this warning, which gcc 4.4 (a.o.) gives on this construct. void pointers work well already in whatever assignment.
2018-07-05 19:39:19 +00:00
jan.nijtmans 83fd58165e merge trunk 2018-07-04 21:11:12 +00:00
jan.nijtmans b4d2fffb28 Merge 8.7 2018-07-04 20:56:37 +00:00
jan.nijtmans 6982ae0ca7 Make Tcl_GetUnicode() a macro. Mark many other stub-entries which are no longer are in use (because they were converted to macros) as deprecated, since they will be removed in Tcl 9.0 2018-07-04 20:20:28 +00:00
jan.nijtmans da7eafc83b Micro-optimization in Tcl_GetString() and Tcl_GetStringFromObj() 2018-07-04 20:18:39 +00:00
jan.nijtmans 572883ec08 More size_t API changes (*.decls files are complete now) 2018-07-03 19:24:45 +00:00
andy 535266afa3 Remove stray verbiage from man page 2018-07-03 04:56:43 +00:00
stu cf5a680373 Some tools are executable. 2018-07-03 04:02:23 +00:00
stu 4a0e6ae460 Use INSTALL_*/DIST_INSTALL_* macros to make dist. 2018-07-03 00:45:52 +00:00
jan.nijtmans 79f1d89388 Use size_t in more API's, e.g. *RegExp* types 2018-07-02 19:39:34 +00:00
dkf 414bcee273 Documentation for [classmethod] 2018-07-02 07:44:09 +00:00
dkf d11660acfe Create a special command, [ :my:class], (in each instance namespace) that allows objects to delegate methods to their class. 2018-07-01 16:39:11 +00:00
jan.nijtmans b8e604ca08 New macro TclGetByteArrayFromObj() which can handle size_t 2018-07-01 10:31:07 +00:00
jan.nijtmans 77ba009f38 New macro TclGetUnicodeFromObj() which can handle size_t 2018-07-01 09:11:19 +00:00
jan.nijtmans 3dc03bc4ac Starting to update all callers of TclGetStringFromObj() to use size_t variables 2018-07-01 06:21:55 +00:00
dkf 5c7ba37901 More docs 2018-06-30 21:36:01 +00:00
dkf 1d1e95e779 More docs 2018-06-30 18:30:53 +00:00
dkf bffb982059 More docs 2018-06-30 13:44:25 +00:00
dkf 0978bd50ce Started to write documentation 2018-06-30 05:13:39 +00:00
jan.nijtmans 94741577ee Another round of size_t'isms, this time also for Tcl_DString 2018-06-29 20:28:54 +00:00
jan.nijtmans 709f9278ff Improve many parsing-related functions to use size_t 2018-06-29 18:13:10 +00:00
dkf 3f8c7d5d40 More test cases. More fixes. 2018-06-29 07:15:06 +00:00
jan.nijtmans 5248fb0651 More API changes using size_t. Internal changes not complete yet (WIP) 2018-06-28 21:42:54 +00:00
jan.nijtmans 9478033661 More using TCL_Z_MODIFIER where possible 2018-06-28 20:30:24 +00:00
dkf 4c24e60418 Split out TIP 478 tests into their own file. 2018-06-28 10:40:37 +00:00
dkf 8219fb2632 Tests for abstract and singleton 2018-06-28 08:12:07 +00:00
jan.nijtmans 66ec3cd3a6 merge trunk 2018-06-27 19:09:01 +00:00
dkf 082e8c6d7a Add better error handling and make the delegation work with cloning. 2018-06-27 07:39:49 +00:00
jan.nijtmans 7cb7a44074 merge 8.7 2018-06-26 19:46:07 +00:00
jan.nijtmans 7a9d97826e Since Tcl is always compiled with -DUNICODE -D_UNICODE (on Windows) and we know TCL_UTF_MAX>=4, we can simplify things. No change in functionality. 2018-06-26 19:45:22 +00:00
dgp 41a740e30c merge 8.7 2018-06-26 17:18:10 +00:00
dgp 9683822257 merge 8.6 2018-06-26 17:07:02 +00:00
dgp 9da2aebeae Use a thread exit handler, and not a custom exit proc for package cleanup. 2018-06-26 17:00:29 +00:00
dgp 868f84d487 merge 8.7 2018-06-26 14:23:58 +00:00
dgp bf884c9bc9 merge 8.6 2018-06-26 14:23:22 +00:00
dgp ed5ed756bc Restore lost tests. 2018-06-26 14:22:08 +00:00
jan.nijtmans 3c26b9439d merge 8.7 2018-06-25 20:39:31 +00:00
jan.nijtmans fdee46ab16 merge 8.6 2018-06-25 20:38:16 +00:00
jan.nijtmans 0839047d8b Simplify ToUtf(), expecially for TCL_UTF_MAX>3 (with correct surrogate handling).
Fix various typo's
2018-06-25 07:22:19 +00:00
jan.nijtmans 6264f49788 Merge 8.7 2018-06-24 20:27:19 +00:00
jan.nijtmans 94f9cf81ed Fix "string tolower" and friends for handling unpaired surrogates correctly. Also add test-cases for those situations.
Various typo's in comments.
2018-06-24 20:26:27 +00:00
pooryorick e2a79c2604 Fix for [3592747]: Let TclNRTailcallEval handle namespace problems. 2018-06-24 07:17:46 +00:00
dkf 05209c57d3 Make the delegates work by moving their creation into C. 2018-06-23 15:03:26 +00:00
pooryorick 6cbfdcc4a3 Add a test for no generation of a string representation when comparing with the
empty string.
2018-06-23 14:18:06 +00:00
pooryorick 94ec3d9431 Add another suppress rule for valgrind, factor test code into
tests/tcltests.tcl, and constrained a some tests in the valgrind case.
2018-06-22 15:10:04 +00:00
pooryorick 6c1e9f2b0c merge pyk-tcltest-exit 2018-06-21 22:44:04 +00:00
pooryorick 563bd6e4dd Fix function signature of TclThreadTestFinalize. 2018-06-21 22:43:18 +00:00
pooryorick b418ff1759 merge pyk-tcltest-exit 2018-06-21 22:23:04 +00:00
pooryorick 56ca35e8a9 Add custom exit procedure for tcltests executable. 2018-06-21 22:21:31 +00:00
pooryorick 107fb1eb33 Suppress more valgrind "still reachable" reports and ensure that threads are
fully finalized in thread tests.
2018-06-21 22:16:29 +00:00
pooryorick c911dc937f Add valgrind suppression for dlopen and ensure that processes are reaped in
http11.test.
2018-06-20 19:06:40 +00:00
pooryorick 645241afc1 Remove recent auto_path modification in tests/all.tcl and suppress more
valgrind reports.
2018-06-20 08:03:22 +00:00
pooryorick 03a3c09b1f new file: tools/valgrind_suppress. num-callers bumped from 8 to 24. Valgrind
now issues no "still reachable" reports for cmdAH.test.
2018-06-19 11:47:08 +00:00
jan.nijtmans 5c87050dd8 Merge 8.6. And add more documentation and test-cases regarding the behavior of Tcl_UniCharToUtf() 2018-06-18 15:59:19 +00:00
jan.nijtmans 3c57d80efe Fix [53cad613d8]: TIP 389 implementation makes Tk tests font-4.12 and font-4.15 fail. One more situation in which high surrogate causes problem 2018-06-18 15:54:38 +00:00
jan.nijtmans 04004f3abc Unbreak build on Windows (and - most likely - some other platforms too) 2018-06-18 15:51:43 +00:00
pooryorick 155e8a1ad5 Avoid valgrind "still reachable" reports stemming from early termination of
threads.
2018-06-18 08:09:32 +00:00
pooryorick 625aca976a Full cleanup of env cache when in a PURIFY build. 2018-06-18 07:06:04 +00:00
pooryorick e9c0ec1219 Plug leak in TclSetEnv. 2018-06-18 05:59:22 +00:00
dkf 8e696a5e5d Leaving out the weird delegates stops the test failures. 2018-06-17 17:27:41 +00:00
dkf 9e511d7874 Most of the implementation ported over. [classmethod] is trickier... 2018-06-17 16:47:45 +00:00
jan.nijtmans 9d19f3532c merge 8.7 2018-06-17 16:13:54 +00:00
jan.nijtmans 5af99f55b2 merge 8.6 2018-06-17 16:11:50 +00:00
jan.nijtmans 8047a470ef Fix [53cad613d8a4de166e680f09a6c6399ebddbc17c|53cad613d8]: TIP 389 implementation makes Tk tests font-4.12 and font-4.15 fail. (Fix it in 8.6 too, for benefit of androwish) 2018-06-17 16:07:09 +00:00
dkf 1f91c778bb Split scripted parts of TclOO into their own file. 2018-06-17 15:42:58 +00:00
pooryorick 2b739c838a Remove dependencies between tests in env.test. 2018-06-17 08:47:29 +00:00
pooryorick dd713ee96e Add tests/tcltests.tcl as a place to store common code for tests. 2018-06-16 22:57:36 +00:00
pooryorick 983854ad7b Add tests/tcltests.tcl as a place to store common code for tests. 2018-06-16 22:56:07 +00:00
dkf ffd6cad4d9 Add in basic github meta-files to reduce problems with issues being filed where we don't see them. 2018-06-16 18:08:51 +00:00
dkf 7bf68c2335 Add in basic github meta-files to reduce problems with issues being filed where we don't see them. 2018-06-16 18:07:30 +00:00
pooryorick 41a6159754 new package
tcltests
exclude some exec.test tests when running under valgrind
2018-06-16 17:55:31 +00:00
jan.nijtmans c44181ecaf Change signature of Tcl_GetRange() to use size_t. Merge trunk. 2018-06-16 12:32:49 +00:00
jan.nijtmans 824f621875 merge 8.7 2018-06-15 18:40:46 +00:00
jan.nijtmans c9802b0230 merge 8.6 2018-06-15 18:37:45 +00:00
jan.nijtmans df97278634 merge 8.5 2018-06-15 18:35:56 +00:00
jan.nijtmans 06fc5fb636 Align common install locations in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG. Add FreeBSD (closes [d6d60efd35]) and OpenBSD 8.5 paths 2018-06-15 18:31:24 +00:00
pooryorick 15f804e04e new package
tcltests
exclude some exec.test tests when running under valgrind
2018-06-15 13:17:17 +00:00
stu ab3286e299 Align common install locations in SC_PATH_TCLCONFIG and SC_PATH_TKCONFIG.
Add FreeBSD (closes [d6d60efd35]) and OpenBSD 8.6 paths.
2018-06-15 10:24:06 +00:00
jan.nijtmans 14994d8a85 Merge trunk. Some more size_t additions in parameters/fields 2018-06-14 18:31:24 +00:00
dgp 919ec44584 merge 8.7 2018-06-13 16:58:38 +00:00
stu eccaf23657 Don't call getsockname(2) in Tcl_MakeFileChannel(3) unless absolutely necessary.
Closes RFE [0ac9d06895].
Permits better constraining of Tcl/tclsh via OpenBSD's pledge(2) or similar mechanisms.
2018-06-13 16:15:27 +00:00
dgp e5de25734f merge 8.6 2018-06-13 16:12:54 +00:00
dgp e393000b1d merge 8.5 2018-06-13 16:06:38 +00:00
dgp 83d92bd747 Stop creating a stray child process. 2018-06-13 15:59:15 +00:00
pooryorick 33b8401436 Avoid valgrind "still reachable" reports stemming from early termination of
threads.
2018-06-13 10:49:25 +00:00
hypnotoad d62033b7e2 Adding typecasts in tclZipfs.c to eliminate a compiler warning 2018-06-12 19:32:03 +00:00
dgp 1b3a0a73ae Remove AbsolutePath(), no longer used. 2018-06-12 19:16:38 +00:00
dgp 9e3e0498e7 merge 8.7 2018-06-12 19:14:47 +00:00
dgp 0d36d5f3d8 merge 8.7 2018-06-12 18:03:09 +00:00
dgp a54459bed6 close fork 2018-06-12 18:02:24 +00:00
dgp d8264cbb73 merge 8.7 2018-06-12 17:54:09 +00:00
dgp b5e61d9f54 merge 8.6 2018-06-12 17:53:43 +00:00
dgp 5a05e0d782 merge 8.5 2018-06-12 17:53:19 +00:00
dgp 9c8f784329 [860a9f1945] Remove test safe-8.8; Mac OS 9 tests are no longer useful. 2018-06-12 17:10:03 +00:00
fbonnet 7fe9e1b90c Removed thread-specific mutex lock counter and replaced by shared counter + thread ID for systems without PTHREAD_MUTEX_RECURSIVE 2018-06-09 17:20:15 +00:00
jan.nijtmans bae4992913 merge-mark (Unicode 11.0 beta was already here, and there were not changed in the final version) 2018-06-09 07:45:45 +00:00
jan.nijtmans 1efbaebb6a Merge 8.5 (= update Unicode data to Unicode version 11.0) 2018-06-09 07:44:33 +00:00
jan.nijtmans ac47e6953d Update all Unicode tables to Unicode version 11.0 2018-06-09 07:42:42 +00:00
jan.nijtmans 400feb302b Update to latest tzdata (backported from 8.6) 2018-06-09 07:41:47 +00:00
sebres 9c9b3d93f9 merge 8.5 (empty merge point, no functional changes, because does not affect 8.6) 2018-06-08 13:02:59 +00:00
sebres 04d1270786 resolves some warnings by compiling with new gcc-versions (>= 7.x):
- '*' in boolean context, suggest '&&' instead [-Wint-in-bool-context]
  - passing argument 1 of 'Tcl_CreateExitHandler' from incompatible pointer type [-Wincompatible-pointer-types]
2018-06-08 12:50:43 +00:00
jan.nijtmans 57409ec3f0 merge 8.7 2018-06-08 07:00:39 +00:00
jan.nijtmans f8b9cb869d re-generate configure script (where does --runstatedir come from? 2018-06-08 06:56:33 +00:00
pooryorick 4755be8f41 Give tests more time to finish since valgrind slows things down considerably. 2018-06-07 20:59:27 +00:00
pooryorick 30a0e246b6 Give tests more time to finish since valgrind slows things down considerably. 2018-06-07 18:19:15 +00:00
sebres c2e16d9b1f amend to [eeefdb44cf]: fixes missing install path (closes [593aa7c421]) for mingw/*nix 2018-06-05 21:59:09 +00:00
sebres c2634b8813 merge 8.7 2018-06-05 09:12:35 +00:00
sebres 3b14a4b0ed re-autoconfigure with v.2.69 2018-06-05 09:10:56 +00:00
sebres a3fdad2b4f merge 8.6 2018-06-05 09:04:08 +00:00
sebres b89a3efc56 merge 8.5 2018-06-04 13:52:19 +00:00
sebres 240e6b50d2 fixes [92564326a9] if compiled on some x86 systems (with dirent64 but without DIR64, partially cherry-picked from https://www.androwish.org/index.html/info/6119b8ac2aee8411). 2018-06-04 13:49:38 +00:00
dgp 38be8d3de6 merge 8.7 2018-06-04 13:17:58 +00:00
dkf accd885c10 TIP 500: Private Methods and Variables in TclOO 2018-06-03 13:18:11 +00:00
dkf ddd37fb237 TIP 500: Private Methods and Variables in TclOO 2018-06-03 11:44:19 +00:00
dkf 63be474164 merge core-8-branch 2018-06-02 14:19:33 +00:00
kjnash 754bb107b4 Bugfix - always cleanup persistent socket. 2018-06-01 18:34:07 +00:00
dgp fa47c96ac2 merge 8.7 2018-05-31 19:23:15 +00:00
jan.nijtmans e4c4396db2 merge 8.7 2018-05-31 07:18:06 +00:00
jan.nijtmans 5e3ca11761 Neither use --disable-threads on MacOS builds, and don't mention it any more in the README 2018-05-31 07:17:23 +00:00
dkf 6ab540f5ff Tweaking the documentation 2018-05-30 09:38:48 +00:00
jan.nijtmans 76ffa2482f Merge 8.7 2018-05-30 07:15:56 +00:00
jan.nijtmans 63b0fef31a No longer pass "--enable-threads" to battery-included sub-packages, since it's the default, even when Tcl is built without threads, now. This opens the way (in the future) to remove this option from the sub-packages 2018-05-30 07:15:13 +00:00
jan.nijtmans ba6f0054c4 merge 8.7 2018-05-29 07:42:40 +00:00
jan.nijtmans bb503004b6 merge 8.6 2018-05-29 07:23:51 +00:00
jan.nijtmans 267cdaec03 One TCL_NORETURN -> TCL_NORETURN1 minor mistake. Make it build when Tcl_SetPanicProc is a macro (normally it isn't) 2018-05-29 07:23:05 +00:00
sebres a2ce3dab9b merge 8.5 2018-05-28 13:17:18 +00:00
sebres 6a4d06759e win: searching for FQDN in user-name should be utf-8 safe (user-name could contain non-ascii utf-8 chars) 2018-05-28 13:13:39 +00:00
sebres 6966f0a2b1 merge 8.5 (conflicts resolved, rewritten without winapi-stubs) 2018-05-28 12:26:20 +00:00
sebres 89a84af271 merge-integrate sebres-bug-9e6b569963-8-5-branch to 8.5 2018-05-28 12:05:15 +00:00
jan.nijtmans f2ec60553a merge 8.7 2018-05-27 16:32:05 +00:00
jan.nijtmans 9ae8deb0b4 merge 8.7 2018-05-27 14:17:51 +00:00
jan.nijtmans bb5d24622f don't bother to use constraint "threaded", because that's the way we want to build anyway 2018-05-27 14:17:08 +00:00
jan.nijtmans 5e1789954d Convert ScanElement/ConvertElement-related functions to use size_t in stead of int 2018-05-27 13:59:29 +00:00
jan.nijtmans 168a0bba16 Merge 8.7. Modify various other functions to use size_t in stead of int arguments 2018-05-27 12:49:05 +00:00
dkf 813979693c Add sensible behaviour with export and unexport of private methods. 2018-05-27 12:04:39 +00:00
dgp 50f0f668e5 merge 8.7 2018-05-26 13:21:44 +00:00
dgp c8da3bbfaf close fork 2018-05-26 13:14:33 +00:00
fbonnet 35f5b82868 Fixed test process-7.3 2018-05-26 11:13:34 +00:00
fbonnet b91a2765ae TIP #509: Implement reentrant mutexes on all platforms 2018-05-25 19:43:23 +00:00
sebres 5e7a1545a6 minor indentation fix (no functional changes) 2018-05-25 15:51:23 +00:00
sebres f4651a5660 avoid dual init of stubs (possible race condition, 8.5th only) 2018-05-25 15:48:50 +00:00
sebres a0290b85c5 optimized winapi-stubs loading (8.5th only); if user name specified without domain and equals the current user - try safest and fastest way to get current user-home path (without usage of netapi) 2018-05-25 15:04:27 +00:00
sebres 8145564d30 merge/reintegrate test-cases from bug-9e6b569963 2018-05-25 10:04:01 +00:00
jan.nijtmans 020fea0acd merge trunk 2018-05-25 06:55:17 +00:00
jan.nijtmans 51ac01d942 merge 8.6 2018-05-25 06:53:47 +00:00
jan.nijtmans 66ef201ad7 merge 8.6 2018-05-25 06:51:55 +00:00
fvogel 6d943ef7b5 Remove test filesystem-1.30.3, this is unstestable 2018-05-24 20:51:45 +00:00
sebres 1c13d543f4 [9e6b569963] win: if user specified without domain (and local user was not found), try to resolve user-home using current domain, so following code's are similar:
file normalize ~$::tcl_platform(user)@$::env(USERDOMAIN)
  file normalize ~$::tcl_platform(user)
2018-05-24 20:49:12 +00:00
sebres 263de53394 merge 8.5, conflicts resolved (rewritten without winapi-stubs) 2018-05-24 20:36:32 +00:00
sebres a410c0d8d5 fixed typo in winFCmd-12.6.2: unneeded extra-bracket removed 2018-05-24 20:20:26 +00:00
sebres ecec1703aa win: TclpGetUserHome should return normalized path (also in case we find domain and NetUserGetInfo returns path), PoC:
file normalize ~$::tcl_platform(user)@$::env(USERDOMAIN)
2018-05-24 20:12:43 +00:00
fbonnet fae1c11488 Create new branch named "tip-509" 2018-05-24 16:26:16 +00:00
dgp 1ab67324ca merge 8.7 2018-05-24 13:27:12 +00:00
fvogel 36a1a69178 Add support for ~domain\user style user names, with new test test filesystem-1.30.3. Warning: does not yet work. 2018-05-23 21:08:01 +00:00
jan.nijtmans ca0f6f2273 merge trunk 2018-05-23 20:09:24 +00:00
jan.nijtmans a9e7c22c38 merge 8.7 2018-05-23 19:31:59 +00:00
jan.nijtmans edb38932e8 Unbreak build with other CFLAGS, such as TCL_MEM_DEBUG=1 or TCL_THREADS=0 on Linux 2018-05-23 19:31:15 +00:00
dgp 94314d3409 merge 8.7 2018-05-23 13:43:57 +00:00
dgp 46aab3eb09 unbreak the build 2018-05-23 13:34:53 +00:00
jan.nijtmans ae73bae096 merge 8.7 2018-05-22 20:57:12 +00:00
jan.nijtmans ce025f259b Simplify usage of TCL_THREAD, along the lines of [eeddb0693a950be980a66de3811630a00c7bab54|eeddb0693a]. Suggested by DKF 2018-05-22 20:53:24 +00:00
jan.nijtmans f6af18a947 More removals of TCL_THREADS usage (configure scripts/win makefiles) 2018-05-22 20:12:03 +00:00
jan.nijtmans b729965a3c Fix build with TCL_THREADS=0 on Linux/other without epoll or kqueu support. In that case, fallback to select notifier 2018-05-22 20:10:21 +00:00
dkf 0cab7d260b More docs 2018-05-22 08:26:55 +00:00
jan.nijtmans 7bc7f4397f merge 8.7 2018-05-21 08:13:47 +00:00
jan.nijtmans 708eadd19e Demonstrate how Tcl can build without TCL_THREADS defined at all (assuming TCL_THREADS=1 as default). Activated by -DTCL_NO_DEPRECATED=1. See also [eeddb0693a950be980a66de3811630a00c7bab54|eeddb0693a] 2018-05-21 08:12:51 +00:00
dkf 7bbadfe0e0 merge core-8-branch 2018-05-20 15:09:43 +00:00
dkf 4523d8df2c Disable many warnings that are pointless in the stub library. Yes, it accesses deprecated fields, we know because we deprecated them. 2018-05-19 11:26:13 +00:00
dkf 791f1c2741 Minor updates to C API to handle private methods. 2018-05-19 11:18:51 +00:00
dkf d431841a06 Corrections for a number of small things to align with TIP 2018-05-19 08:38:42 +00:00
fvogel dffe6bc7f1 Add test filesystem-1.30.2 {normalisation of nonexistent user specified as user@domain} 2018-05-19 07:10:43 +00:00
fvogel 423f761169 Fix [9e6b569963]: file normalize ~user fails on Windows 2018-05-18 19:54:56 +00:00
fvogel ba42e43e97 Add test filesystem-1.30.1 checking file normalize ~$::tcl_platform(user). This test should currently fail when the computer is connected to a Windows domain controller, due to [9e6b569963]: file normalize ~user fails on Windows 2018-05-18 06:18:56 +00:00
jan.nijtmans 37c4a581ad Merge 8.7, but keep TCL_THREADS undefined in tcl.h (since that's no longer necessary) 2018-05-17 19:05:37 +00:00
jan.nijtmans 4f1ea4779b TIP #491 implementation: Threading Support: phasing out non-threaded builds 2018-05-17 18:53:29 +00:00
dkf e6fdfbe93b Make [info object methods] and [info class methods] work right. 2018-05-15 13:04:10 +00:00
dkf bd706be303 Make sure that [self call] reports useful info. 2018-05-14 20:55:40 +00:00
jan.nijtmans cfd3e75337 merge 8.7 2018-05-14 19:20:15 +00:00
jan.nijtmans 4e12ee1bc4 merge 8.6 2018-05-14 19:16:53 +00:00
jan.nijtmans 7672af7212 merge 8.5 2018-05-14 19:16:24 +00:00
jan.nijtmans eae621b175 Unbreak build when HAVE_FTS is not set.
Move definitions of Tcl_DirEntry and TclDIR to tclWinPort.h, where it actually belongs
2018-05-14 19:14:40 +00:00
fbonnet c2fceada6c Initial implementation of TIP #508: [array default] 2018-05-13 22:15:36 +00:00
fbonnet 6ba27f887c Create new branch named "tip-508" 2018-05-13 21:56:54 +00:00
dkf 5eef06ea24 Correct results from unknown method handler. 2018-05-13 19:20:52 +00:00
dkf 9333525d11 Make [info vars] aware of private variable resolution. 2018-05-13 16:10:44 +00:00
jan.nijtmans 33610dd48f merge 8.7 2018-05-13 13:55:11 +00:00
jan.nijtmans 1f7ca2ff69 de-duplicate code in win32 panic implementation. Also eliminate gcc compiler warning. 2018-05-13 13:54:46 +00:00
dkf 911c1c6237 Merge core-8-branch 2018-05-13 10:08:32 +00:00
dkf 49a9e59311 General code style cleanup. 2018-05-13 07:17:00 +00:00
dgp 242d4d7095 Missing test file boilerplate. 2018-05-11 17:26:13 +00:00
dgp c744824995 merge 8.7 2018-05-11 11:51:18 +00:00
jan.nijtmans c3b1e9053b Merge 8.7 2018-05-11 10:06:22 +00:00
jan.nijtmans 9cb3b15616 TIP #425 implementation: Correct use of UTF-8 in Panic Callback (Windows only) 2018-05-11 09:42:08 +00:00
jan.nijtmans 6d0cc0c589 Merge 8.5. This adds Emoji 11.0 support, when Tcl is compiled with TCL_UTF_MAX>3. Useful for Androwish, for example. 2018-05-11 09:20:59 +00:00
jan.nijtmans cfb0d67424 merge 8.7 2018-05-11 09:15:24 +00:00
jan.nijtmans d9bc6cbae2 Add emoji 11.0 to the set. Only active when compiled with TCL_UTF_MAX>3. Also prepare tooling for Unicode 11.0 (while being on it) 2018-05-11 09:14:42 +00:00
jan.nijtmans 388266030b merge 8.6 2018-05-11 08:12:04 +00:00
jan.nijtmans ede72e80ac merge 8.5 2018-05-11 08:10:17 +00:00
jan.nijtmans 7bf3f83abd Rename Tcl_Dir to TclDIR, making it clear that this macro is not part of the public API 2018-05-11 07:53:20 +00:00
fbonnet d3fd405e6b Added tcl::process test suite 2018-05-10 17:37:10 +00:00
fbonnet eed54b6281 Fixed makefile.vc: install will create missing dir "tcl8/8.7" for msgcat 2018-05-10 13:47:37 +00:00
fbonnet 6dbdfc31d2 Added man page for tcl::process 2018-05-10 13:44:43 +00:00
dgp b25aceb078 merge 8.7 2018-05-09 16:01:14 +00:00
dgp 35d6c2453e merge 8.6 2018-05-09 15:49:27 +00:00
sebres f7f4cbb151 merge 8.5 2018-05-09 10:34:44 +00:00
sebres f5e8751307 amend to [85bcf84100]: replaces DIR with Tcl_Dir (DIR/DIR64 regarding HAVE_STRUCT_DIRENT64) 2018-05-09 10:29:33 +00:00
pooryorick 7855612da6 Fix epoll notifier memory leak in initialization/finalization routines, 2018-05-08 20:03:14 +00:00
dgp 56af8c1770 merge 8.7 2018-05-08 15:22:49 +00:00
dgp 7f26fedbcc merge 8.6 2018-05-08 15:00:40 +00:00
sebres 47e9dbdc37 prevents UB/segfault by unexpected return-code (not -1/0/1) and avoid warnings like:
tclCmdMZ.c:2815:15: warning: `s1` may be used uninitialized in this function [-Wmaybe-uninitialized]
  s1len = Tcl_NumUtfChars(s1, s1len);
          ^~~~~~~~~~~~~~~~~~~~~~~~~~
2018-05-08 10:16:26 +00:00
sebres 8fd1568405 merge fix for [92564326a98b5510] from 8.5 2018-05-08 09:56:35 +00:00
sebres 78ee8c697e fixes [92564326a98b5510]: wrong x64-aligned handle from readdir64 by opendir/rewinddir/closedir, if HAVE_STRUCT_DIRENT64 used. 2018-05-08 09:49:16 +00:00
dkf 08f43a1ff4 More efficient way of getting array element names; why search when direct lookup is possible? 2018-05-07 15:42:08 +00:00
pooryorick 1f71d7079b merge core-8-6-branch 2018-05-07 14:33:15 +00:00
dkf 5cef8b0f8e Make the 'varname' method know about private variables. 2018-05-07 12:43:40 +00:00
pooryorick 5f0cf291f5 Deduplicate code in INST_STR_CMP, StringCmpCmd, and StringEqualCmd. 2018-05-07 07:43:00 +00:00
jan.nijtmans 97b08c9a24 merge 8.7 2018-05-07 07:42:03 +00:00
jan.nijtmans 5500074eff Remove some tip389 restrictions in test-cases, which are no longer necessary.
Eliminate gcc compiler warnings when compiling with -DTCL_UTF_MAX=6
Other code clean-up and comment improvements. No change in functionality.
2018-05-07 07:40:58 +00:00
pooryorick db133f0144 Factor options handling out of StringCmpCmd. 2018-05-06 18:13:54 +00:00
dkf 66525c95ee Documentation. 2018-05-06 14:20:29 +00:00
pooryorick 86c6a11cdb Preparation to deduplicate code between byte-compiled and legacy
implementations of [string compare].
2018-05-06 13:45:21 +00:00
dkf 13bdb0305c Corrections to test names. 2018-05-06 07:17:27 +00:00
dkf 2a19591dc7 Fix up instance privates. 2018-05-06 07:13:30 +00:00
dkf 411bfad9f4 merge 8.7 2018-05-05 17:30:52 +00:00
dkf f58e9ed842 Private methods seem to be working... 2018-05-05 17:23:17 +00:00
pooryorick e383cd7b26 Avoid generating string representation when comparing the empty string. 2018-05-05 17:04:08 +00:00
pooryorick 3a3fd2954f Avoid generating string representation when comparing the empty string. 2018-05-05 16:38:27 +00:00
José Ignacio Marín b97b608974 Update TZ info to tzdata2018e. 2018-05-04 19:07:22 +00:00
José Ignacio Marín 215b091d17 Update TZ info to tzdata2018e. 2018-05-04 19:06:55 +00:00
José Ignacio Marín 096a011c43 Update TZ info to tzdata2018e. 2018-05-04 19:06:09 +00:00
oehhar 7a91dd767e Syntax error in msgcat documentation fixed. Ticket [af69c6966d] 2018-05-03 16:24:05 +00:00
dgp ce396e8f68 close fork 2018-05-02 13:53:48 +00:00
oehhar ccf2e7a979 Syntax error in msgcat documentation fixed. Ticket [af69c6966d] 2018-05-02 12:22:44 +00:00
jan.nijtmans 48a249a15e merge 8.7 2018-05-01 18:43:55 +00:00
jan.nijtmans c326a21131 merge 8.6 2018-05-01 18:42:05 +00:00
jan.nijtmans 51208ca53e Implement special "string totitle" for Extended Georgian characters (new behavior in Unicode 11) 2018-05-01 18:41:27 +00:00
dgp 71938f034c merge 8.5 2018-04-30 12:14:25 +00:00
dgp 0fc27b893e Contain platform-specific things in the constraint-controlled parts of the test. 2018-04-30 12:11:14 +00:00
sebres debcb2bf01 amend after merge 8.5 2018-04-30 11:52:12 +00:00
sebres 6ef77228ca merge core-8-5-branch (fix-1613456fff) 2018-04-30 11:36:31 +00:00
sebres ddfce0ed3f merge fix-1613456fff, closes [1613456fffffffff] and [27b682284974d0cd] 2018-04-30 11:10:14 +00:00
jan.nijtmans 678622482a Merge 8.7 (= upgrade to Unicode 11 beta) 2018-04-29 21:15:10 +00:00
jan.nijtmans bfc5a0090f Upgrade everything to Unicode 11 (still in beta, expected in june 2018) 2018-04-29 21:14:21 +00:00
jan.nijtmans c23982e3c2 Now really fix [9f3c253df5eec5669673d05fe3a51e4afcf99418|9f3c253df5] : Tcl build broken on Win. (tested on Visual Studio 2017) 2018-04-29 20:02:48 +00:00
dgp 5238a999d5 merge 8.7 2018-04-27 13:21:27 +00:00
hypnotoad ab49bdfd12 Added an initialization of 0 for the namelen field for new ZipFile data structures. In memory
debugging mode, that value will be something random, not zero on alloc.
2018-04-27 03:06:36 +00:00
jan.nijtmans a85834a18e Merge 8.7 2018-04-26 08:33:30 +00:00
jan.nijtmans 9e733498f1 Update test-cases, so they are selected or not for -DTCL_UTF_MAX=6. Now all relevant test-cases pass for TCL_UTF_MAX=6 builds on UNIX (but not yet on Windows)! 2018-04-26 08:32:19 +00:00
jan.nijtmans 36aca800d0 Fix MSVC build [9f3c253df5] 2018-04-25 21:57:27 +00:00
dgp a14cef18c0 merge 8.7 2018-04-25 11:49:20 +00:00
dgp 859bcc9f86 merge 8.6 2018-04-25 11:48:43 +00:00
dgp c876decde3 Doc typo fix from Andy Goth. 2018-04-25 11:48:14 +00:00
andy b104b5ce6e Merge fork 2018-04-24 23:00:56 +00:00
dgp a794e440ae Merge 8.7 2018-04-24 13:51:12 +00:00
dgp fec8aee1a1 Merge 8.6 (bug-fix and test-case for Tcl_UtfAtIndex with TCL_UTF_MAX=4)
((Replacement checkin for earlier attempt with botched timestamp))
2018-04-24 13:45:57 +00:00
jan.nijtmans 4519681dcd Bug-fix in Tcl_UtfAtIndex (for TCL_UTF_MAX=4 only). With test-case (in "string totitle") demonstrating the bug. 2018-04-23 23:23:00 +00:00
jan.nijtmans 1905291fed merge 8.7 2018-04-23 15:07:29 +00:00
jan.nijtmans 27c2e432b5 Some better surrogate handling in encodings. Not spotted before ... 2018-04-23 15:06:40 +00:00
jan.nijtmans 9acb063268 Add some state to encodings, so we can do better surrogate handling for TCL_UTF_MAX >= 4. Backported from TIP #389. 2018-04-23 14:56:44 +00:00
dgp 09a6e8adca merge 8.7 2018-04-23 13:53:04 +00:00
dgp 523d6ea42c Dup test name. 2018-04-23 13:51:05 +00:00
bll 95f2469359 Rework 'array for' to pass the arrayNameObj to the NRE routines
rather than saving it in the ArraySearch structure (which will
not work).
Create ArrayPopulateSearch to consolidate duplicate code.
2018-04-23 12:58:41 +00:00
dgp d513bef710 merge 8.7 2018-04-22 13:28:42 +00:00
dgp dc6bc431e9 merge 8.6 2018-04-22 13:27:45 +00:00
dgp 8e06fd796b [46a2410650] compiled [unset] was bypassing cleanup of active array search.
Overdue thanks to Andy Goth for tests and report.
2018-04-22 13:22:20 +00:00
kjnash 227db01958 Restore production test settings: set tests/httpPipeline.test to non-verbose, and comment out most Log calls in library/http/http.tcl 2018-04-21 14:22:35 +00:00
kjnash 41954059c4 merge 8.6 2018-04-21 13:47:09 +00:00
kjnash b169c964e6 Amend httpPipeline.test tests to use stdout not stderr, and thus avoid the report {Test files exiting with errors} even when all tests pass. 2018-04-21 13:31:16 +00:00
dgp ae76fbd559 DeleteArray has only one caller. It is called on the "dummy" variable
that is created during unset, and which cannot be reached by resolving
any name. It cannot have VAR_SEARCH_ACTIVE set because the sole thing that
sets that flag is an [array startsearch] applied to a named variable.
2018-04-20 20:17:17 +00:00
kjnash 3771e638b0 Document the new proc http::registerError in http.n 2018-04-20 20:06:30 +00:00
dgp 751fe9de93 merge 8.7 2018-04-20 16:55:30 +00:00
dgp 24d501cb0d TIP 421 Implementation. 2018-04-20 16:02:47 +00:00
jan.nijtmans 0569fc46c8 merge 8.7 2018-04-20 10:18:29 +00:00
jan.nijtmans ca5638e01f TIP #389 implementation. 2018-04-20 10:16:31 +00:00
jan.nijtmans 1734eed89f Slightly improved (more fail-safe) surrogate handling for TCL_UTF_MAX>3. Backported from latest TIP 389 implementation. (to be used for androwish) 2018-04-19 22:29:00 +00:00
dgp 5c2ea0542f Adapt [array for] to use the refactored routines. 2018-04-19 17:46:37 +00:00
dgp 346eec1892 merge 8.7 2018-04-19 17:40:10 +00:00
oehhar ddb7bbe66c correct msgcat test numbering for section util from 15.x (used twice) to 18.x 2018-04-19 11:48:28 +00:00
dgp 697d8c5398 merge 8.7 2018-04-19 02:51:50 +00:00
dgp 567fb6cc27 merge 8.6 2018-04-19 02:45:38 +00:00
dgp 75bd116527 Fold TclArraySet() into its only caller. tclEnv.c no longer calls it 2018-04-19 02:01:29 +00:00
dgp 7ac6487eda merge 8.5 2018-04-19 01:41:13 +00:00
dgp df94eecf11 An [array set] from a dict can only take shortcuts when the dict is "pure",
that is, has no string rep.
2018-04-19 01:39:38 +00:00
dgp 8d0340e39e Refactor error reporting when value is not an expected array variable name. 2018-04-18 23:41:48 +00:00
dgp 61f580bd36 Refactor to bring the test for existence of an array variable into
LocateArray().
2018-04-18 23:31:07 +00:00
dgp 08c1a8dd34 cleanup of refactor 2018-04-18 21:03:53 +00:00
dgp fb91d4b68b Refactor the common operations of looking up and checking traces on an array
variable into a single routine LocateArray().
2018-04-18 19:21:33 +00:00
oehhar 327595170b http::geturl now returns full error stack information if the initial socket command fails Ticket [ff82755e15] 2018-04-18 11:59:57 +00:00
jan.nijtmans f44e7c1795 Merge 8.7
Move stuff from SC_ENABLE_THREADS to SC_TCL_LINK_LIBS in tcl.m4, so SC_ENABLE_THREADS is no longer needed in configure.ac
2018-04-17 22:48:00 +00:00
jan.nijtmans 28ac086633 Slightly better unmatched-surrogates handling. Unmatched High surrogates will still be silently removed, but Unmatched Low surrogates will pass through as-is now. Inspired by Kevin Kenny's remarks. Thanks! 2018-04-17 21:49:00 +00:00
dgp 6b8039a952 Refactor array trace handling into a common routine TclCheckArrayTraces(). 2018-04-17 20:29:02 +00:00
dgp 62ea5e49a1 Array trace firing must come before argument checking might raise error. 2018-04-17 19:14:01 +00:00
dgp 5dff80f2fe Gentler fallback. 2018-04-17 18:54:36 +00:00
dgp f316d7539c [array set] must fire array traces. Don't disrupt that by reporting argument
errors too early.
2018-04-17 18:34:41 +00:00
dgp bdc679352c merge 8.7 2018-04-17 14:39:42 +00:00
dgp 31a291920a merge 8.6 2018-04-17 14:39:12 +00:00
dgp 05845fbe5f merge 8.5 2018-04-17 14:38:28 +00:00
dgp 80e5aed49e Restore build success to the TCL_REMOVE_OBSOLETE_TRACES configuration. 2018-04-17 14:32:30 +00:00
dgp 47fc4afd86 Satisfy test var-23.14 2018-04-17 11:11:35 +00:00
dgp 08d704bbb1 Test of shimmer segfault. 2018-04-17 03:48:47 +00:00
jan.nijtmans b013797f96 Merge trunk. Update (internal) Trim* functions to use size_t 2018-04-16 23:01:00 +00:00
dgp 04604552b2 ran autoconf on the unix directory. This breaks the build. 2018-04-16 14:51:19 +00:00
dgp b5d6b4f138 merge 8.7 2018-04-16 14:46:58 +00:00
dgp 2d5be38603 Memleak fix from Brad Lanam. 2018-04-16 14:15:22 +00:00
dgp e42804a0c2 merge 8.7 2018-04-16 13:41:14 +00:00
jan.nijtmans 368acc3d50 Fix [9f3c253df5eec5669673d05fe3a51e4afcf99418|9f3c253df5]: Tcl build broken on Win. Re-introduce TCL_NORETURN1, apparently still needed on MSVC. 2018-04-15 23:06:00 +00:00
jan.nijtmans 5bef70bd07 Merge trunk 2018-04-15 22:01:00 +00:00
dkf ad02c0b532 Added basic tests of the 'private' definition command. 2018-04-15 15:11:38 +00:00
dkf 28e500cbf9 Testing the private variables. 2018-04-15 14:47:26 +00:00
dkf 637c7dbc7e Added tests for [info object creationid] 2018-04-15 10:29:48 +00:00
kjnash 4588d7300e Restore Tcl 8+4 tab convention 2018-04-13 15:48:13 +00:00
kjnash d690b84738 Improve detection and reporting of TLS errors. New command http::registerError to assist the latter. Ensure that http::cleanup cancels any timeout event if not already done. Add comments on non-blocking read/gets. 2018-04-13 15:41:00 +00:00
dkf 49879791f4 Duplicate the private variable config when cloning objects. 2018-04-13 07:23:37 +00:00
dkf 8262e514d0 Added introspectors mentioned in TIP. 2018-04-12 23:54:58 +00:00
andy 4f69e81ae0 Fix documentation typo 2018-04-12 01:58:52 +00:00
dgp 994ba283c9 merge 8.7 2018-04-11 16:17:44 +00:00
dgp 019016e71a merge 8.7 2018-04-11 12:45:01 +00:00
sebres 9856afd590 win: some test-cases missing constraint for testexcept (if compiled without test) 2018-04-11 11:28:41 +00:00
sebres a9ef86f152 win: fix several test-cases for windows platform 2018-04-09 19:50:12 +00:00
sebres 24a04c0819 amend to [5acb57c7aec45e05]: set code to TCL_ERROR, because primitives from tclIOUtil return -1 2018-04-09 10:04:23 +00:00
dgp 4647cfb665 merge 8.6 2018-04-07 17:07:09 +00:00
dgp ff7812fe97 merge 8.5 2018-04-07 16:56:53 +00:00
dgp 689f5653f9 Correct out-of-date documentation for [string is]. 2018-04-07 16:55:53 +00:00
sebres 9077b8ce60 [27b682284974d0cd] command "file delete": avoid possible race condition if file/directory deleted after call of lstat, so bypass ENOENT error code.
Thanks to Rainer Müller (aka raimue)
2018-04-06 17:28:56 +00:00
dgp 50698aacbf merge 8.7 2018-04-05 17:59:28 +00:00
dgp 634c443219 Plug memleak in [format] applied to bignums. 2018-04-05 17:22:09 +00:00
dgp 43507f353b Plug memleak when [scan] raises an error. 2018-04-05 16:37:35 +00:00
dgp b86f569b11 merge 8.7 2018-04-05 15:38:14 +00:00
dgp eb8817687f [string cat] was failing to NUL terminate string reps.
Stopped "string" values triggering false valgrind alarms when tests make
use of [tcl::unsupported::representation].
2018-04-05 15:37:40 +00:00
dgp 754c5a5fe1 merge 8.7 2018-04-05 13:36:34 +00:00
dgp 0ad3b13e26 Failed to mutex protect all multi-thread access to the hash tables in the
[tcl::process] implementation. This was causing segfaults in thread-8.1.
2018-04-05 13:34:58 +00:00
dkf 5a8d06b076 Start of private method dispatch machinery. 2018-04-05 07:26:27 +00:00
kjnash 6bc8c27b7f Restore most lines to 80 columns 2018-04-04 13:37:37 +00:00
kjnash 6a58a0cab2 Use coroutines to remove blocking on HTTP connections 2018-04-04 12:00:03 +00:00
kjnash 1357172367 Increase test timeout to 10s. Remove commenting from Log calls that report long delay for [socket]. 2018-04-01 01:09:57 +00:00
kjnash 466fd1d930 Chasing timeout bug: reduce client timeout to 4s in tests; more sanity checking in non-keep-alive tests; tidying; more logging in http.tcl. 2018-03-31 15:27:52 +00:00
dgp d525fa6f68 merge 8.7 2018-03-30 21:10:04 +00:00
dgp 4cc60d34fb merge 8.7 2018-03-30 20:08:10 +00:00
dgp 008f1c98d0 merge 8.7 2018-03-30 19:53:14 +00:00
dgp 42a2b87f32 merge 8.7 2018-03-30 19:42:35 +00:00
dgp a5d6e9657a Refactor the [lrange] machinery into a single routine TclListObjRange().
Apply some optimizations. Contribution from pspjuth.
2018-03-30 19:22:17 +00:00
dgp a27e0ef2ce merge 8.7 2018-03-30 19:11:39 +00:00
kjnash 441e4f6796 For thorough testing, set test file to verbose, and uncomment Log calls in http.tcl. 2018-03-30 10:13:57 +00:00
kjnash 3117af219f Bugfixes. Details in ticket 46b6edad51. 2018-03-30 10:02:44 +00:00
kjnash a0e1b18138 Adapt tests/httpPipeline.test for test without installation. Comment out some Log calls from tests/httpTestScript.tcl 2018-03-29 18:20:56 +00:00
kjnash 70af5c2b82 Implement queuing and pipelining for HTTP requests over a persistent connection. 2018-03-27 14:20:23 +00:00
kjnash d38ae8f974 Adapt fconfigure -translation for two-way pipelined operation. 2018-03-27 08:56:16 +00:00
kjnash 0d887fa465 Define variable tk used in Log calls for testing. 2018-03-27 08:55:21 +00:00
kjnash e9bb0992b0 First step for implementing concurrent requests using the same connection. Define namespace variables socket* and http where they will (eventually) be used. Leave them unused except in http::init where they are initialised. 2018-03-27 08:52:40 +00:00
kjnash f35c0dc2ed Revise tests/http11.test for use with commits from 78b23edb6b onwards. Adjust proc "handler" to conform to http(n) 2018-03-27 08:49:13 +00:00
kjnash e80e214673 BUGFIX. Send "Connection: keep-alive" even if HTTP/1.1. Some servers (including Apache 2.2 on RHEL6) use the discretion granted by RFCs and will close the connection unless this header is sent. 2018-03-27 08:37:06 +00:00
kjnash 731f40c6d9 New http::config option -zip to control whether to send an "Accept-Encoding" request-header for a zipped response. Default true for backward compatibility. 2018-03-27 08:32:37 +00:00
kjnash 767cf6314a Workaround for bug with https and unchunked response. A [read] does not deliver until the server closes the socket. The workaround is to specify the buffer size as the precise length required. 2018-03-27 08:29:43 +00:00
kjnash b00317d174 Changes to response handling in Finish, Eot and Event. Carefully distinguish expected and premature eof. Stricter handling of errors, minor bugfixes. Details in ticket 46b6edad51. 2018-03-27 08:25:14 +00:00
kjnash a8408767a4 Add "array unset socketMapping" in http::init. The sockets are closed and therefore do not belong in socketMapping, which should be unset. 2018-03-27 08:20:14 +00:00
kjnash 4f8b177250 Tidying - add empty else clauses, omit :: at start of command name http::CloseSocket in proc definition, use two lines instead of "return [Finish ...]" because there is no return value! 2018-03-27 08:17:38 +00:00
kjnash 25aad1ab18 Update some Log calls, mainly to specify token. 2018-03-27 08:15:26 +00:00
kjnash 3b48db4a90 Update some comments and a Log. 2018-03-27 08:12:47 +00:00
kjnash 58eff8f224 Rename some variables and commands. Details in ticket 46b6edad51. 2018-03-27 08:10:50 +00:00
kjnash 97721e9675 Add parentheses to some "if" tests; transform one test without changing its outcome. 2018-03-27 08:08:19 +00:00
kjnash d88d33f74d Give all procs an explicit return, except where commented as "Implicit Return". 2018-03-27 08:07:05 +00:00
kjnash 0a9706f48f Adjust to 80 columns except one 82-column line which would be less intelligible. 2018-03-27 08:05:42 +00:00
kjnash 45f91441a5 Adjust whitespace to Tcl 8+4 tab convention. 2018-03-27 08:03:58 +00:00
kjnash 38781266d3 Create new branch named "bug-46b6edad51-concurrent-http" 2018-03-27 07:48:33 +00:00
jan.nijtmans 220d2d7d9c Remove MINGW32 from the UNIX makefile, since Mingw should always build from the "win" directory. Better to avoid confusion. 2018-03-26 20:21:00 +00:00
dgp 843d29b448 Rest of TIP 505 implementation -- mostly undoing dumb things. 2018-03-26 18:59:00 +00:00
dgp 1a73baff09 Work in progress implementing TIP 505. 2018-03-26 16:27:40 +00:00
jan.nijtmans e1e6b685fd merge 8.7 2018-03-25 19:21:11 +00:00
jan.nijtmans 08dc58ce40 No need any more on 64-bit cygwin for special *Long* stub entries. 2018-03-25 19:20:28 +00:00
jan.nijtmans cc19135f2e merge 8.7 2018-03-25 17:43:52 +00:00
jan.nijtmans 3abde0eac5 workaround for TclFormatInt on CYGWIN is no longer necessary now. 2018-03-25 17:43:09 +00:00
José Ignacio Marín 2cf7904bd2 Update TZ info to tzdata2018d. 2018-03-24 10:22:06 +00:00
José Ignacio Marín 29f8e6add3 Update TZ info to tzdata2018d. 2018-03-24 10:21:29 +00:00
José Ignacio Marín 05c789647a Update TZ info to tzdata2018d. 2018-03-24 10:20:43 +00:00
sebres da169b1600 minor fix on comment (restored getFileSecurityProc back, because getNamedSecurityInfoProc not used) 2018-03-22 17:45:32 +00:00
sebres 570af63547 win: fixes check of file permissions (readable, writable, executable) - more faster and stable solution without direct check of security permissions by optimal terms;
additionally corrected executable extensions (missing .ps1/.cmd) in useWide case.
2018-03-22 16:22:04 +00:00
dgp 84fe9556f1 merge 8.7 2018-03-20 19:58:27 +00:00
dgp 919a1c67ab TIP 503 implementation. 2018-03-20 19:54:32 +00:00
dgp dc07332444 Merge over testing improvements from the TIP 475 work.
Test files string.test and stringComp.test had become out of sync.
Use one file to maintain even coverage.
2018-03-20 19:25:54 +00:00
dgp bac2aebf10 Test and fix for botch in binary string replace. 2018-03-20 16:10:49 +00:00
dkf 383c53f80e This should be the implementation of private variables. 2018-03-18 18:04:50 +00:00
jan.nijtmans ba9cf35aa3 In case of redirecting stderr to a file on Windows, append CRLF after Panic output. 2018-03-15 23:01:00 +00:00
jan.nijtmans db41a49d9c merge 8.7 2018-03-15 21:53:00 +00:00
jan.nijtmans cbbab84b71 Merge 8.7 (convert makefile.vc to CRLF line-endings only) 2018-03-15 21:13:00 +00:00
jan.nijtmans c20405e576 Merge-mark (here makefile.vc still had the correct CRLF line-endings) 2018-03-15 21:02:00 +00:00
jan.nijtmans df06afadcf Bring back makefile.vc to CRLF line-endings, as all other *.vc files 2018-03-15 20:58:00 +00:00
dgp 55a65632d0 Merge 8.7; Updated the package manifest by hand; was broken until then.
If there's a maintenance knob to turn, that needs to be better known.
2018-03-15 19:09:42 +00:00
dgp 7435702d63 merge 8.7 2018-03-15 15:34:00 +00:00
dgp c120622483 merge 8.7 2018-03-15 14:37:55 +00:00
dgp a8ffcb0b4c merge 8.7 2018-03-15 14:18:39 +00:00
dgp 47152d94c1 merge 8.7 2018-03-15 14:06:52 +00:00
dgp 795355ee43 merge 8.7 2018-03-15 11:11:33 +00:00
dgp aa199edba6 merge 8.6 2018-03-15 11:08:08 +00:00
dgp c5e979695a Missing test cleanups that break later tests. 2018-03-15 10:58:13 +00:00
dgp 2977f2ab44 merge 8.7 2018-03-15 00:01:37 +00:00
dgp 5d355c0fd9 Memleak and lifetime management fixes for components of the OO system. 2018-03-14 23:54:31 +00:00
dgp e6e44fb3b8 Merge rest of 8.7 except the botched apply/backout dance. 2018-03-14 23:47:46 +00:00
dgp 6fcbcd9f12 Merge in 8.7 changes not already here. 2018-03-14 23:43:32 +00:00
dgp 4751bcf256 Rebase the memleak work. 2018-03-14 22:39:38 +00:00
dgp 99ab923ed5 Memleak and lifetime management fixes for components of the OO system. 2018-03-14 22:17:51 +00:00
dgp 72c721f3e7 merge 8.6 2018-03-14 21:51:13 +00:00
dgp 6d4320b5fb A few test hygiene fixes. 2018-03-14 20:59:01 +00:00
pooryorick 73de582148 Further work to improve Object reference accounting in order to plug leaks. 2018-03-14 20:43:20 +00:00
dgp 8ecdd7277d merege 8.7 2018-03-14 18:09:20 +00:00
dgp d0bce3e99f merge 8.6 2018-03-14 18:08:55 +00:00
sebres 1bf60bab3c optimize compiled (INST_STR_TRIM): use new function TclTrim instead of combination of TclTrimLeft/TclTrimRight 2018-03-14 17:23:24 +00:00
dgp 93e9d2457c merge 8.7 2018-03-14 17:21:29 +00:00
dgp 43f670e530 unused variable fix 2018-03-14 17:20:53 +00:00
sebres 77ab9f868a merge 8.5 2018-03-14 17:19:23 +00:00
sebres 6e7c474da7 TclTrim: special case for TrimRight on single char result of TrimLeft (this char is already verified within TrimLeft, so bypass TrimRight at all) 2018-03-14 17:17:44 +00:00
dgp 3f7e1dc18f merge 8.7 2018-03-14 16:17:48 +00:00
dgp 2d87ed6d29 New routine TclStringReplace() serves as a common implementation for both
compiled and direct eval paths of [string replace].
One routine to debug, optimize, convert to new data structures, etc.

This routine will also make a good core engine for [string insert].

With this refactoring done, the value of the INST_STR_REPLACE instruction
is no longer clear.  Until now, the value of compiling to it was that it
routed you through the "better" of the two implementations.  An
instruction that does nothing different from what invocation to the
direct eval fallback would do does not have obvious value.
2018-03-14 15:17:27 +00:00
dgp 6111cf68fe merge 8.7 2018-03-14 05:51:18 +00:00
dgp 3cda2dc805 merge mark 2018-03-14 05:41:55 +00:00
dgp 0a3e263036 cherry pick the desirable part of the merge. 2018-03-14 05:41:19 +00:00
dgp 864d754a8a backout the latest merge 2018-03-14 04:45:29 +00:00
dgp b16ec6f23b Backout recent patch working on Object and Namespace refcounts.
It creates new leaks and memory corruption according to valgrind,
and the preceding checkin did not.  Keep developing on the memleak branch
and it can merge again when valgrind and memleak tests both like it.
2018-03-14 04:26:41 +00:00
dgp 17e2ed6919 silence compiler warning 2018-03-14 01:31:10 +00:00
dgp 15bfd5756e merge 8.6 2018-03-14 01:30:16 +00:00
dgp 0d0b8e03ed merge 8.5 2018-03-14 00:53:13 +00:00
dgp fd2d896c8f TclTrim must write to *trimRight even when making a quick exit. 2018-03-14 00:45:14 +00:00
dgp f597744c5f Make TclTrim* routines robust against some malformation in inputs.
Better than access violations and panics!
2018-03-14 00:03:59 +00:00
dgp 261fbdac7e A few minor revisions. 2018-03-13 23:56:22 +00:00
pooryorick ec5288cc2e Audit and correct Object reference counting issues. 2018-03-13 20:46:08 +00:00
pooryorick 90f38b1023 Audit and correct Object reference counting issues. 2018-03-13 20:41:23 +00:00
sebres 64eaafad72 remove unexpected panic by TclTrimLeft/TclTrimRight, handling rewritten:
- instead of check the NTS-byte after string (may cause segfault by access violation if out of range),
  it checks now the end-character is well-formed utf8-sequence;
- both work well now on non-NTS strings (without null character at end);
- additionally fixed wrong offsets (trim-length if last char malformed in case of out of range);
new function TclTrim introduced (as combination of TclTrimLeft/TclTrimRight).
2018-03-13 18:52:45 +00:00
dgp f8081ac245 merge 8.7 2018-03-13 17:30:00 +00:00
dgp 62079a5c69 merge 8.6 2018-03-13 17:14:40 +00:00
dgp 41ed3e0e2b close fork 2018-03-13 16:29:50 +00:00
dgp 9ac074bd09 Fix bugs in msgcat that prevent clean test suite run. 2018-03-13 16:28:43 +00:00
oehhar bbae63cfa9 tip 499 msgcat custom preferences: documentation added 2018-03-13 16:13:02 +00:00
dgp a275b8a5ea Rewrite the [string replace] compiler to take advantage of the richer
set of encoded index values.
2018-03-13 16:03:39 +00:00
oehhar 962427e8cd tip490 oo for msgcat: added documentation 2018-03-13 14:53:16 +00:00
dgp debafda1e7 Repair the INST_STR_REPLACE instruction. 2018-03-13 04:01:03 +00:00
dgp 1af314024c Merge new test and comments from 8.5 to demo that INST_STR_REPLACE is bad. 2018-03-13 03:26:42 +00:00
dgp 23178bb208 Tidy up and comment [string replace] and its corner cases. 2018-03-13 03:15:28 +00:00
dgp a14ab9eecb merge 8.7 2018-03-12 16:00:11 +00:00
dgp 2ae2445072 msgcat 1.7.0 features need foundation of Tcl 8.7. 2018-03-12 15:57:54 +00:00
dgp ccb7c3b60b merge 8.7 2018-03-12 14:49:44 +00:00
dgp 8bd4a8cf2c Revert change that broke usage with Tcl 9 2018-03-12 14:41:20 +00:00
dgp 5ff641a603 merge 8.6 2018-03-12 14:17:52 +00:00
dgp 71618ce230 Implement TIP 499: Custom locale search list for msgcat 2018-03-12 14:14:46 +00:00
dgp f35817ce5a Undo setting of execute permissions. 2018-03-12 14:07:26 +00:00
dgp 3af272b07a Implement TIP 490: msgcat for TclOO 2018-03-12 13:58:21 +00:00
dgp 67a242e003 msgcat 1.7 uses [tailcall], so requires Tcl 8.6. 2018-03-12 13:48:35 +00:00
dgp 4ba8623115 Implement TIP 462: Add New [::tcl::process] Ensemble for Subprocess Management 2018-03-12 13:38:46 +00:00
dgp 410bda416e merge 8.7 2018-03-12 13:24:15 +00:00
dgp 861217dbe3 Convert DOS -> unix line endings. 2018-03-12 13:07:50 +00:00
dgp a28f176470 It is confusingly stupid to use variable "length" to hold an actual length
in part of a routine, and hold an end index value later.
2018-03-12 02:48:59 +00:00
dgp f52d25e68a merge 8.7 2018-03-11 23:08:20 +00:00
dgp 9b9635f82e merge 8.7 2018-03-11 22:34:51 +00:00
dgp c5ae3a0a2d merge 8.7 2018-03-11 21:42:22 +00:00
dgp 45f5143205 merge 8.6 2018-03-11 21:29:10 +00:00
dgp de9c1aff4a plug memleaks 2018-03-11 21:15:27 +00:00
dgp e7a5b8aaa5 Prevent leaks of the Object structs of oo::object and oo::class. 2018-03-11 21:14:41 +00:00
dgp cd39f34fa5 Attempt at providing the missing instance squelcher. 2018-03-11 18:08:00 +00:00
dgp c7e8d507d9 merge 8.7 2018-03-11 12:33:16 +00:00
dgp e7be4a19a0 merge 8.6 2018-03-11 12:22:00 +00:00
dgp a0374a6e61 plug memleak of constructed package requirement. 2018-03-11 12:14:05 +00:00
dgp 3f3c89a947 Screen out empty list value so that assertions are true. 2018-03-11 12:13:11 +00:00
dgp d660f467cb merge 8.7 2018-03-10 16:03:02 +00:00
dgp 6b5d0e5d8d merge 8.6 2018-03-10 15:45:00 +00:00
dgp d9dbcf5afb Remove unused argument. 2018-03-10 15:41:04 +00:00
dgp 4dc5255a8e [db36fa5122] Upgrade the index value parsing and encoding machinery. Refactor many systems to make consistent use of it. Repairs many indexing errors in corner cases. 2018-03-10 14:55:14 +00:00
dgp e7a86d967c Use LIST_MAX instead of computing an end index. 2018-03-10 14:44:05 +00:00
dgp 6fce39545c rename tests to make room for new tests in 8.7 2018-03-10 14:37:36 +00:00
dgp 87fd09e44a [db36fa5122] Upgrade the index value parsing and encoding machinery.
Refactor many systems to make consistent use of it. Repairs many indexing
errors in corner cases.
2018-03-09 22:18:30 +00:00
dgp cd4e0ec5de Restore safety for legacy bytecode. 2018-03-09 21:18:19 +00:00
dgp 954522812e Return routine to file scope. 2018-03-09 21:07:12 +00:00
dgp db9b0eccf3 merge 8.6 2018-03-09 20:58:20 +00:00
dgp 06c3fd0c5b Newer utility routine is more suitable. 2018-03-09 20:46:54 +00:00
dgp c13e34da37 Update the command compilers and bytecode execution engine to use new machinery. 2018-03-09 20:34:33 +00:00
dgp a9d546dfbc Use new machinery to repair index value flaws in [lsort]. 2018-03-09 19:40:01 +00:00
dgp 6798b2404f Refactor the index value encode/decode machinery for broader use.
Make use of it to fix index value flaws in [lsearch].
2018-03-09 19:23:42 +00:00
dgp 5fd318bc35 More demonstration tests of index value encoding flaws. 2018-03-09 17:30:30 +00:00
dgp 88812125b1 New tests demonstrating index value encoding flaws in [lsearch]. 2018-03-09 15:28:35 +00:00
dgp 947fb98db5 Stop failing error ordering tests in compiled [lreplace]. 2018-03-08 21:58:30 +00:00
dgp ed53b715ac Another error ordering test. 2018-03-08 19:43:57 +00:00
dgp b8b87e5280 New test expose flaw in error ordering. 2018-03-08 19:28:58 +00:00
dgp 0c5bd7480e Streamline index decoding in INST_LIST_RANGE_IMM execution.
Eliminte the internals intrusion in the unshared in-place operations case.
Tcl_ListObjReplace() really ought to be good enough.
2018-03-08 18:57:16 +00:00
dgp 64038c5656 Rollback the stealth change to [lreplace a 1 1] in Tcl 8.6.6. [409ea17e37].
Scratch rewrite of the [lreplace] compiler.
2018-03-08 17:26:49 +00:00
dgp 101ac8bca7 Reduce the "clever" factor. (Fine line between clever and stupid.) 2018-03-08 02:28:49 +00:00
dgp 30e7e05895 Streamline index decoding in INST_STR_RANGE_IMM execution. 2018-03-07 21:45:12 +00:00
jan.nijtmans cb242c0d50 Merge 8.7 2018-03-07 21:41:00 +00:00
jan.nijtmans b4d6691add Merge 8.6 2018-03-07 21:21:00 +00:00
dgp ce6aa3ea08 When index parsing alone tells you a [string range] is empty, just push it. 2018-03-07 21:02:44 +00:00
jan.nijtmans 3492c92f3d Improve -DTCL_NO_DEPRECATED compiles. It now can handle loading stub-enabled extensions with incompatible magic number (backported from trunk) 2018-03-07 20:24:00 +00:00
dgp d7f41b448c Express INST_LIST_INDEX_IMM index processinig in terms of TCL_INDEX_END so
that consistencies are maintained, and hardcoded values are a bit demystified.
2018-03-07 19:55:23 +00:00
jan.nijtmans 405b9175e6 Fix handling of "pkgIndex" file in "package files" command. This was broken as well, as result of NRE-enabling the "package" command. 2018-03-07 19:35:00 +00:00
dgp 2c44354d13 Establish 4 symbols for categories of parsed index values:
TCL_INDEX_START = 0		The start index.
    TCL_INDEX_END = -2		The "end" index.
    TCL_INDEX_BEFORE = -1	All indices less than start.
    TCL_INDEX_AFTER = INT_MAX	All indices greater than "end".

Then use these symbols among callers of TclGetIndexFromToken() so that
index value parsing can directly implement the callers sense of when
out of range indices ought to be treated the same as start or end positions.
2018-03-07 18:39:44 +00:00
dgp 612199cbe9 Rework TclGetIndexFromToken to make use of TclGetEndOffsetFromObj, and
to lay out the index value encoding cases.
2018-03-07 17:02:50 +00:00
dgp 6de6ee8aa9 merge 8.7 2018-03-07 15:13:07 +00:00
sebres f337281f75 amend to [58716e0e92]: now the duplication is really pointless, so eliminated 2018-03-07 15:10:44 +00:00
dgp 7fe003f8d2 Remove pointless duplication. 2018-03-07 14:16:08 +00:00
dgp f003df5624 Tests of [assemble] use of compiled index values. 2018-03-07 13:40:54 +00:00
dgp 9fb9471807 Incorporate sebres work on the same ticket. Good stuff! 2018-03-07 12:08:40 +00:00
jan.nijtmans 0254080ca0 Fix the "package files" command. Due to the NRE enabling of "package" it always started to return an empty list. 2018-03-06 22:53:00 +00:00
sebres 8c2cbf3211 test cases for "lsort": coverage for "missing from sublist" error case with negative index (-1-1, -2) 2018-03-06 22:27:47 +00:00
sebres c68d043691 try to fix [db36fa5122]: better compiled variants of several indices-related commands, test-cases extended 2018-03-06 21:59:53 +00:00
dgp 720c8de452 rework error handling to keep test suite happy. 2018-03-06 20:59:44 +00:00
dgp 596e89b17d Have assembler use same index value parser as the bytecode compiler. 2018-03-06 20:27:39 +00:00
dgp 847a048c18 New internal routine TclGetEndOffsetFromObj. 2018-03-06 20:09:00 +00:00
bll a735b5d3ac array for:
Add missing ObjCmdProc wrapper around the NR proc.
2018-03-06 18:42:25 +00:00
bll d2d193de11 array for: updated documentation: value variable is not optional, add
specifics about when array for terminates.
2018-03-06 18:21:34 +00:00
dgp da8fbb89c4 various bits of ranting commentary 2018-03-06 17:38:44 +00:00
bll 77d58c5993 tip-421: array for:
a) Fix bug starting search (name not set).
  b) Fix error message for array change on iteration.
2018-03-06 17:19:40 +00:00
dgp 6bb961ffc6 merge 8.7 2018-03-06 13:46:24 +00:00
dgp 24c4a4cc6e Remove all the code supporting legacy opcodes.
Restructure to pave the way for re-ordering the opcode table, if we can
agree that some other order is better.
2018-03-06 13:37:22 +00:00
dgp 683e97521e merge 8.7 2018-03-06 13:21:10 +00:00
dgp 0d33258649 merge 8.6 2018-03-06 12:59:23 +00:00
dgp e5f3c1495b Compiler warning in a --enable-symbols=compile build 2018-03-06 12:10:45 +00:00
dgp 057d325d35 Remove disabled code and reformat. 2018-03-06 12:02:11 +00:00
dgp 54654ae7e4 Convert macros to enums - constrained by need for matching table. 2018-03-06 05:27:21 +00:00
dgp a6dd04e6da experiment 2018-03-06 04:08:54 +00:00
dgp 14a3439dd8 Remove all code supporting legacy instructions. 2018-03-05 22:16:03 +00:00
dgp 695856b85c unbreak 2018-03-05 20:58:32 +00:00
dgp d07756fc70 WIP removing bytecode instructions that are no longer issued. 2018-03-05 20:30:38 +00:00
dgp 79c79df0e1 merge 8.7 2018-03-05 20:05:45 +00:00
dgp f406561f40 Take the next step in TIPs 330 and 336, ending in 8.7 the USE_INTERP_RESULT and
USE_INTERP_ERRORLINE directives to escape need to migrate to 8.6 interfaces.
2018-03-05 20:00:06 +00:00
dgp 80c3bfdcaa Last bit of TIP 503 implementation. 2018-03-05 19:29:12 +00:00
sebres 465d28aa75 merge core-8-5-branch (fixes [1873ea0ee4f01b26]: wrong initialization of std-channels ...) 2018-03-05 17:43:42 +00:00
dgp 96e07632d9 merge 8.7 2018-03-05 17:41:24 +00:00
sebres 6c0170972f fixes [1873ea0ee4f01b26]: wrong initialization of std-channels, if no std-handles available at all (e. g. non-console application, like "tk") 2018-03-05 17:37:21 +00:00
dgp 2e1e641d75 merge 8.7 2018-03-05 17:16:50 +00:00
dgp 4d47b7f97f TIP 351 Implementation. 2018-03-05 17:07:14 +00:00
dgp b1e6769ef3 Rebase TIP 421 implementation to core-8-branch (8.7). var-23.1[01] segfaults! 2018-03-05 16:49:07 +00:00
jan.nijtmans aef69d0b0f Merge 8.7 2018-03-01 22:37:00 +00:00
jan.nijtmans 0e5d21e88f Re-generate tclTomMath.h. Fix win32 build (due to the use of uint8_t) 2018-03-01 22:27:00 +00:00
jan.nijtmans bfb19782c9 Merge 8.7 2018-03-01 21:06:20 +00:00
jan.nijtmans 0c568099ee Update libtommath to latest "develop" 2018-03-01 20:55:16 +00:00
jan.nijtmans 5753c7a42b Lots of code cleanup, mainly [https://github.com/libtom/libtommath/pull/102|Pull request #102] 2018-03-01 20:43:31 +00:00
dgp 914d6e1546 merge 8.6 2018-03-01 20:13:25 +00:00
dgp 683dada217 Some comments info for the next folks who come wandering in. 2018-03-01 20:07:29 +00:00
dgp 2cd8bf554e Refactor to eliminate duplicate routine parsing tokens as indices. 2018-03-01 16:48:55 +00:00
dgp e9c0312caf We have LLONG_MIN and LLONG_MAX to denote range limits of Tcl_WideInt.
Use them consistently. Also fix a few TIP 484 bugs.
2018-03-01 04:13:15 +00:00
jan.nijtmans 2461121868 Merge trunk 2018-02-27 21:55:00 +00:00
jan.nijtmans b31a3b3d70 Merge 8.7 2018-02-27 21:12:00 +00:00
jan.nijtmans 9a809e614a Use mp_isneg() in stead of mp_cmp_d() when the output of this function is simply compared with MP_LT. 2018-02-27 20:48:00 +00:00
jan.nijtmans 0bceead396 No need to set/restore tcl_precision in this test-case 2018-02-27 20:30:00 +00:00
dkf 5b5bd699ff Starting to build the implementation of the private methods and variables. Definition support. 2018-02-25 12:04:55 +00:00
dgp fa036d2b99 merge 8.7 2018-02-23 18:10:09 +00:00
dgp 6faf2feff2 Don't let presence of a string rep prevent optimizations on "pure" bytearrays. 2018-02-23 17:49:23 +00:00
dgp 9090aca429 Remove tests of "end-offset" Tcl_ObjType, taken private. 2018-02-23 17:17:47 +00:00
dgp fe83175465 [8e6a9ac221] Stop false matching with bytearrays. (string-11.55) 2018-02-23 17:02:08 +00:00
dgp 468041eef8 [8e6a9ac221] Stop false matching with bytearrays. (string-11.55) 2018-02-23 17:00:03 +00:00
dgp 85233a4693 [8e6a9ac221] Stop false matching with bytearrays. (string-11.55) 2018-02-23 16:55:49 +00:00
dgp 4ad7747c62 Cease registration of the "end-offset" Tcl_ObjType. Give it file scope.
Remove the updateStringProc that can never be called.
2018-02-23 15:44:10 +00:00
jan.nijtmans 0744802578 merge trunk 2018-02-22 21:17:14 +00:00
jan.nijtmans f5bf130f05 merge core-8-branch 2018-02-22 20:09:33 +00:00
jan.nijtmans 812174d578 Correctly distinguish between internalrep.longValue (in case of boolean) and internalre.wideValue (in case of int). Add comment warning for that 2018-02-22 20:03:56 +00:00
dgp 471d356605 [89dfecb6b7] Make thread IDs in testing commands consistent. 2018-02-22 18:59:59 +00:00
dgp 455b61dce3 [89dfecb6b7] Make thread IDs in testing commands consistent. 2018-02-22 18:57:20 +00:00
jan.nijtmans 701d9dbe89 Use internalRep.wideValue as internal representation for booleans. This simplifies the handling of "int" resp "boolean", sharing its internal representation. 2018-02-15 19:54:00 +00:00
dgp 64ef84994a merge 8.7 2018-02-15 18:30:34 +00:00
jan.nijtmans 2d54b68224 Distingish between boolean and int when checking whether a boolean is true or not: The internal representation might be either long or wideInt. 2018-02-15 18:02:00 +00:00
dgp cce4368ace Revert recent commit that changed behavior of TclGetIntForIndex() for a
small subset of cases of overflow in index arithmetic.  This changed the
public behavior of indexes.

I favor what's being done. I only want to do the complete work on a 
feature branch (coming soon), and consider what aspects may benefit from
a TIP, and how we should future-proof the work against expanding ranges
for valid index values in Tcl 9. This touches on issues partially raised in 
TIP 297.
2018-02-15 17:21:46 +00:00
dgp 7a1cc7e3b3 Guarantee the buffer is large enough it will not be overrun. 2018-02-15 15:58:36 +00:00
dgp 0b90c0b92e Stop seeking out the libieee.a library and linking to it when found. 2018-02-15 15:14:56 +00:00
dgp dda81853f3 Stop seeking out the libieee.a library and linking to it when found.
The latest release of the GNU C library, glibc-2.27 has done away with
the libieee.a library. This prompts a review of why Tcl has been using it.

Since Tcl 8.4.0, Tcl has stopped using the matherr() machinery, so we don't
need it anymore for that.

Since Tcl 8.5.0, Tcl post-processes ERANGE for itself when floating point
underflow or overflow can sensibly produce a 0.0 or Inf result instead of
raising an error. We no longer need to configure the system math library to
silence these reports.

A conseqeunce of this change is that TCL_LIBS will no longer include the
linker option -lieee .  This can potentially change the behavior of programs
that embed libtcl.  If so, though, those same programs are going to also have
behavior changed as the new glibc release gets into routine use. We're doing
those programs a favor by stopping masking the discovery that they need to
be updated.
2018-02-15 15:08:17 +00:00
dgp 0af226b20a merge-mark 2018-02-15 13:52:23 +00:00
pooryorick 919808c6a5 merge pyk-backport-to-8-6
DGP: This checkin creates two memleaks, detected by test compile-12.1

That test leaks the allocations at

    tclOO.c, line 401   AllocObject(...)

    tclOODefineCmds.c, line 8143    Tcl_NewObjectInstance()
2018-02-15 10:52:44 +00:00
pooryorick beff988e79 Rearrange a few lines TclRenameCommand to reduce operations. 2018-02-15 10:23:53 +00:00
pooryorick e8f10bd44e merge pyk-TclOO 2018-02-15 10:14:14 +00:00
pooryorick fa3a1e4638 Udate Tcl_ObjectDeleted to reflect recent changes. 2018-02-15 10:05:27 +00:00
pooryorick 74c5043b5a TclOO: Remove unneeded name manipulation from TclOOCopyObjectCmd. 2018-02-15 09:47:35 +00:00
pooryorick dafcde1702 Fix syntax error in previous commit. 2018-02-15 09:40:40 +00:00
pooryorick e16817b409 Add the check for wrong arguments back to TclOO_Object_Destroy, remove
inadvertant increment of Namespace->refCount.
2018-02-15 09:34:49 +00:00
pooryorick 03a4436237 Streamline TclOO object cleanup routines. 2018-02-15 09:30:29 +00:00
pooryorick e52e074e4f Add TCL_CREATE_NS_IF_UNKNOWN back into Tcl_CreateEnsemble(). 2018-02-15 09:20:50 +00:00
pooryorick 0b5a1c79b7 Fix for [6bca38d59b], TclOO segmentation fault cleaning up objects that that
have mixed themselves into themselves.
2018-02-15 09:10:02 +00:00
pooryorick 0c44c5003d Fix for issue [6cf568a21b]: Tcl_Eval() causes new segfault (TclOO object
creation by qualified name).
2018-02-15 08:53:15 +00:00
pooryorick 2b9b50b436 Minor refactoring of TclOO object reference count booking during object
creation.
2018-02-15 08:38:27 +00:00
pooryorick 80fc86a116 Eliminate some duplicate code in tclOO.c/Tcl_NewObjectInstance(). 2018-02-15 06:45:34 +00:00
pooryorick 1da12398f2 Streamline TclOO object cleanup routines. 2018-02-15 06:35:02 +00:00
pooryorick 4322dab97e merge pyk-command-named-colon 2018-02-15 06:01:09 +00:00
pooryorick 3243dfedd1 Move return type to its own line. 2018-02-15 05:11:15 +00:00
pooryorick fa5058cbca merge (cherrypick): Add missing parenthesis to an expression in TclEnsureNamespace. 2018-02-15 04:56:48 +00:00
jan.nijtmans 494a47ee6e Merge core-8-branch 2018-02-14 22:42:00 +00:00
jan.nijtmans e62743b6ee Move TclGetBooleanFromObj to tclInt.h, so multiple source files can use it. Change some internal variables from int to size_t. 2018-02-14 22:22:00 +00:00
pooryorick ade95255b9 Fix segmentation fault in TclOO that was noted in [16fe1b5807]. Update
coroutine and TclOO object creation routines to use TclCreateObjCommandInNs.
2018-02-14 21:47:57 +00:00
jan.nijtmans f9a0feeb4b fix test-cases, account for differences between Tcl 8.7 and 9.0 2018-02-14 20:59:37 +00:00
jan.nijtmans fcfee868a9 merge core-8-branch 2018-02-14 20:43:51 +00:00
jan.nijtmans 0b96f3fb32 Merge TIP #476 2018-02-14 20:22:45 +00:00
jan.nijtmans 3971514c1b Better range checking in "string index". Add test-case to prove point. 2018-02-14 20:17:22 +00:00
pooryorick e6dd74e90e Lift the restriction on command names names that begin with ":". 2018-02-14 19:07:16 +00:00
pooryorick cf4de002dc New empty branch for other branches that bring changes from core-8-branch back
to core-8-6-branch.
2018-02-14 19:07:14 +00:00
dgp c64afc94f1 merge 8.7 2018-02-14 15:33:29 +00:00
dgp e4364f45cc merge 8.7 2018-02-14 14:50:24 +00:00
dgp 55898c44b9 Fix regression in [expr {0%$bignum}]. 2018-02-14 14:38:15 +00:00
pooryorick b9b319fad2 merge pyk-backport-to-8-6 2018-02-14 14:19:31 +00:00
pooryorick 5d5bd4cd55 Modify TclCreateProc to handle arbitrary argument names, not just ASCII. 2018-02-14 14:05:04 +00:00
pooryorick 1e854210b7 Rewrite documentation in comments for brevity and clarity. 2018-02-14 13:37:27 +00:00
pooryorick 7d25e385a2 Modify test oo-11.6 to not use [self], which is not avaiable until 8.7. 2018-02-14 13:00:28 +00:00
dgp c329006b1a More tests for bignum modulus regressions 2018-02-14 12:52:35 +00:00
dgp 40e9ab2e65 More tests for bignum modules regressions. 2018-02-14 12:52:06 +00:00
dgp dc74da2f56 merge-mark 2018-02-14 12:50:22 +00:00
pooryorick c6eb0cc51d Unit test for issue 3c32a3f8bd, Segmentation fault in
TclOO.c/ReleaseClassContents() for a class mixed into one of its instances.
2018-02-14 12:31:33 +00:00
pooryorick a7c17bc224 Fix bug 3c32a3f8bd, segmentation fault in TclOO.c/ReleaseClassContents()
for a class mixed into one of its instances.
2018-02-14 12:14:38 +00:00
pooryorick 2606a3a7db Fix for issue 9fd5c629c1, TclOO - aborts when a trace on command deletion
deletes the object's namespace.
2018-02-14 10:57:38 +00:00
pooryorick ea6e8c9dcd Fix for issue 9fd5c629c1, TclOO - aborts when a trace on command deletion
deletes the object's namespace.
2018-02-14 10:46:08 +00:00
dgp 01a9d5c7cc merge mark 2018-02-13 21:00:24 +00:00
dgp 4a6163c6a6 test expr-32.7 for bignum modulus range. FAILING for now. Error in TIP 484. 2018-02-13 20:59:36 +00:00
dgp 396c1a637c New test expr-32.7 for bignum modulus range. 2018-02-13 20:51:57 +00:00
pooryorick 1553090bc3 Add remaining wrapper to the NR functions, remaining calls to
TCL_NRAddCallback, and a test for a package require script that yields.

DGP: This checkin introduces a memleak, detected by test compExpr-7.1.
2018-02-12 12:40:34 +00:00
pooryorick f4babdb0ac Adapt signature of PkgRequireCore to conform to Tcl_ObjCmdProc, and call it in
Tcl_PkgRequireProc on an NRE trampoline via Tcl_NRCallObjProc.  Additional
callbacks still needed to fully NRE-enable [package require].
2018-02-12 10:44:44 +00:00
pooryorick 4c79bcbe64 Preparation to provide TclNRPackageObjectCmd: Eliminate the loop in
PkgRequireCore so that TclNRAddCallback can be added at the needed spots.
2018-02-12 10:14:02 +00:00
pooryorick 568724e468 Change the signature of PkgRequireCore in preparation to provide
TclNRPackageObjCmd.
2018-02-11 19:35:27 +00:00
pooryorick ad022e6d3b Remove restriction on defining the class of a TclOO object not explicitly
instantiated from ::oo::class.
2018-02-11 19:29:08 +00:00
pooryorick 5765c1e392 Refine documentation for Tcl_NR* functions. 2018-02-11 19:19:46 +00:00
dgp 967136cc0f merge 8.7 2018-02-09 18:52:04 +00:00
sebres 0031252bf1 small code review: resolve conversion warnings (possible loss of data, signed/unsigned comparison) 2018-02-09 10:09:42 +00:00
jan.nijtmans 4d73b33b87 Fix [9280abbaf57fca3e|9280abbaf5]: Compiling core-8-branch with msvc6 32 bit results in compile error in tclInt.h. Thanks to sebres for the fix. 2018-02-08 20:43:00 +00:00
sebres e2877119cd fixes [9280abbaf57fca3eb40a89403d9d891853209bb6]: compare of LLONG_MAX == LONG_MAX does not possible in preprocessor
(because LLONG_MAX could be complex expression), use `defined(TCL_WIDE_INT_IS_LONG)` instead of.
2018-02-08 14:41:06 +00:00
sebres 451c384456 merge core-8-6-branch 2018-02-08 14:03:59 +00:00
sebres 4f65558ad0 win/nmakehlp.c: removed unneeded dependencies to shlwapi (the same is easily implemented by standard win-api) 2018-02-08 14:02:15 +00:00
oehhar ffae8c82da Do not allow prefixed subcommands for mcutil 2018-02-08 12:45:50 +00:00
oehhar 4cff9271ac Add subcommand mcpreferences to export getpreferences and getsystemlocale functions 2018-02-08 09:49:28 +00:00
oehhar 3f2c5cd5aa TIP 499: Custom locale search for msgcat 2018-02-07 19:25:30 +00:00
jan.nijtmans 5335ab79e5 remove unused stub entries (now that those are macros)
Moved checkin off trunk onto dev branch jn-unused-stubs
because it causes many test suite segfaults, apparently
releated to Tcl_Channels.

Moved back onto trunk. segfaults came from a prior install
of the Thread package that became imcompatible with this
change in the stubs table.  Will followup on TCLCORE.
2018-02-06 22:43:00 +00:00
jan.nijtmans cb2f9cccfb Some more complient API changes 2018-02-06 21:20:00 +00:00
jan.nijtmans 346aa04836 merge trunk 2018-02-06 21:08:35 +00:00
jan.nijtmans 6ce7eb980b merge core-8-branch 2018-02-06 20:54:35 +00:00
dgp 185cdc39c6 TIP 484: Merge 'int' and 'wideInt' Obj-type to a single 'int' 2018-02-06 20:07:13 +00:00
dgp 365ee5bb13 TIP 493: Cease Distribution of http 1.0 2018-02-06 19:55:18 +00:00
dgp f674720166 Merge the NRE-enabling of [package require]. 2018-02-06 19:43:12 +00:00
dgp a37e29cf85 Rework a set of TclString*() routines for consistency. 2018-02-06 19:35:36 +00:00
dgp fde3c52d29 Rework TclStringReverse to consistent standard form. 2018-02-06 19:10:45 +00:00
dgp 99ca63a80a TclStringLast fixed. 2018-02-06 18:33:41 +00:00
dgp 25fcbf685d Rename TclStringFind to TclStringFirst. Repair its operations on bytearrays.
Stop trying to operate on utf-8 until we nail that down better.
2018-02-06 17:26:40 +00:00
pooryorick 2567185fd2 Add remaining wrapper to the NR functions, remaining calls to
TCL_NRAddCallback, and a test for a package require script that yields.
2018-02-06 11:16:51 +00:00
dgp ca5e7c5b63 Revise the TclStringCat() interface to follow a common pattern. 2018-02-05 16:34:28 +00:00
dgp 836fa11775 Revise TclStringRepeat() interface so that in place operations are done only
by caller request. Establish a re-usable pattern.
2018-02-05 16:10:02 +00:00
dgp 3be49723fc Improved overflow prevention. 2018-02-05 13:41:26 +00:00
dgp da7f77f96f Improved overflow prevention. 2018-02-05 13:33:21 +00:00
pooryorick 98887219c2 Refine documentation for Tcl_NR* functions. 2018-02-03 18:15:06 +00:00
José Ignacio Marín 6bd80d67e4 Update TZ info to tzdata2018c. 2018-02-02 09:21:35 +00:00
José Ignacio Marín 93310b9171 Update TZ info to tzdata2018c. 2018-02-02 09:21:05 +00:00
José Ignacio Marín b618278c9f Update TZ info to tzdata2018c. 2018-02-02 09:19:41 +00:00
apnadkarni e905a75c0f Fix INCLUDE_INSTALL_DIR def when building against Tcl source. Bump rules.vc to 1.2 2018-02-02 06:18:24 +00:00
apnadkarni 73eb8eb8d1 Fix INCLUDE_INSTALL_DIR def when building against Tcl source. Bump rules.vc to 1.2 2018-02-02 06:17:05 +00:00
apnadkarni adf9cf5543 Fixed def for INCLUDE_INSTALL_DIR when building against Tcl source. Bumped to 1.2. 2018-02-02 06:07:26 +00:00
jan.nijtmans 66b69b8d36 Change Tcl_Token definition (int -> size_t). Many related code-changes. 2018-01-31 12:18:58 +00:00
pooryorick 77821adfe8 Fix segmentation fault triggered by test package-3.12. Adapt signature of
PkgRequireCore to conform to Tcl_ObjCmdProc, and call it in Tcl_PkgRequireProc
on an NRE trampoline via Tcl_NRCallObjProc.  Additional callbacks still needed
to fully NRE-enable [package require].
2018-01-31 00:07:22 +00:00
jan.nijtmans 8a2f752e51 merge trunk 2018-01-29 15:05:34 +00:00
jan.nijtmans ee2574ddce merge core-8-branch 2018-01-29 15:04:33 +00:00
dgp 4f918b61b0 merge 8.7 2018-01-29 13:18:39 +00:00
jan.nijtmans cc74cb8525 merge trunk 2018-01-29 11:36:22 +00:00
pooryorick 1a98844412 Preparation to provide TclNRPackageObjectCmd: Eliminate the loop in
PkgRequireCore so that TclNRAddCallback can be added at the needed spots.

This checkin creates a crash in test package-3.12 .

Pushing the work off the 8.7.* branch and onto a feature branch for now.
2018-01-28 18:21:09 +00:00
pooryorick 876f2d5b63 Change the signature of PkgRequireCore in preparation to provide
TclNRPackageObjCmd.
2018-01-28 14:37:53 +00:00
pooryorick fa7659336c Remove restriction on defining the class of a TclOO object not explicitly
instantiated from ::oo::class.
2018-01-27 18:17:09 +00:00
dgp 175fe8c23f Fix segfault due to shimmering in [join $l $l]. (Test join-4.1). 2018-01-27 01:45:27 +00:00
dgp a0c6bf8d92 Regression test for shimmering danger in [join]. 2018-01-27 01:38:21 +00:00
jan.nijtmans d98ee54c8d merge core-8-branch.
Also add range checks to Tcl_GetUniChar() and Tcl_Range(), as suggested by Don Porter.
2018-01-26 16:20:29 +00:00
jan.nijtmans 2eba1ce11e Rename (internal) TclNewWideObj macro to TclNewIntObj. Change Tcl_SetIntObj/Tcl_SetLongObj to macro's referencing Tcl_SetWideIntObj (since all of those do the same now) 2018-01-26 13:29:01 +00:00
jan.nijtmans 6cd01fd0f8 Merge core-8-branch. Also some minor performance improvement: Turn Tcl_NewLongObj/Tcl_NewIntObj/Tcl_DBNewLongObj into macro's refering to their WideInt equivalent, since all of those do exactly the same now. 2018-01-26 12:32:12 +00:00
jan.nijtmans e543dbc09c merge core-8-branch 2018-01-26 10:26:06 +00:00
dgp 46e8af13b6 Dup test name 2018-01-25 22:11:34 +00:00
dgp b0fce7a700 merge 8.7 2018-01-25 21:58:51 +00:00
dgp d20d1e603b test suite debugging 2018-01-25 21:35:01 +00:00
dgp 19c0142741 lifetime management of files generated by tests 2018-01-25 21:28:41 +00:00
dgp 189d0a83d2 lifetime management of files generated by tests 2018-01-25 21:15:36 +00:00
dgp aa4c401952 test name continuity 2018-01-25 20:41:26 +00:00
dgp f08ea44564 Dup test names 2018-01-25 20:28:15 +00:00
pspjuth 83df36ac41 Allow -stride 1. 2018-01-25 20:05:54 +00:00
dgp eb9e2858c1 merge 8.7 2018-01-25 16:51:29 +00:00
jan.nijtmans 68214211b7 Document "L" length modifier and (new) %a/%A specifiers. 2018-01-24 12:02:05 +00:00
jan.nijtmans 32aa419154 merge core-8-branch 2018-01-24 10:01:29 +00:00
jan.nijtmans 92aca935b3 merge core-8-6-branch 2018-01-24 10:00:34 +00:00
jan.nijtmans e403ff8f45 Documentation fix: there is no "O" conversion, just "o" for octal. Also, "b" conversions normally don't produce a sign. 2018-01-24 09:59:15 +00:00
jan.nijtmans 8a7371192a merge core-8-branch. Improve documentation (format.n). 2018-01-24 08:47:24 +00:00
jan.nijtmans 6904b0f77f merge core-8-branch 2018-01-23 15:51:00 +00:00
jan.nijtmans 010f610a80 Don't register oldBooleanType any more. And rename "booleanString" to "boolean" in tclBooleanType. 2018-01-23 15:02:28 +00:00
jan.nijtmans 0abda82b1e In Tcl 9.0, don't register oldBooleanType any more. And rename "booleanString" to "boolean" in tclBooleanType. Many extensions (e.g. [http://cyqlite.sourceforge.net/cgi-bin/sqlite/info/451bb2c1f8554eee|sqlite]) still test for "boolean", although that stopped working already for a long time.
In Tcl 8.7, do the same when compiled with -DTCL_NO_DEPRECATED.
2018-01-23 14:52:34 +00:00
dgp 102d58a165 merge mark 2018-01-22 13:43:05 +00:00
dgp 92c0d0a011 typo 2018-01-22 13:38:47 +00:00
jan.nijtmans fb10dc69ee make the old "int" type "static", since it's just used in a single file. 2018-01-22 09:54:40 +00:00
jan.nijtmans 03a71b0706 Put old "int" type back. Not used by Tcl anymore, but this restores compatibility with Tk < 8.6.9 and some extensions: "nsf", "tdbcload", "tclxml" and "VecTcl"
(this workaround was used by "boolean" as well, when its internal implementation changed, there's still an oldBooleanType because of that)
2018-01-22 09:18:19 +00:00
jan.nijtmans a4953f93f4 merge core-8-branch 2018-01-22 08:41:16 +00:00
jan.nijtmans 3c6933efc0 merge core-8-branch. Declare CONST86 as deprecated in Tcl 9.0 2018-01-20 16:08:21 +00:00
jan.nijtmans 1c35ed873a Follow-up to previous commit (TIP #485 implementation). Actually remove Tcl_Backslash and Tcl_EvalTokens when compiling with -DTCL_NO_DEPRECATED. 2018-01-20 16:02:31 +00:00
jan.nijtmans 69868ee129 merge core-8-branch. Now tested as well with new nmake system. 2018-01-20 14:36:36 +00:00
hypnotoad e16df96d28 Fixed a problem where a Windows hack was occuring after it was called in the
tclZipfs.c file, preventing it from compiling properly.
2018-01-19 20:27:15 +00:00
jan.nijtmans a43cab006e No longer use (the undocumented) CONST86 anywhere, just keep the define in tcl.h. 2018-01-19 16:08:02 +00:00
jan.nijtmans 93fa41f6c7 Now really remove Tcl_EvalTokens/Tcl_Backslash as promised in the TIP.
And remove library/tzdata/SystemV/* which contains non-standard timezones. See: [d3c5f2eb2ff63f10] They were originally gone since the tzdata2014f update, but it's unwise to do that in a patch release.
Some documentation updates.
2018-01-19 15:17:45 +00:00
dgp bed15f1d81 merge 8.7 2018-01-18 14:05:07 +00:00
jan.nijtmans ac67b57981 merge core-8-branch 2018-01-18 09:46:29 +00:00
stu eb5da6ae82 OpenBSD now has AI_ADDRCONFIG. 2018-01-17 19:01:03 +00:00
jan.nijtmans 4786f9814b clean-up some more remainings of the Itcl hack. Taken over from "novem". 2018-01-17 16:01:42 +00:00
hypnotoad 608373fcb1 Modifications to allow the mounting of zip file systems from data blocks
Added a new stubs entry to mount a data block as a zip file system
2018-01-17 15:56:32 +00:00
jan.nijtmans d695e02d2f Remove obsolete documentation (belonging to now-removed functions). Remove obsolete 8.4 bytecodes. And a few other (internal) macro's which are no longer in use. 2018-01-17 14:17:21 +00:00
jan.nijtmans 1c58e29da2 Remove Tcl_CaseObjCmd from tclInt.h as well (was missing in previous commit) 2018-01-17 12:56:22 +00:00
jan.nijtmans ed6aa022a6 TIP #485 implementation, Tcl 9.0 part: Realy remove code which was declared deprecated in 8.7 2018-01-17 12:45:01 +00:00
jan.nijtmans 7ea11c7f98 TIP #485 implementation, Tcl 8.6 part: If Tcl is compiled with -DTCL_NO_DEPRECATED, all Deprecated API (as in the TIP) will be gone. 2018-01-17 11:47:37 +00:00
jan.nijtmans e755aba59f merge core-8-6-branch (typo's) 2018-01-17 10:07:42 +00:00
jan.nijtmans 5fea88381c typo's (found by Gustaf Neumann). Thanks! 2018-01-17 10:06:30 +00:00
hypnotoad a866c42f19 Modifications to index zip file systems by mountpoint, and separate the process
of mounting a zip archive from the process of indexing its contents. This work
is progress towards being able to pass a data block to the zipfs system
as a new file system to be mounted.
2018-01-17 01:09:07 +00:00
hypnotoad 3502aebe10 Tweaks to the tclZipfs.c file to allow the same C source to be used both
in the core and as a static package for external shells (Via TEA)
2018-01-16 23:25:50 +00:00
oehhar 7c60d44ce6 Comment updated 2018-01-16 14:53:41 +00:00
oehhar e89d1e331e Solve case where msgcat is called within a class definition script (works only for 8.7) 2018-01-16 14:13:14 +00:00
jan.nijtmans 9a892a33b7 merge core-8-branch 2018-01-16 08:40:47 +00:00
jan.nijtmans 8e6fe27ecc merge core-8-branch 2018-01-15 11:41:56 +00:00
oehhar e841295386 Install msgcat 1.7 in library folder 8.6 instead 8.5. It uses tailcall and will not work with 8.5 2018-01-13 17:17:39 +00:00
oehhar 87c12599bf Test numbering and naming corrected 2018-01-13 17:14:22 +00:00
oehhar eaacc9bb56 Changed msgcat version from 1.6.2 to 1.7.0 -> this is not a patch release 2018-01-13 16:44:38 +00:00
oehhar ecaec63f48 Extended command msgcat::mcexists by switch "-namespace ns" to explicitly specify namespace 2018-01-13 15:23:38 +00:00
jan.nijtmans f0b9b9fbb6 merge core-8-branch 2018-01-12 16:30:03 +00:00
oehhar e1ffd3f005 Implement the "mcn" command as "mc" with explicit namespace. 2018-01-12 14:52:25 +00:00
oehhar 2cfe8bb561 Use the test "[namespace which self] ne "::oo::Helpers::self"" to check if we are within an object (undocumented test proposed by dkf on clt 2018-01-12 2018-01-12 14:13:03 +00:00
oehhar e9f2695255 replace "return [uplevel 1 [list [namespace origin ..." by tailcall 2018-01-12 14:03:04 +00:00
jan.nijtmans 0019582fd2 merge core-8-branch 2018-01-12 11:18:48 +00:00
jan.nijtmans c8219a9a29 Fix [11ae2be95d]: tip-389 branch: string range errors with code points greater than U+FFFF 2018-01-12 10:03:58 +00:00
oehhar 1fda13591a Corrected test cleanups 2018-01-11 16:46:09 +00:00
hypnotoad 9947048fbd Tweaks to zipfs.test 2018-01-11 16:45:52 +00:00
jan.nijtmans 27e7f096b2 merge core-8-branch. Remove left-over debugging code. Test-case string-5.21 still fails. 2018-01-11 15:59:17 +00:00
jan.nijtmans 244885a03e merge core-8-6-branch 2018-01-11 15:45:20 +00:00
jan.nijtmans 45e646472d Fix behavior of Tcl_GetRange() and "string range" regarding surrogates, when Tcl is compiled with -DTCL_UTF_MAX=4. Partial fix for bug [11ae2be95dac9417]. Also, fix typo. 2018-01-11 15:44:05 +00:00
jan.nijtmans eb3422673f Add test-cases for bug [11ae2be95dac9417], and make a start fixing it. Almost works. 2018-01-11 14:11:38 +00:00
oehhar 3b5858bcd2 TIP490: oo for msgcal: new solution enable any command for oo, new command mcpackagenamespacege 2018-01-10 23:17:43 +00:00
jan.nijtmans d34c6b6526 merge core-8-branch 2018-01-10 14:33:54 +00:00
jan.nijtmans 2a8fce94bd merge core-8-branch 2018-01-10 14:03:26 +00:00
jan.nijtmans 48d6a20861 Re-implement Tcl_WinTCharToUtf/Tcl_WinUtfToTChar in pure win32 api, even for TCL_UTF_MAX=3. We can do that now safely, because of the changed handling of valid 4-byte UTF-8 characters in the previous commit. 2018-01-10 14:02:03 +00:00
jan.nijtmans 04d3db5592 Don't use TclUtfToUniChar here: it doesn't give any advantage over Tcl_UtfToUniChar 2018-01-10 09:32:51 +00:00
jan.nijtmans 3889f63614 merge core-8-branch 2018-01-10 08:27:03 +00:00
jan.nijtmans 498f069f0e Fix [https://core.tcl.tk/tk/info/00a27923ee26437611e1ed83f96e15b6caabcd8b|00a27923ee]: (Tcl part, remaining is in Tk) text/entry dysfunctional when pasting an emoji on MacOSX.
This changes the handling of incoming valid 4-byte UTF-8 sequences: Those are no longer split in 4 separate characters (as was done for invalid byte sequences) but replaced by a single ' replacement character' .
2018-01-10 08:25:13 +00:00
hypnotoad 37b48e808c Fix tests dependent on other tests in zipfs.test
Add a workaround for the fact that dynamic libraries called out from a non-install
location can't be located and mounted in time to be a candidate for tcl_library
when running under the constraints of "make test"
2018-01-09 18:10:06 +00:00
hypnotoad 3fc7771456 Pulling changes from core-8-branch 2018-01-09 16:28:11 +00:00
jan.nijtmans 48456596ff (partial) fix for [https://core.tcl.tk/tk/info/00a27923ee26437611e1ed83f96e15b6caabcd8b|00a27923ee]: text/entry dysfunctional when pasting an emoji on MacOSX.
Don't handle incoming valid 4-byte UTF-8 characters as invalid byte sequences (since they aren't), but as being the Unicode replacement character.
2018-01-09 11:15:14 +00:00
dkf 6d9902632c Some refactoring and tidying up of comments. 2018-01-09 00:10:22 +00:00
pooryorick fafc11d6e0 Merge pyk-TclOO branch. See [90657479e8] 2018-01-08 18:27:57 +00:00
pooryorick 4a5058fc1b Udate Tcl_ObjectDeleted to reflect recent changes. 2018-01-08 18:21:40 +00:00
pooryorick b40ed15606 Rearrange a few lines TclRenameCommand to reduce operations. 2018-01-08 17:36:00 +00:00
pooryorick 7e4261e22c Rearrange a few lines TclRenameCommand to reduce operations. 2018-01-08 17:03:07 +00:00
jan.nijtmans eb1212a3c1 merge core-8-6-branch 2018-01-04 13:01:18 +00:00
jan.nijtmans 063db11523 (cherry-pick): Use http 2 instead of http 1 for Safe Base testing. 2018-01-04 13:00:22 +00:00
jan.nijtmans 26b5bf3eca (cherry-pick): Use http 2 instead of http 1 for Safe Base testing. 2018-01-04 12:58:31 +00:00
dgp 904582dd30 merge 8.7 2018-01-04 02:40:00 +00:00
dgp 6c799d891d Minimal fixes to stop the [package files] machinery writing to freed mem.
This contribution needs a careful review from someone who actually knows
how Tcl_Preserve, etc. work.
2018-01-04 02:32:46 +00:00
dgp 7aa147800f Minimal fixes to stop the [package files] machinery writing to freed mem.
This contribution needs a careful review from someone who actually knows
how Tcl_Preserve, etc. work.
2018-01-04 02:23:37 +00:00
dgp 32f3dce79d merge 8.7 2018-01-03 15:11:25 +00:00
pspjuth fc03549d34 Doc for lsearch -stride 2018-01-02 23:05:25 +00:00
pspjuth 54590627ee Add -stride to lsearch. TIP#351 2018-01-02 22:03:02 +00:00
hypnotoad b533731c50 Modifications to clean up warnings on compile 2017-12-29 21:41:00 +00:00
hypnotoad 983b089edb Removing the standalone pkgIndex.tcl. There is enough stuff that needs to be
manually edited in the init.tcl script for new releases as it is, there is no
sense in having yet another file to edit.

Marking which distributed packages are safe to load in a safe interpreter
2017-12-29 20:40:29 +00:00
pspjuth 651697f7cd Refactored lrange to common function. 2017-12-29 18:58:01 +00:00
dgp daa36e9a1b Use http 2 instead of http 1 for Safe Base testing. 2017-12-29 17:47:50 +00:00
dgp b0898beca6 Remove http 1.0 tests. 2017-12-29 17:38:10 +00:00
dgp a922e9fd15 Remove http 1.0 files from fossil management. 2017-12-29 16:54:50 +00:00
dgp 6631e46bd3 Remove handling of http 1.0 package files from Makefiles. 2017-12-29 16:49:47 +00:00
hypnotoad 47c7771af1 Pulling changes from core-8-branch 2017-12-29 15:13:23 +00:00
pspjuth 0f6d3fd959 Optimise lrange for unshared object. 2017-12-28 23:54:57 +00:00
jan.nijtmans 1402f26fc8 New Tcl_GetIndexFromObjStruct signature using size_t 2017-12-28 23:23:22 +00:00
jan.nijtmans 69384ff89c Fix compilation using -DUSE_TCLALLOC=1 2017-12-28 22:49:15 +00:00
jan.nijtmans 3a84b4db7e merge trunk 2017-12-28 21:59:35 +00:00
jan.nijtmans 815ebb9a0f merge core-8-branch 2017-12-28 21:17:22 +00:00
jan.nijtmans d08f08a24d merge core-8-branch 2017-12-28 21:16:13 +00:00
jan.nijtmans 4a038240c4 merge core-8-6-branch 2017-12-28 21:15:20 +00:00
jan.nijtmans ad43c617e3 Fix bug introduced in [0dd0d14489258621] (only for TCL_UTF_MAX > 3): If len parameter = -1, returned size includes terminating 0-byte. So, account for that.
Also, fix some comments which were not accurate any more, now that Windows 95/98 is not supported any more.
2017-12-28 21:14:40 +00:00
jan.nijtmans 7a13be75b6 merge core-8-branch 2017-12-28 20:29:10 +00:00
jan.nijtmans 7172ae9071 merge core-8-branch 2017-12-28 18:53:23 +00:00
jan.nijtmans a27cc004d2 merge core-8-6-branch 2017-12-28 18:51:12 +00:00
jan.nijtmans 301f6bcb83 Fix handling of surrogates (when TCL_UTF_MAX > 3) in Tcl_UtfNcmp()/Tcl_UtfNcasecmp()/TclUtfCasecmp(). Backported from core-8-branch, where this was fixed already. 2017-12-28 18:49:24 +00:00
jan.nijtmans 9a7ce78e96 Make Tcl_WinTCharToUtf/Tcl_WinUtfToTChar work when TCL_UTF_MAX > 3, mainly when sizeof(Tcl_UniChar) != 2. 2017-12-28 18:45:16 +00:00
jan.nijtmans ca634be831 merge core-8-branch 2017-12-28 16:53:34 +00:00
jan.nijtmans 69be965a23 change ClientData -> void * in a lot of places (mainly header files) 2017-12-28 11:32:40 +00:00
jan.nijtmans 3408294224 Merge trunk.
Rename Tcl_MemAlloc and friends back to Tcl_Alloc, as this renaming turns out not to be necessary.
Make everything compile/run with TCL_MEM_DEBUG=1 (a few signatures were still not correct)
2017-12-27 21:41:31 +00:00
jan.nijtmans e71f41cf89 merge core-8-branch.
Re-implement Tcl_WinTCharToUtf/Tcl_WinUtfToTChar using only win32 API.
2017-12-27 20:24:13 +00:00
pooryorick b0e6ac7da9 merge core-8-branch 2017-12-26 17:27:28 +00:00
pooryorick 63224df965 TclOO: Remove unneeded name manipulation from TclOOCopyObjectCmd. 2017-12-26 12:54:00 +00:00
pooryorick 9a9b619c9f TclOO: Remove unneeded name manipulation from TclOOCopyObjectCmd. 2017-12-26 12:27:14 +00:00
apnadkarni b067895cc4 Merged core-8-branch: replace ifdef TCLDIR with compare against empty string 2017-12-26 03:33:35 +00:00
apnadkarni 0b3bf9e30d Merged core-8-6-branch: replace ifdef TCLDIR with compare against empty string 2017-12-26 03:32:05 +00:00
apnadkarni 82cd662f00 Safer to compare TCLDIR against "" rather than ifdef as recursive nmakes
can pass TCLDIR as defined but with an empty value.
2017-12-26 03:30:22 +00:00
jan.nijtmans 1dd89810eb merge core-8-branch 2017-12-23 20:22:54 +00:00
jan.nijtmans 9977b3e79c merge core-8-branch 2017-12-23 20:18:01 +00:00
jan.nijtmans e754f70125 merge core-8-branch 2017-12-23 18:41:29 +00:00
jan.nijtmans cae732bd8d merge core-8-6-branch (changes file only) 2017-12-23 18:40:21 +00:00
jan.nijtmans f2f7b85f88 merge release 2017-12-23 18:33:36 +00:00
apnadkarni 2a5955ee50 Merge nmake rules 1.1 2017-12-23 08:05:02 +00:00
apnadkarni 444ba0a874 Merge nmake rules 1.1 2017-12-23 08:02:20 +00:00
apnadkarni 71df313773 Look for Tcl and Tk import libraries with or without "t" suffix convention
when building extensions. Bump nmake rules version to 1.1 accordingly.
2017-12-23 07:56:49 +00:00
jan.nijtmans 9694587a1a merge trunk 2017-12-22 15:52:08 +00:00
jan.nijtmans 264c508ca4 merge core-8-branch 2017-12-22 15:48:07 +00:00
jan.nijtmans 189c6453b4 Change a few (internal) refCount/mask variables to unsigned type. 2017-12-22 15:45:05 +00:00
jan.nijtmans 53795bd199 merge core-8-branch 2017-12-21 13:26:56 +00:00
jan.nijtmans 5a190dd003 Remove use of compiler option "opt:nowin98". Don't use "t" as suffix any more when building extensions (but still use it for Tcl and Tk). 2017-12-21 13:23:38 +00:00
jan.nijtmans 7fdcf0c76d merge-mark 2017-12-21 07:51:08 +00:00
jan.nijtmans 5bcb4bc9a0 merge-mark 2017-12-21 07:50:27 +00:00
pooryorick 28361a2bfe Further fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a
deletion trace deletes its namespace: segmentation fault.
2017-12-20 18:28:10 +00:00
pooryorick c1f84789ba Fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a deletion
trace deletes its namespace: segmentation fault.
2017-12-20 18:26:40 +00:00
pooryorick 5e11793221 Further fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a
deletion trace deletes its namespace: segmentation fault.
2017-12-20 18:25:08 +00:00
pooryorick 7835ba29c7 Further fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a
deletion trace deletes its namespace: segmentation fault.
2017-12-20 18:22:59 +00:00
jan.nijtmans 8bafabac98 merge trunk 2017-12-20 13:38:17 +00:00
jan.nijtmans a15b801bfb Remove the Tcl_FindHashEntry/Tcl_CreateHashEntry stub entries, as those are actually macro's. 2017-12-20 12:30:23 +00:00
jan.nijtmans 1b40a62611 Change hash/index/mask fields to type "unsigned int", because that's how hash values are generally stored. This eliminates the need for PTR2UINT/UINT2PTR in various places. 2017-12-20 12:02:34 +00:00
pooryorick dc40e6f797 Fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a deletion
trace deletes its namespace: segmentation fault.
2017-12-20 11:28:25 +00:00
pooryorick 2bfe68441a Fix for issue [ba1419303b4c]: Delete a namespace for an ensemble having a deletion
trace deletes its namespace: segmentation fault.
2017-12-20 09:19:59 +00:00
dgp 82512215ff [586e71dce4] Exeception handling at level #0 by EvalObjv 2017-12-19 21:00:55 +00:00
dgp b6f5c15189 [586e71dce4] Exeception handling at level #0 by EvalObjv 2017-12-19 21:00:17 +00:00
dgp 1725b74695 merge 8.6; update changes 2017-12-19 20:53:27 +00:00
dgp e10cd2e0a5 [586e71dce4] Exeception handling at level #0 by EvalObjv 2017-12-19 20:48:52 +00:00
jan.nijtmans 34c238c152 merge core-8-branch 2017-12-19 15:46:25 +00:00
jan.nijtmans 07c71d17a2 Somewhat better backwards compatibility on 64-bit platforms. 2017-12-19 15:20:32 +00:00
dgp f4cc39572c update changes 2017-12-19 14:46:31 +00:00
jan.nijtmans 051a7ec3ae merge core-8-branch 2017-12-19 12:26:54 +00:00
jan.nijtmans a430544f4a merge core-8-branch. Also change some internal refCount's from int to size_t. 2017-12-19 12:23:19 +00:00
jan.nijtmans ee66488c36 Make TclEnsureNamespace() MODULE_SCOPE. Also change some refCount fields from type "int" to "unsigned int" for increased range. 2017-12-19 11:23:13 +00:00
jan.nijtmans f64bba0499 Minor simplification on Cygwin, since we only support Windows NT now 2017-12-19 11:21:33 +00:00
jan.nijtmans dbe18af9ea No need any more to check for "Windows NT" here, since the minimum is XP now. 2017-12-18 14:33:11 +00:00
dgp 9acbab2c0e merge 8.6 2017-12-18 14:06:37 +00:00
jan.nijtmans 52dc6e55e5 merge core-8-6-branch 2017-12-18 13:58:05 +00:00
jan.nijtmans 0fb81cb5dd (cherry-pick): Added assoc, ftype and move as auto_execok shell built-ins on Windows. 2017-12-18 13:56:30 +00:00
jan.nijtmans 0a2389d0ab merge core-8-branch 2017-12-18 11:48:35 +00:00
jan.nijtmans 03e581e857 merge core-8-6-branch. Remove win/coffbase.txt, which isn't used any more. 2017-12-18 11:47:35 +00:00
jan.nijtmans e0360a8c34 Add win/rules-ext.vc and win/targets.vc to "make dist". Reported by Paul Overmeier. Thanks! 2017-12-18 11:41:31 +00:00
hypnotoad 72af38dd32 Pulling changes from core-8-branch 2017-12-16 03:33:44 +00:00
hypnotoad 7f1c241ea2 Update the config.test with new keys needed for zipfs 2017-12-16 03:30:58 +00:00
hypnotoad 45a3c74a04 Removing static package declaration of zipfs. 2017-12-16 03:24:21 +00:00
hypnotoad 71cf0dba40 Re-arranging code and providing forward prototypes to allow the C infrastructure of
Zipfs to be activated from withing the first call to TclZipfs_Mount(). This keeps up
from having to expose TclZipfs_Init in the stubs table.
2017-12-16 03:22:04 +00:00
jan.nijtmans 4a98f5042e merge-mark 2017-12-15 21:28:35 +00:00
jan.nijtmans aecff8b1e7 Revert a few more (int -> size_t) transitions, which could effect extensions (such as Itcl 3.4) which use internal Tcl header files. Better wait until 9.0 for this.
What we _can_ do is change some (internal) fields to 'unsigned': that doubles the epoch range without further danger. Thanks, Don, for pointing this out!
2017-12-15 21:27:14 +00:00
jan.nijtmans 1bcaf97bfd merge trunk 2017-12-15 19:55:16 +00:00
dgp 62545de5ce merge mark 2017-12-15 17:04:26 +00:00
dgp 67f6f5cdb1 Revert the (int -> size_t) transition of the "cmdEpoch" field of
the struct Command that was part of [ff3f6a12a8d099ef], and related changes.

This change broke the ability of Itcl 3.4 built against Tcl 8.6 headers
to successfully [load] into and operate in a Tcl 8.7 interp.

"Command" is a private struct, and Itcl 3 should have respected that, but
it has not, and changing the size of the cmdEpoch field broke the ability
of Itcl 3 to operate on later fields of the struct, notably the deleteProc,
which it makes extensive use of.

I believe we should keep the change in the Tcl 9 sources.
2017-12-15 16:50:50 +00:00
jan.nijtmans 603e23c2a9 merge core-8-branch 2017-12-15 16:08:14 +00:00
jan.nijtmans ab6e69444f Merge TIP #488 implementation.
Some clean-up in tommath implementation (remove internal stub entries which are no longer needed)
2017-12-15 15:02:42 +00:00
jan.nijtmans 4fb66d5d55 Mark TclPrecTraceProc() as deprecated, and remove it when compiling with -DTCL_NO_DEPRECATED. See TIP #488 2017-12-15 14:46:11 +00:00
jan.nijtmans 3f03f8189e Oops, couldn't build tclWinPanic.o. Fixed now. 2017-12-15 13:04:15 +00:00
jan.nijtmans c576cbec93 merge core-8-branch. Fully functioning now, including with the new vc-reform implementation. 2017-12-15 12:55:59 +00:00
jan.nijtmans 5c4f8d88b5 fix comment 2017-12-14 14:38:30 +00:00
jan.nijtmans 9c5c1a721f merge core-8-branch. Fully tested now, works fine. 2017-12-14 13:41:37 +00:00
dgp 50bb6253da merge 8.6 2017-12-14 13:32:50 +00:00
jan.nijtmans 556dc3036e Fix (harmless) compiler warning with Visual Studio 2017-12-14 12:02:13 +00:00
hypnotoad 2756d01872 Pulling changes from core-8-branch 2017-12-13 15:52:05 +00:00
pooryorick 3ddcb1cfb5 Fix syntax error in previous commit. 2017-12-13 12:56:02 +00:00
apnadkarni 8bc8d823bb core-8-branch merge: Use nmakehlp -L to locate directories 2017-12-13 10:34:58 +00:00
apnadkarni 191ea171cb core-8-6-branch merge: Use nmakehlp -L to locate directories 2017-12-13 10:31:02 +00:00
apnadkarni 48549d55b0 Updated nmake system to make use of the new nmakehlp -L option for
locating dependencies.
2017-12-13 10:03:54 +00:00
apnadkarni 0ebe3d394d Add -L option to nmakehlp to locate directories 2017-12-12 17:34:13 +00:00
apnadkarni 137a89f1e2 Add -L option to nmakehlp to locate directories 2017-12-12 17:33:21 +00:00
apnadkarni 8c866ee6be Add -L option to nmakehlp to locate directories 2017-12-12 17:32:21 +00:00
pooryorick 0239e7e77f Add the check for wrong arguments back to TclOO_Object_Destroy, remove
inadvertant increment of Namespace->refCount.
2017-12-11 23:50:22 +00:00
apnadkarni 5501e78098 Merge from core-8-branch - install stubs and headers where present 2017-12-11 16:42:41 +00:00
apnadkarni dddf400b7e Merge from core-8-6-branch - install stubs and headers where present 2017-12-11 16:40:30 +00:00
apnadkarni c220b0dcfa Allow standard targets to be selectively disabled.
Automatic install for extension stubs and public headers if present.
Print installation dir, remove useless partial print of preprocessor defines.
2017-12-11 16:26:24 +00:00
jan.nijtmans bf868c1c56 Initial implementation of TIP #491. Not tested yet. 2017-12-11 14:19:48 +00:00
pooryorick 2555e0d7e6 Streamline TclOO object cleanup routines. 2017-12-10 21:45:26 +00:00
jan.nijtmans 5de1c8c6a5 merge core-8-branch 2017-12-10 14:39:00 +00:00
jan.nijtmans dfeacc8edb Fix [040586323610be22f8617962377324f4ddc9bc02|0405863236]: wrong field checked in struct pollfd in TclUnixWaitForFile 2017-12-10 14:35:02 +00:00
pooryorick e58661a87e Ensure that an automatically-named TclOO object has the same name as its
namespace.
2017-12-10 00:01:01 +00:00
jan.nijtmans 5b605792cb merge core-8-branch.
Remove stub entry for TclWinGetPlatformId(), as it is no longer needed. Is a macro now.
2017-12-09 16:13:58 +00:00
jan.nijtmans 9ef7f0a940 merge core-8-6-branch 2017-12-09 15:32:46 +00:00
jan.nijtmans 5cddfdcda6 Undo latest change to tcl.rc, since the autoconf-based windows build doesn't know about PRJLIBNAME 2017-12-09 15:31:58 +00:00
apnadkarni 5724764152 TIP477 merge: reformed nmake build system 2017-12-08 16:54:18 +00:00
apnadkarni 54ae4feac8 TIP477 merge: nmake build reform 2017-12-08 15:27:49 +00:00
apnadkarni a2c5ea2c08 Merge TIP 477 implementation 2017-12-08 13:54:42 +00:00
jan.nijtmans ae26eec096 merge 8.7 2017-12-07 12:36:16 +00:00
jan.nijtmans a3daf1a6d1 TIP #487: Stop support for Pre-XP Windows 2017-12-07 12:14:23 +00:00
dgp 6c313a5846 update changes 2017-12-07 02:01:30 +00:00
dgp bbaba520ab changes WIP 2017-12-06 21:59:13 +00:00
dgp a0a62d119d merge 8.6 2017-12-06 21:03:02 +00:00
dgp 2623503549 merge 8.7 2017-12-06 20:48:49 +00:00
dgp 7573551ccb Plug memleak recently put into [package require]. 2017-12-06 20:48:12 +00:00
dgp 5d11ad1e8a Plug memleak recently put into [package require]. 2017-12-06 20:46:47 +00:00
dgp cd525c7bb1 Plug memleak recently put into [package require]. 2017-12-06 20:44:32 +00:00
dgp a7bb7b19d6 merge 8.7 2017-12-06 20:03:07 +00:00
dgp 4644a04ee3 merge 8.6 2017-12-06 20:02:46 +00:00
dgp 0af956fe7e merge 8.6 2017-12-06 19:58:40 +00:00
dgp 9ba4b4f901 [0e4d88b650] Added enough refcounting to stop make valgrind complaints about
"Invalid read".  This is not a complete fix. Things are still broken.
A working system of Namespace lifetime management looks like an 8.7 project.
2017-12-06 19:57:59 +00:00
jan.nijtmans cf3348e41c (cherry-pick from core-8-6-8-rc): Duplicate test names 2017-12-06 16:04:22 +00:00
jan.nijtmans acb6a88df5 doc fixes 2017-12-06 15:40:52 +00:00
dgp 7b04f399b0 Duplicate test names 2017-12-06 15:30:27 +00:00
dgp 3aab0c568b Start RC branch for Tcl 8.6.8 2017-12-06 15:27:28 +00:00
dgp 1e64c9f8b2 Adapt the bytearray accommodation of Tcl_CharLength() for 8.7+. 2017-12-06 13:28:48 +00:00
dgp 21877b851c Adapt the bytearray accommodation of Tcl_CharLength() for 8.7+. 2017-12-06 13:28:12 +00:00
dgp b68bab17c0 [ce3a211dcb] Failed file normalize when tail is empty string. 2017-12-06 13:07:23 +00:00
dgp d7ed325913 [ce3a211dcb] Failed file normalize when tail is empty string. 2017-12-06 13:06:47 +00:00
dgp 07aa7381a9 [ce3a211dcb] Failed file normalize when tail is empty string. 2017-12-06 13:05:51 +00:00
jan.nijtmans a49d61a64c merge-mark "novem-bighash": just mark that the contents of this branch are already integrated in the memory-API branch. 2017-12-06 13:02:49 +00:00
dgp bb1c5fe833 [ce3a211dcb] Failed file normalize when tail is empty string. 2017-12-06 13:02:32 +00:00
jan.nijtmans a69614b432 merge 8.7 2017-12-06 12:24:26 +00:00
jan.nijtmans 3f1dfde45f Don't do same test twice 2017-12-06 12:17:33 +00:00
jan.nijtmans c15cc5c510 merge 8.7 2017-12-06 12:10:35 +00:00
jan.nijtmans 99e890b52c merge core-8-branch 2017-12-06 12:00:24 +00:00
dgp b6b032fc3b [4f6a1ebd64] Stop crash when same value passed to the -map and -subcommands options of ensemble configuration. 2017-12-05 15:59:09 +00:00
dgp 72f0f0b346 [4f6a1ebd64] Stop crash when same value passed to the -map and -subcommands options of ensemble configuration. 2017-12-05 15:52:55 +00:00
dgp f3af86c67e [4f6a1ebd64] Stop crash when same value passed to the -map and -subcommands options of ensemble configuration. 2017-12-05 15:27:21 +00:00
dgp 3eef9fcea1 Factor clearing of ensemble subcommand table into utility routine. 2017-12-05 15:12:05 +00:00
dgp 906cf353b2 [4f6a1ebd64] Stop crash when same value passed to the -map and -subcommands options of ensemble configuration. 2017-12-05 14:57:05 +00:00
dgp 8a44c35e8c Another revised fix, much closer to sebres' patch now. 2017-12-05 14:36:33 +00:00
apnadkarni 3e34d38b2d Use PRJ_PACKAGE_TCLNAME instead of PROJECT when generating TEA based pkgindex 2017-12-05 14:29:47 +00:00
dgp 92f8ce13df [4f6a1ebd64] Different fix for the problem. Re-order the filling of the
subcommand table so there is no longer a conflict where multiple intreps of
a single value are sought. If the mapDict and exportList are the same,
then each key in the mapDict is known to be an element of the exportList
without needing to check.
2017-12-04 18:36:14 +00:00
jan.nijtmans 71c032c816 merge trunk 2017-12-01 15:03:46 +00:00
jan.nijtmans 200910b9c1 merge core-8-branch. Various cleanup: unused structure names, unused #defines. Change some "epoch"-related fields from int to size_t. Nothing functional. 2017-12-01 13:53:51 +00:00
jan.nijtmans f0d821a83c merge core-8-6-branch 2017-12-01 12:48:26 +00:00
jan.nijtmans b8fbe8c1d3 Fix [4f51e1c5dcf75de22f5907f7b66361e4bcab02e2|4f51e1c5dc]: patch to correct linker flag sequence 2017-12-01 12:47:12 +00:00
jan.nijtmans 0bd09c4106 remove many test-cases related to tcl_precision 2017-12-01 12:24:25 +00:00
jan.nijtmans ff91f80124 TIP 488: Remove tcl_precision 2017-12-01 11:55:28 +00:00
jan.nijtmans 9b47336cbd merge core-8-branch 2017-12-01 11:33:27 +00:00
jan.nijtmans e802927981 Remove stub entries for Tcl_EvalObj()/Tcl_GlobalEvalObj(). Since those functions are actually macro's translating to Tcl_EvalObjEx(), those stub entries don't serve any purpose any more. 2017-12-01 11:03:43 +00:00
jan.nijtmans 1a237e67df Simpler solution for Itcl 3.4 build (compatibilty) problem. Thanks to Don Porter for bringing this to my attention! 2017-12-01 10:38:04 +00:00
dgp 9d4d161834 merge 8.7 2017-11-30 17:29:55 +00:00
dgp db726dc570 [5808081213] Permit all bytearrays (including impure ones) to report length without shimmering 2017-11-30 17:21:12 +00:00
dgp 4bbfdee3db [5808081213] Permit all bytearrays (including impure ones) to report length without shimmering 2017-11-30 17:10:37 +00:00
jan.nijtmans 88233497ab merge core-8-branch 2017-11-30 16:18:54 +00:00
jan.nijtmans b96b6a46ba merge core-8-branch 2017-11-30 16:08:03 +00:00
jan.nijtmans 0efada5548 Eliminate use of certain unnecessary struct names. Also white-spacing. Nothing functional. 2017-11-30 16:03:01 +00:00
jan.nijtmans 111f52def6 merge-mark 2017-11-30 15:27:45 +00:00
jan.nijtmans 99798b2202 Fix build of test-suite, after previous commit 2017-11-30 15:24:39 +00:00
jan.nijtmans 9dd792a540 8.[67] -> 9.0 in a few more places 2017-11-30 14:48:03 +00:00
jan.nijtmans 20bbe0a790 merge core-8-branch 2017-11-30 14:38:32 +00:00
jan.nijtmans f327b7e9dc merge core-8-6-branch.
Provide compatibility macro's, compensating for the internal stub table change, so Itcl 3.4 builds again. Thanks to Don Porter for bringing this to my attention!
2017-11-30 14:36:16 +00:00
jan.nijtmans d7d31d6041 Don't provide the setFromAnyProc through the invalidRealType objType. This is a Tcl internal type, extensions shouldn't be able to convert their own Tcl_Obj to this. This shouldn't have been exposed to begin with. Tcl itself never calls it this way. 2017-11-30 14:14:01 +00:00
jan.nijtmans 94b624f11c merge core-8-branch 2017-11-30 13:23:10 +00:00
jan.nijtmans 72998869a3 Fix [8e1e31eac0fd6b6c4452bc108a98ab08c6b64588|8e1e31eac0]: lsort treats NUL chars strangely. Also fix various initializations, which only make a difference when TCL_UTF_MAX == 4.
Add new test-cases which demonstrate the fix. For TCL_UTF_MAX == 4, surrogates will now be handled as expected as well when sorting.
2017-11-30 13:14:43 +00:00
pooryorick c47ba70f45 Add TCL_CREATE_NS_IF_UNKNOWN back into Tcl_CreateEnsemble(). 2017-11-29 18:35:51 +00:00
dgp 5a9014a650 Follow header file conventions. 2017-11-29 15:19:04 +00:00
sebres e68b491806 Cherry-picked test-cases from [046a5af026]: fix for issue [4f6a1ebd64]: ensemble: segmentation fault when -subcommand and
-map values are the same object.
2017-11-29 13:59:42 +00:00
jan.nijtmans a6a61c4ca6 merge core-8-branch 2017-11-29 12:32:38 +00:00
jan.nijtmans 4190501ec7 merge core-8-6-branch 2017-11-29 12:28:21 +00:00
jan.nijtmans e87d0bcdf4 Fix Tcl_UtfFindFirst()/Tcl_UtfFindLast(), which were broken by [83c0c569d6]. Not detected, because those functions aren't used anywhere in Tcl.
So, added new test-cases, makeing sure this doesn't happen again.
2017-11-29 12:27:22 +00:00
pooryorick c032f5043e Fix for [6bca38d59b], TclOO segmentation fault cleaning up objects that that
have mixed themselves into themselves.
2017-11-29 12:01:21 +00:00
jan.nijtmans 7ecb945209 Merge core-8-branch. Also, use a different value for TCL_STUB_MAGIC when TCL_UTF_MAX>4. 2017-11-29 11:49:49 +00:00
jan.nijtmans 79b5a0a716 merge core-8-6-branch 2017-11-29 11:05:15 +00:00
jan.nijtmans 4fc9a4c991 Update some functions in tclUtf.c to handle surrogate pairs when TCL_UTF_MAX == 4. Also update documentation to distinguish better between "Tcl_UniChar" and "Unicode character": Those are not necessary the same when TCL_UTF_MAX == 4.
No change when TCL_UTF_MAX == 4 or TCL_UTF_MAX == 6.
2017-11-29 11:04:20 +00:00
jan.nijtmans 03c66864aa Fix [8e1e31eac0fd6b6c4452bc108a98ab08c6b64588|8e1e31eac0]: lsort treats NUL chars strangely 2017-11-29 09:49:31 +00:00
jan.nijtmans 3af16acbcb Treat invalid UTF-8 characters in the range 0x80-0x9F as cp1252: See [https://en.wikipedia.org/wiki/UTF-8]. To be added to TIP #389 2017-11-29 08:59:49 +00:00
jan.nijtmans eef0b72b5e merge core-8-branch 2017-11-29 08:41:05 +00:00
hypnotoad 9b22762d4c Pulling changes from core-8-branch 2017-11-29 01:59:41 +00:00
hypnotoad 0951ca5344 Closing leaf 2017-11-29 01:59:12 +00:00
pooryorick 8396e878da Fix for issue [6cf568a21b]: Tcl_Eval() causes new segfault (TclOO object
creation by qualified name).
2017-11-28 23:33:14 +00:00
hypnotoad bb48fae153 Pulling changes from the last core-8-branch that doesn't cause a segfault in kits 2017-11-28 18:06:22 +00:00
pooryorick fe65a79d19 Minor refactoring of TclOO object reference count booking during object
creation.
2017-11-28 15:43:41 +00:00
pooryorick a8a602d3ff Eliminate some duplicate code in tclOO.c/Tcl_NewObjectInstance(). 2017-11-27 23:30:57 +00:00
pooryorick 2930169517 Streamline TclOO object cleanup routines. 2017-11-27 19:45:40 +00:00
jan.nijtmans d95ab0247a missed some more failing test-cases 2017-11-27 14:11:16 +00:00
jan.nijtmans 20dedcd841 Fix test-cases in safe.test, failing due to changes in min/max math functions. 2017-11-27 13:52:18 +00:00
hypnotoad ae2707f558 Pulling changes from core-8-branch 2017-11-26 18:27:33 +00:00
pooryorick 14c8dabffe merge (cherrypick): Add missing parenthesis to an expression in TclEnsureNamespace. 2017-11-25 21:40:19 +00:00
pooryorick 811ec68434 Add missing parenthesis to an expression in TclEnsureNamespace. 2017-11-25 18:24:10 +00:00
pooryorick c2e98a86d4 merge pyk-command-named-colon 2017-11-25 16:53:59 +00:00
pooryorick 48fb6e2c88 Fix for issue [4f6a1ebd64]: ensemble: segmentation fault when -subcommand and
-map values are the same object.
2017-11-25 16:36:22 +00:00
tne 99dc87a51d Restoring the Makefile.in for the win/ directory after an unfortunate copy/paste error 2017-11-25 10:54:15 +00:00
hypnotoad 7154cc9c47 Tweak to ensure mount points for zipfs are corralled into the //zipfs:/ prefix space 2017-11-24 11:46:34 +00:00
hypnotoad b3ff8cc20c Pulling changes from Androwish 2017-11-24 11:21:55 +00:00
hypnotoad 2fcfa34fcf Restoring whitespace to tclZipfs.c to improve legibility. 2017-11-24 10:32:10 +00:00
pooryorick 9b1ecce298 Move return type to its own line. 2017-11-23 18:24:09 +00:00
jan.nijtmans ca83d59e10 merge core-8-branch.
now really remove the math-related functions when compiling with -DTCL_NO_DEPRECATED. Also no longer supply Tcl_Value, Tcl_ValueType and TCL_RESULT_SPACE.
2017-11-23 13:56:21 +00:00
jan.nijtmans 160a58238a If compiled with -DTCL_NO_DEPRECATED, remove stub entry for TclWinGetPlatformId() 2017-11-23 12:21:35 +00:00
jan.nijtmans dd0e9cf6b1 Remove more pre-XP stuff. 2017-11-23 12:04:33 +00:00
hypnotoad 2d811a0adf Fixing a goof, Zipfs was looking for the Dll where the installer put the file,
which is not necessarily where the file will be found at runtime.
2017-11-23 11:55:03 +00:00
jan.nijtmans 3c23d21835 Re-base "stop-ce" branch to core-8-branch. This is what will be proposed for 8.7 in TIP #487. 2017-11-23 08:30:10 +00:00
pspjuth 121654ecd8 merge core-8-branch 2017-11-21 22:47:44 +00:00
pspjuth fac696b394 merge pspjuth-cminmax 2017-11-21 22:46:35 +00:00
hypnotoad 09f849cabd Pulling changes from core-8-branch 2017-11-21 22:34:06 +00:00
hypnotoad d997aa477d Added additional functions to the "install" command in tclsh 2017-11-21 18:57:31 +00:00
hypnotoad 8225859a93 Eliminated the need for a preinit script in Tip 430's AppHook.
tcl_findLibrary now knows to scan the dll offered up by [info loaded] to see if
an attached zipfile could possibly contain the files the extension is looking for.
2017-11-21 16:49:24 +00:00
jan.nijtmans 9215c2610c Drop Windows CE support, since it doesn't appear to work anyway. 2017-11-21 14:59:04 +00:00
hypnotoad 35adf8c728 Removing the pool of literal values within the internals of tclZipfs.c. Replaced with
a single pointer to a const string once discovery has sorted out where tcl_library 
is to be loaded from.

Fixed a goof in the build system if tcl is compiled outside of the source directory
2017-11-21 14:21:48 +00:00
jan.nijtmans 4bf4b7d35c merge trunk 2017-11-21 10:16:58 +00:00
jan.nijtmans 119652bd95 deprecate VOID/CHAR/SHORT/LONG (windows-only) as well. 2017-11-21 09:48:36 +00:00
jan.nijtmans 011dd7b0f6 Revert [d874801c57]: putting back "string bytelength". It turns out to be too complicated to take along with the other deprecations in TIP #485 2017-11-21 09:13:08 +00:00
tne 334149646f Fixes to "make clean" to do a better job of cleaning up zip files and vfs directories
Fixed a type that was keeping minizip from building
2017-11-21 04:26:37 +00:00
hypnotoad d8a921174e Added an implementation of tinydir.h, and spliced it into minizip to allow
minizip to recurse directory structures (and get us out of having to feed `find`
via autoconf)
2017-11-21 04:07:45 +00:00
tne d7b40297d2 Final tweaks to make "./tclsh install" work properly on Windows
NOTE: We still seem to be screwing up minizip on MinGW. the `find . -type f` substitution is not working
2017-11-21 01:14:05 +00:00
hypnotoad 9ef614086a Typo fixes for minizip 2017-11-21 00:41:04 +00:00
hypnotoad 6b40a5dc5a Added a new function to the Zipfs: TclZipfs_TclLibrary, which returns a previously
discovered /library file system from a zip archive, performs the search to see
if the current dll has one (and return that), or NULL if zipfs cannot locate
/library.

Injected a call to [zipfs tcl_library] (which invokes TclZipfs_TclLibrary) inside
if interp.c as the first command to try to locate Tcl_Library (if a preinit
script hasn't already pointed one out to us.)
2017-11-21 00:36:55 +00:00
tne 3cd8b86e50 Change to TclZipfs_AppHook to accomidate Windows 2017-11-20 23:34:21 +00:00
hypnotoad d2fc7a6ed5 Fixing the quoting for arguments to minizip 2017-11-20 22:45:35 +00:00
hypnotoad 12a14f4954 Updating tcl.m4 in windows to fix a typo 2017-11-20 21:29:57 +00:00
tne 1f34b918b9 Removing debugging printf() statement 2017-11-20 19:35:40 +00:00
tne 4a8bb308e8 Fixes to determing the dll location on Windows using GetModuleFileName() 2017-11-20 19:21:12 +00:00
hypnotoad 3640513caf Autoconf fixes 2017-11-20 18:08:12 +00:00
hypnotoad 4e97c16367 Modifications to allow the Tcl build system to exploit either a native zip
executable in the path or a tclsh that understands the new "install" keyword
from the command line

Added a new file to /library which is run when the user executes "tclsh install ..."

Embedded in installer.tcl is a facility for building zip archives
2017-11-20 17:09:44 +00:00
jan.nijtmans 52b098ca11 Deprecate support for macro's like CONST, CONST84, _ANSI_ARGS_, INLINE, TCL_VARARGS 2017-11-20 16:26:03 +00:00
jan.nijtmans 82877a8aa3 merge core-8-branch. Deprecate support for "string bytelength" 2017-11-20 16:01:05 +00:00
jan.nijtmans 61536390c5 Fix executable flags 2017-11-20 13:05:36 +00:00
jan.nijtmans 3a7618f91e merge core-8-branch 2017-11-20 12:58:54 +00:00
jan.nijtmans d0e9170c39 Remove TclCopyChannelOld() function. Should have been part of [b03c4194f001be0b|this] earlier commit. 2017-11-20 12:13:29 +00:00
jan.nijtmans a1bc5b8a2b If Tcl is compiled with -DTCL_NO_DEPRECATED, remove a lot of (internal) stub entries which correspond to functions which will be removed in Tcl 9.
This commit should have been part of [7849f573c0e7d758|this] earlier commit. 
No effect when Tcl is not compiled with -DTCL_NO_DEPRECATED.
2017-11-20 12:07:08 +00:00
jan.nijtmans c19490026d Re-base to core-8-branch: This change is fine as-is for Tcl 8.7, I wouldn't recommend it for 8.6 (even though it's only for the changed error-message) 2017-11-20 10:30:02 +00:00
jan.nijtmans 75a121d773 merge core-8-branch 2017-11-20 10:23:13 +00:00
jan.nijtmans bc3e198cba Fix error-message for min/math functions: "to" -> "for", for consistancy with the error-messages for other math functions. 2017-11-20 10:15:59 +00:00
jan.nijtmans adc8a8bbdf merge core-8-branch 2017-11-20 09:28:02 +00:00
jan.nijtmans b946ce971f Fix [e058307eef73cf21cf6805ad7c778e1024f9eb7d|e058307eef]: Use of values.h breaks build of Tk trunk on macOS 2017-11-20 08:58:39 +00:00
pspjuth c2eeda3f09 Changed math functions min and max to C implementations. 2017-11-19 18:40:13 +00:00
hypnotoad 280b6aa62e Added handling to allow Tclsh to intercept a zip file fed as the first command line argument, and open it as a kit 2017-11-19 18:16:43 +00:00
pooryorick 75924256c1 Fix segmentation fault in TclOO that was noted in [16fe1b5807]. Update
coroutine and TclOO object creation routines to use TclCreateObjCommandInNs.
2017-11-19 00:06:51 +00:00
hypnotoad fe346634a7 Pulling changes from core-8-branch 2017-11-18 20:28:20 +00:00
tne 1d444f5610 Now that UNC paths work correctly on Windows, removing the platform specific zipfs mount point for windows 2017-11-18 20:25:25 +00:00
hypnotoad 30938251a2 Adjust the rule to look for libtcl_XXX.zip ONLY in the directory that contains
the executable or the install location for tcl. The directory adjacent copy
is only looked for and mounted in an install location version cannot be located.
2017-11-18 20:21:13 +00:00
aspect 157e55c7bc Reserve paths matching //[^/]*: for VFS mount points, and prevent calling
native filesystem ops during normalization for them.  This is permitted by UNC
standards (which do not allow : at the end), and should prevent observed slow
[glob] operations (and others) on Windows when using such paths.
2017-11-18 17:07:48 +00:00
aspect d8a0c08bbc add some tests for join and normalize 2017-11-18 17:04:03 +00:00
aspect 3730061388 fix zipfs tests 2017-11-18 17:02:08 +00:00
hypnotoad b171f5cc41 Added documentation for the zipfs root command and working of TclZipfs_AppHook 2017-11-18 12:21:35 +00:00
tne 02a019458f Updated zipfs tests to recognize the mount points are different on different platforms 2017-11-18 11:59:20 +00:00
hypnotoad b59255450b Added a pool of literal strings to zipfs to manage constants that are being belched out by the file system.
Created a separate mount point for Unix and Windows, with a new "zipfs root" command to tell the user which
location to use for their platform
2017-11-18 11:48:08 +00:00
pooryorick 42c80667fd Lift the restriction on command names names that begin with ":". 2017-11-17 23:42:16 +00:00
pooryorick 3c942c50d9 Fix [16fe1b5807]: namespace ensemble command named ":" is mistakenly given the
empty string as its name.
2017-11-17 22:30:06 +00:00
hypnotoad c6d82079ea Added a package manifest to init to allow core distributed packages to
auto-populate [package ifneeded] on startup
2017-11-17 17:23:01 +00:00
jan.nijtmans 2ea8f0fe98 merge core-8-branch. Fix some Tcl_UniChar initialization, in case TCL_UTF_MAX == 4 2017-11-17 16:08:49 +00:00
apnadkarni 335305de9c Added back nothreads option. 2017-11-17 15:46:23 +00:00
jan.nijtmans b832920adb merge core-8-branch 2017-11-17 15:34:01 +00:00
jan.nijtmans 48047bb120 merge core-8-6-branch 2017-11-17 15:30:02 +00:00
jan.nijtmans b44ffcf5e2 Fix [fab92486a1b05ba6f7cfe8677da95b9efb3beff0|fab92486a1]: Windows error 14 "Out of memory" mapping to Posix EFAULT "Bad address in system call argument" feels wrong 2017-11-17 15:29:07 +00:00
jan.nijtmans ff436137df Fix [fab92486a1b05ba6f7cfe8677da95b9efb3beff0|fab92486a1]: Windows error 14 "Out of memory" mapping to Posix EFAULT "Bad address in system call argument" feels wrong 2017-11-17 15:28:09 +00:00
hypnotoad 52d32b1033 Integrating fixes from aspect that make the //zipfs:/ mount point viable, and
also allow one archive to be mounted in multiple locations
2017-11-17 12:54:56 +00:00
hypnotoad f85da9c9fd Pulling changes from core-zip-vfs 2017-11-17 12:39:06 +00:00
hypnotoad f20b58c6a9 Pulling changes from core-8-branch 2017-11-17 12:29:40 +00:00
hypnotoad 9513859f8c Closing a fork 2017-11-17 12:28:37 +00:00
aspect f81c2ae724 fix [glob] handling of leading // 2017-11-17 11:53:19 +00:00
jan.nijtmans 42236b435f Fix ignore-glob versioned setting (something went wrong in previous merge). Also convert rules-ext.vc and targets.vc to CRLF line-endings. 2017-11-17 11:35:26 +00:00
jan.nijtmans a27501598a merge core-8-6-branch 2017-11-17 11:27:13 +00:00
jan.nijtmans 466e0f29c3 TIP #422, Tcl 9.0 part: Don't Use stdarg.h/va_list in Public API 2017-11-17 10:50:02 +00:00
aspect 7c1f63bb60 clean up stray unused dstrings 2017-11-17 10:24:45 +00:00
jan.nijtmans 28017c14e3 TIP #422, Tcl 8.7 part: Mark all *VA functions as deprecated. They will be removed in Tcl 9.0. 2017-11-17 10:23:14 +00:00
aspect 4515103846 whitespace consistency 2017-11-17 10:21:41 +00:00
aspect 87d37d3101 Zipfs: Nix AbsolutePath() and most uses of CanonicalPath(). Tcl_FSNormalizePath is to be trusted. 2017-11-17 10:17:47 +00:00
aspect da76cd286c Zipfs: Use //zipfs:/ as mount point. Use Tcl_FSNormalizePath() on the way in to most VFS operations. Add some tests. 2017-11-17 08:39:31 +00:00
jan.nijtmans ac3259b669 Suggested patch for [4f51e1c5dc]: patch to correct linker flag sequence. Same change done for a few other platforms where it might matter. 2017-11-17 08:32:16 +00:00
apnadkarni 5560b9198b Check for existence of targets.vc, not rules.vc to determine nmake support dir. 2017-11-17 07:05:23 +00:00
apnadkarni 51319d2cae Add PRJ_PACKAGE_TCLNAME and other minor changes.
Also:
Change ifdef checks to check for empty string instead.
Quote include paths.
2017-11-17 06:52:48 +00:00
hypnotoad 3c532f6336 Rebuilt the configure files without the call to the missing SC_ENABLE_ZIPFS macro 2017-11-17 04:47:16 +00:00
tne ded3368d3c Final tweaks to get Msys Zipfs build working 2017-11-17 04:45:07 +00:00
hypnotoad e84763748b First pass on the Msys style windows build. Moving Zipfs features closer together in the autoconf 2017-11-17 04:13:48 +00:00
hypnotoad 8079a467a7 Pulling changes from core-8-6-branch 2017-11-17 03:10:54 +00:00
hypnotoad be47788793 Moved Zipfs initialization and path hinting out of tclInterp.c and into
a preinit script populated by TclZipfs_AppHook
2017-11-17 03:09:26 +00:00
jan.nijtmans 9672bba339 Change TclOO epoch fields from int to size_t. 2017-11-16 15:34:14 +00:00
jan.nijtmans fd3fbe8801 Handle Tcl_UtfAtIndex/Tcl_UniCharAtIndex for extended index range. More field fixes. 2017-11-16 13:50:32 +00:00
jan.nijtmans 5534478fa1 re-base "novem-more-memory-API" to trunk. TIP not submitted yet, but upcoming. 2017-11-16 11:17:54 +00:00
jan.nijtmans 5ff5853a6e merge core-8-6-branch 2017-11-16 08:45:54 +00:00
jan.nijtmans 24d7fa6401 No longer document (even though it's only in an example) that Tcl_SavedResult is a struct, and that the internal representation of an int is stored in the object's internalRep.longValue member. That might no longer be true in the future. 2017-11-16 08:42:32 +00:00
jan.nijtmans 65007a4d02 No longer document (even though it's only in an example) that Tcl_SavedResult is a struct, and that the internal representation of an int is stored in the object's internalRep.longValue member. That might no longer be true in the future. 2017-11-16 08:39:41 +00:00
jan.nijtmans 4eed307023 merge core-8-branch. Also fix some test-cases, expecting the existence of "int" objType. 2017-11-15 15:00:25 +00:00
jan.nijtmans 0dd94666f5 Merge dgp's "end-int-registration" branch, but slightly different: In stead of not registering "int", continue to register it as being "wideInt" for Tcl 8.x. This should assure maximum compatibility with Tcl 8.6-based extensions.
In addition, revert some boolean-related changes (keep the longValue usage here in stead of wideValue). And stop registering oldBoolean starting with Tcl 9.
2017-11-15 14:13:09 +00:00
apnadkarni c4d4363abd Loosen restriction on where rules-ext.vc file is located. 2017-11-15 13:18:00 +00:00
apnadkarni 0197a30845 Include PKGNAMEFLAGS in stubscflags as some extension stubs use it 2017-11-15 11:47:16 +00:00
jan.nijtmans de0ff2272e merge core-8-branch 2017-11-15 10:01:18 +00:00
jan.nijtmans 346cce5745 Remove compat/float.h and related machinery. The last system known where this was needed was SunOS-4, which is not supported by Tcl any more for a long ... long time ....
Also, fix a typo in generic/tclInt.h and remove some end-of-line spacing.
2017-11-15 09:42:07 +00:00
jan.nijtmans b9216a9c1f merge core-8-branch 2017-11-15 08:56:25 +00:00
jan.nijtmans e3439b6af2 Change signature of (internal) TclScanElement() function. This saves memory allocation and the possibility for panic's in dict and list handling, requiring 1/4 of memory for internal allocation of temporary storage. No change to external API. 2017-11-15 08:55:18 +00:00
jan.nijtmans 59ebc49f0f Change signature of (internal) TclScanElement() function. This saves memory allocation and the possibility for panic's in dict and list handling, requiring 1/4 of memory for internal allocation of temporary storage. No change to external API. 2017-11-15 08:54:13 +00:00
apnadkarni ca86fd3219 Added default-install-stubs target.
Make presence of nmake support files in extension directory optional
(except for rules-ext.vc). This requires them to only build against
a Tcl with the new nmake build system.
2017-11-15 07:54:08 +00:00
dgp 1ed5a135ed TIP 484 proposes a re-implementation of Tcl's "int" Tcl_ObjType.
Since the new implementation is not consistent with the former one, any
callers of Tcl_GetObjType("int") who are expecting the return value to
point them at something playing by the former rules are at risk of having
their code broken.  In this branch I remove the registation of Tcl's
"int" type, so such callers will get NULL (which they should already be
able to handle) instead of something misleading them into breakage.

Examine this branch and decide if it should be incorporated into TIP 484.
2017-11-14 18:35:22 +00:00
dgp f6a35fe784 merge 8.7 2017-11-14 18:19:05 +00:00
dgp 43f411afeb [5d6de65036] [package require] with [package prefer stable] was not choosing available stable package. 2017-11-14 17:24:00 +00:00
dgp 9f65735813 Repair lost of broken [package prefer] testing. 2017-11-14 17:09:49 +00:00
dgp 2ea108ae28 [5d6de65036] [package require] with [package prefer stable] was not choosing available stable package. 2017-11-14 14:48:21 +00:00
dgp d7b5cde35f [5d6de65036] [package require] with [package prefer stable] was not choosing available stable package. 2017-11-14 14:17:57 +00:00
dgp ba9e81068e [5d6de65036] [package require] with [package prefer stable] was not choosing
available stable package.
2017-11-14 13:36:59 +00:00
jan.nijtmans a35ad3e794 Remove extra.unused2 field from struct Interp. It really is unused ... 2017-11-14 10:00:58 +00:00
aku a7b6d60948 Ticket [5d65e65036]. My fix. Do not skip the second check for stable versions even when the main check fails. Avoided radical changes to the structure (kept single search loop, with selection after). 2017-11-13 18:58:16 +00:00
jan.nijtmans 7dec4a7fc5 merge novem 2017-11-13 15:53:33 +00:00
jan.nijtmans 7590c5df93 Add back Tcl_Backslash(). Will be removed again when TIP #485 is brought in. Also revert some other API changes (unsigned long -> size_t), for which TIP's are still to be written. 2017-11-13 15:34:50 +00:00
jan.nijtmans 7cfe36d9ae merge novem 2017-11-13 11:47:41 +00:00
jan.nijtmans 1ce0780915 merge trunk 2017-11-13 11:25:35 +00:00
jan.nijtmans cd80622d5e merge core-8-branch 2017-11-13 11:17:23 +00:00
jan.nijtmans eb2a9484b8 Merge core-8-6-branch 2017-11-13 11:15:44 +00:00
jan.nijtmans a92e1c508f No longer mark Tcl_EvalFile() as obsolete, since it will continue to be supported in Tcl 9.0 2017-11-13 10:51:39 +00:00
jan.nijtmans 0fc6533fcb No longer mark Tcl_EvalFile() as obsolete, since it will continue to be supported in Tcl 9.0 2017-11-13 10:49:25 +00:00
jan.nijtmans c515382280 merge trunk 2017-11-13 09:43:35 +00:00
jan.nijtmans 26c5e61700 merge tcl-9-cleanup (and also a minor bug-fix from core-8-branch). 2017-11-13 08:59:59 +00:00
jan.nijtmans 01fd6594cf Add a lot of "deprecation" marks to internal API which will be removed in Tcl 9.0 (see also tcl-9-cleanup branch). Extensions still using this API will get a compiler warning, but everything will continue to work fine for all future 8.x releases. 2017-11-13 08:37:55 +00:00
hypnotoad 62fbfd89d7 Pulling changes from core-8-branch 2017-11-11 13:22:35 +00:00
hypnotoad 932afb0105 Improvements to tip430 to embed the /library file system within a shared library
or as a zip archive with a canonical name matching the current patch level

This new version also builds a native executable version of minizip to 
allow archive to be built within make, even when cross compiling

Added a new function TclZipfs_AppHook which implements tip430 core
behavior startups to stock tclsh

Embedding the file system as a zip archive can be defeated with --enable-zipfs=no
2017-11-11 09:18:09 +00:00
jan.nijtmans 752cfbe04c merge core-8-6-branch 2017-11-10 08:49:54 +00:00
jan.nijtmans 1ffeaf24ef Make "string split" and "string is (alpha|graph|...)" work as expected with Unicode chars > U+ffff, when Tcl is compiled with TCL_UTF_MAX == 4. No effect when TCL_UTF_MAX == 3 or TCL_UTF_MAX == 6.
Test-case added for "string split".
2017-11-10 08:40:45 +00:00
jan.nijtmans dfbe0053d1 merge core-8-branch 2017-11-09 16:07:06 +00:00
jan.nijtmans b7e5592df1 Merge core-8-branch. Backout the Tcl_EvalFile changes. 2017-11-09 15:56:04 +00:00
jan.nijtmans 944a3d95ff Rebase back to 8.7 (core-8-branch), since that's what the TIP is meant for. (I see no reason to wait for 9.0) 2017-11-09 14:59:36 +00:00
dgp 29dda71bad merge trunk 2017-11-09 14:44:57 +00:00
dgp de9a7da4ba merge trunk 2017-11-09 14:40:30 +00:00
jan.nijtmans d6acf8cfea merge trunk 2017-11-09 12:52:02 +00:00
jan.nijtmans 0faadee83c merge core-8-branch 2017-11-09 12:51:26 +00:00
jan.nijtmans 78374f18a4 merge core-8-6-branch 2017-11-09 12:50:43 +00:00
jan.nijtmans 729fcd5f09 Make "scan %c" and the internal function ExtendUnicodeRepWithString() work as expected for TCL_UTF_MAX == 4 when handling characters > U+ffff. No effect when TCL_UTF_MAX == 3 or TCL_UTF_MAX == 6 2017-11-09 12:48:54 +00:00
jan.nijtmans c59b3f3bc1 For alpha/beta versions of Tcl, stub-enabled extensions are only allowed to run on the EXACT the same Tcl versions as compiled: The stubs might still be in flux, they are not guaranteed to work on future Tcl versions anyway.
Backported from "novem" (which already had this special protection). For final releases (8.7.0) everything works as before.
2017-11-09 12:37:20 +00:00
jan.nijtmans a037934e21 Get rid of Tcl_DStringTrunc et al, as described in the TIP (Thanks, Don!). 2017-11-09 11:49:10 +00:00
jan.nijtmans 56e7df256a No longer mark Tcl_EvalFile() as obsolete/deprecated. Thanks to all feedback to TIP #485! 2017-11-09 11:04:49 +00:00
jan.nijtmans 429acda3ee Put Tcl_EvalFile back, but then as a macro in terms of Tcl_FSEvalFileEx(). 2017-11-09 10:34:10 +00:00
jan.nijtmans c1f627b31e Fogot to remove the TclWinSetInterfaces() implementation. 2017-11-09 09:02:44 +00:00
dgp 4ed027b7bc merge trunk 2017-11-08 18:58:31 +00:00
dgp 258b9f4333 Also remove panicVA(). 2017-11-08 18:52:33 +00:00
jan.nijtmans a31c699833 Forgot TclpGetTime() 2017-11-08 16:12:29 +00:00
jan.nijtmans 9c9ce91ef5 Tcl-9 huge cleanup: Remove many unused internal functions which do nothing more than occupy the internal stub table. 2017-11-08 15:50:06 +00:00
jan.nijtmans cf4d5a8cfe TIP #485 implementation: "Remove Deprecated API". Based on Tcl 8.7 (core-8-branch). 2017-11-08 11:50:55 +00:00
hypnotoad b2722c42b1 Pairing down the tip#430 branch to only include files and utilities
called out by the tip. Eliminated the header files tclZipfs.h and
zcrypt.h. The only public calls for tclZipfs.h are now in the stubs
table and the contents of zcrypt.h are already part of the minizip
implementation that Tcl keeps around in the compat/zlib/contrib/minizip
directory. tclBootVFS.h hasn't been used by the implementation in a while.

Alos eliminated the mkzip.tcl facility from tools/. The C based mkzip is
much faster and more reliable
2017-11-08 09:41:00 +00:00
jan.nijtmans 91229781db merge trunk 2017-11-08 09:40:33 +00:00
jan.nijtmans ed20823380 merge core-8-branch 2017-11-08 09:38:15 +00:00
jan.nijtmans 12d3a7d307 Change "epoch" field for dicts from "int" to "unsigned int". This doubles the number of available epoch's before overflow. Also make 0 the special value in stead of -1, meaning "dict search done". That also means that epoch counting starts with 1. 2017-11-08 09:37:31 +00:00
dgp dee7abd87b merge trunk 2017-11-08 03:23:35 +00:00
dgp e82d7fb753 compiler warning 2017-11-08 03:02:22 +00:00
dgp 5188d1d927 compiler warning 2017-11-08 02:57:58 +00:00
dgp b8bf04f5ec compiler warning 2017-11-08 02:53:57 +00:00
dgp f31af075d0 compiler warning 2017-11-08 02:50:28 +00:00
dgp 3b989eefe0 merge 8.7 2017-11-08 02:48:47 +00:00
dgp a2d6ec1119 merge 8.6 2017-11-08 02:26:07 +00:00
dgp 2ba5fab30e Modify TclCreateProc to handle arbitrary argument names, not just ASCII. 2017-11-08 02:25:40 +00:00
dgp f74bde3e62 [3298012] Stop RebuildTable asking ckalloc for more than it can give. 2017-11-08 02:23:46 +00:00
dgp 98c6b22c10 TclOO object allocation: Set classPtr to NULL if it wasn't otherwise set. 2017-11-08 02:21:49 +00:00
dgp be0c5786a0 [3298012] Stop RebuildTable asking ckalloc for more than it can give. 2017-11-08 02:18:25 +00:00
pooryorick a982dd11fa Modify TclCreateProc to handle arbitrary argument names, not just ASCII. 2017-11-08 00:39:17 +00:00
dgp fd61a8e89e Attempted bug fix. 2017-11-07 21:32:04 +00:00
pooryorick 2c1224dce7 TclOO object allocation: Set classPtr to NULL if it wasn't otherwise set. 2017-11-07 20:54:02 +00:00
hypnotoad c2dfae0758 Removing kit building facilities. They aren't part of the tip430 spec 2017-11-07 19:51:53 +00:00
hypnotoad 23440fcbd7 Removing patches for Androwish that are not needed for tip430 2017-11-07 19:26:21 +00:00
hypnotoad 399ff79e21 Adding a [file normalize] to zipfs tests that are looking for absolute filenames.
On Linux symlinks can cause a discrepency in what the tests think they are looking for.
2017-11-07 19:13:34 +00:00
hypnotoad 338e92cb28 Updated the zipfs portion of the testsuite to tip430 standards 2017-11-07 18:45:24 +00:00
apnadkarni c7530621ad Fix inclusion of custom resource files to match TIP spec 2017-11-07 16:47:35 +00:00
tne 433dff0c14 Pulling changes from core-8-branch 2017-11-07 16:46:38 +00:00
jan.nijtmans a7ba08158b merge 8.7 2017-11-07 16:31:17 +00:00
jan.nijtmans 42764c99be More code simplifications, with still equal functionality. 2017-11-07 16:16:52 +00:00
dgp 2ad54a6f6e merge 8.7 2017-11-07 15:11:43 +00:00
dgp f941597e43 merge 8.7 2017-11-07 14:28:03 +00:00
jan.nijtmans c1e89d73fd merge core-8-branch 2017-11-07 13:30:08 +00:00
jan.nijtmans d0665d7a12 merge core-8-6-branch 2017-11-07 13:29:28 +00:00
jan.nijtmans ac4fb39a73 Don't use Unicode character \udead in test-cases, because it is an invalid Unicode code-point (lower surrogate). This will cause test-failures with TIP #389. Just use \ud0ad in stead. Also fix some other test-cases which fail for TCL_UTF_MAX == 4. 2017-11-07 13:19:37 +00:00
jan.nijtmans 48b529209c Somewhat simplified implementation of TIP #389, in which the "string length" if characters > U+FFFF is considered to be 2, not 1. 2017-11-07 12:15:30 +00:00
jan.nijtmans c38755a732 Re-base TIP #422 implementation to trunk. Remove Tcl_VarEvalVA() as well. TIP #422 is adapted accordingly. 2017-11-07 09:33:56 +00:00
jan.nijtmans 45808db8dc TIP #422 implementation, Tcl 8.7 part. 2017-11-07 09:08:48 +00:00
jan.nijtmans 47b333303e merge-mark 2017-11-06 15:04:23 +00:00
jan.nijtmans 7417e2c917 merge trunk 2017-11-06 14:55:15 +00:00
jan.nijtmans 27e8f4db3d More tcl8 -> tcl9 renumbering, for example related to the installation of Tcl packages where tcl9 actually can find them. 2017-11-06 14:50:08 +00:00
jan.nijtmans c06751fdf8 Fix version number of Windows Help file (not sure if it's actually used, but better safe than sorry) 2017-11-06 14:46:49 +00:00
pooryorick 9b30058284 Rewrite documentation in comments for brevity and clarity. 2017-11-06 01:33:57 +00:00
dgp 22719c6596 Test case for Bug 5d65e65036. 2017-11-06 00:10:21 +00:00
f.bonnet 6fff25ecbc Fixed stupid Tcl_DecrRefCount bug in TclCleanupChildren with normally terminated processes. 2017-11-05 16:41:11 +00:00
jan.nijtmans cf516b0eb8 merge core-8-branch 2017-11-05 14:35:43 +00:00
jan.nijtmans 6222dc31ab merge-mark 2017-11-05 14:32:27 +00:00
jan.nijtmans 7e1ea05d53 merge trunk 2017-11-05 14:24:46 +00:00
jan.nijtmans 8c4d8a4f14 Merge core-8-branch. More 8.7 -> 9.0 changes as appropriate 2017-11-05 14:21:21 +00:00
jan.nijtmans ded2a79966 update .project file with branch name. Make clear that optparse doesnt work with 8.4 any more 2017-11-05 14:14:23 +00:00
dkf d52223f024 [0d902eadd6] Ensure that [string first] handles ASCII in Unicode correctly. 2017-11-04 00:45:27 +00:00
dkf 4030616bbf [0d902eadd6] Ensure that [string first] handles ASCII in Unicode correctly. 2017-11-04 00:44:14 +00:00
dkf b55d5cc57e Fix for the weird [string first] behaviour. 2017-11-04 00:34:48 +00:00
dkf e4356f7d64 Detected bug in [string first] with unicode. Pat Thoyts found it. 2017-11-04 00:25:43 +00:00
dgp 728286b43f merge trunk 2017-11-03 19:25:33 +00:00
dgp 88451d16ba TIPs 330 & 336 changes to Tcl 9 Implementation 2017-11-03 18:56:33 +00:00
dgp 3691ae66b6 TIP 278 Implementation 2017-11-03 18:44:39 +00:00
dgp 203cbf2ea0 TIP 114 Implementation 2017-11-03 18:39:47 +00:00
dgp b6c2770a30 Merge package tolerances of Tcl 9. 2017-11-03 17:12:47 +00:00
dgp 1a0c2e24eb Bump to 9.0a0 2017-11-03 17:11:13 +00:00
dgp 0480b5d79b Revise a few stray packages not yet ready to tolerate a Tcl 9 bump. 2017-11-03 17:02:49 +00:00
dgp 10a9305777 TIP 345 Implementation. 2017-11-03 16:48:44 +00:00
jan.nijtmans d8596e5583 merge core-8-6-branch 2017-11-03 12:59:07 +00:00
jan.nijtmans 5528e1c1a2 Fix [6f2f83cc149e9918884faffefebc8dfa695f4ea0|6f2f83cc14]: tclWinload.c robustness. And fix a minor possible memory leak in TclSetupEnv() as well. Thanks to Christian Werner for both suggestions, backported from Androwish. 2017-11-03 12:57:15 +00:00
jan.nijtmans 735d38cd7c merge trunk 2017-11-03 12:24:06 +00:00
jan.nijtmans 785f1059e4 merge core-8-6-branch 2017-11-03 12:15:08 +00:00
jan.nijtmans 274ab123a8 Better versions of TclGetIntFromObj and TclGetIntForIndexM macro's, which give advantage for platforms where longs are not ints (e.g. linux64) 2017-11-03 12:14:01 +00:00
dgp ca080daf7f merge trunk 2017-11-02 12:53:06 +00:00
pooryorick d33ee7bc07 Unit test for issue 3c32a3f8bd, Segmentation fault in
TclOO.c/ReleaseClassContents() for a class mixed into one of its instances.
2017-11-01 22:21:50 +00:00
pooryorick 8bb421f959 Fix bug 3c32a3f8bd, segmentation fault in TclOO.c/ReleaseClassContents()
for a class mixed into one of its instances.
2017-11-01 21:05:32 +00:00
dgp 9c75e1c5f8 TIP 422 implementation (rebase of branch novem-remove-va to trunk). 2017-11-01 14:46:28 +00:00
jan.nijtmans 9e2ed8b729 Finally, get rid of tclWideIntType completely 2017-11-01 12:35:40 +00:00
jan.nijtmans adc216698f Eliminate most usage of TCL_NUMBER_LONG, just use TCL_NUMBER_WIDE in stead (since both have the same internal representation now) 2017-10-31 16:40:57 +00:00
jan.nijtmans 1cbd95eeee eliminate most use of (long) type, except for increments 2017-10-31 16:16:46 +00:00
jan.nijtmans db930a501f Only use 64-bit tables for all platforms 2017-10-31 14:48:28 +00:00
jan.nijtmans 2f2459e120 more progress 2017-10-31 14:40:33 +00:00
jan.nijtmans 8fd76cb873 more simplifications 2017-10-31 12:39:16 +00:00
jan.nijtmans c8fbbd8f3e Fix 2 failing test-cases, broken by some earlier commit 2017-10-31 11:37:29 +00:00
jan.nijtmans b0a9f6c55b Simplify implementation of Tcl_SaveResult/Tcl_RestoreResult/Tcl_DiscardResult by no longer assuming that Tcl_SavedResult is a struct. Backported from "novem" branch. 2017-10-31 09:48:57 +00:00
jan.nijtmans b8b341fea6 Fix some pointer arthemeric (only visible on big-endian systems) 2017-10-30 16:46:49 +00:00
dgp 9a322ef016 tidy? 2017-10-30 15:35:58 +00:00
dgp 312263821f tidy 2017-10-30 15:25:36 +00:00
dgp 9e80ee005e tidying 2017-10-30 15:15:06 +00:00
dgp 3aa68b1a0b Patch to make changes to Tcl 9 prescribed by TIPs 330 and 336.
This makes the Tcl_Interp struct fully opaque.
No interp->result or interp->errorline
2017-10-30 14:56:57 +00:00
jan.nijtmans ca470c3d4e more progress in code simplifications 2017-10-30 14:32:52 +00:00
dgp 1d920f34c6 TIP 278 into novem. 2017-10-30 12:48:40 +00:00
dgp 2bc2789f8f TIP 345 into novem. 2017-10-30 12:43:33 +00:00
dgp 6642181b9d Rebase tip-278 branch to workaround CVS conversion woes. 2017-10-30 12:41:21 +00:00
dgp 2ff3ecb534 merge trunk 2017-10-30 12:02:48 +00:00
dgp a67fec7324 merge trunk 2017-10-30 12:02:28 +00:00
jan.nijtmans aad24c7ffc Change (internal) TclFormatInt() signature, so it can handle WideInt's directly. Ongoing simplifications ... 2017-10-30 11:01:28 +00:00
jan.nijtmans fe508fa3b5 Experimental branch meant to eliminate the "wideint" type, just merge it to a single "int" type. No effect on linux64 and similar systems, code simplification for Win64 and 32-bit system. No TIP yet, implementation ongoing. 2017-10-30 08:47:33 +00:00
pooryorick e0578530b0 merge bug-fc1409fc91. 2017-10-30 05:25:19 +00:00
pooryorick a79bc3c8ce Fix for issue 9fd5c629c1, TclOO - aborts when a trace on command deletion
deletes the object's namespace.
2017-10-30 05:19:55 +00:00
dgp c83d36abf0 merge trunk 2017-10-30 03:29:05 +00:00
dgp 30c40c4540 merge 8.6 2017-10-30 03:23:59 +00:00
dgp c5865fcd24 More test rewrites for robust var resolution. 2017-10-30 03:23:28 +00:00
dgp c8342af338 merge 8.6 2017-10-30 03:01:46 +00:00
dgp 1d0751deb7 Revise tests that relied on deprecated variable resolution rules. 2017-10-30 02:55:30 +00:00
apnadkarni 2318b70929 Minor edits 2017-10-28 17:18:58 +00:00
dgp eda3104306 merge trunk 2017-10-27 15:20:19 +00:00
dgp bed6e18d15 merge trunk 2017-10-27 13:12:09 +00:00
dgp fcc5b3486f merge trunk 2017-10-27 13:07:10 +00:00
dgp c668ed46ec oops 2017-10-27 12:57:45 +00:00
dgp 0a3f9ca6fc oops 2017-10-27 12:57:15 +00:00
dgp 261012ce98 Update tests that were still written on the outdated premise that Tcl's encoding subsystem had to initialize starting in the identity encoding. 2017-10-27 12:51:14 +00:00
dgp 2f8bbbe141 Update tests that were still written on the outdated premise that Tcl's encoding subsystem had to initialize starting in the identity encoding. 2017-10-27 12:50:38 +00:00
dgp 4ab9cb5418 Update tests that were still written on the outdated premise that Tcl's
encoding subsystem had to initialize starting in the identity encoding.
2017-10-27 12:23:28 +00:00
dgp 3888c4fda4 merge mark 2017-10-27 12:04:53 +00:00
jan.nijtmans fa2e7e8949 Fix timeout calculation in epoll-based notifier. Proposed fix for [1a6a36d901dedead248ea96df09d5dc159532652|1a6a36d901]. Patch by Lucio Andrés Illanes Albornoz. Thanks! 2017-10-27 07:26:15 +00:00
apnadkarni c324bb3eff Reworked build command macros (MAKEBINCMD, CCPKGCMD etc.) and purged old comments. 2017-10-26 15:07:16 +00:00
dgp 053a74e0fa Create new testing command [teststringbytes] to probe the things that
otherwise require [encoding convertto identity]. adapt encoding-15.3 to use.
2017-10-26 02:08:27 +00:00
fvogel d8cae66217 Fix typo in set-old.test 2017-10-25 17:31:09 +00:00
apnadkarni ff1c348970 Updated comments. 2017-10-25 02:59:46 +00:00
dgp 30c6827ee1 Convert remaining tests to use [testbytestring].
encoding-15.3 still needs replacement for [encoding convertto identity].
That is, some testing command to expose objPtr->bytes.
2017-10-25 02:54:24 +00:00
dgp eb2cfa3e6f Repair Tcl_CreateEncoding(); Modernize [testencoding];
Update most tests toying with identity encoding.
2017-10-25 02:23:12 +00:00
dgp 40d9b81e23 Stop using "identity" as an encoding to test basic functionng of the
[encoding] command. "iso8859-1" is another one always available.
2017-10-24 23:30:35 +00:00
dgp 1552384787 Extend Tcl_CreateEncoding() to be able to create an encoding without
registering it when it has no name.  Then use this to create "identity"
encoding without naming it "identity". Then no one can look it up by that name.
2017-10-24 23:16:23 +00:00
fvogel 40ce2eccbc 'array for' implementation (TIP #421) from Brad Lanam 2017-10-24 21:24:07 +00:00
dkf 9306fa604c Cherrypick: [fc1409fc91] Method cloning needs to be careful with body representations. 2017-10-24 14:11:16 +00:00
jan.nijtmans 16976013d1 merge trunk 2017-10-24 13:59:40 +00:00
jan.nijtmans ef7ea2c390 merge trunk 2017-10-24 13:59:13 +00:00
jan.nijtmans 3303fbcef8 merge trunk 2017-10-24 13:57:21 +00:00
jan.nijtmans d5f679a3f6 Change (internal) refCount field from TclRegexp to type size_t: this allows more references on 64-bit platforms. Remove unused macro "xxx" in regguts.h. Remove superflouous eol-space in oo.test. 2017-10-24 13:56:26 +00:00
Kevin B Kenny 5db79312af Historical change affecting tests: Detroit did not observe Daylight Saving Time in 1967 2017-10-24 13:35:40 +00:00
Kevin B Kenny e532a0de84 Historical change affecting tests: Detroit did not observe Daylight Saving Time in 1967 2017-10-24 13:32:54 +00:00
Kevin B Kenny 745b43f627 Historical change affecting tests: Detroit did not observe Daylight Saving Time in 1967 2017-10-24 13:30:41 +00:00
Kevin B Kenny f18d453679 Historical change affecting tests: Detroit did not observe Daylight Saving Time in 1967 2017-10-24 13:24:25 +00:00
Kevin B Kenny 2332ac45ca Update to tzdata2017c 2017-10-24 13:18:51 +00:00
dkf 634213a9c8 [fc1409fc91] Method cloning needs to be careful with body representations. 2017-10-24 11:25:29 +00:00
dkf 8e537759cf Added test case. 2017-10-24 11:23:54 +00:00
pooryorick fada619052 [fc1409fc91]: TclOO method with non-literal value for body argument causes segmentation fault 2017-10-24 08:38:17 +00:00
dgp 319b71965b backout initial commit; need more care.
Binary writes internally make use of this encoding.  Need to hide it
instead of destroy it.
2017-10-23 17:58:07 +00:00
José Ignacio Marín 4f74d92f32 Update TZ info to tzcode2017c. 2017-10-23 17:12:00 +00:00
José Ignacio Marín 47a0727695 Update TZ info to tzcode2017c. 2017-10-23 17:10:19 +00:00
dgp 45d0977a5c Implementation branch for TIP 345: Kill the "identity" encoding.
This checkin, completely does that.  Bad news is it causes huge failures.
We're still making a lot of use of this encoding, and cannot complete
this TIP until the branch is repaired.
2017-10-23 17:06:57 +00:00
José Ignacio Marín 4407704316 Update TZ info to tzcode2017c. 2017-10-23 16:59:20 +00:00
dgp 172896b15a Implementation branch for TIP 114 - Eliminate Octal Parsing... 2017-10-23 16:20:18 +00:00
apnadkarni fe8915122a Eliminate loimpact and tclalloc options. 2017-10-23 13:53:51 +00:00
jan.nijtmans 5470f13299 tclWinPanic.c is in the \win directory, not in \generic! 2017-10-23 13:47:57 +00:00
jan.nijtmans c0effc5b46 merge trunk 2017-10-23 13:23:08 +00:00
jan.nijtmans e9b584f81b merge core-8-6-branch 2017-10-23 12:10:42 +00:00
jan.nijtmans cdb25d8946 Fix [b58e6897034fc5292c9d36ba8099d9a835c98172|b58e689703]: Return value of 'Tcl_Flush' 2017-10-23 12:09:48 +00:00
apnadkarni 7db056b75a Fully qualify OUT_DIR and TMP_DIR paths so that the test target can
change directories and not break relative paths to the built extension.
2017-10-21 12:14:25 +00:00
apnadkarni 6f23316c4a Added test and shell targets. 2017-10-20 15:32:22 +00:00
dgp d0c85905c4 merge trunk: 2017-10-20 12:34:45 +00:00
dkf 56d6e9480f [1a56550e96] Ensure that method list introspection finds methods from mixins in all cases. 2017-10-19 09:30:16 +00:00
dkf df974e71f9 Oops; put the code in the wrong place. Mixins have priority when deciding method visibility. 2017-10-19 09:28:16 +00:00
dkf 7393032d5e [1a56550e96] Ensure that method list introspection finds methods from mixins in all cases. 2017-10-19 09:24:12 +00:00
dkf 252f75d8c8 Ensure that method list introspection finds methods from mixins in all cases. Use better approach for preventing excessive iteration. 2017-10-19 09:22:05 +00:00
dkf 69030a86c8 [1a56550e96] Mixins aren't being searched correctly by [info class methods -all] 2017-10-18 18:23:38 +00:00
apnadkarni fa7141288f Update RCFILE to PRJ_RCFILE. 2017-10-18 16:04:13 +00:00
apnadkarni 63a9fcf2e7 Fix resource file compilation when makefile specifies PRJ_RCFILE 2017-10-18 16:03:08 +00:00
apnadkarni b6f90aaf1f Add PRJ_MANIFEST to support manifest generation. 2017-10-17 15:01:56 +00:00
hypnotoad fc947a1ad4 Pulling changes from trunk 2017-10-16 20:35:30 +00:00
apnadkarni 4ef03a8950 Fixed reversed check for implicit rules 2017-10-16 12:46:53 +00:00
jan.nijtmans ef82c5073a merge trunk 2017-10-16 12:05:17 +00:00
jan.nijtmans 237b4d22a2 Add support for 'L' length modifier (either long double or mp_int) and 'a'/'A' modifiers (floating point in hex notation) 2017-10-16 11:55:57 +00:00
apnadkarni 823edbf0ab Permit application makefile to define RCFILE.
Change PROJECT_REQUIRES_TK to use value instead of ifdef.
Change MAKERESCMD macro not to specify included input files.
2017-10-15 06:58:20 +00:00
jan.nijtmans a72fed191e fix unixFCmd test-cases, as result of the octal behavior change 2017-10-14 22:52:26 +00:00
dgp 48ebe9c855 merge trunk 2017-10-13 16:39:14 +00:00
dgp 8a910c1a53 Plug some memleaks. 2017-10-13 16:15:52 +00:00
jan.nijtmans 5015dd8a1f Fix missing line (after manual merge-conflict). Fix compiler warning on linux64. 2017-10-13 14:46:26 +00:00
jan.nijtmans 5abbd5b2da Merge trunk. And merge jn-0d-radix-prefix branch in too (too small to be considered separately) 2017-10-13 14:07:47 +00:00
jan.nijtmans 1152be81e6 merge novem 2017-10-12 15:23:34 +00:00
jan.nijtmans b11f15674d merge trunk 2017-10-12 15:21:25 +00:00
jan.nijtmans e7582d10c6 Eliminate variable which is only used once. And a minor end-of-line space reduction. No functional change. 2017-10-12 15:20:42 +00:00
jan.nijtmans aa484cae05 merge novem 2017-10-11 14:09:34 +00:00
jan.nijtmans 33538b8595 merge trunk 2017-10-09 14:28:07 +00:00
jan.nijtmans 5064777d16 merge core-8-6-branch 2017-10-09 14:27:31 +00:00
jan.nijtmans 5b74714749 In nmakehlp -v, return non-0 exit code if version is not found. (taken from vc-reform branch) 2017-10-09 14:25:24 +00:00
jan.nijtmans 15a7950c9e In nmakehlp -v, return non-0 exit code if version is not found. (taken from vc-reform branch) 2017-10-09 14:23:39 +00:00
jan.nijtmans b54c19492b merge trunk 2017-10-09 12:55:09 +00:00
jan.nijtmans c925a86988 Merge core-8-6-branch 2017-10-09 12:54:39 +00:00
jan.nijtmans 75ecb090c6 Add visual-studio related entries to ignore-glob. Taken over from reform-vc branch 2017-10-09 12:53:46 +00:00
jan.nijtmans b8e5e2909e Add visual-studio related entries to ignore-glob. Taken over from reform-vc branch 2017-10-09 12:52:14 +00:00
apnadkarni 0c646bc3d1 Fix RC template dependency to not generate it every time 2017-10-08 16:12:23 +00:00
apnadkarni f4e4349cad Fix htmlhelp generation on 64-bit systems 2017-10-08 14:25:19 +00:00
apnadkarni 9845cc7c9c Add default rc template so extensions do not have to write their own 2017-10-08 13:18:15 +00:00
apnadkarni fdc29e53d3 Was not setting VERSION for extensions. 2017-10-07 17:16:20 +00:00
apnadkarni a0f84e1b73 Fix ignore glob for Visual C++ output directories. 2017-10-07 13:33:13 +00:00
apnadkarni 21379b0cf5 Move standard predefined targets to targets.vc as this allows the master
makefile to modify macros if required before the targets are defined.
2017-10-06 13:38:26 +00:00
apnadkarni 65895760ea Added standard target for generating pkgIndex.tcl.
Added PKGNAMEFLAGS to pass PACKAGE_NAME and PACKAGE_VERSION.
2017-10-05 17:00:39 +00:00
apnadkarni 20730e0afb Added default-pkgindex target and split DISABLE_DEFAULT_TARGETS to
DISABLE_{STANDARD,CLEAN}_TARGETS.
2017-10-05 14:19:50 +00:00
apnadkarni c0295836a8 Add default-* targets 2017-10-04 01:57:51 +00:00
apnadkarni 8c50df7bbf Extract version numbers from TEA files so do not have to be separately defined. 2017-10-03 13:44:49 +00:00
apnadkarni ec0fc7f816 Have nmakehlp return non-0 exit code if version string not located with -V option 2017-10-03 13:41:53 +00:00
jan.nijtmans 7b1579d769 Merge trunk 2017-10-03 09:12:09 +00:00
jan.nijtmans fd6a064ee7 Merge latest 'const'ification changes from libtommath (develop branch, will be in next release). None of those are used in Tcl. 2017-10-03 09:11:05 +00:00
apnadkarni f5c6b07246 Remove use of any macros used in rules.vc from rules-ext.vc
Added USE_WIDECHAR_API to control usage of Windows wide API's.
2017-10-03 08:06:30 +00:00
apnadkarni 35256f809e Introduce rules-ext.vc file for extensions to select most recent rules.vc 2017-10-02 17:09:56 +00:00
jan.nijtmans 6881a1a274 'const'ify all libtommath functions, will appear in next libtommath version. See: pull request [https://github.com/libtom/libtommath/pull/88|88] 2017-10-02 15:22:27 +00:00
apnadkarni 01201582b7 Fix initialization of _TCLDIR and use MAKE*CMD macros in makefile.vc
Fixed initialization of _TCLDIR when it is not defined by caller when
building an extension. _INSTALLDIR is modified AFTER it is used to
initialize _TCLDIR. However, nmake expands late so we have to init
_TCLDIR relative to the *modified* _INSTALLDIR.
2017-09-30 14:11:08 +00:00
apnadkarni 24b65fbe41 Added MAKEEXTCMD macro.
Fixed couple of syntax errors when building extensions.
2017-09-30 08:34:31 +00:00
apnadkarni 457587f033 Added standard macros LIBDIR and DEMODIR. Also set common Tk related names and paths 2017-09-30 06:20:33 +00:00
apnadkarni 78cf383197 Permit definition of implicit rules and standard targets to be disabled 2017-09-29 14:23:17 +00:00
apnadkarni 71c784c8bc Added implicit rule for compiling resources.
Added Tcl import libraries to link macro.
2017-09-29 12:41:02 +00:00
apnadkarni e4269a7140 Updated for Tk compatibility.
Removed extraneous quotes in macro definitions. Macros should be quoted at 
*use* time, not *definition* time.
Added _nostubs versions of pkgcflags and appcflags.
2017-09-29 06:12:04 +00:00
apnadkarni 3734937878 Add pkgcflags, appcflags and stubscflags to reflect different compilation modes.
Packages compile (at least) three types of objects files - the shared library
extension (e.g. tk86.dll), application programs (e.g. wish) and a static 
stubs library (tkstub86.lib). Thus we need to construct three different sets
of compilation flags accordingly.

Also updated makefile header comments to reflect modern usage.
2017-09-28 12:22:41 +00:00
apnadkarni 07c1c221cb Include rules.vc and nmakehlp.c as part of install.
Work toward not having to keep updating extensions with the latest version
of rules.vc and nmakehlp. Extension makefiles can instead use the 
installed files instead.

Also added some basic sanity checks to rules.vc to warn if extensions are
being compiled with options incompatible with those used to build Tcl.
2017-09-26 12:22:42 +00:00
jan.nijtmans 3b96c2260e Remove coffbase.txt and all references to it: It's not recommended by Microsoft any more. 2017-09-26 09:05:47 +00:00
apnadkarni 246e599142 Eliminate obsolete winhelp style documentation and fix Html Help doc build
to work on 64-bit systems.
2017-09-25 17:35:29 +00:00
apnadkarni f1aa04858d Eliminated /base option on linking as not recommended with ASLR 2017-09-25 16:33:20 +00:00
hypnotoad 54bc992b81 Improvements to Tip#430 based on community input. Added a forward declaration of TclZipfs_Init. Added TclZipfs_Mount() and TclZifs_Unmount to stubs table. 2017-09-25 16:23:56 +00:00
apnadkarni 301208c889 Unify build commands with MAKE{LIB,DLL,CON,GUI}CMD macros 2017-09-25 16:23:34 +00:00
apnadkarni b5e3779cf2 Move TCLSH and TCLSH_NATIVE macros to rules.vc 2017-09-25 13:45:34 +00:00
hypnotoad e55f59bd83 Pull changes from Trunk 2017-09-25 13:36:58 +00:00
apnadkarni 56e2bd0be4 Added project-specific include paths and preprocessor defines. 2017-09-25 10:41:22 +00:00
apnadkarni 34cb030c7b Move clean target to rules.vc to avoid repetition in every extension 2017-09-24 14:25:48 +00:00
apnadkarni a91099b33b Move installation dir macros to rules.vc 2017-09-24 12:13:29 +00:00
apnadkarni ad9a3b8b45 Moved generic compiler and linker flags completely into rules.vc so
extensions do not have to repeat the verbage.

Special case Tk as a Tcl extension and add default for locating Tcl source.

Both Tcl and Tk compile with new rules.
2017-09-24 06:03:34 +00:00
apnadkarni c7e43807bf More refactoring. Moved defines that are Tcl-specific to makefile.vc as
rules.vc is common to extensions. Reworked parsing of STATS and CHECKS.
2017-09-23 07:35:32 +00:00
apnadkarni d8e7cf09b1 First step in complete refactoring.
Breaking up into logical sections with comments.
Fix floating point option selection to be the same on debug and release.
Pick up nmakehlp.c from installed Tcl if available when building extensions.
Mods to allow extensions to use the same exact rules.vc file.
2017-09-22 13:26:14 +00:00
jan.nijtmans 99b72814d3 merge trunk 2017-09-22 08:49:19 +00:00
jan.nijtmans b0fe49c36d Make libtommath's "make" work in Tcl environment (for testing). Eliminate internal s_is_power_of_two(), which can better be done inline. Fix tommath.h for _MSC_VER. 2017-09-22 08:48:23 +00:00
apnadkarni a52f0db3e4 Merged core-8-6-branch to pick up 32/64-bit DLL mismatch error message.
Actually already cherrypicked but redoing because that does not show
up on timeline and a full merge recommended on the chat.
2017-09-22 02:17:02 +00:00
apnadkarni 4bf8f43b3a RFE [566a999189] - better error message for 32/64 bit mismatch on load. 2017-09-21 19:05:11 +00:00
apnadkarni d45863129f RFE [566a999189] - better error message for 32/64 bit mismatch on load. 2017-09-21 18:47:45 +00:00
apnadkarni 4f406d752d First cut at making application-independent compile and link flags
common to all extensions defined in a single place - rules.vc -
instead of having each extension cut and paste the same code.
2017-09-20 12:58:59 +00:00
jan.nijtmans 4284797dbb merge trunk 2017-09-20 09:22:29 +00:00
jan.nijtmans 1b28405773 Move fast return from s_is_power_of_two() to mp_div_d(). This saves a function call in the common case where b is not a power of 2. 2017-09-20 09:21:54 +00:00
jan.nijtmans 6a606d16fd merge trunk 2017-09-20 09:09:42 +00:00
jan.nijtmans 65703d1f87 Further astyle formatting of libtommath. No functional changes. 2017-09-20 09:07:35 +00:00
apnadkarni 6d85564696 Disable pointer<->int warnings related to cast between different sizes
There are a gadzillion of these due to use of ClientData and clutter up compiler
output increasing chance of a real warning getting lost. So disable them.
Eventually some day, Tcl will be 64-bit clean.
2017-09-19 16:43:19 +00:00
apnadkarni 071f38c482 Eliminated some obsolete checks (Win98, IA64 etc.) to reduce the noise. 2017-09-19 16:07:14 +00:00
apnadkarni b81c66b4c7 Do not permit nothreads in OPTS as sockets, registry and dde require threading. 2017-09-19 15:12:52 +00:00
apnadkarni 0e5d15e072 Fix mapping of VCVERSION to VCVER. The simplistic calculation no longer
holds for new versions of the compiler. Instead directly use the internal
compiler version for these.
2017-09-19 12:50:25 +00:00
apnadkarni 78a20a11b2 Remove /Gs which enables _chkstk on *every* function call. The normal default
behaviour (without the option) checks only local variable space exceeds
page size. This is what Microsoft recommends.

Also moved -O2 to rules.vc file so as to keep all optimization flags 
in one location. 

Removed optimizations switches subsumed by -O2.
2017-09-19 12:10:25 +00:00
apnadkarni 54431f3360 Create new branch named "vc-reform" 2017-09-19 10:49:37 +00:00
jan.nijtmans 943b46881e Merge trunk 2017-09-18 15:13:40 +00:00
jan.nijtmans 20677d90b8 merge trunk 2017-09-18 14:39:06 +00:00
jan.nijtmans f75f76c9d4 Finish libtommath's constification work. All done (hopefully). And make sure that C preprocessor directives have the '#' as first character on the line. 2017-09-18 14:38:26 +00:00
jan.nijtmans 6f2b60cb33 merge trunk 2017-09-18 12:54:26 +00:00
jan.nijtmans f5ea63343e Another round of libtommath const'ification. To be submitted to the libtommath folks 2017-09-18 12:53:48 +00:00
jan.nijtmans b608ba3fa4 Merge trunk 2017-09-18 10:07:04 +00:00
jan.nijtmans a708ae2da2 Merge libtommath upstream changes (astyle formatting only). No functional changes. All Tcl-specific modifications are kept. 2017-09-18 08:31:55 +00:00
jan.nijtmans d4e73bcab5 re-format everything through astyle. Taken from libtom/libtommath (pull request [https://github.com/libtom/libtommath/pull/85|85]) 2017-09-15 14:44:00 +00:00
jan.nijtmans c1d1afd473 merge trunk 2017-09-15 13:36:31 +00:00
jan.nijtmans 8f339500a2 'const'ify more libtommath functions. All functions in generic/tclTomMath.decls (used by Tcl) are done now. 2017-09-15 13:08:31 +00:00
dgp c0aed167b8 merge trunk 2017-09-14 14:02:47 +00:00
dgp bf01a303da Move new declarations to more conventional place for tidier merging. 2017-09-14 14:02:12 +00:00
jan.nijtmans 17d410dd99 merge trunk 2017-09-14 08:06:34 +00:00
jan.nijtmans 99d940211c Remove some unnecessary #if 0 sections. Fix comments and panic messages. No functional changes. 2017-09-14 08:05:32 +00:00
jan.nijtmans 7b8b406719 Fix [f5da3d30e096a1c3486fbc480a6ece01fcb277a6|f5da3d30e0]: clerical error in comments 2017-09-14 07:42:38 +00:00
jan.nijtmans db3273f346 Fix [f5da3d30e096a1c3486fbc480a6ece01fcb277a6|f5da3d30e0]: clerical error in comments 2017-09-14 07:41:09 +00:00
jan.nijtmans ff718174aa Merge trunk 2017-09-13 10:42:18 +00:00
jan.nijtmans c659b044b1 Make mp_get_long and mp_set_long available to tommath-enabled Tcl extensions. Deprecate the internal TclBNInitBignumFrom* functions, in favor of the official tommath functions with the same purpose. 2017-09-13 10:14:31 +00:00
jan.nijtmans 1d028fa4e9 merge novem 2017-09-11 13:21:44 +00:00
jan.nijtmans 2556e9b109 merge trunk 2017-09-11 11:21:18 +00:00
jan.nijtmans 3e55dbb18c Many 'const' addtions in libtommath where it makes sense. To be submitted back to the libtommath guys. 2017-09-11 10:38:07 +00:00
jan.nijtmans 0d0ab7f829 merge novem 2017-09-10 13:35:18 +00:00
jan.nijtmans 75d248f10f Merge trunk 2017-09-09 16:26:06 +00:00
jan.nijtmans b2446d8d41 Add some more functions from libtommath for availability within Tcl (mainly the 'long long' variants). Add more 'const' keywords there too. 2017-09-08 14:15:13 +00:00
gahr e86e8a501d Be consistent about how I am referred to. 2017-09-08 13:30:29 +00:00
dgp d03a4dcc88 Bump to 8.7a2 to distinguish trunk from 8.7a1 release. 2017-09-08 13:13:15 +00:00
dgp 4ce5b276eb merge release 2017-09-08 12:50:06 +00:00
jan.nijtmans 757012c289 Rebase to trunk 2017-09-08 12:48:35 +00:00
jan.nijtmans 15f27ca8f2 Rebase to trunk 2017-09-08 11:04:34 +00:00
dgp 877e9d6b11 merge trunk; rc1 2017-09-07 12:59:14 +00:00
jan.nijtmans 413fe66650 Fix use of "long long" (manually) in MSVC 2017-09-06 15:02:24 +00:00
hypnotoad c55b8ed591 Pulling changes from trunk 2017-09-05 16:44:09 +00:00
hypnotoad 522456ba98 Removed the package style loader from tclAppInit. Zipfs now loads as part of the interpreter. 2017-09-05 16:33:37 +00:00
dgp ca70072a99 update changes 2017-09-05 15:38:02 +00:00
dgp d9f2bf1d17 merge trunk 2017-09-05 12:41:10 +00:00
jan.nijtmans c4a6da31ec merge trunk 2017-09-04 14:03:39 +00:00
jan.nijtmans c2846c0f5c Merge core-8-6-branch to trunk, especially the 1.6.0 -> 1.6.1 renumbering from msgcat 2017-09-04 14:01:45 +00:00
jan.nijtmans a15279ffd1 Make pkgIndex.tcl from msgcat work for Tcl 9.0 (not really necessary, but for consistancy) 2017-09-04 13:59:04 +00:00
jan.nijtmans b74f59a5b4 merge core-8-6-branch 2017-09-04 12:38:14 +00:00
jan.nijtmans e08c86934d Typo's (Thanks to Gustaf Neumann), nothing functional. 2017-09-04 12:37:04 +00:00
dgp a3dfc55957 [0e4d88b650] Allow command overwrite when deletion callback deletes namespace. 2017-09-02 22:10:59 +00:00
dgp e3f7bc2783 [0e4d88b650] Allow command overwrite when deletion callback deletes namespace. 2017-09-02 22:03:03 +00:00
dgp 564b991088 [0e4d88b650] Allow command overwrite when deletion callback deletes namespace. 2017-09-02 21:48:05 +00:00
dgp 0ff317501d merge 8.5 2017-09-02 21:36:57 +00:00
dgp f42f0060be Add test 2017-09-02 21:14:55 +00:00
dgp 3ec5b35deb Similar fix to Tcl_CreateCommand(). 2017-09-02 20:40:44 +00:00
dgp 7afc6b1c17 Tidy up. 2017-09-02 20:17:26 +00:00
dgp ce58cdff9f [Bug 0e4d88b650] First draft fix. Re-resolve namespace after cmd deletion. 2017-09-02 19:35:22 +00:00
jan.nijtmans 4b9e6d92be Merge core-8-6-branch 2017-09-01 13:49:55 +00:00
jan.nijtmans e28f1eece4 Handle Unicode surrogates correctly in Tcl_AppendFormatToObj() and BuildCharSet(). Only makes a difference for TCL_UTF_MAX=4, when surrogates are used in the format string ... highly unlikely corner-case. 2017-09-01 13:48:56 +00:00
dgp 4ce83fdb43 merge trunk 2017-09-01 01:44:09 +00:00
jan.nijtmans ce32fdecb2 Ignore libtommath/doc directory. Add some VS-related makefiles, useful for testing 2017-08-31 15:07:57 +00:00
jan.nijtmans 29821af817 merge trunk 2017-08-31 13:57:29 +00:00
jan.nijtmans 105a61c09b Merge core-8-6-branch. Remove all git tag information for libtommath, so we don't have useless file differences with every libtommath release. 2017-08-31 13:56:30 +00:00
jan.nijtmans 25b97a7df9 Adapt .fossil-settings/crlf-glob, for 5 libtommath-related files which have crlf ending 2017-08-31 13:43:17 +00:00
jan.nijtmans 432e75210f Undo tag removal (just get libtommath directly from GitHUB), so we don't have useless file changes with every new release 2017-08-31 13:32:52 +00:00
jan.nijtmans 595e613479 (merge-mark core-8-6-branch).
Give state to UtfToUtfProc() and UnicodeToUtfProc() in which the last (intermediate) Tcl_UniChar can be remembered: This way those functions can produce 4-byte UTF-8 sequences built from surrogate pairs if Tcl is compiled with TCL_UTF_MAX=4. For TCL_UTF_MAX=3 and TCL_UTF_MAX=6 this has no effect.
2017-08-31 12:21:43 +00:00
oehhar 2b0e7061f5 http state 100 continue handling broken [2a94652ee1] 2017-08-31 09:46:40 +00:00
oehhar c0e413055e http state 100 continue handling broken [2a94652ee1] 2017-08-31 09:35:52 +00:00
oehhar 11719ccf59 http state 100 continue handling broken [2a94652ee1] 2017-08-31 09:32:05 +00:00
jan.nijtmans fc88994cde merge trunk 2017-08-31 08:41:34 +00:00
oehhar 7c7a396fc5 http state 100 continue handling broken [2a94652ee1] 2017-08-31 06:31:05 +00:00
andy 7aafa756ac Cherrypick string.test [de104ef5ab] 2017-08-30 15:29:16 +00:00
jan.nijtmans 6d8b0c705f Tweak libtommath building, such that it doesn't depend on uint64_t any more. (handle mp_word in the same way as mp_digit) 2017-08-30 12:37:50 +00:00
jan.nijtmans a0fe6c0579 merge trunk 2017-08-30 11:49:41 +00:00
jan.nijtmans faaf0a0fe6 Adapt libtommath's "changes.txt", and other text-files. Adapt bn_mp_read_radix.c to latest libtommaths 'tcl-fixes' commit (harmless for Tcl). 2017-08-30 11:46:33 +00:00
jan.nijtmans 07bcf919d6 Cherry-pick [https://github.com/libtom/libtommath/commit/a0a86c696a7182f8be4b10bb79a1c5c971dc9561]: Merge branch 'tcl-fixes' into develop
Remove many files, which are not used in Tcl.
Modify "changelog.txt", with real release-date of 1.0.1 version
2017-08-30 11:20:19 +00:00
jan.nijtmans f70c0ac860 a few missing bits after previous commit 2017-08-29 21:27:56 +00:00
jan.nijtmans 97d25d7902 Forgot a few files from libtommath 1.0.1 2017-08-29 21:16:54 +00:00
jan.nijtmans c3d5808cdd upgrade to libtommath 1.0.1 (With all Tcl-specific changes - as far as needed - intact) 2017-08-29 20:45:34 +00:00
jan.nijtmans 187a67149b Merge libtommath 1.0.1 final 2017-08-29 20:43:48 +00:00
jan.nijtmans 2d65cb7514 libtommath 1.0.1 2017-08-29 20:39:15 +00:00
jan.nijtmans 92a05930af libtommath 1.0.1 rc2, for test purposes only 2017-08-29 20:25:53 +00:00
jan.nijtmans 1ef0babc38 Fix eol-style (fossil warning: mixed line endings) 2017-08-29 19:55:52 +00:00
jan.nijtmans 92265d56a3 libtommath 1.0.1 rc 2 2017-08-29 19:52:35 +00:00
jan.nijtmans 4264a4f6ab merge-mark 2017-08-29 09:25:17 +00:00
jan.nijtmans a95a7dd265 (cherry-pick): Fix [b50fb21410dababca95baa122964b2e312cb9d8a|b50fb214] : exec redirection to append stdout and stderr to the same file 2017-08-29 09:24:29 +00:00
jan.nijtmans f4c2386551 Merge trunk 2017-08-29 09:19:21 +00:00
f.bonnet 0a8718312d Comments and formatting 2017-08-27 21:25:14 +00:00
f.bonnet 68b53cfb25 Fixed reference counting issue with objects returned by WaitProcessStatus 2017-08-27 15:25:57 +00:00
f.bonnet 935e991786 On Windows, Tcl_Pids now map to dwProcessId instead of hProcess because the system reuses handles of recently terminated processes. 2017-08-27 15:24:22 +00:00
f.bonnet 43c89a019c Refactoring to support all processes and not just detached ones. 2017-08-27 11:05:45 +00:00
ferrieux 2e9194366a Fix [b50fb214] : add to 2>> the same O_APPEND that was added to >> back in 2005. 2017-08-24 16:56:51 +00:00
f.bonnet 57aa77515a Added switches and pid list support to tcl::process status 2017-08-23 19:51:02 +00:00
f.bonnet 8dd2373a08 Refactoring and preliminary implementation of tcl::process (list|status) 2017-08-23 18:31:56 +00:00
jan.nijtmans ce72664606 merge core-8-6-branch 2017-08-22 12:41:18 +00:00
jan.nijtmans 5210283d10 Fix [d2612a2fa193196787aab33bb57f69b1eef9e30c|d2612a2fa1]: Build breaks because of gcc error. Only use "#pragma GCC diagnostic" if the compiler supports this.
Also re-format tclUnixSock.c without further functional changes.
2017-08-22 12:12:11 +00:00
jan.nijtmans 0eb18d8f91 merge core-8-6-branch 2017-08-18 22:06:54 +00:00
jan.nijtmans 29be40bf89 RFE [http://core.tcl.tk/tk/info/6c0d7aec67|6c0d7aec67]: Better surrogate handling for TCL_UTF_MAX==4. No change when TCL_UTF_MAX==3. (This commit is actually meant for androwish, in order to improve surrogate handling for TCL_UTF_MAX==4) 2017-08-18 21:39:16 +00:00
dgp 83cbe41d4c merge trunk 2017-08-18 13:23:34 +00:00
f.bonnet 03470df2ff Completed [tcl::process autopurge] semantics and added [tcl::process purge] implementation along with the necessary internal functions TclpGetChildPid/TclReapPids 2017-08-18 12:49:08 +00:00
f.bonnet 5aaef06572 Added [tcl::process autopurge] flag management with TclProcessGetAutopurge/TclProcessSetAutopurge companion functions. 2017-08-18 07:51:01 +00:00
jan.nijtmans e6336bb806 Merge core-8-6-branch. Update outdated comment (cherry-pick [d5dec2b0514639f44929cbbba9c4130798a8a54a|d5dec2b051]) 2017-08-17 22:50:16 +00:00
jan.nijtmans a04094e9a5 Adopt some harmless changes from the 'irontcl' branch. Left 2 changes behind which I'm not so sure about (but I could be convinced ...). Ticket with explanation would be appreciated! 2017-08-17 22:26:48 +00:00
jan.nijtmans 922d8a71a5 merge core-8-6-branch 2017-08-17 21:56:51 +00:00
jan.nijtmans 13d9910fd6 '#if' -> '#ifdef' in tclUnixPort.h. Suggested by Gustaf Neumann. Reduces the number of gcc warnings, when compiling Tcl with -Wundef. Harmless. 2017-08-17 21:52:42 +00:00
f.bonnet 0b8e964f45 Fixed line endings 2017-08-17 13:03:48 +00:00
f.bonnet c86a23de04 Basic scaffolding for tcl::process 2017-08-17 13:02:27 +00:00
dgp 277f101d7f [f2336c116b] Move pragmas to make gcc happy; it is pickier than clang. 2017-08-14 15:33:03 +00:00
Joe Mistachkin a50a381b04 The 'clean' target should delete the generated 'nmhlp-out.txt' file as well. 2017-08-13 22:31:19 +00:00
Joe Mistachkin e513ec3916 Always define '_USING_V110_SDK71_', in case targeting the pre-Windows 8.x SDKs. 2017-08-13 22:15:30 +00:00
Joe Mistachkin 89fcfadbbf Support cross-compiling Tcl for 'Win32 on ARM' using Visual Studio. 2017-08-13 22:05:25 +00:00
andy 89ce4defb5 Correct longstanding typo in continue man page 2017-08-12 19:45:04 +00:00
dgp ad9bc7297d Add 8.7 -only changes to the changes file. 2017-08-10 19:14:15 +00:00
dgp 0079285837 Update outdated comment. 2017-08-10 17:34:31 +00:00
dgp 8ccd8d10ef Backport [array names -regexp] should support backrefs 2017-08-10 17:03:53 +00:00
dgp aedd652645 Bring changes up to the 8.6.7 release. 2017-08-10 14:56:23 +00:00
dgp 4056a4dc4b Release candidate branch for Tcl 8.7a1. 2017-08-10 14:29:11 +00:00
dgp ffaeeeddaa merge 8.6 2017-08-10 14:17:01 +00:00
dgp c2982f8f62 Silence compiler warning in --disable-threads build 2017-08-10 13:28:48 +00:00
dgp 587206a660 merge mark 2017-08-09 16:38:35 +00:00
dgp 545f5e64be merge mark 2017-08-09 16:29:45 +00:00
dgp 385b618c74 merge release 2017-08-09 16:28:33 +00:00
dgp 3a07a6d26f bump release date 2017-08-09 14:41:19 +00:00
andy df9ea61fbf Cherrypick [527d354828] 2017-08-08 16:45:47 +00:00
andy 5f7ca471e4 Merge core-8-6-branch 2017-08-08 16:42:24 +00:00
andy ac8ddf5d4a Cherrypick [527d354828] 2017-08-08 16:42:05 +00:00
andy 8bd48049f9 Merge trunk 2017-08-08 16:39:25 +00:00
andy 664774bec4 [5bfe3de008]: Modify [source] to set input EOF character but not output EOF character. This avoids having ^Z being appended to the sourced file when it is an always-writable [tcl::chan::variable] in a custom VFS. Tested by adding this same change as a patch to Tcl 8.6.6 in KitCreator because that seems to be the easiest way to get custom VFS capability exposed as script commands. Original problem introduced by [03cdfc3a86] 2000-05-11 00:16:52. 2017-08-07 01:16:39 +00:00
dgp dfd143bc6b merge trunk 2017-08-04 13:19:31 +00:00
dgp 3cf11a1ce9 merge 8.6 2017-08-04 13:18:37 +00:00
dgp 6da97c627b merge 8.6 2017-08-03 14:40:48 +00:00
dgp 735ca3d3a8 Improved test http-4.16. 2017-08-03 14:39:59 +00:00
dkf 72396a1929 Fix weird hangs in macOS Sierra on some networks. Name resolution timeouts not what we want to test in the http package. 2017-08-02 23:38:20 +00:00
dgp 816674cdb7 update changes 2017-08-01 16:05:13 +00:00
dgp dcf71727af merge trunk 2017-07-18 13:34:16 +00:00
dgp 6bcfd54d3a merge 8.6 2017-07-18 12:58:27 +00:00
jan.nijtmans bb331bf1d8 merge core-8-6-branch 2017-07-17 08:04:57 +00:00
jan.nijtmans b095f046e6 Fix [fb2208172c671f29d60e9ac928d9ded45d01d8b8|fb2208172c]: tclIndex varies across builds from auto_mkindex 2017-07-17 08:04:15 +00:00
jan.nijtmans cee94b0658 Fix [fb2208172c671f29d60e9ac928d9ded45d01d8b8|fb2208172c]: tclIndex varies across builds from auto_mkindex 2017-07-17 08:01:11 +00:00
jan.nijtmans f94f5914a8 merge core-8-6-branch 2017-07-14 14:48:17 +00:00
jan.nijtmans 9dd9b629b3 merge core-8-6-branch 2017-07-13 15:07:39 +00:00
jan.nijtmans 440dbbf620 Fix [293344d4f3]: Regression in SQLite test-suite. Long-standing bug in implementation of TclUtfToUniChar() macro. 2017-07-13 15:06:07 +00:00
jan.nijtmans b1243f2603 Fix [293344d4f3]: Regression in SQLite test-suite. Long-standing bug in implementation of TclUtfToUniChar() macro. 2017-07-13 15:03:27 +00:00
dgp 5ebb774188 merge trunk 2017-07-06 16:52:28 +00:00
dgp f553fe3b01 merge 8.6 2017-07-06 16:47:21 +00:00
dgp 457f43e25b merge 8.6 2017-07-06 16:40:38 +00:00
dgp 578eeb06bc [adb198c256] Switch to an alternative fix for file join memleaks. 2017-07-06 16:34:56 +00:00
dgp 515f0f32c0 Pull out of the loop a block of code that can only run in first iteration. 2017-07-06 16:00:46 +00:00
dgp bcb9c34521 Alternative fix for memleaks in fs path join machinery. 2017-07-06 15:46:58 +00:00
jan.nijtmans 5f88824dc9 merge trunk 2017-07-03 12:46:21 +00:00
jan.nijtmans af0816e0ca merge core-8-6-branch 2017-07-03 12:45:44 +00:00
jan.nijtmans ac0fdb5bf8 merge core-8-6-branch 2017-07-03 12:32:38 +00:00
sebres 2ee7180448 resolve 8.6-fork 2017-07-03 09:23:17 +00:00
sebres 5541cc57f7 tclPathObj: fixed TclJoinPath - usage of released object and object leakage.
closes [adb198c256df8c4192838cc3c1112fb2821314e9]
2017-07-03 09:19:41 +00:00
sebres 692ea37c40 tclPathObj: fixed TclJoinPath (backported from 8.6) - usage of released object and object leakage.
closes [adb198c256df8c4192838cc3c1112fb2821314e9]
2017-07-03 09:15:23 +00:00
jan.nijtmans 9dc2ed96d1 merge trunk 2017-07-03 08:32:30 +00:00
jan.nijtmans 58dd15c51d merge core-8-6-branch 2017-07-03 08:30:43 +00:00
jan.nijtmans d0996f3402 'inline static' -> 'static inline' and 'INLINE' -> 'inline', for consistancy. 2017-07-03 08:27:42 +00:00
jan.nijtmans ca0b2a012e merge trunk 2017-06-29 13:18:33 +00:00
dgp 39356c4079 merge 8.6 2017-06-29 11:19:39 +00:00
jan.nijtmans 7cf3a976b9 merge trunk 2017-06-28 13:45:13 +00:00
jan.nijtmans a646f081bc merge core-8-6-branch 2017-06-28 13:44:23 +00:00
jan.nijtmans 89f6884455 Eliminate use of (expensive) Tcl_UtfToUpper() from "format": Just generate the expected uppercase characters right away from the start. No change in functionality, just code optimization. 2017-06-28 13:32:16 +00:00
jan.nijtmans 4401a58b2a Implement %a and %A for floating point numbers 2017-06-28 11:02:19 +00:00
jan.nijtmans ccabb2af0c Merge trunk. Don't use expensive ToUpper() for hex 0X???? formatting, just generate uppercase directly. 2017-06-27 12:00:45 +00:00
jan.nijtmans 875f1b248d Implement "format %o" as prefixing with "0o" in stead of "0" (Kevin Kenny's suggestion). Seems ready to be TIPed (just some more testing) 2017-06-27 10:13:34 +00:00
dgp e6e15c60ca merge trunk 2017-06-26 20:13:31 +00:00
dgp 45cf14ed03 Merge 8.6; Bump to TclOO 1.2.0. 2017-06-26 20:00:35 +00:00
dgp 5314bbe0ef update changes 2017-06-26 19:56:37 +00:00
dgp 5b2c81a0f3 merge 8.6 2017-06-26 19:51:48 +00:00
dgp f242dd36bd Bump to TclOO 1.1.0 2017-06-26 19:37:34 +00:00
dgp fb2aa596ab merge 8.6 2017-06-26 19:22:29 +00:00
dgp 5621809b18 [46f801ea5a] Make autoloader less fragile when it cannot manufacture a
known consistent stack trace. Value inconsistency over failure.
2017-06-26 19:18:42 +00:00
dgp 7a8a4b15c4 Try to make good stack trace. Fallback to making not-so-good stack trace.
Stop failing altogether. Test in test suite, not program fragility.
2017-06-26 19:17:12 +00:00
dgp f4615ea166 Test demonstrating autoloader fragility. 2017-06-26 17:30:15 +00:00
jan.nijtmans b1c5e807ca Rebase branch "jn-0d-radix-prefix" back to trunk. No new changes 2017-06-26 10:20:32 +00:00
jan.nijtmans de7fffb534 merge trunk 2017-06-23 15:05:44 +00:00
jan.nijtmans 2bd7095b87 No longer split tests for longIs32bit/longIs64bit, since the results should be identical 2017-06-23 15:04:44 +00:00
dgp 400f9d27f5 typo fix 2017-06-23 13:11:37 +00:00
dgp 5d68b7ef56 Rewrite the documentation of [regsub -command] so it's not quite such a mess. 2017-06-23 13:09:23 +00:00
dgp ba387de8cd repair broken tests 2017-06-23 12:39:13 +00:00
dgp 70d12096d5 Repair compiler warning about uninitialized value. 2017-06-23 12:28:57 +00:00
jan.nijtmans 770651efae Merge trunk (but without %#d format, pending further decision and bug-fixing) 2017-06-23 09:14:38 +00:00
jan.nijtmans 3dedad17ed TIP #472 implementation: Add Support for 0d Radix Prefix to Integer Literals 2017-06-23 08:11:42 +00:00
dkf a9c238476a Add [regsub -command] case that wasn't actively tested for. 2017-06-22 22:54:32 +00:00
dkf cfafc391f2 Implement TIP #473: Allow a Defined Target Namespace in oo::copy 2017-06-22 22:03:06 +00:00
dkf 0fbade1cf8 Implement TIP #473: Allow a Defined Target Namespace in oo::copy 2017-06-22 22:02:14 +00:00
dkf dd54301fb6 Documentation correction; issue pointed out by DGP. 2017-06-22 22:00:39 +00:00
dkf 6352a07912 Rebase for final implementation work 2017-06-22 21:55:45 +00:00
dkf 440f85800c Implement TIP #470: Reliable Access to OO Definition Context Object 2017-06-22 21:50:08 +00:00
dkf 2a11adb848 merge trunk 2017-06-22 21:48:48 +00:00
dkf 77f95f38bf Implement TIP #463: Command-Driven Substitutions for regsub 2017-06-22 21:46:40 +00:00
dgp cbe13543e4 merge trunk 2017-06-22 13:41:03 +00:00
dgp 2710235273 merge trunk 2017-06-22 12:25:35 +00:00
jan.nijtmans 042e99227a merge core-8-6-branch 2017-06-22 08:59:59 +00:00
jan.nijtmans 64c9b509b0 Upgrade all internal character tables to Unicode 10 2017-06-22 08:59:14 +00:00
jan.nijtmans d39c33303f Upgrade all internal character tables to Unicode 10 2017-06-22 08:58:14 +00:00
jan.nijtmans 6454bee19b Merge core-8-6-branch 2017-06-22 08:16:41 +00:00
jan.nijtmans 45175dd264 Add test-cases, testing the legacy behavior of "format %#d" 2017-06-22 08:15:13 +00:00
dgp ba1388e7ae Silence compiler warning 2017-06-19 18:04:23 +00:00
dgp 0e99e9b2f2 Merge trunk. Improve test http-4.16 in robustness and result utility. 2017-06-19 17:56:54 +00:00
dgp 9983a05a80 merge 8.6 2017-06-19 17:31:17 +00:00
dkf 20b4459b9d Factor out chunk of non-obvious code in the guts of [oo::define] into one place. 2017-06-18 18:02:34 +00:00
dkf c488b70a47 Factor out chunk of non-obvious code in the guts of [oo::define] into one place. 2017-06-18 14:01:00 +00:00
dgp c280d65fd0 merge trunk 2017-06-16 20:35:32 +00:00
dgp 952acc3754 Merge 8.6; update changes. 2017-06-16 20:17:33 +00:00
dgp 73f548527a Another reworking, now with comments. 2017-06-16 19:54:57 +00:00
dgp 3923106cf7 Simplify the final loop when we know we're generating strings for all. 2017-06-16 16:23:22 +00:00
dgp 17711009b6 Split loop into two cases for further simplification. 2017-06-16 16:07:48 +00:00
dgp b3bda726c1 Factor out and simplify loop scanning leading known empty values. 2017-06-16 15:51:12 +00:00
dgp e1b4ae0798 Use local variables. 2017-06-16 14:46:56 +00:00
dgp aca86a46ff Rework the logic. Equivalent function. 2017-06-16 14:43:16 +00:00
jan.nijtmans 94754be1d7 merge core-8-6-branch 2017-06-16 14:31:47 +00:00
dgp 9ddb31d522 Extend cases where string rep generation can be prevented. 2017-06-16 12:56:03 +00:00
dgp 6123ba004c Better define the meaning of "first" and "last". 2017-06-16 11:47:46 +00:00
jan.nijtmans 56ea73145f Merge core-8-6-branch.
Fix gcc warning: tclStrToD.c:1180:2: warning: enumeration value ‘ZERO_D’ not handled in switch [-Wswitch]
  switch (acceptState) {
2017-06-15 11:01:58 +00:00
jan.nijtmans bc4db4d40e merge core-8-6-branch 2017-06-15 09:38:09 +00:00
jan.nijtmans 0f0ca3d932 Make panic in TclParseNumber() work when IEEE_FLOATING_POINT is not defined. 2017-06-15 09:13:51 +00:00
dkf 2cdd3134ab [9c058c5803e30d02] Correction to cross linking in dict(n)'s SEE ALSO section. 2017-06-14 21:51:36 +00:00
dkf 107760e1da [9c058c5803e30d02] Correction to cross linking in dict(n)'s SEE ALSO section. 2017-06-14 21:49:08 +00:00
dkf d453cdacec [f2336c116b] Move pragmas to make gcc happy; it is pickier than clang. 2017-06-14 21:42:38 +00:00
jan.nijtmans cf30ba443c Little variation on Brian's proposal: Only prefix decimal number with '0d' when that's necessary for correct interpretation of the number when parsed back again. 2017-06-14 10:04:05 +00:00
jan.nijtmans e8d9fe8ebe Rebase to core-8-6-branch (who told that fossil doesn't know how to rebase ....) 2017-06-14 07:54:51 +00:00
jan.nijtmans 6168d91b0e merge core-8-6-branch 2017-06-13 12:18:16 +00:00
dkf ad34457a54 Add tests and docs. 2017-06-13 11:10:11 +00:00
griffin 2712a556fb Add support of 0d in the format %# conversion flag. Add tests for same. 2017-06-12 14:04:29 +00:00
jan.nijtmans 8c62a9c228 merge trunk 2017-06-12 13:29:40 +00:00
jan.nijtmans 4ac08a5375 merge novem 2017-06-09 11:48:54 +00:00
jan.nijtmans 54043c0ee1 merge trunk 2017-06-09 11:17:31 +00:00
dgp 3f2eb64de8 Another TclStringCatObjv optimization to delay/avoid string rep generation. 2017-06-08 21:15:25 +00:00
dgp 4b81f6ff43 Don't test the impossible. 2017-06-08 21:10:01 +00:00
dgp cc72d116bd Modernize overflow checks. 2017-06-08 21:05:22 +00:00
dgp 94b635d569 merge trunk 2017-06-08 20:58:10 +00:00
dgp de1c1f0f47 More streamlining 2017-06-08 20:57:06 +00:00
dkf a4f7145579 Make read and write operations on Tcl_Var handles available in tclInt API. 2017-06-08 20:49:51 +00:00
dkf bbcbd64e3b Make read and write operations on Tcl_Var handles available in tclInt API.
(This will be useful for tclquadcode, and it addresses a basic omission in Tcl's API that made working with Tcl_Vars rather more specialized than it was ever really intended to be. However, this also closes off the part of the API that was not reasonably usable by ordinary external code; LVT indices require too deep an entanglement into Tcl's implementation.)
2017-06-08 20:49:04 +00:00
dgp 36d9205d97 More streamlining. 2017-06-08 20:40:45 +00:00
dgp 7673d614a9 pendingPtr == NULL implies (last == first) implies early out 2017-06-08 20:31:47 +00:00
dgp c348386388 Tests for string rep generation suppression 2017-06-08 19:35:05 +00:00
dgp 878c874975 merge trunk 2017-06-08 16:48:33 +00:00
dgp b796f3dee7 When possible delay string rep generation until necessary. 2017-06-08 16:44:51 +00:00
jan.nijtmans ea967c949e merge trunk 2017-06-08 12:59:45 +00:00
jan.nijtmans dd96539335 merge core-8-6-branch 2017-06-08 12:53:31 +00:00
jan.nijtmans 23ab25afdc Revert part of [95d096e0378b460c6c5168bb55bb2ca8b2fd799e|95d096e037]: Missed the fact that tolower() was optimized for the ASCII case as well, so this was a mistake! 2017-06-08 12:50:00 +00:00
jan.nijtmans 192d5ccf32 merge core-8-6-branch 2017-06-08 12:38:56 +00:00
jan.nijtmans 9ce3a23afe Fix [2738427]: Tcl_NumUtfChars(...) no overflow check. 2017-06-08 12:37:23 +00:00
jan.nijtmans c2e241f3cd Fix [2738427]: Tcl_NumUtfChars(...) no overflow check. 2017-06-08 12:34:08 +00:00
jan.nijtmans 9562ecd7fa tclUtil.c: Use TclUtfToUniChar() in stead of handling ASCII characters separately: This macro already does that.
Add new test-case for Tcl_NumUtfChars(), for a knownBug still to be fixed.
2017-06-08 11:48:13 +00:00
jan.nijtmans 16f3f234e8 Better UTF-8 surrogate handling, only functional when TCL_UTF_MAX>3 2017-06-08 08:26:58 +00:00
jan.nijtmans fbfe81cc7b merge core-8-6-branch 2017-06-07 15:23:11 +00:00
jan.nijtmans 73a3dfdeea Tcl_GetWideIntFromObj() -> TclGetWideIntFromObj(), and minor other simplifications/optimizations. No functional change. 2017-06-07 15:18:38 +00:00
dkf 4cf238f3c3 Expose some of the core variable access APIs.
(Cherrypick from [b4dfc30083])
2017-06-06 17:51:12 +00:00
dgp 4dc66d90aa merge trunk 2017-06-06 15:51:26 +00:00
jan.nijtmans 1b667ef114 merge core-8-6-branch 2017-06-06 14:35:02 +00:00
jan.nijtmans 0aa0da515c Add more test-cases for UTF-8 parser, including test-cases for TCL_UTF_MAX=4 or TCL_UTF_MAX=6 2017-06-06 14:33:16 +00:00
dgp 5667bb5f8e [716b427f76] Optimize TclStringCatObjv when only one non-empty argument. 2017-06-06 13:14:16 +00:00
dgp f8bc248cc3 merge 8.6 2017-06-06 13:03:31 +00:00
dgp b0146fbd50 A few more tweaks to streamline and clarify. 2017-06-06 12:56:37 +00:00
jan.nijtmans 0f81412091 merge trunk 2017-06-06 09:25:14 +00:00
sebres 615771f0b6 makes TclStringCatObjv safe accepting objc = 0 (or 1), then fast exits with new object / first; check-cycles rewritten to be still more faster. 2017-06-06 09:25:00 +00:00
jan.nijtmans 8d78b23f96 merge core-8-6-branch 2017-06-06 09:24:28 +00:00
jan.nijtmans fab7d970af Follow-up to [67aa9a2070]: Use uppercase consistantly, slight optimization in character tests, comment fixes. No change in functionality. 2017-06-06 09:23:23 +00:00
jan.nijtmans 617e92d7b4 [67aa9a2070] Tcl_UtfToUniChar returns single byte for invalid UTF-8 input as documented. 2017-06-06 09:02:28 +00:00
sebres 7edce7686e amend to [eac4656f1e8cf793] (moved to scope where numChars != 0 in Unicode case) 2017-06-06 09:01:18 +00:00
sebres 3d8a0152af small code review: don't need to check length if unchanged + the same case if 0 length 2017-06-06 08:34:00 +00:00
dgp cb68061d12 Optimize TclStringCatObjv() for case when only one argument is non-empty. 2017-06-05 20:03:19 +00:00
dgp 5c4bb0f4e9 Revert performance optimization as first step to providing a refactored one. 2017-06-05 17:57:33 +00:00
dgp f165025992 Merge 8.6; update changes. 2017-06-05 17:22:31 +00:00
dgp 8129d3e1c3 [67aa9a2070] Tcl_UtfToUniChar returns single byte for invalid UTF-8 input as documented. 2017-06-05 17:15:11 +00:00
dgp 3cdd3064b5 [67aa9a2070] Tcl_UtfToUniChar returns single byte for invalid UTF-8 input
as documented.
2017-06-05 16:56:08 +00:00
jan.nijtmans 708ca98ace merge core-8-6-branch 2017-06-02 11:10:28 +00:00
jan.nijtmans 43f72f639e merge trunk 2017-06-02 11:08:57 +00:00
jan.nijtmans f5f03750c8 merge core-8-6-branch 2017-06-02 10:59:19 +00:00
jan.nijtmans 901f58f13b Change refCount field in DictObj from int to size_t. Cherry-picked from "sebres-8-6-clock-speedup-cr1" branch. 2017-06-02 10:34:45 +00:00
jan.nijtmans c688e0737c Fix [67aa9a207037ae67f9014b544c3db34fa732f2dc|67aa9a2070]: Security: Invalid UTF-8 can inject unexpected characters 2017-06-02 08:17:26 +00:00
jan.nijtmans 21dfa74b03 Merge core-8-6-branch. This removes the work currently being done in "sebres-8-6-clock-speedup-cr1" branch, but that will be merged again as soon as the work is done.
All other changes in "trunk" since then (e.g. the INST_STR_CONCAT1 performance improvement, and the removal of SunOS-4) are retained.
2017-06-02 08:12:38 +00:00
jan.nijtmans 3f0e8d6265 Fix [83a3d869722fab9caaae3b6728215fb2507a6f0d|83a3d86972]: tclEpollNotfy.c fails to compile on Linux 2.6.<22 due to unconditionally including <sys/eventfd.h>
Also re-generate regc_locale.c with Unicode 10 tables: previous generation went horribly wrong somehow...
2017-05-31 13:03:54 +00:00
jan.nijtmans aaca962ffe merge core-8-6-branch 2017-05-31 12:06:51 +00:00
jan.nijtmans fcd399d49a Fix [67aa9a207037ae67f9014b544c3db34fa732f2dc|67aa9a2070]: Security: Invalid UTF-8 can inject unexpected characters 2017-05-31 12:05:45 +00:00
jan.nijtmans ca9d6593d1 merge core-8-6-branch (except: the "timerate" command and the clock performance-tests are kept) 2017-05-31 09:19:21 +00:00
jan.nijtmans 4a9ae53836 More code review, e.g. use Tcl_SetObjResult in stead of Tcl_SetResult, preventing a (char *) type case. No functional changes. 2017-05-31 08:59:28 +00:00
jan.nijtmans 60c071ed62 Remove "timerate" functionality: this definitely needs a TIP. Also undo changes in library/reg/pkgIndex.tcl, which are unrelated to clock functionality 2017-05-31 08:31:10 +00:00
sebres bbb13bf577 performance of INST_STR_CONCAT1: closes [716b427f76f8f97a8d9a06043903c53bb2b592c2]: minor optimization in simplest cases,
fixed performance regression of TclStringCatObjv usage from [fc9ed1e751180816384d569101950c1f8c4582ad],
optimizes patterns like "$v[unset v]", "$v[set v {}]" etc.
2017-05-31 08:24:42 +00:00
stu c05da96a35 Unbreak on OpenBSD, again. Put back the old SHLIB_VERSION doings.
On OpenBSD, Tcl's libs will need the extra version numbers probably forever.
There's no point to adding the extra knob.

On OpenBSD, the extra version numbers are used for dependency tracking.
The extra version numbers must be on linkable libs
(code will be linked to them, they have a corresponding .h file).
Loadable libs
(no code will be linked to them, they don't have a corresponding .h file.
Usually a Tcl extension)
don't need the burden (OpenBSD has to track the libs' dependencies)
of the extra version numbers.
Libs that are loadable and linkable are treated as linkable.
I hope that clears things up.
2017-05-31 06:10:46 +00:00
stu 73b3bf53ad Fully remove SunOS-4* from tcl.m4. 2017-05-31 05:39:57 +00:00
sebres 777941e35b [msgcat] revert changes of "msgcat" to previous state before clock-speedup, move this functionality to "clock.tcl";
additionally avoids the usage of catch (uses pair "dict exists/dict get" instead of).
2017-05-30 16:41:48 +00:00
sebres e06e0c8625 merge core-8-6-branch (resolves warnings) 2017-05-30 08:49:24 +00:00
sebres ece8767c5c small code review: resolves several warning on some compilers 2017-05-30 08:46:12 +00:00
sebres b63d3d703e 3-way merge sebres-trunk-clock-speedup / core-8-6-branch (clock speed-up / flightaware Tcl-bounties#4, see RFE [ddc948cff9781daac7ad95a3077b3c1b4f07cf93]) 2017-05-29 21:13:05 +00:00
sebres a59ccae461 merge sebres-8-6-clock-speedup 2017-05-29 20:37:35 +00:00
sebres 18315c5b5c merge sebres-8-6-clock-speedup (clock speed-up / flightaware Tcl-bounties#4, see RFE [ddc948cff9781daac7ad95a3077b3c1b4f07cf93]) 2017-05-29 20:23:56 +00:00
sebres c922cc78a8 merge core-8-6-branch 2017-05-29 19:44:55 +00:00
sebres 9220ca224b fixed [a3fb3356b76ec4a853d1b86aadc08675f8bef359]: segfault by sorting of the large lists (firstly mistakenly introduced in [af40c6fb6940bab7]), additionally simplify done-points in Tcl_LsortObjCmd. 2017-05-29 19:36:31 +00:00
jan.nijtmans 242f56b093 merge trunk 2017-05-29 13:16:01 +00:00
jan.nijtmans 3be2fece8c merge core-8-6-branch 2017-05-29 13:14:38 +00:00
jan.nijtmans e5726b4339 Tcl_UtfToUniChar() -> TclUtfToUniChar() in various places: No change in functionality, just faster if ASCII only strings are involved. 2017-05-29 13:10:30 +00:00
griffin 919fc57599 0d in LinkVar 2017-05-28 16:06:29 +00:00
griffin 5badb6535f Implement proposed 0d decimal radix prefix to compliment 0x,0b,0o. 2017-05-27 22:17:21 +00:00
dgp cf0cf6ad90 [19a8c9399d] Plug mem leak in TIP 459 machinery. 2017-05-23 16:00:29 +00:00
jan.nijtmans f3ea991996 Update internal tables to Unicode 10.0. Still in Beta, but to be released soon. 2017-05-23 14:48:58 +00:00
dgp 8a90be9a10 merge 8.6 2017-05-23 13:25:07 +00:00
jan.nijtmans c2e3653931 merge trunk 2017-05-22 09:17:48 +00:00
jan.nijtmans 14949f27a3 Merge core-8-6-branch.
Obsolete a number of systems, which were already obsoleted by TEA: We cannot even create a "battery-included" release any more for those systems.
2017-05-22 09:16:12 +00:00
jan.nijtmans c571887777 autoconf 2017-05-22 09:04:22 +00:00
jan.nijtmans f100bae746 If SHLIB_VERSION is specified as empty, don't let the SHLIB filename end with a dot (taken over from TEA)
Cherry-pick [http://core.tcl.tk/tclconfig/info/c8eddeddb9bbabc4|c8eddeddb9] from TEA: Added /usr/pkg/lib to the paths searched on the journey to find tclConfig.sh
2017-05-22 08:53:04 +00:00
jan.nijtmans 4db003c2bf Cherrypick Fix build on OpenBSD. [82701b94c4] missed a couple of bits.
Tcl/Tk's tcl.m4 isn't identical to TEA's tcl.m4 - be careful!
2017-05-21 17:42:16 +00:00
stu 62e71e311e Fix build on OpenBSD. [82701b94c4] missed a couple of bits.
Tcl/Tk's tcl.m4 isn't identical to TEA's tcl.m4 - be careful!
2017-05-20 12:45:31 +00:00
aspect df664778c8 merge core-8-6-branch 2017-05-19 14:23:06 +00:00
aspect 82ddcc716b fix build failure with TCL_MEM_DEBUG introduced by [8b717dc06a3e3d49] 2017-05-19 14:21:46 +00:00
dgp 9cbaed4d46 merge trunk 2017-05-19 13:00:59 +00:00
dgp 2f9e40fef1 merge 8.6 2017-05-19 12:53:52 +00:00
jan.nijtmans 34189452da merge core-8-6-branch 2017-05-18 13:27:10 +00:00
jan.nijtmans 8b5d3394c2 Fix test-case numbering 2017-05-18 13:25:17 +00:00
jan.nijtmans 57c30acc7f merge trunk 2017-05-18 12:36:18 +00:00
jan.nijtmans 2a5ae4319f TIP #458 implementation: Add Support for epoll() and kqueue() in the Notifier 2017-05-18 12:33:15 +00:00
dgp 246869993a autoconf-2.59 2017-05-18 12:09:00 +00:00
jan.nijtmans dea5aab977 merge core-8-6-branch 2017-05-18 09:24:30 +00:00
jan.nijtmans 8bdc794177 Cherry-pick [http://core.tcl.tk/tclconfig/info/18e79736d236d15d|All the world was a VAX] for OpenBSD. Also fix [http://core.tcl.tk/tk/tktview?name=84a27b1c67|84a27b1c67]: Tcl and Tk's tcl.m4 not synced?
(configure script not re-generated yet, I'm sure Don will do that in the rc branch)
2017-05-18 09:16:39 +00:00
sebres 993aa1b338 small amend with forgetten static keyword by option 2017-05-16 09:22:17 +00:00
sebres c3077bd013 optimized special case "-now" of base (by scan or add) or clock value (by format): bypass integer recognition if it looks like option "-now" 2017-05-16 09:16:43 +00:00
sebres 02d6d68a68 resolved warnings compiled with gcc, removed unused "MsgCtLitIdxs" (was moved to tclClock.c) 2017-05-16 08:51:51 +00:00
sebres c6484de085 merge sebres-8-6-clock-speedup 2017-05-15 18:35:36 +00:00
sebres dcc8bd9aa8 Fixed stardate format: be sure positive after decimal point (note: clock-value can be negative - modulo operation in C has the same sign as dividend) 2017-05-12 19:58:01 +00:00
jan.nijtmans 34944b264b merge trunk 2017-05-12 15:34:42 +00:00
jan.nijtmans 5d20272000 Don't test Tcl_GetDefaultEncodingDir() any more (which is obsolete), test Tcl_GetEncodingSearchPath() in stead. 2017-05-12 14:31:17 +00:00
sebres 0adb50f88b restored "-encoding utf-8" by source clock.tcl (lost by merging) 2017-05-12 07:45:15 +00:00
sebres a6c79230c3 merge sebres-8-6-clock-speedup 2017-05-11 21:55:12 +00:00
sebres 0ec19f6b11 fixes lost indentation during back-porting 2017-05-11 21:53:38 +00:00
sebres d6de0fb46b reintegrate sebres-8-6-clock-speedup back to sebres-clock-speedup (trunk clock-speedup, 3-way merge) 2017-05-11 19:44:01 +00:00
sebres 6b33bdad03 reintergrate (merge back) "sebres-8-6-timerate" into "sebres-trunk-timerate" 2017-05-11 19:06:53 +00:00
sebres 5171d6b4ef merge trunk (to sebres-trunk-timerate) 2017-05-11 18:53:21 +00:00
sebres 39a388f035 update documentation doc/clock.n: small enhancements and relevant changes of new engine. 2017-05-11 16:56:56 +00:00
sebres ea1ae51d2d [clock] tclStrIdxTree extended with possibility to hold client data; also changed in clock - indices starts with 1 instead of 0, and 0(NULL) instead of -1 used as sign of ambiguous keys. 2017-05-11 15:07:41 +00:00
sebres 95d531e781 prevents loss of key object if the format object (where key stored) becomes changed (loses its internal representation during evals);
should avoid possible theoretical segfault there.
2017-05-11 15:07:32 +00:00
sebres 1ea7d20306 auto-loading of ensemble and stubs on demand only (+ test covered now, see clock-0.1);
introduces new possibility to implement namespace-based auto-loading, e. g.:
    set ::auto_index_ns(::some::namespace) [list ::source [::file join $dir some namespace.tcl]]]

loading of clock-stubs (clock.tcl) implemented via handler "auto_index_ns" now.
2017-05-11 12:32:47 +00:00
sebres 0cdf2fd457 performance test cases extended: several cases to cover absence of the ensemble overhead 2017-05-11 12:25:59 +00:00
sebres 5202a013d2 merge sebres-8-6-timerate 2017-05-11 09:47:36 +00:00
sebres f9abf9b060 man for timerate (doc/timerate.n) 2017-05-11 09:46:43 +00:00
sebres 2eaa3d3c8d Added files missing after merge/back-port (rebase with merge point) 2017-05-10 13:02:17 +00:00
sebres 19b2d40089 Fixed possible wrong current date for CET / CEST test cases. 2017-05-10 12:30:04 +00:00
sebres ba8e7c4211 Fixed wrong args message (e.g. "clock format ..." instead of "::tcl::clock::format") if failed through compiled ensemble execution. 2017-05-10 12:29:59 +00:00
sebres 3fe213e031 Ensemble "clock" fixed after merge with kbk's clock ensemble solution. All commands (including new) compiled now also in ensemble (implemented without TclMakeEnsemble, because it can be extended via new map entries).
Ensemble handling partially cherry-picked from new performance branch (TODO: check temporary "-compile" option can be reverted if it becomes ready/merged).
2017-05-10 12:29:54 +00:00
sebres d9b0bec7d6 resolving differences between 8.6 and trunk 2017-05-10 12:29:49 +00:00
sebres a021af135e clock.test normalized (compared with trunk) 2017-05-10 12:29:42 +00:00
sebres ee3d72e1e1 [interim-merge-commit] back-ported branch sebres-clock-speedup (from trunk to 8.6): tcl-clock functionality rewritten in C. 2017-05-10 12:28:46 +00:00
sebres 2752a9f58b add missing compile functionality (TclPreserveByteCode/TclReleaseByteCode back-ported as inline from trunk) 2017-05-09 22:24:44 +00:00
sebres a73818d8b6 back-ported branch sebres_trunk_timerate (new command "timerate" for 8.6) 2017-05-09 21:58:12 +00:00
dgp 0d218fca03 Merge 8.6; update changes. 2017-05-09 12:12:26 +00:00
jan.nijtmans 2130fd8582 merge core-8-6-branch 2017-05-09 11:31:14 +00:00
jan.nijtmans f32ecd5894 Fix [6ca52aec14e0b33543d3cd9895f060b852ac4dbc|6ca52aec14]: HTTP package: Memory leak if client requests "Connection: close" but server responses with "Connection: keep-alive"
http: 2.8.10 -> 2.8.11
2017-05-09 11:30:09 +00:00
jan.nijtmans 1ed15145a6 merge core-8-6-branch 2017-05-09 09:49:23 +00:00
jan.nijtmans 46f75926ff Let local variables declared from within macro's always start with underscore, this fixes some gcc warnings with -Wshadow. 2017-05-09 09:28:06 +00:00
dgp 3f00b2490d merge trunk 2017-05-08 16:22:22 +00:00
dgp f9d42ebf8c Merge 8.6; update changes. 2017-05-08 16:07:58 +00:00
dgp ca65694482 [6015221f59] Segfault after overflow of [binary] field specifier numeric count. 2017-05-05 19:11:33 +00:00
dgp 69865e4f83 [6015221f59] Segfault after overflow of [binary] field specifier numeric count. 2017-05-05 19:10:52 +00:00
dgp 71a9a4406a [6015221f59] Segfault after overflow of [binary] field specifier numeric count. 2017-05-05 17:12:52 +00:00
dgp 0177abb172 merge 8.6 2017-05-04 20:40:15 +00:00
dgp dd53d408e3 merge trunk 2017-05-04 14:51:22 +00:00
jan.nijtmans b5273bc1fa merge trunk 2017-05-04 14:19:52 +00:00
jan.nijtmans 0aeb0313c3 Merge trunk 2017-05-04 12:39:27 +00:00
jan.nijtmans ce501f14c5 merge core-8-6-branch 2017-05-04 12:28:44 +00:00
jan.nijtmans b96146d014 Use GetModuleHandle() in stead of LoadLibrary() for ntdll, which is already loaded by Cygwin. 2017-05-04 12:26:49 +00:00
jan.nijtmans 6f18f8d375 Cherry-pick/backport [65cc894ac5c24495|65cc894ac5]: fix off-by-one possible buffer overrun when looking for encodings; found by coverity
Use GetModuleHandle() in stead of LoadLibrary() for ntdll, which is already loaded by Cygwin.
2017-05-04 12:01:23 +00:00
jan.nijtmans f9abf48ecf merge novem 2017-05-04 11:35:55 +00:00
jan.nijtmans 01c5c4ed35 merge trunk 2017-05-04 10:42:54 +00:00
jan.nijtmans 63cf0366bd merge core-8-6-branch 2017-05-04 09:51:00 +00:00
jan.nijtmans fd7ea3420f Fix gcc warning: unused variable wakeEvent 2017-05-04 09:35:14 +00:00
jan.nijtmans 52e520be10 merge trunk 2017-05-04 08:55:28 +00:00
jan.nijtmans af718696fb merge core-8-6-branch 2017-05-03 15:28:37 +00:00
jan.nijtmans 2c5a00c966 Use GetModuleHandle() in stead of LoadLibrary() when the handle is needed for an already loaded dll.
Fix filesystem-1.52 (only works correctly on UNIX)
2017-05-03 15:27:06 +00:00
jan.nijtmans 3d65f9905d Use GetModuleHandle() in stead of LoadLibrary() when the handle is needed for an already loaded dll.
Fix filesystem-1.52 (only works correctly on UNIX)
2017-05-03 15:05:41 +00:00
jan.nijtmans 709366bdfe slightly better formatting, both in genStubs.tcl and in the generated XXX_DEPRECATED functions. 2017-05-03 10:03:00 +00:00
jan.nijtmans 910200b637 Extend "deprecated" functionality of genStubs.tcl: XX_DEPRECATED macro now accepts a message text, which will be used in the compiler's error message.
Not used (yet) in Tcl.
2017-05-02 12:36:42 +00:00
dgp be831d7ecb Revert the colorful debug garbage mistakenly committed. 2017-05-01 20:29:02 +00:00
dgp 44c544160a [f9fe90d0fa] [file join] normalization. See filesystem-1.52* 2017-05-01 20:25:27 +00:00
dgp 262df0197b [f9fe90d0fa] [file join] normalization. See filesystem-1.52* 2017-05-01 20:25:03 +00:00
dgp ed853e1ffb [f9fe90d0fa] [file join] normalization. See filesystem-1.52* 2017-05-01 20:23:28 +00:00
jan.nijtmans da02e63f0a Merge trunk 2017-05-01 08:47:57 +00:00
jan.nijtmans 799554b1c5 merge core-8-6-branch 2017-05-01 08:22:56 +00:00
jan.nijtmans 5d0864fb41 Fix [8bd13f07bde6fb0631f27927e36461fdefe8ca95|8bd13f07bd]: Closing tcl pipes prevents windows threads from starting up. Patch by sebres (Dipl. Ing. Sergey G. Brester)
(also fix duplicate test-case number in link.test)
2017-05-01 08:20:54 +00:00
fvogel 90ffbb4170 Make trunk compile on MSVC (problem was: warning C4554: '&' : check operator precedence for possible error; use parentheses to clarify precedence) 2017-04-29 14:41:20 +00:00
dgp 77822d9462 merge 8.6; update changes 2017-04-28 18:09:46 +00:00
dgp adfd841d9d [f34cf83dd0] An optimization was being taken in a case where it produced the wrong result, failing to collapse multiple /// into /. Testing on Windows where path expectations may vary would be a good idea, but since this is just an optimization avoidance, I suspect we're ok. 2017-04-28 17:57:34 +00:00
dgp 237c46512c [f34cf83dd0] An optimization was being taken in a case where it produced the wrong result, failing to collapse multiple /// into /. Testing on Windows where path expectations may vary would be a good idea, but since this is just an optimization avoidance, I suspect we're ok. 2017-04-28 17:52:26 +00:00
dgp 64f999ee89 [f34cf83dd0] An optimization was being taken in a case where it produced
the wrong result, failing to collapse multiple /// into /.
Testing on Windows where path expectations may vary would be a good idea,
but since this is just an optimization avoidance, I suspect we're ok.
2017-04-28 17:49:43 +00:00
dgp 198407b5ba Test for [f34cf83dd0]. 2017-04-28 17:46:11 +00:00
dgp ab5586a7a3 Test for [f34cf83dd0]. 2017-04-28 17:44:31 +00:00
dgp 79426acd55 Test for [f34cf83dd0]. 2017-04-28 17:43:49 +00:00
dgp 14f579844d merge mark 2017-04-28 14:25:02 +00:00
dgp 83495af5ce silence uninit variable warnings 2017-04-28 14:15:56 +00:00
dgp dc9c72819c silence uninit variable warnings 2017-04-28 14:15:18 +00:00
jan.nijtmans 1200929a72 (cherry-pick): fix typo-bug (using wrong thread handle by set priority) 2017-04-28 13:41:13 +00:00
jan.nijtmans 10ab52081d merge core-8-6-branch 2017-04-28 13:21:26 +00:00
jan.nijtmans fecff1bcf0 (cherry-pick from "fix-1997007" branch): fix typo- resp. copy-paste-bug (using wrong threadInfo pointer in ConsoleOutputProc, should be writer, not reader) 2017-04-28 13:17:20 +00:00
jan.nijtmans 513d77788d (cherry-pick from "fix-1997007" branch): fix typo-bug (using wrong thread handle by set priority) 2017-04-28 13:13:10 +00:00
jan.nijtmans 2f5a766c71 merge core-8-6-branch 2017-04-28 08:00:51 +00:00
dgp 0b9703a36f [04e26c02c0] Remove useless condition that raises warnings. 2017-04-27 17:26:10 +00:00
dgp 2bf6ae09b3 [04e26c02c0] Remove useless condition that raises warnings. 2017-04-27 17:19:31 +00:00
dgp 879750b278 [04e26c02c0] Remove useless condition that raises warnings. 2017-04-27 17:02:19 +00:00
dgp 76e8da363b merge trunk 2017-04-27 12:54:33 +00:00
dkf e3a9350e58 Start of implementation of TIP #470. 2017-04-27 12:38:21 +00:00
dgp 78a7a5b561 merge 8.6 2017-04-27 12:06:47 +00:00
dkf 04086099d0 [50750c735a] Fix broken test and stop reading uninit-but-allocated memory in zlib channel transform. 2017-04-27 10:51:50 +00:00
dkf 757450b24f [50750c735a] Fix broken test and stop reading uninit-but-allocated memory in zlib channel transform. 2017-04-27 10:43:32 +00:00
jan.nijtmans fbbc93906e Move some variable declarations closer to where they are used. No change in functionality. 2017-04-26 13:48:13 +00:00
dkf 85dbf412fd [50750c735a] Fix for uninit memory handling issue in zlib transforms. 2017-04-25 19:32:46 +00:00
dkf 1f25f80d5b Deal with a couple of obscure causes of warnings on some versions of OSX. 2017-04-25 13:08:52 +00:00
dkf 99143db529 A better way of getting source file location information when disassembling. 2017-04-22 14:57:17 +00:00
dgp 7fde7fcf7b merge 8.6 2017-04-21 12:19:07 +00:00
jan.nijtmans a3445370e1 merge trunk 2017-04-20 14:47:56 +00:00
jan.nijtmans 2f99ece694 merge core-8-6-branch 2017-04-20 14:47:01 +00:00
jan.nijtmans 251dc3a322 Add flag TCL_CC_SEARCH_FLAGS to tclConfig.sh on Windows, just as it exists on unix, even though it should just be empty: TEA extensions might depend on it. 2017-04-20 14:07:30 +00:00
jan.nijtmans fd86d4e6c9 merge trunk 2017-04-20 11:47:51 +00:00
jan.nijtmans c1b1e9af62 Remove unused functions like TclWinSetSockOpt()/Tcl_DStringTrunc() if compiled with -DTCL_NO_DEPRECATED 2017-04-20 11:44:05 +00:00
gcramer bcbbf6dacf Entry for text.n into exclude_refs_map inserted. 2017-04-20 10:13:02 +00:00
dgp cdccb19d1c merge 8.6 2017-04-19 15:22:22 +00:00
jan.nijtmans 93a924d020 merge core-8-6-branch 2017-04-18 19:02:51 +00:00
jan.nijtmans 6f7ac0e29c Fix [bc432269b74e9b246bf01f354714fed47cb227ed|bc432269]: http fails in a safe interpreter 2017-04-18 19:01:51 +00:00
jan.nijtmans 3bde30215b merge-mark 2017-04-18 06:15:48 +00:00
dgp 8c56790861 merge trunk 2017-04-17 12:42:59 +00:00
dgp a3fdca376e merge 8.6 2017-04-17 12:10:42 +00:00
dgp bfdfb7479d Repair revised tests that failed. 2017-04-17 12:05:02 +00:00
dgp 56739b8036 Repair revised tests that failed. 2017-04-17 11:59:35 +00:00
jan.nijtmans 2c5d1036db merge trunk 2017-04-14 13:00:46 +00:00
jan.nijtmans 46db6e4a00 merge trunk 2017-04-14 10:04:33 +00:00
jan.nijtmans ee6b4f6be2 merge trunk 2017-04-14 09:07:52 +00:00
jan.nijtmans 15b0a7813d merge core-8-6-branch 2017-04-14 09:06:34 +00:00
jan.nijtmans 490e5ace3a Don't use "0%o" format in test-cases, as it suggest's it's the normal way to format octal numbers: it isn't. Better use "%#o".
Add tests for "format" and "scan" corner-cases which weren't documented (except in TIP's) neither had tests before.
2017-04-14 09:05:01 +00:00
dgp d2595ccfea Bump TclOO 1.0.6; finish changes. 2017-04-13 16:39:15 +00:00
jan.nijtmans 6be0cf66e0 Translate all \u???? sequences to their UTF-8 counterpart in *.msg files: It is faster during parsing (since no backslash-sequences have to be handled) and makes the msg-files better readable by humans.
TODO: adapt tools/loadICU.tcl to generate UTF-8 in stead of those sequences. This tools seems to be out-of-date a long time already, I couldn't make it run with latest ICU.
2017-04-13 12:20:37 +00:00
dgp 5b059dfd6b Bump msgcat and tcl tests and continue updates to changes. 2017-04-12 20:23:56 +00:00
dgp 1a3c0d9be9 merge 8.6 2017-04-12 19:19:05 +00:00
sebres ea1a2f3fbf [win] fixes "wrong" checking of the flag TCL_CLOSE_READ in close2proc (using mask) 2017-04-12 14:52:10 +00:00
jan.nijtmans 0e01219533 merge trunk 2017-04-12 14:33:26 +00:00
jan.nijtmans cddb5b612f merge trunk. New TIP is getting shape. 2017-04-12 13:49:33 +00:00
jan.nijtmans 5ba18ec98d If %llu is considered invalid, it means that "%" TCL_LL_MODIFIER "u" cannot be used Tcl_ObjPrintf(), but only in sprintf(). That's unfortunate, clearly an oversight in TIP #237. Conclusion: new TIP must be written to correct this.
I'll read a TIP and see what case you have, but TCL_LL_MODIFIER was never
meant to play any role in [format] or in Tcl_ObjPrintf(). TCL_LL_MODIFIER
exists to help deal with platform differences in sprintf() calls.

Tcl_ObjPrintf() in contrast ought to be consistent in its behavior
across platforms and should not need such things. If that's false,
then fixes to Tcl_ObjPrintf() are in order.
2017-04-12 13:43:15 +00:00
dgp 18a7f14fd0 merge trunk 2017-04-12 13:28:17 +00:00
dgp 62b2b9bf45 Revert recent commit. TIP 237 is clear that %llu is invalid. 2017-04-12 13:15:39 +00:00
dgp 244e69a10a Revert recent commit [80252e0aed]. TIP 237 is clear that %llu is invalid. 2017-04-12 13:14:38 +00:00
jan.nijtmans 6f1a613456 merge trunk 2017-04-12 12:34:24 +00:00
jan.nijtmans e006ff39be merge core-8-6-branch 2017-04-12 12:33:07 +00:00
jan.nijtmans 9faad3da69 Another attempt to fix the two executable flags. 2017-04-12 12:11:12 +00:00
jan.nijtmans 47a749742a Fix executable flag for 2 files 2017-04-12 12:04:31 +00:00
sebres 9d252ff7d2 merge fix-42202ba1e5ff566e 2017-04-12 11:49:39 +00:00
jan.nijtmans d56986e037 merge trunk 2017-04-12 10:06:32 +00:00
jan.nijtmans 9b4213bb3f merge core-8-6-branch 2017-04-12 09:35:18 +00:00
jan.nijtmans 0cc7fd3498 Fix sporadically errors in zlib-8.x and socket tests, cherry-picked from "fix-1997007" branch. Credit to "sebres"! 2017-04-12 09:23:23 +00:00
dgp 1e22d92c69 More changes work 2017-04-11 19:11:27 +00:00
sebres 1638a98f0e fixes sporadically errors in several not event-driven test cases zlib-8.x (wrong non-blocking pipe usage, without fileevent resp. vwait) 2017-04-11 18:13:56 +00:00
sebres 85cc06f56c improves robustness of the socket tests against busy random ports (fixed sporadic errors "already in use") 2017-04-11 18:10:09 +00:00
sebres 76054b4646 code review, robustness increase, avoid infinite wait by exit, thread exit and by pipes of closed processes);
use pipe-helpers (TI-structure handling) for all pipe-workers (tclWinConsole, tclWinSerial);
2017-04-11 18:09:52 +00:00
sebres 9b95c00218 added wake-up event to prevent possible dead-locks by some waiting thread (e. g. for writable events) 2017-04-11 18:09:38 +00:00
sebres b8186ff707 prepared to use pipe-helpers (TI-structure handling) for all pipe-workers (tclWinConsole, tclWinSerial) 2017-04-11 18:09:06 +00:00
sebres f5538049ef code review and fix small memory leak using ckalloc, without finalization of tcl subsystem in the worker (if it owns TI structure and calls ckfree) 2017-04-11 18:08:43 +00:00
sebres 119d9ad3aa shared structures of pipe-workers rewritten using atomic state of the thread;
asynchronous start/stop of pipe-workers (if possible), try the soft way to end workers using cancelSynchronousIo before it would be terminated;
2017-04-11 18:08:12 +00:00
sebres 8b0910d31f fix typo- resp. copy-paste-bug (using wrong threadInfo pointer in ConsoleOutputProc, should be writer, not reader) 2017-04-11 18:07:30 +00:00
jan.nijtmans ab6259370e merge trunk 2017-04-11 15:35:04 +00:00
jan.nijtmans cd48f2d313 Remove some unnecessary "struct" definitions and some type casts no longer necessary. No functional changes. 2017-04-11 15:20:07 +00:00
jan.nijtmans 26f98a5e56 unbreak windows build (by previous commit) 2017-04-11 11:30:47 +00:00
jan.nijtmans ede10ae95d merge trunk 2017-04-11 10:04:00 +00:00
dkf bbfc7b1ea2 More minor style fixes. 2017-04-10 16:21:31 +00:00
jan.nijtmans 1e3fa455c9 Merge Harald's "robust-async-connect-tests" branch. Thanks! 2017-04-10 12:39:54 +00:00
dkf d00198bd14 Minor style issues through the socket implementation code. 2017-04-09 16:51:27 +00:00
jan.nijtmans e9b2f70238 merge trunk 2017-04-07 15:15:42 +00:00
jan.nijtmans ff4b11441b Minor simplification in tcl.h: For the Tcl_WideAsLong/Tcl_LongAsWide/Tcl_WideAsDouble/Tcl_DoubleAsWide #defines, one set suffices: No need to have two versions depending on TCL_WIDE_INT_IS_LONG. 2017-04-07 15:11:47 +00:00
jan.nijtmans de59a00a30 Use "0o" in stead of "0" as octal prefix in more places. 2017-04-07 14:48:49 +00:00
jan.nijtmans 7eea851880 Merge trunk. Only use hash prefix (0x, 0b, 0 ) if value is not 0, except for %p. 2017-04-07 13:46:19 +00:00
jan.nijtmans 6db7cf0c22 merge-mark. No changes. 2017-04-06 15:27:18 +00:00
jan.nijtmans 904733362e Some more (internal) stub entries which can be cleaned up with -DTCL_NO_DEPRECATED, because they are not used any more. 2017-04-06 15:25:44 +00:00
jan.nijtmans 72fc97ca20 Merge trunk (no actual modifications). Some 8.6 -> 9.0 version changes which still were forgotten. 2017-04-06 12:47:30 +00:00
jan.nijtmans 44de3dd8da If compiled with TCL_NO_DEPRECATED, the functions TclpGetDate/TclpLocaltime/TclpGmtime can be removed: They are internal and not used for anything any more. 2017-04-06 11:13:22 +00:00
jan.nijtmans 8648956074 merge trunk 2017-04-06 07:45:11 +00:00
sebres ceb75ca9ff the same handling to initialize thread without suspend/resume helpers (otherwise may be dangerous by very huge resp. too busy system); 2017-04-05 19:52:23 +00:00
max 55edd253ff Use a random unused port for the dummy http server to avoid conflicts
with local services running on port 8010.
2017-04-05 14:47:45 +00:00
sebres 2ae10f0b33 fix typo-bug (using wrong thread handle by set priority) 2017-04-05 10:41:05 +00:00
sebres b9cc513f2f small review: rewritten using already available event handles, additionally prevents infinite waits (using timeout 5000ms); 2017-04-05 10:40:51 +00:00
sebres 14192d21dd Contributed by "stanko" as patch within 8bd13f07bde6fb0631f27927e36461fdefe8ca95
Resolves blocking of pipes-thread (reader/writer) under huge last:
  Terminating threads during their initialization resp. teardown phase may result LoaderLock in the ntdll.dll's (to remain locked indefinitely).
  This causes ntdll.dll's LdrpInitializeThread() to deadlock trying to acquire LoaderLock.
Possible fix for 9d75181ee70af318830e99ede6ebb5df72a9b079
2017-04-05 10:40:29 +00:00
jan.nijtmans 19719bf57f Fix [4b12ccb3363e81b132e8dbe12aeec596102be1a8|4b12ccb336]: format/scan %llu doesn't work. Also added new test-cases showing the expected behavior. 2017-04-05 09:09:20 +00:00
jan.nijtmans ea8cb9b7bb Fix [4b12ccb3363e81b132e8dbe12aeec596102be1a8|4b12ccb336]: format/scan %llu doesn't work. Also added new test-cases showing the expected behavior. 2017-04-05 08:41:48 +00:00
sebres 72ac20b7d7 bug fix for [42202ba1e5ff566e0f9abb9f890e460fbc6c1c5c]: segfault by coro inject
rewritten callback for ::tcl::unsupported::inject, without leave the interpreter in unusable state (inaccurate environment exchange by adding eval callback), test covered now.
2017-04-04 11:13:36 +00:00
sebres 7b4e946f74 Create new branch named "fix-42202ba1e5ff566e" 2017-04-04 09:38:50 +00:00
dgp f3a4ae987d merge 8.6 2017-04-03 16:53:26 +00:00
jan.nijtmans 85397cf893 Merge core-8-6-branch.
Add test-cases showing that the (undocumented) %p format (and also %zd/%td) are harmless, since they are equivalent to other already existing formats.
2017-04-03 12:54:36 +00:00
jan.nijtmans d10ba45b4b Code optimization/reduction: If TCL_WIDE_INT_IS_LONG is defined, the variable useWide is always 0, so related code can be eliminated without loss of functionality. 2017-04-03 11:53:34 +00:00
jan.nijtmans 8a4445438c merge trunk 2017-03-31 15:18:07 +00:00
jan.nijtmans ce7746b49e Since Tcl_AppendPrintfToObj() now understands the %p format, we can use it. Eliminating some internal string buffers. 2017-03-31 14:44:08 +00:00
dgp 5e45fd7662 merge 8.6 2017-03-31 12:30:27 +00:00
jan.nijtmans 0515becf7a Fix fall-back test for TCL_WIDE_INT_IS_LONG, making it do the same as "configure": Should be 1 if sizeof(long long) == sizeof(long), 0 otherwise. 2017-03-31 11:05:28 +00:00
jan.nijtmans 6b2a58ffcd Merge trunk 2017-03-31 09:54:42 +00:00
jan.nijtmans bbbd34fc38 merge trunk 2017-03-31 09:20:18 +00:00
jan.nijtmans 354e08673b Extend Tcl_DumpActiveMemory() and related functions for handling 64-bit memory. Only effective with TCL_MEM_DEBUG.
Merge-mark core-8-6-branch (this doesn't bring in any changes)
2017-03-31 09:19:05 +00:00
dkf c552943f9e [900cb0284bc] Ensure that masking pseudo-methods used for export management are not introspectable directly. [cherrypick] 2017-03-29 19:16:32 +00:00
dkf 810395f913 [900cb0284bc] Ensure that masking pseudo-methods used for export management are not introspectable directly. 2017-03-29 19:07:44 +00:00
dkf 8dfdec39fd Tweak to make tests a little clearer. 2017-03-29 19:05:17 +00:00
jan.nijtmans 30cebba4d6 merge trunk 2017-03-29 14:57:15 +00:00
jan.nijtmans f01bb0828e merge trunk 2017-03-29 14:56:21 +00:00
jan.nijtmans 0abecbc87d Fix [4768eb5c166a1b923e3472d18d75fdccc1a47513|4768eb5c16]: format-8.20 failure. Since "%q" now is a valid length specifier, we cannot use it any more to test for "bad field specifier" 2017-03-29 14:53:54 +00:00
jan.nijtmans afc0ba5cdc merge trunk 2017-03-29 13:23:11 +00:00
jan.nijtmans 190dc679f6 Merge trunk 2017-03-29 12:20:08 +00:00
jan.nijtmans efbb62b5bd In comments and documentation, distinguish between __int64 (a Microsoft 64-bit integer type) and int64_t (C99 equivalent) 2017-03-29 12:19:02 +00:00
jan.nijtmans 24f5b98e8c In comments and documentation, distinguish between __int64 (a Microsoft 64-bit integer type) and int64_t (C99 equivalent) 2017-03-29 12:16:28 +00:00
jan.nijtmans cf3f133df1 (more experimenting): Make TCL_LL_MODIFIER behave more close to intuitive expectations: If the platform has a "long long" type, use it for Tcl_WideInt, so TCL_LL_MODIFIER is really a replacement for "ll" on most platforms (Win32/Win64 as most notable exception).
Will need a new TIP.
2017-03-29 12:05:59 +00:00
jan.nijtmans eb03584c16 (experimental) new internal macro TCL_Z_MODIFIER, just like TCL_LL_MODIFIER but then for size_t. 2017-03-28 07:14:47 +00:00
jan.nijtmans 12be86ca29 merge trunk 2017-03-27 13:04:59 +00:00
jan.nijtmans dd5e309d31 Improve comment on TCL_WIDE_INT_IS_LONG, making it less misleading.
In tclThreadTest.c, allow mainThreadId to be >32 bits.
2017-03-27 13:02:39 +00:00
aspect 0c0b1e1498 Correct this use of isWanted to ensure NO_IMPLEMENTATION methods are not listed (bug [900cb0284bc]) 2017-03-27 13:02:22 +00:00
jan.nijtmans 0d54bf3711 Improve comment on TCL_WIDE_INT_IS_LONG, making it less misleading.
In tclThreadTest.c, allow mainThreadId to be >32 bits.
2017-03-27 13:01:34 +00:00
f.bonnet f0aac87b35 Create new branch named "tip-462" 2017-03-27 09:28:55 +00:00
jan.nijtmans 920aa8280f Supply more C99-compatible (and MSVC) format options: '%p' for pointers, 'z'/'j'/'I' for size_t/intptr_diff, 'j'/'q' for long long. Also add "I32" froom MSVC.
Remove TCL_LL_MODIFIER specified as "L" for Borland: This must be wrong as "L" is meant for long double. Just assume that later Borland compilers are MSVC-compatible.
2017-03-24 15:52:42 +00:00
jan.nijtmans 8a2c820213 Merge trunk 2017-03-24 10:30:56 +00:00
jan.nijtmans bd92acfbe8 Merge trunk 2017-03-24 09:52:13 +00:00
jan.nijtmans ab08379d1c Add TCL_NORETURN attribute to TclpThreadExit() and Tcl_ExitThread() 2017-03-24 09:33:00 +00:00
jan.nijtmans 321cd769b7 Use portable %p modifier in "generic/tclThreadTest.c", in stead of more complicated TCL_LL_MODIFIER. 2017-03-23 16:35:08 +00:00
jan.nijtmans 802974ec84 (cherry-pick from core-8-6-branch): Update TZ info to tzcode2017b. 2017-03-23 13:35:43 +00:00
José Ignacio Marín b3090df235 merge trunk 2017-03-23 08:45:36 +00:00
José Ignacio Marín 91cb892574 merge with trunk 2017-03-23 08:42:38 +00:00
José Ignacio Marín 4703c1399d Update TZ info to tzcode2017b. 2017-03-23 08:25:57 +00:00
dgp e58e9e1fb9 New(ish) test interp-14.11 was missing its -cleanup. 2017-03-22 19:46:56 +00:00
dgp d7802b428a New(ish) test interp-14.11 was missing its -cleanup. 2017-03-22 19:45:41 +00:00
dgp 5894e1b085 New(ish) test interp-14.11 was missing its -cleanup. 2017-03-22 19:42:57 +00:00
jan.nijtmans b72bf907ec Merge trunk. 2017-03-21 09:05:32 +00:00
jan.nijtmans dc25a1a62b Addendum to previous commit: If compiled with TCL_NO_DEPRECATED, remove a few more stub entries which are not used any more. 2017-03-21 09:01:09 +00:00
jan.nijtmans c8a4b8f057 Merge trunk 2017-03-20 10:31:26 +00:00
jan.nijtmans 754b233873 If compiled with TCL_NO_DEPRECATED, remove some more stub entries which are not used any more. 2017-03-20 10:24:11 +00:00
dgp b8d35358ad merge 8.6 2017-03-17 12:51:53 +00:00
jan.nijtmans 3daba65c64 Merge trunk 2017-03-17 12:34:45 +00:00
jan.nijtmans 5617ad7c18 If Tcl is compiled with -DTCL_NO_DEPRECATED, make sure that iPtr->(resultSpace|appendResult|appendAvl|appendUsed) are not used any more. 2017-03-17 10:57:24 +00:00
dkf 909f1a1a30 Fixes to docs made possible by recent HTML rendering fixes for Tk. 2017-03-16 09:07:19 +00:00
jan.nijtmans f6837a8ef4 redundant end-of-line spacing 2017-03-15 15:15:50 +00:00
jan.nijtmans d287c6c8b0 redundant end-of-line spacing 2017-03-15 15:13:43 +00:00
Kevin B Kenny 6649fab762 Compile [clock clicks], [clock microseconds], [clock milliseconds] and [clock seconds]. 2017-03-15 02:41:51 +00:00
Kevin B Kenny 488735e4a2 Compile [clock clicks], [clock microseconds], [clock milliseconds] and [clock seconds]. 2017-03-15 02:40:56 +00:00
Kevin B Kenny 43d597b30f Compile [clock clicks], [clock microseconds], [clock milliseconds] and [clock seconds]. 2017-03-15 02:39:04 +00:00
Kevin B Kenny 3d5f0518ca Make 'clock' and 'encoding' into compilable ensembles that play with safe interps 2017-03-14 22:30:01 +00:00
Kevin B Kenny a3f676461c Make 'clock' and 'encoding' into compilable ensembles that play with safe interps 2017-03-14 22:22:40 +00:00
Kevin B Kenny 607667f89d Make 'clock' and 'encoding' into compilable ensembles that play with safe interps 2017-03-14 22:13:15 +00:00
Kevin B Kenny 6212b342f6 Make 'clock' and 'encoding' into compilable ensembles that play with safe interps 2017-03-14 22:06:43 +00:00
Kevin B Kenny 5ddb691286 Make 'clock' and 'encoding' into proper compilable ensembles 2017-03-14 21:09:27 +00:00
dgp daac4e5d34 Different solution to silencing the non-useful valgrind alerts. 2017-03-13 17:03:50 +00:00
jan.nijtmans 9ab57fce05 merge trunk 2017-03-13 09:16:55 +00:00
jan.nijtmans 6f905e1f0f Eliminate internal use of TclNewBooleanObj()/TclSetBooleanObj()/TclSetIntObj(). Replace Tcl_DbNewBooleanObj() with trivial macro. 2017-03-13 08:38:18 +00:00
dkf 4ccedfaec4 Add back missing significant character 2017-03-13 06:16:45 +00:00
fvogel c010901ea9 Fix error in formatting in info.n 2017-03-12 19:45:00 +00:00
dkf c0bedd810f Add mappings for groff-style character naming, used in experimental branches of Tk. 2017-03-12 18:36:21 +00:00
dgp 57ceb807ca merge 8.6 2017-03-10 17:22:26 +00:00
dgp a69a45201b merge trunk 2017-03-10 17:20:51 +00:00
José Ignacio Marín 5d66bf5a1f Merge the update of TZ info with trunk. 2017-03-10 17:07:44 +00:00
hypnotoad 627f0a4d6a Pulling changes from zipfs 2017-03-10 17:03:10 +00:00
José Ignacio Marín d4b614d655 Update TZ data with tzdata2017a from IANA 2017-03-10 16:59:02 +00:00
dgp 91d32c4556 Silence valgrind complaints from [representation]. 2017-03-10 16:41:32 +00:00
dgp e9e0f57d92 Dup test name 2017-03-10 15:28:46 +00:00
dgp f090fee89b Start RC branch for Tcl 8.6.7 2017-03-10 15:22:08 +00:00
jan.nijtmans f55296bdf0 minor simplification 2017-03-08 14:50:44 +00:00
jan.nijtmans bed000d72e A few more end-of-line spacings 2017-03-08 14:32:15 +00:00
jan.nijtmans b2181df698 Fix compile error on Cygwin, and double definition of TclUnixWaitForFile() 2017-03-08 13:56:55 +00:00
jan.nijtmans 6469ae095f Re-base to trunk, and get latest code from here: [https://github.com/lalbornoz/tcl/tree/tip458]. Untested. 2017-03-08 13:35:23 +00:00
jan.nijtmans 65775144bb merge trunk 2017-03-08 12:08:40 +00:00
sebres 636e904b09 merge core-8-6-branch 2017-03-07 18:21:24 +00:00
sebres 2c343f8ac1 expand test constraints of the load-8.x test cases (wrap setup prerequirements as new constraint "teststaticpkg_8.x") 2017-03-07 18:19:55 +00:00
jan.nijtmans b645469c95 merge core-8-6-branch 2017-03-07 12:21:28 +00:00
sebres 30dc72c0aa merge sebres-trunk-timerate 2017-03-07 11:38:31 +00:00
sebres 279bfdeef3 timerate: don't calculate threshold by too few iterations, because sometimes first iteration(s) can be too fast (cached, delayed clean up, etc). 2017-03-07 11:35:03 +00:00
jan.nijtmans da85dcc288 Fix [e14d152114efee10394a7e0b4b1c0478efff52c5|e14d152114]: bundled zlib documentation is under a potentially non-free license 2017-03-07 11:08:47 +00:00
jan.nijtmans 07050778e3 Fix [e14d152114efee10394a7e0b4b1c0478efff52c5|e14d152114]: bundled zlib documentation is under a potentially non-free license 2017-03-07 11:05:26 +00:00
jan.nijtmans ac3cb936ee Merge core-8-6-branch 2017-03-07 09:47:41 +00:00
jan.nijtmans d183e03dc3 Remove "makefile.bc". Not updated for many-many years, most likely it doesn't work any more and it doesn't seem to care anyone. Let's see if someone complains ;-) 2017-03-07 09:36:34 +00:00
jan.nijtmans e295641767 merge core-8-6-branch 2017-03-07 09:09:44 +00:00
jan.nijtmans 99f1cb58e8 merge trunk 2017-03-07 08:58:29 +00:00
sebres fa0de66105 tclEmptyStringRep -> &tclEmptyString 2017-03-06 21:01:53 +00:00
sebres aaa76b7a7d msgcat.test: fixed mcpackagelocale syntax usage test case (msgcat-12.1) 2017-03-06 20:32:54 +00:00
sebres ad788184e3 merge trunk 2017-03-06 20:19:39 +00:00
sebres aec683eef8 merge trunk 2017-03-06 20:18:35 +00:00
sebres 41646a2294 merge core-8-6-branch 2017-03-06 20:10:42 +00:00
sebres 2a1688c8f5 chanio.test: [win] fix test case (setup set translation to "lf", because of default translation on windows "crlf") 2017-03-06 20:07:08 +00:00
sebres 6ba062e067 nre.test: add constraint for nre-0.1 (testnreunwind may be not available) 2017-03-06 20:05:13 +00:00
sebres 089381e2b1 zlib.test: fix sporadic errors:
- zlib-9.2 hangs because of too short update, if processed another event;
 - zlib-8.8 wrong non-blocking pipe usage - [string length $compressed] may return sporadically values smaller as expected (< 222)
2017-03-06 20:02:55 +00:00
dgp 2cc5f1ab51 merge trunk 2017-03-06 17:37:13 +00:00
avl ef3d739cdf Fix for Ticket [71c0878b71] + test cases 2017-03-05 15:05:48 +00:00
jan.nijtmans c3a18ac8f4 merge core-8-6-branch 2017-02-27 16:04:00 +00:00
dgp 04ff99c8e5 merge trunk 2017-02-27 15:09:31 +00:00
dgp 0f7d84bbbf ParseTokens failed to fully respect its numBytes argument. 2017-02-27 14:53:32 +00:00
dgp 94253c0df4 ParseTokens failed to fully respect its numBytes argument. 2017-02-27 14:52:13 +00:00
dgp 30c48b68df ParseTokens failed to fully respect its numBytes argument. 2017-02-27 14:51:15 +00:00
dkf 7088b7efe3 [25842c161f] Ensure that finalization of a zlib stream works. 2017-02-26 15:33:04 +00:00
dkf 13ccdabc07 [25842c161f] Ensure that finalization of a zlib stream works. 2017-02-26 15:32:11 +00:00
dkf 203bbab7c9 Might as well number tests more conventionally. 2017-02-26 15:28:29 +00:00
dkf 93d3ea1393 Make tests produce more meaningful information when they fail. 2017-02-26 13:19:08 +00:00
jan.nijtmans f9dda45e97 merge core-8-6-branch 2017-02-25 15:57:39 +00:00
jan.nijtmans b667a58dab More internal use of size_t in stead of int (e.g. in many 'epoch's) 2017-02-22 09:07:55 +00:00
dkf 874b8643e0 Add documentation of [regsub -command]. 2017-02-18 18:38:52 +00:00
dkf d18329a21e Testing for some error cases. 2017-02-18 16:24:09 +00:00
dkf 82296abf08 Add more representation smashing testing and a memleak test. 2017-02-18 14:26:34 +00:00
dkf 5772e32729 Stop problems with representation smashes. 2017-02-17 09:20:49 +00:00
dkf 3ef7160d41 Switch to using command prefixes properly. This is quite a bit faster. 2017-02-17 06:08:18 +00:00
jan.nijtmans a0aef631dd merge trunk 2017-02-15 14:08:22 +00:00
jan.nijtmans 462ffc7927 More internal use of size_t in stead of int, e.g. for epoch's 2017-02-15 14:04:15 +00:00
jan.nijtmans 80893d2ca7 merge trunk 2017-02-14 14:26:23 +00:00
jan.nijtmans a13289725c On Windows, Cygwin and 64-bit platforms, no need to handle 'long' in tclLink.c, since its size is equal to either 'int' or 'Tcl_WideInt'. This enhances interoperabilty between win64 extensions loaded in cygwin64 using Tcl_LinkVar(), whill still being 100% compatible.
init.tcl:  unnecessary spacing.
2017-02-14 14:25:08 +00:00
aspect c8646e5c72 fix chan leak with http keepalive vs close (bug [6ca52aec14]) 2017-02-12 12:57:29 +00:00
dkf efa3ec6939 Proposed implementation of [regsub -command]. 2017-02-11 21:36:36 +00:00
aspect a638162ed4 better tests for finalization 2017-02-11 07:18:08 +00:00
aspect c77bd091df zlib stream finalize calls deflate with no input - this case (and this case
only) must be allowed.

Fixes 2nd issue in [25842c161f], introduced by [c1aff52ef3]
2017-02-11 05:06:43 +00:00
sebres 2bb76d85aa merge sebres-trunk-timerate 2017-02-09 13:50:27 +00:00
sebres 8dde174dd4 [win] accomplished winTime module using very fast wide clicks, with denominator scale to/from microseconds, and therefore more precise "timerate" results under windows (using similar mechanisms as by Mac OSX).
Especially multi-threaded, because it works without lock opposite to microseconds (that use crictical section, because of the calibration thread).
The reason for usage of wide clicks instead microseconds explains following example (shows 20% performance deference):
% timerate -calibrate {}
% timerate {clock microseconds} 5000
0.297037 µs/# 14465901 # 3366585 #/sec 4296.906 nett-ms
% timerate {clock clicks} 5000
0.247797 µs/# 16869084 # 4035554 #/sec 4180.116 nett-ms
2017-02-09 13:45:14 +00:00
sebres ca98340c4c [timerate] bug fix: missing scale conversion by Mac OSX on platform where high resolution clicks are not microseconds based;
[win] use high resolution timer for the wide clicks and microseconds directly, prevent several forwards/backwards conversions;
[win, unix, mac-osx] normalize some functions for common usage in different time units (clicks, micro- and nanoseconds)
2017-02-09 11:36:17 +00:00
sebres 35539e2f98 resolve warning: enumeration value ‘TMRT_LAST’ not handled in switch (impossible to handle in switch because of break); 2017-02-09 11:34:43 +00:00
jan.nijtmans da2aacb75f merge trunk 2017-02-08 22:02:12 +00:00
jan.nijtmans 8fb5bb0f20 TIP #459 feedback from FlightAware: Add package-related pkgIndex.tcl file to "package files" output. 2017-02-08 22:01:45 +00:00
jan.nijtmans 773b4febf2 Shortcut in TclParseNumber(): If obj is a dict or list, don't bother to generate the string representation if we know already beforehand that the parsing will fail. 2017-02-08 14:40:36 +00:00
jan.nijtmans 6db42b86e6 Shortcut in TclParseNumber(): If obj is a dict or list, don't bother to generate the string representation if we know already beforehand that the parsing will fail.
Use TCL_NO_DEPRECATED in stead of KILL_OCTAL for removing the (deprecated un-prefixed) octal support.
Adapt test-cases, so they work without octal support as well.
2017-02-08 14:32:13 +00:00
jan.nijtmans 8066c6a687 FlightAware feedback: "Aside: Any way to find out what the pkgIndex.tcl file a package was defined in was, or does that happen at too high a level?"
Answer: Even though the name of the pkgIndex file is available earlier, it is very well possible to remember it and store it with the other files. This commit does exactly that.
2017-02-08 11:42:12 +00:00
jan.nijtmans 5bb280ce2f merge trunk 2017-02-07 12:28:17 +00:00
jan.nijtmans 4671050f10 Code cleanup (based on feedback from René Zaumseil): Only call GetInvalidIntFromObj() when Tcl_GetIntFromObj() fails. 2017-02-07 12:27:19 +00:00
jan.nijtmans fca34fb8d0 Code cleanup (based on feedback from René Zaumseil): Only call GetInvalidIntFromObj() when Tcl_GetIntFromObj() fails. 2017-02-07 12:11:29 +00:00
bch 0e31751aed cherrypick typo fix. 2017-02-06 21:58:48 +00:00
bch d5c18c780a s/then/than/ in Eval.3 manpage 2017-02-06 21:54:30 +00:00
jan.nijtmans 2adba3032c merge trunk 2017-02-03 14:40:31 +00:00
jan.nijtmans 19e0981d35 Split tclEmptyStringRep declaration over two lines. Otherwise gcc warning. 2017-02-03 14:29:50 +00:00
jan.nijtmans 0a378930a3 merge trunk 2017-02-03 14:03:11 +00:00
jan.nijtmans b2a59d29b6 TIP #459 remaining part of implementation. Makes "package require Tk" give the right (... at least ... the expected ...) answer. 2017-02-03 12:27:37 +00:00
jan.nijtmans d917353c7e In TclGetNumberFromObj() macro (tclExecute.c): Don't fill in type if TCL_ERROR is returned: The caller doesn't do anything with this.
Don't access (non-const) variable tclEmptyStringRep any more, use its value (&tclEmptyString) directly. Only keep it in tclPkg.c, for error checking.
2017-02-03 11:47:02 +00:00
jan.nijtmans c915433671 Fix [d0f7ba56f0e8f93b7efb5b09ebc30a824bdd577a|d0f7ba56f0]: INST_EQ first-argument NaN shortcut is too aggressive 2017-02-01 14:56:03 +00:00
jan.nijtmans 5fdbd4a749 Fix [d0f7ba56f0e8f93b7efb5b09ebc30a824bdd577a|d0f7ba56f0]: INST_EQ first-argument NaN shortcut is too aggressive 2017-02-01 14:55:02 +00:00
jan.nijtmans b3800e2fed Fix [d0f7ba56f0e8f93b7efb5b09ebc30a824bdd577a|d0f7ba56f0]: INST_EQ first-argument NaN shortcut is too aggressive 2017-02-01 14:53:48 +00:00
jan.nijtmans 67b6b8b92c Fix [d0f7ba56f0e8f93b7efb5b09ebc30a824bdd577a|d0f7ba56f0]: INST_EQ first-argument NaN shortcut is too aggressive 2017-02-01 14:42:48 +00:00
jan.nijtmans d90ca33b91 merge trunk 2017-01-31 13:46:03 +00:00
jan.nijtmans 17cf9db2f7 Update documentation on recent changes in Tcl_LinkVar.
Minor code clean-up. No functional changes.
2017-01-31 13:27:28 +00:00
jan.nijtmans e7e8174dba Update documentation on recent changes in Tcl_LinkVar.
Don't use TCL_NO_DEPRECATED for disabling tests-cases: Those were not deprecated in 8.6 yet.
Minor code clean-up. No functional changes.
2017-01-31 13:15:40 +00:00
ashok 4b357897d5 Added assoc, ftype and move as auto_execok shell built-ins on Windows. 2017-01-28 06:38:22 +00:00
dgp 44ec4c77c1 merge trunk 2017-01-27 17:45:21 +00:00
jan.nijtmans 68275b03de Some code cleanup: More internal use of size_t, less type casts (because of this). No functional changes. 2017-01-27 14:31:12 +00:00
jan.nijtmans e917f5db4a Convert Tcl_SetResult() to a macro 2017-01-25 12:50:18 +00:00
jan.nijtmans 2645c0ef3a If TCL_NO_DEPRECATED is defined, remove the "case" statement, and use much less interp->result. Implementation mostly taken over from "novem". If TCL_NO_DEPRECATED is not defined, nothing changes. 2017-01-25 12:22:16 +00:00
jan.nijtmans d6418172e0 Put back counter in test-case, so we can see if TestsaveresultFree() was actually called or not. 2017-01-24 15:42:32 +00:00
jan.nijtmans 7de961e9fa Merge trunk 2017-01-23 09:11:34 +00:00
jan.nijtmans fd5d15f9df merge trunk 2017-01-20 16:22:45 +00:00
jan.nijtmans c26df8ae12 Fix [39f6304c2e90549c209cd11a7920dc9921b9f48e|39f6304c2e] follow-up: Make Tcl_LinkVar toleranto to the empty string as well 2017-01-20 16:21:43 +00:00
jan.nijtmans d1c1cbf476 Fix [39f6304c2e90549c209cd11a7920dc9921b9f48e|39f6304c2e] follow-up: Make Tcl_LinkVar toleranto to the empty string as well 2017-01-20 16:20:27 +00:00
jan.nijtmans 4166996b42 Fix [39f6304c2e90549c209cd11a7920dc9921b9f48e|39f6304c2e] follow-up: Make Tcl_LinkVar toleranto to the empty string as well 2017-01-20 16:18:00 +00:00
fvogel 47692f4e99 Fix [1f4bb8162f]: lsort -dictionary documentation to be improved 2017-01-19 22:38:40 +00:00
fvogel 649902f7fa Fix [1f4bb8162f]: lsort -dictionary documentation to be improved 2017-01-19 22:37:48 +00:00
jan.nijtmans d2724ffe92 merge trunk 2017-01-18 13:12:02 +00:00
jan.nijtmans e7e764dbdf Implement tag "deprecated" in genStubs.tcl. Will be used in Tk 8.7, for tagging the deprecated function Tk_FreeXId() 2017-01-17 12:02:43 +00:00
jan.nijtmans ce1ad42e8f merge trunk 2017-01-17 10:06:34 +00:00
jan.nijtmans b0aa1e2416 merge core-8-6-branch 2017-01-17 10:04:42 +00:00
jan.nijtmans 3cd704802f Test-cases which require Tcl 8.5 (or 8.6) should continue to work unmodified in Tcl 9.0. The "novem" branch will show whether this continues to work. 2017-01-17 10:00:58 +00:00
jan.nijtmans a5c310f993 merge core-8-6-branch 2017-01-17 09:06:45 +00:00
jan.nijtmans ea1cc886b5 Hm. 32-bit zlib dll still was the 1.2.10 version. Corrected now. 2017-01-17 09:02:13 +00:00
jan.nijtmans 80d9aa777b Merge core-8-6-branch. Better deal with patterns regarding hidden files in ZIP filesystem (taken over from upstream androwish) 2017-01-16 12:46:42 +00:00
jan.nijtmans d62bcbc611 merge trunk 2017-01-16 11:59:03 +00:00
jan.nijtmans 3dba96d22a Fix for missing proper initialization of the threaded allocator in some situations. Problem reported by Zoran Vasiljevic, only noted when building/running NaviServer/AOLServer with Tcl 8.7 (trunk). 2017-01-16 11:57:17 +00:00
jan.nijtmans a0ea496ffb Update zlib to version 1.2.11 2017-01-16 11:53:07 +00:00
jan.nijtmans 1ef8141062 Update zlib to version 1.2.11 2017-01-16 10:23:14 +00:00
venkat 4434540502 Merge IETF tzdata2016j 2017-01-14 08:47:39 +00:00
venkat 893b999f51 Merge IETF tzdata2016j 2017-01-14 08:47:15 +00:00
venkat 1a7f4b5e4c Merge IETF tzdata2016j 2017-01-14 08:46:40 +00:00
venkat 2d2102400e Upgrade TZDATA to IETF tzdata2016j 2017-01-14 08:46:06 +00:00
dgp 1c1f866bac merge trunk 2017-01-13 16:23:42 +00:00
jan.nijtmans 35d8e3912d Introduce new function TclInitThreadAlloc(), symmetric with TclFinalizeThreadAlloc() 2017-01-13 14:43:07 +00:00
sebres 4c239ca4d9 merge trunk 2017-01-13 14:22:31 +00:00
jan.nijtmans e1dcac30d8 close fork 2017-01-13 13:04:54 +00:00
jan.nijtmans a89608d308 Merge-mark (restoring the expected merge order from core-8-5-branch -> core-8-6-branch -> trunk -> novem) 2017-01-13 13:02:32 +00:00
jan.nijtmans 4477fe0e52 Merge-mark (restoring the expected merge order from core-8-5-branch -> core-8-6-branch -> trunk -> novem) 2017-01-13 13:01:19 +00:00
sebres bd9426f3e5 missing rules.vc after merge 2017-01-13 12:57:45 +00:00
jan.nijtmans 9cbd55378d Allows to compile direct from Visual Studio IDE (prevents throwing error "LNK1561: entry point must be defined" by testing linker). Patch by sebres 2017-01-13 12:57:10 +00:00
sebres 4c43040671 missing rules.vc after merge 2017-01-13 12:57:05 +00:00
sebres ad6dcfad67 missing rules.vc after merge 2017-01-13 12:55:53 +00:00
jan.nijtmans db64748807 merge core-8-5-branch 2017-01-13 12:23:05 +00:00
jan.nijtmans abdbe053ea Enhance nmakehlp, allowing multiple arguments for "-l", and recognizing a new linker code LNK4224. Patch by sebres. 2017-01-13 12:20:21 +00:00
jan.nijtmans 818f1bf68b Enhance nmakehlp, allowing multiple arguments for "-l", and recognizing a new linker code LNK4224. Patch by sebres. 2017-01-13 12:18:27 +00:00
jan.nijtmans d4722d6135 Enhance nmakehlp, allowing multiple arguments for "-l", and recognizing a new linker code LNK4224. Patch by sebres. 2017-01-13 12:12:55 +00:00
jan.nijtmans 6ecb7aeabf Patch from Zoran Vasiljevic, fix for missing proper initialization of the threaded allocator in some situations. 2017-01-13 11:17:17 +00:00
sebres 8288292b59 Fixes nmakehlp: allows more as one option by -l, to provide mandatory linker parameters (e. g. "LNK1561: entry point must be defined");
Additionally recognizes an new linker code LNK4224 for "no longer supported; ignored".
2017-01-12 18:37:50 +00:00
jan.nijtmans 255a9e3bf7 merge trunk 2017-01-12 10:37:16 +00:00
jan.nijtmans d42b3a00d3 Merge core-8-6-branch 2017-01-12 10:34:05 +00:00
jan.nijtmans 7461bedeb9 Fix version number in tcl.dsp (thanks to Arjen Markus for noticing this) 2017-01-12 10:31:46 +00:00
sebres a83eb05b98 Allows to compile direct from Visual Studio IDE (prevents throwing error "LNK1561: entry point must be defined" by testing linker) 2017-01-12 08:44:56 +00:00
sebres 77481ec3e1 code review and inline documentation 2017-01-11 16:36:28 +00:00
sebres f03990cd12 code review: small optimization of msgcat::mcget, prevents infinite loop if at all no translation 2017-01-11 16:35:41 +00:00
jan.nijtmans 1ebb964dbc Use more Tcl_AppendResult(), in order to prevent the use of a (char *) type case. 2017-01-11 16:23:18 +00:00
jan.nijtmans e8edeca09d merge trunk 2017-01-11 14:39:41 +00:00
jan.nijtmans e6d3efd5e1 Merge core-8-6-branch.
Do gcc-compiles with the option -Wwrite-strings, so we can detect mis-usage of "const".
Make Tcl_AddErrorInfo() and Tcl_AddObjErrorInfo() a macro.
2017-01-11 14:10:33 +00:00
jan.nijtmans ce1701ea1f Merge-mark core-8-5-branch.
Remove useless #undef.
2017-01-11 13:41:00 +00:00
sebres a841205be9 amend lost changes after rebase to fossil 2017-01-10 23:09:23 +00:00
sebres df7cbb28e0 small amend (reset have rel flag) 2017-01-10 23:02:14 +00:00
sebres 01697f2acc "clock add" rewritten in C, using common functionality of "clock scan" (and freescan)...
test-performance.tcl: test cases extended to cover "clock add"
2017-01-10 23:02:02 +00:00
sebres 0a1c05fbb8 code review and inline documentation 2017-01-10 23:01:23 +00:00
sebres 8fa2e7802e correct output of total resp. average values considering net execution time (overhead considered) 2017-01-10 23:00:05 +00:00
sebres c2ee1525ef [unix] resolving of several warnings (gcc 5.x):
- static used in non-static inline function;
- x64 int cast on pointer [-Wpointer-to-int-cast];
- (obscure) may be used uninitialized in this function [-Wmaybe-uninitialized];
- TclEnvEpoch initialized and declared extern;
2017-01-10 22:59:16 +00:00
sebres ae731e3e50 test-performance: added calibration of timerate to minimize influence of the parasitical execution-overhead by extremely fast execution times 2017-01-10 22:58:29 +00:00
sebres bc879a58f2 Merge remote-tracking branch 'remotes/fossil/trunk' into sb/trunk-rewrite-clock-in-c; + minor fixes after merge. 2017-01-10 22:56:13 +00:00
sebres d551c0972c [unix] build for *nix fixed, code clean-ups; missing declarations; unused vars, functions etc; types normalization; 2017-01-10 22:55:00 +00:00
sebres 27fd5c0793 dict: unused variable removed 2017-01-10 22:53:05 +00:00
sebres 264cc47fd4 another way to make greedy search more precise, some greedy matches are fixed (see test cases clock-6.22.11 - clock-6.22.20), additionally involving look ahead token of known type into pre-search process. 2017-01-10 22:52:44 +00:00
sebres 866efbc904 some greedy matches are fixed (see test cases clock-6.22.11 and clock-6.22.12), involving space count in look ahead and end distance calculation (because spaces are optional in date-time string as well as in scanning format). 2017-01-10 22:52:12 +00:00
sebres 941e45f907 clock.tcl: clean unused resp. obsolete commands 2017-01-10 22:45:59 +00:00
sebres 7a654297a0 small code review, performance test cases ready. 2017-01-10 22:45:29 +00:00
sebres 4600d7c026 performance test cases ready 2017-01-10 22:44:55 +00:00
sebres c97ddc73f6 several missing scan tokens added, test cases extended and fixed;
token "%s" used for seconds only (time zone independent), additionally "%Es" token added for local seconds (zone dependent seconds);
2017-01-10 22:44:30 +00:00
sebres bd20b3429a porting of clock format completed; all clock test cases passed 2017-01-10 22:43:22 +00:00
sebres d830389b53 [temp-commit]: format almost ready (missing some tokens), sprintf replaced with _itoaw (because "sprintf" too slow) 2017-01-10 22:42:15 +00:00
sebres 63c8495242 [temp-commit]: format almost ready (missing some tokens) 2017-01-10 22:41:18 +00:00
sebres 9d7b1b2b03 min length of %Y token (year with century) is 4, optional tokens possibility (zone), test cases extended 2017-01-10 22:40:16 +00:00
sebres 0f7c885e8c other locale scan token switched from list seek to index tree + list search case insensitive now 2017-01-10 22:39:45 +00:00
sebres 95b63f4c39 locale months scan switched to from list seek to index tree; bug fixing 2017-01-10 22:38:56 +00:00
sebres 20ec6252d1 lowercase on demand, string index tree can search any-case now, clock scan considered utf-8 char length in words by format parsing 2017-01-10 22:38:22 +00:00
sebres 2ba998572c string index tree for fast greedy search of the string (index) by unique string prefix as key;
clock scan rewritten to use string index tries search;
2017-01-10 22:37:40 +00:00
sebres c5ff074db9 cacheable conversions Local2UTC / UTC2Local fixed (some TZ switches time seconds bound) and optimized (last period ranges saved);
prepare to back-port clock format
2017-01-10 22:36:19 +00:00
sebres 717e43f1bd estimate token count by % char and format length (don't use fix TOK_CHAIN_BLOCK_SIZE by creation, minimized memory usage) 2017-01-10 22:35:34 +00:00
sebres e130d09c74 small optimization (determine min/max length, end distance, etc.) 2017-01-10 22:35:14 +00:00
sebres 36d60df82c clock scan almost ready (currently test-case covered tokens only), test cases passed; todo - check other tokens from "clock.tcl" 2017-01-10 22:34:42 +00:00
sebres e9177a25c1 bug fix by match word token (FindWordEnd fixed);
repaired current locale switch
2017-01-10 22:34:11 +00:00
sebres 02b4c1de38 repaired system/current locale caching (also for legacy clock format) and legacy timezone cached as last 2017-01-10 22:33:41 +00:00
sebres feb62aa2bd scan format: several tokens implemented, bug fixing and code review;
precedence yyyymmdd over yyyyddd was changed (and re-covered in test-cases also), see http://core.tcl.tk/tcl/tktview/e7a722cd3573fedda5d1e528f95902776f996e06
2017-01-10 22:32:46 +00:00
sebres 6c38124bb9 %j token as day of year; clear flags implemented (to provide last-wins functionality) 2017-01-10 22:31:43 +00:00
sebres caf50ef7ea seconds token (%s) take precedence over all other tokens 2017-01-10 22:31:12 +00:00
sebres c51ce8e879 list index logic optimized regarding greedy search (don't stop by first found - try to find longest) 2017-01-10 22:30:49 +00:00
sebres 94dc5e4e43 improve LocalizeFormat, internal caching of localized formats inside msgcat for locale and format objects
smart reference introduced in dict (smart pointer with 0 object reference but increase dict-reference, provide changeable locale dict)
code review
2017-01-10 22:30:24 +00:00
sebres c52322d409 improve LocalizeFormat, internal caching of localized formats inside msgcat for locale and format objects
smart reference introduced in dict (smart pointer with 0 object reference but increase dict-reference, provide changeable locale dict)
2017-01-10 22:28:25 +00:00
sebres a4c93085d2 l10n (with caching) implemented, msgcat package optimized, code review, etc. 2017-01-10 22:25:20 +00:00
sebres 18dc49dd08 [temp-commit]: not ready 2017-01-10 22:23:37 +00:00
sebres c5d6cc90d9 several initialize and finalize facilities 2017-01-10 22:21:26 +00:00
sebres bcb2a0a181 amend for caching of UTC2Local / Local2UTC:
* tzdata used internally only (because cached, replaced with timezone object as parameter for several functions)
  * small improvement (don't need to convert UTC to UTC)
2017-01-10 22:20:25 +00:00
sebres 940c0805c0 [temp-commit]: code review, DST-hole mistake by scan with relative time resolved;
caching of UTC2Local / Local2UTC cherry picked
2017-01-10 22:19:01 +00:00
sebres a3c42aef3e [temp-commit]: clock scan tokenizer logic ready (still needs many rules)
caching extended (currentYearCentury, yearOfCenturySwitch, lastBaseDate ...)
2017-01-10 22:15:36 +00:00
sebres aba1f29686 [temp-commit]: rewrite scan token map handling 2017-01-10 22:12:07 +00:00
sebres 898bc97bbe [temp-commit]: tclClockFmt.c - amend for 2nd try (with cherry picking of tclSE incompatible facilities)
Prepared for common usage of both scan commands - free scan / scan with format (currently faked via eval to __org_scan);
test cases passed.
2017-01-10 22:10:44 +00:00
sebres 5ab3eafa66 [temp-commit]: tclClockFmt.c - 2nd try (with cherry picking of tclSE incompatible facilities)
Prepared for common usage of scan command (free scan / format scan)
2017-01-10 22:09:02 +00:00
sebres 1f1f1e4dfc [temp-commit]: tclClockFmt.c - 1st try
using "timerate" instead "time" by performance measurement tests (more precise and fixed time, so no switch of factor expected)
2017-01-10 22:07:37 +00:00
sebres 32b5c49ef3 [temp-commit]: ClockFreeScan back-ported (cherry picked), all tests case passed + several new test-cases for bug fixing implemented here;
environment epoch ported, several fixes for the time zone / tzdata caching ported;
mem-leak fix + memory leak test cases passed
2017-01-10 22:04:49 +00:00
sebres 21878028d5 [temp-commit]: ClockFreeScan ready, test case passed (2 failure because of wrong :localtime zone by TZ-switch, to be fixed) 2017-01-10 22:02:10 +00:00
sebres 18b31092c6 [temp-commit]: ClockFreeScan seems to be ready, test case should be checked 2017-01-10 22:01:13 +00:00
sebres 736824a259 [temp-commit]: ClockFreeScan almost ready, test-performance cases merged 2017-01-10 21:59:59 +00:00
sebres 9e52bb21b7 [temp-commit]: clock scan with several optimization porting, still not-ready 2017-01-10 21:58:33 +00:00
sebres a3433951b0 1st try to rewrite clock in C 2017-01-10 21:57:06 +00:00
sebres ad284758d3 Create new branch named "sebres-clock-speedup" 2017-01-10 21:20:03 +00:00
sebres 6aed9a6630 [win] load win-registry library also in development environment (uninstalled) 2017-01-09 19:33:23 +00:00
sebres 704f3a5483 missing entry of tclInt.h added 2017-01-09 19:31:08 +00:00
sebres 2de37edd0d New performance measurement routine "timerate" in opposition to "time" the execution
limited by fixed time (in milliseconds) instead of repetition count (more precise 
results, to prevent very long execution time it is no more necessary to estimate 
repetition count)

Syntax: timerate ?-direct? ?-calibrate? ?-overhead double? command ?time?
2017-01-09 19:09:49 +00:00
sebres ec306bb22e Merge fix clock test-cases from 8.6: Make test clock-67.5 time zone independent - execution fails in the time zones below gmt 2017-01-09 18:28:56 +00:00
sebres f736317f65 Fix clock test-cases: Make test clock-67.5 time zone independent - execution fails in the time zones below gmt 2017-01-09 18:23:44 +00:00
sebres 8b67c7f038 Merge bug_b87ad7e914 2017-01-09 17:53:00 +00:00
sebres 87cb0ba76e Merge bug_b87ad7e914 2017-01-09 17:51:46 +00:00
sebres 8bafbbd290 Merge bug_b87ad7e914 2017-01-09 17:45:12 +00:00
jan.nijtmans 8fe791a69e Fix for [b87ad7e9146832d505f9a430d779c5313c440256|b87ad7e914], rebased to core-8-5-branch (who said fossil doesn't have 'rebase'...), and moved the definition of "struct _timeb t" to the top of the function.
This branch is ready to be merged to core-8-5-branch, it looks good to me. Thanks to sebres (Dipl. Ing. Sergey G. Brester)
2017-01-09 09:08:37 +00:00
jan.nijtmans c745f44e3a Merge core-8-6-branch 2017-01-06 11:47:15 +00:00
jan.nijtmans cc89e55f7d Merge trunk 2017-01-06 11:39:10 +00:00
jan.nijtmans eeb500cf5a Merge trunk 2017-01-06 10:32:55 +00:00
jan.nijtmans 860e480e47 Complete the upgrade to Zlib 1.2.10: Now add the *.lib and *.dll files 2017-01-06 10:30:31 +00:00
jan.nijtmans aea2e32830 Complete the upgrade to Zlib 1.2.10: Now add the *.lib and *.dll files. 2017-01-06 10:24:53 +00:00
jan.nijtmans 6312f7bf4f Merge trunk 2017-01-05 15:25:32 +00:00
jan.nijtmans 03d119a937 Make TclGetLoadedPackagesEx() work with other than the only current interpreter (didn't really think about that earlier ... ). Actually slightly more correct. 2017-01-05 15:13:58 +00:00
jan.nijtmans 3703dbd940 Merge trunk 2017-01-05 14:47:07 +00:00
jan.nijtmans 570a13bc17 Fix [7c7d3b4481d4e4e86420b54031f4abd1df18d64|7c7d3b4481]: load test failures. There's a difference between "" and NULL as interpreter name. 2017-01-05 14:27:20 +00:00
jan.nijtmans 8da19e064b One more ::tcl::Pkg::source, for the Mac 2017-01-05 13:09:26 +00:00
jan.nijtmans 666afa7352 Merge trunk. Improve test-case. Bring back "source -nopkg", but only as undocumented internal helper for ::tcl::Pkg::source. 2017-01-05 11:55:56 +00:00
fvogel 45db025684 Added more glob patterns in order to ignore html generated documentation and Windows-specific compilation products when running fossil extra 2017-01-04 16:34:03 +00:00
fvogel 4d7100b8ac Added more glob patterns in order to ignore html generated documentation and Windows-specific compilation products when running fossil extra 2017-01-04 16:33:28 +00:00
jan.nijtmans 5e02396d5e In stead of "source -nopkg" use a ::tcl::Pkg::source utility function. 2017-01-04 16:23:23 +00:00
jan.nijtmans 2e108cd831 Fix safe.tcl test-cases: "source -nopkg" is not necessary here: "source" is an alias for "::safe::AliasSource", which doesn't use "source" 2017-01-04 15:16:31 +00:00
jan.nijtmans 27fb8875b7 Merge trunk. First steps in eliminating "source -nopkg". Some test-cases still fail. 2017-01-04 14:05:20 +00:00
jan.nijtmans acdb5b2026 Fix 2 test-cases, due to changed command options. 2017-01-04 13:51:26 +00:00
jan.nijtmans f711652d04 TIP [http://www.tcl.tk/cgi-bin/tct/tip/459|459] implementation, but (for now) without the "source -nopkg" part. 2017-01-04 13:38:56 +00:00
jan.nijtmans da2ee554de merge trunk 2017-01-04 13:01:11 +00:00
jan.nijtmans ca2077254b TIP [http://www.tcl.tk/cgi-bin/tct/tip/456|456] implementation: Extend the C API to Support Passing Options to TCP Server Creation 2017-01-04 12:55:27 +00:00
jan.nijtmans 99fa27bc91 merge core-8-6-branch 2017-01-04 11:55:28 +00:00
jan.nijtmans 76070165e3 Update zlib to version 1.2.10. Dll's and *.lib files not updated yet 2017-01-03 10:43:32 +00:00
sebres 1e55e1eb8c [win] bug fix in NativeGetTime: each call of it blurs current performance counters actualized in calibration thread in UpdateTimeEachSecond;
This entails that sometimes sporadically time-drifts resp. jump-esque time-shifts occurred, what for example produces very confusing results during time measurement.
[unix] wrong cast fixed in TclpGetWideClicks: multiplication with 1000000 in long int may cause overflow

See ticket b87ad7e9146832d505f9a430d779c5313c440256
2017-01-02 14:31:22 +00:00
limeboy a2c66d61f0 Make the code slightly more pleasing to the eyes. 2017-01-01 22:19:26 +00:00
jan.nijtmans bd7f2bebde merge trunk 2017-01-01 19:50:41 +00:00
jan.nijtmans c2287f3873 merge core-8-6-branch 2017-01-01 19:49:56 +00:00
jan.nijtmans 4808c18e05 Fix [39f6304c2e]: Tcl_LinkVar is not tolerant to minus, plus, dot 2017-01-01 19:46:22 +00:00
jan.nijtmans 402b0c3f5e Fix [39f6304c2e]: Tcl_LinkVar is not tolerant to minus, plus, dot 2017-01-01 19:29:31 +00:00
jan.nijtmans 2f38b34699 (cherry-pick): Update zlib to version 1.2.9. Dll's and *.lib files not updated yet 2017-01-01 19:15:39 +00:00
jan.nijtmans 182fd112ea Update zlib to version 1.2.9. Dll's and *.lib files not updated yet 2017-01-01 19:10:32 +00:00
jan.nijtmans 29ea02d93b merge trunk 2016-12-23 15:49:42 +00:00
jan.nijtmans b76f99d88c Update -DMSTATS functionality, for possible total memory sizes > 2Gb. One more place where use of size_t can increase range. 2016-12-23 15:43:42 +00:00
jan.nijtmans 716453aae6 Little tweak: Decimal dot's should be allowed as well as first part. Test-case for that as well. 2016-12-23 12:02:08 +00:00
jan.nijtmans c7da596da2 Handle other invalid sequences, like "1234e" or "-567e+", that could be the start of a valid real number. 2016-12-23 11:59:05 +00:00
jan.nijtmans 9c4eb9d121 Deprecate otherValuePtr and ptrAndLongRep. Some more minor tweaks. 2016-12-23 10:07:38 +00:00
jan.nijtmans 9394984c31 merge novem 2016-12-23 09:32:32 +00:00
jan.nijtmans dedbad2748 merge trunk 2016-12-23 09:11:43 +00:00
jan.nijtmans f256ed021d Eliminate the internal macro/function TclNewIntObj: In all cases TclNewLongObj is just as good. 2016-12-23 08:27:02 +00:00
jan.nijtmans 4532b23e99 Fix some comments (which were not correct any more in this branch), and don't allow booleans in integer context. 2016-12-22 11:38:22 +00:00
jan.nijtmans 9a2993c23f Re-based to core-8-5-branch.
Proposed fix for [39f6304c2e90549c209cd11a7920dc9921b9f48e|39f6304c2e], which doesn't need modifications to Double/Integer valid string representations.
2016-12-22 11:27:01 +00:00
jan.nijtmans 2951ee2fea Merge trunk. Implement sequences like "0x", "0b" and "0o" as well. And also the "." for doubles and floats. 2016-12-22 10:26:08 +00:00
jan.nijtmans cbfc7befb0 Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 14:03:15 +00:00
jan.nijtmans e1e78edbbc Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 14:01:26 +00:00
jan.nijtmans 97834be313 Make sure that Tcl_GetIntFromObj/Tcl_GetWideIntFromObj/Tcl_GetDoubleFromObj don't set an error in the interp during LinkTraceProc(): The error is supposed to be reported as return value of this function, not the interp. 2016-12-21 13:59:26 +00:00
jan.nijtmans 70346ccd7b Experimental (partial) fix for [39f6304c2e90549c209cd11a7920dc9921b9f48e|39f6304c2e]: Tcl_LinkVar is not tolerant to minus, plus, dot.
This handled minus and plus only, not other possible errors. Will need a TIP, because the boolean type is extended to consider '-', '+' and 'o' (necessary for being able to type 'on' or 'off') as valid booleans
Dot, and integer prefixes (such as 0x) not handled yet, should be handled completely different.
2016-12-21 12:59:30 +00:00
jan.nijtmans a7951ab2ad Merge trunk 2016-12-21 09:20:00 +00:00
jan.nijtmans aba0a7a6cd Make options -reuseaddr/-reuseport forbidden without -server, no matter the value being true or false. Some additional test-cases. 2016-12-20 12:35:33 +00:00
jan.nijtmans d97bb854b0 merge fork 2016-12-20 11:47:11 +00:00
limeboy f208386ff7 Decouple the switch handling. 2016-12-20 10:56:53 +00:00
jan.nijtmans dd3012b0b5 Document that from the "exact" parameter of Tcl_InitStubs(), only bit 0 has meaning. 2016-12-20 10:32:37 +00:00
limeboy e574cfbc71 Correct the handling of -server and its options. 2016-12-20 10:22:22 +00:00
jan.nijtmans 0dd0678546 more internal use of size_t in stead of int. 2016-12-20 09:46:14 +00:00
jan.nijtmans 3d1095d348 Record the fact that all stub-enabled extensions work in Tcl 8.5+, no 8.6 (or 9.0) features are needed. (Differences between 8.x and 9.0 are handled by a different stub magic value) 2016-12-20 09:36:50 +00:00
jan.nijtmans 7a1d9d5758 merge trunk (still has test failure in socket.test) 2016-12-20 09:30:02 +00:00
jan.nijtmans a728d03f7d merge novem 2016-12-19 10:42:42 +00:00
jan.nijtmans 89f9758279 merge trunk 2016-12-19 09:14:06 +00:00
jan.nijtmans 972b65b569 Some more internal use of size_t in stead of int. No functional change. 2016-12-16 16:14:57 +00:00
jan.nijtmans b549e19961 Add back testcase winFile-4.10. This test passes anyway, even though it appeared to be Windows 2000 only. 2016-12-15 15:18:21 +00:00
jan.nijtmans 05a9b0d75c Add "file join $grandParentDir tcl8.? library" as possible path for a valid init.tcl.
Some simplifications in use of test restrictions.
2016-12-15 15:07:56 +00:00
limeboy dfbc8a6296 Update the documentation 2016-12-14 16:03:53 +00:00
limeboy cbe4a7dae5 Adjust OpenTcpServer for the latest changes to OpenTcpServerEx 2016-12-14 15:59:43 +00:00
limeboy caf8932e2e Fix for the argument parsing phase in the [socket] command. 2016-12-14 15:52:21 +00:00
limeboy 2e467a4c9a Make OpenTcpServerEx accept a 'service' string parameter instead of a port. 2016-12-14 15:49:27 +00:00
jan.nijtmans 6edec95607 Implement all possible TCL_LL_MODIFIER formats in Tcl_ObjPrintf(), can be "ll", "I64" and "L", whatever the platform defines for long long integer. With test-cases. 2016-12-14 15:03:13 +00:00
jan.nijtmans b2c94acd0b Implement all possible TCL_LL_MODIFIER formats in Tcl_ObjPrintf(), can be "ll", "I64" and "L", whatever the platform defines for long long integer. With test-cases. 2016-12-14 14:14:17 +00:00
jan.nijtmans 3df1a90364 Bring back stub table in original state.
Merge trunk
2016-12-08 17:52:36 +00:00
dgp d58a6ddbc3 merge trunk 2016-12-06 12:46:11 +00:00
andy 0cd0bb6862 Avoid "warning: format '%llu' expects argument of type 'long long unsigned int', but argument 2 has type 'long unsigned int'" on platforms where TCL_WIDE_INT_IS_LONG. Warning introduced by check-in [e3ba334a42] which was merged to trunk by [eac13870dc]. This fix also was made by [418b169207] which has not yet been merged to trunk. 2016-12-02 21:08:15 +00:00
dgp 32b482d3bf merge trunk 2016-12-02 19:02:41 +00:00
dgp 0714cd9321 Added long comment explaining history and work in progress making bytearray
interfaces usable.
2016-12-02 18:18:59 +00:00
jan.nijtmans 6a1787475c implement "I64" format in Tcl_ObjPrintf as well. Still to be tested. 2016-12-02 15:52:09 +00:00
dgp e9d4e1005e Relocate the cmdEpoch bumps during command deletion so that command resolution
caching works properly in deletion callbacks (destructors!) and delete traces.
2016-12-02 15:39:31 +00:00
jan.nijtmans 99d0691f57 merge-mark 2016-12-02 14:53:41 +00:00
jan.nijtmans 74c17b45b2 Implement %ll (WideInt) handling for Tcl_ObjPrintf(). Use it in some places. (now without edit-error in tcl.h, thanks Don!) 2016-12-02 14:52:11 +00:00
jan.nijtmans 1f666c7ab2 merge trunk 2016-12-02 14:46:25 +00:00
dgp c4e63fa109 Repair what appears to be a stray edit error. This restores ability to
build on a TCL_WIDE_INT_IS_LONG platform, but leaves code in tclStringObj.c
raising compiler warnings.  Suspect things still need some reconciliation
in the TCL_WIDE_INT_IS_LONG scenario.
2016-12-02 14:17:40 +00:00
jan.nijtmans ef88cbd89e Implement %ll (WideInt) handling for Tcl_ObjPrintf(). Use it in some places.
Moved to feature branch temporarily.  Breaks build.
2016-12-02 13:50:29 +00:00
dgp 674aeae3b0 Remove dup line. 2016-12-02 13:26:08 +00:00
dgp 72c1f925db Reports from NSF that command epoch bumping isn't properly timed.
http://paste.tclers.tk/4030
Since the epoch should bump to indicate when Tcl_FindCommand() would
produce a different result from the cached value, the bump ought to be
connected to the state change that would have that effect.  This checkin
appears to be the more correct answer, and it makes the Delete path get
into agreement with the Rename path.  Review would be good.
2016-12-01 20:13:10 +00:00
dgp e42f5d61b2 So long as we register only one, we can have multiple Tcl_ObjTypes with
the same name.  This smooths migration. See obj-2.2 and tclsqlite usage.
2016-12-01 17:25:40 +00:00
dgp a8e3472731 Created a new "proper bytearray" Tcl_ObjType so we can use bytearrays
as bytearrays without all this fussing about over purity.
2016-12-01 13:20:47 +00:00
jan.nijtmans 389ad9987b Fix installation of platform/shell-1.1.4.tm on Windows (platform directory was still missing) 2016-12-01 12:32:49 +00:00
limeboy 13a4d32330 merge trunk 2016-12-01 12:01:01 +00:00
jan.nijtmans 9bf56063c6 merge trunk 2016-12-01 11:46:47 +00:00
jan.nijtmans 95d020a657 compatability -> compatibility 2016-12-01 11:44:23 +00:00
jan.nijtmans 6d7abfd8a9 compatability -> compatibility 2016-12-01 11:42:07 +00:00
jan.nijtmans bbaecb023a compatability -> compatibility 2016-12-01 11:39:40 +00:00
jan.nijtmans 6b83d829a8 More internal use of size_t. Eliminate unused "isBin" argument from TclpSysAlloc() 2016-12-01 11:20:52 +00:00
jan.nijtmans e3c8777128 Merge trunk 2016-11-30 14:27:41 +00:00
dgp c25e21b7bb Route all [string repeat] operations through a common implementation.
Code that to preserve bytearrays, eliminate unnecessary string rep
generation, increase efficiency, and encapsulate access to internal rep
details.
2016-11-30 03:08:24 +00:00
dgp 3489a76210 Where feasible, convert concatenation panics into errors. 2016-11-29 18:46:41 +00:00
jan.nijtmans bc59d1ce4e merge trunk 2016-11-29 13:08:40 +00:00
jan.nijtmans 357515037a Minor simplifications. Eliminate FUNCPRT from regexp engine. Fix compile-error (non-debug) in tclDictObj.c, from previous commit 2016-11-29 13:03:15 +00:00
jan.nijtmans dd1acb8d65 merge trunk 2016-11-29 12:26:28 +00:00
jan.nijtmans a435d9e14b more internal use of size_t (in stead of int) 2016-11-29 11:10:10 +00:00
jan.nijtmans 804199d4b7 Implement the "package forget" part, which was still missing. Handle the case that a filename contains spaces. 2016-11-29 09:45:20 +00:00
jan.nijtmans 1df184e860 slightly simpler 2016-11-28 15:29:36 +00:00
jan.nijtmans b7e862c565 Complete implementation, tests and documentation 2016-11-28 13:17:47 +00:00
jan.nijtmans ee6806b80d Add "package files" testcase, which doesn give the right answer. So still work to do 2016-11-26 17:47:27 +00:00
dkf cdb6b73776 Implementation of improved notifier from Lucio Andrés Illanes Albornoz. 2016-11-25 15:44:43 +00:00
jan.nijtmans ecda933dfc Merge trunk.
Implementation looks complete. Still missing: test-cases and documentation.
2016-11-25 15:06:13 +00:00
limeboy 8fe50e3f91 Windows support and minor touchups to the documentation. 2016-11-25 14:53:20 +00:00
limeboy 3d5c28f527 Minor documentation touchups. 2016-11-25 13:27:56 +00:00
jan.nijtmans ae7596981b merge trunk 2016-11-25 12:58:30 +00:00
jan.nijtmans df537d0dfb Eliminate some macros that are no longer used/needed. 2016-11-25 11:47:54 +00:00
jan.nijtmans 7a6b829025 Merge trunk, and fix two socket test-cases. 2016-11-25 09:38:04 +00:00
andy 1000af34fa Allow [array names -regexp] to use backreferences. This capability was broken by [71270e9141]. See also bug [1366683]. 2016-11-25 07:31:46 +00:00
andy d37425bc05 Remove spurious article in comments 2016-11-25 01:39:13 +00:00
limeboy e123cfc452 Forgot a - in the parameters array. 2016-11-24 21:15:15 +00:00
limeboy 467b6eeb8e Allow a boolean argument to be passed. 2016-11-24 21:01:43 +00:00
jan.nijtmans 43f0f22700 merge trunk 2016-11-24 20:55:43 +00:00
jan.nijtmans 5f291bc906 merge trunk 2016-11-24 20:31:42 +00:00
limeboy 07020d6350 First round of documentation update. 2016-11-24 20:28:42 +00:00
andy 5e9f624428 Partially backout [ef4da65408] because AppendPrintfToObjVA() (used indirectly by [tcl::unsupported::disassemble]) does not yet support wide and bignum arguments. This fixes a SIGSEGV in compile.test and makes [disassemble] work again. 2016-11-24 19:21:12 +00:00
jan.nijtmans 2cbc2f1993 merge fork 2016-11-24 16:21:20 +00:00
jan.nijtmans 1b0d436cc7 Starting implementing the "package files" command. TIP still to be written. 2016-11-24 16:20:05 +00:00
limeboy 15b2687d3c Adjust the tests and add a handful of new ones. 2016-11-24 15:00:36 +00:00
jan.nijtmans c2f9601344 Make compileEpoch "unsigned int", and start counting at 1. 2016-11-24 13:33:32 +00:00
jan.nijtmans 842d6d00f1 Fix compile error if SO_REUSEPORT not supported. Put command options in alphabetical order 2016-11-24 13:18:10 +00:00
limeboy 1859293255 Implement the whole TIP 456 specification.
Also introduces the `-reuseaddr' and `-reuseport' options for the `socket'
command.
2016-11-24 12:47:21 +00:00
jan.nijtmans 82903a4b1f merge novem 2016-11-24 12:41:30 +00:00
jan.nijtmans 2290210ff1 merge trunk.
Make epoch in Tcl_DictSearch "unsigned int". This doubles the epoch range here. Use 0 as special value in stead of -1 (so start counting epoch's with 1).
2016-11-24 11:57:07 +00:00
jan.nijtmans c8d9ab8790 typos 2016-11-24 10:26:28 +00:00
dkf f096df2170 Corrections to misleading comments. 2016-11-22 15:04:28 +00:00
jan.nijtmans 32f810fc3b Fix indenting 2016-11-22 11:24:48 +00:00
jan.nijtmans 6989a199e7 Added stub entry for tip #456. Documentation and tests still missing. Doesn't conform to TIP yet. 2016-11-22 11:21:00 +00:00
jan.nijtmans ee70b22d59 This is patch.002 from ticket [0b9d3ba2ba3e1e3fc33c97d5a9fa7ef85d11a696|0b9d3ba2ba], as first start of tip-456 implementation 2016-11-22 10:06:18 +00:00
jan.nijtmans 53f3b03647 Merge trunk. More internal use of size_t in stead of int (or long) 2016-11-21 10:40:46 +00:00
jan.nijtmans 990d6fd6f1 More internal use of size_t in stead of int. 2016-11-21 10:15:24 +00:00
dkf da608f8c61 Minor: fix the indentation of comments. 2016-11-18 15:51:27 +00:00
jan.nijtmans 450b6f46c9 merge novem 2016-11-18 12:10:26 +00:00
jan.nijtmans edcac92c08 Merge trunk 2016-11-18 11:15:27 +00:00
jan.nijtmans c58016090f Fix mp_cnt_lsb() signature, so it matches the signature used in Tcl 2016-11-18 10:53:45 +00:00
jan.nijtmans e7f46501e2 Fix mp_cnt_lsb() signature, so it matches the signature used in Tcl. Add two missing "static" keywords in tclUnixNotfy.c. Remove some more files in libtommath directory which are not useful for Tcl. 2016-11-18 10:23:24 +00:00
jan.nijtmans 13a2801fd7 Fix [e6f27aa56fa51bfc1752ce768bf0d301c60bfd2c|e6f27aa56f]: Update libtommath to 1.0 2016-11-18 09:50:37 +00:00
andy 995aaf8bfd Remove extra space in documentation for [file stat] 2016-11-18 03:34:32 +00:00
jan.nijtmans 630767b5f7 merge trunk 2016-11-17 16:27:38 +00:00
jan.nijtmans d7da846591 Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:26:50 +00:00
jan.nijtmans 2287394ba1 Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:24:37 +00:00
jan.nijtmans 8d1caeae4d Fix libtommath's mp_radix_size() function such that it returns 2 for single-digit numbers. Add testcases for mp_radix_size() and mp_iseven(). Undo useless change in bn_mp_add_d.c (bring back libtommath's version). 2016-11-17 16:12:14 +00:00
jan.nijtmans 1be35f340f Restore bn_mp_radix_size.c to exact copy of libtommath-1.0 version: Since the radix_size of "9" should return 2, not 3. Add test-case to prove that. 2016-11-17 15:30:32 +00:00
jan.nijtmans ca471eb748 Restore bn_mp_add_d.c to exact copy of libtommath-1.0 version: Since the mp_clamp() function already restores the sign of it's argument to positive if c->used ==0, it is not necessary to do that twice. Therefore, the original version of the code is correct. 2016-11-17 13:18:17 +00:00
jan.nijtmans 538960215f Add test-case for mp_iseven(). If mp_iseven(0) ever returns 0, we will be warned that we are using the wrong mp_iseven() function. 2016-11-17 11:38:13 +00:00
jan.nijtmans 1375c96d2f Bring in fix for mp_iseven().... almost missed that .... This should be given a dedicated test-case. Now everything taken from "gahr-ticket-e6f27aa56f" branch is handled. 2016-11-17 11:03:39 +00:00
jan.nijtmans 8f07b4a94c Merge trunk. Re-generate tclTomMath.h. Use faster exponentiation-function from libtommath 1.0 (in tclExecute.c). 2016-11-17 10:46:09 +00:00
jan.nijtmans ad9db3faad Merge trunk 2016-11-17 09:34:58 +00:00
jan.nijtmans 2edb1dcd83 Remove subdirectories of "libtommath", and various individual related files, not taking any part in the Tcl build. Makes the Tcl distribution smaller without sacrificing anything.
And remove the TCL_TOMMATH define, which was never used for anything.
2016-11-17 09:33:08 +00:00
jan.nijtmans 37f6932c0a Remove subdirectories of "libtommath", and various individual related files, not taking any part in the Tcl build. Makes the Tcl distribution smaller without sacrificing anything. 2016-11-17 09:24:05 +00:00
jan.nijtmans 9e7c15f53e merge trunk 2016-11-16 15:59:40 +00:00
jan.nijtmans f850132635 (experimental) Upgrade to libtommath 1.0 (actually by merging all changes between libtommath 0.42.0 and 1.0). Still to be tested thourougly, before doing anything with it. 2016-11-16 15:22:26 +00:00
jan.nijtmans f10147dbfe import libtommath 1.0 2016-11-16 13:04:26 +00:00
jan.nijtmans 56d57b9530 merge trunk 2016-11-16 11:17:13 +00:00
jan.nijtmans 0dd529776d Use more "size_t" in stead of "int" internall. Also eliminate a lot of type-casts which are not necessary any more. 2016-11-16 10:55:40 +00:00
dkf ea1423a2ab See Itcl Bug [1b28657c0e]. Make methodNameType honor the Tcl_ObjType contract. 2016-11-15 13:33:35 +00:00
dkf 5b71bf5ea8 See Itcl Bug [1b28657c0e]. Make methodNameType honor the Tcl_ObjType contract. 2016-11-15 13:32:51 +00:00
dkf a5538d84c4 Slightly more efficient version as this is Hot Path code. 2016-11-15 13:31:02 +00:00
dgp addd1694e0 See Itcl Bug [1b28657c0e]. The methodNameType fails to honor the Tcl_ObjType
contract. Need dkf review on suitability of this fix.
2016-11-14 17:01:37 +00:00
jan.nijtmans 21d4596064 Merge core-8-6-branch. Remove (temporarily) write-functions from zipfs. Let first TIP-version handle read-only functions only. 2016-11-14 15:51:03 +00:00
jan.nijtmans 7cdd87e4f1 Merge core-8-6-branch 2016-11-14 14:26:38 +00:00
jan.nijtmans 0b9cb76206 Better fix for the usability of TCL_NO_DEPRECATED on MacOSX 2016-11-14 14:25:13 +00:00
jan.nijtmans 99fd1215e2 Better fix for the usability of TCL_NO_DEPRECATED on MacOSX. 2016-11-14 14:20:13 +00:00
venkat d80bf0e7a3 Merge tzdata2016i from IETF 2016-11-12 11:20:17 +00:00
venkat 6e380ef6e9 Merge tzdata2016i from IETF 2016-11-12 11:19:52 +00:00
venkat ae6e14e33c Merge tzdata2016i from IETF 2016-11-12 11:19:26 +00:00
venkat bc5ffbb3b2 Update to tzdata2016i from IETF 2016-11-12 11:18:31 +00:00
jan.nijtmans e6b26af8f3 merge trunk 2016-11-11 15:18:31 +00:00
jan.nijtmans 92b58040dd Fix harmless gcc warning message: using "unsigned" doesn't serve any purpose, actually. 2016-11-11 14:53:58 +00:00
jan.nijtmans fcc907b2a6 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:58:54 +00:00
jan.nijtmans 25ba428ff9 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:55:45 +00:00
jan.nijtmans 2020e9be61 Fix [79614fb8b61983ac8ef30ea8752c310465798fc7|79614fb8b6]: "glob", "encoding system" and encoding-free filesystems 2016-11-11 10:53:10 +00:00
jan.nijtmans de9d0bbd20 merge trunk 2016-11-10 15:13:22 +00:00
jan.nijtmans 6497c6c6ee On OSX, there is a conflict with the "define panic" and definitions in "mach.h". 2016-11-10 14:21:41 +00:00
jan.nijtmans 31647bcceb On OSX, there is a conflict with the "define panic" and definitions in "mach.h". 2016-11-10 14:19:28 +00:00
dgp 3555752d45 Route all [string last] operations through a common implementation. 2016-11-08 02:56:11 +00:00
dgp 37fb43ad48 Purge disabled code. 2016-11-07 20:18:30 +00:00
dgp cd2858d1d0 Refactor to channel all [string first] functions through a single implementation. 2016-11-07 20:11:11 +00:00
dgp 790b302275 Optimize case of all single-byte chars. 2016-11-07 20:04:22 +00:00
dgp dc11ffbbdb Consolidate the "find empty string" cases. 2016-11-07 19:41:15 +00:00
dgp 1571dc01bb Implement direct eval [string first] with the refactored engine. 2016-11-07 19:28:25 +00:00
jan.nijtmans 5f738db586 Merge core-8-6-branch. Update upstream changes to zipfs.c 2016-11-07 11:16:52 +00:00
dgp 4dc2505e43 First draft refactoring the [string first] functionality. 2016-11-04 21:29:30 +00:00
dgp 18a2ebc51d [824752f10e] Use LIST_MAX instead of INT_MAX for unknown number of elements to the end of the list. 2016-11-04 14:56:19 +00:00
dgp da3723c942 [8245752f10e] Use LIST_MAX instead of INT_MAX for unknown number of elements
to the end of the list.
2016-11-04 14:54:38 +00:00
dgp 27ef344b9c merge mark 2016-11-04 14:49:22 +00:00
dgp 885ced5608 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:48:36 +00:00
dgp b1fe66323b close fork 2016-11-04 14:42:14 +00:00
dgp a188ceee21 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:40:54 +00:00
dgp eb87ed60f6 close fork 2016-11-04 14:39:00 +00:00
dgp bc94a394c9 [824752f10e] More robust, portable check for integer overflow. 2016-11-04 14:37:50 +00:00
gahr 46d871617f merge core-8-5-branch ([824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL) 2016-11-04 14:24:42 +00:00
gahr d654ce6429 merge core-8-5-branch ([824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL) 2016-11-04 14:23:43 +00:00
gahr 452f14ebb5 [824752f10e] Avoid calling Tcl_SetObjResult if interp is NULL 2016-11-04 14:21:04 +00:00
jan.nijtmans 20880c7ce9 merge trunk 2016-11-04 11:53:00 +00:00
jan.nijtmans 0a7d5ef6ed Fix the generated copyright sections in the HTML help file 2016-11-04 11:51:22 +00:00
jan.nijtmans f785a01764 Fix the generated copyright sections in the HTML help file. 2016-11-04 11:50:22 +00:00
jan.nijtmans 55c589e2de merge trunk 2016-11-04 11:41:58 +00:00
jan.nijtmans 274f081025 Make packages msgcat and tcltest work unmodified in "novem". Make more test-cases work unmodified in "novem". 2016-11-04 11:38:09 +00:00
jan.nijtmans 76ed3d5b55 Make packages msgcat and tcltest work unmodified in "novem". 2016-11-04 11:32:44 +00:00
jan.nijtmans e7ef344d8b Merge trunk (Update http version number to 2.8.10, due to [838e99a76d]) 2016-11-02 12:50:26 +00:00
jan.nijtmans fba10e8615 merge core-8-6-branch (http package version update) 2016-11-02 12:45:47 +00:00
jan.nijtmans 1f0c1b800d Update http version number to 2.8.10, due to [838e99a76d] 2016-11-02 12:44:32 +00:00
jan.nijtmans a7e97de50a Update http version number to 2.7.14, due to [838e99a76d] 2016-11-02 12:41:04 +00:00
jan.nijtmans 76bb4d1ea4 merge core-8-6-branch 2016-11-02 12:09:04 +00:00
Joe Mistachkin ea11870f5b Fix the generated copyright sections in the HTML help file. 2016-11-02 01:42:49 +00:00
dgp 14c4066381 merge trunk 2016-11-01 16:29:37 +00:00
dgp 95b511bac2 Refactor to channel all [string cat] functions through a single implementation. 2016-11-01 16:18:08 +00:00
dgp 17e1ea228c Replace indexing with pointer increments. 2016-11-01 15:42:50 +00:00
dgp 53abdcc518 Trim away obsolete code. 2016-11-01 15:12:07 +00:00
dgp d963b1acb7 Expand all the cases of the [string cat] engine. 2016-11-01 15:07:30 +00:00
dgp 04432d4dd1 Reduce copies in the pure binary implementation of [string cat]. 2016-10-31 18:10:21 +00:00
dgp 3e4f5907b6 Complete the "pure binary" implementation of the [string cat] engine. 2016-10-31 16:15:16 +00:00
dgp 4a159c5199 merge trunk 2016-10-31 14:18:03 +00:00
dgp b53cf6d38c Coverage tests for INST_STR_CONCAT1 byterarray ops. 2016-10-31 14:17:31 +00:00
dkf 779b8dad76 [253ba6e818] Improved description of [variable] behaviour. 2016-10-30 16:52:50 +00:00
dkf cd428c1a44 [253ba6e818] Improved description of [variable] behaviour. 2016-10-30 16:16:29 +00:00
dkf 16dbe3f5a2 [1ae12987cb] Ensure that deleting the [history] command deletes its storage. 2016-10-30 08:31:21 +00:00
dkf 7b989f0312 [1ae12987cb] Ensure that deleting the [history] command deletes its storage. 2016-10-30 08:22:13 +00:00
dkf 994e1d8062 One more place where the internal API change can be used easily. 2016-10-30 05:07:47 +00:00
dkf de8e3be492 [b26e38a3e4] Ensure that compressing streams manage buffers correctly in all cases. 2016-10-30 05:05:46 +00:00
dkf d44a63b65b [b26e38a3e4] Ensure that compressing streams manage buffers correctly in all cases. 2016-10-30 05:04:54 +00:00
dkf 423d995e0d Fix the bug. Make use of zlib API in this area more like a Tcl API with wrapper function. 2016-10-30 05:02:46 +00:00
dkf 5c37d95180 Added test for bug 2016-10-29 21:03:25 +00:00
dgp 970922295a WIP 2016-10-28 20:33:55 +00:00
dgp 31690ce7fb revise [dict append] to make use of common [string cat] engine. 2016-10-28 16:55:44 +00:00
dgp 630d4b9211 merge trunk 2016-10-28 15:47:07 +00:00
dgp 7faf4f27a4 Add optimization to [dict append]. 2016-10-28 15:46:49 +00:00
dgp dd1c28a788 When appropriate, implement [join] with the common [string cat] engine. 2016-10-28 14:59:27 +00:00
dgp afd6d5649f Add obvious optimizations to [join] implementation. 2016-10-28 14:45:54 +00:00
dgp e9d7b07476 merge trunk 2016-10-28 14:28:40 +00:00
dgp b8ffbb14c4 Add warning commentary making important assumptions explicit. 2016-10-28 14:27:59 +00:00
dgp 39dbbd57af Add warning commentary making important assumptions explicit. 2016-10-28 14:26:18 +00:00
dgp bbfc83c86f Add warning commentary making important assumptions explicit. 2016-10-28 14:23:25 +00:00
dgp d31beb3e7f merge trunk 2016-10-28 14:06:36 +00:00
dgp aa3b157338 Add obvious optimization to Tcl_GetCharLength(). 2016-10-28 14:06:15 +00:00
dgp bf27b64405 Convert INST_STR_CONCAT1 to the common string cat implementation. 2016-10-27 20:06:36 +00:00
dgp 76b6b03be7 Start bringing all string cat operations into one place so it can be coded
correctly one time instead of badly multiple times.
2016-10-27 19:39:49 +00:00
venkat 06236552b6 Merge timezone data tzdata2016h 2016-10-26 08:07:39 +00:00
venkat c205f272f7 Merge timezone data tzdata2016h 2016-10-26 08:04:36 +00:00
venkat 0551ecffd6 Merge timezone data tzdata2016h 2016-10-26 08:04:10 +00:00
venkat 13967f965d Update timezone data to tzdata2016h from IETF 2016-10-26 08:03:17 +00:00
dgp 17cafef755 merge trunk 2016-10-21 13:25:15 +00:00
dgp 79ff282b02 merge 8.6 2016-10-21 13:12:16 +00:00
dgp 9afdf28497 Repair recently opened memleak. 2016-10-20 20:02:19 +00:00
dgp bfae5bf492 EVIL HACKs are bad. Unnecessary ones are intolerable. Bad tests cause trouble. 2016-10-20 17:54:47 +00:00
dgp 925bd5794e Use memcmp where possible. 2016-10-18 19:16:35 +00:00
dgp ae54e070a1 [eb6b68c1a9] Simple fix for [string replace] error demonstrated by new test. 2016-10-14 19:29:52 +00:00
dgp 8b894ab295 [eb6b68c1a9] Simple fix for [string replace] error demonstrated by new test. 2016-10-14 19:28:46 +00:00
dgp 24109a18e4 merge trunk 2016-10-13 17:03:38 +00:00
dgp e35292f314 Merge INST_STR_REPLACE fixes and improvements. 2016-10-13 16:56:23 +00:00
dgp 7f0e6652c7 Another streamline. 2016-10-13 16:50:06 +00:00
dgp 7634bdaef2 Stop invading the String internals to work around a bug. Fix it instead. 2016-10-13 16:43:05 +00:00
dgp 9cb330963b Streamline the substring copying case of [string replace] bytecode execution. 2016-10-13 15:37:45 +00:00
dgp 4312e69dfe merge trunk 2016-10-12 14:01:04 +00:00
dgp 4dc1a8a588 merge TclParseNumber fixes 2016-10-12 13:47:32 +00:00
dgp 66f257a588 [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_BINARY_ONLY. 2016-10-12 13:46:14 +00:00
dgp 36825d23b9 [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_OCTAL_ONLY. 2016-10-12 13:42:40 +00:00
dgp 326e0a8fdf Add a test too. 2016-10-12 13:38:28 +00:00
dgp 29fdaa6dcd [be003d570f] TclParseNumber() failed to fully implement TCL_PARSE_OCTAL_ONLY. 2016-10-12 13:31:07 +00:00
dkf ae0ad313fd [74bc0e44f5] Doc tweak. 2016-10-12 09:58:12 +00:00
dkf ec64cc0418 [74bc0e44f5] Doc tweak. 2016-10-12 09:57:49 +00:00
dkf c482675d84 [74bc0e44f5] Doc tweak. 2016-10-12 09:57:15 +00:00
jan.nijtmans 9c590fa6a6 merge trunk 2016-10-11 21:53:43 +00:00
jan.nijtmans 7dd13b72b6 Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:52:57 +00:00
jan.nijtmans 54c0881e9d Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:43:44 +00:00
jan.nijtmans d81daf76bd Fix [3cc1d91345]: duplicate calls to TclpFreeAllocCache() on thread exists 2016-10-11 21:35:27 +00:00
dgp 46cdee3dc8 Update new tests in light of octal death. 2016-10-11 18:22:08 +00:00
dgp 97f59556af merge trunk 2016-10-11 18:19:33 +00:00
dkf 11e9b6a9a5 [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:02:38 +00:00
dkf 8fe7f3fcdf [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:02:16 +00:00
dkf f3e9f9caa3 [62b36e326c] Noted edge case in behaviour of [concat] with empty arguments. 2016-10-09 16:01:53 +00:00
dkf 28d5ff4eb5 [7114ac6141] Improve testing and docs of Tcl_GetInt and Tcl_GetDouble. No behaviour change. 2016-10-09 15:22:20 +00:00
dkf 71c2d1a883 [7114ac6141] Improve testing and docs of Tcl_GetInt and Tcl_GetDouble. No behaviour change. 2016-10-09 15:21:26 +00:00
dkf c8597887e4 Be more accurate about scan's %i 2016-10-09 12:03:30 +00:00
ferrieux 05009534ee Be more accurate about scan's %i 2016-10-09 10:35:24 +00:00
dkf f50a4eed54 [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:40 +00:00
dkf 90813dfce8 [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:21 +00:00
dkf a16868a54c [74bc0e44f5] Document result of [http::unregister]. 2016-10-08 17:10:02 +00:00
dkf c4eac3e8eb [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:41:51 +00:00
dkf 7b78869343 [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:40:35 +00:00
dkf ab8a39e6b9 [838e99a76d] Ensure that encodings are handled with application/xml and friends. 2016-10-08 16:38:42 +00:00
dgp 870f61c05d Update [string map] tests to get illustration of need for pure dict
restriction up to date with ordered dicts.
2016-10-07 18:52:57 +00:00
dgp ba2e43e953 merge trunk 2016-10-07 13:11:24 +00:00
pooryorick 6585306973 Fix typos in expr documentation. 2016-10-05 04:53:49 +00:00
pooryorick b1d510f1db Rewrite expr documentation. Among other things, fixes [ef5373e6fa0617ee]. 2016-10-05 00:05:55 +00:00
dkf 111f52e7ed [4d5ae7d88a] Stop crashes with asynchronous connects to hosts without addresses. 2016-10-04 19:12:33 +00:00
dkf 6548fc4ad1 [4d5ae7d88a] Stop crashes with asynchronous connects to hosts without addresses. 2016-10-04 19:11:07 +00:00
dgp 3e12c54039 merge trunk 2016-10-04 18:48:17 +00:00
max a629b0ba31 When opening a server socket on an ephemeral port, make sure that the
port number that gets picked for IPv4 is also available on IPv6. If
not, start all over for up to ten times to find a port number that is
available on both protocols.
2016-10-04 13:31:49 +00:00
pooryorick 8c066a970f Fix documentation of [expr] operators, replacing "divisor" with "dividend" 2016-10-03 16:49:58 +00:00
jan.nijtmans 4db368d595 merge core-8-6-branch 2016-10-03 14:56:00 +00:00
jan.nijtmans 29b9de871c (cherry-pick): Fix [2bf561854c55a], interp alias to command whose name is the empty string. 2016-10-03 14:53:32 +00:00
pooryorick a9dbadf46a Fix [2bf561854c55a], interp alias to command whose name is the empty string. 2016-10-03 01:10:16 +00:00
venkat 4a1f444c9f Merge tzdata2016g from ietf.org 2016-10-02 19:28:22 +00:00
venkat 02e79b9ec1 Merge tzdata2016g from ietf.org 2016-10-02 19:26:30 +00:00
venkat 5aa514f49a Merge tzdata2016g from ietf.org 2016-10-02 19:25:58 +00:00
venkat 2bc8d915a2 Update tzdata to 2016g from ietf.org 2016-10-02 19:24:52 +00:00
hypnotoad 9dfe53af4a Re-created the build mods for tip#340. Something I was doing was screwing with building
a proper shell
2016-10-02 18:42:56 +00:00
hypnotoad e58a9dabbe Typo fix for Makefile.in 2016-10-02 18:30:43 +00:00
hypnotoad 3e0c5c6c90 Pulling change from trunk 2016-10-02 12:00:56 +00:00
gahr c4f7e08fc6 [4d5ae7d88a] Restore default-to-error logic in TcpConnect 2016-09-27 20:06:49 +00:00
jan.nijtmans e9e40f5f02 merge core-8-6-branch 2016-09-26 15:03:11 +00:00
jan.nijtmans 008c7038cb merge core-8-6-branch 2016-09-26 09:10:35 +00:00
jan.nijtmans dfb2a3f2e2 Fix the 'htmlhelp' target so that it compiles cleanly and includes all the appropriate HTML files.
Permit static linking to the MSVCRT as a stand-alone option. 
Patch by Joe Mistachkin.
2016-09-26 09:08:13 +00:00
jan.nijtmans e8aa220d08 merge core-8-6-branch. Undo changes to coffbase.txt (they cause overlap with Tk) 2016-09-21 09:36:35 +00:00
jan.nijtmans 87e3de423c merge trunk 2016-09-21 09:29:57 +00:00
jan.nijtmans 8d3c0c2e81 Merge core-8-6-branch. Add more comments to tclLiteral.c, contributed by mr_calvin 2016-09-21 09:28:39 +00:00
jan.nijtmans 3adfe07f74 Make it more likely that compiles with VS2012/VS2013 actually work on Windows XP. See: [https://tedwvc.wordpress.com/2014/01/01/how-to-target-xp-with-vc2012-or-vc2013-and-continue-to-use-the-windows-8-x-sdk/] 2016-09-21 09:20:54 +00:00
jan.nijtmans 7aae664d12 Make it more likely that compiled with VS2012/VS2013 actually work on Windows XP. See: [https://tedwvc.wordpress.com/2014/01/01/how-to-target-xp-with-vc2012-or-vc2013-and-continue-to-use-the-windows-8-x-sdk/] 2016-09-21 09:15:34 +00:00
Joe Mistachkin cdb1ef8aac Permit static linking to the MSVCRT as a stand-alone option. Enable WinXP SDK compatibility. 2016-09-19 18:48:16 +00:00
jan.nijtmans 56b804fc38 merge trunk 2016-09-16 09:11:09 +00:00
jan.nijtmans e7e4c74b7f merge core-8-6-branch 2016-09-16 09:09:25 +00:00
jan.nijtmans 3d6c6683bb Fix [c7d0bc9a549714e0]: Newly introduced unshared (local-only) literals from cmd resolvers cause Tcl_Obj leaks. 2016-09-16 09:06:41 +00:00
jan.nijtmans bf9e61ca6a Proposed fix for [c7d0bc9a549714e0]. Thanks to mr_calvin 2016-09-15 13:22:49 +00:00
hypnotoad a4dbdda700 Adding build scripts to implement Tip#453 2016-09-14 15:11:12 +00:00
hypnotoad 5bf83d86b6 Further adaptations and improvements to practcl.
And get, tclsh make.tcl basekit even works now
2016-09-14 15:04:41 +00:00
hypnotoad 3c85e6e0ef Pulling changes from trunk 2016-09-14 13:38:30 +00:00
hypnotoad 58ab27bf86 Fixed the line endings on practcl.tcl 2016-09-14 13:36:27 +00:00
hypnotoad 824b71f959 Beginning work in earnest on Tip#430 and Tip#453
Renamed zipfs.c to tclZipfs.c. Eliminated tclZipfs.h.

Removed the bootstrap introduced by Odie/Androwish. With zipfs in the core
one only needs to specify the TclPreInitScript

The project at least builds on OSX. Working on Windows under MSYS/MinGW next

Added a local snapshot of practcl.
2016-09-14 13:33:32 +00:00
dgp 30a4dc04bb Maintain the changed behavior for unset traces on local vars at proc return.
Update the docs to new function.
2016-09-09 12:39:27 +00:00
dgp db811061d4 Revert b98ee56376. The "bug" fixed was documented behavior. 2016-09-09 12:36:53 +00:00
gahr bda3724396 merge trunk 2016-09-09 07:31:48 +00:00
gahr 63a316c43b Remove unnecessary use of fpsetround. See https://bugs.freebsd.org/212512 2016-09-09 07:28:45 +00:00
dgp 33ceb47046 compiler warning 2016-09-08 20:04:51 +00:00
jan.nijtmans c3c935369d merge core-8-6-branch 2016-09-08 07:24:06 +00:00
hypnotoad e14a1e9e3d Pulling changes from Trunk 2016-09-08 03:01:05 +00:00
hypnotoad 5c93243c18 Pulling changes from zipfs 2016-09-08 03:00:04 +00:00
dgp 1ac6780aed merge trunk 2016-09-08 02:48:09 +00:00
dgp 3da8f74e75 [7f02ff1efa] Fix scope for var unset traces when procs return.
*** POTENTIAL INCOMPATIBILITY ***
2016-09-08 02:38:39 +00:00
dgp 3833c42f54 New test trace-18.5 for the bug. Updated trace-18.1 which was tuned to it. 2016-09-08 02:34:37 +00:00
dgp 2bfb7b96c0 Attempt to fix [7f02ff1efa]. Make trace-18.1 fail. Suspect test is an
experiment that preserves the bug.
2016-09-07 18:31:58 +00:00
dgp 35141afcc9 [4dbdd9af14] Plug mem leak when var unset trace re-creates namespace var. Thanks mr_calvin for report and fix. 2016-09-07 18:09:30 +00:00
dgp 6053836b97 [4dbdd9af14] Plug mem leak when var unset trace re-creates namespace var. Thanks mr_calvin for report and fix. 2016-09-07 17:45:33 +00:00
dgp e13460b1fb [4dbdd9af14] Plug mem leak when var unset trace re-creates namespace var.
Thanks mr_calvin for report and fix.
2016-09-07 17:30:18 +00:00
dgp 41512fe1fa Improve the comments and add a test. 2016-09-07 16:19:42 +00:00
jan.nijtmans 373ad7ed6c merge trunk 2016-09-07 14:03:58 +00:00
jan.nijtmans 4ef0c69aaa Fix [d4e7780ca1681cd095dbd81fe264feff75c988f7|d4e7780ca1]: "global" cmd literal sharing vs. per-interp resolvers 2016-09-07 13:34:41 +00:00
jan.nijtmans 7660c04aff Fix [d4e7780ca1681cd095dbd81fe264feff75c988f7|d4e7780ca1]: "global" cmd literal sharing vs. per-interp resolvers 2016-09-07 12:54:51 +00:00
dgp 7ca470456b [4dbdd9af14] Proposed fix for mem leak. 2016-09-06 20:30:07 +00:00
dkf ab18c108f7 Fixed bug in pushed transforms with full internal buffers not writing out. 2016-09-06 10:46:49 +00:00
dkf 7ccdd3657b Fixed bug in pushed transforms with full internal buffers not writing out. 2016-09-06 10:44:45 +00:00
jan.nijtmans 98dbefe2cc Additiona patch/suggestion from Gustaf. This indeed fixes the crash in oo.test. Looks good to me, so only waiting for final feedback from Gustaf and eventually feedback from other people. 2016-09-06 08:25:18 +00:00
jan.nijtmans b748232291 some more clean-up 2016-09-05 14:52:01 +00:00
jan.nijtmans d35a5023da merge core-8-6-branch 2016-09-05 14:12:48 +00:00
jan.nijtmans b2416bd570 merge trunk 2016-09-05 13:57:49 +00:00
jan.nijtmans c4b6cab579 merge core-8-6-branch 2016-09-05 13:56:15 +00:00
jan.nijtmans cf8c1e7bdc Allow additional optional "interp" argument for testinterpresolver command. Not used yet in any test-case.
Protect panic in tclLiteral.c for possible null-pointer access. (cherry-picked from Gustaf Neuman's interpresolver patch).
Eliminate some unecessary spacing.
2016-09-05 13:55:00 +00:00
jan.nijtmans 6f860bc18d Some patch clean-up, no change in functionality 2016-09-05 13:14:45 +00:00
jan.nijtmans 2bd794f7cc Proposed patch for [d4e7780ca1681cd095dbd81fe264feff75c988f7|d4e7780ca1], by Gustaf Neumann 2016-09-02 12:11:01 +00:00
jan.nijtmans bd1370959e merge core-8-6-branch 2016-08-30 13:42:21 +00:00
jan.nijtmans c69560787b merge trunk 2016-08-30 13:12:09 +00:00
jan.nijtmans 5b7e79f851 Don't ever allow UTF-8 sequences of more than 4 characters to be generated or parsed, even when TCL_UTF_MAX>4: According to current Unicode standard, a byte string of >4 characters can never form a single UTF-8 character.
And a few minor micro-optimizations related to UTF-8 handling.
2016-08-30 13:07:10 +00:00
jan.nijtmans 3b2cb79ab1 Don't ever allow UTF-8 sequences of more than 4 characters to be generated or parsed, even when TCL_UTF_MAX>4: According to current Unicode standard, a byte string of >4 characters can never form a single UTF-8 character.
And a few minor micro-optimizations related to UTF-8 handling.
2016-08-30 13:00:32 +00:00
dgp 0cce018c67 Merge dup-removal into search loop so we avoid pre-processing efforts on data that are never used. Contributed patch from Brian Griffin. 2016-08-26 13:49:07 +00:00
dgp f2115ca085 Merge dup-removal into search loop so we avoid pre-processing efforts on
data that are never used. Contributed patch from Brian Griffin.
2016-08-26 13:46:37 +00:00
jan.nijtmans a852495cf6 merge zipfs 2016-08-19 13:42:12 +00:00
jan.nijtmans 9a7f1bd48c merge core-8-6-branch 2016-08-19 08:58:35 +00:00
Joe Mistachkin ac673f63d0 Set the default topic, enable full-text search, and put all help output files under OUT_DIR. 2016-08-10 03:13:46 +00:00
Joe Mistachkin 5001d7d18c Fix the 'htmlhelp' target so that it compiles cleanly and includes all the appropriate HTML files. 2016-08-09 21:03:28 +00:00
dgp a134b03eda merge mark 2016-07-27 18:56:20 +00:00
dgp d823d4a2d5 merge release 2016-07-27 18:55:23 +00:00
dgp d6656fada6 merge trunk 2016-07-26 19:22:05 +00:00
dgp 27696b490b a few test & docs fixes 2016-07-26 13:54:57 +00:00
dkf b37c60fe43 [db0a5f6417] Make a few tests resilient to differences in semantics of pipes between OSs. 2016-07-26 10:09:06 +00:00
dkf d0af5aa92c [db0a5f6417] Make a few tests resilient to differences in semantics of pipes between OSs. 2016-07-26 10:08:29 +00:00
dkf d4eb48d90f [6a19dedc2e] "Clarified" what the units are that [chan copy] uses for -size and that synchronous copying returns. 2016-07-24 17:58:13 +00:00
dkf 9faead9d18 [6a19dedc2e] "Clarified" what the units are that [chan copy] uses for -size and that synchronous copying returns. 2016-07-24 13:09:40 +00:00
dkf 404eadfdaf Make a few tests more resilient to differences in the semantics of pipes between operating systems. 2016-07-24 12:45:07 +00:00
dgp 722ba1aa44 test repairs 2016-07-22 15:28:50 +00:00
dgp 4cead413c9 Set release date 2016-07-22 14:00:01 +00:00
dgp 7a324dfa87 merge trunk 2016-07-21 17:25:04 +00:00
dgp 2501dbb8d0 Update changes file. 2016-07-21 16:20:38 +00:00
dgp 0050652afb Stop internals intrusion into lists. 2016-07-20 20:39:16 +00:00
dgp 4704b442fb Streamline TclObjLookupVarEx 2016-07-20 17:39:04 +00:00
dgp 5b8d20e6de Use strchr() to parse array variable syntax. 2016-07-20 16:32:16 +00:00
dgp 2151838b5b Use the new private flag INDEX_TEMP_TABLE in testing command too. 2016-07-20 15:43:08 +00:00
dgp acb9c613f1 merge 8.6 2016-07-20 11:48:44 +00:00
venkat aefd27f95c Merge tzdata 2016f from ietf.org 2016-07-20 03:06:37 +00:00
venkat ee54cd02de Merge tzdata 2016f from ietf.org 2016-07-20 03:05:57 +00:00
venkat ad4538af95 Merge tzdata 2016f from ietf.org 2016-07-20 03:05:31 +00:00
venkat c2e7b1ce36 Update tzdata to 2016f from ietf.org 2016-07-20 03:05:01 +00:00
dgp a8f05c5339 Factor out common prologue. 2016-07-19 20:40:27 +00:00
dgp e26431e0f3 merge 8.6 2016-07-19 19:52:59 +00:00
dgp 23a34a26fe "array search" is no longer a registered Tcl_ObjType. 2016-07-19 19:33:35 +00:00
dgp 3cd3541039 [0363f0146c] Fix [array startsearch] id handling to support var name variations 2016-07-19 19:31:28 +00:00
dgp f846b3f965 Remove outdated comment. 2016-07-19 15:00:51 +00:00
dgp a22b8736ec merge 8.6 2016-07-18 17:47:23 +00:00
dgp 2a8bbefa69 merge trunk 2016-07-18 17:15:30 +00:00
dgp 87a97e0609 [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cached channel name lookups.
Also merge backlog of test suite & doc improvements.
2016-07-18 16:50:22 +00:00
dgp f5bf1de995 [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cached channel name lookups. 2016-07-18 16:46:34 +00:00
dgp 6f9ac81ae9 [104f2885bb] Rework the "chan" Tcl_ObjType to properly validate cached
channel name lookups.
2016-07-18 16:26:44 +00:00
dgp c947326c4a merge mark 2016-07-18 16:14:30 +00:00
dkf 9b1a5dc878 [77d58e3a7a] Test case independence: var. 2016-07-17 12:02:27 +00:00
dkf 4bc50a0a12 [77d58e3a7a] Test case independence: unload. 2016-07-17 11:56:28 +00:00
dgp 26532df53f merge 8.6 2016-07-16 20:50:03 +00:00
dkf 0b8d92332a [77d58e3a7a] Test case independence: io, load, msgcat, namespace, safe. 2016-07-16 11:42:38 +00:00
dgp 0cf3369f9f Remove unmaintained disabled speculative code.
Such things are for branches and history.
2016-07-15 14:20:34 +00:00
dgp 8f28138f6e Factor the cmdName intrep setting code into common utility routine. 2016-07-15 14:19:07 +00:00
dgp c0d0df8550 Stop using the tclCmdNameType to store failed command lookups. If we don't
find a command, there's nothing to store, so better not to shimmer at all.
2016-07-15 12:36:33 +00:00
dkf 67a6300cc4 [77d58e3a7a] Test case independence: interp. 2016-07-15 05:39:09 +00:00
ashok fd72878261 Fix docs and test failures. I had rolled back .PS1 (Powershell files) as being executable without fixing tests and docs. 2016-07-15 03:12:09 +00:00
dgp 9df68a3879 One of the validity checks for the "cmdName" type is to see if the
resolved command has been deleted by checking for the CMD_IS_DELETED flag.
Only one thing sets this flag -- Tcl_DeleteCommandFromToken(), and
every time it sets that flag it also bumps the cmdEpoch of the Command
as well.  The "cmdName" type is already validating that epoch.  It gains
nothing to be checking the CMD_IS_DELETED flag too.  Eliminated the 
pointless test.
2016-07-15 02:33:11 +00:00
dgp bd8c790e2e Stop checking case that can never happen. 2016-07-14 17:58:45 +00:00
dgp 5c3b0101a2 Plug memory leak created in recent variable Tcl_ObjType reform. 2016-07-14 15:17:58 +00:00
dgp fed06f2292 New test demonstrates memleak discovered by Rolf Ade. 2016-07-14 14:40:37 +00:00
dkf 2edc274601 [77d58e3a7a] Test case independence: chanio, cmdah, env, history. 2016-07-14 08:31:00 +00:00
dkf f68e18d159 Tidy up some references to INDEX_TEMP_TABLE. 2016-07-14 08:05:35 +00:00
dgp 66a18f91c0 merge 8.6 2016-07-13 19:19:37 +00:00
dgp 4c4629d5fd New private flag value INDEX_TEMP_TABLE.
Used to signal to Tcl_GetIndexFromObj*() routines that the table in which
lookups are done has a fleeting existence.  Thus there is no value in caching
any results, since the cache can never be useful.  Improvement over existing
hackery where cache is stored and then freed to avoid bogus results.
Likely candidate to eventually push to the public interface.
2016-07-13 19:06:22 +00:00
jan.nijtmans 6abb3012d4 Merge novem 2016-07-13 13:06:31 +00:00
dkf 89796adf9c [3606125] Make parser-related tests work on their own. 2016-07-12 21:30:34 +00:00
dkf 11b61660d2 [3606388] Make variable-related tests work on their own. 2016-07-12 21:25:27 +00:00
dgp d214692a28 tzdata2016f 2016-07-12 16:46:08 +00:00
dgp eec270dc08 Dup test name. Bump to TclOO 1.0.5. 2016-07-12 16:24:35 +00:00
jan.nijtmans a5748bcfea Merge trunk 2016-07-12 14:40:12 +00:00
dgp 34d3a97939 merge 8.6 2016-07-12 14:15:48 +00:00
jan.nijtmans 1f93e78598 Fix "file owned" for Cygwin: st_uid is only 16-bit there. 2016-07-12 14:03:36 +00:00
jan.nijtmans c3c52cf7b0 Fix "file owned" for Cygwin: st_uid is only 16-bit there. 2016-07-12 14:02:17 +00:00
jan.nijtmans b11d2bb62d Make hash type changable by compiling with -DTCL_HASH_TYPE=size_t (for example). Default (unsigned) cannot be changed in Tcl 8.x, that must wait until Tcl 9. 2016-07-12 13:44:26 +00:00
dgp 96d7deb99b Start RC branch for Tcl 8.6.6 2016-07-12 13:23:21 +00:00
dgp f01fb783f1 merge trunk 2016-07-11 22:04:56 +00:00
dgp e0a4741204 merge 8.6 2016-07-11 22:04:02 +00:00
dgp 0ceae7a885 [cea0344a1] Restore a clearing of the ensemble rewrite in one execution path
so attempts to use the data after free are not made.
Test namespace-50.9 demonstrates the need for this.
2016-07-11 21:56:32 +00:00
dgp e19d125606 Avoid memory leak in test. 2016-07-11 17:13:09 +00:00
dgp 32967bf1a1 merge trunk 2016-07-10 19:36:41 +00:00
dgp 9b324cef64 merge 8.6 2016-07-10 19:33:46 +00:00
dgp 68432b7ed1 [96fe2f1cc7] Plug memory leak. 2016-07-10 19:28:57 +00:00
dkf f1f3820560 [3606121] Making tests less cross-dependent. 2016-07-10 14:15:12 +00:00
dkf 363cf0a6f1 Fixes to namespace-old.test 2016-07-10 14:14:28 +00:00
dkf 508b6fc60d Fix to resolver.test 2016-07-10 12:45:34 +00:00
dkf 75f3cb9d07 Fixes to namespace.test 2016-07-10 07:59:52 +00:00
ashok 31ec149e21 Bugfix [da340d4f32]. clock-55.9 and clock-55.10 test failures. 2016-07-10 06:41:54 +00:00
ashok 6076256c3f Fix compiler warnings (const-ness and unused label) that did not show up
in the non-optimized build before last checkin.
2016-07-10 06:33:20 +00:00
dgp 71d97d21ac merge trunk 2016-07-09 19:08:18 +00:00
dgp 77e9a375ff merge 8.6 2016-07-09 15:47:28 +00:00
ashok 25f7d3b86e Fix missing constraints for Windows-specific tests 2016-07-09 14:30:54 +00:00
dgp 464153fecd Revise INST_INVOKE_REPLACE to call EvalObjv with TCL_EVAL_INVOKE and
no longer call EvalObjEx which does not support it reliably.  Also
convert to conventional list operations.
2016-07-09 14:26:56 +00:00
ashok 139a16f600 Fixed docs for prior check-in (exec of .CMD files on Windows) 2016-07-09 14:23:24 +00:00
ashok 600487a9d6 Bugfix [9ece99d58b]. Make exec understand .CMD files on Windows. 2016-07-09 14:18:22 +00:00
dkf a2962cc586 [1493a43044] Make [namespace upvar] ignore variable resolvers; the previous situation was completely unintuitive. 2016-07-09 13:26:46 +00:00
ashok d6ae741f7f Bugfix [3613671]. file owned implementation for Windows. 2016-07-09 11:13:48 +00:00
ashok 48e3873f19 Bugfix [ae61a67192]. file {stat, type, size} etc. support for built-in special Windows files/devices like CON. 2016-07-09 08:27:00 +00:00
dgp 57a42f683c Repair some memory corruption problems in EnsembleCmdRep. 2016-07-08 14:19:23 +00:00
jan.nijtmans b2e1bb03b1 (cherry-pick): Bugfix [5d7ea04580]. Treat .cmd and .ps1 files are executable on Windows. 2016-07-08 12:38:35 +00:00
jan.nijtmans 4783b95fdf merge trunk 2016-07-08 10:34:55 +00:00
jan.nijtmans d8785b8358 Merge core-8-6-branch: Bug [a47641a031]. TclJoinPath was calling TclNewFSPathObj with a first argument that was not an absolute path. Added a check for that. Fixes Windows test failures fileSystem-1.{3,4} 2016-07-08 10:30:07 +00:00
jan.nijtmans 7de7029fa5 Micro-optimization: Use TclGetStringFromObj in stead of Tcl_GetStringFromObj in many places where possible. 2016-07-08 10:28:48 +00:00
jan.nijtmans d5259dab01 Use TCL_HASH_TYPE #define for compatibility with Tcl8 in stead of TCL_HASH_KEY_TYPE_VERSION_2 2016-07-08 09:46:01 +00:00
ashok 47620e4ba8 Bug [a47641a031]. TclJoinPath was calling TclNewFSPathObj with a
first argument that was not an absolute path. Added a check for that.
Fixes Windows test failures fileSystem-1.{3,4}
2016-07-08 07:58:00 +00:00
jan.nijtmans 26562de083 Adapt hash-function and hash-table to allow hash-tables to grow >1Gb on 64-bit platforms. 2016-07-08 06:56:17 +00:00
dgp f290d19b27 Missed a cleanup line, which created a memleak. 2016-07-07 19:50:02 +00:00
dgp 1446838d71 To use a Tcl_Command token [aka (Command *)] for epoch checking, we must not
permit it to be freed while we hold it or else it could be mistaken for another
token allocated later that just happens to reside at the same address.

(Command *) preservation machinery already exists, just need to use it.

An extension facing the same problem might have to rely on command delete
traces.  

Earlier revisions used (Namespace *) lifetime to achieve the same
results, but that's really an indirect (possibly non-robust) path to achieving
the proper goal.

Valgrind is happy now.
2016-07-07 18:44:56 +00:00
dgp 276fee0021 Fully fix old bug [a16752c252] that has been only partially fixed until now
to support legacy tclcompiler binaries.  That no longer makes sense for Tcl 9.
2016-07-07 17:00:01 +00:00
dkf 8c8c1a6415 Expose the AVOID_RESOLVERS flag to [namespace upvar] implementations, which seem to need it. 2016-07-07 10:08:44 +00:00
dkf 07f3d3e393 Also test the interpreted path. 2016-07-07 08:35:30 +00:00
jan.nijtmans 9b9795105f merge trunk 2016-07-07 07:54:23 +00:00
jan.nijtmans 1e5db76cc1 Merge core-8-6-branch:
New tests to demo the remaining flaw in ensemble dispatch revisions. Itcl 4 also demonstrated these
[bd7f17bce8] Revise ensemble dispatch to call TclNREvalObjv() which supports the TCL_EVAL_INVOKE
Simplify all the Tcl_NRPostProc declarations
Create and use a utility Tcl_NRPostProc when decr ref count of values is all that is needed
Bugfix [5d7ea04580]. Treat .cmd and .ps1 files are executable on Windows
2016-07-07 07:48:53 +00:00
ashok 85d1666247 Bugfix [5d7ea04580]. Treat .cmd and .ps1 files are executable on Windows. 2016-07-07 06:30:58 +00:00
dgp bf0a1dc6c5 Create and use a utility Tcl_NRPostProc when decr ref count of values is
all that is needed.
2016-07-06 16:47:37 +00:00
dgp 31e1e2a8c4 Simplify all the Tcl_NRPostProc declarations. 2016-07-06 15:50:34 +00:00
dgp 8f4ed81159 [bd7f17bce8] Revise ensemble dispatch to call TclNREvalObjv() which supports
the TCL_EVAL_INVOKE flag that is needed.
2016-07-06 15:12:53 +00:00
jan.nijtmans abd0c671e8 Unnecessary #undef and unnecessary type cast. 2016-07-06 15:10:01 +00:00
jan.nijtmans 4d9fc11c2f Make epoch in ProcessGlobalValue a size_t 2016-07-06 10:09:07 +00:00
jan.nijtmans b294401d2f merge novem 2016-07-06 09:23:09 +00:00
dkf 966906b7ae Demonstrate that there is a problem. 2016-07-05 22:05:16 +00:00
dgp 20e8eaedc8 New tests to demo the remaining flaw in ensemble dispatch revisions.
Itcl 4 also demonstrated these problems.
2016-07-05 17:03:59 +00:00
jan.nijtmans 841ec05ecc Merge trunk. Some more internal use of size_t in stead of int. 2016-07-05 09:56:35 +00:00
jan.nijtmans d65776f03f Fixup the ensemble rewrite conversions 2016-07-05 08:55:04 +00:00
jan.nijtmans 7b6eaf23e9 Fixup the ensemble rewrite conversions (merge fork) 2016-07-05 08:53:17 +00:00
dgp bf33e5524b Fixup the ensemble rewrite conversions. 2016-07-04 20:39:43 +00:00
jan.nijtmans 3864f4ec46 Merge trunk 2016-07-04 08:46:41 +00:00
jan.nijtmans 2ee0bbf7fb Use conventional list operations for ensemble dispatch
Add ability to disassemble TclOO constructors and destructors
2016-07-04 08:39:28 +00:00
jan.nijtmans 23c3438aee typo and end-of-line spacing 2016-07-04 08:36:41 +00:00
dkf 21124cf6ab Add ability to disassemble TclOO constructors and destructors ([1493a43044] motivates) 2016-07-04 08:18:53 +00:00
dgp 1694cf05a6 Use conventional list operations for ensemble dispatch. 2016-07-03 14:09:45 +00:00
dgp 46f047fba1 merge trunk 2016-07-02 20:19:07 +00:00
dgp 8e39be1340 [09fabeb1fd] test subdirs in sorted order. 2016-07-02 17:58:49 +00:00
dgp 4110638cdd [f961d7d1dd] Repair usage message for ensemble parameters with spaces. 2016-07-02 17:57:58 +00:00
dgp 65bd912b77 [09fabeb1fd] test subdirs in sorted order. 2016-07-02 17:55:51 +00:00
dgp dd879c794d [f961d7d1dd] Repair usage message for ensemble parameters with spaces. 2016-07-02 17:21:53 +00:00
dgp 13269b1224 merge trunk 2016-07-01 20:39:31 +00:00
dgp e68b3d0183 [4402cfa58c] Rework the spell check machinery into something that will not be foiled by value sharing. 2016-07-01 20:18:47 +00:00
dgp 1481e6f3da [4402cfa58c] Rework the spell check machinery into something that will not be foiled by value sharing.
Valgrind is not happy with this commit.
Likely suspect is the removal of the nsPtr
field and checking against it.

dkf tried to warn me.
2016-07-01 20:14:14 +00:00
dgp 42c2792287 The EnsembleCmdRep struct that is the internal rep for caching ensemble
dispatches and spelling corrections can now be file static.
2016-07-01 19:42:38 +00:00
dgp 08826b79fe merge 8.6 2016-07-01 19:20:36 +00:00
dgp d5617720bb Add some tests 2016-07-01 19:16:56 +00:00
dgp e95143affd [4402cfa58c] Rework the spell check machinery into something that will not be
foiled by value sharing.
2016-07-01 18:54:36 +00:00
jan.nijtmans 16762d4246 Merge trunk 2016-07-01 14:14:19 +00:00
jan.nijtmans a67b58390b Make test-case "for.test" pass, regardless of end-of-line spacing 2016-07-01 14:11:38 +00:00
dgp ced0d271ff Encapsulate the fetching of the ensemble rewrite root, used by [namespace]. 2016-07-01 14:08:22 +00:00
dgp deaaa2ccd1 merge trunk; eliminate legacy hacks for Itcl 3; migration paths in place. 2016-07-01 13:36:23 +00:00
jan.nijtmans b6f5ea3c8f merge core-8-6-branch 2016-07-01 13:34:20 +00:00
jan.nijtmans 38e85a2dbe Use same internal representation for unicode strings in test-cases than in reality, in order to prevent surprises. 2016-07-01 13:32:19 +00:00
dgp 680d1a1513 Disable special hacks for Itcl 3 ensemble error message generation.
Migration paths are in place to bring this to an end.
2016-07-01 13:20:37 +00:00
dgp f2718ded6d Use the utility routines to eliminate the last bit of intrusion into the ensembleRewrite area. 2016-07-01 13:07:39 +00:00
dgp 221b47806c merge 8.6 2016-07-01 12:58:37 +00:00
dgp 286034431c Use the utility routines to eliminate the last bit of intrusion into the
ensembleRewrite area.
2016-07-01 12:21:15 +00:00
jan.nijtmans d1f3e49057 Merge trunk 2016-07-01 08:33:56 +00:00
jan.nijtmans 0f90e86f25 Merge trunk 2016-06-30 13:53:17 +00:00
jan.nijtmans c1ce97106f Simplify use of "struct" keyword in many places. 2016-06-30 13:16:44 +00:00
jan.nijtmans 00d621dfe0 Take over tclStringObj.c from trunk (not all changes there landed in novem) 2016-06-30 12:33:23 +00:00
jan.nijtmans 4139aa785c Make test-cases pass again 2016-06-30 12:18:03 +00:00
jan.nijtmans b2d284393d Merge trunk 2016-06-29 15:52:14 +00:00
jan.nijtmans c8212c36e9 Remove Tcl_Main() function, since it's no longer being used: It has been a macro already for ages. 2016-06-29 15:45:26 +00:00
jan.nijtmans 964477ea36 Eliminate internal use of TCL_STORAGE_CLASS, as it will be gone in 9.0 anyway 2016-06-29 15:28:36 +00:00
jan.nijtmans 88fc841203 Tcl_SetVar -> Tcl_SetVar2 and comparable replacements, eliminating functions which are deprecated. 2016-06-29 11:39:00 +00:00
dgp 04633c731b merge 8.6 2016-06-28 22:49:22 +00:00
dgp 75a582f357 Route all ensemble rewrite activity through a few utility routines. 2016-06-28 22:30:18 +00:00
dgp b28ae0fbb5 Route all ensemble rewrite activity through a few utility routines. 2016-06-28 21:17:28 +00:00
jan.nijtmans 99a50b95e5 Unicode rep en Tcl_Obj length: int -> size_t 2016-06-28 15:22:36 +00:00
dgp 6c2c1397ff merge 8.6 2016-06-28 14:26:11 +00:00
jan.nijtmans 85f253bc82 Merge trunk 2016-06-28 13:44:33 +00:00
dgp 0659ddeafe merge trunk 2016-06-27 20:38:16 +00:00
dgp 73124928ba Re-order loop for fewer gotos. 2016-06-27 20:29:46 +00:00
dgp 3d4ff3d7da merge trunk 2016-06-27 19:21:25 +00:00
dgp cc2f6f6a7d Stop parsing white space where there cannot be any. 2016-06-27 19:01:34 +00:00
dgp bf285438a2 Streamline comment parsing. 2016-06-27 15:16:04 +00:00
dkf 844c8c3016 [dd260aaf72] Allow the -dictionary option to be read from a pushed transform. 2016-06-27 14:28:33 +00:00
dkf 16dc425318 [dd260aaf72] Allow the -dictionary option to be read from a pushed transform. 2016-06-27 14:27:43 +00:00
dkf 7a41668df0 [c3d956be5b] Clearer text about positioning of optional arguments. 2016-06-27 13:46:15 +00:00
dkf 9c058fa5d4 [c3d956be5b] Clearer text about positioning of optional arguments. 2016-06-27 13:44:40 +00:00
jan.nijtmans 3615ba88e1 Merge trunk. Make magic stub value different for 64-bit builds, as this can never be stub-compatible with 32-bit builds. 2016-06-27 10:25:52 +00:00
jan.nijtmans 6c2f2fec8a Make TCL_MAJOR_VERSION/TCL_MINOR_VERSION/TCL_STUB_MAGIC available to Tcl_InitStubs() arguments. Useful for debugging and detection of stub incompatibilities (e.g. for Tcl9) 2016-06-27 10:22:30 +00:00
jan.nijtmans 2812be6504 merge trunk 2016-06-26 09:07:51 +00:00
jan.nijtmans 0cb6ad07c6 Add TCL_NOINLINE macro, useful for micro-optimizations 2016-06-26 09:03:08 +00:00
jan.nijtmans ef99853da4 (cherry-pick) [c30087b04f] Install man pages with permissions 644 instead of 444. 2016-06-26 09:01:26 +00:00
jan.nijtmans cb9a441bb9 (cherry-pick) [c30087b04f] Install man pages with permissions 644 instead of 444. 2016-06-26 09:00:06 +00:00
max bf46c5018d [c30087b04f] Install man pages with permissions 644 instead of 444. 2016-06-24 16:40:30 +00:00
dgp 3619c13393 merge 8.6 2016-06-23 13:18:33 +00:00
dgp 6f51e05c87 merge trunk 2016-06-23 12:23:03 +00:00
jan.nijtmans 47cb19c83f merge core-8-6-branch 2016-06-23 11:51:36 +00:00
dkf e577cd8cf8 [d553228d9f] Stop crashes in [dict update] with low refcount dictionaries. 2016-06-23 08:21:42 +00:00
dkf f05e229780 [d553228d9f] Stop crashes in [dict update] with low refcount dictionaries. 2016-06-23 08:20:16 +00:00
dkf ff29c56ea4 [c95b9fc0e3] Make errorcodes out of level parsing more consistent. 2016-06-22 20:58:14 +00:00
dkf 5cae882ff3 [c95b9fc0e3] Make errorcodes out of level parsing more consistent. 2016-06-22 20:57:18 +00:00
dgp 0592038cf9 merge 8.6 2016-06-22 18:57:07 +00:00
dgp 1dab75c685 merge trunk 2016-06-22 18:40:23 +00:00
dgp 5207d2fe71 [16896d49fd] Tcl_DStrings should tolerate appends to self. 2016-06-22 18:05:46 +00:00
dgp fab681eb11 [16896d49fd] Tcl_DStrings should tolerate appends to self. 2016-06-22 18:04:23 +00:00
dgp 01e94e53ed [16896d49fd] Tcl_DStrings should tolerate appends to self. 2016-06-22 17:38:31 +00:00
dgp 7f038e4db7 Repair earlier bug fix. Stopped crash, but botched the logic for multiple glob patterns. 2016-06-21 11:11:14 +00:00
dgp e5320ae0d5 Repair earlier bug fix. Stopped crash, but botched the logic for multiple
glob patterns.
2016-06-21 11:10:10 +00:00
jan.nijtmans 8820f08be6 Merge trunk 2016-06-21 10:02:35 +00:00
jan.nijtmans 8290f077d2 Upgrade internal Unicode tables to Unicode 9.0 2016-06-21 09:59:51 +00:00
jan.nijtmans eccf18644f Upgrade internal Unicode tables to Unicode 9.0 2016-06-21 09:58:54 +00:00
jan.nijtmans e4b872fc07 Upgrade internal Unicode tables to Unicode 9.0 2016-06-21 09:57:14 +00:00
dgp df9f4ed74f [c383ebb5e4] Match DStringInit and DStringFree properly. 2016-06-20 19:31:05 +00:00
dgp 8445a00210 [c383ebb5e4] Match DStringInit and DStringFree properly. 2016-06-20 19:23:17 +00:00
dgp 345d7cf628 merge 8.6 2016-06-17 00:53:04 +00:00
dgp 958ee08b1a merge trunk 2016-06-16 18:28:10 +00:00
dgp b300fecc27 [4b61afd660] Allow [info frame] to record line info for substituted command names. 2016-06-16 17:15:28 +00:00
dgp 482ab2e9dc [4b61afd660] Allow [info frame] to record line info for substituted command names. 2016-06-16 17:15:00 +00:00
dgp 751453253c [4b61afd660] Allow [info frame] to record line info for substituted command names. 2016-06-16 17:12:45 +00:00
dgp 7b7647f1ab [16828b3744] [vwait] *must* successfully undo its variable trace, or else it risks corrupting memory. Namespace teardown complexities were giving the traces an opportunity to survive. Added another (arguably better) Tcl_UntraceVar() call to be sure we avoid this problem. 2016-06-16 17:09:19 +00:00
dgp fa88074963 [16828b3744] [vwait] *must* successfully undo its variable trace, or else
it risks corrupting memory.  Namespace teardown complexities were giving
the traces an opportunity to survive.  Added another (arguably better)
Tcl_UntraceVar() call to be sure we avoid this problem.
2016-06-16 17:06:25 +00:00
dgp d418226edb Improve fix and add test. 2016-06-16 16:59:09 +00:00
dgp bdfafd3539 merge 8.5 2016-06-16 16:41:50 +00:00
dgp 819b87f1df [16828b3744] [vwait] *must* successfully undo its variable trace, or else
it risks corrupting memory.  Namespace teardown complexities were giving
the traces an opportunity to survive.  Added another (arguably better)
Tcl_UntraceVar() call to be sure we avoid this problem.
2016-06-16 16:38:36 +00:00
dgp b36880503c Merge tip of core-8-6-branch 2016-06-16 16:27:01 +00:00
dgp 3c2b67a4d3 Correct the patch. 2016-06-16 16:14:28 +00:00
dgp 08c3a9b76b Merge ec51e0603e. Segfaults again. 2016-06-16 15:25:55 +00:00
dgp dd519c7dac Merge up to a197e6853e. Still works. Next checkin restarts the segfaults. 2016-06-16 15:19:41 +00:00
dgp f67a341fce Merge up to the 8.6.0 release. 2016-06-16 14:48:35 +00:00
dgp c755ef0815 [16828b3744] Prototype fix for merging forward. 2016-06-16 14:23:15 +00:00
jan.nijtmans e12f438c54 merge trunk 2016-06-14 10:01:09 +00:00
jan.nijtmans f4cc5617a6 merge core-8-6-branch 2016-06-14 10:00:04 +00:00
jan.nijtmans be577d6027 Fix [7393be0be6e7f91cbb2016fa777896e3895929e3|7393be0be6]: Tcl Thread library doesn't work in Debug build on Windows_x64 2016-06-14 09:58:47 +00:00
jan.nijtmans 99d3f3c9f3 Fix [7393be0be6e7f91cbb2016fa777896e3895929e3|7393be0be6]: Tcl Thread library doesn't work in Debug build on Windows_x64 2016-06-14 09:57:54 +00:00
jan.nijtmans 0b3a8804eb Fix [7393be0be6e7f91cbb2016fa777896e3895929e3|7393be0be6]: Tcl Thread library doesn't work in Debug build on Windows_x64 2016-06-14 09:55:03 +00:00
jan.nijtmans 92a9b04a12 (cherry-pick): Fix [e14c77b845]: Compilation error over typedef. 2016-06-14 09:12:46 +00:00
dgp a4532de5a0 Corrects reported bug, but makes many tests fail. Something subtle about
what we should expect when recording the line of a command that isn't
known until runtime.
2016-06-10 13:43:13 +00:00
gahr ed326ae9b5 Merge trunk 2016-06-10 12:10:41 +00:00
jan.nijtmans 710ec0ef20 Fix [e14c77b845] for MSVC6: Compilation error over typedef 2016-06-09 11:41:31 +00:00
jan.nijtmans b4024d86d1 Fix [e14c77b845] for MSVC6: Compilation error over typedef 2016-06-09 11:38:54 +00:00
dgp 58f5175075 merge 8.6 2016-06-03 13:32:04 +00:00
jan.nijtmans e48602d674 Merge core-8-6-branch 2016-06-03 13:22:58 +00:00
jan.nijtmans e5b61b139f merge trunk 2016-06-02 14:59:32 +00:00
jan.nijtmans 0789d80b7a Fix [e14c77b845]: Compilation error over typedef. 2016-06-02 14:56:20 +00:00
jan.nijtmans 5aee84a3f3 Fix [e14c77b845]: Compilation error over typedef. 2016-06-02 14:54:38 +00:00
jan.nijtmans 9c93108a05 Merge trunk 2016-06-02 14:19:48 +00:00
jan.nijtmans e52789c557 (cherry-pick) Merge TIP #447: Execution Time Verbosity Levels in tcltest::configure. Tcltest 2.3.8 -> 2.4.0. 2016-06-02 12:27:55 +00:00
jan.nijtmans c0e9c99a1c tcltest 2.3.9 -> 2.4.0 2016-06-02 12:24:28 +00:00
dgp 67cfc8e178 merge 8.6 2016-06-01 18:25:50 +00:00
jan.nijtmans dad8ec6ec5 Merge trunk 2016-06-01 12:20:55 +00:00
jan.nijtmans 47115ff565 Fix [3bd69eba99a395ee]: 'make dist' fails when tclsh9.0 is on $PATH 2016-06-01 12:03:50 +00:00
jan.nijtmans dca8fae05f Fix [3bd69eba99a395ee]: 'make dist' fails when tclsh9.0 is on $PATH 2016-06-01 12:02:02 +00:00
jan.nijtmans 5512629c55 Fix [3bd69eba99a395ee]: 'make dist' fails when tclsh9.0 is on $PATH 2016-06-01 11:56:37 +00:00
gahr cb6e9135f2 Merge TIP #447: Execution Time Verbosity Levels in tcltest::configure 2016-06-01 09:55:40 +00:00
dgp af7e16b8e4 excise debug scaffolding 2016-05-26 17:29:34 +00:00
dgp 63e94b434f constructor invocation ensemble rewrite shenanigans also fit into the
refactored routines.
2016-05-26 17:27:56 +00:00
dgp 41a668a515 Reduce to minimum set of TclResetRewriteEnsemble() calls. 2016-05-26 16:33:37 +00:00
andy 20619d8334 Change "integer string" to "integer" in documentation for [tell]. It's not necessary to emphasize EIAS in every man page. The phrase "integer string" dates back to 1999 [ee1e5d143e], previous was "decimal string" which dates back to 1998, in fact the oldest version in Fossil [196f92fd17]. 2016-05-26 02:19:14 +00:00
dgp d0a8ae5cf7 Another missing reset 2016-05-26 00:00:37 +00:00
dgp 7f43feafd5 Put in some missing Resets. 2016-05-25 18:19:27 +00:00
dgp 2b502a4b2b Refactor all iPtr->ensembleRewrite setting code into TclInitRewriteEnsemble()
calls.  This likely fixes many weird corner case bugs, and definitly makes
future development and maintenance easier.
2016-05-25 17:27:49 +00:00
dgp f95100b44a Adapt and tidy up the bug fix. 2016-05-24 20:39:25 +00:00
dgp 0d4e358f5e Merge the bug fix and test case. 2016-05-24 20:29:35 +00:00
dgp 5f7157f3a2 Now fix the bug. 2016-05-24 20:23:15 +00:00
dgp 7cde8a22a1 New test namespace-53.11 demonstrates the bug. 2016-05-24 20:16:10 +00:00
dgp 535895e577 The handling of ensemble rewriting here is not right, but I've not yet
found the test case to demonstrate it.  Checking in debugging code to
spread to other dev platforms.
2016-05-24 19:29:58 +00:00
dgp 366828918a Appears that the TclInitRewriteEnsemble() routine was created with an intent
to refactor, but never actually got used.  Work on continuing that effort.
2016-05-24 19:28:50 +00:00
dgp 2f61163e6f merge trunk 2016-05-24 12:02:49 +00:00
gahr 7e85a50a46 Merge trunk 2016-05-23 11:40:10 +00:00
dkf 0e5bc322f1 Fix for [f97d4ee020]; use a two-stage approach to avoid quadratic behavior. 2016-05-21 09:30:02 +00:00
dkf 1195cdbd77 Fix for [f97d4ee020]; use a two-stage approach to avoid quadratic behavior. 2016-05-21 09:27:30 +00:00
dkf 5330c4e5d3 Make the tests pass. 2016-05-21 09:26:07 +00:00
dkf 52799e58d6 Added tests that show that this branch isn't ready to be committed back yet. 2016-05-20 05:14:37 +00:00
jan.nijtmans e9a8c42972 merge core-8-6-branch 2016-05-19 11:46:43 +00:00
dgp 46d0e89d6e merge 8.6 2016-05-17 11:45:44 +00:00
dkf c9bd1f3334 Possible fix for [f97d4ee020]; uses a two-stage approach to avoid quadratic behaviour. 2016-05-16 10:57:36 +00:00
dkf 6d990b9c83 Tweak a test to not leave around extra commands. 2016-05-14 06:38:52 +00:00
dgp 84f95a3ef4 merge 8.6 2016-05-13 15:55:44 +00:00
jan.nijtmans ce6cc21d0d Merge trunk 2016-05-13 09:21:55 +00:00
jan.nijtmans 3a20c7912b Merge core-8-6-branch 2016-05-13 09:09:05 +00:00
jan.nijtmans 008944a5c3 result/sendResult could be 64-bit, so account for that 2016-05-13 09:07:43 +00:00
jan.nijtmans e0c7416333 Merge core-8-6-branch. Eliminate some unnecessary spacing. 2016-05-13 08:01:44 +00:00
jan.nijtmans 7a4ad0872e Make tclreg13.dll work in any Unicode environment (either with 32-bit or 64-bit characters). Adopted from Androwish. Thanks to Christian Werner. version -> 1.3.2 2016-05-13 07:49:50 +00:00
Kevin B Kenny 7f12c0adfa Bug fix: Assembler dereferences a rogue pointer when unstacking an empty exception range. 2016-05-13 00:46:23 +00:00
Kevin B Kenny 885379e2cc Bug fix: Assembler dereferences a rogue pointer when unstacking an empty exception range. 2016-05-13 00:45:55 +00:00
dgp 76d0eb32fc Don't see why the intrep should make and keep copies of things already
stored in the hash table.
2016-05-12 20:23:23 +00:00
dgp 76f6131b81 The "ensembleCommand" Tcl_ObjType has no need for an UpdateString routine.
It is entirely a caching type.  No "pure" value can exist.
2016-05-12 19:49:06 +00:00
dgp 1438a1b7f7 Remove the nsPtr field from the EnsembleCmdRep struct. Cannot see any
justification for keeping it (can get via token), and test suite doesn't care.
2016-05-12 19:44:41 +00:00
dgp 5789574f89 Value correctness over performance myths. Encoding ObjType duplication
needs to dup the typePtr so that each Tcl_GetEncoding() is balanced by
a Tcl_FreeEncoding().
2016-05-10 16:52:53 +00:00
dgp f705798ed7 merge trunk 2016-05-10 16:03:13 +00:00
dgp 024bab4116 Bug fix. Have to arrange to only close a catch once. After the space
has been returned to placeholder values, closing with them as data leads
to memory corruption.

There's probably a better fix available because the error here feels like
it's rooted somewhere else, having us continue to check values we ought to
know have already been closed.
2016-05-06 16:03:15 +00:00
gahr 8e26969a34 Add a note in tcltest manual page to betray false expectations on msec and usec. 2016-05-04 12:23:40 +00:00
gahr ee742713d1 Approximate ms by μs/1000 2016-05-03 19:50:15 +00:00
gahr 00f3aef9ac Merge trunk 2016-05-03 19:40:53 +00:00
dgp 2fa7a2f487 merge trunk 2016-05-03 15:14:53 +00:00
dgp 54a8b02774 Rework bytecode intialization to serve different callers better. 2016-04-29 19:31:31 +00:00
dgp a9f506ce21 Parameterize TclInitByteCodeObj to callers sense of typePtr. 2016-04-29 19:29:14 +00:00
dgp 8c36db11d0 No longer need to create Tcl_Obj just to make some bytecode. 2016-04-29 18:02:55 +00:00
dgp a3838de0f9 Make obj-free bytecode maker available to rest of compile-related files. 2016-04-29 17:58:33 +00:00
dgp 9c0f41cdde Tease apart the bytecode creation machinery from the Tcl_Obj intrep machinery. 2016-04-29 17:52:30 +00:00
dgp 012caa867f Refactor bytecode initialization machinery. 2016-04-29 17:34:14 +00:00
jan.nijtmans 5bcc7fa342 merge core-8-6-branch 2016-04-24 16:14:07 +00:00
jan.nijtmans db5f9d232c merge trunk 2016-04-24 16:04:16 +00:00
jan.nijtmans 2d7c30cea8 merge-mark 2016-04-24 16:02:49 +00:00
dgp dbf87bdccf close forked fork 2016-04-22 19:59:37 +00:00
venkat 8e5a574ac0 Update to tzdata2016d from IETF 2016-04-22 19:59:19 +00:00
dgp 097a0bb6e2 close fork 2016-04-22 19:56:48 +00:00
venkat bbc790ccac Merge Fork 2016-04-22 19:54:22 +00:00
venkat b862d349ec Update to tzdata2016d from IETF 2016-04-22 19:49:54 +00:00
venkat 689cee14b2 Update to tzdata2016d from IETF 2016-04-22 19:46:41 +00:00
venkat 42eab451a6 Update to tzdata2016d from IETF 2016-04-22 19:43:59 +00:00
dgp a52a0147b7 Refactor bytecode cleanup. 2016-04-22 18:13:17 +00:00
gahr d243959c21 Bump tcltest version to 2.3.9 2016-04-20 19:37:31 +00:00
gahr dba0cd17dc Implement msec and usec verbosity levels in tcltest::configure 2016-04-20 19:27:31 +00:00
jan.nijtmans b0c45c3ad0 merge core-8-6-branch 2016-04-18 09:35:33 +00:00
dgp 24acc0b24d merge trunk 2016-04-12 12:15:43 +00:00
dgp 3f2f704c28 [d1f55451c6] Remove unnecessary panic routines. 2016-04-11 17:29:47 +00:00
jan.nijtmans 66c5d3e943 merge trunk 2016-04-10 16:01:57 +00:00
jan.nijtmans 71ae050a68 Fix [07d13d99b0a9]: Who broke TCL 8.6 and Tclblend ? 2016-04-10 16:01:17 +00:00
jan.nijtmans dcf6957535 Fix [07d13d99b0a9]: Who broke TCL 8.6 and Tclblend ? 2016-04-10 15:58:19 +00:00
jan.nijtmans e1e49c9dd1 Merge core-8-6-branch, cherry-pick [http://www.androwish.org/index.html/info/04ea31271c40789d|04ea31271c40789d] 2016-04-08 14:55:57 +00:00
jan.nijtmans d2dabcff9e merge trunk 2016-04-08 13:31:28 +00:00
jan.nijtmans 9a27611f89 Fix [2538f373ffc78d6dba9c3d973c147a84fdd9bbd8|2538f373ffc78d6d]: crash in Tcl_OpenTcpServer() on Windows 2016-04-08 13:30:12 +00:00
jan.nijtmans ac974ca777 Fix [2538f373ffc78d6dba9c3d973c147a84fdd9bbd8|2538f373ffc78d6d]: crash in Tcl_OpenTcpServer() on Windows 2016-04-08 13:27:57 +00:00
jan.nijtmans 5873cf9d02 merge trunk 2016-04-08 12:29:11 +00:00
jan.nijtmans 7210b03f81 merge 8.6 2016-04-08 12:28:01 +00:00
jan.nijtmans 820909f2f1 Fix [8663689908d3304a74fee525cd04aa4162e86391|8663689908d3]: regexp \\w missing characters 2016-04-08 12:26:19 +00:00
jan.nijtmans 6a82cdfc6a Fix [8663689908d3304a74fee525cd04aa4162e86391|8663689908d3]: regexp \\w missing characters 2016-04-08 12:23:50 +00:00
dgp fdc5dd1154 merge trunk 2016-04-07 14:57:43 +00:00
dgp 3611f9be2c merge 8.6 2016-04-07 14:56:25 +00:00
dgp c8ff1de738 Tidy up the last commit. 2016-04-07 14:54:39 +00:00
jan.nijtmans 18ba46bf37 merge core-8-6-branch 2016-04-07 09:19:05 +00:00
dgp 73c4c7d5e5 [213b6a2b9d] Make level parsing honor EIAS. 2016-04-06 18:24:05 +00:00
jan.nijtmans 1f02202956 Update all Unicode tables to version 9.0 beta 2016-04-06 10:38:05 +00:00
dgp f7e5d7a25e merge trunk 2016-04-05 12:07:38 +00:00
jan.nijtmans 1e5e66b31f Rename UtfCount() to TclUtfCount() and use it in more places. Suggested by pspjuth here: [e99a79a32650e7e5] 2016-04-05 09:32:43 +00:00
jan.nijtmans 5b719a2281 merge core-8-6-branch 2016-04-05 08:23:23 +00:00
dkf 4315a57ac4 [47ac84309b] Clear up a bunch of problems with [lreplace]. It now does nothing more gracefully, and properly ensures that the compiled and interpreted versions work the same. Thanks to aspect for his work on this. 2016-04-04 21:39:15 +00:00
dgp 89b344e544 Revise "parsedVarName" Tcl_ObjType to eliminated unnecessary parts and
to reduce string copying.
2016-04-04 18:27:46 +00:00
dkf 496861c695 [47ac84309b] Clear up a bunch of problems with [lreplace]. It now does nothing more gracefully, and properly ensures that the compiled and interpreted versions work the same. Thanks to aspect for his work on this. 2016-04-04 18:00:48 +00:00
dgp eccaf4b672 merge trunk 2016-04-04 16:11:48 +00:00
dgp 92a18f28ec merge 8.6 2016-04-04 16:02:17 +00:00
dgp 1a7bb8dae4 close fork 2016-04-04 15:53:30 +00:00
dgp e1173969e6 Merge *both* commits to get the TclAsyncReady optimization. Without
both parts, the test interp-34.3.1 hangs.
2016-04-04 15:43:49 +00:00
gahr 47b005a0d1 Merge tip-444 2016-04-04 11:30:07 +00:00
gahr b99e43073a merge trunk 2016-04-04 11:25:12 +00:00
jan.nijtmans 518ebabc90 micro-optimization from drh-micro-optimization branch: Knock perhaps 1% off execution time: guard on TclAsyncReady more efficient when decrementing to zero. 2016-04-04 11:21:03 +00:00
dkf 8597e498b4 Corrections to compression stream flushing to make Tk generate PNGs correctly. Tk bug [9eb55debc5]. 2016-04-04 10:06:40 +00:00
dkf f44a15f93f Was handling the flushing at the end of the stream wrongly. 2016-04-04 10:03:40 +00:00
dkf 8920f52cc1 Working on fixing problem with short reads from compressing streams that breaks PNG creation in Tk. 2016-04-03 11:04:23 +00:00
jan.nijtmans 21ee9bfd9a Merge trunk. Remove excess spacing. 2016-04-01 13:09:43 +00:00
jan.nijtmans d2a222320b RFE [0ef5e653ff4caf5f896ec1182e0aac38ab9a0c46|0ef5e653]: Add nsf to coffbase.txt. Eliminate exess spacing 2016-04-01 13:06:40 +00:00
jan.nijtmans 8451552b85 RFE [0ef5e653ff4caf5f896ec1182e0aac38ab9a0c46|0ef5e653]: Add nsf to coffbase.txt 2016-04-01 13:04:32 +00:00
jan.nijtmans 62147747fc RFE [0ef5e653ff4caf5f896ec1182e0aac38ab9a0c46|0ef5e653]: Add nsf to coffbase.txt 2016-04-01 13:00:25 +00:00
jan.nijtmans eba6ef86a9 merge trunk 2016-04-01 12:00:36 +00:00
jan.nijtmans ffcf42745c Two micro-optimizations in Win and UNIX notifier. See: [http://code.activestate.com/lists/tcl-core/15645/] 2016-04-01 11:56:42 +00:00
jan.nijtmans 421817ca2c merge trunk 2016-03-30 12:57:27 +00:00
jan.nijtmans edbf30e23a merge core-8-6-branch 2016-03-30 09:20:54 +00:00
dkf abb02f83eb [47ac84309b] Import of aspect's branch from his personal repository on chiselapp. 2016-03-30 08:46:43 +00:00
jan.nijtmans 395d0889b0 merge core-8-6-branch 2016-03-30 07:52:15 +00:00
dgp 890c05b713 merge trunk 2016-03-29 12:07:16 +00:00
jan.nijtmans 40fd1928b8 Eliminate AT_FORK_INIT_VALUE/RESET_ATFORK_MUTEX macro's, since other values than the default are not supported anyway. This results in the elimination of (empty functions anyway) AtForkPrepare/AtForkParent.
Also improve consistancy in some variable names. No change of functionality.
2016-03-29 10:17:02 +00:00
jan.nijtmans b6397860f2 (cherry-pick): Better fix for [7d0db7c388f52de81]: In stead of adding dependencies to multiple Makefile lines, combine them 2016-03-29 08:36:15 +00:00
jan.nijtmans 516ade7155 (cherry-pick): Better fix for [7d0db7c388f52de81]: In stead of adding dependencies to multiple Makefile lines, combine them 2016-03-29 08:34:38 +00:00
dgp f816bb2a60 The DupEncodingIntRep() routine is broken. It fails to set the typePtr
field of the duplicated Tcl_Obj to indicate that the intrep is that of
the &encodingType.  The impact must be that refcounting of Tcl_Encodings
are out of balance, at least in the (unusual?) case where "encoding" values
need duplication.  I hesitate to actually commit this fix until I have a
test demonstrating the need for it, and a chance to see the impact on
actual encoding operations.  The lifetime management of encodings has a
history of being tricky and raising controversy.  More work required.
2016-03-28 21:24:22 +00:00
dgp 40a37e9b4a There's a "parsedVarName" Tcl_ObjType that remembers how a variable name
breaks down into the name of an array and the name of an element.  It has
been storing them in an intrep as a Tcl_Obj holding the array name and an
allocated string holding the element name.  This branch revises the intrep
strategy to use Tcl_Obj's to hold both parts.  This reduces copying and seems
to simplify the code.  Also "nulled out" the UpdateStringProc for the type
which can never be called.  I think this is a better answer, but I'd like
any other informed opinions.
2016-03-28 19:03:14 +00:00
dgp 4baa83bda3 merge trunk 2016-03-28 00:56:17 +00:00
jan.nijtmans e79059759a Better fix for [7d0db7c388f52de81]: In stead of adding dependencies to multiple Makefile lines, combine them 2016-03-27 21:28:15 +00:00
dkf 8f836376b7 [47ac84309b] Fix problems with [lreplace] compilation. 2016-03-27 16:40:28 +00:00
dkf 79e34ea63c [47ac84309b] Fix problems with [lreplace] compilation. 2016-03-27 16:37:11 +00:00
dkf a749c350a3 Some OSX symbols builds create libtcl*.dylib.dSYM which is a directory. 2016-03-27 15:49:52 +00:00
dkf 7dd80b0182 Some OSX symbols builds create libtcl8.7.dylib.dSYM which is a directory. 2016-03-27 15:48:55 +00:00
dkf 1014baa6f8 Some OSX symbols builds create libtcl8.6.dylib.dSYM which is a directory. 2016-03-27 15:43:07 +00:00
dkf b5d99faa0a Update to tzdata 2016c from ietf.org 2016-03-26 22:52:13 +00:00
venkat 69c8bda7a9 Update to tzdata 2016c from ietf.org 2016-03-26 18:13:31 +00:00
venkat c9251df909 Update to tzdata 2016c from ietf.org 2016-03-26 18:12:24 +00:00
venkat dd5b5d0bd1 Update to tzdata 2016c from ietf.org 2016-03-26 18:10:48 +00:00
jan.nijtmans 137f138b0a - Undo unix notifier changes: too risky at this moment.
- Merge trunk
- (cherry-pick from dhr-micro-optimization): Micro-optimization: remove double checked lock from TclGetAllocCache in favour of initialization in TclInitSubsystems
2016-03-25 14:41:26 +00:00
dgp 9acaee3d40 No longer a need to keep around 'revert to 8.5' code. 2016-03-24 21:21:42 +00:00
jan.nijtmans ba0d107038 merge core-8-6-branch 2016-03-23 15:12:01 +00:00
dgp a85aaef490 merge trunk 2016-03-23 13:46:40 +00:00
jan.nijtmans 804858772b (cherry-pick): Fix DTRACE_HDR value if tracing is diabled. Follow-up to [7d0db7c388] 2016-03-23 13:06:09 +00:00
jan.nijtmans 8173838454 (cherry-pick): Fix DTRACE_HDR value if tracing is diabled. Follow-up to [7d0db7c388] 2016-03-23 13:04:52 +00:00
jan.nijtmans 2e4f989482 Fix DTRACE_HDR value if tracing is diabled. Follow-up to [7d0db7c388] 2016-03-23 13:03:54 +00:00
dgp 98aa34029a merge trunk 2016-03-23 12:51:04 +00:00
dkf 7c0f0f400e merge mark 2016-03-23 10:55:40 +00:00
dkf 3a11f2d6af merge mark 2016-03-23 10:53:50 +00:00
jan.nijtmans 234e576260 (cherry-pick): Fix [f1253530cdd83e66]: Different Windows / *nix default bindings for text widget
See: [https://groups.google.com/forum/#!topic/comp.lang.tcl/ZZ_WwfQdmoE].
People like Eric Brunel, who want the most logical behavior for any Tcl release can simply do:
    set ::tcl_wordchars {\w}
    set ::tcl_nonwordchars {\W}
2016-03-23 10:00:40 +00:00
jan.nijtmans 1ab408f799 (cherry-pick): Fix [f1253530cdd83e66]: Different Windows / *nix default bindings for text widget
See: [https://groups.google.com/forum/#!topic/comp.lang.tcl/ZZ_WwfQdmoE].
People like Eric Brunel, who want the most logical behavior for any Tcl release can simply do:
    set ::tcl_wordchars {\w}
    set ::tcl_nonwordchars {\W}
2016-03-23 09:59:08 +00:00
jan.nijtmans 46d899ba95 Fix [f1253530cdd83e66]: Different Windows / *nix default bindings for text widget.
Still - most likely - not the complete story for trunk/tcl9, but whatever we do this is a better starting-point than how it was.
2016-03-23 09:55:06 +00:00
jan.nijtmans fcc11a1aff Fix [f1253530cdd83e66]: tcl_wordchars and tcl_nonwordchars are unknown at startup.
For trunk this will not be the complete story, but for core-8-6-branch and core-8-5-branch it will at least make tcl_wordchars and tcl_nonwordchars function as documented. That's the least polish we should do.
See: [https://groups.google.com/forum/#!topic/comp.lang.tcl/ZZ_WwfQdmoE].
People like Eric Brunel, who want the most logical behavior for any Tcl release can simply do:
    set ::tcl_wordchars {\w}
    set ::tcl_nonwordchars {\W}
2016-03-23 09:46:40 +00:00
jan.nijtmans 4a0859ef8e (cherry-pick): Fix [7d0db7c388f52de8]: Occasional build failures with parallel make. Thanks to Jaroslav Škarvada for bug report and fix. 2016-03-23 09:00:54 +00:00
jan.nijtmans 3585082431 (cherry-pick): Fix [7d0db7c388f52de8]: Occasional build failures with parallel make. Thanks to Jaroslav Škarvada for bug report and fix. 2016-03-23 08:59:25 +00:00
jan.nijtmans b21ca89201 Fix [7d0db7c388f52de8]: Occasional build failures with parallel make. Thanks to Jaroslav Škarvada for bug report and fix. 2016-03-23 08:48:54 +00:00
dkf 1498795d38 Factor out string internal rep definition so fix for [1af8de570511] is less awful. 2016-03-22 20:30:47 +00:00
dkf 3273318e4b Factor out string internal rep definition so fix for [1af8de570511] is less awful. 2016-03-22 20:30:08 +00:00
dgp ccc295d394 merge trunk 2016-03-22 17:54:59 +00:00
dgp 69d4a9d89e Revised fix for signed/unsigned mismatch. "get types right" > "add more casts" 2016-03-22 17:21:03 +00:00
dgp 43697f3b21 More places where unsigned quantities should be decared such. 2016-03-22 17:08:50 +00:00
dgp c4578641c3 More signed/unsigned type correction. 2016-03-22 16:53:06 +00:00
dgp 00fada46c2 Don't compare signed and unsigned. Get types right. 2016-03-22 16:38:47 +00:00
jan.nijtmans 35c8885bad Alternative solution for [f1253530cd] 2016-03-22 13:15:21 +00:00
jan.nijtmans 5743a71270 (cherry-pick): Fix signed-unsigned-compare warning (reported by François Vogel on Windows, but gcc can trigger it as well) 2016-03-22 09:07:44 +00:00
jan.nijtmans 740454d17a Fix signed-unsigned-compare warning (reported by François Vogel on Windows, but gcc can trigger it as well) 2016-03-22 09:05:10 +00:00
jan.nijtmans 6ca0220e0b (experiment) Use TclpMasterLock() in stead of a separate notifierInitMutex. One less mutex to be worried about. 2016-03-21 14:22:52 +00:00
jan.nijtmans de842a4b05 merge trunk 2016-03-21 12:10:23 +00:00
jan.nijtmans 17e150b6bb (cherry-pick): Fix [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier(). Thanks to hirofumi for both the bug-report and the fix 2016-03-21 12:08:34 +00:00
jan.nijtmans 40986d0eb9 (cherry-pick): Fix [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier(). Thanks to hirofumi for both the bug-report and the fix 2016-03-21 12:03:17 +00:00
jan.nijtmans a2827884a9 Fix [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier(). Thanks to hirofumi for both the bug-report and the fix.
Use TclpMasterLock() in stead of MASTER_LOCK everywhere (in stead of in some files only, not in others). 
Use "static int initialized" variable consistantly. 
Fix some comments. No change of functionality.
2016-03-21 11:59:19 +00:00
jan.nijtmans fdcc17288c .... oops .... 2016-03-21 09:16:28 +00:00
jan.nijtmans cfe1b9b146 Proposed fix for [d3071887dbc7aeac]: Fix SEGV in Tcl_FinalizeNotifier() 2016-03-21 09:05:34 +00:00
dkf c2bbf3cc3a [1af8de570511] Fix crash in [string replace] caused by cut-n-paste. 2016-03-20 20:43:57 +00:00
dkf 6f7c0d0cb8 [1af8de570511] Fix crash in [string replace] caused by cut-n-paste. 2016-03-20 20:42:26 +00:00
dkf 5cf8d7d5dc [1af8de570511] Fix crash in [string replace] caused by cut-n-paste. 2016-03-20 20:40:07 +00:00
dgp e3777c3fae merge trunk 2016-03-17 13:31:34 +00:00
dgp 38f165b6d2 [0b8c387cf7] Replace deprecated Tcl_VarEval(). socket accept callbacks now
always evaluate in global context.  *** POTENTIAL INCOMPATIBILITY ***
2016-03-17 13:25:11 +00:00
dgp e5ba57087a merge 8.6 bug fixes 2016-03-17 13:19:44 +00:00
dgp abdb62c194 [ae38befcfb] Rewrite TclGetInnermostExceptionRange() for fewer iterations. 2016-03-17 13:14:22 +00:00
dgp 63a966a40e [1a25fdfec6] Enable compile of commands like [variable ${ns}::v]. 2016-03-17 12:24:05 +00:00
dgp e5a3264434 [b9b2079e6d] Unwind ExceptionAux data after failed compile. 2016-03-17 12:15:52 +00:00
jan.nijtmans 401704baeb Merge trunk.
Add TCL_EVAL_GLOBAL flag to Tcl_EvalObjEx(), for reason mentioned in [0b8c387cf7].
2016-03-16 14:52:46 +00:00
jan.nijtmans ecceacf810 (cherry-pick from trunk): Update tzdata to 2016b from ietf.org 2016-03-16 09:58:08 +00:00
jan.nijtmans bf462d250e Remove undocumented TCL_HASH_KEY_STORE_HASH. Setting this to "0" is not supported (was it ever ????), and not tested for long time. 2016-03-16 09:56:55 +00:00
venkat fdbbb3e1d1 Update tzdata to 2016b from ietf.org 2016-03-16 09:09:35 +00:00
venkat 79a87f7d74 Update tzdata to 2016b from ietf.org 2016-03-16 09:07:57 +00:00
venkat 768a116fde Update tzdata to 2016b from ietf.org 2016-03-16 08:58:27 +00:00
gahr 99ac77fd22 [e6f27aa56f] Add files I missed in my previous commit 2016-03-13 17:23:31 +00:00
gahr 32d41dcbb5 [e6f27aa56f] Initial import of libtommath-1.0
This commit brings in libtommath-1.0, as of tag v1.0 of the upstream repository
at https://github.com/libtom/libtommath.

Only the top-level directory has been imported: the demo, etc, logs, mtest,
pics, pre_gen, and tombc directories have been removed from our repo.

The stubs tables have been regenerated to accomodate for the new function:
mp_expt_d_ex(mp_int *a, mp_digit b, mp_int *c, int fast);
See https://github.com/libtom/libtommath/commit/e9b1837 for details.

Only the unix build system has been modified for now. Windows and Mac OSX will
come later.
2016-03-11 17:13:38 +00:00
dgp d9bd422a8a Simple change gets most of the effect. Fails to handle backslash. anyone care? 2016-03-11 15:40:45 +00:00
dgp b483c7748b New test compile-5.3 for the bug. 2016-03-11 15:00:51 +00:00
jan.nijtmans 8907bb1c56 merge trunk 2016-03-11 14:16:13 +00:00
jan.nijtmans 113f1348c0 Allow unstable Tcl releases to use unstable packages by default (this makes "package require Tk" find the expected 8.7a0 version in stead of 8.6). Make many "package" test-cases work even when the environment variable TCL_PKG_PREFER_LATEST is set. 2016-03-11 09:33:35 +00:00
dgp 248c843928 [b9b2079e6d] Proposed fix. When a compileProc fails, it may have done an
arbitrary amount of partial work, which needs to be undone.  When the exception
handling machinery got its last big revision, the undoing of what it does
was neglected.  I think this patch gets it all, but more eyes would be good.
2016-03-10 20:03:38 +00:00
jan.nijtmans 849bbbce67 Somewhat more excess spacing in for.test 2016-03-10 13:44:44 +00:00
jan.nijtmans e8df4c5fe0 Eliminate exess spacings in many test-cases 2016-03-10 11:56:23 +00:00
jan.nijtmans 69ddcaa16e Let Tcl 8.7 allow Tk 8.7 to be used by default 2016-03-09 15:59:07 +00:00
dgp 06ce1bc045 [0b8c387cf7] Replace deprecated Tcl_VarEval() call with reworked callback
system that uses Tcl_Obj scripts.
2016-03-08 18:06:06 +00:00
dgp c2480e69a5 [bbc304f61a] Avoid event handling when reflected channel has a watch change half-completed. (First half in 1 thread, second in another). When this is allowed to happen, false alarm errors from [chan postevent] are the result when timing is unlucky. See test iocmd.tf-24.17.bug3522560 . 2016-03-08 15:55:51 +00:00
dgp d15250601a [bbc304f61a] Avoid event handling when reflected channel has a watch
change half-completed. (First half in 1 thread, second in another).  When
this is allowed to happen, false alarm errors from [chan postevent] are
the result when timing is unlucky.
2016-03-08 15:52:23 +00:00
dgp 056d0d2c78 [bbc304f61a] Avoid event handling when reflected channel has a watch
change half-completed. (First half in 1 thread, second in another).  When
this is allowed to happen, false alarm errors from [chan postevent] are
the result when timing is unlucky. See test iocmd.tf-24.17.bug3522560 .
2016-03-08 15:50:37 +00:00
jan.nijtmans 4ff3a61b82 Eliminate exess spacings in remaining doc pages 2016-03-08 15:31:06 +00:00
jan.nijtmans ee67bf676a configure.in -> configure.ac 2016-03-08 13:44:16 +00:00
jan.nijtmans ef37739f61 merge trunk 2016-03-07 10:35:59 +00:00
jan.nijtmans c2844d65a8 Fix version number in .project file 2016-03-07 08:37:01 +00:00
jan.nijtmans e85cf6c3a9 (cherry-pick): Fix gcc 5.3 warning: In function ‘NRInterpCmd’: tclInterp.c:726:5: warning: assuming signed overflow does not occur when assuming that (X + c) < X is always false [-Wstrict-overflow]
if ((i + 2) < objc) {
Remove some excessive spacing
2016-03-04 13:15:08 +00:00
jan.nijtmans 6964ca96c2 Fix gcc 5.3 warning: In function ‘NRInterpCmd’: tclInterp.c:726:5: warning: assuming signed overflow does not occur when assuming that (X + c) < X is always false [-Wstrict-overflow]
if ((i + 2) < objc) {
Remove some excessive spacing
2016-03-04 13:13:21 +00:00
dgp 4c3f17ea96 Bump trunk to 8.7a0 to accept new feature development. 2016-03-03 19:45:52 +00:00
dgp aa1d17b6b4 Open branch for continued 8.6.* patching. 2016-03-03 19:29:13 +00:00
gahr fcab9a91fa merge trunk 2016-03-03 08:34:56 +00:00
gahr 08296be4e4 Clarify that weekends are intended as Saturdays and Sundays 2016-03-03 08:30:56 +00:00
jan.nijtmans 763f9dff55 minor upstream changes 2016-03-02 15:39:32 +00:00
dgp 80c9e6511b [bbc304f61a] Proposed fix for reflected watch race condition. 2016-03-02 15:29:48 +00:00
jan.nijtmans bbcef5b648 merge trunk 2016-03-02 15:10:48 +00:00
jan.nijtmans a87d7d11f7 Merge trunk 2016-03-02 09:06:08 +00:00
jan.nijtmans a312878e5b Eliminate exess spacings in many doc pages. 2016-03-02 08:49:12 +00:00
dgp 2ed7c8372b [80304238ac] Prevent RC cycle in the localVarName objtype. 2016-03-01 16:45:01 +00:00
dgp 5be04ec11e Extra safety against cycles 2016-03-01 16:42:03 +00:00
dgp 22557045ac Add test for memleak 2016-03-01 16:40:05 +00:00
dgp dc43669d30 merge trunk 2016-03-01 16:26:34 +00:00
dgp b3c0cd4c86 merge release 2016-03-01 13:24:49 +00:00
dgp b1b31a3289 merge trunk 2016-03-01 01:49:04 +00:00
dgp 106d4730fd Clean up unfired timer handlers or they cause errors in -singleproc 1 test run. 2016-02-26 16:17:12 +00:00
dgp 14bfb4aa23 [80304238ac] Candidate fix for memleak due to RC cycle. 2016-02-26 15:42:33 +00:00
gahr 013f304b82 More comprehensive tests adding and subtracting week-days 2016-02-24 09:10:01 +00:00
gahr 3942c68ef0 merge trunk 2016-02-23 19:44:07 +00:00
gahr 35844385d6 Make sure that adding 0 weekdays doesn't result in going back in time 2016-02-23 16:31:18 +00:00
dgp bd80c9f645 update changes 2016-02-23 14:02:20 +00:00
dgp 12a6b6de59 merge trunk 2016-02-23 13:59:49 +00:00
jan.nijtmans 7fd882e910 Convert remaining env.test test-cases to tcltest-2 format 2016-02-22 12:39:10 +00:00
jan.nijtmans c47960c7d7 (cherry-pick): Add test-case for [9b47029467631832]: testing existence of env(some_thing) destroys traces. This demonstrates that Tcl 8.5 doesn't suffer. 2016-02-22 12:16:48 +00:00
jan.nijtmans 3f788ef33b Fix [9b47029467631832]: testing existence of env(some_thing) destroys traces. With test-case demonstrating the problem. 2016-02-22 11:42:09 +00:00
dgp bd7229a87d Bump to TclOO 1.0.4. Update changes file. 2016-02-19 16:44:26 +00:00
jan.nijtmans c0bf770206 Add test-case which demonstrates the problem. This test-case fails in trunk (but passes in core-8-5-branch, as expected). 2016-02-19 14:42:53 +00:00
dgp d01a3bf002 Update to tzdata2016a. 2016-02-19 13:37:11 +00:00
jan.nijtmans 07418c9b93 Proposed fix for [9b47029467631832]: testing existence of env(some_thing) destroys traces.
Was the comment [http://core.tcl.tk/tcl/artifact/f93c0675115b73ce?ln=554|here] not correct after all?.
2016-02-19 10:49:57 +00:00
gahr d6eeb008f7 [5f71353740] Support the "weekdays" unit in [clock add] 2016-02-17 11:03:48 +00:00
dgp f09740fae5 merge trunk 2016-02-16 18:20:10 +00:00
dgp 7b9248d7cf merge release 2016-02-12 16:46:41 +00:00
dkf a25ea98e5c Fix a few more very minor formatting glitches. 2016-02-11 09:31:31 +00:00
dkf 4ae2c37a12 Fix minor formatting glitch 2016-02-11 09:27:00 +00:00
dgp 365c85d20f merge trunk 2016-02-09 18:08:14 +00:00
dgp ecd0e0dcdd merge trunk 2016-02-09 18:00:59 +00:00
hypnotoad b3b6f6ff99 Pulling *more* changes from zipfs 2016-02-08 21:59:46 +00:00
hypnotoad 71b97d16f3 Merging changes from zipfs 2016-02-08 21:58:12 +00:00
dgp 160d612a6b update release date 2016-02-08 20:42:59 +00:00
jan.nijtmans 25d1f4aa03 Merge trunk 2016-02-08 16:11:13 +00:00
dkf 902d8b663f Tweaking some comments for clarity. 2016-02-05 16:31:00 +00:00
dkf 9a802144f5 Clean up the handling of buffer limit exceeding when flushing a zlib transform. 2016-02-05 14:36:28 +00:00
dgp 7a58b59b2d [cf74deb33c] Plug memleaks in class teardown. 2016-02-04 21:05:02 +00:00
dgp 17848b9a86 merge 8.5 2016-02-03 19:08:54 +00:00
dkf 47c35ac594 [25842c161] Prevent zero-length compress actions in [zlib] streaming API. 2016-02-03 15:29:04 +00:00
dgp 3f0217f6ef Backout the contributed patch memaccounting from Postgres since it changes
the protections incompatibly and causes established tests to crash.
2016-02-01 21:39:44 +00:00
dgp 4c3e91b842 merge trunk 2016-01-29 14:22:31 +00:00
dgp c97add06a3 merge 8.5 2016-01-29 14:21:14 +00:00
jan.nijtmans 07bbb1b270 Implement TIP #440: Add engine to tcl_platform Array 2016-01-29 13:38:54 +00:00
jan.nijtmans 8b001f80e4 Implement TIP #440: Add engine to tcl_platform Array 2016-01-29 13:35:00 +00:00
jan.nijtmans 0fad32deac Fix gcc'ism. Not all compilers can substract two void pointers. 2016-01-29 09:46:56 +00:00
jan.nijtmans 22f5c55560 Upstream zipfs change and unbreak zipfs test-case 2016-01-29 09:17:55 +00:00
dgp f51482578d Bump to 8.6.5 2016-01-28 17:33:21 +00:00
dgp 8864730532 RefineApproximation() leaked twoMv and twoMd in one of its exits. 2016-01-28 13:42:33 +00:00
dgp 2aa5fe0c94 merge 8.5 2016-01-26 16:08:26 +00:00
jan.nijtmans 3cf33e9e9f merge trunk 2016-01-24 16:57:57 +00:00
jan.nijtmans 727efcf012 Fix "make test" broken by previous commit 2016-01-24 16:52:56 +00:00
jan.nijtmans a288c5e54a Merge trunk.
Depend on ensemble now, adapt documentation.
2016-01-23 20:33:38 +00:00
Miguel Sofer 4df5497f65 add a test to insure that callbacks run at the correct C-stack depth while unwinding the NRE stack. 2016-01-23 19:46:58 +00:00
jan.nijtmans 9bd7291d76 merge trunk 2016-01-22 13:12:30 +00:00
jan.nijtmans 37fed62502 Eliminate useless variable assignment. 2016-01-22 10:38:36 +00:00
jan.nijtmans c3dccf7196 Improve code 'quality' by fixing some harmless clang/cppcheck warnings. Thanks to Gustaf Neumann. No change in functionality. 2016-01-22 10:27:29 +00:00
jan.nijtmans c3e9d3205f Add "zipfs" ensemble. 2016-01-22 08:45:38 +00:00
dgp 65f1ba80c3 merge 8.5 2016-01-21 14:55:48 +00:00
jan.nijtmans 3aa54d6d7a merge-mark 2016-01-21 13:15:51 +00:00
jan.nijtmans af6bc3e860 Fix compiler warnings (discovered on latest clang/gcc6), suggested by Gustaf Neumann. All harmless, no change of functionality. 2016-01-21 13:11:15 +00:00
Joe Mistachkin 8365a58070 Update comment with TIP number. 2016-01-19 17:48:25 +00:00
dgp f6f5bda1ed Complete merge trunk 2016-01-19 13:55:46 +00:00
dgp a6dea06eb0 Merge and resolve conflicts. 2016-01-19 13:55:09 +00:00
dgp accf365a42 Partial trunk merge - up to the point where conflicts arise. 2016-01-19 13:52:13 +00:00
dgp 8cd2dd2b45 [593baa032c] Stop segfault in class destruction with active namespace. 2016-01-19 13:08:49 +00:00
dgp ab508359ae merge trunk 2016-01-19 13:06:40 +00:00
jan.nijtmans 227fbec0fc Merge trunk, upstream fixes to zipfs.c for win32 2016-01-19 10:43:40 +00:00
jan.nijtmans fe1ab20fb7 One more Tcl_GlobalEval() usage. 2016-01-18 15:00:49 +00:00
jan.nijtmans dc21089720 Merge trunk 2016-01-18 14:33:32 +00:00
jan.nijtmans e52d82d888 Eliminate some usages of Tcl_GlobalEval() and Tcl_Eval(), which are deprecated functions. 2016-01-18 14:32:41 +00:00
jan.nijtmans c610c39100 Make function TclDisassembleByteCodeObj() static, since it is only used in a single source file. 2016-01-18 12:19:31 +00:00
dkf 76cf0cf48d Put the file location information that Tcl has into the disassembled code. Important for tclquadcode. 2016-01-18 10:16:35 +00:00
jan.nijtmans f6bb864fc7 Minor tweaks in documentation/testcases. Don't use deprecated Tcl methods any more 2016-01-18 09:28:55 +00:00
Joe Mistachkin b25cb7d39a Add docs and tests. 2016-01-15 00:39:41 +00:00
Joe Mistachkin 02b32be1a7 Add the tcl_platform(engine) element, TIP to be written. 2016-01-14 23:55:45 +00:00
hypnotoad bd7d14f293 Reconciled the inner workings of the core_zip_vfs and zipfs branch of Tcl
core_zip_vfs now uses the same C implementation. More fixes to come as I
tweak the userspace and Makefile tools. The goal is to fold core_zip_vfs
into the zipfs branch.
2016-01-12 19:03:55 +00:00
jan.nijtmans 982211da16 Merge trunk. Update documentation 2016-01-09 23:02:42 +00:00
dgp 3e8ea3960b merge trunk 2016-01-08 14:48:51 +00:00
jan.nijtmans d533bb6a26 Fix [f01d74dc8c]: DEFAULT_COPY_BLOCK_SIZE has incorrect value 2016-01-07 11:33:02 +00:00
jan.nijtmans 14078e6cbe merge trunk 2016-01-06 11:21:05 +00:00
jan.nijtmans 972aafc741 Fix win32 mingw 32-bit build, bug was introduced by [c397433be321e6d9] (wrong zlib1.dll was copied) 2016-01-06 11:15:20 +00:00
dkf 3c9ec7f76f Document the Tcl_CancelEval function correctly. It was missing its second argument, making using it correctly impossible, especially from C++. 2016-01-01 17:46:45 +00:00
jan.nijtmans a1740d9766 Make al zipfs command Tcl_Obj-based 2016-01-01 16:50:52 +00:00
dgp 14146ffe58 merge 8.5 2015-12-22 20:49:19 +00:00
dgp be81d9e977 [593baa032c] Additional fix for the mixinSubs list. 2015-12-22 19:50:04 +00:00
dgp 044f0ead3d [593baa032c] Possible fix (with test) for segfault in superclass teardown. 2015-12-22 18:27:23 +00:00
jan.nijtmans e9795fb407 first shot at documentation 2015-12-22 11:39:28 +00:00
jan.nijtmans 299924e512 Remove TIP #414 fragment, not strictly needed for the zipfs TIP.
Add more zipfs test-cases
2015-12-22 09:11:57 +00:00
jan.nijtmans a03e74efc1 USE_TCL_STUBS is not defined anyway 2015-12-21 21:25:40 +00:00
jan.nijtmans 3c03a492f9 Start with a few simple basic test-cases 2015-12-21 15:21:21 +00:00
jan.nijtmans 56c5833c4a Eliminate all use of ZIPFS_IN_TCL 2015-12-21 14:01:57 +00:00
jan.nijtmans 63b07461da Fix android compilation (zipfsFilesystem.loadFileProc is a constant, so it cannot be written) 2015-12-21 12:43:54 +00:00
jan.nijtmans 1c3288f038 Finally, make it compile warning-free using Visual Studio, if ZIPFS_IN_TCL is defined 2015-12-21 11:59:08 +00:00
jan.nijtmans 8ecd6aeb5b Make it compile warning-free with MSVC compiler (VS2013, at least). Other tweaks. 2015-12-21 11:29:38 +00:00
jan.nijtmans 4d00715902 CONST -> const 2015-12-21 10:49:36 +00:00
jan.nijtmans 95aeb2a3d6 Merge trunk.
Remove utf-32 encoding, will not be part of the "zipfs" TIP.
2015-12-21 10:38:12 +00:00
jan.nijtmans e39b986e81 Code-cleanup: CONST -> const, don't use macro's like __REG_CONST and types like re_void any more. No change in functionality. 2015-12-21 10:27:19 +00:00
jan.nijtmans b0a98f480d Undo more Android-specific changes, which don't form part of Zipfs, as further preparation for Zipfs TIP.
Rename zipfs.h to tclZipfs.h, so it can be installed together with tcl.h
2015-12-21 10:03:06 +00:00
jan.nijtmans cb73551e8d Start of "zipfs" branch, meant for keeping track of the proposed changes for a new TIP. Remove some android-specific build/configure files. 2015-12-21 09:31:36 +00:00
jan.nijtmans 4d946107e7 Put back the stub entries for TclpGetDate/TclpLocaltime/TclpGmtime. Although those functions are dead (they will be removed in Tcl 9, already done in the "novem" branch), removing those functions is a good idea, this cannot be done in any 8.x release. It hinders the acceptance of a "zipfs" TIP, therefore this change should not be part of the "androwish" change-set. 2015-12-21 09:16:38 +00:00
jan.nijtmans c795f44ea5 upstream androwish change 2015-12-18 12:39:24 +00:00
jan.nijtmans ecd9567624 Minor tweaks on ZIPFS_IN_TCL 2015-12-17 15:23:27 +00:00
jan.nijtmans d6fdfa4624 minor tweaks for MSVC 2015-12-17 12:04:22 +00:00
jan.nijtmans 3826a4d32e Clean-up: Remove Tcl_FindHashEntry/Tcl_CreateHashEntry symbols/stub entries, as those two functions are actually defined as macros. The function alternatives were only kept for legacy, but are no longer necessary. 2015-12-16 16:25:07 +00:00
jan.nijtmans 58ace2b1dc remove unnecessary Tclzipfs defines in tclStubInit.c 2015-12-16 15:18:59 +00:00
jan.nijtmans 8f6089f225 No need for more than tcl.h in zipfs.h 2015-12-16 13:37:20 +00:00
jan.nijtmans 19627fed47 Remove zipfs symbols from stub table. Those symbols should be exported as-is, without using the stub mechanism. 2015-12-16 13:26:54 +00:00
jan.nijtmans 83145e2bb1 merge trunk 2015-12-16 13:21:58 +00:00
jan.nijtmans a41657e1c7 merge trunk 2015-12-15 15:45:26 +00:00
jan.nijtmans 605aff99c9 Remove unused static function definition 2015-12-15 13:19:43 +00:00
jan.nijtmans 6df8a636f8 make some MODULE_SCOPE symbols static 2015-12-15 11:13:32 +00:00
jan.nijtmans 72dd32a3ca Eliminate AuxDataType table: since this table only contains 4 constant entries, it is overkill to use a hash table for that. 2015-12-15 10:33:09 +00:00
jan.nijtmans 621c76324a Merge trunk. Upstream zipfs change 2015-12-15 09:31:57 +00:00
dkf 0b00017862 Issue the correct auxType when compiling [array set]. 2015-12-12 11:54:33 +00:00
jan.nijtmans e961e1c08a Merge trunk. Upstream androwish changes 2015-12-11 22:56:07 +00:00
jan.nijtmans fee8865cb8 merge trunk 2015-12-11 10:19:53 +00:00
jan.nijtmans e3a26ef9f6 Fix [c9eb6b0ac01bb8ef96a616c71426a3db4a279bec|c9eb6b0ac0]: ConvertLocalToUTCUsingC fails the first time if TZ is not set 2015-12-11 10:18:03 +00:00
jan.nijtmans 2e57446fb4 Fix [c9eb6b0ac01bb8ef96a616c71426a3db4a279bec|c9eb6b0ac0]: ConvertLocalToUTCUsingC fails the first time if TZ is not set 2015-12-11 10:13:33 +00:00
dgp 1a6fefb4a0 merge 8.5 2015-12-10 13:38:06 +00:00
jan.nijtmans e740674cb8 Merge trunk. Upstream zipfs change 2015-12-09 10:20:02 +00:00
jan.nijtmans 456e333da9 Fix 64-bit MSVC build without SDK: If the MSVC version is recent enough, compiling without SDK works fine (provided that the build is configured using "--enable-64bit"). 2015-12-02 11:30:36 +00:00
jan.nijtmans 6c1d8b86ca Fix 64-bit MSVC build without SDK: If the MSVC version is recent enough, compiling without SDK works fine (provided that the build is configured using "--enable-64bit"). 2015-12-02 11:02:34 +00:00
dgp 0f07cb10d5 merge trunk 2015-11-30 20:24:27 +00:00
dgp 62a8eb3fbf merge 8.5 2015-11-30 18:38:33 +00:00
dgp a2b2c6bfc4 [32c5740a4d] Have Tcl_ListObjReplace() try to use realloc() for growing when
it can do so.
2015-11-30 18:24:03 +00:00
jan.nijtmans 23ced66a6b merge trunk 2015-11-30 07:37:05 +00:00
jan.nijtmans 7004d026a9 merge trunk 2015-11-26 12:04:37 +00:00
jan.nijtmans c7c95d77f8 On cygwin, install libtcl8.6.dll.a in the {prefix}/lib directory. On win32, don't create empty {prefix}/lib/tcl8/8.2 and {prefix}/lib/tcl8/8.3 directories any more during installing. 2015-11-26 12:01:35 +00:00
jan.nijtmans e6fa255ed5 On cygwin, install libtcl8.5.dll.a in the {prefix}/lib directory.
On win32, don't create empty {prefix}/lib/tcl8/8.2 and {prefix}/lib/tcl8/8.3 directories any more during installing.
2015-11-26 11:46:02 +00:00
jan.nijtmans b637222a5d merge trunk 2015-11-25 21:07:55 +00:00
jan.nijtmans 4dd62bd6ed Fix comments at the top of the *.decls files, which are not correct any more for a long long time 2015-11-24 15:09:16 +00:00
jan.nijtmans d06ef17019 Fix comments at the top of the *.decls files, which are not correct any more for a long long time. 2015-11-24 15:05:15 +00:00
jan.nijtmans 5c26fc08b4 Merge trunk.
Use "tcl9" in stead of "tcl8" in various Makefiles, which (finally) allows to remove the hack in tm.tcl introduced in [387d3899e088f9e4]
2015-11-24 09:19:43 +00:00
jan.nijtmans 99ba912ceb Make ::tcl::tm::roots work for alpha/beta Tcl releases. (backported from "novem", will be needed anyway for whatever future developments) 2015-11-24 09:00:27 +00:00
jan.nijtmans 9782f13f46 Cherrypick [812a81812ebf89d2416059d45fabd27e45603f5e|812a81812e]: Turn off NRE asserts by default. About a 5% speedup on [clock format]. 2015-11-22 21:02:29 +00:00
jan.nijtmans 9a0f7dd2c8 merge trunk 2015-11-22 16:06:02 +00:00
dkf e922cb1cd3 [3d96b7076e] Prevent crashes when destroying an object's class inside a method call. 2015-11-21 22:22:49 +00:00
dgp a166c55da0 Tcl_ListObjReplace() early out when > LIST_MAX attempted. 2015-11-20 16:59:55 +00:00
dgp 7e6cdc9cc4 [3293874] Simplified fix (not backport). Also detect >LIST_MAX early. 2015-11-20 16:58:11 +00:00
dgp 94b81dda49 [40f628e8e3] Tcl_ListObjReplace() callers need to handle TCL_ERROR. 2015-11-20 16:42:57 +00:00
dgp f4b65459ef [40f628e8e3] Tcl_ListObjReplace() callers need to handle TCL_ERROR. 2015-11-20 15:47:30 +00:00
jan.nijtmans 440e5fc7dc Merge trunk 2015-11-18 08:53:34 +00:00
oehhar 81ee44ac3b Spanish translation of example corrected 2015-11-17 17:07:33 +00:00
oehhar c3e6dcaa67 Spanish translation of example corrected 2015-11-17 17:01:58 +00:00
jan.nijtmans f89b8b1e2d Fix --enable-symbols build on Cygwin. Reported by François Vogel 2015-11-16 10:55:42 +00:00
jan.nijtmans 4e12f02a75 Fix --enable-symbols build on Cygwin. Reported by François Vogel 2015-11-16 10:32:40 +00:00
jan.nijtmans 74ed7238b0 merge trunk 2015-11-14 21:37:35 +00:00
jan.nijtmans 8f1f92264a Fix [https://www.sqlite.org/src/info/34eb6911afee09e7|34eb6911af], taken over from SQLite: Fix uses of ctype functions (ex: isspace()) on signed characters in test programs and in some obscure extensions. No changes to the core. 2015-11-13 08:42:30 +00:00
jan.nijtmans d85dd92c27 Fix [https://www.sqlite.org/src/info/34eb6911afee09e7|34eb6911af], taken over from SQLite: Fix uses of ctype functions (ex: isspace()) on signed characters in test programs and in some obscure extensions. No changes to the core. 2015-11-13 08:40:54 +00:00
max 9965b67d8e Remove unused calculation of the result set size from TclCreateSocketAddress() 2015-11-11 09:56:41 +00:00
dgp 533f349b01 [261a8a79f0] Integer overflow leads to segfault. 2015-11-10 16:34:04 +00:00
dgp f3a2810d20 [261a8a79f0] Integer overflow leads to segfault. 2015-11-10 16:31:29 +00:00
jan.nijtmans 38d734ddcf better handle out-of-memory conditions in ZIP filesystem
hard-wire initial encoding on Android to UTF-8
2015-11-03 13:13:14 +00:00
jan.nijtmans d90345e5ba merge trunk 2015-11-01 22:22:24 +00:00
jan.nijtmans cbeed9da92 Merge trunk. Added comments in ZIP filesystem (no functional changes) 2015-11-01 22:04:02 +00:00
dgp 63907ea7b5 merge 8.5 2015-10-29 13:12:03 +00:00
dkf 04d1b41522 make genstubs 2015-10-28 21:15:52 +00:00
dkf a2efc41118 Expose some of the TclBN operations through the internal API, so clients of the bignum code don't need to use tclTomMath.h directly. 2015-10-28 21:15:21 +00:00
jan.nijtmans a369d46795 merge trunk 2015-10-28 09:04:46 +00:00
venkat c032143a98 Merge tzdata2015g from ietf 2015-10-27 23:17:18 +00:00
venkat 91ec2f6354 Merge tzdata2015g from ietf 2015-10-27 23:16:54 +00:00
venkat f98d4ff859 Update to tzdata2015g from ietf 2015-10-27 23:16:06 +00:00
dkf 1956f4b66b merge trunk 2015-10-26 07:23:58 +00:00
hypnotoad 90b38da321 Merged with trunk, fixes to allow builds outside of the tcl/unix|win directory 2015-10-26 04:02:36 +00:00
jan.nijtmans 4594b4f27a merge trunk 2015-10-25 22:59:16 +00:00
jan.nijtmans b9013a32c5 merge trunk 2015-10-25 22:49:27 +00:00
jan.nijtmans 58e31795d0 re-generate "configure", both for unix and win 2015-10-25 22:47:39 +00:00
jan.nijtmans 2a20e200df re-generate "configure", both for unix and win 2015-10-25 22:45:39 +00:00
jan.nijtmans ff3f0131bd Merge trunk 2015-10-25 20:14:13 +00:00
jan.nijtmans 383da62572 Remove use of HAVE_USLEEP. It isn't use anywhere any more 2015-10-25 19:41:29 +00:00
jan.nijtmans 500fbe92e6 Remove use of HAVE_USLEEP. It isn't use anywhere any more. 2015-10-25 19:39:38 +00:00
dkf 3fc99c04f6 A more lenient test; different platforms are more diverse in their correct output. 2015-10-24 16:02:32 +00:00
dkf 56bf715712 A more lenient test; different platforms are more diverse in their correct output. 2015-10-24 16:01:56 +00:00
jan.nijtmans 6de875d527 merge trunk 2015-10-24 07:50:19 +00:00
jan.nijtmans 422eaa2077 Bring back regexp to what it was in latest release. This is the correct fix for the problem noted by kbk. Thanks! And thanks to dkf for the test-case 2015-10-24 07:43:33 +00:00
jan.nijtmans e8786f8348 Bring back regexp to wat it was in latest release. This is the correct fix for kbk's attempt. 2015-10-24 07:40:30 +00:00
dkf d1f3fe0de0 Mend problems with [platform::identify] formatting. 2015-10-23 22:44:31 +00:00
dkf a29de0a577 combine divergence 2015-10-23 22:39:02 +00:00
dkf 116ec0f471 Ensure that at lease the format of the output of the platform package's commands is consistently parsable. 2015-10-23 22:30:57 +00:00
Kevin B Kenny 4028edd571 Correct bad regexp in platform::identify that causes it to return incorrect results everywhere. 2015-10-23 22:29:23 +00:00
dkf c0946d430e Knock perhaps 1% off execution time: guard on TclAsyncReady more efficient when decrementing to zero. 2015-10-23 21:52:10 +00:00
dgp ae0bcaf820 autoconf-2.59 2015-10-23 15:21:36 +00:00
dgp 5f01d638a5 merge 8.5 2015-10-23 15:00:07 +00:00
dgp 828abac60a merge mark 2015-10-23 14:59:38 +00:00
dgp f5599d7f8d Backout of failed attempt to fix [32ae34e63a] got checked into wrong branch. 2015-10-23 14:57:56 +00:00
dgp 5cc8064510 Bump to release number 8.5.19 2015-10-23 14:30:40 +00:00
oehhar b421519004 Make test clock-67.4 time zone independent. Bug [4a0c163d24] 2015-10-23 12:52:19 +00:00
jan.nijtmans 5b793fef99 merge trunk 2015-10-23 08:52:41 +00:00
jan.nijtmans 13aa1642ac Merge trunk 2015-10-23 08:13:49 +00:00
oehhar c6fd11389a Change "clock scan/format -format %x -locale current" output on msgcat locale change. Bug [4a0c163d24] 2015-10-23 08:12:53 +00:00
oehhar a231dcf0ac New test for clock scan, test numbering corrected 2015-10-23 08:08:09 +00:00
dgp 070ce22547 Open the release candidate branch for Tcl 8.5.19. Updated changes file. 2015-10-22 21:06:35 +00:00
Kevin B Kenny 56619f9f70 fix typo in micro-optimization TclpInitThreadAlloc 2015-10-22 14:07:01 +00:00
dkf 30c0c8a7fe Turn off NRE asserts by default. About a 5% speedup on [clock format]. 2015-10-22 01:00:28 +00:00
Kevin B Kenny 8f8aa2b0d9 Micro-optimization: remove double checked lock from TclGetAllocCache in favour of initialization in TclInitSubsystems 2015-10-21 23:30:41 +00:00
oehhar c0a4d1371a Change "clock format -format %x -locale current" output on msgcat locale change [4a0c163d24] 2015-10-21 20:30:49 +00:00
dgp 990b376ae1 [1080042][8f245009b0] Big bundle of regexp engine fixes and improvements contributed from Tom Lane of the postgres project. 2015-10-21 14:10:13 +00:00
dgp 7640d1e898 [1080042][8f245009b0] Big bundle of regexp engine fixes and improvements
contributed from Tom Lane of the postgres project.
2015-10-21 13:50:55 +00:00
dgp cf8194b6a0 Adapted new tests contributed from Tom Lane @postgres. 2015-10-21 13:35:48 +00:00
dgp 1636c5d39a Adaptation of most of the re-mopup.patch from Tom Lane @ postgress.
Still should add the new tests.
2015-10-20 20:21:44 +00:00
dgp 33180e74dd Adaptation of re-memaccounting.patch from Tom Lane @postgres. 2015-10-20 19:53:03 +00:00
dgp f51da6d726 Adaptation of re-better-pushpull.patch from Tom Lane @postgres 2015-10-20 19:21:53 +00:00
dgp 6c297ad438 Adaptation of re-better-fixempties.patch from Tom Lane @ postgres. 2015-10-20 18:32:25 +00:00
dgp 1ead60af0b Adaptation of re-oNsquared.patch from Tom Lane @ postgres. 2015-10-19 19:32:04 +00:00
dgp d5029136c1 Adaptation of the patch re-fixconstraintloops.patch from
http://www.postgresql.org/message-id/19394.1444865029@sss.pgh.pa.us
2015-10-19 17:42:43 +00:00
dkf c0ab3b7128 [154f0982f2] Document that Tcl_NewObjectInstance() really needs to make a namespace. 2015-10-19 14:07:48 +00:00
jan.nijtmans ef1cf6b99b typo in comment. Eliminate unnecessary end-of-line spacing. 2015-10-19 13:52:58 +00:00
jan.nijtmans 04c18b117e merge trunk 2015-10-19 12:53:20 +00:00
jan.nijtmans d905cc4737 merge trunk 2015-10-18 10:48:54 +00:00
jan.nijtmans 44deaab456 Bring back Tcl_MutexLock() to exact implementation in Tcl 8.6.4. For details, see [ba44e415a0]: Use of mutexLock causes problem with reactive event handling in AndroWish 2015-10-18 10:34:30 +00:00
jan.nijtmans dfb834e395 Bring back Tcl_MutexLock() to exact implementation in Tcl 8.5.18. For details, see [ba44e415a0]: Use of mutexLock causes problem with reactive event handling in AndroWish 2015-10-18 10:31:50 +00:00
jan.nijtmans 463aed9329 Proposed fix for [ba44e415a0]: "Use of mutexLock causes problem with reactive event handling in AndroWish".
This basically undoes the retry mechamism in Tcl_MutexLock, introduced in [9f8b7bea53]. Does this retry mechamism hurt more than it helps? Feedback requested.
2015-10-17 07:21:19 +00:00
jan.nijtmans d954f3c4ee Merge trunk 2015-10-14 19:04:36 +00:00
jan.nijtmans c6511f8d77 Various build fixes, when using Cygwin shell in combination with native MinGW compiler. Contributed by pooryorick. 2015-10-12 11:29:45 +00:00
jan.nijtmans 8f5f70cbb1 Various build fixes, when using Cygwin shell in combination with native MinGW compiler. Contributed by pooryorick. 2015-10-12 09:57:26 +00:00
jan.nijtmans e19283c7d5 merge-mark 2015-10-10 12:38:24 +00:00
jan.nijtmans f0ba2933f2 Fix minor msvc compiler warning in tclWinFile.c 2015-10-10 12:37:34 +00:00
jan.nijtmans c770024ce1 merge trunk 2015-10-09 19:11:11 +00:00
jan.nijtmans 0519b566b8 Make autoconf > 2.59 work warning-free 2015-10-09 14:41:51 +00:00
jan.nijtmans 96ba10aa41 Make autoconf > 2.59 work warning-free 2015-10-09 14:40:28 +00:00
stwo 5767ab9581 Tcl/OpenBSD/Sparc needs -fPIC. 2015-10-09 13:30:49 +00:00
stwo efecaa64e2 Tcl/OpenBSD/Sparc needs -fPIC. 2015-10-09 13:18:48 +00:00
jan.nijtmans c16b45ac7f merge trunk 2015-10-08 14:50:58 +00:00
jan.nijtmans 8d774cfa0b Decorate Tcl_Exit() and Tcl_SetExitProc()'s argument with TCL_NORETURN as appropriate, as already done with Tcl_Panic() earlier.
Fix minor msvc compiler warning in tclWinFile.c
2015-10-08 14:41:46 +00:00
dgp 602c01d366 merge trunk 2015-10-08 11:56:34 +00:00
jan.nijtmans fe2ac816b0 Fix [8587cb648c445f7]: clock default format incorrect 2015-10-07 13:34:17 +00:00
jan.nijtmans ffeedbcbca Fix [8587cb648c445f7]: clock default format incorrect 2015-10-07 13:32:29 +00:00
jan.nijtmans aaa3242a11 Where "interp" is only used for error-reporting, it can be allowed to be NULL. This should fix [5da26d4760]: Tcl_LoadFile() segfaults if "interp" is NULL. 2015-10-07 13:14:27 +00:00
jan.nijtmans 6524bed322 Fix surrogate handling in PrintSourceToObj(), differenciating for TCL_UTF_MAX = 6 (androwish) and TCL_UTF_MAX = 4 (tip-389-impl). No effect when TCL_UTF_MAX = 3. 2015-10-07 08:40:23 +00:00
jan.nijtmans c1f95640c4 merge trunk 2015-10-07 07:23:01 +00:00
jan.nijtmans cfea006a9d Fix [b42a851475]: file normalize ~user returns wrong directory on Windows 2015-10-06 14:49:23 +00:00
jan.nijtmans 3a680cc449 Fix [b42a851475]: file normalize ~user returns wrong directory on Windows 2015-10-06 14:25:36 +00:00
jan.nijtmans 48ef2b50eb merge trunk 2015-10-06 10:50:56 +00:00
jan.nijtmans 2a95ee6ac2 merge trunk 2015-10-06 09:46:11 +00:00
jan.nijtmans 7c5ea5b5f1 Revise content of generate win/tclConfig.sh: Make sure that all entries use windows paths with forward slashes. 2015-10-06 09:36:34 +00:00
jan.nijtmans 601fa19fab Revise content of generate win/tclConfig.sh: Make sure that all entries use windows paths with forward slashes. 2015-10-06 09:19:18 +00:00
jan.nijtmans ecd0d69efb Double '[' and ']', otherwise re-generating "configure" doesn't give the expected result. 2015-10-06 08:21:15 +00:00
jan.nijtmans ef310f81a0 Double '[' and ']', otherwise re-generating "configure" doesn't give the expected result. 2015-10-06 08:18:46 +00:00
jan.nijtmans 4c6eb20ea5 Use "cygpath -m" in stead of "cygpath -w", so paths (even windows ones) always have forward slashes. Suggested by pooryorick for [http://core.tcl.tk/tclconfig/tktview/06f1692bbe29449ac3f2161ebf9dd153d0349845|TEA], but a good idea anyway 2015-10-05 09:26:29 +00:00
jan.nijtmans 6a0634acc9 Use "cygpath -m" in stead of "cygpath -w", so paths (even windows ones) always have forward slashes. Suggested by pooryorick for [http://core.tcl.tk/tclconfig/tktview/06f1692bbe29449ac3f2161ebf9dd153d0349845|TEA], but a good idea anyway 2015-10-05 09:23:12 +00:00
dkf 6e716af3b7 [05489ce335] Constrain broken tests. 2015-10-04 10:58:48 +00:00
jan.nijtmans e800634951 merge trunk 2015-10-04 10:27:44 +00:00
jan.nijtmans db1ca42627 Eliminate unnessessary end-of-line spacing. No functional change. 2015-10-04 10:20:05 +00:00
jan.nijtmans 677ffa1104 Eliminate unnessessary end-of-line spacing. No functional change. 2015-10-04 10:10:58 +00:00
jan.nijtmans 071aa09c6e merge trunk 2015-10-04 09:42:24 +00:00
jan.nijtmans a82b49336a Fix signed<->unsigned compare gcc compiler warning. 2015-10-01 11:18:41 +00:00
jan.nijtmans e24d246c87 Eliminate a few gcc compiler warnings, when using -Wwrite-strings (tested with the brand-new gcc 5.2.0) 2015-10-01 11:04:19 +00:00
jan.nijtmans 56ad3a16ab merge trunk 2015-09-30 14:04:41 +00:00
jan.nijtmans 10cd3c906d merge trunk 2015-09-30 13:57:25 +00:00
jan.nijtmans 56a99d9dd9 Mutch simpler solution to [219866c1e9]: In stead of filtering out version information from the string, make sure that ::platform::generic doesn't contain this version information in the first place. 2015-09-30 13:45:54 +00:00
jan.nijtmans 4cabc332b4 Mutch simpler solution to [219866c1e9]: In stead of filtering out version information from the string, make sure that ::platform::generic doesn't contain this version information in the first place. 2015-09-30 13:44:52 +00:00
jan.nijtmans 7d9ccac72d Fix [738bc50e93]: auto_execok doesn't recognise mklink on windows 2015-09-30 12:59:56 +00:00
jan.nijtmans 3449d223d1 Fix [738bc50e93]: auto_execok doesn't recognise mklink on windows. Remove some unnecessary end-of-line spacing. 2015-09-30 12:57:02 +00:00
jan.nijtmans 0036891363 Don't limit Universal runtime support VisualStudio version 14 only, future versions will probably have it as well. 2015-09-30 11:12:45 +00:00
jan.nijtmans c6f5daec40 Don't limit Universal runtime support VisualStudio version 14 only, future versions will probably have it as well. 2015-09-30 11:11:33 +00:00
jan.nijtmans 9c536234a9 Fix [b1f19286f0]: for command documentation.
Minor addendum to previous commit: Make OS version number available in ::platform::generic for Cygwin
2015-09-30 08:29:57 +00:00
jan.nijtmans 0ad034c3c6 Fix [b1f19286f0]: for command documentation.
Minor addendum to previous commit: Make OS version number available in ::platform::generic for Cygwin
2015-09-30 08:25:37 +00:00
jan.nijtmans 0fca37f803 merge trunk 2015-09-29 21:20:04 +00:00
jan.nijtmans 85cfbf4eb7 rebase with novem 2015-09-29 08:06:00 +00:00
jan.nijtmans 6494c04dee merge trunk 2015-09-29 07:56:53 +00:00
jan.nijtmans e39c8e6b26 Fix [219866c1e9]: platform::identify: regexp doesn't match platform -> platform 1.0.14 2015-09-29 07:48:58 +00:00
jan.nijtmans 829e5981d2 Fix [219866c1e9]: platform::identify: regexp doesn't match platform -> platform 1.0.14 2015-09-29 07:46:08 +00:00
jan.nijtmans b381dafa84 Align comment. Remove some end-of-line spacing. No functional changes. 2015-09-28 11:13:25 +00:00
jan.nijtmans bb34bee773 align comment, no functional change 2015-09-28 11:11:00 +00:00
jan.nijtmans 9dd94f7396 Don't use mutex retry mechanism on Android. (problems ???) 2015-09-28 10:58:30 +00:00
jan.nijtmans ce65c7b396 merge trunk 2015-09-27 12:59:23 +00:00
jan.nijtmans 9bec80c561 merge trunk 2015-09-25 17:12:27 +00:00
dgp 1f6b04d51b Backout failed attempt to fix [32ae34e63a]. 2015-09-25 16:43:05 +00:00
jan.nijtmans 27989920c5 proposed fix for [219866c1e9]: platform::identify: regexp doesn't match platform 2015-09-25 10:39:39 +00:00
jan.nijtmans faef5b981f Fix [5d170b5ca5e12743006d737c79f959f3efabc644|5d170b5ca5]: checkin 9f8b7bea5344f1b0 broke netbsd's thread notifier 2015-09-24 11:06:44 +00:00
jan.nijtmans 92b0e12403 Fix [5d170b5ca5e12743006d737c79f959f3efabc644|5d170b5ca5]: checkin 9f8b7bea5344f1b0 broke netbsd's thread notifier 2015-09-24 10:54:07 +00:00
jan.nijtmans 856c560b71 merge trunk 2015-09-24 10:03:20 +00:00
jan.nijtmans daa0c940b8 merge-mark (almost, just a few cosmetic changes) 2015-09-24 10:01:36 +00:00
jan.nijtmans c3eea370e5 Clean-up tclUnixNotfy.c, restructure it the same as "trunk" version. No functional changes. This will make upcoming merging work easier. 2015-09-24 09:55:14 +00:00
dgp c3805dda91 Update tests to new ReflectWatch() behavior. 2015-09-23 17:29:15 +00:00
dgp 02960a691f [e0a7b3e5f8] Add missing UpdateInterest call in DoRead(). 2015-09-23 17:15:53 +00:00
dgp c222d15bd1 [e0a7b3e5f8] Add missing UpdateInterest call in DoRead(). 2015-09-23 17:07:40 +00:00
dgp 93695198d8 [32ae34e63a] Prevent segfaults and data corruption when CopyData() is called recursively.
Mark new test io-53.20 as "knownBug". It demos some unknown flaw in MoveBytes().
2015-09-23 16:58:34 +00:00
dgp f2a99f6167 merge 8.5 2015-09-23 16:37:06 +00:00
dgp 049bb5ecaa [32ae34e63a] Prevent segfaults and data corruption when CopyData() is called
recursively.
2015-09-23 16:29:38 +00:00
dgp 8d4e35dc59 Update tests to account for changed ReflectWatch behavior. 2015-09-23 16:08:30 +00:00
dgp 9bcf18e010 Protect CopyState buffer from conflicting uses when CopyData() is called
recursively. Also, have ReflectWatch() always give driver a chance to act.
2015-09-23 16:00:57 +00:00
dgp df9835efa1 CopyData() now tolerates recursion enough so that io-53.18 does not segfault. 2015-09-23 13:18:32 +00:00
jan.nijtmans bac8bd28c0 Merge trunk 2015-09-23 12:19:12 +00:00
jan.nijtmans a80a084de9 merge trunk 2015-09-23 11:35:03 +00:00
jan.nijtmans 7fd41e8f9e Merge trunk 2015-09-23 10:42:40 +00:00
jan.nijtmans 4067fb322f Micro-optimization handling Tcl_Panic(), suggested by D. Richard Hipp.
As a side-effect, this is as well a fix  for [1446864]: segfaults if Tcl_Panic() returns.
2015-09-23 10:29:00 +00:00
dgp 1d9460e1e6 WIP 2015-09-23 09:40:46 +00:00
Miguel Sofer 001513fa18 micro-opt of hash lookups found by drh 2015-09-22 20:57:58 +00:00
dgp 2b9d31917d Reboot the bug fix. 2015-09-22 19:12:46 +00:00
dgp cdf813e288 merge 8.5 2015-09-22 18:24:03 +00:00
jan.nijtmans 9b08e4775f Decorate Tcl_Panic and Tcl_PanicVA with the noreturn option, alowing further optimizations by the C-compiler. 2015-09-22 15:24:11 +00:00
jan.nijtmans e014381903 Eliminate compiler warnings for MSVC 2015-09-22 11:32:11 +00:00
jan.nijtmans 5420a19e5c merge trunk 2015-09-22 08:20:03 +00:00
jan.nijtmans ddc625f2fe merge trunk 2015-09-22 08:06:16 +00:00
dgp 256865fe12 [187d7f499b] Sync the regexp engine to the Postgres version. 2015-09-21 19:25:20 +00:00
dgp 4669ea6d0c [1115587][0e0e150e49] Major fix for regexp handling of quantified backrefs.
Contributed by Tom Lane from the Postgres project.
2015-09-21 19:04:40 +00:00
dgp 87744f43c9 [d7ea9f985][a3c3508599] Internal regexp fixes that cleanup and streamline. 2015-09-21 18:50:23 +00:00
dgp a6f9ef29ae [d7ea9f985][a3c3508599] Internal regexp fixes that cleanup and streamline. 2015-09-21 18:22:46 +00:00
dgp d32ca76ec2 [a3c3508599] Fix typo that reversed test sense in prior fix for [3610026]. 2015-09-21 17:29:22 +00:00
dgp 0371108cbf [d7ea9f9853] Contributed patch from tgl with Postgres. 2015-09-21 17:14:52 +00:00
jan.nijtmans 842b15b839 fixed bug in zipfs error handling (backported from androwish) 2015-09-17 11:47:04 +00:00
jan.nijtmans b29f3e80a5 Fix for [5d170b5ca5] now available for widespread testing (incl. HPUX and OSX) 2015-09-07 08:35:42 +00:00
jan.nijtmans 05956b6b36 Merge trunk.
"paranoia" patch for the notifier, making sure that thread local data from invalid threads are never accessed by the forked main thread.
2015-09-05 20:10:27 +00:00
jan.nijtmans 1ee459aa14 Document that multi-threading is on by default since 8.6 2015-09-04 12:23:18 +00:00
jan.nijtmans 9f4810e640 Remove unnecessary end-of-line spacing (preparing for some further documentation updates) 2015-09-04 07:23:25 +00:00
jan.nijtmans 85699b47e7 In StartNotifierThread() don't lock mutex if thread is already started.
Fix panic message if thread cannot be started. 
Remove asserts used for debugging.
2015-09-03 09:39:43 +00:00
jan.nijtmans 0e03c742fa nonportable -> nonPortable 2015-09-02 13:19:47 +00:00
jan.nijtmans 4c98b8717b Fix the Cygwin notifier, doing the initialization of the thread-local variables exactly the same as the Unix notifier. 2015-09-02 11:54:58 +00:00
dgp 2841bb1300 merge 8.5 2015-09-02 11:06:01 +00:00
jan.nijtmans 4792d8fa00 Merge trunk.
Gustaf's latest and greatest fix.
2015-09-02 09:02:53 +00:00
jan.nijtmans 4506b4536b Merge trunk 2015-09-02 07:16:50 +00:00
jan.nijtmans d9762826b9 Various Unicode handling enhancements, when building with TCL_UTF_MAX > 3, inspired by androwish. No effect if TCL_UTF_MAX=3 (which is the default) 2015-09-01 18:54:58 +00:00
jan.nijtmans 932409d7aa Whitespace reduction in Tcl scripts. No functional change. 2015-09-01 15:15:46 +00:00
jan.nijtmans dbe627594e Dependancies from androwish upstream 2015-08-31 17:30:01 +00:00
jan.nijtmans b13ad88718 Merge trunk.
Add Gustaf's latest fix for unit-tests.
2015-08-31 10:41:22 +00:00
jan.nijtmans 130fe11f2b Merge trunk, but remove experimental tip-389-impl merge. 2015-08-31 10:22:29 +00:00
jan.nijtmans cdee0fcd74 Some Unicode encoding fixes, only having effect if TCL_UTF_MAX > 4. Backported from androwish 2015-08-31 10:18:31 +00:00
dkf b3892c4018 [7703ff1082] Improved wording. 2015-08-30 20:21:46 +00:00
dkf a3c3dc2581 [7703ff1082] Improved wording. 2015-08-30 20:20:09 +00:00
jan.nijtmans 3d8fa193f4 Completing [00189c4afc]: Allow semi-static UCRT build on Windows with VC 14.0. Now for the configure/makefile build. 2015-08-28 10:57:46 +00:00
jan.nijtmans 6dfc99d7f2 Completing [00189c4afc]: Allow semi-static UCRT build on Windows with VC 14.0. Now for the configure/makefile build. 2015-08-28 10:23:30 +00:00
jan.nijtmans 1439f39555 Fix [7703ff1082]: extra argument ?pattern? of parray is not documented 2015-08-27 14:53:11 +00:00
jan.nijtmans cc771f1b47 Fix [7703ff1082]: extra argument ?pattern? of parray is not documented 2015-08-27 14:49:06 +00:00
dgp 62addcfa82 merge 8.5 2015-08-27 11:48:03 +00:00
jan.nijtmans 6e58473427 merge trunk 2015-08-25 14:07:11 +00:00
jan.nijtmans 570eb6b10d Fix [0df7a1ec2674a76a]: unix/tclUnixFile.c: return value of call to TclpGetCwd in TclpFindExecutable is not checked, variable cwd is used uninitialized. 2015-08-25 11:35:01 +00:00
jan.nijtmans f08cbe00fd Fix [0df7a1ec2674a76a]: unix/tclUnixFile.c: return value of call to TclpGetCwd in TclpFindExecutable is not checked, variable cwd is used uninitialized. 2015-08-25 11:29:58 +00:00
jan.nijtmans 63ba958fe4 Removed "ucrt" as configureable option: If building with VC2014, it's the recommended way to build Tcl. 2015-08-25 10:01:51 +00:00
jan.nijtmans 2974c8e22c Removed "ucrt" as configureable option: If building with VC2014, it's the recommended way to build Tcl. 2015-08-25 09:39:16 +00:00
jan.nijtmans 3bce1ab6f2 Merge tip-389-impl (experimental) 2015-08-24 19:39:40 +00:00
jan.nijtmans fe773c0a46 merge trunk 2015-08-24 19:35:08 +00:00
jan.nijtmans ecc90e3787 one more.... 2015-08-24 08:01:23 +00:00
jan.nijtmans 6e0d4b6761 Remove unused internal stub entries as well. 2015-08-24 07:58:42 +00:00
jan.nijtmans 53ad2ab17d Merge trunk.
Throw away TclpGetDate, TclpLocaltime and TclpGmtime and all related dead code. It makes the androwish binary (somewhat) smaller.
2015-08-21 13:29:06 +00:00
jan.nijtmans 2da34cb738 Eliminate (harmless) compiler warning. No functional change. 2015-08-21 11:21:41 +00:00
jan.nijtmans 9f8346d54f Eliminate some (harmless) compiler warnings. No functional change. 2015-08-21 10:40:48 +00:00
jan.nijtmans bd0d616070 Fix [00189c4afcb9e2586301d711f71383e48817a72d|00189c4afc]: Allow semi-static UCRT build on Windows with VC 14.0 2015-08-19 15:25:35 +00:00
jan.nijtmans 5dc66dd0c9 Fix [00189c4afcb9e2586301d711f71383e48817a72d|00189c4afc]: Allow semi-static UCRT build on Windows with VC 14.0 2015-08-19 15:23:25 +00:00
jan.nijtmans 023624c3c9 merge trunk.
Remove now unused internal functions.
2015-08-19 11:26:52 +00:00
jan.nijtmans a2a59dfb75 merge trunk 2015-08-19 09:06:22 +00:00
dkf da2329ba8b [465213d171] Documentation correction for Tcl_NewMethod. 2015-08-18 13:27:46 +00:00
dkf 6916d195ce [2c509f6291] Minor documentation correction from Peter Lewerin. 2015-08-18 12:50:08 +00:00
dkf c892bc1f1d [d06b029d9d] next(n) documentation examples correction, from Peter Lewerin. 2015-08-18 12:47:01 +00:00
dkf 2e4ba03817 [7a87a9bc5b] Eliminate invalid write, found by Rolf Ade using Valgrind. 2015-08-18 07:01:41 +00:00
jan.nijtmans b8a93e8423 remove superfluous fprintf to stderr. 2015-08-17 20:35:15 +00:00
jan.nijtmans 5f6beb1bd2 Merge trunk.
More notifier code cleanup.
2015-08-17 19:39:16 +00:00
dkf 341ea00aaa [818a1a51e4] Apply fixes from Andreas Seltenreich (reported to us by Tom Lane) for handling low memory situations. Should not be reachable in Tcl due to ckalloc() panic policy. 2015-08-17 18:23:20 +00:00
dkf c6028b1641 [818a1a51e4] Apply fixes from Andreas Seltenreich (reported to us by Tom Lane) for handling low memory situations. Should not be reachable in Tcl due to ckalloc() panic policy. 2015-08-17 18:22:18 +00:00
dkf cdcc22a92d Proposed fix for invalid write, found by valgrind. 2015-08-17 18:01:16 +00:00
jan.nijtmans 85469aaecf Merge trunk.
Gustaf's latest Unix Notifier improvements, now fixed to work with Cygwin and single-threaded as well.
2015-08-17 15:21:46 +00:00
jan.nijtmans 829af34165 merge trunk. Put back some (actually unused) Tclp*UnixTime functions. 2015-08-17 14:48:56 +00:00
dkf 3ad3a0eae3 [e424e31ac7]: Corrected documentation of [regexp -indices] to mention all affected arguments. 2015-08-17 12:35:27 +00:00
dgp 57e43137bd New test attempting to demo Bug [e0a7b3e5f8]. Doesn't work yet. 2015-08-13 19:28:26 +00:00
dgp ed005a749a Disable the filtering of ReflectWatch so that every UpdateInterest() call
flows through to become a [driver watch] evaluation.  This makes new test
io-53.19 pass.
It also makes a collection of 10 test in ioCmd.test start failing, all of
which are recording detailed reflected channel driver command evaluation.
The now unfiltered [driver watch] change this record without (at least
apparently) changing any behavior.  Need review.
2015-08-13 17:02:04 +00:00
dgp 1cc03c884b A bit of code safety, and then a test demonstrating next issue. 2015-08-13 16:45:03 +00:00
dgp cababb3290 Adjustments to failing tests to account for changed [chan postevent]. 2015-08-12 17:49:42 +00:00
dgp ec3c0c79fb New test io-53.18 adapted from demo script in [32ae34e63a]. This test
segfaults without changes to source code.  This checkin also contains
a revised implementationf of [chan postevent] that stops calling
Tcl_NotifyChannel() directly, and queues an event to do it instead.
This stops the segfault, but causes tests iocmd-31.[67] to fail.
Need advice on whether that matters.
2015-08-12 16:37:28 +00:00
venkat 68d8dd01a2 Merge tzdata2015f 2015-08-12 05:08:06 +00:00
venkat 656a0f78c7 Merge tzdata2015f 2015-08-12 05:07:24 +00:00
venkat b50f18b840 Upgrade to tzdata2015f from IETF. 2015-08-12 05:06:26 +00:00
dgp 32a9dde838 Add the critical missing UpdateInterest() call at the exit of DoRead().
(Compare with same approach in DoReadChars()).  This involves removing
some other calls that are now replaced by the new one.
Also marked several UpdateInterest() calls throughout tclIO.c with comments
raising the suspicion that they serve no function.
2015-08-10 19:44:56 +00:00
jan.nijtmans 45ef27688f merge trunk 2015-08-06 04:34:48 +00:00
jan.nijtmans 1579eae899 merge trunk 2015-08-06 04:33:49 +00:00
jan.nijtmans faa471576e Fix [6f74ac47278f437a]: No man link to Tcl_UtfNcasecmp() during install on unix 2015-08-06 04:25:50 +00:00
jan.nijtmans de133cb36a Fix [6f74ac47278f437a]: No man link to Tcl_UtfNcasecmp() during install on unix 2015-08-06 04:24:44 +00:00
jan.nijtmans c24688ad4f Gustaf Neumann's experimental Unix notifier improvements. 2015-08-06 03:43:43 +00:00
Miguel Sofer d1ab32cd40 remove potential crash detected by Coverity (it is a should-never-happen thing) 2015-08-05 19:30:06 +00:00
Miguel Sofer 70c0fd83e8 mark function return as unused, to avoid confusing Coverity 2015-08-05 14:44:19 +00:00
jan.nijtmans 1a0d8884f2 merge trunk 2015-08-04 17:34:47 +00:00
dkf ff00a132ab merge mark 2015-08-03 09:57:12 +00:00
dkf 7e228aa961 Fix problems with break and continue in for-step clauses, triggered by reporting
of Coverity CID 1251203. Some of these were originally bugs in Tcl 8.0.
2015-08-03 07:21:29 +00:00
dkf 4e411a89fe Fix the documentation comment. 2015-08-03 07:18:13 +00:00
dkf 9d7f20adc5 Backport the fixes to handling of continue in for-step clauses. 2015-08-03 07:17:27 +00:00
dkf 93b515b360 And another problem with continue in for-step clauses, this time a problem in how TEBC handled an edge case in the semantics. 2015-08-02 16:17:00 +00:00
dkf 034f00bf1b Fix more problems with break and continue in for-step clauses. 2015-08-02 12:22:02 +00:00
dkf 29603179f4 Fix Coverity CID 1251203: break vs continue in for-step clause 2015-08-01 19:37:04 +00:00
Miguel Sofer 33a7feeefd explicitly ignore Tcl_PushCallFrame and TclPushStackFrame return value - it is always TCL_OK. Inconsistency found by coverity (CID 1251197) 2015-08-01 19:00:39 +00:00
Miguel Sofer f795c9e131 fix off-by-one possible buffer overrun when looking for encodings; found by coverity 2015-07-31 22:05:20 +00:00
Miguel Sofer 743ef38cdc fix typo found by Coverity; no effect on "most" platforms (is there anyone where it would matter?) 2015-07-31 00:01:52 +00:00
Miguel Sofer b62b6bd490 remove unnecessary checks found by coverity 2015-07-30 22:56:57 +00:00
Miguel Sofer 90beed4f41 remove self-assignment - found by Coverity 2015-07-30 18:57:30 +00:00
sebres f4fe4153ee Fix bug [f00009f7ce]: memory (object) leaks in TclNativeCreateNativeRep for windows platform:
missing decrement of refCount, because of confusing differently behavior Tcl_FSGetTranslatedPath vs Tcl_FSGetNormalizedPath.
2015-07-30 18:22:27 +00:00
Miguel Sofer 0b6ed354d1 add comment to flag Tcl_Panic as no-return for Coverity Scan static analyzer 2015-07-30 18:10:39 +00:00
sebres a6c191c2ea Fix bug [f00009f7ce]: memory (object) leaks in TclNativeCreateNativeRep for windows platform (erroneous Tcl_IncrRefCount removed) 2015-07-30 13:02:49 +00:00
dgp 3842344be7 merge trunk 2015-07-29 14:56:50 +00:00
dgp 7dfee7792b [3e7eca8c8c] Prevent overflow in size values passed to allocators. 2015-07-29 14:56:20 +00:00
dgp a16827f77e [3e7eca8c8c] Prevent overflow in size values passed to allocators. 2015-07-29 14:54:13 +00:00
dgp e91db44e66 [3e7eca8c8c] Prevent overflow in the size value passed to ckrealloc(). 2015-07-29 10:03:46 +00:00
dgp aa7b8f6ccb [3e7eca8c8c] Prevent overflow in the size value passed to ckrealloc(). 2015-07-29 03:06:30 +00:00
jan.nijtmans 7578a2c2bd Fix bug [57945b574a6df0332efc4ac96b066f7c347b28f7|57945b574a]: lock in forking process under heavy multithreading. Thanks to Joe Mistachkin for the implementation of the fix, and Gustaf Neumann for the original report and testing the fix. 2015-07-23 17:09:58 +00:00
jan.nijtmans 7d2d8c6e11 Fix bug [57945b574a6df0332efc4ac96b066f7c347b28f7|57945b574a]: lock in forking process under heavy multithreading. Thanks to Joe Mistachkin for the implementation of the fix, and Gustaf Neumann for the original report and testing the fix. 2015-07-23 16:53:42 +00:00
dgp fff7447683 [a3309d01db] Plug memleak in compiled [unset a($i)]. 2015-07-18 05:52:57 +00:00
dgp d17930c875 Add the missing cleanup bits in INST_UNSET_ARRAY. 2015-07-18 05:27:00 +00:00
dgp dfd5e62014 merge trunk 2015-07-18 02:39:02 +00:00
dgp c4bd26e054 Fix failing test 2015-07-18 01:45:06 +00:00
dgp 5bb79143c1 merge trunk 2015-07-17 21:22:22 +00:00
dgp 67b1d52de2 Test for original meaning of [unset -nocomplain --]. FAILS! 2015-07-17 21:17:48 +00:00
dgp dd3c1d71f7 Test for original meaning of [unset -nocomplain --]. 2015-07-17 21:15:26 +00:00
dgp 324a884128 [a3309d01db] Test the demonstrates leak in branch off checkin that starts it. 2015-07-17 19:33:08 +00:00
jan.nijtmans 6fcdce9c74 merge trunk 2015-07-16 05:31:51 +00:00
dgp 90fbc0fe78 [9bad630c31] Prevent read outside of buffer bounds. 2015-07-15 17:59:13 +00:00
dgp db73017a4a [9bad630c31] Prevent read outside of buffer bounds. 2015-07-15 17:57:34 +00:00
dgp 1a4e6b5d92 [b1534b438b] Prevent read outside buffer boundaries. 2015-07-15 17:20:19 +00:00
dgp 60a6f1779d [b1534b438b] Prevent read outside buffer boundaries. 2015-07-15 17:17:03 +00:00
dgp bbb66ad482 merge trunk 2015-07-15 15:34:43 +00:00
jan.nijtmans ac785323be merge trunk. Undo unnecessary changes in tclEncoding.c, making it equal to trunk again (thanks to Christian Werner for testing this on androidwish). 2015-07-15 14:52:25 +00:00
jan.nijtmans 7b49d1632e Increase some counter sizes related to filesystem epoch from int to size_t. And prevent them ever becoming 0 due to an overflow. (backported with variation from androwish) 2015-07-15 14:47:32 +00:00
jan.nijtmans a7f9c92001 merge trunk 2015-07-15 11:17:12 +00:00
jan.nijtmans d68207f7ca Remove unused local variables. Now unix/tclUnixTime.c is idential in "androwish" compared to "novem". (Yes, those functions are planned to be removed in Tcl 9.0!) 2015-07-15 09:31:11 +00:00
jan.nijtmans ddc615491d Merge trunk.
Remove TclpLocaltime, TclpGmtime and TclpGetDate completely, in order to prove that those functions are not used anywhere within Tcl any more. They are only retained for the internal stub entries, which might be used by extensions, but androwish doesn't use that.
2015-07-15 09:22:01 +00:00
jan.nijtmans 5500c15d8a Eliminate the definition of L_tmpnam. It isn't used anywhere within Tcl any more. (backported from androwish) 2015-07-15 08:36:46 +00:00
jan.nijtmans b1031c0d07 merge trunk 2015-07-15 07:52:41 +00:00
andy 1b5d2f150d Spell out [info exists] in example code for [exit] command. 2015-07-14 21:38:05 +00:00
jan.nijtmans cdba31b9d5 merge trunk 2015-07-13 09:41:02 +00:00
jan.nijtmans 593c09234c merge trunk 2015-07-13 09:01:44 +00:00
dkf 444cb185b8 Implement TIP 436: Improve TclOO isa Introspection 2015-07-10 12:41:57 +00:00
dkf 22932eb228 Added tests. 2015-07-10 12:40:49 +00:00
oehhar 2ee3ddac8a Documentation: source ignores BOM for unicode files 2015-07-07 14:20:26 +00:00
oehhar 8037d27915 Documentation: source ignores BOM for unicode files 2015-07-07 14:16:07 +00:00
dgp 7e3e434235 merge trunk 2015-07-05 17:45:27 +00:00
dgp 4ce2c3e6e7 [a0ece9d6d4] The cmd field of a CmdFrame when non-NULL must point within the
string of the corresponding codePtr->source.
2015-07-05 16:52:27 +00:00
dgp b00e732483 Plug leak of two mp_ints. 2015-07-02 13:46:56 +00:00
jan.nijtmans 83da0d6374 merge trunk 2015-07-02 13:18:19 +00:00
jan.nijtmans 6295fccc15 merge trunk 2015-07-02 13:17:14 +00:00
dgp 20dafdc09e Revert refcount changes that were not cosmetic.
Changing equality testing to inequality testing does more than make code
prettier or clearer.  It makes it less strict, and thus more tolerant of
other bugs elsewhere.  Such changes deserve separate consideration at least,
not breezy entry in an otherwise "code cleanup" commit.
2015-07-02 12:54:57 +00:00
dgp 9aa3e85104 Revert some refcount changes on I/O structs.
These are refcounts on structs, not Tcl_Obj's.  Their scheme doesn't suffer
the same difficulties and histories as Tcl_Obj's, and they need not copy
every detail, appropriate or not, from Tcl_Obj refcount management.
The "significant value" -- as dkf puts it -- for the struct refcounting scheme
is 0 not 1.
2015-07-02 12:29:43 +00:00
jan.nijtmans bb504b06b4 merge trunk 2015-07-02 12:19:15 +00:00
jan.nijtmans fb6b7a8d8d Remove unnecessary end-of-line spacing in compat/*.c 2015-07-02 12:17:26 +00:00
jan.nijtmans 55717aeaea merge trunk 2015-07-02 12:10:35 +00:00
jan.nijtmans e886aae69e merge trunk 2015-07-02 09:18:59 +00:00
jan.nijtmans 59b6753d29 merge trunk 2015-07-02 08:42:03 +00:00
jan.nijtmans 4cd9155ae9 Another round of refCount consistancy improvements. 2015-07-02 08:17:50 +00:00
Miguel Sofer 0918bf8c7b remove code that was ifdef'ed out for ages (ENABLE_NS_VARNAME_CACHING), has zero hope of being revived and got out of sync anyway 2015-07-02 03:15:21 +00:00
jan.nijtmans fec1116ba7 Don't use internalRep.otherValuePtr any more, twoPtrValue.ptr1 is always a better idea.
A few more consistancies in refcount management.
2015-07-01 13:12:57 +00:00
dkf 261a4a6282 Say what is meant more clearly, put syntax checks before semantic checks. 2015-07-01 09:58:42 +00:00
dkf bbb80087ae Implementation of TIP #436: Improve TclOO isa Introspection 2015-07-01 09:45:04 +00:00
jan.nijtmans 73484694b5 Consistancy in refcount management. 2015-06-30 21:41:18 +00:00
dkf 6af49e65ad Correct handling of dictionaries in the background error processing code. 2015-06-30 14:39:56 +00:00
dkf 12cc9a424d merge head 2015-06-30 14:39:17 +00:00
dkf f63cfcaea3 Correct handling of dictionaries in the background error processing code. 2015-06-30 14:36:24 +00:00
oehhar 502287c9dd "mcpackagelocale present" is more elegant 2015-06-30 14:32:12 +00:00
jan.nijtmans 63aa951254 Use twoPtrValue in stead of ptrAndLongRep for implementation of some internal Obj types. On most platforms this doesn't make a difference,
as (void *) and (long) generially have the same size. The only exception where it makes a difference is win64, as we can now store 64 bits in this field in stead of only 32 bits, exactly what the processor is optimized for.
2015-06-30 08:10:15 +00:00
oehhar 0698861f80 [TIP 412] msgcat dynamic locale change and package private locale (msgcat 1.6.0) 2015-06-29 21:44:12 +00:00
oehhar 352740916d Added tests for mcforgetpackage, mcpackagelocale and mcpackageconfig 2015-06-29 21:26:24 +00:00
venkat 2e9879b29c Merge tzdata2015e from ietf.org 2015-06-28 01:55:42 +00:00
venkat 987b08480c Merge tzdata2015e from ietf.org 2015-06-28 01:55:06 +00:00
venkat b87531a583 Summary: Update to tzdata2015e from ietf.org 2015-06-28 01:54:06 +00:00
oehhar 52f920ba57 Tests for mcexists and mcloadedlocales 2015-06-26 15:16:34 +00:00
oehhar 14476f18e0 Manpage, callback fail calls bgerror, clean catalog on packagelocale unset 2015-06-26 13:41:31 +00:00
jan.nijtmans 6b51c1fca1 merge trunk 2015-06-25 08:08:32 +00:00
jan.nijtmans 2b81ec85d4 revert unintended change of .settings/org.eclipse.core.resources.prefs in previous commit 2015-06-25 08:05:18 +00:00
jan.nijtmans c56e67115f Fix bug in "make dist" when system-encoding is UTF-8: eolFix will then translate some windows-specific files to UTF-8 too.
Solution: commit those files with CRLF line-ending, which eliminates the need for eolFix altgether.
See als: [495120] for the reason why eolFix was introduced in the first place. No longer needed with fossil.
2015-06-25 08:02:17 +00:00
jan.nijtmans 14f9ede961 Fix bug in "make dist" when system-encoding is UTF-8: eolFix will then translate some windows-specific files to UTF-8 too.
Solution: commit those files with CRLF line-ending, which eliminates the need for eolFix altgether.
See als: [495120] for the reason why eolFix was introduced in the first place. No longer needed with fossil.
2015-06-25 07:52:36 +00:00
jan.nijtmans 2410a9036f merge trunk 2015-06-24 14:45:45 +00:00
jan.nijtmans 50ccb92ce7 Tcl_GetStringFromObj(..., NULL) -> Tcl_GetString(...). Use size_t in stead of int for more internal variables. 2015-06-24 14:28:47 +00:00
dgp d150ddf591 Silence compiler warning. 2015-06-24 13:56:36 +00:00
dgp 3ea3c1f2f9 Make sure that an input lying precisely 1/2 ULP between two floating point values is rounded to even. 2015-06-24 13:55:46 +00:00
jan.nijtmans 54bb65abf5 merge trunk 2015-06-23 22:22:39 +00:00
jan.nijtmans 71ef3ba082 Registry extension 1.3.0 -> 1.3.1: SendMessageTimeoutA -> SendMessageTimeout, so make sure only win32 UNICODE API is used. 2015-06-23 21:47:41 +00:00
jan.nijtmans 573b39572e merge trunk 2015-06-23 20:42:23 +00:00
jan.nijtmans 51adf20eaf Member field which should not have been const, because it is dynamically allocated. Some end-of-line spacing in header files. 2015-06-23 20:32:33 +00:00
jan.nijtmans fde157fe11 Member field which should not have been CONST, because it is dynamically allocated 2015-06-23 19:58:38 +00:00
jan.nijtmans c793ae92e4 If the file system changes when "cwd" changes, force a filesystem refresh on path objects. Needed for AndroWish/TclKit (???) in obscure situations, harmless on systems which only have a single native filesystem. 2015-06-23 13:04:09 +00:00
oehhar 2972e0894d Merge trunk 2015-06-22 12:40:27 +00:00
jan.nijtmans adceea62b6 Branch for androwish, as help to keep track on which android-specific changes could be included into the core without harm. 2015-06-21 22:29:11 +00:00
Kevin B Kenny 9c52f7a98a Make sure that an input lying precisely 1/2 ULP between two floating point values is rounded to even. 2015-06-20 20:44:17 +00:00
dgp 0985259acd Remove lines of code made obsolete by earlier changes. 2015-06-19 15:35:14 +00:00
jan.nijtmans 5821708a49 Fix win compile 2015-06-18 20:58:00 +00:00
jan.nijtmans 0ea82c2d43 merge novem 2015-06-18 19:58:45 +00:00
jan.nijtmans 7679c0513c merge trunk 2015-06-18 19:35:43 +00:00
dgp 0132d11834 [a4cb3f06c4] Fix edge case handling in lreplace. Many more tests. 2015-06-18 17:33:52 +00:00
dgp ad6cba5a8e From aspect, several edge case coverage tests. 2015-06-18 17:26:59 +00:00
jan.nijtmans 348f13ad57 Merge trunk. Upgrade to Unicode 8.0 2015-06-18 13:09:52 +00:00
jan.nijtmans f43007cdd8 Upgrade all internal Unicode tables from Unicode 7.0 to Unicode 8.0 2015-06-18 12:54:30 +00:00
jan.nijtmans e6c567a325 Upgrade all internal Unicode tables from Unicode 7.0 to Unicode 8.0 2015-06-18 12:24:53 +00:00
Joe Mistachkin 7ba021af61 Rename the new API to TclMutexUnlockAndFinalize as it is not platform-specific. 2015-06-17 20:32:01 +00:00
jan.nijtmans d4bb7bdf65 Change Tcl_MutexUnlockAndFinalize() to internal function TclpMutexUnlockAndFinalize(). This does not require a TIP, and still should fix the reported bug. 2015-06-16 15:24:51 +00:00
jan.nijtmans 5fc6bbc782 Fix [e770d92d76]: Add support for higher baud rates in Tcl 2015-06-16 08:41:38 +00:00
jan.nijtmans d948ee6daa Fix [e770d92d76]: Add support for higher baud rates in Tcl 2015-06-16 07:39:37 +00:00
aspect e008d75c19 lreplace: more tests, doc improvement 2015-06-16 03:33:22 +00:00
aspect ea9f9ac81e fix for a4cb3f06c4fe - bug introduced in 32b61592465 2015-06-16 00:41:39 +00:00
Joe Mistachkin e99979bfcf Plug memory leaks in the Tcl_ZlibInflate() error handling code. Fix for ticket [478c446889]. 2015-06-11 02:47:41 +00:00
hypnotoad 2d6d821ea4 Patch to add support for higher baud rates under Unix Ticket [e770d92d76]] 2015-06-10 21:53:47 +00:00
Joe Mistachkin 5c4acfb73f The unit for usleep() is microseconds, not milliseconds. 2015-06-08 20:56:50 +00:00
dgp 4c5f334c06 Stop documentation lie about command rename traces and comment lie about
what's done with them in TclOO.
2015-06-08 17:19:09 +00:00
dgp 51bbc67659 Stop telling lie about command delete traces. 2015-06-08 17:17:14 +00:00
Joe Mistachkin 0f3896176d Merge thread test typo fixes from trunk. 2015-06-05 19:59:59 +00:00
Joe Mistachkin 2e30712093 Fix typo in three thread tests. 2015-06-05 19:58:42 +00:00
Joe Mistachkin 9cfa94b1da Add stress test. 2015-06-05 19:56:12 +00:00
Joe Mistachkin 810baa10b8 Merge updates from trunk. 2015-06-04 20:49:11 +00:00
dgp 6ae60815c7 merge trunk 2015-06-04 11:49:18 +00:00
dgp 6f63d23863 [268b23df11] Revised patch to create phony source string when the
original script does not actually contain the command being invoked.
(Example: the tcl::mathfunc::* command invoked via [expr] interpretation)
2015-06-03 19:08:15 +00:00
dgp aef7e0d6d9 Put the ellipsis inside, not outside, the close quote. 2015-06-03 17:40:10 +00:00
dgp 94d9bfa884 [268b23df11] When GetSrcInfoForPc() returns NULL, make sure it also sets
the length to a non-positive value so nothing tries to read offsets from
a NULL pointer.
2015-06-03 12:26:38 +00:00
oehhar 6f959222be Make all msgcat tests pass 2015-06-01 15:16:58 +00:00
oehhar 8f43773d55 clock.tcl modified that all clock tests pass 2015-05-31 19:03:56 +00:00
oehhar b4cd8e5d9c merge trunk 2015-05-31 16:20:06 +00:00
dgp 15c03f09c9 merge trunk 2015-05-28 12:28:48 +00:00
Joe Mistachkin 7f5f2ddc7f Make sure the necessary mutexes are in a well-known state across calls to fork(). 2015-05-28 00:53:33 +00:00
Joe Mistachkin d249a8af5d Fix typo in previous check-in. 2015-05-27 22:34:53 +00:00
Joe Mistachkin e8d057ad67 Make sure the master and mutex locks are in a well-known state across the fork() call. 2015-05-27 22:29:25 +00:00
jan.nijtmans 8a16ff2b7f Merge trunk 2015-05-27 21:11:35 +00:00
andreask 450b7aafd0 Make tweak to the mem-debug tracking official. It is now again possible to use regular packages with a mem-debug core without inciting a panic. 2015-05-27 18:35:46 +00:00
andreask a0d647ab06 Make tweak to the mem-debug tracking official. It is now again possible to use regular packages with a mem-debug core without inciting a panic. 2015-05-27 18:25:38 +00:00
dkf 8c32ef71da Added missing marker for incompatibility. 2015-05-26 10:16:24 +00:00
jan.nijtmans 756d989440 Remove useless code, trying to sync win32 environment variables with cygwin's. cygwin1.dll is responsible for doing that. Taken over from cygwin's tcl fork. 2015-05-25 20:23:09 +00:00
jan.nijtmans d93aaadc5e Remove useless code, trying to sync win32 environment variables with cygwin's. cygwin1.dll is responsible for doing that. Taken over from cygwin's tcl fork. 2015-05-25 19:15:25 +00:00
jan.nijtmans 6cbae6bbd1 Merge trunk 2015-05-25 13:03:07 +00:00
Joe Mistachkin 17420ef9f0 Minor compilation issue fix, make sure variable declaration (via macro) is first. 2015-05-22 23:26:29 +00:00
andreask 907aebaab8 Moved Tcl_Obj* objThreadMap release tracking to a location where regular packages will call through, enabling their full tracking by the core, and thus avoiding the "expected to create new entry for object map" panic seen otherwise. 2015-05-22 20:21:48 +00:00
Joe Mistachkin 967856b8f8 Additional mutex locking/unlocking during fork() to keep things synchronized. 2015-05-21 17:58:49 +00:00
dgp 2ce1ce01c5 Missed a bit 2015-05-20 15:15:46 +00:00
dgp babd0b88a0 [29044ba23f] Remove RANLIB as part of library installation. At best it's
redundant to the RANLIB already done as part of library build.  At worst, it
conflicts with needs of cross-compiling.  Thanks Erik Leunissen.
2015-05-20 15:12:50 +00:00
dgp 0f54d7701d Don't change autoconf version by accident. 2015-05-20 13:45:33 +00:00
dgp 9480585347 merge trunk 2015-05-20 13:42:03 +00:00
dgp bd81f35273 merge trunk 2015-05-20 13:37:21 +00:00
dkf deaa520c80 Simplify code generation for a list of literals. Generates slightly simpler bytecode too. 2015-05-19 20:34:10 +00:00
dkf acdb6bc384 Tidier version. 2015-05-19 20:29:47 +00:00
dgp 6be68f173f Don't cause string rep generation in [list <lit> <lit> ... <lit>] bytecode.
Candidate for merge to trunk to simplify bytecode.
2015-05-19 19:22:48 +00:00
dkf 0ae5b5b3c1 regenerate configure 2015-05-18 20:41:46 +00:00
Joe Mistachkin 0dd03dfef9 First attempt at implementing the necessary auto-magic for usleep. 2015-05-18 20:33:56 +00:00
Joe Mistachkin 2e3d1fac48 Adjust tweaks from the previous check-in to prepare for configure detection of usleep(). 2015-05-18 18:23:29 +00:00
dkf fdf990faf5 [11250a236d] Made the documentation of non-greediness overrides more obvious. 2015-05-18 08:20:43 +00:00
dkf 58f3361635 [c11a51c482] Stop race condition with -accept config option, and allow overriding of it via -headers option. 2015-05-18 07:51:54 +00:00
Joe Mistachkin 282b159f3b Temporary tweaks to allow Thread package tests to pass on Unix. 2015-05-17 23:45:53 +00:00
Joe Mistachkin e403d82b18 This should completely fix the race conditions at the cost of more complexity. Also, on Unix, a more reliable means than Tcl_Sleep() of sleeping for a short time is needed. 2015-05-17 22:13:39 +00:00
Joe Mistachkin c489e47329 Update header file with the TIP number. 2015-05-17 20:13:59 +00:00
Joe Mistachkin a32cc9b49b Fix deadlock. 2015-05-17 20:10:47 +00:00
Joe Mistachkin e3a528bc44 Merge updates from trunk. 2015-05-17 19:49:44 +00:00
Joe Mistachkin 12d28d084d Fix typo in the previous check-in. 2015-05-17 19:46:04 +00:00
Joe Mistachkin fc49271c0a Draft fix for a potential race condition in the new Tcl_MutexUnlockAndFinalize API. Not yet tested. 2015-05-17 18:03:15 +00:00
dkf 8c1c07d4bf [ad6696285c] Correction of description of filter behaviour with 'unknown'. 2015-05-17 12:56:06 +00:00
dkf 4240cb00f0 [ad6696285c] Demonstrate that filters are not called for destructors. 2015-05-17 12:06:31 +00:00
Joe Mistachkin 1a30606518 Reword and clarify the doc changes from the previous check-in. 2015-05-16 06:59:27 +00:00
Joe Mistachkin 99cc729bd2 First draft of the necessary doc changes. 2015-05-16 06:49:00 +00:00
dkf 9d64916f18 [0f42ff7871] Remove unintentional difference between interpreted and compiled [next]. 2015-05-15 14:40:00 +00:00
dkf c9e70a3901 [9dd1bd7a74] Ensure that [self] returns a sensible value in a destructor even when construction didn't complete. 2015-05-15 13:54:52 +00:00
dgp c582b68ddf merge trunk 2015-05-14 11:20:17 +00:00
dgp c11a7a6b08 Bump to http 2.8.9 2015-05-14 11:19:27 +00:00
dkf 6135265f5c [6a71dbe6ec] Ensure that compression errors log correctly. 2015-05-14 08:23:52 +00:00
dkf 1913208e18 [b9d0434667] Prefer the gzip encoding for transfers. It's less efficient, but
it is far more interoperable and that's a more important metric.
2015-05-14 08:05:37 +00:00
dgp 73deb43f4f Added contributed tests from aspect 2015-05-12 15:00:16 +00:00
dgp 205345779a merge trunk 2015-05-12 14:45:48 +00:00
dgp 61b992f9d6 merge trunk 2015-04-30 15:32:00 +00:00
dgp 92ce12cc43 test portability 2015-04-30 15:31:42 +00:00
dgp 1754a9a311 Test portability. 2015-04-30 15:31:17 +00:00
jan.nijtmans 382eea8b75 merge trunk 2015-04-29 21:51:12 +00:00
dgp 91d8b69074 merge mark 2015-04-29 20:35:05 +00:00
dgp d3e04b3a76 Use joinable threads to avoid thread finalization crashes. 2015-04-29 20:34:26 +00:00
dgp 3b743160f6 [894da183c8] Test and fix for regression in flushing blocked channels. 2015-04-29 18:16:36 +00:00
dgp 09d67aff95 [894da183c8] Test and fix for regression in flushing blocked channels. 2015-04-29 18:00:15 +00:00
dgp 227d96bf13 [894da183c8] Fix and test for bug at the point it was introduced. 2015-04-29 16:34:33 +00:00
venkat fd9d40cb5b Merge tzdata2015d from ietf.org 2015-04-29 07:56:01 +00:00
venkat f108505a5b Update to tzdata2015d from ietf.org 2015-04-29 07:54:51 +00:00
dgp 90b9288358 [879a0747be] Repair handling of incomplete multi-byte chars at the ends of input buffers. Also properly reset input encoding flags when cycling through a fleeting EOF condition. 2015-04-24 20:17:12 +00:00
dgp 5ecd3fa2b6 [879a0747be] Repair handling of incomplete multi-byte chars at the ends
of input buffers.  Also properly reset input encoding flags when cycling
through a fleeting EOF condition.
2015-04-24 20:06:27 +00:00
dgp a46cd743dd Fix UtfToUtfProc() to remove the potential to read beyond end of input buffer. 2015-04-24 15:48:56 +00:00
dgp ae445193f4 Fix UtfToUtfProc() to remove the potential to read beyond end of input buffer. 2015-04-24 15:47:58 +00:00
oehhar 459a48dc5c Open linked folder shared on Windows - Patch [19ea026e43] 2015-04-23 12:17:53 +00:00
oehhar 1590eb50c5 Open linked folder shared on Windows - Patch [19ea026e43] 2015-04-23 11:21:41 +00:00
jan.nijtmans c3f11e7741 Fix [8065d178229d8d335eee64d36ada37c4dedf2579|8065d17822]: Duplicate -DNDEBUG in compiler command with --disable-symbols 2015-04-20 10:35:20 +00:00
Miguel Sofer 9f710e45a9 bring in dgp's improvements to zippy 2015-04-17 20:52:12 +00:00
dgp c472223773 Reduce the list walking by keeping lastPtr fields. 2015-04-16 12:27:04 +00:00
dgp 7f030a6b44 Revise the zippy dance that pushes Blocks and Tcl_Objs back the shared pool
so that the overal operation remains a FIFO.  This help preserve cache locality
where it exists.  The price (for now) is a bit more time walking to the end
of free lists.  If this is important, the addition of a lastPtr field could
fix it without difficulty.
2015-04-15 19:57:41 +00:00
jan.nijtmans de7a370d58 Fix [a0a251e4e478977334da51e346cddff8ec3fbf52|a0a251e4e4]: tcl 8.6.4 compilation on windows with msys and VS2013 fails 2015-04-10 09:23:39 +00:00
Joe Mistachkin 63f824a7e9 Add new public Tcl C API to allow a mutex to be unlocked and then finalized atomically. Candidate fix for bug [57945b574a]. 2015-04-09 19:53:39 +00:00
dkf 805cd597f9 Don't warn about warnings that are suppressed correctly now. 2015-04-09 09:27:00 +00:00
dkf 1f2fb4cf5b Squelch otherwise-unavoidable OSX warnings. It's like magic! 2015-04-09 09:20:29 +00:00
Miguel Sofer 3d5869fb4b improve comments for TclMarkTailcall and friends 2015-04-08 19:08:57 +00:00
dgp 6d6afda39d Correction suggested by miguel. Passes test suite and fixes bug demos. 2015-04-08 16:42:33 +00:00
dgp 7fc61f369b Proposed fix. 2015-04-08 14:37:58 +00:00
dkf c6e6569dfe Don't fetch values we don't need. 2015-04-04 11:47:53 +00:00
dgp af3600a6ed merge trunk; purge TCL_HASH_KEY_STORE_HASH customization. That was a
migration crutch to help code get to Tcl 8.4.  It need not survive into 9.0.
2015-03-24 18:37:17 +00:00
dgp bc7e4c5d68 There's no need to constrain the declaration of Tcl_GetMemoryInfo(). 2015-03-24 18:27:09 +00:00
dgp cd70770139 Tcl source code already assumes the <limits.h> file is available.
(See tcl/libtommath/tommath.h .)  So dispose of all the configuration
shenanigans pretending we want to support systems that lack one.
2015-03-24 17:34:05 +00:00
dgp 21e9e3a800 merge trunk 2015-03-24 15:13:17 +00:00
Miguel Sofer 63e0947392 fix comments describing tailcall implementation 2015-03-23 16:05:04 +00:00
Miguel Sofer 4ed03a1f4b fix comments describing tailcall implementation 2015-03-23 13:46:08 +00:00
Miguel Sofer ee626d5909 more comments 2015-03-23 13:43:37 +00:00
Miguel Sofer d4166a6b3a updated, improved tailcall comments 2015-03-23 02:11:30 +00:00
Miguel Sofer e325a4742e branch for ordering and grouping the tailcall related code, and especially clean up the comments 2015-03-23 01:01:30 +00:00
Miguel Sofer 2cc11d4918 completing the fix for bug d87cb182053fd79b3 2015-03-23 00:33:07 +00:00
Miguel Sofer 7dbf5ed0b0 adding a test to reveal a problem with the fix of bug d87cb182053fd79b3 2015-03-21 15:08:35 +00:00
dgp 1292a0d927 [d87cb18205] Let compiled ensembles handle tailcalls properly. 2015-03-21 00:31:29 +00:00
dgp 6003e823bf Remove STRICT directive from public header. It does approximately nothing,
and doesn't belong in generic code.
2015-03-20 19:57:13 +00:00
ashok 50426ba9c5 Ticket [e66e444440]. Modified ReadConsoleBytes to handle Ctrl-C / Ctrl-Break
and not return 0 bytes indicating EOF for those cases.
2015-03-19 10:41:28 +00:00
hypnotoad e448db56ee Checkpointing the core_zip_vfs branch against the lastest release 2015-03-17 01:07:44 +00:00
dgp f399206c21 Upon further review, due the order of #include of headers, we do not have
a history of a #define STRICT active when the #include "windows.h" in
tclWinPort.h happens.  Don't want to start something new now.
2015-03-13 17:14:16 +00:00
dgp b2c41c81e4 The STRICT directive influences how #include "windows.h" works.
This is not a generic concern.  Move it over the tclWinPort.h.
2015-03-13 16:55:39 +00:00
dgp f6572d0c8d merge trunk 2015-03-12 15:06:29 +00:00
dgp 0e5a1e2642 merge release 2015-03-12 14:47:17 +00:00
dgp baa2eb6600 merge trunk 2015-03-11 20:55:33 +00:00
dgp 74708147ba update changes 2015-03-11 12:30:39 +00:00
dgp b199b80ba8 merge trunk 2015-03-11 12:26:36 +00:00
dgp 226278b0ac merge mark 2015-03-11 12:25:52 +00:00
Kevin Walzer 2c4d707b8f Fix or at least improvement for Tcl/Tk Cocoa event loop by forcing Tcl_ServiceAll() event processing: http://core.tcl.tk/tk/tktview/3028676fffffffffffffffffffffffffffffffff 2015-03-10 14:44:47 +00:00
Kevin Walzer 544df0c1b8 Fix or at least improvement for Tcl/Tk Cocoa event loop by forcing Tcl_ServiceAll() event processing: http://core.tcl.tk/tk/tktview/3028676fffffffffffffffffffffffffffffffff 2015-03-10 14:41:03 +00:00
dgp 8c7378b541 .RS/.RE balance 2015-03-06 19:55:38 +00:00
dgp 4f07b18244 make html must tolerate bundled packages using configure.ac over configure.in. 2015-03-06 19:48:31 +00:00
dgp f396811dd5 product of a make dist 2015-03-06 19:43:42 +00:00
dgp 83f6249875 merge mark 2015-03-06 16:39:07 +00:00
dgp 27503d10cd merge release 2015-03-06 15:26:03 +00:00
dgp 761a093174 repair nroff breakage 2015-03-06 15:06:02 +00:00
dgp 97739f4d09 repair nroff breakage 2015-03-06 14:59:11 +00:00
dgp f14d6cb130 products of "make dist" 2015-03-06 14:38:38 +00:00
dgp 07bc28e627 update release date 2015-03-06 14:17:48 +00:00
dgp 4a22756b41 update changes 2015-03-03 21:29:08 +00:00
dgp 94f2309f51 merge trunk 2015-03-02 22:38:09 +00:00
ashok dfc57be3b1 Deleted Win95/98-specific documentation as those platforms have long been unsupported. 2015-03-02 08:54:14 +00:00
dgp ec9c80bba9 autoconf-2.59 2015-02-26 16:58:52 +00:00
dgp 7e79080ed7 Bump to 8.6.4. 2015-02-26 16:57:59 +00:00
dgp 9071374443 merge trunk 2015-02-26 16:35:48 +00:00
dgp 75e1a82785 update changes 2015-02-24 15:08:02 +00:00
dgp 434f351abc merge 8.5 2015-02-20 20:22:17 +00:00
dgp 8104f5f53d [32b6159246] Accept aspect patch for broken [lreplace] bytecode.
No more [lreplace {1 2 3} 2 0] => 1 2 2 3
2015-02-20 20:19:48 +00:00
dgp b3e2027137 [e08c2c407b] The getHandleProc routine in the Tcl_Channel struct is optional. Update the docs to make that clear. 2015-02-20 19:30:48 +00:00
dgp 28fe834bc3 [e08c2c407b] The getHandleProc routine in the Tcl_Channel struct is
optional.  Update the docs to make that clear.
2015-02-20 19:29:20 +00:00
bch 2919fd5221 per ticket [e08c2c407b053bbfaab] (and stray code related to [84f208762f172e]) adj code to passing test suite 2015-02-19 22:01:36 +00:00
bch e4089d79b3 Do not fault! Tcl_Panic()! - improvements to handling Tcl_CreateChannel() args 2015-02-19 19:19:42 +00:00
bch 87e36a4aa9 backout backwards-incompatible experiment that was accidentally committed 2015-02-19 19:16:37 +00:00
bch 6d6598bbcb sync w/ [trunk] 2015-02-19 18:57:26 +00:00
aspect bb005f26e4 undo erroneous change in [1fa2e32e07] 2015-02-19 06:29:18 +00:00
aspect b8674e42d2 handle [lreplace l x y ...] where y<x 2015-02-19 02:42:13 +00:00
aspect 48650316e3 (core ticket [32b6159246]) Fix for [lreplace l x y] where y<x-1 2015-02-19 02:34:43 +00:00
venkat 89a037dc48 Merge trunk and tzdata2015a from ietf.org 2015-02-12 17:08:46 +00:00
dgp b1ad5d16a7 merge 8.5 2015-02-12 15:13:32 +00:00
venkat d90a15ace1 merge tzdata2015a from ietf.org 2015-02-11 23:54:00 +00:00
dkf fc506f9ca9 Even clearer failure messages. 2015-02-11 15:56:27 +00:00
dgp 48bab372b9 merge mark 2015-02-11 03:43:22 +00:00
venkat f6b7fa43d6 merge tzdata2015a from ietf.org 2015-02-11 00:19:01 +00:00
bch 4214c7a3a9 inputProc and outputProc tests run conditionally on TCL_READABLE, TCL_WRITABLE mask 2015-02-08 05:04:33 +00:00
bch 02cc7437b2 switch raw assert() to Tcl_Panic() per discussion w/ dkf 2015-02-07 21:19:05 +00:00
bch 9d3e75eb7a merge [trunk] 2015-02-07 21:12:18 +00:00
dgp 4d7ebbdc94 update changes 2015-02-06 19:56:56 +00:00
dgp 22ce6aeb4b merge 8.5 2015-02-05 19:24:27 +00:00
dgp 2fabe1cead Backport of channel mem leak fix that got missed before. 2015-02-05 19:23:35 +00:00
dgp 4b3f548c27 Bump to version 8.5.18. 2015-02-05 18:17:07 +00:00
dgp 3f9555d4c2 Fix [08872796bc] 2015-01-29 18:39:11 +00:00
dgp 8acaf40209 Test for bug [08872796bc]. 2015-01-29 18:36:45 +00:00
dgp 8ee4bdf94d Test for bug [08872796bc]. 2015-01-29 18:34:50 +00:00
dgp 579463bcec Protect against extension variable resolvers that fail to play by the post-Var Reform rules. 2015-01-29 17:48:19 +00:00
dgp 2f36a2d349 Protect against extension variable resolvers that fail to play by
the post-Var Reform rules.
2015-01-29 17:37:59 +00:00
jan.nijtmans 030b2d7a5e merge trunk 2015-01-26 21:00:15 +00:00
jan.nijtmans 6a233e935b Fix [df08482b042a16007f256bfbaaacfbe0def01074|df08482b04]: Double defined INFINITY in regguts.h 2015-01-26 20:56:01 +00:00
jan.nijtmans 4d5ff6cd13 Fix [df08482b042a16007f256bfbaaacfbe0def01074|df08482b04]: Double defined INFINITY in regguts.h 2015-01-26 20:47:23 +00:00
bch acad581479 truncateProc *can* be NULL 2015-01-21 00:21:18 +00:00
bch 52d37c087d assert() on missing definitions for Tcl_ChannelCreate() required struct Tcl_ChannelType{} fields. 2015-01-20 23:40:23 +00:00
jan.nijtmans dd60d52814 apply contributed patch which fixes a segfault 2015-01-17 18:40:19 +00:00
jan.nijtmans 428c3163c5 merge trunk 2015-01-17 17:42:53 +00:00
dgp 5e6453d592 merge mark 2015-01-02 22:43:45 +00:00
dgp f16ec6e776 Now that we're using TCL_ENCODING_NO_TERMINATE - be careful about acting on
the contents of dst -- they could be leftovers.  Only check bytes reported
to have been written and take care to get the assertions right.
2015-01-02 22:42:12 +00:00
dgp 42c1a1e15a Revert use of the install-headers target. Tcl 8.5 has no such target. 2015-01-02 15:19:23 +00:00
dgp 7b544a220f merge trunk 2014-12-23 18:44:21 +00:00
dgp 5cd16427f7 Add two new (undocumented) flags to the Tcl_ExternalToUtf() interface.
TCL_ENCODING_NO_TERMINATE rejects the default behavior of appending a
terminating NUL byte to the produced Utf output.  This permits use of all
of the dstLen bytes provided, and simplifies the buffer size calculations
demanded from callers.  Perhaps some callers need or appreciate this default
behavior, but for Tcl's own main use of encodings - conversions within I/O -
this just gets in the way.
TCL_ENCODING_CHAR_LIMIT lets the caller set a limit on the number of chars
to be output to be enforced by the encoding routines themselves.  Without
this, callers have to check after the fact for going beyond limits and
make multiple encoding calls in a trial and error approach.
Full compatibility is supported.  No defaults are changed, and the flags
have their effect even if an encoding driver has not been written to support
these flags (but greater efficiency is enjoyed if they do!).
All of Tcl's own encoding drivers are updated to support this.  Other encoding
drivers may exist somewhere, but I cannot point to any.
A TIP to document this and make it officially supported may come in time.
2014-12-23 18:39:35 +00:00
dgp 1ddabb17f9 Support TCL_ENCODING_CHAR_LIMIT in TableToUtfProc and EscapeToUtfProc drivers. 2014-12-23 17:53:21 +00:00
dgp a3babfe12a Support TCL_ENCODING_CHAR_LIMIT in the Iso88591ToUtfProc driver. 2014-12-23 17:48:36 +00:00
dgp b6fecacc22 Support TCL_ENCODING_CHAR_LIMIT in the UnicodeToUtfProc driver. 2014-12-23 17:46:05 +00:00
dgp 360b5c41ee Support TCL_ENCODING_CHAR_LIMIT in the UtfToUtfProc driver. 2014-12-23 17:26:07 +00:00
dgp 5a6443d00e Support TCL_ENCODING_CHAR_LIMIT in the BinaryProc driver. 2014-12-23 17:13:13 +00:00
dgp 7134cd9399 Use the new TCL_ENCODING_CHAR_LIMIT flag to have the encoding system manage
the max chars to read constraint.
2014-12-23 16:57:02 +00:00
dgp 84864592a6 merge trunk 2014-12-23 15:19:12 +00:00
dgp 1a92fb378c merge trunk 2014-12-23 03:11:01 +00:00
dgp ef6f1ba2c3 Use more suitable variable name pushers. 2014-12-23 02:41:54 +00:00
dgp b0078c8129 Eliminate TclIsLocalScalar(). No callers left. 2014-12-23 02:12:59 +00:00
dgp 49e7d0262b Revise CompileEachloopCmd() to use LocalScalar() in place of TclIsLocalScalar(). 2014-12-23 01:28:30 +00:00
dgp 2cbec4bf44 Convert the LocalScalar*() macros to rest on TclPushVarName rather than on
TclIsLocalScalar().
2014-12-22 20:27:14 +00:00
dgp 7ac39417f1 Use (interp == NULL) argument to TclPushVarName() to signal that no compiling
is desired.  Only a lookup of an index into the compiled variable table.
2014-12-22 20:13:29 +00:00
dgp 3faf4cc3b8 More complete use of the TCL_NO_ELEMENT flag to suppress useless actions. 2014-12-22 19:57:36 +00:00
dgp 9f699d22a2 merge mark 2014-12-22 17:12:50 +00:00
dgp 13667e8096 One more (interp==NULL) shortcut. 2014-12-22 15:35:47 +00:00
dgp 51f7688e96 merge-mark. The compiler machinery has changed too much for any hope for
a successful merge.  TclIsLocalScalar() elimination will need to be done
on trunk as an independent effort.
2014-12-19 17:57:04 +00:00
dgp f6d6b394eb Revise name and interface of new utility routines to match work already
in place on the trunk.
2014-12-19 17:09:32 +00:00
dgp 7e44dabec3 [e711ffb458] Eliminate TclIsLocalScalar() and revise all callers to use
more appropriate facilities.
2014-12-19 16:09:20 +00:00
dgp cfefe7127b New utility routine GetLocalScalarIndex() reduces common caller boilerplate
(and fixes a bug!)
2014-12-19 15:55:21 +00:00
dgp 2613112a13 Use interp==NULL argument to PushVarName to signal that only an index into
the CLT is sought, and no time should be wasted compiling other cases which
the caller is just going to discard.
2014-12-19 15:13:11 +00:00
dgp 18131f9c09 With no callers left, TclIsLocalScalar() is removed. 2014-12-19 14:21:42 +00:00
dgp baf649278a Replace TclIsLocalScalar() with PushVarNameWord() in [dict for] compiler. 2014-12-19 14:17:03 +00:00
dgp 88ec3c9772 Narrow scope of numVars. 2014-12-19 03:31:09 +00:00
dgp ad19550909 A bit more tidying... 2014-12-18 22:25:27 +00:00
dgp aed72bee30 No need for a loopIndex. 2014-12-18 22:13:11 +00:00
dgp f65cb994d8 No need for varvList any more. 2014-12-18 22:00:08 +00:00
dgp 893c9c7302 Fix up the token array passed to PushVarNameWord. Remove string list parse. 2014-12-18 21:29:07 +00:00
dgp 24817641b1 Replace use of TclIsLocalScalar() and late setting of varIndexes with an
earlier setting of varIndexes using PushVarNameWord().
2014-12-18 21:08:53 +00:00
dgp 89e6a65411 Simplify creation and storage of temporaries 2014-12-18 20:38:53 +00:00
dgp f664d633e6 With that shift, varcList is no longer needed. 2014-12-18 20:34:12 +00:00
dgp d56e61b246 Shift the allocation of AuxData earlier in the [foreach] compiler. 2014-12-18 19:21:31 +00:00
dgp 8dd58baa04 merge 8.5 2014-12-18 18:16:10 +00:00
dgp 559113cc4c [7c187a3773] Fix error in managing inStatePtr->inQueueTail value in the
byte-moving optimized path of [chan copy].  Thanks to Benno.
2014-12-18 18:06:51 +00:00
dgp 5dafefe112 [af08e89777] Rework finalization to stop encoding-24.2 segfault. 2014-12-18 14:38:26 +00:00
dgp 955507f635 Rework the *FinalizeThread*() routines so that the quick exit preference
is respected without need to run afoul of encoding finalizations.
tests pass now.  All changes are fully internal.
2014-12-17 20:47:58 +00:00
dgp e942227f6e Revise encoding finalization so that it does a more complete job of restoring
the pre-initialized state.  This makes finalization errors more repeatable
and cross-platform.
2014-12-17 19:57:40 +00:00
oehhar 68b5780dde changes for TIP427 2014-12-17 11:21:16 +00:00
oehhar 3b7664e77f Include option -connecting in test iocmd-8.15.1 2014-12-17 08:42:24 +00:00
oehhar b47b88af9b TIP-427: make "fconfigure $h -connecting" official (client sockets only) 2014-12-17 08:24:33 +00:00
oehhar d7a9d63520 Documented "fconfigure $h -connecting" on socket man page 2014-12-17 08:22:23 +00:00
oehhar f716d8815b Merge trunk 2014-12-17 07:53:41 +00:00
jan.nijtmans 3d03d92371 merge trunk (but 86 -> 90) 2014-12-15 10:23:23 +00:00
jan.nijtmans 4e0313afe2 85 -> 86 2014-12-15 10:20:39 +00:00
jan.nijtmans d9b30b94b8 merge-mark 2014-12-14 12:13:30 +00:00
Kevin Walzer 2f8ea1be7c Add header install flag to OS X GNUMakefile; thanks to Stephan Houben for patch 2014-12-13 02:50:07 +00:00
Kevin Walzer 59cb45cc16 Add header install flag to OS X GNUMakefile; thanks to Stephan Houben for patch 2014-12-13 02:47:25 +00:00
dgp ee5c231ff5 Similar conversion of the [dict append] compiler. 2014-12-11 16:00:19 +00:00
dgp 604faa265f Similar conversion for [dict update] compiler. 2014-12-11 15:45:16 +00:00
dgp 8e80c62f6f Similar revisions to [dict incr] compiler. 2014-12-11 15:19:38 +00:00
dgp a417c667a5 Get the word number right, even though it has no effect. 2014-12-11 14:41:09 +00:00
dgp 26326004c6 [e711ffb458] Same conversion for [catch] compiler. 2014-12-11 14:40:02 +00:00
venkat 2a796662ec merge tzdata2014j from ietf.org 2014-12-10 00:38:41 +00:00
venkat 0318c256ed merge tzdata2014j from ietf.org 2014-12-10 00:37:24 +00:00
venkat 704532c57a tzdata2014j from ietf.org 2014-12-10 00:35:37 +00:00
dgp 2d415cbf59 [e711ffb458] Replace TclIsLocalScalar() with PushVarNameWord() in the
compiler for [dict set].
2014-12-09 20:45:30 +00:00
dgp 916f1716f3 [e711ffb458] Replace TclIsLocalScalar() (which does the wrong thing).... with
PushVarNameWord() (which doesn't) in the compiler for [dict lappend].
2014-12-09 20:29:09 +00:00
jan.nijtmans e8bdd58fb2 merge trunk 2014-12-08 16:23:09 +00:00
jan.nijtmans d297273a13 Fix some gcc compiler warnings (probably cygwin-only) 2014-12-08 16:10:00 +00:00
jan.nijtmans b27238fbbb Fix some gcc compiler warnings (probably cygwin-only) 2014-12-08 16:05:19 +00:00
oehhar 7466351c90 test for bug [c6ed4acfd8]: running async socket connect with other connect established will block tcl as it goes in an infinite loop in vwait 2014-12-07 12:17:24 +00:00
ashok 58bde2cb77 Potential fix for [c6ed4acfd8].
Simple typo in original fix for [336441ed59]. Was looping on
statePtr->next instead of statePtr2->next. Would result in
an infinite loop. Definitely a bug but whether it completely
fixes the above in all cases needs to be tested.
2014-12-06 11:19:32 +00:00
dgp 40420634aa Ever since (Tcl)PushVarName() stopped making a recursive call to Tcl_ParseCommand() (in the pre-8.4.0 timeframe), there's been no need for special protections for brace-quoted varname words. A simple word is a simple word is a simple word. 2014-12-05 21:28:00 +00:00
dgp b52476a5cd Ever since (Tcl)PushVarName() stopped making a recursive call to
Tcl_ParseCommand() (in the pre-8.4.0 timeframe), there's been no need
for special protections for brace-quoted varname words.  A simple word
is a simple word is a simple word.
2014-12-05 21:05:17 +00:00
hypnotoad 339d4879a0 Bringing core_zip_vfs up to date with trunk 2014-12-05 15:05:08 +00:00
dgp bc8ffb3922 [d2ffcca163] Limit parsing results that are documented to accept only ASCII chars to actually follow that constraint. This requires not trusting isalnum(.) and isalpha(.) to deliver portable identical results. 2014-12-05 12:28:01 +00:00
dgp bfb321eb38 [d2ffcca163] Limit parsing results that are documented to accept only
ASCII chars to actually follow that constraint.  This requires not trusting
isalnum(.) and isalpha(.) to deliver portable identical results.
2014-12-04 22:10:57 +00:00
dgp 5c1b9fefdf Limit isalpha(.) calls in the expr parser to only apply to known ASCII
arguments to make the results portable.
2014-12-04 21:29:18 +00:00
dgp 6d936db4a3 The isalpha(.) calls remaining in the expr parser still bring nonportability.
Commit a test that demonstrates that.
2014-12-04 20:45:11 +00:00
dgp dd4c175c81 Stop using isalnum(.). Its results are not portable. Replace with our
own private routine TclIsBareword() that does exactly what we want.
2014-12-04 18:26:31 +00:00
dgp 29b10229de merge 8.5 2014-12-04 13:02:43 +00:00
dgp bff00baca2 And then another merge mark to finish. 2014-12-03 23:55:39 +00:00
dgp 7dfd9c5a96 Now make the patch by hand that fossil could not merge. 2014-12-03 23:54:16 +00:00
dgp 05971adca4 Just a merge mark since fossil cannot do it right. 2014-12-03 23:51:36 +00:00
dgp 2f3edeea43 [0c043a175] backport fix from trunk. 2014-12-03 23:46:51 +00:00
Miguel Sofer 0c0be35710 missing unset in new test 2014-12-03 23:34:36 +00:00
Miguel Sofer 137e142be2 fix var($) problem, bug [0c043a175] (thx dgp) 2014-12-03 23:27:45 +00:00
Miguel Sofer 8694763c10 test and fix (thx dgp) 2014-12-03 23:17:16 +00:00
dkf 58cd08bb7d [0dca3bfa8f] Strengthen validity checks on fast-path string comparison. 2014-12-03 23:05:15 +00:00
Miguel Sofer 730a9a132c adding a test for the bug 2014-12-03 13:22:53 +00:00
andreask d7cf041bab Fix missing export of the "NewForeachInfoType" AuxData structure for tbcload/tclcompiler packages. 2014-12-01 20:17:04 +00:00
dgp 03f0d60f88 Same issue in expr parser also tested and fixed. 2014-11-26 17:00:55 +00:00
dgp 92402afe21 I like this patch better. Retain the byte orientation of the parser. 2014-11-26 16:22:40 +00:00
dgp d9465a5be2 One way to fix the parser of $-substitution accepting non-ASCII varnames. 2014-11-25 21:24:06 +00:00
dgp 52bcb866e5 merge trunk 2014-11-24 03:11:23 +00:00
dgp 7f5ddf43ee [e087812465] Trim back operatorStrings array to just the entries that are needed. Trims away the part of the array that was out of sync with the opcodes. 2014-11-24 03:08:50 +00:00
dgp 484de8b987 [e087812465] Trim back operatorStrings array to just the entries that are
needed.  Trims away the part of the array that was out of sync with the opcodes.
2014-11-24 03:00:03 +00:00
jan.nijtmans 9c58ff6834 merge trunk 2014-11-21 13:10:25 +00:00
jan.nijtmans 2b3e403550 Fix [743338466549f09e3956d8a86e6f9a8030f227cb|7433384665]: socket error encoding bug. 2014-11-21 13:05:31 +00:00
hypnotoad ded95f89d3 Added the zvfstools file to the installer 2014-11-17 15:04:05 +00:00
dgp fa8d5668aa merge trunk 2014-11-17 13:00:42 +00:00
dgp 24d57ad4ff Add to Tcl_ExternalToUtf() a capability to impose a limit on the number
of chars produce in the encoding result.  When the flag
TCL_ENCODING_CHAR_LIMIT is set and dstCharsPtr is not NULL, then the
initial value of *dstCharsPtr is taken as the max number of chars to produce.
The limit is imposed in a way that does not require the assistance of the
encoding's driver procs, but the flag is passed on to them in case they
can do better when they know they should.  No callers updated yet.
No drivers updated yet.

One difficulty is that this necessarily imposes a pre-translation limit,
and the I/O system has a history of wanting to impose only a post-translation
limit.
2014-11-15 21:46:19 +00:00
dgp 3185389da2 With no padding needed for a terminating NUL, there no need for a distinction
between the dstNeeded and dstLimit values.
2014-11-15 21:13:52 +00:00
dgp 164250cf86 Tcl_ExternalToUtf appends a terminating NUL to its encoded results.
Perhaps this is a welcome convenience for some callers, but not for Tcl's
I/O system, which has no need for that.  Added a new flag value
TCL_ENCODING_NO_TERMINATE that callers can use to suppress this behavior.
This means buffers don't require so much padding, and a tiny bit of processing
is saved.  Update I/O callers to use the feature.
2014-11-15 21:08:57 +00:00
hypnotoad 5949095693 For the feature branch we now enable Zip file functions for all shells in Unix, and
explicitly name a new executable "basekit", which is a statically linked tclsh
with an attached library VFS
2014-11-15 00:12:00 +00:00
jan.nijtmans 410178bb88 Merge trunk.
Update to Unicode 8 beta
2014-11-14 12:29:54 +00:00
jan.nijtmans d61db937ed merge trunk 2014-11-14 09:47:56 +00:00
jan.nijtmans 9c2149012b Remove a number of eol-spaces. No change in functionality. 2014-11-14 09:44:34 +00:00
jan.nijtmans 6e056b1e14 Simplify NativeIsComPort() implementation: native paths never end in ':', and never use forward slashes (any more), so no need to check for that. 2014-11-13 16:08:47 +00:00
hypnotoad 9cbfbd034e Add a mode for injecting the TkDll into the VFS 2014-11-13 15:50:08 +00:00
hypnotoad 3b50f8bcd6 Removed _ANSI_ARGS_ macros. They were not compiling in Tk for some reason today... 2014-11-13 14:58:01 +00:00
hypnotoad 85442c797c Tweak to delete the tclzsh.vfs directory before the rm -rf tclvfs* statement
in "make clean"
2014-11-13 14:30:26 +00:00
hypnotoad 3e723b7f5e Merging in changes from trunk 2014-11-13 14:13:08 +00:00
jan.nijtmans 99ee3e86d7 Improve documentation on the use of com ports (remove references to Windows 95, deprecate the use of postfix ':').
Allow lpt[5-9] just as com[5-9], and make sure that path normalization works as expected for ports > 4.
2014-11-13 12:52:29 +00:00
jan.nijtmans 3bbc2317b3 Improve documentation on the use of com ports (remove references to Windows 95, deprecate the use of postfix ':').
Allow lpt[5-9] just as com[5-9], and make sure that path normalization works as expected for ports > 4.
2014-11-13 12:29:04 +00:00
dgp 41f0c5238f merge trunk 2014-11-12 04:44:56 +00:00
dgp 7d10d699c7 merge release 2014-11-12 04:35:37 +00:00
dgp 620cf6fa02 Likely fix for channel mem leaks. 2014-11-11 22:23:57 +00:00
dkf 98e4ac55d2 [214cc0eb22] Add tests to make sure that this bug stays fixed. 2014-11-08 07:06:52 +00:00
dgp eb64ed3cf0 Correct -singleproc 1 testing flaws. 2014-11-07 17:48:31 +00:00
dgp 5e0d1d6bc5 update changes; more test suite polishing. 2014-11-07 14:10:23 +00:00
dgp 7565b9ff1e Make sure all uses of the [testbytestring] command are constrained. 2014-11-07 13:59:27 +00:00
andreask 10dc783c93 Merged latest trunk work (especially changes to eof handling) into the RC. 2014-11-06 18:38:36 +00:00
dgp 0c027bb706 cleanup global namespace litter 2014-11-06 17:34:40 +00:00
dgp 054f6c2802 merge trunk 2014-11-06 16:56:05 +00:00
dgp c658976cc3 [5adc350683] Stop Tcl forcing EOF condition on channels to be permanent. It may be fleeting, and all parts of Tcl channel ecosystem have to deal with that. New assertions and tests to keep us on track. 2014-11-06 16:34:03 +00:00
dgp 1db5ff8c2c [5adc350683] Stop Tcl forcing EOF condition on channels to be permanent.
It may be fleeting, and all parts of Tcl channel ecosystem have to deal
with that.  New assertions and tests to keep us on track.
2014-11-06 16:24:02 +00:00
dgp fbba7d0b1e merge iogt fixes. 2014-11-06 16:20:44 +00:00
dgp 559b8ab9de Also test transfroms that delay. 2014-11-06 16:12:26 +00:00
dgp 60ef43cb8c fix failing test 2014-11-06 15:49:30 +00:00
dgp 5c6717b7d5 New test iogt-7.0 demos bug in [testchannel transform]. 2014-11-06 15:06:52 +00:00
dgp 2f8dae1cec Another test checking that handling when transform returns nothing is right. 2014-11-06 14:52:36 +00:00
dgp dac552ac0b New tests iortrans-4.11* demonstrate what was wrong with the "leaky EOF flag"
approach in 8.6.1 and earlier.  If each level of the channel stack is to have
control over its EOF independently, we have to provide for that, even though
the Filesystem read APIs make it a big pain.  Also test robustness against
varing buffer sizes.
2014-11-06 13:38:01 +00:00
dgp 53ae611583 Reflected Transform channel fix. Be sure each EOF on the base channel gets
passed up to become an eof of the transform before continuing on to additional
ReadRaw() from the base channel.  This way we don't miss fleeting EOFs.
2014-11-05 20:34:03 +00:00
dgp 57de194b09 New test iortrans-4.10 to demo failure of channel transformation to handle
fleeting EOF in the base channel.  Falls into infinite block.  Regression
compared with Tcl 8.6.1.
2014-11-05 16:47:00 +00:00
dgp 5204910c12 merge trunk 2014-11-05 16:39:16 +00:00
dgp 71d27bd9c6 [214cc0eb22] Restore [lappend $var] return value to the 8.6.1- behavior.
If this is going to change, lets not do it by accident.
2014-11-05 06:36:07 +00:00
dgp 3fa4ffc77a Make sure reflected channels do not make a double call to Tcl_ReadRaw(),
with the unwarranted assumption that EOF is a permanent condition.
2014-11-03 21:37:37 +00:00
dgp d2b69b306e Same patch re-enabling read after EOF, but here applied to 8.6.
Likely additional changes needed in the other channel transforms new in 8.6.
2014-11-03 21:04:24 +00:00
dgp db9946ccc3 merge 8.5 2014-11-03 20:54:12 +00:00
dgp cb0895755d [5adc350683] Reworked the management of the EOF states to re-enable the
ability to read beyond EOF.  Plenty of assert()s to keep thing from going
off track again.
2014-11-03 20:39:25 +00:00
jan.nijtmans b14c2f49d2 Add test-case for previous commit, which shows that when trying to open a filename with invalid characters gives the right error-message. (same bug existed on UNIX too, which is now fixed) 2014-11-03 12:54:25 +00:00
jan.nijtmans 48ab03f3cd Add test-case for previous commit, which shows that when trying to open a filename with invalid characters gives the right error-message. (same bug existed on UNIX too, which is now fixed) 2014-11-03 12:44:55 +00:00
jan.nijtmans de82a1a99e Better errormessage when file path contains invalid characters. 2014-11-03 10:23:06 +00:00
jan.nijtmans 7ec17e20d3 Better errormessage when file path contains invalid characters. See: [03414f517b7a74]. 2014-11-03 10:14:48 +00:00
dgp d95273cf0e Disable assertion until tls bug it detects is fixed. 2014-11-01 14:52:55 +00:00
jan.nijtmans f87735c127 Extend WinIsReserved() to recognize COM[5-9]: as valid com ports as well. Prevent possible buffer-overflow if COM name ends with ':'. 2014-10-31 11:14:24 +00:00
jan.nijtmans 1e769e4b57 Extend WinIsReserved() to recognize COM[5-9]: as valid com ports as well. 2014-10-31 10:57:25 +00:00
jan.nijtmans a8dc863399 When translating a reserved devicename to native pathname, strip ':' postfix. Possible fix for [dcc03414f5], but anyway a good idea. 2014-10-31 10:20:03 +00:00
jan.nijtmans 476a68cbe5 When translating a reserved devicename to native pathname, strip ':' postfix. Possible fix for [dcc03414f5], but anyway a good idea. 2014-10-31 09:59:36 +00:00
dgp 54d2883694 Base test for [5adc350683]. 2014-10-29 14:54:11 +00:00
dgp 5a9b116846 merge 8.5 2014-10-29 13:49:46 +00:00
dgp df4391e23f Work in progress restoring ability to [read] after [eof] and get non-empty
strings back in those cases where the channel has them to offer.  Also
working through all the implications of this possibility on Tcl's more
exotic channel features, like stacking.
2014-10-28 20:10:32 +00:00
dgp 717a98747d merge trunk 2014-10-28 13:06:56 +00:00
jan.nijtmans 915359ddce Support for Windows 10 2014-10-26 07:53:23 +00:00
jan.nijtmans 999c88ea06 Support for Windows 10 2014-10-26 07:51:22 +00:00
dgp 790fed46bb merge mark 2014-10-24 20:10:39 +00:00
dgp da01ebeabe merge release 2014-10-24 20:07:52 +00:00
dgp 91d5ac9d0b by request 2014-10-22 14:46:33 +00:00
hypnotoad 6b423f0d9e Fixes to allow a standard tclsh build to do the zip file encoding, instead of
having to do it all through the zip enabled shell.
2014-10-21 01:20:10 +00:00
hypnotoad bdc43f8241 Tweaked zvfstools to always allows the zvfs::mkzip command,
and defer the check for the rest of the zvfs tools until 
the first call to zvfs::unzip
2014-10-21 01:11:22 +00:00
hypnotoad 9171dde346 Replaced calls to zip with calls to the new pure-tcl zipfile encoder embedded
in zvfstools.

Fixed a bug in the encoder for zvfstools. It was exporting files, but not directories.
This lack of directories was causing the bootloader to miss that /zvfs/boot/tcl/init.tcl
existed, because it was checking for the existance of /zvfs/boot/tcl. I compared the 
archives created by zvfstools::mkzip to the archives created by zip, and the 
difference came down to the fact that zip did create TOC entries for directories
and zvfstools::mkzip was failing to do so. (So I'm pretty sure the new behavior 
is "standard.")
2014-10-21 01:04:07 +00:00
hypnotoad 6826dbab46 Added the zipfile::encode routine from Tcllib, and a rudimentary zipfile decode as a package "zvfstools" 2014-10-20 20:54:05 +00:00
hypnotoad b2164040ac Renamed "tclkit" to "tclzsh"
Removed tclzsh from "make binaries". (It the user wants it, they have to ask for it. It requires a working Tclsh and an exernal Zip)
2014-10-20 19:59:19 +00:00
hypnotoad 307bb5f72d Removed the dual ported canonical path mapping scheme to allow Odie and FreeWrap to coexist. The results of both functions were functionally identical. 2014-10-20 01:23:11 +00:00
hypnotoad 963de5ae2a Added thread mutex/release calls around the potentially contested regions of the code:
Mounting a file system
Unmounting a file system
Reading data from an archive file

The mutexes, as implemented, allow only one thread at a time access to the innards of ZipVfs. It does not try to handle the cases where two archives may be open by two different threads. (One will still have to wait until the other has finished.)

Removed all of the compiler warnings under Unix

(Still have to test the code under Windows.)
2014-10-20 01:20:54 +00:00
hypnotoad 2b022e6979 Added a "_bare" stage to capture the kit executable before the VFS is wrapped to it. 2014-10-19 20:20:09 +00:00
hypnotoad cfd9edb0fe Update the zipvfs implementation with additional code from both Odie and
Dennis LaBelle's FreeWrap.

Split the boot loader code out of tclZipVfs.c and into its own File.

Altered the structure of tclZipVfs.c to better mirror that which is distributed
in Odie and FreeWrap to make popping and swapping improvements easier.
2014-10-19 20:03:00 +00:00
seandeelywoods 74b45809d1 Bringing in the latest fixes from trunk 2014-10-19 11:06:00 +00:00
dgp e456c84871 merge trunk: 2014-10-18 22:49:12 +00:00
dgp adff5bc1c6 merge trunk 2014-10-18 22:43:06 +00:00
dgp eee56ee95a update changes 2014-10-18 20:11:36 +00:00
dgp 9cf7e2a336 merge 8.5 2014-10-18 20:06:02 +00:00
dgp 93082a74a2 [10dc6daa37] New fix for [gets] on non-blocking channel. This time properly accounts for the effects of ENCODING_LINESIZE. 2014-10-18 20:03:08 +00:00
dgp 9f2c3815f7 [10dc6daa37] New fix for [gets] on non-blocking channel. This time
properly accounts for the effects of ENCODING_LINESIZE.
2014-10-18 19:50:19 +00:00
dgp 592ab670f3 [10dc6daa37] [gets] on a non-blocking channel must take care so that
1) At least one call to the channel driver input proc gets made.
       Failure to do this locks up the channel - catastrophic FAIL. 
    2) After any driver call reports BLOCKED, don't call again.
       This is less serious, but FAILs to respect the non-blocking setting.
Code corrections and tests included, to restore 8.5.15 compat.
2014-10-17 15:20:34 +00:00
oehhar c0e8db49d5 fconfigure -peername and -sockname return empty string while async connect running. 2014-10-17 12:52:15 +00:00
oehhar d7604e5728 New tests: 14.16: -peername empty while async connect running, 14.17: -sockname 2014-10-17 12:28:55 +00:00
oehhar 8e5b3b87a5 Merge trunk 2014-10-17 10:00:39 +00:00
dgp d31d858702 Bump to Tcl 8.6.3, TclOO 1.0.3, and update changes file. 2014-10-14 18:12:36 +00:00
dgp 1234267c92 missed a bump 2014-10-13 17:34:12 +00:00
dgp 59491ce8ca update changes file 2014-10-13 17:15:55 +00:00
dgp ef89704696 Resolve test conflicts over global vars 2014-10-10 20:37:58 +00:00
dgp 1ce240e90f Bump to 8.5.17 2014-10-10 20:17:12 +00:00
dgp 6db6c3291b merge trunk 2014-10-10 20:03:41 +00:00
dgp c132978e4b merge mark 2014-10-10 20:02:40 +00:00
dgp 59f2031ac5 backport those tests that can be 2014-10-10 20:02:00 +00:00
dgp f85490f4e1 [bf7135428c] Restore the Tcl_Write() return value logic. 2014-10-10 19:56:06 +00:00
dgp c2be2a28e0 [bf7135428c] Restore the Tcl_Write() return value logic. 2014-10-10 19:54:19 +00:00
dgp 4977df535f [ed29c4da21] Completed fix for [chan copy] handling [chan blocked]. 2014-10-10 19:44:54 +00:00
ferrieux 182bace1e3 Add Colin's test for coro floor above street level [Bug #3008307] 2014-10-10 19:36:17 +00:00
dgp 1f33c7ae12 Another test so both DoRead and MBRead are covered. 2014-10-10 19:02:37 +00:00
dgp 78c2c1cedf [ed29c4da21] Merge patch from 8.5, still not a complete fix. 2014-10-10 18:28:31 +00:00
dgp 186ecf8003 [ed29c4da21] Don't let BLOCKED state get converted into a channel error. 2014-10-10 18:24:32 +00:00
dgp 56c0b11912 New test io-53.15 for [ed29c4da21]. 2014-10-10 16:13:53 +00:00
dgp 1df1505d69 New test io-53.15 for [ed29c4da21]. 2014-10-10 15:38:15 +00:00
dgp 1a08ae6fb4 [2039178] Remove false claims about TCL_INTERP_DESTROYED flag bit in command traces. 2014-10-09 14:56:27 +00:00
dgp 891a0ade43 [2039178] Remove false claims about TCL_INTERP_DESTROYED flag bit in command traces. 2014-10-09 14:52:48 +00:00
jan.nijtmans 4145712613 Merge trunk 2014-10-08 07:14:34 +00:00
jan.nijtmans 29d06499aa Fix [59a2e78e54d3361c33b8cd6eef55d384d8abecd7|59a2e78e54] : tclWinTime.c does not compile with MSVC14.
Eliminate use of __MINGW32__ macro everywhere, as it is deprecated.
2014-10-08 07:11:53 +00:00
jan.nijtmans ea97de415f Fix [59a2e78e54d3361c33b8cd6eef55d384d8abecd7|59a2e78e54] : tclWinTime.c does not compile with MSVC14.
Eliminate use of __MINGW32__ macro everywhare, as it is deprecated.
2014-10-08 07:02:34 +00:00
dgp 84ff8a7d78 merge trunk 2014-10-03 20:26:01 +00:00
dgp b327c90dcc fix [bc1a96407a] 2014-10-03 20:20:12 +00:00
dgp cd1372b52d test cases 2014-10-03 15:47:38 +00:00
dgp 3b4cf982e3 Possible fix for testing. 2014-10-02 21:40:13 +00:00
dgp 7c4da917a7 [bc1a96407a] Partial solution should avoid crash, but may lead to wrong behavior. 2014-10-02 17:43:16 +00:00
dgp 9454354f0e merge trunk 2014-10-02 14:51:04 +00:00
dgp e36d384130 [bc5b790099] Improper calculation of new dstLimit value. New test io-12.7. 2014-10-02 14:46:54 +00:00
dgp 5e53c4c296 [bc5b790099] Improper calculation of new dstLimit value. New test io-12.7. 2014-10-02 14:43:10 +00:00
dgp cd993feddb merge trunk 2014-09-28 22:23:45 +00:00
Miguel Sofer 78fcaa3580 Backing out commit [cddbfc3081], fix for bug [82521bfb6734f891dd]
The "optimisation" in that commit assumes that the last byte in the
generated bytecodes is an INST_TRY_CONVERT if it equals 64. This is an
invalid assumption, it could be 64 and not be an instruction.
2014-09-27 21:36:06 +00:00
ferrieux 11db57d058 Applied patch by Andreas Leitgeb so that [string cat]'s compiled bytecode optimally groups args by 255 for INSTR_STR_CONCAT1. 2014-09-27 20:28:47 +00:00
oehhar 822a2b50f7 Implemented tip-427: socket fconfigure option -connecting plus no -peername,-sockname when still connecting. 2014-09-26 12:05:30 +00:00
dgp fc21aee814 comment fix 2014-09-25 18:47:32 +00:00
hypnotoad 507bab4b21 Merge with trunk 2014-09-22 18:27:45 +00:00
dkf d06897f3ea Added a script-readable bytecode disassembler in tcl::unsupported. 2014-09-20 12:37:19 +00:00
dkf 1598658a83 Tidy things up a bit more. 2014-09-20 11:40:35 +00:00
hypnotoad f45b6c1066 Merge from trunk 2014-09-19 06:36:34 +00:00
jan.nijtmans 950a2a295d merge trunk 2014-09-17 13:16:56 +00:00
jan.nijtmans 192fa71096 merge-mark 2014-09-17 10:47:21 +00:00
tne ebebb29be9 Walked back modifications to tclConfig.sh.in
(Builds don't require them anymore)
2014-09-17 08:33:16 +00:00
tne 2e0b2484a9 Removed non-working tclkit-direct makefile technique 2014-09-17 08:31:21 +00:00
hypnotoad ff7a13136d Added a "make tclkit" to makefile
Removed debugging fprintf
2014-09-16 23:07:44 +00:00
stwo 76db7c5c04 Better pic flag for OpenBSD. 2014-09-16 15:52:44 +00:00
stwo 85f3786d9c Better pic flag for OpenBSD. 2014-09-16 15:48:48 +00:00
hypnotoad 4b8398a6ed Removed non-working code from the end of the mkVfs.tcl script 2014-09-15 14:59:20 +00:00
hypnotoad a684c1a281 Modified the makefile to produce a distinct name for a kit depending on whether
it was compiled statically or dynamically.

This allows builders to run and install successive builds of Tcl both
statically and dynamically.
2014-09-15 10:04:50 +00:00
hypnotoad b25f4f5272 The unix build has been pared down to the minimum hooks required to build a
VFS enabled Tclsh with a simple compile flag. Modified the BC and Visual Studio
makefiles for Windows, but these are untested.

The default for Tcl is now to build a static or dynamic shell in the same
way it would build a static or dynamic shell for Tclsh. Controlled by the
--enable-shared flag. Note however that ZLib is compiled in to every
VFS enabled shell. (Rather than rely on a dylib.)

The "direct" build is maintained in the Makefile, mostly as a h(istor|yster)ical
reference. The technique is not portable to Windows, and may not work outside of
OSX.
2014-09-15 09:44:39 +00:00
dkf 5e0835667d whitespace tweak 2014-09-14 17:11:33 +00:00
dkf 26fe5fff38 merge trunk 2014-09-14 16:51:49 +00:00
hypnotoad c003b95ed4 Backing out code that inserted a debug statement into the http package 2014-09-12 16:13:00 +00:00
hypnotoad 0cbfed0c55 Merging in changes from trunk 2014-09-12 16:06:13 +00:00
hypnotoad ee30b1c0ab Developed an improved bootloader built around TclSetPreInitScript. The new bootloader
now mounts the VFS before the interpreter is initialized, and gives it enough
hints to point to the VFS for init.tcl and main.tcl (If present)

Also, Tcl_ZVfs_Boot now takes and additional argument: the name of the file to mount.

As the difference between a normal shell and a zvfs enabled shell is one again, several
lines of code, the example shells is folded back into tclAppInit.c and controlled with
macros.

The ZVFS commands are now loaded in as a static package.

Removed the Stubs entry for Tcl_Boot_ZVFS, it's now intended that shells build
their own copy of tclZipVfs.o
2014-09-12 16:03:20 +00:00
dgp d75135cca1 [cee90e4e88] Correct error in stack depth checking. 2014-09-10 22:17:21 +00:00
dkf a5dd225e78 [2486824] Improve error message; not all that upvars is an upvar. 2014-09-10 08:24:59 +00:00
dkf 5f9519213f [2486824] Improve error message; not all that upvars is an upvar. 2014-09-10 08:20:46 +00:00
dkf 7bce68fe3b [84af1192f5]: [regsub] compiler no longer confused by quantification handling. 2014-09-09 19:49:08 +00:00
hypnotoad b3362b7dfd Folding the core_zip_vfs_static work back into main branch. The pure-dynamic line
of research was not panning out
2014-09-09 15:23:16 +00:00
hypnotoad 99d72ae892 Added the "run tcl dll from vfs" magic to windows 2014-09-09 15:09:23 +00:00
hypnotoad 39145d45d1 Add tclkit to "make all" and install 2014-09-09 15:02:11 +00:00
hypnotoad 627a5bfa73 Instead of statically link the tclkit executable, pack the tcl dll in
the VFS
2014-09-09 14:47:12 +00:00
hypnotoad ab35383fda Add Static library link instructions to tclConfig.sh 2014-09-09 13:59:09 +00:00
hypnotoad 9f12483ed2 Instead of statically compiling the Tclkit executable straight from
.o files, generate a static library (libtclkit.a), and compile against
that.
2014-09-09 07:55:45 +00:00
hypnotoad 4e331e27f8 Added the tclkit binaries to install 2014-09-09 06:54:36 +00:00
ferrieux 600ace1c4b Refine TclFinalizeThreadData so that the quick-exit optimization really only affects exit. 2014-09-08 22:50:11 +00:00
dgp 62004c9fb4 Exceptional handling of oo::class has to be consistent throughout. 2014-09-08 21:22:05 +00:00
stwo 976c48a7f1 Change one '#ifdef' to '#if defined()' for improved consistency within the file,
as in checkin [211aa43013].
2014-09-08 00:37:22 +00:00
hypnotoad 71e02d5298 Created a designated bootloader for Tclkits under windows
On windows, tclkits build a private VFS instead of relying on make install

Added a tool to build the tcl kit's VFS, as well as index the bundled packages
2014-09-06 11:41:26 +00:00
hypnotoad 0008ed9ea4 Preliminary checkin for Windows tclkit builds 2014-09-06 01:21:54 +00:00
hypnotoad 3bd1370dbc New build process for Tcl kits in Unix (Windows port to follow...)
Rather than force a "make install" to build the vfs, the tclkit now
performs it's own "install" to a subdirectory (using destdir) to collect
the files it needs for its vfs.

tclkits no longer link to the tcl library. Instead, all of the obj files that
are used to assemble the lib are instead packed into the executable. Thus,
"make tclkit" produces the tclkit. That's it. No dlls. No tclsh. Makes no
other mark on the file system save the bare essentials it needs. It uses the
same variables in the makefile as the tcl libraries, so as they are updated
so too is tclkit.

Zlib files are *always* build for tclkits. Tclkits can never rely on the
presence of zlib on the systems in which they will be installed.
2014-09-06 00:58:23 +00:00
hypnotoad a426ba29d5 Updating to the latest trunk 2014-09-05 20:34:55 +00:00
dgp a3b501f125 Remove unused macros. 2014-09-05 19:04:43 +00:00
dgp 13d8cae724 Make corrections to long-false comments. 2014-09-05 18:30:57 +00:00
dkf 303cced03d [ccc2c2cc98]: lreplace edge case 2014-09-05 10:05:05 +00:00
dgp 3f8809d6ec Remove ChannelHandlerEvent struct, which has never been used in all of
recorded Tcl history.
Still need to purge comments of mentions of ChannelHandlerEventProc()
which is similarly pre-historic.
2014-09-04 22:05:21 +00:00
hypnotoad a813938bef Removed a typo 2014-09-04 01:27:55 +00:00
hypnotoad 295272b73c Removed some debugging code of mine... 2014-09-04 01:23:45 +00:00
hypnotoad 703177e26a Adapted the Unix startup process to ifdef out the KIT specific behaviors.
tclkit is now build as a standalone exectuble.
2014-09-04 01:22:20 +00:00
hypnotoad b992e62207 Re-engineered the windows kitbuilding process to produce a standalone
executable (in a similar process as tcltest is made).

The kit specific functions of tclAppInit have been wrapped around define 
macros, and are only active if TCL_KIT is defined. (Which is only done
when building the tclkit executable)
2014-09-04 00:30:04 +00:00
tne 4691bea988 Typo Fix 2014-09-03 22:03:08 +00:00
hypnotoad fce753c3d5 Merging changes from trunk 2014-09-03 21:24:17 +00:00
tne 670a31f84f Closing the hypnotoad branch 2014-09-03 21:11:30 +00:00
tne 25358e0ba4 Updating hypnotoad branch 2014-09-03 21:10:46 +00:00
hypnotoad b6f9bc7ca8 More tweaks to makefiles 2014-09-03 20:41:12 +00:00
hypnotoad 79ccab2fd2 Merging in changes from Tcl
Reduced the code necessary to bootstrap a shell to a single C call.

Reduced the number of new stub entries to 1

Fixed a Makefile goof that was preventing kits from running properly.
2014-09-03 20:32:08 +00:00
ferrieux b47df5123e Distinguish hanging from crashing in exit tests. 2014-09-03 19:44:29 +00:00
ashok 996c102b1f [132fad6fde]. Fixed GetCache to use TclpSysAlloc+memset instead
of calloc. Now consistent with tclWinThrd.c which no longer
uses malloc in its TclpSysAlloc implementation.
2014-09-03 15:48:56 +00:00
hypnotoad 8d1d673760 Backported dkf's documentation effort to the main core_zip_vfs branch 2014-09-03 10:50:06 +00:00
dkf 6c2512bc35 Clean up of docs, import basic text from comments in code, format. 2014-09-03 10:24:53 +00:00
jan.nijtmans e5db9c5605 merge trunk 2014-09-03 08:33:46 +00:00
hypnotoad 2c1a55d314 Merging in the "official" windows hang patch 2014-09-02 22:06:21 +00:00
ferrieux a024a52335 Refrain from calling TclFinalizeThreadData() in quick-exit case as it is useless (just memory freeing). Superficially fixes [Bug 132fad6f]; that bug is still exerciseable thanks to recent additions to the test suite that exercise full finalization. 2014-09-02 22:00:03 +00:00
ferrieux 2e4f40528b Add test cases in very first position for hang-on-exit, both in (normal) quick-exit and TCL_FINALIZE_ON_EXIT=1 modes. 2014-09-02 21:57:20 +00:00
hypnotoad e88bbb7296 Merging with fix_windows_zip 2014-09-02 21:19:56 +00:00
hypnotoad 06547a29be Fix for the cases where a dynamic build is used 2014-09-02 21:16:20 +00:00
hypnotoad 8ca1a78b1a Revised patch (per ferrieux) 2014-09-02 20:26:50 +00:00
hypnotoad 6c59decfba Merging in changes from core_zip_vfs 2014-09-02 20:17:57 +00:00
hypnotoad 732a963e04 Added a hac^H^H^Hpatch from ferrieux to mask around the exit hang on windows until
the issues are fixed at the core level.
2014-09-02 20:16:54 +00:00
hypnotoad cd9922f497 Pared down tclZipVfs to eliminate #ifdef branches that we don't have to worry
about with a modern Tcl.

Replaced dummy calls to VFS with NULL 

Where practical, replaced string-based Tcl IO calls with their new obj-based
successors. (Tcl_FSOpenChannel, Tcl_FSStat, etc)

Eliminated compiler warnings under Windows
2014-09-02 18:30:23 +00:00
hypnotoad 9554b52dba Start of the "hypnotoad" branch, combining the various patches I'm testing
against.
2014-09-02 15:23:56 +00:00
hypnotoad 8c90b3ae99 Patch to make the default behavior for Tcl under Windows to embed the Zlib
sources rather than add a dependency to a dynamic zlib.dll
2014-09-02 15:21:23 +00:00
hypnotoad 811d367c49 Rather than make a special executable, tclkits are now a copy of tclsh with an attached zip file 2014-09-02 11:04:53 +00:00
hypnotoad 1d9824ec60 Tweaking the Makefile instructions for Tclkits under unix 2014-09-01 23:23:37 +00:00
dkf 5c6730bd0f Squelch most warnings. 2014-09-01 13:51:59 +00:00
dkf 78b3c04320 Bring the source more into line with Tcl style. 2014-09-01 10:45:41 +00:00
hypnotoad 0ce217e309 Merging in changes from core. 2014-09-01 10:03:54 +00:00
hypnotoad d1536b7378 Tweaks to the Windows makefile. 2014-09-01 09:41:09 +00:00
hypnotoad eb664a3d72 Tweak the Windows implementation of Tcl_AppInit() to match Unix 2014-09-01 09:36:58 +00:00
jan.nijtmans ff7f3e14a6 merge trunk 2014-09-01 08:19:25 +00:00
jan.nijtmans 8964b0101f Combine TCL_SHLIB_LD_EXTRAS+TK_SHLIB_LD_EXTRAS (for Cygwin and FreeBSD) to a single SHLIB_LD_LIBS usable for both Tcl and Tk 2014-09-01 08:17:49 +00:00
jan.nijtmans 6d02d4e9dc Combine TCL_SHLIB_LD_EXTRAS+TK_SHLIB_LD_EXTRAS (for Cygwin and FreeBSD) to a single SHLIB_LD_LIBS usable for both Tcl and Tk. 2014-09-01 08:11:52 +00:00
hypnotoad 96dd5baf98 Adding the ability for the Tcl core to build self-contained Zip-based executables
* Integrated a pure-C implementation of ZipVfs
* Modified Tcl_AppInit() to look for a zipvfs mounted on the executable
2014-09-01 07:15:40 +00:00
dkf 2e512ffbe8 merge trunk 2014-08-30 08:30:00 +00:00
dgp 6e00c594ea Use TclpSys* macros, not direct system calls. 2014-08-29 17:33:06 +00:00
dkf 77e18bafa5 [b9e1a3032e] Implement the documented method search order for TclOO.
This corrects the relative positions of object-defined methods and class mixins.
2014-08-28 07:53:24 +00:00
jan.nijtmans 2d10a3d198 merge trunk 2014-08-27 20:58:30 +00:00
dgp bcdc8e8a6d merge release 2014-08-27 20:34:04 +00:00
dgp 7cd4eb1657 merge trunk; update changes 2014-08-25 21:43:21 +00:00
dgp a562752936 TIP 429 implementation. New command [string cat]. 2014-08-25 21:37:58 +00:00
dgp 46346effdc merge-mark 2014-08-25 15:40:01 +00:00
dgp 6c10f6324b merge release 2014-08-25 15:36:16 +00:00
dgp ae0f801eaf Do not let fossil README droppings leak into distribuion 2014-08-25 13:51:31 +00:00
dgp a9c6d78680 make dist allowed README-* fossil droppings to leak into the distribution. 2014-08-25 13:31:10 +00:00
dgp c44e7fcbe5 merge trunk 2014-08-24 17:50:36 +00:00
dgp dbacb46d52 Bump to zlib 2.0.1. 2014-08-22 22:11:13 +00:00
dgp 7ab1ebdc32 Bump to TclOO 1.0.2 2014-08-22 21:52:37 +00:00
dgp 3ca10397cf merge trunk; stamp release date. 2014-08-22 17:28:46 +00:00
dgp 13e336e4cd merge 8.5; fix notifier mask bug and Tcl_Read performance regression 2014-08-22 13:48:50 +00:00
dgp 80604a93c1 merge 8.5; stamp release date 2014-08-22 13:44:23 +00:00
dgp aa8f4d27ac Correct performance regression in a series of short binary reads from a
socket.  Many thanks to Eric Boudaillier for the report and testing support.
2014-08-22 13:23:04 +00:00
dgp b08dc28c80 Same results; simpler logic. 2014-08-22 13:20:21 +00:00
dgp 92f9aca55f Test fix for likely cause of reported I/O slowdown.
In a DoRead() revision, it came to favor making every effort to fill
buffers, in preference to a more sensible goal of favoring avoiding calls
out to the driver if there's already enough data in the buffers to satisfy
the read operation.  Result is many more calls out to recv() than are
a good idea.  Ought to show up most glaringly when many Tcl_Read() calls
asking for small numbers of bytes (compared to buffer size) each, and that
matches the reported case.
2014-08-21 23:07:34 +00:00
andreask ce04ed5ad3 Fix reviewed and accepted. 2014-08-20 18:59:31 +00:00
dgp eda831ff7e Make test io-36.1.1 more portable. 2014-08-20 18:40:07 +00:00
dgp bc9dca8ca6 Docs for Tcl_CreateChannelHandler() state that the registered handler proc
will be called back with a mask value. "Mask is an integer mask indicating
which of the requested conditions actually exists for the channel; it will
contain ***a subset of the bits from the mask argument*** to
Tcl_CreateChannelHandler when the handler was created." (emhpasis added).

Tcl_NotifyChannel is not honoring this.  It passes a mask value that may
contain bits not in common with the mask argument to T_CCH().

This commit is a one-liner patch adding in the masking step to make things
behave as documented.  Thanks to apn for digging this out.  (In combination
with other questionable code, this led to a hang in test http-4.6 on Windows)

Tcl_NotifyChannel() has had this error in all of recorded Tcl history.
It's hard to imagine any code dependent on it though.  If any exists, it
can be revised to pass the mask value it truly needs to T_CCH() and end up
with code suitable both before and after this change.

If you concur, please merge to core-8-5-branch, and I'll take it from there.
2014-08-20 17:50:41 +00:00
dgp f8a968fdb8 Additions to changes. 2014-08-20 14:28:36 +00:00
jan.nijtmans 72fee4f1c7 [74e073599e5e7c5eb535e2f60f1b06feb468eaae|74e073599e]: tclsh is using old style dialogs when Tk is loaded on Windows 2014-08-20 11:23:09 +00:00
jan.nijtmans 71f6f450b2 [74e073599e5e7c5eb535e2f60f1b06feb468eaae|74e073599e]: tclsh is using old style dialogs when Tk is loaded on Windows 2014-08-20 11:13:29 +00:00
ferrieux f2225b9dc1 merge trunk 2014-08-19 20:35:16 +00:00
dgp 344b547cd4 Update changes file. 2014-08-19 18:34:09 +00:00
dgp f19aaad970 merge trunk 2014-08-19 14:57:05 +00:00
dgp 60125626dc merge trunk 2014-08-19 13:39:19 +00:00
dgp 36c74f5033 Improved credit 2014-08-18 13:28:58 +00:00
dkf 02b159d09e [7d52e1101b] oo::object should know that oo::class is a subclass. 2014-08-17 15:23:49 +00:00
dgp d5113635d3 Reconcile changes file with 8.6.1. 2014-08-14 16:48:08 +00:00
dgp 7cfbfdffd3 merge 8.5 2014-08-14 16:36:44 +00:00
jan.nijtmans 6872b39b3f Merge trunk.
Remove (old and deprecated) SystemV timezone information.
2014-08-14 06:49:43 +00:00
jan.nijtmans a0e133cb07 Put back SystemV timezone files, which were removed in previous commit. Don't know if that was by accident, but seems unwise in a Tcl patch release. 2014-08-13 09:06:09 +00:00
jan.nijtmans e4a9f37030 Put back SystemV timezone files, which were removed in previous commit. Don't know if that was by accident, but seems unwise in a Tcl patch release. 2014-08-13 09:04:55 +00:00
dgp 459724f70a merge 8.5, update changes 2014-08-13 02:54:31 +00:00
Kevin B Kenny 7f8321b616 merge tzdata2014f from ietf.org 2014-08-13 01:45:39 +00:00
Kevin B Kenny ac5fa7c959 tzdata2014f from ietf.org 2014-08-13 01:42:17 +00:00
dgp 8c3d28816c Update changes file 2014-08-12 21:41:29 +00:00
dgp 13828f74ee merge 8.5 2014-08-12 15:51:06 +00:00
dgp 822b0d469e merge trunk 2014-08-12 15:47:20 +00:00
dgp 8755613114 merge-mark. Do not accommodate udp bugs in Tcl 8.6.2. 2014-08-12 15:46:20 +00:00
dgp c93483448e Accommodate the "udp" package, and any other Tcl package that expects a
[read] on a channel @ EOF to attempt another pass through the channel drivers
instead of immediately returning an empty string.  Correcting this misbehavior
appears too disruptive in a patch release to a long stable branch.
2014-08-12 15:28:09 +00:00
andreask 582c164dc3 Fixed type conversion warnings which break a Win32 debug build (MSVC). 2014-08-06 18:20:56 +00:00
ferrieux 91b9c5690e Fix comment inaccuracy. 2014-08-05 22:10:58 +00:00
ferrieux d544f36344 More aggressive constant folding in [string cat]. Thanks AndreasK for kicking. 2014-08-05 18:20:48 +00:00
ferrieux 796e087b9c Better organize [string cat] by chunks of 255 args. 2014-08-05 11:29:16 +00:00
ferrieux 76e87312ed Add constant folding to [string cat]. Mixed-quote idiom is now compiled to a single push. 2014-08-05 10:34:10 +00:00
ferrieux 5863c1e1b9 More optimized non-BC [string cat] using Tcl_AppendObjToObj() - thx Donal 2014-08-05 09:55:54 +00:00
ferrieux 50f00c62f2 Hum. Really merge trunk. 2014-08-04 14:06:13 +00:00
ferrieux 2918630e90 merge trunk 2014-08-04 14:02:53 +00:00
dgp 00ee522067 merge trunk 2014-08-04 13:37:22 +00:00
dgp 87724ab09f Add tclsh.exe.manifest.in to the distribution 2014-08-04 13:36:57 +00:00
dgp 43aaaf34e5 merge 8.5 2014-08-04 13:35:47 +00:00
dgp 67fcf44a82 Add tclsh.exe.manifest.in to the distribution. 2014-08-04 13:35:06 +00:00
dkf 239374cbb8 Tidy up the docs 2014-08-03 22:43:42 +00:00
Kevin B Kenny aa2667b729 merge trunk 2014-08-02 19:20:06 +00:00
ferrieux 25860d9071 Don't use [pid] in tests, stick to constant literals. 2014-08-02 15:26:46 +00:00
ferrieux 1cecac9cad TIP 429 Implementation: [string cat] 2014-08-02 13:04:16 +00:00
dgp 23b2b428b6 merge trunk 2014-08-02 04:38:36 +00:00
dgp 9c45b517dc Another Preserve/Release on channels is needed during IO finalization. 2014-08-02 04:36:39 +00:00
dgp f70b625cf3 merge 8.5 2014-08-02 04:29:41 +00:00
dgp 592bd0b065 Another Preserve/Release on channels is needed during IO finalization. 2014-08-02 04:25:27 +00:00
dgp f4f511dbae merge 8.5 2014-08-02 00:06:21 +00:00
andreask a3cfa0d708 Addition of a cast in tclWinFile.c to match types in a comparison, and
fix of a TRACE string literal in tclExecute.c with a bogus escape. Both
would otherwise bug a Windows debug build (where warnings are errors).
2014-08-01 20:07:40 +00:00
andreask 6563197fa8 Updated package "platform" to version 1.0.13. Separated the
identifiers "macosx*-i386-x86_64" and "macosx-universal" as
incompatible with each other.
2014-08-01 19:50:11 +00:00
dgp 08c2327777 merge-mark 2014-08-01 19:29:20 +00:00
andreask 0b7630c23f Updated package "platform" to version 1.0.13. Separated the
identifiers "macosx*-i386-x86_64" and "macosx-universal" as
incompatible with each other.

Plus addition of a cast in tclIO.c to match types in a comparison
which otherwise bugs a Windows debug build (warnings are errors).
2014-08-01 18:36:50 +00:00
dgp b425d2c241 merge trunk 2014-08-01 17:18:21 +00:00
dgp bd2e4fe97f merge 8.5 2014-08-01 17:17:24 +00:00
dgp bed95cfaf7 Backport the cheaper Preserve/Release on channels. 2014-08-01 17:16:35 +00:00
dgp a745e85067 [e75fabac06] Teardown line information after failed ensemble subcommand
compile attempts.  Copy/paste from CompileCmdCompileProc().  May be
refactor opportunity here.
2014-08-01 16:01:30 +00:00
dgp 232336fbee Correction and commentary in the details of ensemble compiling. 2014-08-01 14:36:30 +00:00
jan.nijtmans c62d8b25aa Fix part of [d19aef1487] (broken --disable-load on MacOSX), broken by [4d417791c9] 2014-07-31 21:23:45 +00:00
dgp 179c36fd48 merge trunk 2014-07-31 20:00:40 +00:00
dgp 5191ece516 [a84a720966] Protect against double free in TclOO classChainCache teardown. 2014-07-31 19:58:53 +00:00
dgp f1e1a92d13 merge trunk 2014-07-31 15:49:44 +00:00
jan.nijtmans fad7a0e23d merge trunk 2014-07-31 08:39:50 +00:00
dgp 6c55284908 [3757cdf808] More clock refactoring with spooky impact on [string match]
performance.
2014-07-30 16:41:24 +00:00
dgp fd5a54c8dd Complete transformation off Tcl_Preserve() legacy onto ref counting. 2014-07-30 02:58:27 +00:00
dgp d9ab63098e Reduce the cost of Preserve/Release on channels 2014-07-30 00:22:33 +00:00
dgp 2cbe892d48 [3757cdf808] Refactoring seems to reduce (maybe somewhat kinda sorta) a
bizarre performance regression.  Still not what it was.  Damn Heisenbugs.
2014-07-29 00:22:32 +00:00
dgp cfb0ea03ec Bump to 8.6.2 for release. 2014-07-28 14:50:06 +00:00
dgp 5ec61dacf7 merge 8.5 2014-07-28 12:53:19 +00:00
dgp c6eb718dfd An alternative implementation of [chan copy] that operates in precisely
those circumstances where the incumbent implementation is known to perform
a byte-for-byte copy from input channel to output channel.

In that case, the new implementation ceases the activity of copying every
byte from buffer to buffer to buffer to buffer to effect the copy.  Instead
it arranges for the very same buffer the input channel read driver read into
to be the buffer the output channel write driver writes out from.  No data
copying (or even examining) at all.  When the proper conditions apply, this
ought to be noticeably faster.
2014-07-28 02:06:53 +00:00
dgp a1bd6bc434 merge trunk 2014-07-28 01:53:01 +00:00
dgp 51be2107ea Revise MBRead() to be used in both sync and async modes. 2014-07-28 01:42:42 +00:00
dgp cf106cdda6 Push MBWrite() differences out to callers. 2014-07-27 22:53:01 +00:00
jan.nijtmans e98326383b merge-mark 2014-07-27 22:47:48 +00:00
jan.nijtmans 1db9d005b6 correct EOLFIX macro, broken by [a803608ed5] 2014-07-27 22:44:36 +00:00
dgp 3eb6318d9b Rework MBWrite() so it can be used in both sync and async modes.
Reduce code duplication.
2014-07-27 17:20:32 +00:00
dgp 19d6bd367d Use common MBError() routine for sync and async operations. 2014-07-26 15:44:32 +00:00
dgp 7f4563705c Extend the "move buffer" implementation to cover the async case. 2014-07-26 15:02:09 +00:00
dgp b627af851c merge trunk 2014-07-24 17:19:28 +00:00
dgp ef647d7ccd [9d19af7adb] Make sure all timer events get canceled. 2014-07-24 17:17:41 +00:00
dgp 0a9367fbc9 simplify moveBytes selection logic 2014-07-24 15:34:05 +00:00
dgp 841ecebfa5 Make sure MoveBytes error reporting reproduces what CopyData does. Bugward compatibility! 2014-07-24 15:24:11 +00:00
dgp b3bdbd342b merge trunk 2014-07-24 15:17:55 +00:00
dgp bfe912517c Test format of write error messages during binary [chan copy] 2014-07-24 15:17:19 +00:00
dgp 97d74c549d Make sure MoveBytes records read error messages. 2014-07-24 15:02:09 +00:00
dgp 595290e064 merge trunk 2014-07-24 15:01:16 +00:00
dgp 631849ea86 Test read error during binary [chan copy]. 2014-07-24 15:00:07 +00:00
dgp 213c040089 Extend the buffer move optimization to the "same encodings" case. 2014-07-23 17:10:26 +00:00
dgp 0bc839ec64 Revert the EOLFIX changes of checkin [a803608ed5] (2013-10-28).
They do not work on the one machine where they must -- the release managers!
Appears that the NATIVE_TCLSH support isn't found on the 8.5 branch, so we
shouldn't expect to use it.
2014-07-23 13:10:34 +00:00
dgp 72c15c0c4e Bump to 8.5.16 for release. 2014-07-23 12:26:21 +00:00
dgp df7b610caf merge trunk 2014-07-22 20:27:59 +00:00
dgp 2ad2aba317 Workaround [info frame] troubles with -singleproc 1 testing operations. 2014-07-22 19:57:51 +00:00
dgp 5eaa219754 Avoid [thread::exit]; Using it leads to memleaks. 2014-07-22 18:12:27 +00:00
dgp 2c10c359b5 [12b0997ce7] Plug memleak in iocmd.tf-32.0 . 2014-07-22 17:04:15 +00:00
dgp bfab4c718b [12b0997ce7] Plug memleak in iocmd.tf-32.0 . 2014-07-22 16:44:38 +00:00
dgp d19b7190cb [e6477e1b0f] Plug memleak in AtForkChild() detected in iocmd-11.4. 2014-07-21 14:26:56 +00:00
dgp 97d610fbfe [75b8433707] Revised fix for memleak in oo instance list management. 2014-07-19 16:35:59 +00:00
dkf 4e4b5a7e53 [75b8433707] Plug a subtle memory leak in TclOO.
Test suite very unhappy with this.  Shoving into
a mistake branch until that's sorted.
2014-07-18 22:05:16 +00:00
dkf 6cd3ffa246 [b43f2b49f7] New compilation strategy for lappend that allows multi-value
lappend to not have quadratic performance (through better reference management).
2014-07-18 12:18:44 +00:00
jan.nijtmans da7cc28446 Make sure the "sockettest" command is available even when running socket.test individually. 2014-07-18 10:00:52 +00:00
jan.nijtmans e6e391530f merge trunk 2014-07-18 07:32:43 +00:00
jan.nijtmans 8872d2406c merge trunk 2014-07-17 20:37:00 +00:00
jan.nijtmans d2d54ff3de Finally, use correct octal notation which works in Tcl 9 as well. 2014-07-17 18:43:55 +00:00
jan.nijtmans eaf423b505 merge fork 2014-07-17 17:52:27 +00:00
dgp f345a78f27 Revised fix for memleak in [info frame]. Still pretty ugly, but not more
so than a lot of TIP 280 machinery.
2014-07-17 15:48:59 +00:00
jan.nijtmans 5203cce0e0 Convert TesteventloopCmd and TestchmodCmd to Tcl_Obj-API form. 2014-07-17 15:15:28 +00:00
jan.nijtmans f07fe1c911 Make sure that all "testchmod" arguments start with '0', making it more obvious that the value is octal.
dgp: Isn't the better way to make it obvious the values
are octal to use the explicit octal notation?

For example, [testchmod 0o777 $path] ?

Really seems like a bad idea to me to introduce *more*
incompatibilities for the planned conversion for 
having the value 0777 stop meaning 255 and start
meaning 777 in Tcl 9.

Answer (Jan). You guessed exactly what's my follow-up plan. This was an intermediate step which keeps all test-cases running.
2014-07-17 14:08:30 +00:00
jan.nijtmans 7571df843a Fix [3cdcfa40809ffd2b9d3d71f77dc57da615243730|3cdcfa4080]: tclWinFile.c does not compile with Win VC6 2014-07-17 11:02:03 +00:00
oehhar a0256cda63 Replaced option "-unsupported1" by test command "testsocket debugflags" (thanks Donal, Donald). 2014-07-17 09:53:36 +00:00
jan.nijtmans f7c255fa17 Convert some non-ASCII characters in testcase comments - which were mangled by my editor in [79ace7b793] - to valid UTF-8: This way my editor will not mangle them again, and fossil will show in the UI which characters are supposed to be there. 2014-07-17 07:39:00 +00:00
dgp 07d1de7a4f [9969cf8ca6] Move the bailout when the ->rewind flag is set down after all
the housekeeping matters tearing down frames (trace data) is complete.
2014-07-17 04:24:23 +00:00
dgp d586b47d44 Backout checkin that broke test io-39.1. 2014-07-16 23:58:54 +00:00
dgp b58f928be5 Repair improper assertion. 2014-07-16 22:01:57 +00:00
dgp 6f05041d3f Assert an equality test, not an assignment 2014-07-16 21:48:18 +00:00
dgp 0d27a4b905 Assert an equality test, not an assignment. 2014-07-16 21:46:30 +00:00
dgp 4870917293 [6a2d339e50] Plug memleak in INST_STR_REPLACE instruction. 2014-07-16 15:59:00 +00:00
jan.nijtmans 1797998aed Modify the "gettimes" test-command to use the Tcl_Obj API.
New "testbytestring" command which can be used to replace the (to-be-deprecated) "bytestring" command from tcltest and/or the "indentity" encoding. 
Adapt many testcases to use the "testbytestring" command.
2014-07-16 10:02:02 +00:00
dgp 0fac79a0fb [726349fab8] Stop leaking compression dictionary on zlib xform channel close. 2014-07-15 15:10:32 +00:00
dgp 8825fb59d7 Suppress valgrind warnings about uninitialized values. 2014-07-11 20:40:24 +00:00
dgp 5af71fcbff [1211aceef2] Fix refcount management of TclpTempFileName() that caused leak. 2014-07-11 18:20:42 +00:00
dgp 431189b805 [9b352768e6] Plug memleak in INST_DICT_FIRST. 2014-07-11 15:44:42 +00:00
dgp 4822b65c03 Stop memleak in [info frame]. 2014-07-11 12:56:16 +00:00
jan.nijtmans b58baa4ff6 Starting with Unicode 6.3, the mongolian vowel separator (U+180e) is no longer a whitespace, but for Tcl it still is.
Update documentation accordingly, and extend test-cases for Unicode 7 compliance.
2014-07-11 10:43:15 +00:00
jan.nijtmans 0a0d095f20 Starting with Unicode 6.3, the mongolian vowel separator (U+180e) is no longer a whitespace, but for Tcl it still is.
"NEL/Next Line" (U+0085) should have been a Unicode whitespace, but never was in Tcl. This is corrected in Tcl 8.6, but for legacy reasons not in Tcl 8.5.
Update documentation accordingly, and extend test-cases for Unicode 7 compliance.
2014-07-11 10:38:55 +00:00
dgp dbed3f8089 [3479689] Plug memory leak due to incomplete bug fix. 2014-07-11 04:49:49 +00:00
dgp d6605e9057 makeFile / removeFile balance. 2014-07-10 18:17:28 +00:00
dgp 0992240c65 makeFile / removeFile balance 2014-07-10 18:11:39 +00:00
dgp 0e96637923 dup test name 2014-07-10 18:02:45 +00:00
dgp 8fd7a48012 dup test name 2014-07-10 18:00:42 +00:00
dgp b406c00842 [f652ae79ed] Close sockets used in tests, so as not to corrupt other
tests in the suite.
2014-07-10 17:21:23 +00:00
dgp 31eb3eebb7 [7368d225a6] Extend the auto-cleanup of zero ref count values passed in to
the Tcl_*SetVar*() family of routines to cover the missing case where the
flags value of TCL_APPEND_VALUE is passed in alone.
*** POTENTIAL INCOMAPTIBILITY***
2014-07-10 16:40:30 +00:00
dgp b81d871afb [7368d225a6] Extend the auto-cleanup of zero ref count values passed in
to the Tcl_*SetVar*() family of routines to cover the missing case where
the flags value of TCL_APPEND_VALUE is passed in alone.
*** POTENTIAL INCOMAPTIBILITY***
2014-07-10 15:45:32 +00:00
jan.nijtmans 18eed1d727 merge trunk 2014-07-10 14:23:25 +00:00
dgp cf1f2fb61e Repair buffer indexing error in Tcl_ReadRaw(). 2014-07-10 12:59:24 +00:00
dgp 61f8119019 Repair buffer indexing error in Tcl_ReadRaw() exposed by iogt-6.0 and valgrind. 2014-07-10 12:52:10 +00:00
jan.nijtmans a072994389 Don't use Tcl_GetCommandInfo when Tcl_FindCommand suffices. 2014-07-09 18:49:38 +00:00
dgp da31ff7eb8 First draft of using buffer moves in place of buffer copies to create an
efficient [chan copy].
2014-07-09 14:44:13 +00:00
dgp d5ffff6214 The write and flush operations of reflected transforms ([chan push]) have
been converting all lower level channel errors from Tcl_WriteRaw() into
EINVAL.  Generally this is a perplexing discard of useful information, but
worse it interferes with the EAGAIN signalling that is required to manage
the BLOCKED state of a nonblocking channel.  Thanks to aspect for demo
scripts that pointed to the bug.
2014-07-08 13:45:09 +00:00
jan.nijtmans 8ebd51d17f merge trunk 2014-07-04 12:51:17 +00:00
jan.nijtmans e1b54e0e11 Update Unicode tables to Unicode 7.0 2014-07-04 12:49:40 +00:00
jan.nijtmans 53df9e36da Update Unicode tables to Unicode 7.0 2014-07-04 12:47:21 +00:00
dgp 8d68951021 Clarify http::config and http::geturl -headers roles in setting request headers. 2014-07-02 20:22:43 +00:00
dgp 4b4b642fe6 [c31ca233ca] Fix TclGetsObjBinary() so that each [gets] rediscovers whether
a nonblocking channel is blocked.
2014-07-02 16:30:41 +00:00
dgp 0cf246c174 [c31ca233ca] Fix TclGetsObjBinary() so that each [gets] rediscovers whether
a nonblocking channel is blocked.
2014-07-02 16:20:30 +00:00
Kevin B Kenny 0bab3624a9 merge trunk 2014-06-29 02:20:31 +00:00
dgp ee896008d0 Fix mismatch of Tcl_Preserve() / Tcl_Release(). 2014-06-26 16:01:05 +00:00
dgp 6bc046c0bc Fix mismatch of Tcl_Preserve() / Tcl_Release(). 2014-06-26 15:59:27 +00:00
dgp 58f92b6316 Simplify / refactor Tcl_ReadRaw(). No need for CopyBuffer(). 2014-06-24 16:46:12 +00:00
dgp ddeb3ab35c Simplify / refactor Tcl_ReadRaw(). No need for CopyBuffer(). 2014-06-24 16:34:05 +00:00
jan.nijtmans 0d9a8edf22 Fix execute-6.5 test failure on trunk: the "preserveCore" part of tcltest::test assumes that the cleanup is done first, so moving the cleanup means the the "preserverCore" part needs to move with it. 2014-06-23 12:49:41 +00:00
jan.nijtmans 6ab9c80ea1 Fix execute-6.5 test failure on trunk: the "preserveCore" part of tcltest::test assumes that the cleanup is done first, so moving the cleanup means the the "preserverCore" part needs to move with it. 2014-06-23 12:48:16 +00:00
jan.nijtmans aa6f0b1cab ticket [2f9df4c4fa]: tcltest - request to move -cleanup script execution until after -output compare.
tcltest -> version 2.3.8
2014-06-22 16:17:12 +00:00
jan.nijtmans c7510fa5b9 ticket [2f9df4c4fa]: tcltest - request to move -cleanup script execution until after -output compare
tcltest -> version 2.3.8
2014-06-22 16:15:43 +00:00
jan.nijtmans 19fb52deac merge trunk 2014-06-20 20:00:10 +00:00
aku 3cd11c535e [b47b176adf] Stop possible segfaults when variability in mutex lock
schedules cause a ForwardingResult to remain on the forwardList after
it has been processed (IORChan is the origin of the code in IORTrans).
2014-06-20 05:14:43 +00:00
dgp 7834f2fe96 [b47b176adf] Stop segfault when variability in mutex lock schedules cause
a ForwardingResult to remain on the forwardList after it has been
processed.
2014-06-19 16:38:33 +00:00
dkf 7bde946742 [f0f876c141] Improve consistency in error messages. 2014-06-17 14:30:06 +00:00
dgp fce6982a3e [1758a0b603] socket_*-2.13 : Workaround the broken select() in some Linux
kernels that fails to report a writable state on a socket when an error
condition (or remote close) is present.
2014-06-16 13:38:26 +00:00
jan.nijtmans c4af5fcc1b merge trunk 2014-06-16 12:40:24 +00:00
dgp 908fc261b6 merge socket test from 8.5 2014-06-16 12:19:30 +00:00
dkf ab6933ef6b [311e61d12a] Generate error code in *all* places where commands are looked up. 2014-06-16 09:24:39 +00:00
dkf c20374dfa6 [cb042d294e] Improve consistency of [dict] wrong-args error messages. 2014-06-15 16:50:32 +00:00
dkf 5f82234293 [1b0266d8bb] Make [dict replace] and [dict remove] have canonicalization semantics close to [lrange] and [lreplace]. [dict merge] is also improved, but is not as strict. 2014-06-15 16:14:18 +00:00
dkf 17751a998c Some more cleaning up 2014-06-15 16:11:56 +00:00
dkf 08d9096362 Make [dict replace] and [dict remove] guarantee result canonicality. 2014-06-15 07:52:57 +00:00
dkf 6a99b9a546 Improved the error messages.
We do not want parsing an invalid dictionary to give errors about lists!
As compensation, we get greater precision in the errorcode.
2014-06-07 14:18:40 +00:00
dkf e5104aa3dc merge trunk 2014-06-06 08:47:28 +00:00
dkf fae85d1af5 merge trunk 2014-06-06 08:46:58 +00:00
dgp bb40f1cd2c Tests socket*-2.12 test for DiscardOutput() updates. 2014-06-05 19:13:09 +00:00
oehhar 85daeb5e16 Robust async connect tests by temporarely switching off auto continuation. Ticket [13d3af3ad5] 2014-06-05 19:09:51 +00:00
dgp b4cc0cbac8 When too many chars are read by ReadChars() and we trim the limits to get it right on the next pass, don't forget the TCL_UTF_MAX padding demanded by Tcl_ExternalToUtf(). (Thanks for finding that, aku!) Fix the factorPtr management. It was just totaly wrong. The factor should be a ratio of the record of bytes read to the record of chars read. With those fixes, new test io-12.6 covers the "too many chars" code. 2014-06-05 15:20:59 +00:00
andy 45fd54872f Add missing calls to Tcl_DecrRefCount() in string object man page examples. 2014-06-04 21:45:29 +00:00
dgp cb1e14e0eb Revise DiscardOutput() to account for revisions to the loop in FlushChannel() which is its only caller. We need to discard the curOutPtr buffer as well, and not count on another pass through the loop to attempt to flush it (and raise the same failure again?). 2014-06-04 16:42:21 +00:00
dkf 6a91e192f8 more tests, cleaning up the code a bit 2014-06-04 08:15:26 +00:00
dgp 3334cf2103 Valgrind doesn't like use of uninitialized variables. 2014-06-04 03:25:44 +00:00
dgp 2691f4b9a9 [734138ded8] Revisions so that unreported errors don't get lost during
the close of a channel.
2014-06-03 17:47:23 +00:00
dkf 1e37d8beb0 merge trunk 2014-06-03 08:13:58 +00:00
dkf 10caa9b482 [1b0266d8bb] Working towards ensuring that all dict operations are sufficiently strict. 2014-06-03 07:26:11 +00:00
jan.nijtmans 7b59202f3a merge trunk 2014-05-23 15:08:45 +00:00
dgp dd743368ee merge trunk 2014-05-16 15:33:05 +00:00
jan.nijtmans 0706ebeb7b merge trunk 2014-05-09 13:50:41 +00:00
jan.nijtmans d7b8af55e7 int -> size_t for hash tables 2014-05-02 07:39:44 +00:00
jan.nijtmans e338d72a45 merge novem 2014-05-02 07:15:49 +00:00
jan.nijtmans ccc37a9193 Update Unicode tables to Unicode 7.0 beta 2014-05-02 06:58:21 +00:00
jan.nijtmans fa235831f2 merge trunk 2014-05-01 15:16:37 +00:00
jan.nijtmans ce72e40607 Merge trunk.
Update Unicode tables to Unicode 7.0 beta.
2014-05-01 09:40:52 +00:00
jan.nijtmans 3ae9b2df5c merge trunk 2014-04-16 18:53:55 +00:00
jan.nijtmans 7c00be9c38 merge trunk 2014-04-16 11:21:58 +00:00
jan.nijtmans f0f432af92 merge trunk.
Remove (internal) functions TclWinGetServByName(), TclWinGetSockOpt() and TclWinSetSockOpt(), which are no longer needed for any purpose.
2014-04-16 11:06:19 +00:00
jan.nijtmans c4700cbf6d merge trunk 2014-04-15 10:46:23 +00:00
jan.nijtmans e8b298cf5d merge trunk 2014-04-07 14:56:30 +00:00
jan.nijtmans 8a09097741 merge trunk 2014-03-31 18:47:26 +00:00
jan.nijtmans 9d05820f02 merge trunk 2014-03-20 10:14:32 +00:00
jan.nijtmans 001ceafb23 merge trunk 2014-03-09 21:58:51 +00:00
jan.nijtmans c97a430827 merge-mark 2014-02-26 13:18:07 +00:00
jan.nijtmans 67072c3d47 merge trunk 2014-02-25 15:59:46 +00:00
jan.nijtmans 20deebc218 merge trunk 2014-02-25 08:32:55 +00:00
jan.nijtmans 129cc066e9 merge trunk 2014-02-21 20:08:47 +00:00
jan.nijtmans 92f89ecbb5 merge trunk 2014-02-18 09:56:16 +00:00
jan.nijtmans 6d62578bd3 Merge trunk 2014-02-11 11:13:41 +00:00
dkf c0726f8f4f merge trunk 2014-02-08 07:54:21 +00:00
dkf 39ddd8c91b improve the testing of the disassembly commands 2014-02-08 07:54:04 +00:00
dkf d69c1d382b merge trunk 2014-02-08 07:41:17 +00:00
jan.nijtmans 6c766bfaa3 merge trunk 2014-02-06 22:10:55 +00:00
dkf 14b32b82e1 merge trunk 2014-02-04 09:09:06 +00:00
dkf 3f60452ac2 merge trunk 2014-02-03 22:29:31 +00:00
jan.nijtmans 4e8387e36a merge trunk 2014-02-03 15:29:09 +00:00
jan.nijtmans 16ae2d2ae8 merge trunk 2014-02-03 09:53:42 +00:00
jan.nijtmans 88600c03a3 merge trunk 2014-01-31 09:26:33 +00:00
jan.nijtmans f53221ce41 merge trunk 2014-01-25 21:42:16 +00:00
jan.nijtmans 0b63acf914 merge trunk 2014-01-23 23:12:48 +00:00
dkf 75b361386e merge trunk 2014-01-09 21:20:23 +00:00
jan.nijtmans 5191cbbfe2 merge trunk 2014-01-02 17:05:45 +00:00
jan.nijtmans ee2dd7eabb merge trunk 2014-01-01 12:36:14 +00:00
jan.nijtmans 3da68f9953 merge trunk 2013-12-20 08:18:32 +00:00
jan.nijtmans 567da05efa merge trunk 2013-12-19 12:21:25 +00:00
jan.nijtmans 882735641e merge trunk 2013-12-15 21:28:13 +00:00
jan.nijtmans 4032f9d4dc Take over "changes" and "doc/file.n" from trunk, it should have been merged to "novem" already. 2013-11-25 13:02:54 +00:00
jan.nijtmans a8fdebc1eb Don't depend on TCLAPI to be defined in <tcl.h>. If this tclOODecls.h is ever installed in an Tcl 8.x environment, it still will be usable normally. 2013-11-25 12:39:27 +00:00
jan.nijtmans 0f29d005d6 merge trunk 2013-11-24 22:12:57 +00:00
jan.nijtmans c98fcd0e26 merge trunk 2013-11-13 22:18:33 +00:00
jan.nijtmans 8615597984 rebase TIP [http://tip.tcl.tk/425|425] implementation 2013-11-08 14:57:44 +00:00
jan.nijtmans 1800d11520 Merge trunk (order of man.macros inclusion).
Simplify TCLAPI definition: Since there are extern "C" guards around all TCLAPI usage, the definition itself doesn't need special C++ handling any more.
2013-11-08 14:38:58 +00:00
jan.nijtmans e0080d92e3 merge trunk 2013-11-04 10:26:36 +00:00
jan.nijtmans 09152d341c merge trunk 2013-10-29 13:25:18 +00:00
jan.nijtmans d5553abfbd merge trunk 2013-10-27 12:55:20 +00:00
jan.nijtmans 9255d52d01 Prevent tclOOIntStubs from being exported from the shared library. 2013-10-17 11:22:47 +00:00
jan.nijtmans e8ca755d06 merge trunk 2013-10-17 09:48:16 +00:00
jan.nijtmans 4e40c57d05 Eliminate TclOOInitializeStubs() completely. This fixes [dfc08326e3], at least the TclOOInitializeStubs() surprise part of it.
Further refactoring is possible, eliminating tclOOStubsPtr and/or tclOOIntStubsPtr. A discussion about that is opened on the Tcl Core List. 
This is fully source compatible for TclOO extensions (e.g. Itcl, tdbc) but binary incompatible. 
TODO: update documentation, but that can wait until the refactoring is complete.
2013-10-17 09:00:02 +00:00
jan.nijtmans 8598cdcc02 merge trunk 2013-10-16 05:09:58 +00:00
jan.nijtmans 77f21ce1db merge trunk 2013-10-14 08:36:43 +00:00
jan.nijtmans 9ad2ec38c8 Fix definition of TCLAPI macro, when Tcl header files are used from within C++. 2013-10-13 17:22:28 +00:00
jan.nijtmans 92258c44a5 The Tcl 9.0 way of how [dfc08326e3] should be fixed: Real integration of TclOO in Tcl means that calling the function Tcl_OOInitStubs() should be elminated in full. This branch shows how to do that. 2013-10-13 16:19:44 +00:00
jan.nijtmans 4434155b9f Add note to ChangeLog, copied from Tcl 8.6 ChangeLog note 2013-10-13 15:32:46 +00:00
jan.nijtmans fdb028ce1c merge trunk 2013-10-13 11:02:12 +00:00
jan.nijtmans 23cb83fe47 merge trunk 2013-10-10 14:37:24 +00:00
jan.nijtmans 0c31f565ad merge-mark (novem already had the Unicode 6.3 tables) 2013-10-09 22:04:38 +00:00
jan.nijtmans 1feb781a45 Merge trunk.
Remove obsolete lines in tclOO*Decls.h: TCL_STORAGE_CLASS is not used anywhere in "novem" any more.
2013-10-08 11:58:49 +00:00
Kevin B Kenny befe4b839e Merge trunk. Restore buildability by adding 'scspec TCLAPI' in tclOOInt.decls. 2013-10-05 16:44:05 +00:00
jan.nijtmans d10266cfa8 merge trunk 2013-10-02 08:17:25 +00:00
jan.nijtmans 355c9fe5f3 merge trunk 2013-09-30 14:08:32 +00:00
jan.nijtmans 1b3fcbabc3 merge trunk 2013-09-30 09:44:29 +00:00
jan.nijtmans 0fbbfd7f67 merge trunk 2013-09-30 08:31:37 +00:00
jan.nijtmans 967a775c5a merge trunk 2013-09-27 17:39:26 +00:00
dkf f3dba34e63 merge trunk 2013-09-26 16:32:21 +00:00
jan.nijtmans 5cb61b0493 merge trunk 2013-09-26 14:28:50 +00:00
jan.nijtmans a1fe1358f3 merge trunk 2013-09-23 20:04:54 +00:00
dgp 7b975975f2 merge trunk 2013-09-21 12:49:59 +00:00
dkf 36a7db47de merge trunk 2013-09-20 13:02:29 +00:00
dkf 97323cd8a0 merge trunk 2013-08-22 07:09:21 +00:00
jan.nijtmans a333bbaa12 rebase TIP [http://tip.tcl.tk/425|425] implementation 2013-08-19 09:10:36 +00:00
jan.nijtmans cab7c54e3a merge trunk 2013-08-14 14:40:40 +00:00
jan.nijtmans f218f909ad restore all #ifdef TCL_WIDE_INT_IS_LONG, which were accidently removed in [19ff9b95e1] 2013-08-14 14:15:36 +00:00
dgp d0e9f9dade [0aa8f12dcc] Restore minimum code to stop failing tests. 2013-08-13 19:26:35 +00:00
jan.nijtmans 2bc847ac57 rebase 2013-08-11 15:19:42 +00:00
dkf 24197ad684 merge trunk 2013-08-08 20:19:42 +00:00
dgp 92323ee89f merge trunk 2013-08-05 14:47:27 +00:00
jan.nijtmans 876ca8cbf3 merge trunk 2013-08-02 10:33:28 +00:00
dkf 0f2d93b3a6 merge trunk 2013-08-01 13:40:45 +00:00
dkf f96b9f2783 And documentation 2013-08-01 13:27:37 +00:00
dkf f370c68d92 Support type discovery in coroutines. 2013-08-01 13:21:04 +00:00
dkf f8e147cb73 Improving the test suite for [info cmdtype]. 2013-08-01 06:44:24 +00:00
dkf ceb88b82f1 merge trunk 2013-07-31 20:05:00 +00:00
dkf a6c0992f47 Added tests 2013-07-31 20:03:43 +00:00
jan.nijtmans 9283692888 rebase 2013-07-29 10:51:05 +00:00
dkf 9acc153698 merge trunk 2013-07-26 13:30:31 +00:00
jan.nijtmans 017b8b10b6 Fix Cygwin build: put Tcl_ConsolePanic in the stub library, not the dll. 2013-07-24 14:14:34 +00:00
jan.nijtmans 4ddfe70ae2 implement for Cygwin as well 2013-07-23 12:42:52 +00:00
jan.nijtmans 53dc25e532 Add documentation 2013-07-23 11:54:49 +00:00
jan.nijtmans 542b57cf21 rebase 2013-07-23 10:57:22 +00:00
jan.nijtmans 827e43bd24 merge trunk 2013-07-23 09:49:01 +00:00
dkf afd4d17b3c Changed subcommand name following community feedback. 2013-07-16 14:12:40 +00:00
dkf 82132b6c4c Some documentation. 2013-07-10 13:45:52 +00:00
jan.nijtmans 68065e88cd Unbreak MSVC6 debug build (thanks Andreas Kupries!) 2013-07-08 18:56:51 +00:00
jan.nijtmans 783f9f4aad Merge stwo's fork and trunk back to a single "novem". 2013-07-08 07:20:09 +00:00
dkf 8fa124afba merge trunk 2013-07-07 11:57:55 +00:00
dkf 21d8621d11 Added a mechanism for discovering the "type" of a command. 2013-07-07 11:15:08 +00:00
stwo 2f4d9112d2 OpenBSD/m88k is now elf. Remove unneeded elf check. 2013-07-07 01:09:10 +00:00
Kevin B Kenny 109789c175 merge http://www.iana.org/time-zones/repository/releases/tzdata2013d.tar.gz 2013-07-06 22:33:54 +00:00
jan.nijtmans 210e123b07 merge-mark 2013-07-05 14:06:36 +00:00
jan.nijtmans 343300e7ed merge trunk 2013-07-04 19:33:54 +00:00
jan.nijtmans c2e6c5ebc3 merge trunk.
Remove Tcl_SetPanicProc from stub table; it is meant to be called by embedders, before the stub table is even initialized.
2013-06-27 09:53:04 +00:00
jan.nijtmans e36fd891e4 rebase 2013-06-27 09:07:04 +00:00
jan.nijtmans 954b241f34 rebase 2013-06-26 08:23:31 +00:00
jan.nijtmans 0a4fd3940a merge trunk 2013-06-25 12:07:45 +00:00
jan.nijtmans 901190e2cb Merge trunk.
Remove TclpReaddir and TclpInetNtoa from internal stub table: It's not used anywhere any more.
2013-06-21 12:13:52 +00:00
dkf df623b6abe Properly encode more operand types to reduce the number of special cases in the disassembler. 2013-06-20 11:05:20 +00:00
dkf 3ef97fba38 merge trunk 2013-06-19 22:46:10 +00:00
jan.nijtmans 89ec383cdc Update Unicode tables to latest 6.3 beta version 2013-06-18 13:59:30 +00:00
jan.nijtmans f038b7fc3d merge trunk 2013-06-18 13:46:12 +00:00
jan.nijtmans d2b087ebf8 merge trunk 2013-06-18 11:50:02 +00:00
jan.nijtmans 3f56494834 rebase 2013-06-18 09:52:53 +00:00
dkf a261f7d413 Remove extra scribblings not normally needed. Thanks to jdc for suggestion. 2013-06-17 14:04:28 +00:00
jan.nijtmans 6a811b97b9 rebase 2013-06-14 11:21:00 +00:00
dkf 50cc521ee3 Improved rendering of some opcode arguments and auxdata. 2013-06-13 21:21:22 +00:00
dkf 48205fa50d merge trunk 2013-06-13 08:31:24 +00:00
jan.nijtmans a9efa6f602 merge trunk (except for disabled MSVC warnings, see [48b92a6ab6]) 2013-06-12 10:35:08 +00:00
dkf 9fb06ec1c9 Extract more of the info from the bytecode. 2013-06-12 08:55:15 +00:00
dkf f9e188bad3 merge trunk 2013-06-11 21:40:51 +00:00
dkf 6b65756937 Code-readable disassembler: tcl::unsupported::getbytecode 2013-06-11 21:33:33 +00:00
dkf a74538b064 merge trunk 2013-06-11 08:34:09 +00:00
dkf 55787f4f08 Move the disassembler to its own file. 2013-06-11 08:19:56 +00:00
jan.nijtmans 33d091ecac merge trunk 2013-06-10 07:41:52 +00:00
jan.nijtmans 30dbc0a75b Update Unicode tables to Unicode 6.3 beta.
Merge trunk
2013-06-10 07:36:47 +00:00
dkf 0d59c187fe merge trunk 2013-06-09 17:38:20 +00:00
dkf 4d2add8f0f merge trunk 2013-06-08 13:42:46 +00:00
jan.nijtmans 1900da6d24 rebase 2013-06-07 13:22:20 +00:00
jan.nijtmans 8f38d12eee TIP #414 implementation 2013-06-04 08:34:32 +00:00
jan.nijtmans e73451abd4 merge trunk 2013-05-28 07:25:32 +00:00
jan.nijtmans 3db39eda8a merge trunk 2013-05-19 20:44:36 +00:00
jan.nijtmans 3f5f45f002 fix directory where tclWinPanic.c resides 2013-05-17 14:09:20 +00:00
jan.nijtmans daa073ebb1 merge trunk 2013-05-17 13:49:39 +00:00
jan.nijtmans e6528cb48d rebase 2013-05-17 07:36:01 +00:00
jan.nijtmans d6392f7a28 merge trunk 2013-05-15 11:03:41 +00:00
jan.nijtmans ff0eb26d90 merge trunk 2013-05-15 10:42:38 +00:00
jan.nijtmans 5a73cd05de merge trunk 2013-05-13 19:30:16 +00:00
jan.nijtmans 2914b6fbc0 merge trunk.
Add back Tcl_AddErrorInfo to stub table (it's still used by Tk 8.6)
2013-05-13 15:17:36 +00:00
jan.nijtmans 8cd35a3b77 merge trunk.
remove some unneeded #undef's
2013-05-07 15:02:20 +00:00
jan.nijtmans d96b2343b0 Change Tcl_UtfNcmp and friend's signature to use size_t in stead of unsigned long.
This is potentially binary incompatible on win64, but not on any other platform. 
It eliminates the need for special stub-wrappers on Cygwin64 for those functions. 
"novem" doesn't promise binary compatibility anyway.
2013-05-06 09:08:45 +00:00
jan.nijtmans 936ef06e82 merge trunk 2013-05-06 07:35:05 +00:00
jan.nijtmans 710249fe7f Eliminate use of NO_WIDE_TYPE everywhere: It's exactly the same as TCL_WIDE_INT_IS_LONG 2013-04-23 14:38:52 +00:00
jan.nijtmans f292911c6d Revert part of [bb4707eb077f0cd9], which removed Tcl_NewIntObj, Tcl_SetIntObj, Tcl_NewBooleanObj, Tcl_DbNewBooleanObj and Tcl_SetBooleanObj from the stub table and replaced those by macros. Add those functions back were they were. Reason: the upcoming cygwin64 will change the definition of 'long', I'm not sure any more this was a good idea. More investigation needed before doing something like this in "novem". 2013-04-21 21:01:26 +00:00
jan.nijtmans 659d602deb merge-mark 2013-04-19 09:49:33 +00:00
jan.nijtmans 5eabb6fcd1 merge trunk 2013-04-12 11:31:30 +00:00
jan.nijtmans 041184928d rebase 2013-04-11 15:10:36 +00:00
jan.nijtmans b108063f75 rebase 2013-04-11 10:18:15 +00:00
jan.nijtmans 978afd0260 merge-mark 2013-04-04 07:10:19 +00:00
jan.nijtmans 9ce336b3d1 rebase 2013-04-03 21:24:39 +00:00
jan.nijtmans b5da760544 rebase 2013-04-03 21:07:40 +00:00
jan.nijtmans 976650bbd1 merge trunk 2013-04-03 20:55:12 +00:00
jan.nijtmans 7e520e2089 rebase
increase limit to 26000 characters
2013-04-03 13:12:14 +00:00
jan.nijtmans 07af7d5337 better comments 2013-04-03 12:38:46 +00:00
jan.nijtmans 696a9ba3f9 Use Tcl_InitSubsystems in Tcl_Main macro 2013-04-01 21:48:51 +00:00
jan.nijtmans 9db6776dbe initsubsystems 2013-04-01 16:45:36 +00:00
jan.nijtmans 1c6a242b2e 2 lines not used any more 2013-03-31 22:09:40 +00:00
jan.nijtmans a58db736cf Fix Tcl_Main macro 2013-03-31 20:27:33 +00:00
jan.nijtmans 449ea43718 Going forward trying to define a better Tcl_InitStubsystems() 2013-03-31 20:17:46 +00:00
jan.nijtmans 260c2634b9 better leave tclPanic.c as it was 2013-03-31 19:32:57 +00:00
jan.nijtmans 6d0db57c02 Better Windows console panic proc, still to be TIPped. 2013-03-30 21:44:39 +00:00
dgp 11593d64b8 merge trunk so review patch/diff is smaller 2013-03-26 18:00:54 +00:00
jan.nijtmans e4a0b9dbfd Looks like TCL_INIT_CUSTOM (previously known as TCL_INIT_STUFF) is not a bad idea at all,
provided it has a Tcl_Interp* argument as well, so it can initialize the stub table.
A typedef for the function is not necessary, as a variable-argument function doesn't do any type checking. It's for the experienced developer anyway.
2013-03-26 15:57:45 +00:00
jan.nijtmans bb770e33f8 Add TCL_INIT_STUFF 2013-03-26 13:58:53 +00:00
jan.nijtmans d048128004 Version having TCL_INIT_PANIC as only Tcl_InitSubsystems() flag 2013-03-26 10:20:03 +00:00
jan.nijtmans eecece2afe TCL_INIT_ENCODINGPATH 2013-03-25 15:00:55 +00:00
jan.nijtmans 7e01d5f28f Eliminate some usage of VOID and its variants.
Remove unnecessary #undef's
2013-03-22 14:38:18 +00:00
jan.nijtmans 3eecabfda1 merge trunk 2013-03-22 14:15:06 +00:00
jan.nijtmans 74c7068a25 merge trunk 2013-03-22 11:35:07 +00:00
jan.nijtmans 08553f531f merge novem 2013-03-06 13:41:23 +00:00
jan.nijtmans 59360240b3 merge trunk 2013-03-06 13:38:05 +00:00
jan.nijtmans 57d33c5027 merge trunk 2013-03-06 13:37:19 +00:00
jan.nijtmans 7e7ec63c2c merge trunk 2013-03-06 13:16:42 +00:00
jan.nijtmans e354aa0e3d merge trunk.
Implement Tcl_VarTraceInfo and Tcl_UpVar as macro.
2013-02-27 12:06:40 +00:00
jan.nijtmans 0957b2c850 merge trunk.
Unicode 6.3 does not have that many spaces.....
2013-02-25 16:05:27 +00:00
jan.nijtmans e1c5526cb2 Merge trunk.
Unicode 6.3 does not have that many spaces.....
2013-02-25 16:03:26 +00:00
jan.nijtmans 57665b295c merge trunk.
Update all unicode tables to current state of Unicode 6.3 (not released yet)
2013-02-25 13:52:05 +00:00
jan.nijtmans 290c2ef84f Merge trunk.
Upgrade all tables to Unicode 6.3 (not released yet)
2013-02-25 13:38:06 +00:00
jan.nijtmans 91ba235b3c merge trunk.
Comment improvements, styling.
2013-02-23 20:16:30 +00:00
jan.nijtmans d13fe1e431 merge trunk.
Simplify dummy "interp" struct.
2013-02-23 11:19:13 +00:00
jan.nijtmans dfff588886 merge trunk 2013-02-23 10:54:37 +00:00
jan.nijtmans ca7c7ce1b7 Merge trunk.
Convert Tcl_UntraceVar to macro, calling Tcl_UntraceVar2 in stead. No change of functionality.
2013-02-22 09:41:15 +00:00
jan.nijtmans 4349c08e31 Merge trunk.
Convert Tcl_SetVar/Tcl_UnsetVar/Tcl_GetVar/Tcl_TraceVar to macros, calling the *2 variants of the function. No change of functionality.
2013-02-20 14:51:48 +00:00
jan.nijtmans f361c1805c merge trunk.
doc improvements
2013-02-20 12:47:12 +00:00
jan.nijtmans bb71951f1a Merge trunk.
Tranform Tcl_SaveResult/Tcl_RestoreResult/Tcl_DiscardResult to macros, and remove them from the stub table
2013-02-19 13:21:53 +00:00
jan.nijtmans 52b8ad45d1 Doc improvements.
Use freeProc field of pseudo interpreter to store the magic value.
2013-02-17 13:02:40 +00:00
jan.nijtmans 4f37f05a9c merge trunk 2013-02-15 16:21:49 +00:00
jan.nijtmans 9b6c85d82e Merge trunk.
Move Tcl_InitSubsystems documentation to its own manpage
2013-02-15 10:29:05 +00:00
jan.nijtmans 88b8fc30a2 merge trunk 2013-02-14 10:11:58 +00:00
jan.nijtmans abc5015131 more Tcl_NewIntObj/Tcl_NewBooleanObj -> Tcl_NewLongObj conversions 2013-02-11 10:25:04 +00:00
jan.nijtmans f50166e4fc Merge trunk.
Various Tcl_NewIntObj/Tcl_NewBooleanObj  -> Tcl_NewLongObj modifications
2013-02-11 09:38:07 +00:00
jan.nijtmans 2c163978e7 Merge trunk.
Eliminate all usage of internal macros: TclNewIntObj, TclNewBooleanObj, TclSetIntObj, TclSetBooleanObj. 
Change various function to macros: Tcl_NewIntObj, Tcl_SetIntObj, Tcl_NewBooleanObj, Tcl_DbNewBooleanObj, Tcl_SetBooleanObj, Tcl_AddErrorInfo, Tcl_AddObjErrorInfo.
2013-02-08 13:28:06 +00:00
jan.nijtmans 4acf174468 put braces around all macro parameters 2013-02-07 14:22:16 +00:00
jan.nijtmans e8b3de6a75 merge trunk 2013-02-07 13:57:01 +00:00
jan.nijtmans 6fa4858662 merge trunk 2013-02-07 10:15:07 +00:00
jan.nijtmans 1a0463ea04 merge trunk 2013-02-05 13:55:53 +00:00
jan.nijtmans cab91124b4 merge trunk 2013-02-04 22:58:38 +00:00
jan.nijtmans dd7709baa2 merge trunk 2013-02-04 22:56:43 +00:00
jan.nijtmans b9c49065a5 merge novem.
Some more API changes int -> size_t
2013-02-04 15:49:53 +00:00
jan.nijtmans c67bfbf1a4 merge trunk 2013-02-04 14:15:14 +00:00
jan.nijtmans 3c3f3d4561 merge novem 2013-02-03 17:17:47 +00:00
jan.nijtmans 8d9ea7c132 merge trunk 2013-02-03 16:07:32 +00:00
jan.nijtmans b0bf6914f1 merge trunk 2013-02-03 16:05:31 +00:00
jan.nijtmans c5558280d7 merge trunk 2013-02-01 09:11:18 +00:00
jan.nijtmans 330e115d11 merge trunk 2013-01-29 08:14:41 +00:00
jan.nijtmans 3913f5f7ae merge trunk 2013-01-26 17:04:32 +00:00
jan.nijtmans 1d5118fd6c macros for Tcl_GetString and Tcl_GetStringFromObj 2013-01-26 16:11:33 +00:00
jan.nijtmans e8c69aa654 merge trunk
doc improvements
2013-01-26 00:45:01 +00:00
jan.nijtmans acb9caa959 merge novem 2013-01-25 23:38:49 +00:00
jan.nijtmans 03c4df2e30 merge trunk 2013-01-25 13:14:48 +00:00
jan.nijtmans b2b37d97cf merge trunk 2013-01-25 13:12:01 +00:00
jan.nijtmans 4796adf5cb Another memory leak, and one Tcl_Free -> ckfree 2013-01-25 13:07:06 +00:00
jan.nijtmans ff878198ef merge trunk
Add -Wwrite-strings to compiler options, so we can guarantee correct "const" usage.
2013-01-25 12:58:20 +00:00
jan.nijtmans 2c02c2ae5d Eliminate some unneeded usages of Tcl_SetResult, Tcl_AddObjErrorInfo
Fix "make test-packages" on cygwin
2013-01-25 11:45:17 +00:00
jan.nijtmans 84707cf702 Merge trunk
Rename TclInitStubs back to Tcl_InitStubs, for easier compatibility with Tcl 8.
2013-01-25 09:12:32 +00:00
jan.nijtmans d8b1866404 Convert Tcl_GetIndexFromObj implementation to macro 2013-01-24 10:37:30 +00:00
jan.nijtmans 45c9d1dc2c merge trunk 2013-01-23 14:11:12 +00:00
jan.nijtmans ef824b7395 merge trunk 2013-01-21 13:56:51 +00:00
jan.nijtmans a3100689bc merge-mark 2013-01-21 13:52:52 +00:00
jan.nijtmans 014e7b1951 merge trunk 2013-01-19 18:28:03 +00:00
jan.nijtmans ad5f7e5464 Convert Tcl_Eval and Tcl_GlobalEval to a macro 2013-01-17 22:28:38 +00:00
dgp 3b0f6c1c31 merge trunk 2013-01-17 16:32:50 +00:00
jan.nijtmans 4198cbe8cd merge trunk
Remove various double-defined (both in public and private stub tables) functions from private stub table
2013-01-12 22:23:29 +00:00
jan.nijtmans 3e3a85339f Remove TclWinNToHS, it is not used anywhere any more. 2013-01-10 11:45:08 +00:00
jan.nijtmans adf3bedc0c merge trunk 2013-01-10 10:04:13 +00:00
jan.nijtmans c260fedf0c Turn Tcl_PkgPresent/Tcl_PkgRequire into a macro.
Make sure that extensions which are compiled using Tcl version 9.0 alpha/beta headers only run with the exact same Tcl version (9.0a0), so they cannot accidently be used in production. Idea 'stolen' from iTcl 4.0, which did that during alpha/beta
Dde/Registry: eliminate usage of some older API, which might be removed/deprecated in the future.
2013-01-10 09:55:55 +00:00
jan.nijtmans 2930daf68c Implement TCL_INIT_CREATE_UTF8/TCL_INIT_CREATE_UNICODE 2013-01-10 09:23:39 +00:00
jan.nijtmans 1c58938f2c Restore panic check at and of the loop. Thanks! Don for noticing this. 2013-01-09 15:37:27 +00:00
jan.nijtmans 051f9006ef Restore API compatibility with public Tcl_*Scan and Tcl_*Convert functions (changes in private functions are OK)
Increase LOCAL_SIZE to 64, and remove two Panic's which cannot occur any more as a result of the improvements.
2013-01-09 12:33:45 +00:00
jan.nijtmans 0481e3ca74 New function Tcl_InitSubsystems, still to be TIP'ed 2013-01-09 10:30:00 +00:00
jan.nijtmans 361141a857 remove some unused static functions/variables 2013-01-08 21:42:23 +00:00
dgp 75194c3206 The Tcl*(Scan|Convert)*Element() routines only need chars, not ints, to
hold their flags.  Reduce waste now that interface freedom permits it.
2013-01-08 17:10:04 +00:00
jan.nijtmans 04a740f5c6 Don't depend on Spencer-specific regexp syntax (/u and /U) any more.
Bump http package to 2.8.6.
2013-01-06 21:09:17 +00:00
jan.nijtmans 6aa85ad35f merge trunk 2013-01-05 00:42:34 +00:00
jan.nijtmans 342be44f4d don't use iPtr->legacyResult for Tcl >= 8.1, because it doesn't work. Use Tcl_AppendResult in stead. 2013-01-03 10:17:14 +00:00
jan.nijtmans e42dd00e98 merge novem 2013-01-02 14:59:21 +00:00
jan.nijtmans 6797693d1b merge trunk 2013-01-02 14:56:58 +00:00
jan.nijtmans 3e69878565 merge trunk.
tclStubLib.c: protect loading incompatible Tcl9 extensions in Tcl8
2013-01-02 11:58:18 +00:00
jan.nijtmans aef36bf11d two more places where refCount was assumed to be a signed value. In Tcl9 that will probably be not true any more. 2012-12-29 18:12:45 +00:00
jan.nijtmans 0dc45b9fe3 fix tm.tcl to include tcl8 locations, and fix corresponding test-cases 2012-12-29 15:24:24 +00:00
jan.nijtmans e65b021050 merge trunk 2012-12-29 09:24:59 +00:00
jan.nijtmans b5100ee98f merge trunk 2012-12-27 15:05:28 +00:00
jan.nijtmans 2951fec86b remove unnecessary struct names, which only pollute the "struct" namespace for the compiler. 2012-12-21 10:13:37 +00:00
jan.nijtmans d07793f49c merge trunk 2012-12-21 09:42:57 +00:00
jan.nijtmans 2acbdb0493 Remove all VA functions Tcl_AppendResultVA, Tcl_AppendStringsToObjVA, Tcl_SetErrorCodeVA, Tcl_PanicVA, and dependancy of tcl.h on <stdarg.h>. TIP required. 2012-12-18 13:47:08 +00:00
jan.nijtmans e00ad288cc remove deprecated functions Tcl_VarEval and Tcl_VarEvalVA 2012-12-17 12:45:19 +00:00
jan.nijtmans 5b8ce14566 Merge trunk.
Add more clarity why refCount should be decremented AFTER checking for <2. 
Protect 8.x extensions for being loadable in "novem", by changing Tcl_PkgProvide into a macro.
2012-12-14 09:40:56 +00:00
jan.nijtmans facce70703 merge trunk 2012-12-13 13:01:49 +00:00
jan.nijtmans 88eafacc82 More memory API changes, mainly char* -> void* and unsigned -> size_t 2012-12-12 21:21:10 +00:00
jan.nijtmans 26f4ba76ca allow novem to use installed Tcl8 .tm packages, such as tcltest and msgcat
remove some dead code (already planned to be removed in Tcl9)
2012-12-12 10:21:55 +00:00
dgp 949c30336f Rename the memory routines so that Tcl_Alloc/Tcl_Free/etc become the recommended
things for extensions and embedders to call, instead of ckalloc/ckfree/etc.
Tcl_Alloc, etc. are macros that can be configured for memory debuggin, as ckalloc, etc.
have been and continue to be.
2012-12-12 05:01:04 +00:00
jan.nijtmans aaf8665696 merge trunk 2012-12-10 20:54:49 +00:00
jan.nijtmans e4dd07e735 merge trunk 2012-12-07 22:16:45 +00:00
dgp e98a68549d merge trunk 2012-12-07 17:05:09 +00:00
jan.nijtmans 1fc4f8eaa3 merge trunk 2012-12-07 16:12:37 +00:00
jan.nijtmans 70bccae334 merge trunk
turn pkgb.so into a Tcl8 interoperability test
library: Whatever Tcl9 looks like, loading pkgb.so in Tcl 8 should
either result in an error-message, either succeed, but never crash.
2012-12-07 10:11:47 +00:00
jan.nijtmans 052f5d50c9 merge trunk 2012-12-05 13:41:51 +00:00
jan.nijtmans 5815a325af merge trunk 2012-12-04 13:40:58 +00:00
jan.nijtmans 3ff398393a Remove obsolete functions Tcl_GetDefaultEncodingDir and Tcl_SetDefaultEncodingDir 2012-12-03 13:02:08 +00:00
jan.nijtmans ef0bb68bcb Initialize legacyFreeProc with invalid value: This will result in
a crash immediately, when an extention tries to call it, in stead
of crashing some time later....
Remove some more legacy regarding accessing interp->result
2012-12-03 10:01:20 +00:00
dgp 382a840e23 Remove all maintenance of a string result in the Interp. 2012-11-30 17:00:16 +00:00
dgp 1e6fd4531c Re-fix failing load-3.2 test. The right way this time. 2012-11-30 16:14:11 +00:00
dgp 21e80b3a25 Stop [glob] complaining about empty list result. Continue support for
a no-op -nocomplain option, but don't document it.  Old script support only.
2012-11-30 16:10:20 +00:00
jan.nijtmans 8e6efd7026 After a Tcl_SetObjResult, don't do a Tcl_TransferResult to the same interpreter 2012-11-30 15:55:03 +00:00
jan.nijtmans 39365ed3c0 merge (modified) novem-review.
unbreak windows build
2012-11-30 15:42:56 +00:00
dgp f52f05c3b1 No string result -> no more need for TCL_RESULT_SIZE 2012-11-29 21:34:22 +00:00
dgp 388741b7d0 Bug fix. Stop load-3.2 test failure. 2012-11-29 21:28:24 +00:00
dgp b2ca802381 Purge remnants of support for compilers ignorant of C keyword 'inline'. 2012-11-29 21:25:52 +00:00
dgp b05600e60a Stop defining VOID. Demand C compilers that know the void keyword. 2012-11-29 21:03:06 +00:00
dgp 98a8b3604f Destroy all the TCL_STORAGE_CLASS and associated nonsense. 2012-11-29 20:32:16 +00:00
dgp 905d1e5d03 Remove STRINGIFY and JOIN utility macros. Tcl doesn't use them.
And Tcl doesn't need to be in the utility macro supply business.
If an extension needs these, let them define them.
2012-11-29 17:45:20 +00:00
dgp cb7c84c310 Proposed rollback of the TCL_STUB_MAGIC change on novem branch. 2012-11-29 17:25:59 +00:00
dgp 03bdf41de2 missed bit of merge 2012-11-29 17:03:17 +00:00
dgp 206428d2cf Get the updated error message 2012-11-29 16:52:45 +00:00
dgp bc0d613154 Merge bug-3588687 2012-11-29 16:26:14 +00:00
dgp 1d6f003314 merge novem 2012-11-29 16:03:21 +00:00
dgp e81a4abd60 merge trunk 2012-11-29 15:58:38 +00:00
dgp 06ebe62a5e Revise TclInitStubs() so that it checks for consistent values of both
TCL_MAJOR_VERSION and TCL_STUB_MAGIC between an extension and the stub library.
2012-11-29 15:24:50 +00:00
dgp 0d78d389e1 3588687 Added cross checks so that [load]ed extension, [load]ing interp, and
linked stubs library all agree on their versions in the ways that matter.
2012-11-27 21:09:20 +00:00
dgp eea64f8d90 Merge (selected bits of) novem 2012-11-26 22:37:01 +00:00
dgp 4c5cc88bdf Stop segfaults in test suite. 2012-11-26 22:23:43 +00:00
dgp a1cee7cd20 merge (some of) novem 2012-11-26 21:49:46 +00:00
dgp 3327979282 Merge use of [load] to find and nicely report error when incompatible stubs
mechanisms between [load]ing interp and [load]ed extension are detected.
2012-11-26 21:43:18 +00:00
dgp 8c19725a30 ...and here's the lines left behind in the editor. 2012-11-26 21:30:13 +00:00
dgp 0a224ddfc8 Comments and renamings around the legacy fields for string results. 2012-11-26 21:25:26 +00:00
jan.nijtmans 9a7c011683 merge trunk 2012-11-26 15:37:24 +00:00
jan.nijtmans 44427fccaa unbreak UNIX build 2012-11-26 15:33:47 +00:00
jan.nijtmans c4cf77f310 Removed functions marked deprecated or obsolete for a long time: Tcl_Backslash, Tcl_EvalFile, Tcl_GlobalEvalObj, Tcl_GlobalEval, Tcl_EvalTokens.
Remove Tcl_FindExecutable from stub table: It is needed by embedders, not extenders. 
Remove TclpGetDate, TclpGmtime, TclpLocaltime: it isn't use anywhere since the new clock implementation. 
Remove TclWinConvertWSAError, it's the same as TclWinConvertError.
2012-11-26 14:29:58 +00:00
jan.nijtmans 9b00a63b22 merge trunk 2012-11-22 09:18:51 +00:00
jan.nijtmans 91d9bd02c0 merge trunk 2012-11-20 10:01:00 +00:00
jan.nijtmans 56b69c4e9a It might be that iPtr->result points to an empty string but that iPtr->objResult contains the real error-message. So, handle that too. 2012-11-20 09:01:46 +00:00
jan.nijtmans d2b1e66352 ... make it more portable 2012-11-20 08:42:36 +00:00
jan.nijtmans d29d888dc6 Add checks for the assumtions made in tclStubLib.c, making sure that those
assumtions are maintained for Tcl 9! If not, extensions compiled for Tcl9
but loaded in Tcl8 (with an incompatible stub table) cannot produce
a nice error-message any more.
<p>This is probably not the best place to do the check, maybe it's better
to do this in tclTest.c, as part of the test suite.
<p>Feedback welcome!
2012-11-20 08:40:56 +00:00
jan.nijtmans f4ed4079b7 make windde and winreg load again 2012-11-19 22:34:32 +00:00
jan.nijtmans dde5a2565e Single stub library can now handle Tcl8 and Tcl9 with different MAGIC values 2012-11-19 21:46:51 +00:00
jan.nijtmans e59a1e0b14 eliminate unused variable 2012-11-19 21:45:34 +00:00
jan.nijtmans c4b5bfbd50 Remove some undocumented - obsolete - function from the API with 'Old' in the name. 2012-11-19 11:17:58 +00:00
jan.nijtmans 44869c9e35 Better solution for handling errors from Tcl 8.x compiled extensions. Works for existing ones. 2012-11-19 08:30:11 +00:00
jan.nijtmans e5463e8ec8 change stub library to detect - and generate a nice error-message -
when a shared library compiled for Tcl 9.x is attempted to be
loaded in Tcl 8.x. Change MAGIC value in stub tables for 64-bit
builds (those surely will be incomatible!)
2012-11-18 17:24:05 +00:00
jan.nijtmans bddf737714 <i>on-hold at Don Porter's request</i>
change stub library to detect - and generate a nice error-message - 
when a shared library compiled for Tcl 8.x is attempted to be
loaded in Tcl 9.x: Tcl 9 will not have the iPtr->result field
so we cannot use that any more.
2012-11-18 17:12:35 +00:00
jan.nijtmans ef0fd808de <i>On hold at Don Porter's request</i>
hange stub library to detect - and generate a nice error-message - 
when a shared library compiled for Tcl 8.x is attempted to be
loaded in Tcl 9.x: Tcl 9 will not have the iPtr->result field
so we cannot use that any more.
2012-11-18 17:04:38 +00:00
jan.nijtmans f4fb1d1752 <i>On-hold at Don Porter's request.</i>
change stub library to detect - and generate a nice error-message - 
when a shared library compiled for Tcl 8.x is attempted to be
loaded in Tcl 9.x: Tcl 9 will not have the iPtr->result field
so we cannot use that any more.
2012-11-18 16:54:16 +00:00
dgp 59ea8cb145 WIP removing the maintenance of a string result in the Interp.
Still some head-scratching on what to do with tclStubLib.c.
2012-11-17 00:25:23 +00:00
dgp e9cf99c212 merge trunk 2012-11-16 22:51:18 +00:00
dgp 80630f4ec9 Burn the bridge back to obsolete [puts] syntax. (Tcl 6?!) 2012-11-16 21:17:29 +00:00
dgp e63dcc2677 Burn the octal bridges. We're not goin' back. 2012-11-16 19:17:21 +00:00
dgp 9bbc90b227 Tcl_Value is now a synonym for Tcl_Obj ! 2012-11-16 17:57:38 +00:00
dgp 8e5dbc8a27 Remove pre-8.5 interface for custom expr functions. 2012-11-16 17:52:55 +00:00
dgp 29c6b72a83 merge trunk 2012-11-16 16:37:07 +00:00
jan.nijtmans fd5b3bb085 eliminate CONST/CONST84/CONST86 2012-11-16 12:02:11 +00:00
jan.nijtmans 2fda7e49a0 Doc fix in TCL_MEM_DEBUG.3 2012-11-16 10:22:58 +00:00
jan.nijtmans 27256fcd71 Merge trunk
<p>Fix Windows build 
<p>Now usable with Thread's "novem" branch (3.0a1)
<p>Remove some more deprecated stuff
2012-11-16 10:12:05 +00:00
dgp e702454abe Abandon support for pre-8.5 bytecode. 2012-11-15 22:17:24 +00:00
dgp 9423df2491 Goodbye to [case]. 2012-11-15 21:04:23 +00:00
dgp 05b1764f74 Octal death documentation impacts. 2012-11-15 05:12:38 +00:00
dgp bff7817ec0 Kill Octal; bump to 9.0a0; make test suite work again. 2012-11-15 04:09:25 +00:00
jan.nijtmans 073618d375 Merge trunk 2012-09-26 12:00:50 +00:00
oehhar a4ced94ae6 clock uses new msgcat features 2012-09-20 09:53:02 +00:00
oehhar 496eb965ff (proposal) msgcat with dynamic mc file load on locale change 2012-09-19 20:40:14 +00:00
oehhar c2423634f2 TIP#399 implementation: mcconfig may add additional glob pattern for mcload 2012-09-19 20:31:48 +00:00
jan.nijtmans 13bc69a8a4 unnecessary hook struct definitions 2012-08-21 08:07:40 +00:00
jan.nijtmans 9aa711e8e0 remove unnecessary struct names, which only pollute the "struct" namespace for te compiler. 2012-08-20 06:49:25 +00:00
dgp b339d4bf03 merge trunk 2012-07-19 15:08:23 +00:00
dgp 1e58e8e42d Implement Tcl_DStringResult with call to TclDStringToObj. 2012-04-25 21:03:58 +00:00
dgp 91af7f6f90 merge trunk 2012-04-25 21:02:42 +00:00
jan.nijtmans 5ddf03d324 merge trunk 2012-04-22 20:51:02 +00:00
dgp 68191ded75 To preserve the ability of [load] to bring in mistmatched stubs-enabled
modules and react with an error rather than a crash, HasStubSupport() has
to keep fiddling with the same fields as always.
2012-04-19 12:57:45 +00:00
dkf ac3d0b69d3 Clean version of changes; ifdef-free 2012-04-19 12:41:06 +00:00
dkf 96f611f896 merge trunk 2012-04-19 12:20:49 +00:00
dgp ec9c29c80d Experimental branch where the interp->result field and related are removed
and all simplifications that makes possible are done.  Seems this can at best
be a Tcl 9 reform.
2012-04-18 18:42:54 +00:00
jan.nijtmans ac98be85ce merge trunk 2012-02-03 21:25:41 +00:00
jan.nijtmans 048fae9de6 merge trunk 2012-01-26 21:58:18 +00:00
jan.nijtmans 81735df1fa merge trunk 2012-01-23 22:19:24 +00:00
jan.nijtmans 9c32ab0d8b Merge to feature branch 2011-10-05 14:23:40 +00:00
jan.nijtmans 861e75f503 Merge to feature branch 2011-09-21 09:03:42 +00:00
jan.nijtmans e891120584 merge to feature branch 2011-09-17 07:19:28 +00:00
jan.nijtmans 2045bb3c21 merge to feature branch 2011-09-16 08:14:27 +00:00
jan.nijtmans a498488c59 Merge to feature branch 2011-08-29 07:44:12 +00:00
jan.nijtmans dd43ee3dbf Merge to feature branch 2011-08-25 12:11:24 +00:00
jan.nijtmans 39ad9eb8f3 fix tests utf-2.8 and utf-2.9 2011-08-24 08:32:39 +00:00
jan.nijtmans b30ba5a92b Upcoming TIP implementation: Full support for Unicode 6.0 2011-08-24 07:50:13 +00:00
jan.nijtmans a3eb84e8cb Import of tommath 0.42.0 2011-03-14 12:08:07 +00:00
jan.nijtmans d5b999af66 Import of libtommath 0.41
Import of libtommath 0.41
2011-03-14 11:59:15 +00:00
jan.nijtmans 4878f1b6a4 Import of libtommath 0.40 2011-03-14 11:51:58 +00:00
jan.nijtmans c5e0f27a28 re-import ltm-0.39, with original RCS-ID's 2011-03-14 09:36:26 +00:00
1618 changed files with 334900 additions and 188109 deletions

No files matched your search

+8 -1
View File
@@ -1,3 +1,10 @@
compat/zlib/win32/zdll.lib
compat/zlib/win32/zlib1.dll
compat/zlib/win64/zdll.lib
compat/zlib/win64/zlib1.dll
compat/zlib/win64/libz.dll.a
compat/zlib/zlib.3.pdf
tools/empty.zip
*.bmp
*.gif
*.png
*.png
+19
View File
@@ -0,0 +1,19 @@
compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
compat/zlib/contrib/vstudio/readme.txt
compat/zlib/contrib/vstudio/*/zlib.rc
compat/zlib/win32/*.txt
compat/zlib/win64/*.txt
libtommath/*.dsp
libtommath/*.sln
libtommath/*.vcproj
tools/tcl.hpj.in
tools/tcl.wse.in
win/buildall.vc.bat
win/coffbase.txt
win/makefile.vc
win/rules.vc
win/rules-ext.vc
win/targets.vc
win/tcl.dsp
win/tcl.dsw
win/tcl.hpj.in
+19
View File
@@ -0,0 +1,19 @@
compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
compat/zlib/contrib/vstudio/readme.txt
compat/zlib/contrib/vstudio/*/zlib.rc
compat/zlib/win32/*.txt
compat/zlib/win64/*.txt
libtommath/*.dsp
libtommath/*.sln
libtommath/*.vcproj
tools/tcl.hpj.in
tools/tcl.wse.in
win/buildall.vc.bat
win/coffbase.txt
win/makefile.vc
win/rules.vc
win/rules-ext.vc
win/targets.vc
win/tcl.dsp
win/tcl.dsw
win/tcl.hpj.in
+9
View File
@@ -0,0 +1,9 @@
tools/tcl.hpj.in
tools/tcl.wse.in
win/buildall.vc.bat
win/coffbase.txt
win/makefile.vc
win/rules.vc
win/tcl.dsp
win/tcl.dsw
win/tcl.hpj.in
+25
View File
@@ -6,6 +6,7 @@
*.lib
*.o
*.obj
*.pdb
*.res
*.sl
*.so
@@ -17,8 +18,32 @@
*/tclsh*
*/tcltest*
*/versions.vc
*/version.vc
html
libtommath/bn.ilg
libtommath/bn.ind
libtommath/pretty.build
libtommath/tommath.src
libtommath/*.pdf
libtommath/*.pl
libtommath/*.sh
libtommath/tombc/*
libtommath/pre_gen/*
libtommath/pics/*
libtommath/mtest/*
libtommath/logs/*
libtommath/etc/*
libtommath/demo/*
libtommath/*.out
libtommath/*.tex
unix/autoMkindex.tcl
unix/dltest.marker
unix/tcl.pc
unix/tclIndex
unix/pkgs/*
win/Debug*
win/Release*
win/pkgs/*
win/coffbase.txt
win/tcl.hpj
win/nmhlp-out.txt
+3
View File
@@ -0,0 +1,3 @@
Important Note
==========
Please do not file issues with Tcl on Github. They are unlikely to be noticed in a timely fashion. Tcl issues are hosted in the [tcl fossil repository on core.tcl.tk](https://core.tcl.tk/tcl/tktnew); please post them there.
+3
View File
@@ -0,0 +1,3 @@
Important Note
==========
Please do not file pull requests with Tcl on Github. They are unlikely to be noticed in a timely fashion. Tcl issues (including patches) are hosted in the [tcl fossil repository on core.tcl.tk](https://core.tcl.tk/tcl/tktnew); please post them there.
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>tcl8.5</name>
<name>tcl9</name>
<comment></comment>
<projects>
</projects>
+6112 -729
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -414,7 +414,7 @@
Tcl_IsChannelExisting, and Tcl_ClearChannelHandlers to conform to the
new stacked channel implementation. Their stub slots were also moved
to give preference to the new 8.3.2 stub functions. This will cause an
incompatability with 8.4a1 only.
incompatibility with 8.4a1 only.
(StopCopy): fixed a bug introduced by a partial fix in 8.3.2 that
didn't set nonBlocking correctly when resetting the flags for the
write side. [Bug: 6261]
+3 -3
View File
@@ -847,7 +847,7 @@
exit.
* tests/exec.test: marked exec-18.1 unixOnly until the Windows
incompatability (in the test, not the core) can be resolved.
incompatibility (in the test, not the core) can be resolved.
* tests/http.test (http-3.11): added close $fp that was causing an
error on Windows because the file was not closed before deleting.
@@ -3642,7 +3642,7 @@
* compat/strtoll.c (strtoll):
* compat/strtoull.c (strtoull):
* unix/tclUnixPort.h:
* win/tclWinPort.h: Const-ing 64-bit compatability declarations. Note
* win/tclWinPort.h: Const-ing 64-bit compatibility declarations. Note
that the return pointer is non-const because it is entirely legal for
the functions to be called from somewhere that owns the string being
passed. Fixes problem reported by Larry Virden.
@@ -3779,7 +3779,7 @@
There are a lot of changes from this TIP, so please see
http://purl.org/tcl/tip/72.html for discussion of
backward-compatability issues, but the main ones modifications are in:
backward-compatibility issues, but the main ones modifications are in:
* generic/tcl.h: New types.
* generic/tcl.decls: New public functions.
+2 -2
View File
@@ -947,7 +947,7 @@
declarations match and will end up using the declarations in the
public code from now on because of #include ordering. Keeping the old
declarations in tclInt.decls; there's no need to gratuitously break
compatability for those extensions which are already clients of the
compatibility for those extensions which are already clients of the
namespace code.
2003-08-23 Zoran Vasiljevic <zoran@archiwrae.com>
@@ -1278,7 +1278,7 @@
* generic/tclVar.c (Tcl_ArrayObjCmd, TclArraySet): Made [array get]
and [array set] work with dictionaries, producing them and consuming
them. Note that for compatability reasons, you will never get a dict
them. Note that for compatibility reasons, you will never get a dict
from feeding a string literal to [array set] since that alters the
trace behaviour of "multi-key" sets. [Bug 759935]
+1 -1
View File
@@ -1356,7 +1356,7 @@
2004-10-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
* *.3: Convert CONST to const and VOID to void so we document how
people should actually use the Tcl API and not the compatability hacks
people should actually use the Tcl API and not the compatibility hacks
that it has to have.
* doc/man.macros, *.3: Update .AS macro so it can know how wide to
+6 -6
View File
@@ -5911,11 +5911,11 @@
children of a real windows service shell.
******************************************************************
*** CHANGELOG ENTRIES FOR 2005 IN "ChangeLog.2005" ***
*** CHANGELOG ENTRIES FOR 2004 IN "ChangeLog.2004" ***
*** CHANGELOG ENTRIES FOR 2003 IN "ChangeLog.2003" ***
*** CHANGELOG ENTRIES FOR 2002 IN "ChangeLog.2002" ***
*** CHANGELOG ENTRIES FOR 2001 IN "ChangeLog.2001" ***
*** CHANGELOG ENTRIES FOR 2000 IN "ChangeLog.2000" ***
*** CHANGELOG ENTRIES FOR 2005 IN "ChangeLog.2005" ***
*** CHANGELOG ENTRIES FOR 2004 IN "ChangeLog.2004" ***
*** CHANGELOG ENTRIES FOR 2003 IN "ChangeLog.2003" ***
*** CHANGELOG ENTRIES FOR 2002 IN "ChangeLog.2002" ***
*** CHANGELOG ENTRIES FOR 2001 IN "ChangeLog.2001" ***
*** CHANGELOG ENTRIES FOR 2000 IN "ChangeLog.2000" ***
*** CHANGELOG ENTRIES FOR 1999 AND EARLIER IN "ChangeLog.1999" ***
******************************************************************
+2468 -201
View File
File diff suppressed because it is too large. Load diff
+4 -4
View File
@@ -1,5 +1,5 @@
README: Tcl
This is the Tcl 8.5.15 source distribution.
This is the Tcl 9.0a0 source distribution.
http://sourceforge.net/projects/tcl/files/Tcl/
You can get any source release of Tcl from the URL above.
@@ -49,7 +49,7 @@ and selling it either in whole or in part. See the file
Extensive documentation is available at our website.
The home page for this release, including new features, is
http://www.tcl.tk/software/tcltk/8.5.html
http://www.tcl.tk/software/tcltk/9.0.html
Detailed release notes can be found at the file distributions page
by clicking on the relevant version.
@@ -61,9 +61,9 @@ Information about Tcl itself can be found at
There have been many Tcl books on the market. Many are mentioned in the Wiki:
http://wiki.tcl.tk/_/ref?N=25206
To view the complete set of reference manual entries for Tcl 8.5 online,
To view the complete set of reference manual entries for Tcl 9.0 online,
visit the URL:
http://www.tcl.tk/man/tcl8.5/
http://www.tcl.tk/man/tcl9.0/
2a. Unix Documentation
----------------------
+1201 -108
View File
File diff suppressed because it is too large. Load diff
+266
View File
@@ -0,0 +1,266 @@
/*
* Copyright (C) 2000-2003 Damien Miller. All rights reserved.
* Copyright (C) 1999 WIDE Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Pseudo-implementation of RFC2553 name / address resolution functions
*
* But these functions are not implemented correctly. The minimum subset
* is implemented for ssh use only. For example, this routine assumes
* that ai_family is AF_INET. Don't use it for another purpose.
*/
#include "tclInt.h"
TCL_DECLARE_MUTEX(netdbMutex)
#ifndef HAVE_GETNAMEINFO
#ifndef HAVE_STRLCPY
static size_t
strlcpy(char *dst, const char *src, size_t siz)
{
char *d = dst;
const char *s = src;
size_t n = siz;
/* Copy as many bytes as will fit */
if (n != 0 && --n != 0) {
do {
if ((*d++ = *s++) == 0)
break;
} while (--n != 0);
}
/* Not enough room in dst, add NUL and traverse rest of src */
if (n == 0) {
if (siz != 0)
*d = '\0'; /* NUL-terminate dst */
while (*s++)
;
}
return(s - src - 1); /* count does not include NUL */
}
#endif
int fake_getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
size_t hostlen, char *serv, size_t servlen, int flags)
{
struct sockaddr_in *sin = (struct sockaddr_in *)sa;
struct hostent *hp;
char tmpserv[16];
if (sa->sa_family != AF_UNSPEC && sa->sa_family != AF_INET)
return (EAI_FAMILY);
if (serv != NULL) {
snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
if (strlcpy(serv, tmpserv, servlen) >= servlen)
return (EAI_MEMORY);
}
if (host != NULL) {
if (flags & NI_NUMERICHOST) {
size_t len;
Tcl_MutexLock(&netdbMutex);
len = strlcpy(host, inet_ntoa(sin->sin_addr), hostlen);
Tcl_MutexUnlock(&netdbMutex);
if (len >= hostlen) {
return (EAI_MEMORY);
} else {
return (0);
}
} else {
int ret;
Tcl_MutexLock(&netdbMutex);
hp = gethostbyaddr((char *)&sin->sin_addr,
sizeof(struct in_addr), AF_INET);
if (hp == NULL) {
ret = EAI_NODATA;
} else if (strlcpy(host, hp->h_name, hostlen)
>= hostlen) {
ret = EAI_MEMORY;
} else {
ret = 0;
}
Tcl_MutexUnlock(&netdbMutex);
return ret;
}
}
return (0);
}
#endif /* !HAVE_GETNAMEINFO */
#ifndef HAVE_GAI_STRERROR
const char *
fake_gai_strerror(int err)
{
switch (err) {
case EAI_NODATA:
return ("no address associated with name");
case EAI_MEMORY:
return ("memory allocation failure.");
case EAI_NONAME:
return ("nodename nor servname provided, or not known");
case EAI_FAMILY:
return ("ai_family not supported");
default:
return ("unknown/invalid error.");
}
}
#endif /* !HAVE_GAI_STRERROR */
#ifndef HAVE_FREEADDRINFO
void
fake_freeaddrinfo(struct addrinfo *ai)
{
struct addrinfo *next;
for(; ai != NULL;) {
next = ai->ai_next;
free(ai);
ai = next;
}
}
#endif /* !HAVE_FREEADDRINFO */
#ifndef HAVE_GETADDRINFO
static struct
addrinfo *malloc_ai(int port, u_long addr, const struct addrinfo *hints)
{
struct addrinfo *ai;
ai = malloc(sizeof(*ai) + sizeof(struct sockaddr_in));
if (ai == NULL)
return (NULL);
memset(ai, '\0', sizeof(*ai) + sizeof(struct sockaddr_in));
ai->ai_addr = (struct sockaddr *)(ai + 1);
/* XXX -- ssh doesn't use sa_len */
ai->ai_addrlen = sizeof(struct sockaddr_in);
ai->ai_addr->sa_family = ai->ai_family = AF_INET;
((struct sockaddr_in *)(ai)->ai_addr)->sin_port = port;
((struct sockaddr_in *)(ai)->ai_addr)->sin_addr.s_addr = addr;
/* XXX: the following is not generally correct, but does what we want */
if (hints->ai_socktype)
ai->ai_socktype = hints->ai_socktype;
else
ai->ai_socktype = SOCK_STREAM;
if (hints->ai_protocol)
ai->ai_protocol = hints->ai_protocol;
return (ai);
}
int
fake_getaddrinfo(const char *hostname, const char *servname,
const struct addrinfo *hints, struct addrinfo **res)
{
struct hostent *hp;
struct servent *sp;
struct in_addr in;
int i;
long int port;
u_long addr;
port = 0;
if (hints && hints->ai_family != AF_UNSPEC &&
hints->ai_family != AF_INET)
return (EAI_FAMILY);
if (servname != NULL) {
char *cp;
port = strtol(servname, &cp, 10);
if (port > 0 && port <= 65535 && *cp == '\0')
port = htons((unsigned short)port);
else if ((sp = getservbyname(servname, NULL)) != NULL)
port = sp->s_port;
else
port = 0;
}
if (hints && hints->ai_flags & AI_PASSIVE) {
addr = htonl(0x00000000);
if (hostname && inet_aton(hostname, &in) != 0)
addr = in.s_addr;
*res = malloc_ai(port, addr, hints);
if (*res == NULL)
return (EAI_MEMORY);
return (0);
}
if (!hostname) {
*res = malloc_ai(port, htonl(0x7f000001), hints);
if (*res == NULL)
return (EAI_MEMORY);
return (0);
}
if (inet_aton(hostname, &in)) {
*res = malloc_ai(port, in.s_addr, hints);
if (*res == NULL)
return (EAI_MEMORY);
return (0);
}
/* Don't try DNS if AI_NUMERICHOST is set */
if (hints && hints->ai_flags & AI_NUMERICHOST)
return (EAI_NONAME);
Tcl_MutexLock(&netdbMutex);
hp = gethostbyname(hostname);
if (hp && hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) {
struct addrinfo *cur, *prev;
cur = prev = *res = NULL;
for (i = 0; hp->h_addr_list[i]; i++) {
struct in_addr *in = (struct in_addr *)hp->h_addr_list[i];
cur = malloc_ai(port, in->s_addr, hints);
if (cur == NULL) {
if (*res != NULL)
freeaddrinfo(*res);
Tcl_MutexUnlock(&netdbMutex);
return (EAI_MEMORY);
}
if (prev)
prev->ai_next = cur;
else
*res = cur;
prev = cur;
}
Tcl_MutexUnlock(&netdbMutex);
return (0);
}
Tcl_MutexUnlock(&netdbMutex);
return (EAI_NODATA);
}
#endif /* !HAVE_GETADDRINFO */
+170
View File
@@ -0,0 +1,170 @@
/*
* Copyright (C) 2000-2003 Damien Miller. All rights reserved.
* Copyright (C) 1999 WIDE Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of the project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
/*
* Pseudo-implementation of RFC2553 name / address resolution functions
*
* But these functions are not implemented correctly. The minimum subset
* is implemented for ssh use only. For example, this routine assumes
* that ai_family is AF_INET. Don't use it for another purpose.
*/
#ifndef _FAKE_RFC2553_H
#define _FAKE_RFC2553_H
/*
* First, socket and INET6 related definitions
*/
#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
# define _SS_MAXSIZE 128 /* Implementation specific max size */
# define _SS_PADSIZE (_SS_MAXSIZE - sizeof (struct sockaddr))
struct sockaddr_storage {
struct sockaddr ss_sa;
char __ss_pad2[_SS_PADSIZE];
};
# define ss_family ss_sa.sa_family
#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
#ifndef IN6_IS_ADDR_LOOPBACK
# define IN6_IS_ADDR_LOOPBACK(a) \
(((uint32_t *)(a))[0] == 0 && ((uint32_t *)(a))[1] == 0 && \
((uint32_t *)(a))[2] == 0 && ((uint32_t *)(a))[3] == htonl(1))
#endif /* !IN6_IS_ADDR_LOOPBACK */
#ifndef HAVE_STRUCT_IN6_ADDR
struct in6_addr {
uint8_t s6_addr[16];
};
#endif /* !HAVE_STRUCT_IN6_ADDR */
#ifndef HAVE_STRUCT_SOCKADDR_IN6
struct sockaddr_in6 {
unsigned short sin6_family;
uint16_t sin6_port;
uint32_t sin6_flowinfo;
struct in6_addr sin6_addr;
uint32_t sin6_scope_id;
};
#endif /* !HAVE_STRUCT_SOCKADDR_IN6 */
#ifndef AF_INET6
/* Define it to something that should never appear */
#define AF_INET6 AF_MAX
#endif
/*
* Next, RFC2553 name / address resolution API
*/
#ifndef NI_NUMERICHOST
# define NI_NUMERICHOST (1)
#endif
#ifndef NI_NAMEREQD
# define NI_NAMEREQD (1<<1)
#endif
#ifndef NI_NUMERICSERV
# define NI_NUMERICSERV (1<<2)
#endif
#ifndef AI_PASSIVE
# define AI_PASSIVE (1)
#endif
#ifndef AI_CANONNAME
# define AI_CANONNAME (1<<1)
#endif
#ifndef AI_NUMERICHOST
# define AI_NUMERICHOST (1<<2)
#endif
#ifndef NI_MAXSERV
# define NI_MAXSERV 32
#endif /* !NI_MAXSERV */
#ifndef NI_MAXHOST
# define NI_MAXHOST 1025
#endif /* !NI_MAXHOST */
#ifndef EAI_NODATA
# define EAI_NODATA (INT_MAX - 1)
#endif
#ifndef EAI_MEMORY
# define EAI_MEMORY (INT_MAX - 2)
#endif
#ifndef EAI_NONAME
# define EAI_NONAME (INT_MAX - 3)
#endif
#ifndef EAI_SYSTEM
# define EAI_SYSTEM (INT_MAX - 4)
#endif
#ifndef EAI_FAMILY
# define EAI_FAMILY (INT_MAX - 5)
#endif
#ifndef EAI_SERVICE
# define EAI_SERVICE -8 /* SERVICE not supported for `ai_socktype'. */
#endif
#ifndef HAVE_STRUCT_ADDRINFO
struct addrinfo {
int ai_flags; /* AI_PASSIVE, AI_CANONNAME */
int ai_family; /* PF_xxx */
int ai_socktype; /* SOCK_xxx */
int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */
size_t ai_addrlen; /* length of ai_addr */
char *ai_canonname; /* canonical name for hostname */
struct sockaddr *ai_addr; /* binary address */
struct addrinfo *ai_next; /* next structure in linked list */
};
#endif /* !HAVE_STRUCT_ADDRINFO */
#ifndef HAVE_GETADDRINFO
#ifdef getaddrinfo
# undef getaddrinfo
#endif
#define getaddrinfo(a,b,c,d) (fake_getaddrinfo(a,b,c,d))
int getaddrinfo(const char *, const char *,
const struct addrinfo *, struct addrinfo **);
#endif /* !HAVE_GETADDRINFO */
#ifndef HAVE_GAI_STRERROR
#define gai_strerror(a) (fake_gai_strerror(a))
const char *gai_strerror(int);
#endif /* !HAVE_GAI_STRERROR */
#ifndef HAVE_FREEADDRINFO
#define freeaddrinfo(a) (fake_freeaddrinfo(a))
void freeaddrinfo(struct addrinfo *);
#endif /* !HAVE_FREEADDRINFO */
#ifndef HAVE_GETNAMEINFO
#define getnameinfo(a,b,c,d,e,f,g) (fake_getnameinfo(a,b,c,d,e,f,g))
int getnameinfo(const struct sockaddr *, size_t, char *, size_t,
char *, size_t, int);
#endif /* !HAVE_GETNAMEINFO */
#endif /* !_FAKE_RFC2553_H */
+1 -1
View File
@@ -1,4 +1,4 @@
/*
/*
* fixstrtod.c --
*
* Source code for the "fixstrtod" procedure. This procedure is
-14
View File
@@ -1,14 +0,0 @@
/*
* float.h --
*
* This is a dummy header file to #include in Tcl when there
* is no float.h in /usr/include. Right now this file is empty:
* Tcl contains #ifdefs to deal with the lack of definitions;
* all it needs is for the #include statement to work.
*
* Copyright (c) 1993 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
+1 -1
View File
@@ -1,4 +1,4 @@
/*
/*
* gettod.c --
*
* This file provides the gettimeofday function on systems
-22
View File
@@ -1,22 +0,0 @@
/*
* limits.h --
*
* This is a dummy header file to #include in Tcl when there
* is no limits.h in /usr/include. There are only a few
* definitions here; also see tclPort.h, which already
* #defines some of the things here if they're not arleady
* defined.
*
* Copyright (c) 1991 The Regents of the University of California.
* Copyright (c) 1994 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#define LONG_MIN 0x80000000
#define LONG_MAX 0x7fffffff
#define INT_MIN 0x80000000
#define INT_MAX 0x7fffffff
#define SHRT_MIN 0x8000
#define SHRT_MAX 0x7fff
+5 -5
View File
@@ -15,7 +15,7 @@
* Here is the prototype just in case it is not included in tclPort.h.
*/
int memcmp(CONST VOID *s1, CONST VOID *s2, size_t n);
int memcmp(const void *s1, const void *s2, size_t n);
/*
*----------------------------------------------------------------------
@@ -38,12 +38,12 @@ int memcmp(CONST VOID *s1, CONST VOID *s2, size_t n);
int
memcmp(
CONST VOID *s1, /* First string. */
CONST VOID *s2, /* Second string. */
const void *s1, /* First string. */
const void *s2, /* Second string. */
size_t n) /* Length to compare. */
{
CONST unsigned char *ptr1 = (CONST unsigned char *) s1;
CONST unsigned char *ptr2 = (CONST unsigned char *) s2;
const unsigned char *ptr1 = (const unsigned char *) s1;
const unsigned char *ptr2 = (const unsigned char *) s2;
for ( ; n-- ; ptr1++, ptr2++) {
unsigned char u1 = *ptr1, u2 = *ptr2;
+78
View File
@@ -0,0 +1,78 @@
/*
* mkstemp.c --
*
* Source code for the "mkstemp" library routine.
*
* Copyright (c) 2009 Donal K. Fellows
*
* See the file "license.terms" for information on usage and redistribution of
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#include <errno.h>
#include <fcntl.h>
#include <stdlib.h>
#include <unistd.h>
/*
*----------------------------------------------------------------------
*
* mkstemp --
*
* Create an open temporary file from a template.
*
* Results:
* A file descriptor, or -1 (with errno set) in the case of an error.
*
* Side effects:
* The template is updated to contain the real filename.
*
*----------------------------------------------------------------------
*/
int
mkstemp(
char *template) /* Template for filename. */
{
static const char alphanumerics[] =
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
register char *a, *b;
int fd, count, alphanumericsLen = strlen(alphanumerics); /* == 62 */
a = template + strlen(template);
while (a > template && *(a-1) == 'X') {
a--;
}
if (a == template) {
errno = ENOENT;
return -1;
}
/*
* We'll only try up to 10 times; after that, we're suffering from enemy
* action and should let the caller know.
*/
count = 10;
do {
/*
* Replace the X's in the original template with random alphanumeric
* digits.
*/
for (b=a ; *b ; b++) {
float r = rand() / ((float) RAND_MAX);
*b = alphanumerics[(int)(r * alphanumericsLen)];
}
/*
* Template is now realized; try to open (with correct options).
*/
fd = open(template, O_RDWR|O_CREAT|O_EXCL, 0600);
} while (fd == -1 && errno == EEXIST && --count > 0);
return fd;
}
+6 -6
View File
@@ -1,4 +1,4 @@
/*
/*
* opendir.c --
*
* This file provides dirent-style directory-reading procedures for V7
@@ -10,7 +10,7 @@
#undef DIRSIZ
#define DIRSIZ(dp) \
((sizeof (struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
((sizeof(struct dirent) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
/*
* open a directory.
@@ -28,7 +28,7 @@ opendir(
if ((fd = open(myname, 0, 0)) == -1) {
return NULL;
}
dirp = (DIR *) ckalloc(sizeof(DIR));
dirp = (DIR *) Tcl_Alloc(sizeof(DIR));
if (dirp == NULL) {
/* unreachable? */
close(fd);
@@ -45,14 +45,14 @@ opendir(
#ifndef pyr
#define ODIRSIZ 14
struct olddirect {
struct olddirect {
ino_t od_ino;
char od_name[ODIRSIZ];
};
#else /* a Pyramid in the ATT universe */
#define ODIRSIZ 248
struct olddirect {
struct olddirect {
long od_ino;
short od_fill1, od_fill2;
char od_name[ODIRSIZ];
@@ -106,5 +106,5 @@ closedir(
close(dirp->dd_fd);
dirp->dd_fd = -1;
dirp->dd_loc = 0;
ckfree((char *) dirp);
Tcl_Free(dirp);
}
+8 -8
View File
@@ -1,4 +1,4 @@
/*
/*
* strncasecmp.c --
*
* Source code for the "strncasecmp" library routine.
@@ -18,7 +18,7 @@
* sequences.
*/
static unsigned char charmap[] = {
static const unsigned char charmap[] = {
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
@@ -57,8 +57,8 @@ static unsigned char charmap[] = {
* Here are the prototypes just in case they are not included in tclPort.h.
*/
int strncasecmp(CONST char *s1, CONST char *s2, size_t n);
int strcasecmp(CONST char *s1, CONST char *s2);
int strncasecmp(const char *s1, const char *s2, size_t n);
int strcasecmp(const char *s1, const char *s2);
/*
*----------------------------------------------------------------------
@@ -79,8 +79,8 @@ int strcasecmp(CONST char *s1, CONST char *s2);
int
strcasecmp(
CONST char *s1, /* First string. */
CONST char *s2) /* Second string. */
const char *s1, /* First string. */
const char *s2) /* Second string. */
{
unsigned char u1, u2;
@@ -114,8 +114,8 @@ strcasecmp(
int
strncasecmp(
CONST char *s1, /* First string. */
CONST char *s2, /* Second string. */
const char *s1, /* First string. */
const char *s2, /* Second string. */
size_t length) /* Maximum number of characters to compare
* (stop earlier if the end of either string
* is reached). */
+1 -1
View File
@@ -1,4 +1,4 @@
/*
/*
* strstr.c --
*
* Source code for the "strstr" library routine.
+11 -11
View File
@@ -1,4 +1,4 @@
/*
/*
* strtod.c --
*
* Source code for the "strtod" library procedure.
@@ -11,7 +11,6 @@
*/
#include "tclInt.h"
#include <ctype.h>
#ifndef TRUE
#define TRUE 1
@@ -21,12 +20,12 @@
#define NULL 0
#endif
static int maxExponent = 511; /* Largest possible base 10 exponent. Any
static const int maxExponent = 511; /* Largest possible base 10 exponent. Any
* exponent larger than this will already
* produce underflow or overflow, so there's
* no need to worry about additional digits.
*/
static double powersOf10[] = { /* Table giving binary powers of 10. Entry */
static const double powersOf10[] = { /* Table giving binary powers of 10. Entry */
10., /* is 10^2^i. Used to convert decimal */
100., /* exponents into floating-point numbers. */
1.0e4,
@@ -61,7 +60,7 @@ static double powersOf10[] = { /* Table giving binary powers of 10. Entry */
double
strtod(
CONST char *string, /* A decimal ASCII floating-point number,
const char *string, /* A decimal ASCII floating-point number,
* optionally preceded by white space. Must
* have form "-I.FE-X", where I is the integer
* part of the mantissa, F is the fractional
@@ -76,8 +75,9 @@ strtod(
* address here. */
{
int sign, expSign = FALSE;
double fraction, dblExp, *d;
register CONST char *p;
double fraction, dblExp;
const double *d;
register const char *p;
register int c;
int exp = 0; /* Exponent read from "EX" field. */
int fracExp = 0; /* Exponent that derives from the fractional
@@ -92,7 +92,7 @@ strtod(
int mantSize; /* Number of digits in mantissa. */
int decPt; /* Number of mantissa digits BEFORE decimal
* point. */
CONST char *pExp; /* Temporarily holds location of exponent in
const char *pExp; /* Temporarily holds location of exponent in
* string. */
/*
@@ -137,7 +137,7 @@ strtod(
* has more than 18 digits, ignore the extras, since they can't affect the
* value anyway.
*/
pExp = p;
p -= mantSize;
if (decPt < 0) {
@@ -217,7 +217,7 @@ strtod(
* by processing the exponent one bit at a time to combine many powers of
* 2 of 10. Then combine the exponent with the fraction.
*/
if (exp < 0) {
expSign = TRUE;
exp = -exp;
@@ -229,7 +229,7 @@ strtod(
errno = ERANGE;
}
dblExp = 1.0;
for (d = powersOf10; exp != 0; exp >>= 1, d += 1) {
for (d = powersOf10; exp != 0; exp >>= 1, ++d) {
if (exp & 01) {
dblExp *= *d;
}
+3 -4
View File
@@ -1,4 +1,4 @@
/*
/*
* strtol.c --
*
* Source code for the "strtol" library procedure.
@@ -10,7 +10,6 @@
* this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#include <ctype.h>
#include "tclInt.h"
/*
@@ -34,7 +33,7 @@
long int
strtol(
CONST char *string, /* String of ASCII digits, possibly preceded
const char *string, /* String of ASCII digits, possibly preceded
* by white space. For bases greater than 10,
* either lower- or upper-case digits may be
* used. */
@@ -46,7 +45,7 @@ strtol(
* hex, "0" means octal, anything else means
* decimal. */
{
register CONST char *p;
register const char *p;
long result;
/*
+6 -6
View File
@@ -1,4 +1,4 @@
/*
/*
* strtoul.c --
*
* Source code for the "strtoul" library procedure.
@@ -18,7 +18,7 @@
* characters).
*/
static char cvtIn[] = {
static const char cvtIn[] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, /* '0' - '9' */
100, 100, 100, 100, 100, 100, 100, /* punctuation */
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 'A' - 'Z' */
@@ -50,7 +50,7 @@ static char cvtIn[] = {
unsigned long int
strtoul(
CONST char *string, /* String of ASCII digits, possibly preceded
const char *string, /* String of ASCII digits, possibly preceded
* by white space. For bases greater than 10,
* either lower- or upper-case digits may be
* used. */
@@ -62,7 +62,7 @@ strtoul(
* hex, "0" means octal, anything else means
* decimal. */
{
register CONST char *p;
register const char *p;
register unsigned long int result = 0;
register unsigned digit;
int anyDigits = 0;
@@ -90,7 +90,7 @@ strtoul(
* If no base was provided, pick one from the leading characters of the
* string.
*/
if (base == 0) {
if (*p == '0') {
p += 1;
@@ -206,7 +206,7 @@ strtoul(
if (overflow) {
errno = ERANGE;
return ULONG_MAX;
}
}
if (negative) {
return -result;
}
+1 -1
View File
@@ -20,7 +20,7 @@
#define NULL 0
#endif
/*
/*
* Strict POSIX stuff goes here. Extensions go down below, in the ifndef
* _POSIX_SOURCE section.
*/
+3 -3
View File
@@ -1,4 +1,4 @@
/*
/*
* waitpid.c --
*
* This procedure emulates the POSIX waitpid kernel call on BSD systems
@@ -100,7 +100,7 @@ waitpid(
} else {
prevPtr->nextPtr = waitPtr->nextPtr;
}
ckfree((char *) waitPtr);
Tcl_Free(waitPtr);
return result;
}
@@ -156,7 +156,7 @@ waitpid(
goto waitAgain;
}
}
waitPtr = (WaitInfo *) ckalloc(sizeof(WaitInfo));
waitPtr = (WaitInfo *) Tcl_Alloc(sizeof(WaitInfo));
waitPtr->pid = result;
waitPtr->status = status;
waitPtr->nextPtr = deadList;
+249
View File
@@ -0,0 +1,249 @@
cmake_minimum_required(VERSION 2.4.4)
set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON)
project(zlib C)
set(VERSION "1.2.11")
option(ASM686 "Enable building i686 assembly implementation")
option(AMD64 "Enable building amd64 assembly implementation")
set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables")
set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries")
set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers")
set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages")
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
include(CheckTypeSize)
include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckCSourceCompiles)
enable_testing()
check_include_file(sys/types.h HAVE_SYS_TYPES_H)
check_include_file(stdint.h HAVE_STDINT_H)
check_include_file(stddef.h HAVE_STDDEF_H)
#
# Check to see if we have large file support
#
set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1)
# We add these other definitions here because CheckTypeSize.cmake
# in CMake 2.4.x does not automatically do so and we want
# compatibility with CMake 2.4.x.
if(HAVE_SYS_TYPES_H)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H)
endif()
if(HAVE_STDINT_H)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H)
endif()
if(HAVE_STDDEF_H)
list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H)
endif()
check_type_size(off64_t OFF64_T)
if(HAVE_OFF64_T)
add_definitions(-D_LARGEFILE64_SOURCE=1)
endif()
set(CMAKE_REQUIRED_DEFINITIONS) # clear variable
#
# Check for fseeko
#
check_function_exists(fseeko HAVE_FSEEKO)
if(NOT HAVE_FSEEKO)
add_definitions(-DNO_FSEEKO)
endif()
#
# Check for unistd.h
#
check_include_file(unistd.h Z_HAVE_UNISTD_H)
if(MSVC)
set(CMAKE_DEBUG_POSTFIX "d")
add_definitions(-D_CRT_SECURE_NO_DEPRECATE)
add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
endif()
if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR)
# If we're doing an out of source build and the user has a zconf.h
# in their source tree...
if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h)
message(STATUS "Renaming")
message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h")
message(STATUS "to 'zconf.h.included' because this file is included with zlib")
message(STATUS "but CMake generates it automatically in the build directory.")
file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included)
endif()
endif()
set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc)
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein
${ZLIB_PC} @ONLY)
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein
${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY)
include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
#============================================================================
# zlib
#============================================================================
set(ZLIB_PUBLIC_HDRS
${CMAKE_CURRENT_BINARY_DIR}/zconf.h
zlib.h
)
set(ZLIB_PRIVATE_HDRS
crc32.h
deflate.h
gzguts.h
inffast.h
inffixed.h
inflate.h
inftrees.h
trees.h
zutil.h
)
set(ZLIB_SRCS
adler32.c
compress.c
crc32.c
deflate.c
gzclose.c
gzlib.c
gzread.c
gzwrite.c
inflate.c
infback.c
inftrees.c
inffast.c
trees.c
uncompr.c
zutil.c
)
if(NOT MINGW)
set(ZLIB_DLL_SRCS
win32/zlib1.rc # If present will override custom build rule below.
)
endif()
if(CMAKE_COMPILER_IS_GNUCC)
if(ASM686)
set(ZLIB_ASMS contrib/asm686/match.S)
elseif (AMD64)
set(ZLIB_ASMS contrib/amd64/amd64-match.S)
endif ()
if(ZLIB_ASMS)
add_definitions(-DASMV)
set_source_files_properties(${ZLIB_ASMS} PROPERTIES LANGUAGE C COMPILE_FLAGS -DNO_UNDERLINE)
endif()
endif()
if(MSVC)
if(ASM686)
ENABLE_LANGUAGE(ASM_MASM)
set(ZLIB_ASMS
contrib/masmx86/inffas32.asm
contrib/masmx86/match686.asm
)
elseif (AMD64)
ENABLE_LANGUAGE(ASM_MASM)
set(ZLIB_ASMS
contrib/masmx64/gvmat64.asm
contrib/masmx64/inffasx64.asm
)
endif()
if(ZLIB_ASMS)
add_definitions(-DASMV -DASMINF)
endif()
endif()
# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION
file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents)
string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*"
"\\1" ZLIB_FULL_VERSION ${_zlib_h_contents})
if(MINGW)
# This gets us DLL resource information when compiling on MinGW.
if(NOT CMAKE_RC_COMPILER)
set(CMAKE_RC_COMPILER windres.exe)
endif()
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
COMMAND ${CMAKE_RC_COMPILER}
-D GCC_WINDRES
-I ${CMAKE_CURRENT_SOURCE_DIR}
-I ${CMAKE_CURRENT_BINARY_DIR}
-o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj
-i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc)
set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj)
endif(MINGW)
add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS})
set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL)
set_target_properties(zlib PROPERTIES SOVERSION 1)
if(NOT CYGWIN)
# This property causes shared libraries on Linux to have the full version
# encoded into their final filename. We disable this on Cygwin because
# it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll
# seems to be the default.
#
# This has no effect with MSVC, on that platform the version info for
# the DLL comes from the resource file win32/zlib1.rc
set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION})
endif()
if(UNIX)
# On unix-like platforms the library is almost always called libz
set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z)
if(NOT APPLE)
set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"")
endif()
elseif(BUILD_SHARED_LIBS AND WIN32)
# Creates zlib1.dll when building shared library version
set_target_properties(zlib PROPERTIES SUFFIX "1.dll")
endif()
if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL )
install(TARGETS zlib zlibstatic
RUNTIME DESTINATION "${INSTALL_BIN_DIR}"
ARCHIVE DESTINATION "${INSTALL_LIB_DIR}"
LIBRARY DESTINATION "${INSTALL_LIB_DIR}" )
endif()
if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL )
install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}")
endif()
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3")
endif()
if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL )
install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}")
endif()
#============================================================================
# Example binaries
#============================================================================
add_executable(example test/example.c)
target_link_libraries(example zlib)
add_test(example example)
add_executable(minigzip test/minigzip.c)
target_link_libraries(minigzip zlib)
if(HAVE_OFF64_T)
add_executable(example64 test/example.c)
target_link_libraries(example64 zlib)
set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
add_test(example64 example64)
add_executable(minigzip64 test/minigzip.c)
target_link_libraries(minigzip64 zlib)
set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64")
endif()
File diff suppressed because it is too large. Load diff
+368
View File
@@ -0,0 +1,368 @@
Frequently Asked Questions about zlib
If your question is not there, please check the zlib home page
http://zlib.net/ which may have more recent information.
The lastest zlib FAQ is at http://zlib.net/zlib_faq.html
1. Is zlib Y2K-compliant?
Yes. zlib doesn't handle dates.
2. Where can I get a Windows DLL version?
The zlib sources can be compiled without change to produce a DLL. See the
file win32/DLL_FAQ.txt in the zlib distribution. Pointers to the
precompiled DLL are found in the zlib web site at http://zlib.net/ .
3. Where can I get a Visual Basic interface to zlib?
See
* http://marknelson.us/1997/01/01/zlib-engine/
* win32/DLL_FAQ.txt in the zlib distribution
4. compress() returns Z_BUF_ERROR.
Make sure that before the call of compress(), the length of the compressed
buffer is equal to the available size of the compressed buffer and not
zero. For Visual Basic, check that this parameter is passed by reference
("as any"), not by value ("as long").
5. deflate() or inflate() returns Z_BUF_ERROR.
Before making the call, make sure that avail_in and avail_out are not zero.
When setting the parameter flush equal to Z_FINISH, also make sure that
avail_out is big enough to allow processing all pending input. Note that a
Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be
made with more input or output space. A Z_BUF_ERROR may in fact be
unavoidable depending on how the functions are used, since it is not
possible to tell whether or not there is more output pending when
strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a
heavily annotated example.
6. Where's the zlib documentation (man pages, etc.)?
It's in zlib.h . Examples of zlib usage are in the files test/example.c
and test/minigzip.c, with more in examples/ .
7. Why don't you use GNU autoconf or libtool or ...?
Because we would like to keep zlib as a very small and simple package.
zlib is rather portable and doesn't need much configuration.
8. I found a bug in zlib.
Most of the time, such problems are due to an incorrect usage of zlib.
Please try to reproduce the problem with a small program and send the
corresponding source to us at zlib@gzip.org . Do not send multi-megabyte
data files without prior agreement.
9. Why do I get "undefined reference to gzputc"?
If "make test" produces something like
example.o(.text+0x154): undefined reference to `gzputc'
check that you don't have old files libz.* in /usr/lib, /usr/local/lib or
/usr/X11R6/lib. Remove any old versions, then do "make install".
10. I need a Delphi interface to zlib.
See the contrib/delphi directory in the zlib distribution.
11. Can zlib handle .zip archives?
Not by itself, no. See the directory contrib/minizip in the zlib
distribution.
12. Can zlib handle .Z files?
No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt
the code of uncompress on your own.
13. How can I make a Unix shared library?
By default a shared (and a static) library is built for Unix. So:
make distclean
./configure
make
14. How do I install a shared zlib library on Unix?
After the above, then:
make install
However, many flavors of Unix come with a shared zlib already installed.
Before going to the trouble of compiling a shared version of zlib and
trying to install it, you may want to check if it's already there! If you
can #include <zlib.h>, it's there. The -lz option will probably link to
it. You can check the version at the top of zlib.h or with the
ZLIB_VERSION symbol defined in zlib.h .
15. I have a question about OttoPDF.
We are not the authors of OttoPDF. The real author is on the OttoPDF web
site: Joel Hainley, jhainley@myndkryme.com.
16. Can zlib decode Flate data in an Adobe PDF file?
Yes. See http://www.pdflib.com/ . To modify PDF forms, see
http://sourceforge.net/projects/acroformtool/ .
17. Why am I getting this "register_frame_info not found" error on Solaris?
After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib
generates an error such as:
ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so:
symbol __register_frame_info: referenced symbol not found
The symbol __register_frame_info is not part of zlib, it is generated by
the C compiler (cc or gcc). You must recompile applications using zlib
which have this problem. This problem is specific to Solaris. See
http://www.sunfreeware.com for Solaris versions of zlib and applications
using zlib.
18. Why does gzip give an error on a file I make with compress/deflate?
The compress and deflate functions produce data in the zlib format, which
is different and incompatible with the gzip format. The gz* functions in
zlib on the other hand use the gzip format. Both the zlib and gzip formats
use the same compressed data format internally, but have different headers
and trailers around the compressed data.
19. Ok, so why are there two different formats?
The gzip format was designed to retain the directory information about a
single file, such as the name and last modification date. The zlib format
on the other hand was designed for in-memory and communication channel
applications, and has a much more compact header and trailer and uses a
faster integrity check than gzip.
20. Well that's nice, but how do I make a gzip file in memory?
You can request that deflate write the gzip format instead of the zlib
format using deflateInit2(). You can also request that inflate decode the
gzip format using inflateInit2(). Read zlib.h for more details.
21. Is zlib thread-safe?
Yes. However any library routines that zlib uses and any application-
provided memory allocation routines must also be thread-safe. zlib's gz*
functions use stdio library routines, and most of zlib's functions use the
library memory allocation routines by default. zlib's *Init* functions
allow for the application to provide custom memory allocation routines.
Of course, you should only operate on any given zlib or gzip stream from a
single thread at a time.
22. Can I use zlib in my commercial application?
Yes. Please read the license in zlib.h.
23. Is zlib under the GNU license?
No. Please read the license in zlib.h.
24. The license says that altered source versions must be "plainly marked". So
what exactly do I need to do to meet that requirement?
You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In
particular, the final version number needs to be changed to "f", and an
identification string should be appended to ZLIB_VERSION. Version numbers
x.x.x.f are reserved for modifications to zlib by others than the zlib
maintainers. For example, if the version of the base zlib you are altering
is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and
ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also
update the version strings in deflate.c and inftrees.c.
For altered source distributions, you should also note the origin and
nature of the changes in zlib.h, as well as in ChangeLog and README, along
with the dates of the alterations. The origin should include at least your
name (or your company's name), and an email address to contact for help or
issues with the library.
Note that distributing a compiled zlib library along with zlib.h and
zconf.h is also a source distribution, and so you should change
ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes
in zlib.h as you would for a full source distribution.
25. Will zlib work on a big-endian or little-endian architecture, and can I
exchange compressed data between them?
Yes and yes.
26. Will zlib work on a 64-bit machine?
Yes. It has been tested on 64-bit machines, and has no dependence on any
data types being limited to 32-bits in length. If you have any
difficulties, please provide a complete problem report to zlib@gzip.org
27. Will zlib decompress data from the PKWare Data Compression Library?
No. The PKWare DCL uses a completely different compressed data format than
does PKZIP and zlib. However, you can look in zlib's contrib/blast
directory for a possible solution to your problem.
28. Can I access data randomly in a compressed stream?
No, not without some preparation. If when compressing you periodically use
Z_FULL_FLUSH, carefully write all the pending data at those points, and
keep an index of those locations, then you can start decompression at those
points. You have to be careful to not use Z_FULL_FLUSH too often, since it
can significantly degrade compression. Alternatively, you can scan a
deflate stream once to generate an index, and then use that index for
random access. See examples/zran.c .
29. Does zlib work on MVS, OS/390, CICS, etc.?
It has in the past, but we have not heard of any recent evidence. There
were working ports of zlib 1.1.4 to MVS, but those links no longer work.
If you know of recent, successful applications of zlib on these operating
systems, please let us know. Thanks.
30. Is there some simpler, easier to read version of inflate I can look at to
understand the deflate format?
First off, you should read RFC 1951. Second, yes. Look in zlib's
contrib/puff directory.
31. Does zlib infringe on any patents?
As far as we know, no. In fact, that was originally the whole point behind
zlib. Look here for some more information:
http://www.gzip.org/#faq11
32. Can zlib work with greater than 4 GB of data?
Yes. inflate() and deflate() will process any amount of data correctly.
Each call of inflate() or deflate() is limited to input and output chunks
of the maximum value that can be stored in the compiler's "unsigned int"
type, but there is no limit to the number of chunks. Note however that the
strm.total_in and strm_total_out counters may be limited to 4 GB. These
counters are provided as a convenience and are not used internally by
inflate() or deflate(). The application can easily set up its own counters
updated after each call of inflate() or deflate() to count beyond 4 GB.
compress() and uncompress() may be limited to 4 GB, since they operate in a
single call. gzseek() and gztell() may be limited to 4 GB depending on how
zlib is compiled. See the zlibCompileFlags() function in zlib.h.
The word "may" appears several times above since there is a 4 GB limit only
if the compiler's "long" type is 32 bits. If the compiler's "long" type is
64 bits, then the limit is 16 exabytes.
33. Does zlib have any security vulnerabilities?
The only one that we are aware of is potentially in gzprintf(). If zlib is
compiled to use sprintf() or vsprintf(), then there is no protection
against a buffer overflow of an 8K string space (or other value as set by
gzbuffer()), other than the caller of gzprintf() assuring that the output
will not exceed 8K. On the other hand, if zlib is compiled to use
snprintf() or vsnprintf(), which should normally be the case, then there is
no vulnerability. The ./configure script will display warnings if an
insecure variation of sprintf() will be used by gzprintf(). Also the
zlibCompileFlags() function will return information on what variant of
sprintf() is used by gzprintf().
If you don't have snprintf() or vsnprintf() and would like one, you can
find a portable implementation here:
http://www.ijs.si/software/snprintf/
Note that you should be using the most recent version of zlib. Versions
1.1.3 and before were subject to a double-free vulnerability, and versions
1.2.1 and 1.2.2 were subject to an access exception when decompressing
invalid compressed data.
34. Is there a Java version of zlib?
Probably what you want is to use zlib in Java. zlib is already included
as part of the Java SDK in the java.util.zip package. If you really want
a version of zlib written in the Java language, look on the zlib home
page for links: http://zlib.net/ .
35. I get this or that compiler or source-code scanner warning when I crank it
up to maximally-pedantic. Can't you guys write proper code?
Many years ago, we gave up attempting to avoid warnings on every compiler
in the universe. It just got to be a waste of time, and some compilers
were downright silly as well as contradicted each other. So now, we simply
make sure that the code always works.
36. Valgrind (or some similar memory access checker) says that deflate is
performing a conditional jump that depends on an uninitialized value.
Isn't that a bug?
No. That is intentional for performance reasons, and the output of deflate
is not affected. This only started showing up recently since zlib 1.2.x
uses malloc() by default for allocations, whereas earlier versions used
calloc(), which zeros out the allocated memory. Even though the code was
correct, versions 1.2.4 and later was changed to not stimulate these
checkers.
37. Will zlib read the (insert any ancient or arcane format here) compressed
data format?
Probably not. Look in the comp.compression FAQ for pointers to various
formats and associated software.
38. How can I encrypt/decrypt zip files with zlib?
zlib doesn't support encryption. The original PKZIP encryption is very
weak and can be broken with freely available programs. To get strong
encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib
compression. For PKZIP compatible "encryption", look at
http://www.info-zip.org/
39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?
"gzip" is the gzip format, and "deflate" is the zlib format. They should
probably have called the second one "zlib" instead to avoid confusion with
the raw deflate compressed data format. While the HTTP 1.1 RFC 2616
correctly points to the zlib specification in RFC 1950 for the "deflate"
transfer encoding, there have been reports of servers and browsers that
incorrectly produce or expect raw deflate data per the deflate
specification in RFC 1951, most notably Microsoft. So even though the
"deflate" transfer encoding using the zlib format would be the more
efficient approach (and in fact exactly what the zlib format was designed
for), using the "gzip" transfer encoding is probably more reliable due to
an unfortunate choice of name on the part of the HTTP 1.1 authors.
Bottom line: use the gzip format for HTTP 1.1 encoding.
40. Does zlib support the new "Deflate64" format introduced by PKWare?
No. PKWare has apparently decided to keep that format proprietary, since
they have not documented it as they have previous compression formats. In
any case, the compression improvements are so modest compared to other more
modern approaches, that it's not worth the effort to implement.
41. I'm having a problem with the zip functions in zlib, can you help?
There are no zip functions in zlib. You are probably using minizip by
Giles Vollant, which is found in the contrib directory of zlib. It is not
part of zlib. In fact none of the stuff in contrib is part of zlib. The
files in there are not supported by the zlib authors. You need to contact
the authors of the respective contribution for help.
42. The match.asm code in contrib is under the GNU General Public License.
Since it's part of zlib, doesn't that mean that all of zlib falls under the
GNU GPL?
No. The files in contrib are not part of zlib. They were contributed by
other authors and are provided as a convenience to the user within the zlib
distribution. Each item in contrib has its own license.
43. Is zlib subject to export controls? What is its ECCN?
zlib is not subject to export controls, and so is classified as EAR99.
44. Can you please sign these lengthy legal documents and fax them back to us
so that we can use your software in our product?
No. Go away. Shoo.
+68
View File
@@ -0,0 +1,68 @@
CMakeLists.txt cmake build file
ChangeLog history of changes
FAQ Frequently Asked Questions about zlib
INDEX this file
Makefile dummy Makefile that tells you to ./configure
Makefile.in template for Unix Makefile
README guess what
configure configure script for Unix
make_vms.com makefile for VMS
test/example.c zlib usages examples for build testing
test/minigzip.c minimal gzip-like functionality for build testing
test/infcover.c inf*.c code coverage for build coverage testing
treebuild.xml XML description of source file dependencies
zconf.h.cmakein zconf.h template for cmake
zconf.h.in zconf.h template for configure
zlib.3 Man page for zlib
zlib.3.pdf Man page in PDF format
zlib.map Linux symbol information
zlib.pc.in Template for pkg-config descriptor
zlib.pc.cmakein zlib.pc template for cmake
zlib2ansi perl script to convert source files for C++ compilation
amiga/ makefiles for Amiga SAS C
as400/ makefiles for AS/400
doc/ documentation for formats and algorithms
msdos/ makefiles for MSDOS
nintendods/ makefile for Nintendo DS
old/ makefiles for various architectures and zlib documentation
files that have not yet been updated for zlib 1.2.x
qnx/ makefiles for QNX
watcom/ makefiles for OpenWatcom
win32/ makefiles for Windows
zlib public header files (required for library use):
zconf.h
zlib.h
private source files used to build the zlib library:
adler32.c
compress.c
crc32.c
crc32.h
deflate.c
deflate.h
gzclose.c
gzguts.h
gzlib.c
gzread.c
gzwrite.c
infback.c
inffast.c
inffast.h
inffixed.h
inflate.c
inflate.h
inftrees.c
inftrees.h
trees.c
trees.h
uncompr.c
zutil.c
zutil.h
source files for sample programs
See examples/README.examples
unsupported contributions by third parties
See contrib/README.contrib
+5
View File
@@ -0,0 +1,5 @@
all:
-@echo "Please use ./configure first. Thank you."
distclean:
make -f Makefile.in distclean
+410
View File
@@ -0,0 +1,410 @@
# Makefile for zlib
# Copyright (C) 1995-2017 Jean-loup Gailly, Mark Adler
# For conditions of distribution and use, see copyright notice in zlib.h
# To compile and test, type:
# ./configure; make test
# Normally configure builds both a static and a shared library.
# If you want to build just a static library, use: ./configure --static
# To use the asm code, type:
# cp contrib/asm?86/match.S ./match.S
# make LOC=-DASMV OBJA=match.o
# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type:
# make install
# To install in $HOME instead of /usr/local, use:
# make install prefix=$HOME
CC=cc
CFLAGS=-O
#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
#CFLAGS=-g -DZLIB_DEBUG
#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
# -Wstrict-prototypes -Wmissing-prototypes
SFLAGS=-O
LDFLAGS=
TEST_LDFLAGS=-L. libz.a
LDSHARED=$(CC)
CPP=$(CC) -E
STATICLIB=libz.a
SHAREDLIB=libz.so
SHAREDLIBV=libz.so.1.2.11
SHAREDLIBM=libz.so.1
LIBS=$(STATICLIB) $(SHAREDLIBV)
AR=ar
ARFLAGS=rc
RANLIB=ranlib
LDCONFIG=ldconfig
LDSHAREDLIBC=-lc
TAR=tar
SHELL=/bin/sh
EXE=
prefix = /usr/local
exec_prefix = ${prefix}
libdir = ${exec_prefix}/lib
sharedlibdir = ${libdir}
includedir = ${prefix}/include
mandir = ${prefix}/share/man
man3dir = ${mandir}/man3
pkgconfigdir = ${libdir}/pkgconfig
SRCDIR=
ZINC=
ZINCOUT=-I.
OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o
OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
OBJC = $(OBJZ) $(OBJG)
PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo
PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG)
# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo
OBJA =
PIC_OBJA =
OBJS = $(OBJC) $(OBJA)
PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA)
all: static shared
static: example$(EXE) minigzip$(EXE)
shared: examplesh$(EXE) minigzipsh$(EXE)
all64: example64$(EXE) minigzip64$(EXE)
check: test
test: all teststatic testshared
teststatic: static
@TMPST=tmpst_$$; \
if echo hello world | ./minigzip | ./minigzip -d && ./example $$TMPST ; then \
echo ' *** zlib test OK ***'; \
else \
echo ' *** zlib test FAILED ***'; false; \
fi; \
rm -f $$TMPST
testshared: shared
@LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \
LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \
DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \
SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \
TMPSH=tmpsh_$$; \
if echo hello world | ./minigzipsh | ./minigzipsh -d && ./examplesh $$TMPSH; then \
echo ' *** zlib shared test OK ***'; \
else \
echo ' *** zlib shared test FAILED ***'; false; \
fi; \
rm -f $$TMPSH
test64: all64
@TMP64=tmp64_$$; \
if echo hello world | ./minigzip64 | ./minigzip64 -d && ./example64 $$TMP64; then \
echo ' *** zlib 64-bit test OK ***'; \
else \
echo ' *** zlib 64-bit test FAILED ***'; false; \
fi; \
rm -f $$TMP64
infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h
$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c
infcover: infcover.o libz.a
$(CC) $(CFLAGS) -o $@ infcover.o libz.a
cover: infcover
rm -f *.gcda
./infcover
gcov inf*.c
libz.a: $(OBJS)
$(AR) $(ARFLAGS) $@ $(OBJS)
-@ ($(RANLIB) $@ || true) >/dev/null 2>&1
match.o: match.S
$(CPP) match.S > _match.s
$(CC) -c _match.s
mv _match.o match.o
rm -f _match.s
match.lo: match.S
$(CPP) match.S > _match.s
$(CC) -c -fPIC _match.s
mv _match.o match.lo
rm -f _match.s
example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c
minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
$(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c
example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h
$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c
minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h
$(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c
adler32.o: $(SRCDIR)adler32.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c
crc32.o: $(SRCDIR)crc32.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c
deflate.o: $(SRCDIR)deflate.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c
infback.o: $(SRCDIR)infback.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c
inffast.o: $(SRCDIR)inffast.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c
inflate.o: $(SRCDIR)inflate.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c
inftrees.o: $(SRCDIR)inftrees.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c
trees.o: $(SRCDIR)trees.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c
zutil.o: $(SRCDIR)zutil.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c
compress.o: $(SRCDIR)compress.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c
uncompr.o: $(SRCDIR)uncompr.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c
gzclose.o: $(SRCDIR)gzclose.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c
gzlib.o: $(SRCDIR)gzlib.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c
gzread.o: $(SRCDIR)gzread.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c
gzwrite.o: $(SRCDIR)gzwrite.c
$(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c
adler32.lo: $(SRCDIR)adler32.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c
-@mv objs/adler32.o $@
crc32.lo: $(SRCDIR)crc32.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c
-@mv objs/crc32.o $@
deflate.lo: $(SRCDIR)deflate.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c
-@mv objs/deflate.o $@
infback.lo: $(SRCDIR)infback.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c
-@mv objs/infback.o $@
inffast.lo: $(SRCDIR)inffast.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c
-@mv objs/inffast.o $@
inflate.lo: $(SRCDIR)inflate.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c
-@mv objs/inflate.o $@
inftrees.lo: $(SRCDIR)inftrees.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c
-@mv objs/inftrees.o $@
trees.lo: $(SRCDIR)trees.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c
-@mv objs/trees.o $@
zutil.lo: $(SRCDIR)zutil.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c
-@mv objs/zutil.o $@
compress.lo: $(SRCDIR)compress.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c
-@mv objs/compress.o $@
uncompr.lo: $(SRCDIR)uncompr.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c
-@mv objs/uncompr.o $@
gzclose.lo: $(SRCDIR)gzclose.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c
-@mv objs/gzclose.o $@
gzlib.lo: $(SRCDIR)gzlib.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c
-@mv objs/gzlib.o $@
gzread.lo: $(SRCDIR)gzread.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c
-@mv objs/gzread.o $@
gzwrite.lo: $(SRCDIR)gzwrite.c
-@mkdir objs 2>/dev/null || test -d objs
$(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c
-@mv objs/gzwrite.o $@
placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a
$(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS)
rm -f $(SHAREDLIB) $(SHAREDLIBM)
ln -s $@ $(SHAREDLIB)
ln -s $@ $(SHAREDLIBM)
-@rmdir objs
example$(EXE): example.o $(STATICLIB)
$(CC) $(CFLAGS) -o $@ example.o $(TEST_LDFLAGS)
minigzip$(EXE): minigzip.o $(STATICLIB)
$(CC) $(CFLAGS) -o $@ minigzip.o $(TEST_LDFLAGS)
examplesh$(EXE): example.o $(SHAREDLIBV)
$(CC) $(CFLAGS) -o $@ example.o -L. $(SHAREDLIBV)
minigzipsh$(EXE): minigzip.o $(SHAREDLIBV)
$(CC) $(CFLAGS) -o $@ minigzip.o -L. $(SHAREDLIBV)
example64$(EXE): example64.o $(STATICLIB)
$(CC) $(CFLAGS) -o $@ example64.o $(TEST_LDFLAGS)
minigzip64$(EXE): minigzip64.o $(STATICLIB)
$(CC) $(CFLAGS) -o $@ minigzip64.o $(TEST_LDFLAGS)
install-libs: $(LIBS)
-@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi
-@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi
-@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi
-@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi
-@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi
rm -f $(DESTDIR)$(libdir)/$(STATICLIB)
cp $(STATICLIB) $(DESTDIR)$(libdir)
chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
-@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
-@if test -n "$(SHAREDLIBV)"; then \
rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \
echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \
chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \
echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \
rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \
ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \
($(LDCONFIG) || true) >/dev/null 2>&1; \
fi
rm -f $(DESTDIR)$(man3dir)/zlib.3
cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir)
chmod 644 $(DESTDIR)$(man3dir)/zlib.3
rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc
cp zlib.pc $(DESTDIR)$(pkgconfigdir)
chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc
# The ranlib in install is needed on NeXTSTEP which checks file times
# ldconfig is for Linux
install: install-libs
-@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi
rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir)
chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h
uninstall:
cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h
cd $(DESTDIR)$(libdir) && rm -f libz.a; \
if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \
rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \
fi
cd $(DESTDIR)$(man3dir) && rm -f zlib.3
cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc
docs: zlib.3.pdf
zlib.3.pdf: $(SRCDIR)zlib.3
groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@
zconf.h.cmakein: $(SRCDIR)zconf.h.in
-@ TEMPFILE=zconfh_$$; \
echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\
sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\
touch -r $(SRCDIR)zconf.h.in $@ &&\
rm $$TEMPFILE
zconf: $(SRCDIR)zconf.h.in
cp -p $(SRCDIR)zconf.h.in zconf.h
mostlyclean: clean
clean:
rm -f *.o *.lo *~ \
example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \
example64$(EXE) minigzip64$(EXE) \
infcover \
libz.* foo.gz so_locations \
_match.s maketree contrib/infback9/*.o
rm -rf objs
rm -f *.gcda *.gcno *.gcov
rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov
maintainer-clean: distclean
distclean: clean zconf zconf.h.cmakein docs
rm -f Makefile zlib.pc configure.log
-@rm -f .DS_Store
@if [ -f Makefile.in ]; then \
printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \
printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \
touch -r $(SRCDIR)Makefile.in Makefile ; fi
@if [ ! -f zconf.h.in ]; then rm -f zconf.h zconf.h.cmakein ; fi
@if [ ! -f zlib.3 ]; then rm -f zlib.3.pdf ; fi
tags:
etags $(SRCDIR)*.[ch]
adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h
crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h
compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h
crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h
deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h
infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h
inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h
inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h
trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h
+115
View File
@@ -0,0 +1,115 @@
ZLIB DATA COMPRESSION LIBRARY
zlib 1.2.11 is a general purpose data compression library. All the code is
thread safe. The data format used by the zlib library is described by RFCs
(Request for Comments) 1950 to 1952 in the files
http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and
rfc1952 (gzip format).
All functions of the compression library are documented in the file zlib.h
(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example
of the library is given in the file test/example.c which also tests that
the library is working correctly. Another example is given in the file
test/minigzip.c. The compression library itself is composed of all source
files in the root directory.
To compile all files and run the test program, follow the instructions given at
the top of Makefile.in. In short "./configure; make test", and if that goes
well, "make install" should work for most flavors of Unix. For Windows, use
one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use
make_vms.com.
Questions about zlib should be sent to <zlib@gzip.org>, or to Gilles Vollant
<info@winimage.com> for the Windows DLL version. The zlib home page is
http://zlib.net/ . Before reporting a problem, please check this site to
verify that you have the latest version of zlib; otherwise get the latest
version and check whether the problem still exists or not.
PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help.
Mark Nelson <markn@ieee.org> wrote an article about zlib for the Jan. 1997
issue of Dr. Dobb's Journal; a copy of the article is available at
http://marknelson.us/1997/01/01/zlib-engine/ .
The changes made in version 1.2.11 are documented in the file ChangeLog.
Unsupported third party contributions are provided in directory contrib/ .
zlib is available in Java using the java.util.zip package, documented at
http://java.sun.com/developer/technicalArticles/Programming/compression/ .
A Perl interface to zlib written by Paul Marquess <pmqs@cpan.org> is available
at CPAN (Comprehensive Perl Archive Network) sites, including
http://search.cpan.org/~pmqs/IO-Compress-Zlib/ .
A Python interface to zlib written by A.M. Kuchling <amk@amk.ca> is
available in Python 1.5 and later versions, see
http://docs.python.org/library/zlib.html .
zlib is built into tcl: http://wiki.tcl.tk/4610 .
An experimental package to read and write files in .zip format, written on top
of zlib by Gilles Vollant <info@winimage.com>, is available in the
contrib/minizip directory of zlib.
Notes for some targets:
- For Windows DLL versions, please see win32/DLL_FAQ.txt
- For 64-bit Irix, deflate.c must be compiled without any optimization. With
-O, one libpng test fails. The test works in 32 bit mode (with the -n32
compiler flag). The compiler bug has been reported to SGI.
- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works
when compiled with cc.
- On Digital Unix 4.0D (formely OSF/1) on AlphaServer, the cc option -std1 is
necessary to get gzprintf working correctly. This is done by configure.
- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with
other compilers. Use "make test" to check your compiler.
- gzdopen is not supported on RISCOS or BEOS.
- For PalmOs, see http://palmzlib.sourceforge.net/
Acknowledgments:
The deflate format used by zlib was defined by Phil Katz. The deflate and
zlib specifications were written by L. Peter Deutsch. Thanks to all the
people who reported problems and suggested various improvements in zlib; they
are too numerous to cite here.
Copyright notice:
(C) 1995-2017 Jean-loup Gailly and Mark Adler
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Jean-loup Gailly Mark Adler
jloup@gzip.org madler@alumni.caltech.edu
If you use the zlib library in a product, we would appreciate *not* receiving
lengthy legal documents to sign. The sources are provided for free but without
warranty of any kind. The library has been entirely written by Jean-loup
Gailly and Mark Adler; it does not include third-party code.
If you redistribute modified sources, we would appreciate that you include in
the file ChangeLog history information documenting your changes. Please read
the FAQ for more information on the distribution of modified source versions.
+186
View File
@@ -0,0 +1,186 @@
/* adler32.c -- compute the Adler-32 checksum of a data stream
* Copyright (C) 1995-2011, 2016 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#include "zutil.h"
local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
#define BASE 65521U /* largest prime smaller than 65536 */
#define NMAX 5552
/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;}
#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1);
#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2);
#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4);
#define DO16(buf) DO8(buf,0); DO8(buf,8);
/* use NO_DIVIDE if your processor does not do division in hardware --
try it both ways to see which is faster */
#ifdef NO_DIVIDE
/* note that this assumes BASE is 65521, where 65536 % 65521 == 15
(thank you to John Reiser for pointing this out) */
# define CHOP(a) \
do { \
unsigned long tmp = a >> 16; \
a &= 0xffffUL; \
a += (tmp << 4) - tmp; \
} while (0)
# define MOD28(a) \
do { \
CHOP(a); \
if (a >= BASE) a -= BASE; \
} while (0)
# define MOD(a) \
do { \
CHOP(a); \
MOD28(a); \
} while (0)
# define MOD63(a) \
do { /* this assumes a is not negative */ \
z_off64_t tmp = a >> 32; \
a &= 0xffffffffL; \
a += (tmp << 8) - (tmp << 5) + tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
tmp = a >> 16; \
a &= 0xffffL; \
a += (tmp << 4) - tmp; \
if (a >= BASE) a -= BASE; \
} while (0)
#else
# define MOD(a) a %= BASE
# define MOD28(a) a %= BASE
# define MOD63(a) a %= BASE
#endif
/* ========================================================================= */
uLong ZEXPORT adler32_z(adler, buf, len)
uLong adler;
const Bytef *buf;
z_size_t len;
{
unsigned long sum2;
unsigned n;
/* split Adler-32 into component sums */
sum2 = (adler >> 16) & 0xffff;
adler &= 0xffff;
/* in case user likes doing a byte at a time, keep it fast */
if (len == 1) {
adler += buf[0];
if (adler >= BASE)
adler -= BASE;
sum2 += adler;
if (sum2 >= BASE)
sum2 -= BASE;
return adler | (sum2 << 16);
}
/* initial Adler-32 value (deferred check for len == 1 speed) */
if (buf == Z_NULL)
return 1L;
/* in case short lengths are provided, keep it somewhat fast */
if (len < 16) {
while (len--) {
adler += *buf++;
sum2 += adler;
}
if (adler >= BASE)
adler -= BASE;
MOD28(sum2); /* only added so many BASE's */
return adler | (sum2 << 16);
}
/* do length NMAX blocks -- requires just one modulo operation */
while (len >= NMAX) {
len -= NMAX;
n = NMAX / 16; /* NMAX is divisible by 16 */
do {
DO16(buf); /* 16 sums unrolled */
buf += 16;
} while (--n);
MOD(adler);
MOD(sum2);
}
/* do remaining bytes (less than NMAX, still just one modulo) */
if (len) { /* avoid modulos if none remaining */
while (len >= 16) {
len -= 16;
DO16(buf);
buf += 16;
}
while (len--) {
adler += *buf++;
sum2 += adler;
}
MOD(adler);
MOD(sum2);
}
/* return recombined sums */
return adler | (sum2 << 16);
}
/* ========================================================================= */
uLong ZEXPORT adler32(adler, buf, len)
uLong adler;
const Bytef *buf;
uInt len;
{
return adler32_z(adler, buf, len);
}
/* ========================================================================= */
local uLong adler32_combine_(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
unsigned long sum1;
unsigned long sum2;
unsigned rem;
/* for negative len, return invalid adler32 as a clue for debugging */
if (len2 < 0)
return 0xffffffffUL;
/* the derivation of this formula is left as an exercise for the reader */
MOD63(len2); /* assumes len2 >= 0 */
rem = (unsigned)len2;
sum1 = adler1 & 0xffff;
sum2 = rem * sum1;
MOD(sum2);
sum1 += (adler2 & 0xffff) + BASE - 1;
sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem;
if (sum1 >= BASE) sum1 -= BASE;
if (sum1 >= BASE) sum1 -= BASE;
if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1);
if (sum2 >= BASE) sum2 -= BASE;
return sum1 | (sum2 << 16);
}
/* ========================================================================= */
uLong ZEXPORT adler32_combine(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
uLong ZEXPORT adler32_combine64(adler1, adler2, len2)
uLong adler1;
uLong adler2;
z_off64_t len2;
{
return adler32_combine_(adler1, adler2, len2);
}
+69
View File
@@ -0,0 +1,69 @@
# Amiga powerUP (TM) Makefile
# makefile for libpng and SAS C V6.58/7.00 PPC compiler
# Copyright (C) 1998 by Andreas R. Kleinert
LIBNAME = libzip.a
CC = scppc
CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \
OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER
AR = ppc-amigaos-ar cr
RANLIB = ppc-amigaos-ranlib
LD = ppc-amigaos-ld -r
LDFLAGS = -o
LDLIBS = LIB:scppc.a LIB:end.o
RM = delete quiet
OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \
uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
TEST_OBJS = example.o minigzip.o
all: example minigzip
check: test
test: all
example
echo hello world | minigzip | minigzip -d
$(LIBNAME): $(OBJS)
$(AR) $@ $(OBJS)
-$(RANLIB) $@
example: example.o $(LIBNAME)
$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)
minigzip: minigzip.o $(LIBNAME)
$(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS)
mostlyclean: clean
clean:
$(RM) *.o example minigzip $(LIBNAME) foo.gz
zip:
zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \
descrip.mms *.[ch]
tgz:
cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \
zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch]
# DO NOT DELETE THIS LINE -- make depend depends on it.
adler32.o: zlib.h zconf.h
compress.o: zlib.h zconf.h
crc32.o: crc32.h zlib.h zconf.h
deflate.o: deflate.h zutil.h zlib.h zconf.h
example.o: zlib.h zconf.h
gzclose.o: zlib.h zconf.h gzguts.h
gzlib.o: zlib.h zconf.h gzguts.h
gzread.o: zlib.h zconf.h gzguts.h
gzwrite.o: zlib.h zconf.h gzguts.h
inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inftrees.o: zutil.h zlib.h zconf.h inftrees.h
minigzip.o: zlib.h zconf.h
trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
uncompr.o: zlib.h zconf.h
zutil.o: zutil.h zlib.h zconf.h
+68
View File
@@ -0,0 +1,68 @@
# SMakefile for zlib
# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly
# Osma Ahvenlampi <Osma.Ahvenlampi@hut.fi>
# Amiga, SAS/C 6.56 & Smake
CC=sc
CFLAGS=OPT
#CFLAGS=OPT CPU=68030
#CFLAGS=DEBUG=LINE
LDFLAGS=LIB z.lib
SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \
NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \
DEF=POSTINC
OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \
uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o
TEST_OBJS = example.o minigzip.o
all: SCOPTIONS example minigzip
check: test
test: all
example
echo hello world | minigzip | minigzip -d
install: z.lib
copy clone zlib.h zconf.h INCLUDE:
copy clone z.lib LIB:
z.lib: $(OBJS)
oml z.lib r $(OBJS)
example: example.o z.lib
$(CC) $(CFLAGS) LINK TO $@ example.o $(LDFLAGS)
minigzip: minigzip.o z.lib
$(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS)
mostlyclean: clean
clean:
-delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS
SCOPTIONS: Makefile.sas
copy to $@ <from <
$(SCOPTIONS)
<
# DO NOT DELETE THIS LINE -- make depend depends on it.
adler32.o: zlib.h zconf.h
compress.o: zlib.h zconf.h
crc32.o: crc32.h zlib.h zconf.h
deflate.o: deflate.h zutil.h zlib.h zconf.h
example.o: zlib.h zconf.h
gzclose.o: zlib.h zconf.h gzguts.h
gzlib.o: zlib.h zconf.h gzguts.h
gzread.o: zlib.h zconf.h gzguts.h
gzwrite.o: zlib.h zconf.h gzguts.h
inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
inftrees.o: zutil.h zlib.h zconf.h inftrees.h
minigzip.o: zlib.h zconf.h
trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
uncompr.o: zlib.h zconf.h
zutil.o: zutil.h zlib.h zconf.h
+86
View File
@@ -0,0 +1,86 @@
/* compress.c -- compress a memory buffer
* Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* @(#) $Id$ */
#define ZLIB_INTERNAL
#include "zlib.h"
/* ===========================================================================
Compresses the source buffer into the destination buffer. The level
parameter has the same meaning as in deflateInit. sourceLen is the byte
length of the source buffer. Upon entry, destLen is the total size of the
destination buffer, which must be at least 0.1% larger than sourceLen plus
12 bytes. Upon exit, destLen is the actual size of the compressed buffer.
compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough
memory, Z_BUF_ERROR if there was not enough room in the output buffer,
Z_STREAM_ERROR if the level parameter is invalid.
*/
int ZEXPORT compress2 (dest, destLen, source, sourceLen, level)
Bytef *dest;
uLongf *destLen;
const Bytef *source;
uLong sourceLen;
int level;
{
z_stream stream;
int err;
const uInt max = (uInt)-1;
uLong left;
left = *destLen;
*destLen = 0;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
err = deflateInit(&stream, level);
if (err != Z_OK) return err;
stream.next_out = dest;
stream.avail_out = 0;
stream.next_in = (z_const Bytef *)source;
stream.avail_in = 0;
do {
if (stream.avail_out == 0) {
stream.avail_out = left > (uLong)max ? max : (uInt)left;
left -= stream.avail_out;
}
if (stream.avail_in == 0) {
stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen;
sourceLen -= stream.avail_in;
}
err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH);
} while (err == Z_OK);
*destLen = stream.total_out;
deflateEnd(&stream);
return err == Z_STREAM_END ? Z_OK : err;
}
/* ===========================================================================
*/
int ZEXPORT compress (dest, destLen, source, sourceLen)
Bytef *dest;
uLongf *destLen;
const Bytef *source;
uLong sourceLen;
{
return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION);
}
/* ===========================================================================
If the default memLevel or windowBits for deflateInit() is changed, then
this function needs to be updated.
*/
uLong ZEXPORT compressBound (sourceLen)
uLong sourceLen;
{
return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
(sourceLen >> 25) + 13;
}
Vendored Executable
+921
View File
@@ -0,0 +1,921 @@
#!/bin/sh
# configure script for zlib.
#
# Normally configure builds both a static and a shared library.
# If you want to build just a static library, use: ./configure --static
#
# To impose specific compiler or flags or install directory, use for example:
# prefix=$HOME CC=cc CFLAGS="-O4" ./configure
# or for csh/tcsh users:
# (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure)
# Incorrect settings of CC or CFLAGS may prevent creating a shared library.
# If you have problems, try without defining CC and CFLAGS before reporting
# an error.
# start off configure.log
echo -------------------- >> configure.log
echo $0 $* >> configure.log
date >> configure.log
# get source directory
SRCDIR=`dirname $0`
if test $SRCDIR = "."; then
ZINC=""
ZINCOUT="-I."
SRCDIR=""
else
ZINC='-include zconf.h'
ZINCOUT='-I. -I$(SRCDIR)'
SRCDIR="$SRCDIR/"
fi
# set command prefix for cross-compilation
if [ -n "${CHOST}" ]; then
uname="`echo "${CHOST}" | sed -e 's/^[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)$/\1/' -e 's/^[^-]*-[^-]*-\([^-]*\)-.*$/\1/'`"
CROSS_PREFIX="${CHOST}-"
fi
# destination name for static library
STATICLIB=libz.a
# extract zlib version numbers from zlib.h
VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h`
VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < ${SRCDIR}zlib.h`
VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h`
VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < ${SRCDIR}zlib.h`
# establish commands for library building
if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then
AR=${AR-"${CROSS_PREFIX}ar"}
test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
else
AR=${AR-"ar"}
test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log
fi
ARFLAGS=${ARFLAGS-"rc"}
if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then
RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"}
test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log
else
RANLIB=${RANLIB-"ranlib"}
fi
if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then
NM=${NM-"${CROSS_PREFIX}nm"}
test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log
else
NM=${NM-"nm"}
fi
# set defaults before processing command line options
LDCONFIG=${LDCONFIG-"ldconfig"}
LDSHAREDLIBC="${LDSHAREDLIBC--lc}"
ARCHS=
prefix=${prefix-/usr/local}
exec_prefix=${exec_prefix-'${prefix}'}
libdir=${libdir-'${exec_prefix}/lib'}
sharedlibdir=${sharedlibdir-'${libdir}'}
includedir=${includedir-'${prefix}/include'}
mandir=${mandir-'${prefix}/share/man'}
shared_ext='.so'
shared=1
solo=0
cover=0
zprefix=0
zconst=0
build64=0
gcc=0
warn=0
debug=0
old_cc="$CC"
old_cflags="$CFLAGS"
OBJC='$(OBJZ) $(OBJG)'
PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)'
# leave this script, optionally in a bad way
leave()
{
if test "$*" != "0"; then
echo "** $0 aborting." | tee -a configure.log
fi
rm -f $test.[co] $test $test$shared_ext $test.gcno ./--version
echo -------------------- >> configure.log
echo >> configure.log
echo >> configure.log
exit $1
}
# process command line options
while test $# -ge 1
do
case "$1" in
-h* | --help)
echo 'usage:' | tee -a configure.log
echo ' configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log
echo ' [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log
echo ' [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log
exit 0 ;;
-p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;;
-e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;;
-l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;;
--sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;;
-i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;;
-u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;;
-p* | --prefix) prefix="$2"; shift; shift ;;
-e* | --eprefix) exec_prefix="$2"; shift; shift ;;
-l* | --libdir) libdir="$2"; shift; shift ;;
-i* | --includedir) includedir="$2"; shift; shift ;;
-s* | --shared | --enable-shared) shared=1; shift ;;
-t | --static) shared=0; shift ;;
--solo) solo=1; shift ;;
--cover) cover=1; shift ;;
-z* | --zprefix) zprefix=1; shift ;;
-6* | --64) build64=1; shift ;;
-a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;;
--sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;;
--localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;;
-c* | --const) zconst=1; shift ;;
-w* | --warn) warn=1; shift ;;
-d* | --debug) debug=1; shift ;;
*)
echo "unknown option: $1" | tee -a configure.log
echo "$0 --help for help" | tee -a configure.log
leave 1;;
esac
done
# temporary file name
test=ztest$$
# put arguments in log, also put test file in log if used in arguments
show()
{
case "$*" in
*$test.c*)
echo === $test.c === >> configure.log
cat $test.c >> configure.log
echo === >> configure.log;;
esac
echo $* >> configure.log
}
# check for gcc vs. cc and set compile and link flags based on the system identified by uname
cat > $test.c <<EOF
extern int getchar();
int hello() {return getchar();}
EOF
test -z "$CC" && echo Checking for ${CROSS_PREFIX}gcc... | tee -a configure.log
cc=${CC-${CROSS_PREFIX}gcc}
cflags=${CFLAGS-"-O3"}
# to force the asm version use: CFLAGS="-O3 -DASMV" ./configure
case "$cc" in
*gcc*) gcc=1 ;;
*clang*) gcc=1 ;;
esac
case `$cc -v 2>&1` in
*gcc*) gcc=1 ;;
*clang*) gcc=1 ;;
esac
show $cc -c $test.c
if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then
echo ... using gcc >> configure.log
CC="$cc"
CFLAGS="${CFLAGS--O3}"
SFLAGS="${CFLAGS--O3} -fPIC"
if test "$ARCHS"; then
CFLAGS="${CFLAGS} ${ARCHS}"
LDFLAGS="${LDFLAGS} ${ARCHS}"
fi
if test $build64 -eq 1; then
CFLAGS="${CFLAGS} -m64"
SFLAGS="${SFLAGS} -m64"
fi
if test "$warn" -eq 1; then
if test "$zconst" -eq 1; then
CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -pedantic -DZLIB_CONST"
else
CFLAGS="${CFLAGS} -Wall -Wextra -pedantic"
fi
fi
if test $debug -eq 1; then
CFLAGS="${CFLAGS} -DZLIB_DEBUG"
SFLAGS="${SFLAGS} -DZLIB_DEBUG"
fi
if test -z "$uname"; then
uname=`(uname -s || echo unknown) 2>/dev/null`
fi
case "$uname" in
Linux* | linux* | GNU | GNU/* | solaris*)
LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} ;;
*BSD | *bsd* | DragonFly)
LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"}
LDCONFIG="ldconfig -m" ;;
CYGWIN* | Cygwin* | cygwin* | OS/2*)
EXE='.exe' ;;
MINGW* | mingw*)
# temporary bypass
rm -f $test.[co] $test $test$shared_ext
echo "Please use win32/Makefile.gcc instead." | tee -a configure.log
leave 1
LDSHARED=${LDSHARED-"$cc -shared"}
LDSHAREDLIBC=""
EXE='.exe' ;;
QNX*) # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4
# (alain.bonnefoy@icbt.com)
LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;;
HP-UX*)
LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"}
case `(uname -m || echo unknown) 2>/dev/null` in
ia64)
shared_ext='.so'
SHAREDLIB='libz.so' ;;
*)
shared_ext='.sl'
SHAREDLIB='libz.sl' ;;
esac ;;
Darwin* | darwin*)
shared_ext='.dylib'
SHAREDLIB=libz$shared_ext
SHAREDLIBV=libz.$VER$shared_ext
SHAREDLIBM=libz.$VER1$shared_ext
LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"}
if libtool -V 2>&1 | grep Apple > /dev/null; then
AR="libtool"
else
AR="/usr/bin/libtool"
fi
ARFLAGS="-o" ;;
*) LDSHARED=${LDSHARED-"$cc -shared"} ;;
esac
else
# find system name and corresponding cc options
CC=${CC-cc}
gcc=0
echo ... using $CC >> configure.log
if test -z "$uname"; then
uname=`(uname -sr || echo unknown) 2>/dev/null`
fi
case "$uname" in
HP-UX*) SFLAGS=${CFLAGS-"-O +z"}
CFLAGS=${CFLAGS-"-O"}
# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"}
LDSHARED=${LDSHARED-"ld -b"}
case `(uname -m || echo unknown) 2>/dev/null` in
ia64)
shared_ext='.so'
SHAREDLIB='libz.so' ;;
*)
shared_ext='.sl'
SHAREDLIB='libz.sl' ;;
esac ;;
IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."}
CFLAGS=${CFLAGS-"-ansi -O2"}
LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"}
CFLAGS=${CFLAGS-"-O -std1"}
LDFLAGS="${LDFLAGS} -Wl,-rpath,."
LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;;
OSF1*) SFLAGS=${CFLAGS-"-O -std1"}
CFLAGS=${CFLAGS-"-O -std1"}
LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;;
QNX*) SFLAGS=${CFLAGS-"-4 -O"}
CFLAGS=${CFLAGS-"-4 -O"}
LDSHARED=${LDSHARED-"cc"}
RANLIB=${RANLIB-"true"}
AR="cc"
ARFLAGS="-A" ;;
SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "}
CFLAGS=${CFLAGS-"-O3"}
LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;;
SunOS\ 5* | solaris*)
LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"}
SFLAGS=${CFLAGS-"-fast -KPIC"}
CFLAGS=${CFLAGS-"-fast"}
if test $build64 -eq 1; then
# old versions of SunPRO/Workshop/Studio don't support -m64,
# but newer ones do. Check for it.
flag64=`$CC -flags | egrep -- '^-m64'`
if test x"$flag64" != x"" ; then
CFLAGS="${CFLAGS} -m64"
SFLAGS="${SFLAGS} -m64"
else
case `(uname -m || echo unknown) 2>/dev/null` in
i86*)
SFLAGS="$SFLAGS -xarch=amd64"
CFLAGS="$CFLAGS -xarch=amd64" ;;
*)
SFLAGS="$SFLAGS -xarch=v9"
CFLAGS="$CFLAGS -xarch=v9" ;;
esac
fi
fi
if test -n "$ZINC"; then
ZINC='-I- -I. -I$(SRCDIR)'
fi
;;
SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"}
CFLAGS=${CFLAGS-"-O2"}
LDSHARED=${LDSHARED-"ld"} ;;
SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"}
CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"}
LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;;
UNIX_System_V\ 4.2.0)
SFLAGS=${CFLAGS-"-KPIC -O"}
CFLAGS=${CFLAGS-"-O"}
LDSHARED=${LDSHARED-"cc -G"} ;;
UNIX_SV\ 4.2MP)
SFLAGS=${CFLAGS-"-Kconform_pic -O"}
CFLAGS=${CFLAGS-"-O"}
LDSHARED=${LDSHARED-"cc -G"} ;;
OpenUNIX\ 5)
SFLAGS=${CFLAGS-"-KPIC -O"}
CFLAGS=${CFLAGS-"-O"}
LDSHARED=${LDSHARED-"cc -G"} ;;
AIX*) # Courtesy of dbakker@arrayasolutions.com
SFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
CFLAGS=${CFLAGS-"-O -qmaxmem=8192"}
LDSHARED=${LDSHARED-"xlc -G"} ;;
# send working options for other systems to zlib@gzip.org
*) SFLAGS=${CFLAGS-"-O"}
CFLAGS=${CFLAGS-"-O"}
LDSHARED=${LDSHARED-"cc -shared"} ;;
esac
fi
# destination names for shared library if not defined above
SHAREDLIB=${SHAREDLIB-"libz$shared_ext"}
SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"}
SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"}
echo >> configure.log
# define functions for testing compiler and library characteristics and logging the results
cat > $test.c <<EOF
#error error
EOF
if ($CC -c $CFLAGS $test.c) 2>/dev/null; then
try()
{
show $*
test "`( $* ) 2>&1 | tee -a configure.log`" = ""
}
echo - using any output from compiler to indicate an error >> configure.log
else
try()
{
show $*
( $* ) >> configure.log 2>&1
ret=$?
if test $ret -ne 0; then
echo "(exit code "$ret")" >> configure.log
fi
return $ret
}
fi
tryboth()
{
show $*
got=`( $* ) 2>&1`
ret=$?
printf %s "$got" >> configure.log
if test $ret -ne 0; then
return $ret
fi
test "$got" = ""
}
cat > $test.c << EOF
int foo() { return 0; }
EOF
echo "Checking for obsessive-compulsive compiler options..." >> configure.log
if try $CC -c $CFLAGS $test.c; then
:
else
echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log
leave 1
fi
echo >> configure.log
# see if shared library build supported
cat > $test.c <<EOF
extern int getchar();
int hello() {return getchar();}
EOF
if test $shared -eq 1; then
echo Checking for shared library support... | tee -a configure.log
# we must test in two steps (cc then ld), required at least on SunOS 4.x
if try $CC -w -c $SFLAGS $test.c &&
try $LDSHARED $SFLAGS -o $test$shared_ext $test.o; then
echo Building shared library $SHAREDLIBV with $CC. | tee -a configure.log
elif test -z "$old_cc" -a -z "$old_cflags"; then
echo No shared library support. | tee -a configure.log
shared=0;
else
echo 'No shared library support; try without defining CC and CFLAGS' | tee -a configure.log
shared=0;
fi
fi
if test $shared -eq 0; then
LDSHARED="$CC"
ALL="static"
TEST="all teststatic"
SHAREDLIB=""
SHAREDLIBV=""
SHAREDLIBM=""
echo Building static library $STATICLIB version $VER with $CC. | tee -a configure.log
else
ALL="static shared"
TEST="all teststatic testshared"
fi
# check for underscores in external names for use by assembler code
CPP=${CPP-"$CC -E"}
case $CFLAGS in
*ASMV*)
echo >> configure.log
show "$NM $test.o | grep _hello"
if test "`$NM $test.o | grep _hello | tee -a configure.log`" = ""; then
CPP="$CPP -DNO_UNDERLINE"
echo Checking for underline in external names... No. | tee -a configure.log
else
echo Checking for underline in external names... Yes. | tee -a configure.log
fi ;;
esac
echo >> configure.log
# check for size_t
cat > $test.c <<EOF
#include <stdio.h>
#include <stdlib.h>
size_t dummy = 0;
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for size_t... Yes." | tee -a configure.log
need_sizet=0
else
echo "Checking for size_t... No." | tee -a configure.log
need_sizet=1
fi
echo >> configure.log
# find the size_t integer type, if needed
if test $need_sizet -eq 1; then
cat > $test.c <<EOF
long long dummy = 0;
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for long long... Yes." | tee -a configure.log
cat > $test.c <<EOF
#include <stdio.h>
int main(void) {
if (sizeof(void *) <= sizeof(int)) puts("int");
else if (sizeof(void *) <= sizeof(long)) puts("long");
else puts("z_longlong");
return 0;
}
EOF
else
echo "Checking for long long... No." | tee -a configure.log
cat > $test.c <<EOF
#include <stdio.h>
int main(void) {
if (sizeof(void *) <= sizeof(int)) puts("int");
else puts("long");
return 0;
}
EOF
fi
if try $CC $CFLAGS -o $test $test.c; then
sizet=`./$test`
echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log
else
echo "Failed to find a pointer-size integer type." | tee -a configure.log
leave 1
fi
fi
if test $need_sizet -eq 1; then
CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}"
SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}"
fi
echo >> configure.log
# check for large file support, and if none, check for fseeko()
cat > $test.c <<EOF
#include <sys/types.h>
off64_t dummy = 0;
EOF
if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then
CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1"
SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1"
ALL="${ALL} all64"
TEST="${TEST} test64"
echo "Checking for off64_t... Yes." | tee -a configure.log
echo "Checking for fseeko... Yes." | tee -a configure.log
else
echo "Checking for off64_t... No." | tee -a configure.log
echo >> configure.log
cat > $test.c <<EOF
#include <stdio.h>
int main(void) {
fseeko(NULL, 0, 0);
return 0;
}
EOF
if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for fseeko... Yes." | tee -a configure.log
else
CFLAGS="${CFLAGS} -DNO_FSEEKO"
SFLAGS="${SFLAGS} -DNO_FSEEKO"
echo "Checking for fseeko... No." | tee -a configure.log
fi
fi
echo >> configure.log
# check for strerror() for use by gz* functions
cat > $test.c <<EOF
#include <string.h>
#include <errno.h>
int main() { return strlen(strerror(errno)); }
EOF
if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for strerror... Yes." | tee -a configure.log
else
CFLAGS="${CFLAGS} -DNO_STRERROR"
SFLAGS="${SFLAGS} -DNO_STRERROR"
echo "Checking for strerror... No." | tee -a configure.log
fi
# copy clean zconf.h for subsequent edits
cp -p ${SRCDIR}zconf.h.in zconf.h
echo >> configure.log
# check for unistd.h and save result in zconf.h
cat > $test.c <<EOF
#include <unistd.h>
int main() { return 0; }
EOF
if try $CC -c $CFLAGS $test.c; then
sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
mv zconf.temp.h zconf.h
echo "Checking for unistd.h... Yes." | tee -a configure.log
else
echo "Checking for unistd.h... No." | tee -a configure.log
fi
echo >> configure.log
# check for stdarg.h and save result in zconf.h
cat > $test.c <<EOF
#include <stdarg.h>
int main() { return 0; }
EOF
if try $CC -c $CFLAGS $test.c; then
sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h
mv zconf.temp.h zconf.h
echo "Checking for stdarg.h... Yes." | tee -a configure.log
else
echo "Checking for stdarg.h... No." | tee -a configure.log
fi
# if the z_ prefix was requested, save that in zconf.h
if test $zprefix -eq 1; then
sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h
mv zconf.temp.h zconf.h
echo >> configure.log
echo "Using z_ prefix on all symbols." | tee -a configure.log
fi
# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists
if test $solo -eq 1; then
sed '/#define ZCONF_H/a\
#define Z_SOLO
' < zconf.h > zconf.temp.h
mv zconf.temp.h zconf.h
OBJC='$(OBJZ)'
PIC_OBJC='$(PIC_OBJZ)'
fi
# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X
if test $cover -eq 1; then
CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage"
if test -n "$GCC_CLASSIC"; then
CC=$GCC_CLASSIC
fi
fi
echo >> configure.log
# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions
# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a
# return value. The most secure result is vsnprintf() with a return value. snprintf() with a
# return value is secure as well, but then gzprintf() will be limited to 20 arguments.
cat > $test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
#include "zconf.h"
int main()
{
#ifndef STDC
choke me
#endif
return 0;
}
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log
echo >> configure.log
cat > $test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
int mytest(const char *fmt, ...)
{
char buf[20];
va_list ap;
va_start(ap, fmt);
vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
return 0;
}
int main()
{
return (mytest("Hello%d\n", 1));
}
EOF
if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log
echo >> configure.log
cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
int mytest(const char *fmt, ...)
{
int n;
char buf[20];
va_list ap;
va_start(ap, fmt);
n = vsnprintf(buf, sizeof(buf), fmt, ap);
va_end(ap);
return n;
}
int main()
{
return (mytest("Hello%d\n", 1));
}
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log
else
CFLAGS="$CFLAGS -DHAS_vsnprintf_void"
SFLAGS="$SFLAGS -DHAS_vsnprintf_void"
echo "Checking for return value of vsnprintf()... No." | tee -a configure.log
echo " WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log
echo " can build but will be open to possible string-format security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
fi
else
CFLAGS="$CFLAGS -DNO_vsnprintf"
SFLAGS="$SFLAGS -DNO_vsnprintf"
echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log
echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log
echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
echo >> configure.log
cat >$test.c <<EOF
#include <stdio.h>
#include <stdarg.h>
int mytest(const char *fmt, ...)
{
int n;
char buf[20];
va_list ap;
va_start(ap, fmt);
n = vsprintf(buf, fmt, ap);
va_end(ap);
return n;
}
int main()
{
return (mytest("Hello%d\n", 1));
}
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log
else
CFLAGS="$CFLAGS -DHAS_vsprintf_void"
SFLAGS="$SFLAGS -DHAS_vsprintf_void"
echo "Checking for return value of vsprintf()... No." | tee -a configure.log
echo " WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log
echo " can build but will be open to possible string-format security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
fi
fi
else
echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log
echo >> configure.log
cat >$test.c <<EOF
#include <stdio.h>
int mytest()
{
char buf[20];
snprintf(buf, sizeof(buf), "%s", "foo");
return 0;
}
int main()
{
return (mytest());
}
EOF
if try $CC $CFLAGS -o $test $test.c; then
echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log
echo >> configure.log
cat >$test.c <<EOF
#include <stdio.h>
int mytest()
{
char buf[20];
return snprintf(buf, sizeof(buf), "%s", "foo");
}
int main()
{
return (mytest());
}
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of snprintf()... Yes." | tee -a configure.log
else
CFLAGS="$CFLAGS -DHAS_snprintf_void"
SFLAGS="$SFLAGS -DHAS_snprintf_void"
echo "Checking for return value of snprintf()... No." | tee -a configure.log
echo " WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log
echo " can build but will be open to possible string-format security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
fi
else
CFLAGS="$CFLAGS -DNO_snprintf"
SFLAGS="$SFLAGS -DNO_snprintf"
echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log
echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log
echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
echo >> configure.log
cat >$test.c <<EOF
#include <stdio.h>
int mytest()
{
char buf[20];
return sprintf(buf, "%s", "foo");
}
int main()
{
return (mytest());
}
EOF
if try $CC -c $CFLAGS $test.c; then
echo "Checking for return value of sprintf()... Yes." | tee -a configure.log
else
CFLAGS="$CFLAGS -DHAS_sprintf_void"
SFLAGS="$SFLAGS -DHAS_sprintf_void"
echo "Checking for return value of sprintf()... No." | tee -a configure.log
echo " WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log
echo " can build but will be open to possible string-format security" | tee -a configure.log
echo " vulnerabilities." | tee -a configure.log
fi
fi
fi
# see if we can hide zlib internal symbols that are linked between separate source files
if test "$gcc" -eq 1; then
echo >> configure.log
cat > $test.c <<EOF
#define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
int ZLIB_INTERNAL foo;
int main()
{
return 0;
}
EOF
if tryboth $CC -c $CFLAGS $test.c; then
CFLAGS="$CFLAGS -DHAVE_HIDDEN"
SFLAGS="$SFLAGS -DHAVE_HIDDEN"
echo "Checking for attribute(visibility) support... Yes." | tee -a configure.log
else
echo "Checking for attribute(visibility) support... No." | tee -a configure.log
fi
fi
# show the results in the log
echo >> configure.log
echo ALL = $ALL >> configure.log
echo AR = $AR >> configure.log
echo ARFLAGS = $ARFLAGS >> configure.log
echo CC = $CC >> configure.log
echo CFLAGS = $CFLAGS >> configure.log
echo CPP = $CPP >> configure.log
echo EXE = $EXE >> configure.log
echo LDCONFIG = $LDCONFIG >> configure.log
echo LDFLAGS = $LDFLAGS >> configure.log
echo LDSHARED = $LDSHARED >> configure.log
echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log
echo OBJC = $OBJC >> configure.log
echo PIC_OBJC = $PIC_OBJC >> configure.log
echo RANLIB = $RANLIB >> configure.log
echo SFLAGS = $SFLAGS >> configure.log
echo SHAREDLIB = $SHAREDLIB >> configure.log
echo SHAREDLIBM = $SHAREDLIBM >> configure.log
echo SHAREDLIBV = $SHAREDLIBV >> configure.log
echo STATICLIB = $STATICLIB >> configure.log
echo TEST = $TEST >> configure.log
echo VER = $VER >> configure.log
echo Z_U4 = $Z_U4 >> configure.log
echo SRCDIR = $SRCDIR >> configure.log
echo exec_prefix = $exec_prefix >> configure.log
echo includedir = $includedir >> configure.log
echo libdir = $libdir >> configure.log
echo mandir = $mandir >> configure.log
echo prefix = $prefix >> configure.log
echo sharedlibdir = $sharedlibdir >> configure.log
echo uname = $uname >> configure.log
# udpate Makefile with the configure results
sed < ${SRCDIR}Makefile.in "
/^CC *=/s#=.*#=$CC#
/^CFLAGS *=/s#=.*#=$CFLAGS#
/^SFLAGS *=/s#=.*#=$SFLAGS#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
/^LDSHARED *=/s#=.*#=$LDSHARED#
/^CPP *=/s#=.*#=$CPP#
/^STATICLIB *=/s#=.*#=$STATICLIB#
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
/^AR *=/s#=.*#=$AR#
/^ARFLAGS *=/s#=.*#=$ARFLAGS#
/^RANLIB *=/s#=.*#=$RANLIB#
/^LDCONFIG *=/s#=.*#=$LDCONFIG#
/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC#
/^EXE *=/s#=.*#=$EXE#
/^SRCDIR *=/s#=.*#=$SRCDIR#
/^ZINC *=/s#=.*#=$ZINC#
/^ZINCOUT *=/s#=.*#=$ZINCOUT#
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
/^sharedlibdir *=/s#=.*#=$sharedlibdir#
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^OBJC *=/s#=.*#= $OBJC#
/^PIC_OBJC *=/s#=.*#= $PIC_OBJC#
/^all: */s#:.*#: $ALL#
/^test: */s#:.*#: $TEST#
" > Makefile
# create zlib.pc with the configure results
sed < ${SRCDIR}zlib.pc.in "
/^CC *=/s#=.*#=$CC#
/^CFLAGS *=/s#=.*#=$CFLAGS#
/^CPP *=/s#=.*#=$CPP#
/^LDSHARED *=/s#=.*#=$LDSHARED#
/^STATICLIB *=/s#=.*#=$STATICLIB#
/^SHAREDLIB *=/s#=.*#=$SHAREDLIB#
/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV#
/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM#
/^AR *=/s#=.*#=$AR#
/^ARFLAGS *=/s#=.*#=$ARFLAGS#
/^RANLIB *=/s#=.*#=$RANLIB#
/^EXE *=/s#=.*#=$EXE#
/^prefix *=/s#=.*#=$prefix#
/^exec_prefix *=/s#=.*#=$exec_prefix#
/^libdir *=/s#=.*#=$libdir#
/^sharedlibdir *=/s#=.*#=$sharedlibdir#
/^includedir *=/s#=.*#=$includedir#
/^mandir *=/s#=.*#=$mandir#
/^LDFLAGS *=/s#=.*#=$LDFLAGS#
" | sed -e "
s/\@VERSION\@/$VER/g;
" > zlib.pc
# done
leave 0
+78
View File
@@ -0,0 +1,78 @@
All files under this contrib directory are UNSUPPORTED. There were
provided by users of zlib and were not tested by the authors of zlib.
Use at your own risk. Please contact the authors of the contributions
for help about these, not the zlib authors. Thanks.
ada/ by Dmitriy Anisimkov <anisimkov@yahoo.com>
Support for Ada
See http://zlib-ada.sourceforge.net/
amd64/ by Mikhail Teterin <mi@ALDAN.algebra.com>
asm code for AMD64
See patch at http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/96393
asm686/ by Brian Raiter <breadbox@muppetlabs.com>
asm code for Pentium and PPro/PII, using the AT&T (GNU as) syntax
See http://www.muppetlabs.com/~breadbox/software/assembly.html
blast/ by Mark Adler <madler@alumni.caltech.edu>
Decompressor for output of PKWare Data Compression Library (DCL)
delphi/ by Cosmin Truta <cosmint@cs.ubbcluj.ro>
Support for Delphi and C++ Builder
dotzlib/ by Henrik Ravn <henrik@ravn.com>
Support for Microsoft .Net and Visual C++ .Net
gcc_gvmat64/by Gilles Vollant <info@winimage.com>
GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64
assembler to replace longest_match() and inflate_fast()
infback9/ by Mark Adler <madler@alumni.caltech.edu>
Unsupported diffs to infback to decode the deflate64 format
inflate86/ by Chris Anderson <christop@charm.net>
Tuned x86 gcc asm code to replace inflate_fast()
iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
A C++ I/O streams interface to the zlib gz* functions
iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
Another C++ I/O streams interface
iostream3/ by Ludwig Schwardt <schwardt@sun.ac.za>
and Kevin Ruland <kevin@rodin.wustl.edu>
Yet another C++ I/O streams interface
masmx64/ by Gilles Vollant <info@winimage.com>
x86 64-bit (AMD64 and Intel EM64t) code for x64 assembler to
replace longest_match() and inflate_fast(), also masm x86
64-bits translation of Chris Anderson inflate_fast()
masmx86/ by Gilles Vollant <info@winimage.com>
x86 asm code to replace longest_match() and inflate_fast(),
for Visual C++ and MASM (32 bits).
Based on Brian Raiter (asm686) and Chris Anderson (inflate86)
minizip/ by Gilles Vollant <info@winimage.com>
Mini zip and unzip based on zlib
Includes Zip64 support by Mathias Svensson <mathias@result42.com>
See http://www.winimage.com/zLibDll/minizip.html
pascal/ by Bob Dellaca <bobdl@xtra.co.nz> et al.
Support for Pascal
puff/ by Mark Adler <madler@alumni.caltech.edu>
Small, low memory usage inflate. Also serves to provide an
unambiguous description of the deflate format.
testzlib/ by Gilles Vollant <info@winimage.com>
Example of the use of zlib
untgz/ by Pedro A. Aranda Gutierrez <paag@tid.es>
A very simple tar.gz file extractor using zlib
vstudio/ by Gilles Vollant <info@winimage.com>
Building a minizip-enhanced zlib with Microsoft Visual Studio
Includes vc11 from kreuzerkrieg and vc12 from davispuh
+106
View File
@@ -0,0 +1,106 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
--
-- $Id: buffer_demo.adb,v 1.3 2004/09/06 06:55:35 vagul Exp $
-- This demo program provided by Dr Steve Sangwine <sjs@essex.ac.uk>
--
-- Demonstration of a problem with Zlib-Ada (already fixed) when a buffer
-- of exactly the correct size is used for decompressed data, and the last
-- few bytes passed in to Zlib are checksum bytes.
-- This program compresses a string of text, and then decompresses the
-- compressed text into a buffer of the same size as the original text.
with Ada.Streams; use Ada.Streams;
with Ada.Text_IO;
with ZLib; use ZLib;
procedure Buffer_Demo is
EOL : Character renames ASCII.LF;
Text : constant String
:= "Four score and seven years ago our fathers brought forth," & EOL &
"upon this continent, a new nation, conceived in liberty," & EOL &
"and dedicated to the proposition that `all men are created equal'.";
Source : Stream_Element_Array (1 .. Text'Length);
for Source'Address use Text'Address;
begin
Ada.Text_IO.Put (Text);
Ada.Text_IO.New_Line;
Ada.Text_IO.Put_Line
("Uncompressed size : " & Positive'Image (Text'Length) & " bytes");
declare
Compressed_Data : Stream_Element_Array (1 .. Text'Length);
L : Stream_Element_Offset;
begin
Compress : declare
Compressor : Filter_Type;
I : Stream_Element_Offset;
begin
Deflate_Init (Compressor);
-- Compress the whole of T at once.
Translate (Compressor, Source, I, Compressed_Data, L, Finish);
pragma Assert (I = Source'Last);
Close (Compressor);
Ada.Text_IO.Put_Line
("Compressed size : "
& Stream_Element_Offset'Image (L) & " bytes");
end Compress;
-- Now we decompress the data, passing short blocks of data to Zlib
-- (because this demonstrates the problem - the last block passed will
-- contain checksum information and there will be no output, only a
-- check inside Zlib that the checksum is correct).
Decompress : declare
Decompressor : Filter_Type;
Uncompressed_Data : Stream_Element_Array (1 .. Text'Length);
Block_Size : constant := 4;
-- This makes sure that the last block contains
-- only Adler checksum data.
P : Stream_Element_Offset := Compressed_Data'First - 1;
O : Stream_Element_Offset;
begin
Inflate_Init (Decompressor);
loop
Translate
(Decompressor,
Compressed_Data
(P + 1 .. Stream_Element_Offset'Min (P + Block_Size, L)),
P,
Uncompressed_Data
(Total_Out (Decompressor) + 1 .. Uncompressed_Data'Last),
O,
No_Flush);
Ada.Text_IO.Put_Line
("Total in : " & Count'Image (Total_In (Decompressor)) &
", out : " & Count'Image (Total_Out (Decompressor)));
exit when P = L;
end loop;
Ada.Text_IO.New_Line;
Ada.Text_IO.Put_Line
("Decompressed text matches original text : "
& Boolean'Image (Uncompressed_Data = Source));
end Decompress;
end;
end Buffer_Demo;
+156
View File
@@ -0,0 +1,156 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- Continuous test for ZLib multithreading. If the test would fail
-- we should provide thread safe allocation routines for the Z_Stream.
--
-- $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $
with ZLib;
with Ada.Streams;
with Ada.Numerics.Discrete_Random;
with Ada.Text_IO;
with Ada.Exceptions;
with Ada.Task_Identification;
procedure MTest is
use Ada.Streams;
use ZLib;
Stop : Boolean := False;
pragma Atomic (Stop);
subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
package Random_Elements is
new Ada.Numerics.Discrete_Random (Visible_Symbols);
task type Test_Task;
task body Test_Task is
Buffer : Stream_Element_Array (1 .. 100_000);
Gen : Random_Elements.Generator;
Buffer_First : Stream_Element_Offset;
Compare_First : Stream_Element_Offset;
Deflate : Filter_Type;
Inflate : Filter_Type;
procedure Further (Item : in Stream_Element_Array);
procedure Read_Buffer
(Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset);
-------------
-- Further --
-------------
procedure Further (Item : in Stream_Element_Array) is
procedure Compare (Item : in Stream_Element_Array);
-------------
-- Compare --
-------------
procedure Compare (Item : in Stream_Element_Array) is
Next_First : Stream_Element_Offset := Compare_First + Item'Length;
begin
if Buffer (Compare_First .. Next_First - 1) /= Item then
raise Program_Error;
end if;
Compare_First := Next_First;
end Compare;
procedure Compare_Write is new ZLib.Write (Write => Compare);
begin
Compare_Write (Inflate, Item, No_Flush);
end Further;
-----------------
-- Read_Buffer --
-----------------
procedure Read_Buffer
(Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset)
is
Buff_Diff : Stream_Element_Offset := Buffer'Last - Buffer_First;
Next_First : Stream_Element_Offset;
begin
if Item'Length <= Buff_Diff then
Last := Item'Last;
Next_First := Buffer_First + Item'Length;
Item := Buffer (Buffer_First .. Next_First - 1);
Buffer_First := Next_First;
else
Last := Item'First + Buff_Diff;
Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last);
Buffer_First := Buffer'Last + 1;
end if;
end Read_Buffer;
procedure Translate is new Generic_Translate
(Data_In => Read_Buffer,
Data_Out => Further);
begin
Random_Elements.Reset (Gen);
Buffer := (others => 20);
Main : loop
for J in Buffer'Range loop
Buffer (J) := Random_Elements.Random (Gen);
Deflate_Init (Deflate);
Inflate_Init (Inflate);
Buffer_First := Buffer'First;
Compare_First := Buffer'First;
Translate (Deflate);
if Compare_First /= Buffer'Last + 1 then
raise Program_Error;
end if;
Ada.Text_IO.Put_Line
(Ada.Task_Identification.Image
(Ada.Task_Identification.Current_Task)
& Stream_Element_Offset'Image (J)
& ZLib.Count'Image (Total_Out (Deflate)));
Close (Deflate);
Close (Inflate);
exit Main when Stop;
end loop;
end loop Main;
exception
when E : others =>
Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E));
Stop := True;
end Test_Task;
Test : array (1 .. 4) of Test_Task;
pragma Unreferenced (Test);
Dummy : Character;
begin
Ada.Text_IO.Get_Immediate (Dummy);
Stop := True;
end MTest;
+156
View File
@@ -0,0 +1,156 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $
-- Test/demo program for the generic read interface.
with Ada.Numerics.Discrete_Random;
with Ada.Streams;
with Ada.Text_IO;
with ZLib;
procedure Read is
use Ada.Streams;
------------------------------------
-- Test configuration parameters --
------------------------------------
File_Size : Stream_Element_Offset := 100_000;
Continuous : constant Boolean := False;
-- If this constant is True, the test would be repeated again and again,
-- with increment File_Size for every iteration.
Header : constant ZLib.Header_Type := ZLib.Default;
-- Do not use Header other than Default in ZLib versions 1.1.4 and older.
Init_Random : constant := 8;
-- We are using the same random sequence, in case of we catch bug,
-- so we would be able to reproduce it.
-- End --
Pack_Size : Stream_Element_Offset;
Offset : Stream_Element_Offset;
Filter : ZLib.Filter_Type;
subtype Visible_Symbols
is Stream_Element range 16#20# .. 16#7E#;
package Random_Elements is new
Ada.Numerics.Discrete_Random (Visible_Symbols);
Gen : Random_Elements.Generator;
Period : constant Stream_Element_Offset := 200;
-- Period constant variable for random generator not to be very random.
-- Bigger period, harder random.
Read_Buffer : Stream_Element_Array (1 .. 2048);
Read_First : Stream_Element_Offset;
Read_Last : Stream_Element_Offset;
procedure Reset;
procedure Read
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset);
-- this procedure is for generic instantiation of
-- ZLib.Read
-- reading data from the File_In.
procedure Read is new ZLib.Read
(Read,
Read_Buffer,
Rest_First => Read_First,
Rest_Last => Read_Last);
----------
-- Read --
----------
procedure Read
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is
begin
Last := Stream_Element_Offset'Min
(Item'Last,
Item'First + File_Size - Offset);
for J in Item'First .. Last loop
if J < Item'First + Period then
Item (J) := Random_Elements.Random (Gen);
else
Item (J) := Item (J - Period);
end if;
Offset := Offset + 1;
end loop;
end Read;
-----------
-- Reset --
-----------
procedure Reset is
begin
Random_Elements.Reset (Gen, Init_Random);
Pack_Size := 0;
Offset := 1;
Read_First := Read_Buffer'Last + 1;
Read_Last := Read_Buffer'Last;
end Reset;
begin
Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
loop
for Level in ZLib.Compression_Level'Range loop
Ada.Text_IO.Put ("Level ="
& ZLib.Compression_Level'Image (Level));
-- Deflate using generic instantiation.
ZLib.Deflate_Init
(Filter,
Level,
Header => Header);
Reset;
Ada.Text_IO.Put
(Stream_Element_Offset'Image (File_Size) & " ->");
loop
declare
Buffer : Stream_Element_Array (1 .. 1024);
Last : Stream_Element_Offset;
begin
Read (Filter, Buffer, Last);
Pack_Size := Pack_Size + Last - Buffer'First + 1;
exit when Last < Buffer'Last;
end;
end loop;
Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size));
ZLib.Close (Filter);
end loop;
exit when not Continuous;
File_Size := File_Size + 1;
end loop;
end Read;
+65
View File
@@ -0,0 +1,65 @@
ZLib for Ada thick binding (ZLib.Ada)
Release 1.3
ZLib.Ada is a thick binding interface to the popular ZLib data
compression library, available at http://www.gzip.org/zlib/.
It provides Ada-style access to the ZLib C library.
Here are the main changes since ZLib.Ada 1.2:
- Attension: ZLib.Read generic routine have a initialization requirement
for Read_Last parameter now. It is a bit incompartible with previous version,
but extends functionality, we could use new parameters Allow_Read_Some and
Flush now.
- Added Is_Open routines to ZLib and ZLib.Streams packages.
- Add pragma Assert to check Stream_Element is 8 bit.
- Fix extraction to buffer with exact known decompressed size. Error reported by
Steve Sangwine.
- Fix definition of ULong (changed to unsigned_long), fix regression on 64 bits
computers. Patch provided by Pascal Obry.
- Add Status_Error exception definition.
- Add pragma Assertion that Ada.Streams.Stream_Element size is 8 bit.
How to build ZLib.Ada under GNAT
You should have the ZLib library already build on your computer, before
building ZLib.Ada. Make the directory of ZLib.Ada sources current and
issue the command:
gnatmake test -largs -L<directory where libz.a is> -lz
Or use the GNAT project file build for GNAT 3.15 or later:
gnatmake -Pzlib.gpr -L<directory where libz.a is>
How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2
1. Make a project with all *.ads and *.adb files from the distribution.
2. Build the libz.a library from the ZLib C sources.
3. Rename libz.a to z.lib.
4. Add the library z.lib to the project.
5. Add the libc.lib library from the ObjectAda distribution to the project.
6. Build the executable using test.adb as a main procedure.
How to use ZLib.Ada
The source files test.adb and read.adb are small demo programs that show
the main functionality of ZLib.Ada.
The routines from the package specifications are commented.
Homepage: http://zlib-ada.sourceforge.net/
Author: Dmitriy Anisimkov <anisimkov@yahoo.com>
Contributors: Pascal Obry <pascal@obry.org>, Steve Sangwine <sjs@essex.ac.uk>
+463
View File
@@ -0,0 +1,463 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $
-- The program has a few aims.
-- 1. Test ZLib.Ada95 thick binding functionality.
-- 2. Show the example of use main functionality of the ZLib.Ada95 binding.
-- 3. Build this program automatically compile all ZLib.Ada95 packages under
-- GNAT Ada95 compiler.
with ZLib.Streams;
with Ada.Streams.Stream_IO;
with Ada.Numerics.Discrete_Random;
with Ada.Text_IO;
with Ada.Calendar;
procedure Test is
use Ada.Streams;
use Stream_IO;
------------------------------------
-- Test configuration parameters --
------------------------------------
File_Size : Count := 100_000;
Continuous : constant Boolean := False;
Header : constant ZLib.Header_Type := ZLib.Default;
-- ZLib.None;
-- ZLib.Auto;
-- ZLib.GZip;
-- Do not use Header other then Default in ZLib versions 1.1.4
-- and older.
Strategy : constant ZLib.Strategy_Type := ZLib.Default_Strategy;
Init_Random : constant := 10;
-- End --
In_File_Name : constant String := "testzlib.in";
-- Name of the input file
Z_File_Name : constant String := "testzlib.zlb";
-- Name of the compressed file.
Out_File_Name : constant String := "testzlib.out";
-- Name of the decompressed file.
File_In : File_Type;
File_Out : File_Type;
File_Back : File_Type;
File_Z : ZLib.Streams.Stream_Type;
Filter : ZLib.Filter_Type;
Time_Stamp : Ada.Calendar.Time;
procedure Generate_File;
-- Generate file of spetsified size with some random data.
-- The random data is repeatable, for the good compression.
procedure Compare_Streams
(Left, Right : in out Root_Stream_Type'Class);
-- The procedure compearing data in 2 streams.
-- It is for compare data before and after compression/decompression.
procedure Compare_Files (Left, Right : String);
-- Compare files. Based on the Compare_Streams.
procedure Copy_Streams
(Source, Target : in out Root_Stream_Type'Class;
Buffer_Size : in Stream_Element_Offset := 1024);
-- Copying data from one stream to another. It is for test stream
-- interface of the library.
procedure Data_In
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset);
-- this procedure is for generic instantiation of
-- ZLib.Generic_Translate.
-- reading data from the File_In.
procedure Data_Out (Item : in Stream_Element_Array);
-- this procedure is for generic instantiation of
-- ZLib.Generic_Translate.
-- writing data to the File_Out.
procedure Stamp;
-- Store the timestamp to the local variable.
procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count);
-- Print the time statistic with the message.
procedure Translate is new ZLib.Generic_Translate
(Data_In => Data_In,
Data_Out => Data_Out);
-- This procedure is moving data from File_In to File_Out
-- with compression or decompression, depend on initialization of
-- Filter parameter.
-------------------
-- Compare_Files --
-------------------
procedure Compare_Files (Left, Right : String) is
Left_File, Right_File : File_Type;
begin
Open (Left_File, In_File, Left);
Open (Right_File, In_File, Right);
Compare_Streams (Stream (Left_File).all, Stream (Right_File).all);
Close (Left_File);
Close (Right_File);
end Compare_Files;
---------------------
-- Compare_Streams --
---------------------
procedure Compare_Streams
(Left, Right : in out Ada.Streams.Root_Stream_Type'Class)
is
Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#);
Left_Last, Right_Last : Stream_Element_Offset;
begin
loop
Read (Left, Left_Buffer, Left_Last);
Read (Right, Right_Buffer, Right_Last);
if Left_Last /= Right_Last then
Ada.Text_IO.Put_Line ("Compare error :"
& Stream_Element_Offset'Image (Left_Last)
& " /= "
& Stream_Element_Offset'Image (Right_Last));
raise Constraint_Error;
elsif Left_Buffer (0 .. Left_Last)
/= Right_Buffer (0 .. Right_Last)
then
Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal.");
raise Constraint_Error;
end if;
exit when Left_Last < Left_Buffer'Last;
end loop;
end Compare_Streams;
------------------
-- Copy_Streams --
------------------
procedure Copy_Streams
(Source, Target : in out Ada.Streams.Root_Stream_Type'Class;
Buffer_Size : in Stream_Element_Offset := 1024)
is
Buffer : Stream_Element_Array (1 .. Buffer_Size);
Last : Stream_Element_Offset;
begin
loop
Read (Source, Buffer, Last);
Write (Target, Buffer (1 .. Last));
exit when Last < Buffer'Last;
end loop;
end Copy_Streams;
-------------
-- Data_In --
-------------
procedure Data_In
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is
begin
Read (File_In, Item, Last);
end Data_In;
--------------
-- Data_Out --
--------------
procedure Data_Out (Item : in Stream_Element_Array) is
begin
Write (File_Out, Item);
end Data_Out;
-------------------
-- Generate_File --
-------------------
procedure Generate_File is
subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#;
package Random_Elements is
new Ada.Numerics.Discrete_Random (Visible_Symbols);
Gen : Random_Elements.Generator;
Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10;
Buffer_Count : constant Count := File_Size / Buffer'Length;
-- Number of same buffers in the packet.
Density : constant Count := 30; -- from 0 to Buffer'Length - 2;
procedure Fill_Buffer (J, D : in Count);
-- Change the part of the buffer.
-----------------
-- Fill_Buffer --
-----------------
procedure Fill_Buffer (J, D : in Count) is
begin
for K in 0 .. D loop
Buffer
(Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1))
:= Random_Elements.Random (Gen);
end loop;
end Fill_Buffer;
begin
Random_Elements.Reset (Gen, Init_Random);
Create (File_In, Out_File, In_File_Name);
Fill_Buffer (1, Buffer'Length - 2);
for J in 1 .. Buffer_Count loop
Write (File_In, Buffer);
Fill_Buffer (J, Density);
end loop;
-- fill remain size.
Write
(File_In,
Buffer
(1 .. Stream_Element_Offset
(File_Size - Buffer'Length * Buffer_Count)));
Flush (File_In);
Close (File_In);
end Generate_File;
---------------------
-- Print_Statistic --
---------------------
procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is
use Ada.Calendar;
use Ada.Text_IO;
package Count_IO is new Integer_IO (ZLib.Count);
Curr_Dur : Duration := Clock - Time_Stamp;
begin
Put (Msg);
Set_Col (20);
Ada.Text_IO.Put ("size =");
Count_IO.Put
(Data_Size,
Width => Stream_IO.Count'Image (File_Size)'Length);
Put_Line (" duration =" & Duration'Image (Curr_Dur));
end Print_Statistic;
-----------
-- Stamp --
-----------
procedure Stamp is
begin
Time_Stamp := Ada.Calendar.Clock;
end Stamp;
begin
Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version);
loop
Generate_File;
for Level in ZLib.Compression_Level'Range loop
Ada.Text_IO.Put_Line ("Level ="
& ZLib.Compression_Level'Image (Level));
-- Test generic interface.
Open (File_In, In_File, In_File_Name);
Create (File_Out, Out_File, Z_File_Name);
Stamp;
-- Deflate using generic instantiation.
ZLib.Deflate_Init
(Filter => Filter,
Level => Level,
Strategy => Strategy,
Header => Header);
Translate (Filter);
Print_Statistic ("Generic compress", ZLib.Total_Out (Filter));
ZLib.Close (Filter);
Close (File_In);
Close (File_Out);
Open (File_In, In_File, Z_File_Name);
Create (File_Out, Out_File, Out_File_Name);
Stamp;
-- Inflate using generic instantiation.
ZLib.Inflate_Init (Filter, Header => Header);
Translate (Filter);
Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter));
ZLib.Close (Filter);
Close (File_In);
Close (File_Out);
Compare_Files (In_File_Name, Out_File_Name);
-- Test stream interface.
-- Compress to the back stream.
Open (File_In, In_File, In_File_Name);
Create (File_Back, Out_File, Z_File_Name);
Stamp;
ZLib.Streams.Create
(Stream => File_Z,
Mode => ZLib.Streams.Out_Stream,
Back => ZLib.Streams.Stream_Access
(Stream (File_Back)),
Back_Compressed => True,
Level => Level,
Strategy => Strategy,
Header => Header);
Copy_Streams
(Source => Stream (File_In).all,
Target => File_Z);
-- Flushing internal buffers to the back stream.
ZLib.Streams.Flush (File_Z, ZLib.Finish);
Print_Statistic ("Write compress",
ZLib.Streams.Write_Total_Out (File_Z));
ZLib.Streams.Close (File_Z);
Close (File_In);
Close (File_Back);
-- Compare reading from original file and from
-- decompression stream.
Open (File_In, In_File, In_File_Name);
Open (File_Back, In_File, Z_File_Name);
ZLib.Streams.Create
(Stream => File_Z,
Mode => ZLib.Streams.In_Stream,
Back => ZLib.Streams.Stream_Access
(Stream (File_Back)),
Back_Compressed => True,
Header => Header);
Stamp;
Compare_Streams (Stream (File_In).all, File_Z);
Print_Statistic ("Read decompress",
ZLib.Streams.Read_Total_Out (File_Z));
ZLib.Streams.Close (File_Z);
Close (File_In);
Close (File_Back);
-- Compress by reading from compression stream.
Open (File_Back, In_File, In_File_Name);
Create (File_Out, Out_File, Z_File_Name);
ZLib.Streams.Create
(Stream => File_Z,
Mode => ZLib.Streams.In_Stream,
Back => ZLib.Streams.Stream_Access
(Stream (File_Back)),
Back_Compressed => False,
Level => Level,
Strategy => Strategy,
Header => Header);
Stamp;
Copy_Streams
(Source => File_Z,
Target => Stream (File_Out).all);
Print_Statistic ("Read compress",
ZLib.Streams.Read_Total_Out (File_Z));
ZLib.Streams.Close (File_Z);
Close (File_Out);
Close (File_Back);
-- Decompress to decompression stream.
Open (File_In, In_File, Z_File_Name);
Create (File_Back, Out_File, Out_File_Name);
ZLib.Streams.Create
(Stream => File_Z,
Mode => ZLib.Streams.Out_Stream,
Back => ZLib.Streams.Stream_Access
(Stream (File_Back)),
Back_Compressed => False,
Header => Header);
Stamp;
Copy_Streams
(Source => Stream (File_In).all,
Target => File_Z);
Print_Statistic ("Write decompress",
ZLib.Streams.Write_Total_Out (File_Z));
ZLib.Streams.Close (File_Z);
Close (File_In);
Close (File_Back);
Compare_Files (In_File_Name, Out_File_Name);
end loop;
Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok.");
exit when not Continuous;
File_Size := File_Size + 1;
end loop;
end Test;
+225
View File
@@ -0,0 +1,225 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $
with Ada.Unchecked_Deallocation;
package body ZLib.Streams is
-----------
-- Close --
-----------
procedure Close (Stream : in out Stream_Type) is
procedure Free is new Ada.Unchecked_Deallocation
(Stream_Element_Array, Buffer_Access);
begin
if Stream.Mode = Out_Stream or Stream.Mode = Duplex then
-- We should flush the data written by the writer.
Flush (Stream, Finish);
Close (Stream.Writer);
end if;
if Stream.Mode = In_Stream or Stream.Mode = Duplex then
Close (Stream.Reader);
Free (Stream.Buffer);
end if;
end Close;
------------
-- Create --
------------
procedure Create
(Stream : out Stream_Type;
Mode : in Stream_Mode;
Back : in Stream_Access;
Back_Compressed : in Boolean;
Level : in Compression_Level := Default_Compression;
Strategy : in Strategy_Type := Default_Strategy;
Header : in Header_Type := Default;
Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset
:= Default_Buffer_Size;
Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset
:= Default_Buffer_Size)
is
subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size);
procedure Init_Filter
(Filter : in out Filter_Type;
Compress : in Boolean);
-----------------
-- Init_Filter --
-----------------
procedure Init_Filter
(Filter : in out Filter_Type;
Compress : in Boolean) is
begin
if Compress then
Deflate_Init
(Filter, Level, Strategy, Header => Header);
else
Inflate_Init (Filter, Header => Header);
end if;
end Init_Filter;
begin
Stream.Back := Back;
Stream.Mode := Mode;
if Mode = Out_Stream or Mode = Duplex then
Init_Filter (Stream.Writer, Back_Compressed);
Stream.Buffer_Size := Write_Buffer_Size;
else
Stream.Buffer_Size := 0;
end if;
if Mode = In_Stream or Mode = Duplex then
Init_Filter (Stream.Reader, not Back_Compressed);
Stream.Buffer := new Buffer_Subtype;
Stream.Rest_First := Stream.Buffer'Last + 1;
Stream.Rest_Last := Stream.Buffer'Last;
end if;
end Create;
-----------
-- Flush --
-----------
procedure Flush
(Stream : in out Stream_Type;
Mode : in Flush_Mode := Sync_Flush)
is
Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size);
Last : Stream_Element_Offset;
begin
loop
Flush (Stream.Writer, Buffer, Last, Mode);
Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last));
exit when Last < Buffer'Last;
end loop;
end Flush;
-------------
-- Is_Open --
-------------
function Is_Open (Stream : Stream_Type) return Boolean is
begin
return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer);
end Is_Open;
----------
-- Read --
----------
procedure Read
(Stream : in out Stream_Type;
Item : out Stream_Element_Array;
Last : out Stream_Element_Offset)
is
procedure Read
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset);
----------
-- Read --
----------
procedure Read
(Item : out Stream_Element_Array;
Last : out Stream_Element_Offset) is
begin
Ada.Streams.Read (Stream.Back.all, Item, Last);
end Read;
procedure Read is new ZLib.Read
(Read => Read,
Buffer => Stream.Buffer.all,
Rest_First => Stream.Rest_First,
Rest_Last => Stream.Rest_Last);
begin
Read (Stream.Reader, Item, Last);
end Read;
-------------------
-- Read_Total_In --
-------------------
function Read_Total_In (Stream : in Stream_Type) return Count is
begin
return Total_In (Stream.Reader);
end Read_Total_In;
--------------------
-- Read_Total_Out --
--------------------
function Read_Total_Out (Stream : in Stream_Type) return Count is
begin
return Total_Out (Stream.Reader);
end Read_Total_Out;
-----------
-- Write --
-----------
procedure Write
(Stream : in out Stream_Type;
Item : in Stream_Element_Array)
is
procedure Write (Item : in Stream_Element_Array);
-----------
-- Write --
-----------
procedure Write (Item : in Stream_Element_Array) is
begin
Ada.Streams.Write (Stream.Back.all, Item);
end Write;
procedure Write is new ZLib.Write
(Write => Write,
Buffer_Size => Stream.Buffer_Size);
begin
Write (Stream.Writer, Item, No_Flush);
end Write;
--------------------
-- Write_Total_In --
--------------------
function Write_Total_In (Stream : in Stream_Type) return Count is
begin
return Total_In (Stream.Writer);
end Write_Total_In;
---------------------
-- Write_Total_Out --
---------------------
function Write_Total_Out (Stream : in Stream_Type) return Count is
begin
return Total_Out (Stream.Writer);
end Write_Total_Out;
end ZLib.Streams;
+114
View File
@@ -0,0 +1,114 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $
package ZLib.Streams is
type Stream_Mode is (In_Stream, Out_Stream, Duplex);
type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class;
type Stream_Type is
new Ada.Streams.Root_Stream_Type with private;
procedure Read
(Stream : in out Stream_Type;
Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset);
procedure Write
(Stream : in out Stream_Type;
Item : in Ada.Streams.Stream_Element_Array);
procedure Flush
(Stream : in out Stream_Type;
Mode : in Flush_Mode := Sync_Flush);
-- Flush the written data to the back stream,
-- all data placed to the compressor is flushing to the Back stream.
-- Should not be used until necessary, because it is decreasing
-- compression.
function Read_Total_In (Stream : in Stream_Type) return Count;
pragma Inline (Read_Total_In);
-- Return total number of bytes read from back stream so far.
function Read_Total_Out (Stream : in Stream_Type) return Count;
pragma Inline (Read_Total_Out);
-- Return total number of bytes read so far.
function Write_Total_In (Stream : in Stream_Type) return Count;
pragma Inline (Write_Total_In);
-- Return total number of bytes written so far.
function Write_Total_Out (Stream : in Stream_Type) return Count;
pragma Inline (Write_Total_Out);
-- Return total number of bytes written to the back stream.
procedure Create
(Stream : out Stream_Type;
Mode : in Stream_Mode;
Back : in Stream_Access;
Back_Compressed : in Boolean;
Level : in Compression_Level := Default_Compression;
Strategy : in Strategy_Type := Default_Strategy;
Header : in Header_Type := Default;
Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset
:= Default_Buffer_Size;
Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset
:= Default_Buffer_Size);
-- Create the Comression/Decompression stream.
-- If mode is In_Stream then Write operation is disabled.
-- If mode is Out_Stream then Read operation is disabled.
-- If Back_Compressed is true then
-- Data written to the Stream is compressing to the Back stream
-- and data read from the Stream is decompressed data from the Back stream.
-- If Back_Compressed is false then
-- Data written to the Stream is decompressing to the Back stream
-- and data read from the Stream is compressed data from the Back stream.
-- !!! When the Need_Header is False ZLib-Ada is using undocumented
-- ZLib 1.1.4 functionality to do not create/wait for ZLib headers.
function Is_Open (Stream : Stream_Type) return Boolean;
procedure Close (Stream : in out Stream_Type);
private
use Ada.Streams;
type Buffer_Access is access all Stream_Element_Array;
type Stream_Type
is new Root_Stream_Type with
record
Mode : Stream_Mode;
Buffer : Buffer_Access;
Rest_First : Stream_Element_Offset;
Rest_Last : Stream_Element_Offset;
-- Buffer for Read operation.
-- We need to have this buffer in the record
-- because not all read data from back stream
-- could be processed during the read operation.
Buffer_Size : Stream_Element_Offset;
-- Buffer size for write operation.
-- We do not need to have this buffer
-- in the record because all data could be
-- processed in the write operation.
Back : Stream_Access;
Reader : Filter_Type;
Writer : Filter_Type;
end record;
end ZLib.Streams;
+141
View File
@@ -0,0 +1,141 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: zlib-thin.adb,v 1.8 2003/12/14 18:27:31 vagul Exp $
package body ZLib.Thin is
ZLIB_VERSION : constant Chars_Ptr := zlibVersion;
Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit;
--------------
-- Avail_In --
--------------
function Avail_In (Strm : in Z_Stream) return UInt is
begin
return Strm.Avail_In;
end Avail_In;
---------------
-- Avail_Out --
---------------
function Avail_Out (Strm : in Z_Stream) return UInt is
begin
return Strm.Avail_Out;
end Avail_Out;
------------------
-- Deflate_Init --
------------------
function Deflate_Init
(strm : Z_Streamp;
level : Int;
method : Int;
windowBits : Int;
memLevel : Int;
strategy : Int)
return Int is
begin
return deflateInit2
(strm,
level,
method,
windowBits,
memLevel,
strategy,
ZLIB_VERSION,
Z_Stream_Size);
end Deflate_Init;
------------------
-- Inflate_Init --
------------------
function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is
begin
return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size);
end Inflate_Init;
------------------------
-- Last_Error_Message --
------------------------
function Last_Error_Message (Strm : in Z_Stream) return String is
use Interfaces.C.Strings;
begin
if Strm.msg = Null_Ptr then
return "";
else
return Value (Strm.msg);
end if;
end Last_Error_Message;
------------
-- Set_In --
------------
procedure Set_In
(Strm : in out Z_Stream;
Buffer : in Voidp;
Size : in UInt) is
begin
Strm.Next_In := Buffer;
Strm.Avail_In := Size;
end Set_In;
------------------
-- Set_Mem_Func --
------------------
procedure Set_Mem_Func
(Strm : in out Z_Stream;
Opaque : in Voidp;
Alloc : in alloc_func;
Free : in free_func) is
begin
Strm.opaque := Opaque;
Strm.zalloc := Alloc;
Strm.zfree := Free;
end Set_Mem_Func;
-------------
-- Set_Out --
-------------
procedure Set_Out
(Strm : in out Z_Stream;
Buffer : in Voidp;
Size : in UInt) is
begin
Strm.Next_Out := Buffer;
Strm.Avail_Out := Size;
end Set_Out;
--------------
-- Total_In --
--------------
function Total_In (Strm : in Z_Stream) return ULong is
begin
return Strm.Total_In;
end Total_In;
---------------
-- Total_Out --
---------------
function Total_Out (Strm : in Z_Stream) return ULong is
begin
return Strm.Total_Out;
end Total_Out;
end ZLib.Thin;
+450
View File
@@ -0,0 +1,450 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2003 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: zlib-thin.ads,v 1.11 2004/07/23 06:33:11 vagul Exp $
with Interfaces.C.Strings;
with System;
private package ZLib.Thin is
-- From zconf.h
MAX_MEM_LEVEL : constant := 9; -- zconf.h:105
-- zconf.h:105
MAX_WBITS : constant := 15; -- zconf.h:115
-- 32K LZ77 window
-- zconf.h:115
SEEK_SET : constant := 8#0000#; -- zconf.h:244
-- Seek from beginning of file.
-- zconf.h:244
SEEK_CUR : constant := 1; -- zconf.h:245
-- Seek from current position.
-- zconf.h:245
SEEK_END : constant := 2; -- zconf.h:246
-- Set file pointer to EOF plus "offset"
-- zconf.h:246
type Byte is new Interfaces.C.unsigned_char; -- 8 bits
-- zconf.h:214
type UInt is new Interfaces.C.unsigned; -- 16 bits or more
-- zconf.h:216
type Int is new Interfaces.C.int;
type ULong is new Interfaces.C.unsigned_long; -- 32 bits or more
-- zconf.h:217
subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr;
type ULong_Access is access ULong;
type Int_Access is access Int;
subtype Voidp is System.Address; -- zconf.h:232
subtype Byte_Access is Voidp;
Nul : constant Voidp := System.Null_Address;
-- end from zconf
Z_NO_FLUSH : constant := 8#0000#; -- zlib.h:125
-- zlib.h:125
Z_PARTIAL_FLUSH : constant := 1; -- zlib.h:126
-- will be removed, use
-- Z_SYNC_FLUSH instead
-- zlib.h:126
Z_SYNC_FLUSH : constant := 2; -- zlib.h:127
-- zlib.h:127
Z_FULL_FLUSH : constant := 3; -- zlib.h:128
-- zlib.h:128
Z_FINISH : constant := 4; -- zlib.h:129
-- zlib.h:129
Z_OK : constant := 8#0000#; -- zlib.h:132
-- zlib.h:132
Z_STREAM_END : constant := 1; -- zlib.h:133
-- zlib.h:133
Z_NEED_DICT : constant := 2; -- zlib.h:134
-- zlib.h:134
Z_ERRNO : constant := -1; -- zlib.h:135
-- zlib.h:135
Z_STREAM_ERROR : constant := -2; -- zlib.h:136
-- zlib.h:136
Z_DATA_ERROR : constant := -3; -- zlib.h:137
-- zlib.h:137
Z_MEM_ERROR : constant := -4; -- zlib.h:138
-- zlib.h:138
Z_BUF_ERROR : constant := -5; -- zlib.h:139
-- zlib.h:139
Z_VERSION_ERROR : constant := -6; -- zlib.h:140
-- zlib.h:140
Z_NO_COMPRESSION : constant := 8#0000#; -- zlib.h:145
-- zlib.h:145
Z_BEST_SPEED : constant := 1; -- zlib.h:146
-- zlib.h:146
Z_BEST_COMPRESSION : constant := 9; -- zlib.h:147
-- zlib.h:147
Z_DEFAULT_COMPRESSION : constant := -1; -- zlib.h:148
-- zlib.h:148
Z_FILTERED : constant := 1; -- zlib.h:151
-- zlib.h:151
Z_HUFFMAN_ONLY : constant := 2; -- zlib.h:152
-- zlib.h:152
Z_DEFAULT_STRATEGY : constant := 8#0000#; -- zlib.h:153
-- zlib.h:153
Z_BINARY : constant := 8#0000#; -- zlib.h:156
-- zlib.h:156
Z_ASCII : constant := 1; -- zlib.h:157
-- zlib.h:157
Z_UNKNOWN : constant := 2; -- zlib.h:158
-- zlib.h:158
Z_DEFLATED : constant := 8; -- zlib.h:161
-- zlib.h:161
Z_NULL : constant := 8#0000#; -- zlib.h:164
-- for initializing zalloc, zfree, opaque
-- zlib.h:164
type gzFile is new Voidp; -- zlib.h:646
type Z_Stream is private;
type Z_Streamp is access all Z_Stream; -- zlib.h:89
type alloc_func is access function
(Opaque : Voidp;
Items : UInt;
Size : UInt)
return Voidp; -- zlib.h:63
type free_func is access procedure (opaque : Voidp; address : Voidp);
function zlibVersion return Chars_Ptr;
function Deflate (strm : Z_Streamp; flush : Int) return Int;
function DeflateEnd (strm : Z_Streamp) return Int;
function Inflate (strm : Z_Streamp; flush : Int) return Int;
function InflateEnd (strm : Z_Streamp) return Int;
function deflateSetDictionary
(strm : Z_Streamp;
dictionary : Byte_Access;
dictLength : UInt)
return Int;
function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int;
-- zlib.h:478
function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495
function deflateParams
(strm : Z_Streamp;
level : Int;
strategy : Int)
return Int; -- zlib.h:506
function inflateSetDictionary
(strm : Z_Streamp;
dictionary : Byte_Access;
dictLength : UInt)
return Int; -- zlib.h:548
function inflateSync (strm : Z_Streamp) return Int; -- zlib.h:565
function inflateReset (strm : Z_Streamp) return Int; -- zlib.h:580
function compress
(dest : Byte_Access;
destLen : ULong_Access;
source : Byte_Access;
sourceLen : ULong)
return Int; -- zlib.h:601
function compress2
(dest : Byte_Access;
destLen : ULong_Access;
source : Byte_Access;
sourceLen : ULong;
level : Int)
return Int; -- zlib.h:615
function uncompress
(dest : Byte_Access;
destLen : ULong_Access;
source : Byte_Access;
sourceLen : ULong)
return Int;
function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile;
function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile;
function gzsetparams
(file : gzFile;
level : Int;
strategy : Int)
return Int;
function gzread
(file : gzFile;
buf : Voidp;
len : UInt)
return Int;
function gzwrite
(file : in gzFile;
buf : in Voidp;
len : in UInt)
return Int;
function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int;
function gzputs (file : in gzFile; s : in Chars_Ptr) return Int;
function gzgets
(file : gzFile;
buf : Chars_Ptr;
len : Int)
return Chars_Ptr;
function gzputc (file : gzFile; char : Int) return Int;
function gzgetc (file : gzFile) return Int;
function gzflush (file : gzFile; flush : Int) return Int;
function gzseek
(file : gzFile;
offset : Int;
whence : Int)
return Int;
function gzrewind (file : gzFile) return Int;
function gztell (file : gzFile) return Int;
function gzeof (file : gzFile) return Int;
function gzclose (file : gzFile) return Int;
function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr;
function adler32
(adler : ULong;
buf : Byte_Access;
len : UInt)
return ULong;
function crc32
(crc : ULong;
buf : Byte_Access;
len : UInt)
return ULong;
function deflateInit
(strm : Z_Streamp;
level : Int;
version : Chars_Ptr;
stream_size : Int)
return Int;
function deflateInit2
(strm : Z_Streamp;
level : Int;
method : Int;
windowBits : Int;
memLevel : Int;
strategy : Int;
version : Chars_Ptr;
stream_size : Int)
return Int;
function Deflate_Init
(strm : Z_Streamp;
level : Int;
method : Int;
windowBits : Int;
memLevel : Int;
strategy : Int)
return Int;
pragma Inline (Deflate_Init);
function inflateInit
(strm : Z_Streamp;
version : Chars_Ptr;
stream_size : Int)
return Int;
function inflateInit2
(strm : in Z_Streamp;
windowBits : in Int;
version : in Chars_Ptr;
stream_size : in Int)
return Int;
function inflateBackInit
(strm : in Z_Streamp;
windowBits : in Int;
window : in Byte_Access;
version : in Chars_Ptr;
stream_size : in Int)
return Int;
-- Size of window have to be 2**windowBits.
function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int;
pragma Inline (Inflate_Init);
function zError (err : Int) return Chars_Ptr;
function inflateSyncPoint (z : Z_Streamp) return Int;
function get_crc_table return ULong_Access;
-- Interface to the available fields of the z_stream structure.
-- The application must update next_in and avail_in when avail_in has
-- dropped to zero. It must update next_out and avail_out when avail_out
-- has dropped to zero. The application must initialize zalloc, zfree and
-- opaque before calling the init function.
procedure Set_In
(Strm : in out Z_Stream;
Buffer : in Voidp;
Size : in UInt);
pragma Inline (Set_In);
procedure Set_Out
(Strm : in out Z_Stream;
Buffer : in Voidp;
Size : in UInt);
pragma Inline (Set_Out);
procedure Set_Mem_Func
(Strm : in out Z_Stream;
Opaque : in Voidp;
Alloc : in alloc_func;
Free : in free_func);
pragma Inline (Set_Mem_Func);
function Last_Error_Message (Strm : in Z_Stream) return String;
pragma Inline (Last_Error_Message);
function Avail_Out (Strm : in Z_Stream) return UInt;
pragma Inline (Avail_Out);
function Avail_In (Strm : in Z_Stream) return UInt;
pragma Inline (Avail_In);
function Total_In (Strm : in Z_Stream) return ULong;
pragma Inline (Total_In);
function Total_Out (Strm : in Z_Stream) return ULong;
pragma Inline (Total_Out);
function inflateCopy
(dest : in Z_Streamp;
Source : in Z_Streamp)
return Int;
function compressBound (Source_Len : in ULong) return ULong;
function deflateBound
(Strm : in Z_Streamp;
Source_Len : in ULong)
return ULong;
function gzungetc (C : in Int; File : in gzFile) return Int;
function zlibCompileFlags return ULong;
private
type Z_Stream is record -- zlib.h:68
Next_In : Voidp := Nul; -- next input byte
Avail_In : UInt := 0; -- number of bytes available at next_in
Total_In : ULong := 0; -- total nb of input bytes read so far
Next_Out : Voidp := Nul; -- next output byte should be put there
Avail_Out : UInt := 0; -- remaining free space at next_out
Total_Out : ULong := 0; -- total nb of bytes output so far
msg : Chars_Ptr; -- last error message, NULL if no error
state : Voidp; -- not visible by applications
zalloc : alloc_func := null; -- used to allocate the internal state
zfree : free_func := null; -- used to free the internal state
opaque : Voidp; -- private data object passed to
-- zalloc and zfree
data_type : Int; -- best guess about the data type:
-- ascii or binary
adler : ULong; -- adler32 value of the uncompressed
-- data
reserved : ULong; -- reserved for future use
end record;
pragma Convention (C, Z_Stream);
pragma Import (C, zlibVersion, "zlibVersion");
pragma Import (C, Deflate, "deflate");
pragma Import (C, DeflateEnd, "deflateEnd");
pragma Import (C, Inflate, "inflate");
pragma Import (C, InflateEnd, "inflateEnd");
pragma Import (C, deflateSetDictionary, "deflateSetDictionary");
pragma Import (C, deflateCopy, "deflateCopy");
pragma Import (C, deflateReset, "deflateReset");
pragma Import (C, deflateParams, "deflateParams");
pragma Import (C, inflateSetDictionary, "inflateSetDictionary");
pragma Import (C, inflateSync, "inflateSync");
pragma Import (C, inflateReset, "inflateReset");
pragma Import (C, compress, "compress");
pragma Import (C, compress2, "compress2");
pragma Import (C, uncompress, "uncompress");
pragma Import (C, gzopen, "gzopen");
pragma Import (C, gzdopen, "gzdopen");
pragma Import (C, gzsetparams, "gzsetparams");
pragma Import (C, gzread, "gzread");
pragma Import (C, gzwrite, "gzwrite");
pragma Import (C, gzprintf, "gzprintf");
pragma Import (C, gzputs, "gzputs");
pragma Import (C, gzgets, "gzgets");
pragma Import (C, gzputc, "gzputc");
pragma Import (C, gzgetc, "gzgetc");
pragma Import (C, gzflush, "gzflush");
pragma Import (C, gzseek, "gzseek");
pragma Import (C, gzrewind, "gzrewind");
pragma Import (C, gztell, "gztell");
pragma Import (C, gzeof, "gzeof");
pragma Import (C, gzclose, "gzclose");
pragma Import (C, gzerror, "gzerror");
pragma Import (C, adler32, "adler32");
pragma Import (C, crc32, "crc32");
pragma Import (C, deflateInit, "deflateInit_");
pragma Import (C, inflateInit, "inflateInit_");
pragma Import (C, deflateInit2, "deflateInit2_");
pragma Import (C, inflateInit2, "inflateInit2_");
pragma Import (C, zError, "zError");
pragma Import (C, inflateSyncPoint, "inflateSyncPoint");
pragma Import (C, get_crc_table, "get_crc_table");
-- since zlib 1.2.0:
pragma Import (C, inflateCopy, "inflateCopy");
pragma Import (C, compressBound, "compressBound");
pragma Import (C, deflateBound, "deflateBound");
pragma Import (C, gzungetc, "gzungetc");
pragma Import (C, zlibCompileFlags, "zlibCompileFlags");
pragma Import (C, inflateBackInit, "inflateBackInit_");
-- I stopped binding the inflateBack routines, because realize that
-- it does not support zlib and gzip headers for now, and have no
-- symmetric deflateBack routines.
-- ZLib-Ada is symmetric regarding deflate/inflate data transformation
-- and has a similar generic callback interface for the
-- deflate/inflate transformation based on the regular Deflate/Inflate
-- routines.
-- pragma Import (C, inflateBack, "inflateBack");
-- pragma Import (C, inflateBackEnd, "inflateBackEnd");
end ZLib.Thin;
+701
View File
@@ -0,0 +1,701 @@
----------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
-- --
-- Open source license information is in the zlib.ads file. --
----------------------------------------------------------------
-- $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $
with Ada.Exceptions;
with Ada.Unchecked_Conversion;
with Ada.Unchecked_Deallocation;
with Interfaces.C.Strings;
with ZLib.Thin;
package body ZLib is
use type Thin.Int;
type Z_Stream is new Thin.Z_Stream;
type Return_Code_Enum is
(OK,
STREAM_END,
NEED_DICT,
ERRNO,
STREAM_ERROR,
DATA_ERROR,
MEM_ERROR,
BUF_ERROR,
VERSION_ERROR);
type Flate_Step_Function is access
function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int;
pragma Convention (C, Flate_Step_Function);
type Flate_End_Function is access
function (Ctrm : in Thin.Z_Streamp) return Thin.Int;
pragma Convention (C, Flate_End_Function);
type Flate_Type is record
Step : Flate_Step_Function;
Done : Flate_End_Function;
end record;
subtype Footer_Array is Stream_Element_Array (1 .. 8);
Simple_GZip_Header : constant Stream_Element_Array (1 .. 10)
:= (16#1f#, 16#8b#, -- Magic header
16#08#, -- Z_DEFLATED
16#00#, -- Flags
16#00#, 16#00#, 16#00#, 16#00#, -- Time
16#00#, -- XFlags
16#03# -- OS code
);
-- The simplest gzip header is not for informational, but just for
-- gzip format compatibility.
-- Note that some code below is using assumption
-- Simple_GZip_Header'Last > Footer_Array'Last, so do not make
-- Simple_GZip_Header'Last <= Footer_Array'Last.
Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum
:= (0 => OK,
1 => STREAM_END,
2 => NEED_DICT,
-1 => ERRNO,
-2 => STREAM_ERROR,
-3 => DATA_ERROR,
-4 => MEM_ERROR,
-5 => BUF_ERROR,
-6 => VERSION_ERROR);
Flate : constant array (Boolean) of Flate_Type
:= (True => (Step => Thin.Deflate'Access,
Done => Thin.DeflateEnd'Access),
False => (Step => Thin.Inflate'Access,
Done => Thin.InflateEnd'Access));
Flush_Finish : constant array (Boolean) of Flush_Mode
:= (True => Finish, False => No_Flush);
procedure Raise_Error (Stream : in Z_Stream);
pragma Inline (Raise_Error);
procedure Raise_Error (Message : in String);
pragma Inline (Raise_Error);
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int);
procedure Free is new Ada.Unchecked_Deallocation
(Z_Stream, Z_Stream_Access);
function To_Thin_Access is new Ada.Unchecked_Conversion
(Z_Stream_Access, Thin.Z_Streamp);
procedure Translate_GZip
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode);
-- Separate translate routine for make gzip header.
procedure Translate_Auto
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode);
-- translate routine without additional headers.
-----------------
-- Check_Error --
-----------------
procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is
use type Thin.Int;
begin
if Code /= Thin.Z_OK then
Raise_Error
(Return_Code_Enum'Image (Return_Code (Code))
& ": " & Last_Error_Message (Stream));
end if;
end Check_Error;
-----------
-- Close --
-----------
procedure Close
(Filter : in out Filter_Type;
Ignore_Error : in Boolean := False)
is
Code : Thin.Int;
begin
if not Ignore_Error and then not Is_Open (Filter) then
raise Status_Error;
end if;
Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm));
if Ignore_Error or else Code = Thin.Z_OK then
Free (Filter.Strm);
else
declare
Error_Message : constant String
:= Last_Error_Message (Filter.Strm.all);
begin
Free (Filter.Strm);
Ada.Exceptions.Raise_Exception
(ZLib_Error'Identity,
Return_Code_Enum'Image (Return_Code (Code))
& ": " & Error_Message);
end;
end if;
end Close;
-----------
-- CRC32 --
-----------
function CRC32
(CRC : in Unsigned_32;
Data : in Ada.Streams.Stream_Element_Array)
return Unsigned_32
is
use Thin;
begin
return Unsigned_32 (crc32 (ULong (CRC),
Data'Address,
Data'Length));
end CRC32;
procedure CRC32
(CRC : in out Unsigned_32;
Data : in Ada.Streams.Stream_Element_Array) is
begin
CRC := CRC32 (CRC, Data);
end CRC32;
------------------
-- Deflate_Init --
------------------
procedure Deflate_Init
(Filter : in out Filter_Type;
Level : in Compression_Level := Default_Compression;
Strategy : in Strategy_Type := Default_Strategy;
Method : in Compression_Method := Deflated;
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
Memory_Level : in Memory_Level_Type := Default_Memory_Level;
Header : in Header_Type := Default)
is
use type Thin.Int;
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
begin
if Is_Open (Filter) then
raise Status_Error;
end if;
-- We allow ZLib to make header only in case of default header type.
-- Otherwise we would either do header by ourselfs, or do not do
-- header at all.
if Header = None or else Header = GZip then
Win_Bits := -Win_Bits;
end if;
-- For the GZip CRC calculation and make headers.
if Header = GZip then
Filter.CRC := 0;
Filter.Offset := Simple_GZip_Header'First;
else
Filter.Offset := Simple_GZip_Header'Last + 1;
end if;
Filter.Strm := new Z_Stream;
Filter.Compression := True;
Filter.Stream_End := False;
Filter.Header := Header;
if Thin.Deflate_Init
(To_Thin_Access (Filter.Strm),
Level => Thin.Int (Level),
method => Thin.Int (Method),
windowBits => Win_Bits,
memLevel => Thin.Int (Memory_Level),
strategy => Thin.Int (Strategy)) /= Thin.Z_OK
then
Raise_Error (Filter.Strm.all);
end if;
end Deflate_Init;
-----------
-- Flush --
-----------
procedure Flush
(Filter : in out Filter_Type;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode)
is
No_Data : Stream_Element_Array := (1 .. 0 => 0);
Last : Stream_Element_Offset;
begin
Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush);
end Flush;
-----------------------
-- Generic_Translate --
-----------------------
procedure Generic_Translate
(Filter : in out ZLib.Filter_Type;
In_Buffer_Size : in Integer := Default_Buffer_Size;
Out_Buffer_Size : in Integer := Default_Buffer_Size)
is
In_Buffer : Stream_Element_Array
(1 .. Stream_Element_Offset (In_Buffer_Size));
Out_Buffer : Stream_Element_Array
(1 .. Stream_Element_Offset (Out_Buffer_Size));
Last : Stream_Element_Offset;
In_Last : Stream_Element_Offset;
In_First : Stream_Element_Offset;
Out_Last : Stream_Element_Offset;
begin
Main : loop
Data_In (In_Buffer, Last);
In_First := In_Buffer'First;
loop
Translate
(Filter => Filter,
In_Data => In_Buffer (In_First .. Last),
In_Last => In_Last,
Out_Data => Out_Buffer,
Out_Last => Out_Last,
Flush => Flush_Finish (Last < In_Buffer'First));
if Out_Buffer'First <= Out_Last then
Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last));
end if;
exit Main when Stream_End (Filter);
-- The end of in buffer.
exit when In_Last = Last;
In_First := In_Last + 1;
end loop;
end loop Main;
end Generic_Translate;
------------------
-- Inflate_Init --
------------------
procedure Inflate_Init
(Filter : in out Filter_Type;
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
Header : in Header_Type := Default)
is
use type Thin.Int;
Win_Bits : Thin.Int := Thin.Int (Window_Bits);
procedure Check_Version;
-- Check the latest header types compatibility.
procedure Check_Version is
begin
if Version <= "1.1.4" then
Raise_Error
("Inflate header type " & Header_Type'Image (Header)
& " incompatible with ZLib version " & Version);
end if;
end Check_Version;
begin
if Is_Open (Filter) then
raise Status_Error;
end if;
case Header is
when None =>
Check_Version;
-- Inflate data without headers determined
-- by negative Win_Bits.
Win_Bits := -Win_Bits;
when GZip =>
Check_Version;
-- Inflate gzip data defined by flag 16.
Win_Bits := Win_Bits + 16;
when Auto =>
Check_Version;
-- Inflate with automatic detection
-- of gzip or native header defined by flag 32.
Win_Bits := Win_Bits + 32;
when Default => null;
end case;
Filter.Strm := new Z_Stream;
Filter.Compression := False;
Filter.Stream_End := False;
Filter.Header := Header;
if Thin.Inflate_Init
(To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK
then
Raise_Error (Filter.Strm.all);
end if;
end Inflate_Init;
-------------
-- Is_Open --
-------------
function Is_Open (Filter : in Filter_Type) return Boolean is
begin
return Filter.Strm /= null;
end Is_Open;
-----------------
-- Raise_Error --
-----------------
procedure Raise_Error (Message : in String) is
begin
Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message);
end Raise_Error;
procedure Raise_Error (Stream : in Z_Stream) is
begin
Raise_Error (Last_Error_Message (Stream));
end Raise_Error;
----------
-- Read --
----------
procedure Read
(Filter : in out Filter_Type;
Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode := No_Flush)
is
In_Last : Stream_Element_Offset;
Item_First : Ada.Streams.Stream_Element_Offset := Item'First;
V_Flush : Flush_Mode := Flush;
begin
pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1);
pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last);
loop
if Rest_Last = Buffer'First - 1 then
V_Flush := Finish;
elsif Rest_First > Rest_Last then
Read (Buffer, Rest_Last);
Rest_First := Buffer'First;
if Rest_Last < Buffer'First then
V_Flush := Finish;
end if;
end if;
Translate
(Filter => Filter,
In_Data => Buffer (Rest_First .. Rest_Last),
In_Last => In_Last,
Out_Data => Item (Item_First .. Item'Last),
Out_Last => Last,
Flush => V_Flush);
Rest_First := In_Last + 1;
exit when Stream_End (Filter)
or else Last = Item'Last
or else (Last >= Item'First and then Allow_Read_Some);
Item_First := Last + 1;
end loop;
end Read;
----------------
-- Stream_End --
----------------
function Stream_End (Filter : in Filter_Type) return Boolean is
begin
if Filter.Header = GZip and Filter.Compression then
return Filter.Stream_End
and then Filter.Offset = Footer_Array'Last + 1;
else
return Filter.Stream_End;
end if;
end Stream_End;
--------------
-- Total_In --
--------------
function Total_In (Filter : in Filter_Type) return Count is
begin
return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all));
end Total_In;
---------------
-- Total_Out --
---------------
function Total_Out (Filter : in Filter_Type) return Count is
begin
return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all));
end Total_Out;
---------------
-- Translate --
---------------
procedure Translate
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode) is
begin
if Filter.Header = GZip and then Filter.Compression then
Translate_GZip
(Filter => Filter,
In_Data => In_Data,
In_Last => In_Last,
Out_Data => Out_Data,
Out_Last => Out_Last,
Flush => Flush);
else
Translate_Auto
(Filter => Filter,
In_Data => In_Data,
In_Last => In_Last,
Out_Data => Out_Data,
Out_Last => Out_Last,
Flush => Flush);
end if;
end Translate;
--------------------
-- Translate_Auto --
--------------------
procedure Translate_Auto
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode)
is
use type Thin.Int;
Code : Thin.Int;
begin
if not Is_Open (Filter) then
raise Status_Error;
end if;
if Out_Data'Length = 0 and then In_Data'Length = 0 then
raise Constraint_Error;
end if;
Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length);
Set_In (Filter.Strm.all, In_Data'Address, In_Data'Length);
Code := Flate (Filter.Compression).Step
(To_Thin_Access (Filter.Strm),
Thin.Int (Flush));
if Code = Thin.Z_STREAM_END then
Filter.Stream_End := True;
else
Check_Error (Filter.Strm.all, Code);
end if;
In_Last := In_Data'Last
- Stream_Element_Offset (Avail_In (Filter.Strm.all));
Out_Last := Out_Data'Last
- Stream_Element_Offset (Avail_Out (Filter.Strm.all));
end Translate_Auto;
--------------------
-- Translate_GZip --
--------------------
procedure Translate_GZip
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode)
is
Out_First : Stream_Element_Offset;
procedure Add_Data (Data : in Stream_Element_Array);
-- Add data to stream from the Filter.Offset till necessary,
-- used for add gzip headr/footer.
procedure Put_32
(Item : in out Stream_Element_Array;
Data : in Unsigned_32);
pragma Inline (Put_32);
--------------
-- Add_Data --
--------------
procedure Add_Data (Data : in Stream_Element_Array) is
Data_First : Stream_Element_Offset renames Filter.Offset;
Data_Last : Stream_Element_Offset;
Data_Len : Stream_Element_Offset; -- -1
Out_Len : Stream_Element_Offset; -- -1
begin
Out_First := Out_Last + 1;
if Data_First > Data'Last then
return;
end if;
Data_Len := Data'Last - Data_First;
Out_Len := Out_Data'Last - Out_First;
if Data_Len <= Out_Len then
Out_Last := Out_First + Data_Len;
Data_Last := Data'Last;
else
Out_Last := Out_Data'Last;
Data_Last := Data_First + Out_Len;
end if;
Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last);
Data_First := Data_Last + 1;
Out_First := Out_Last + 1;
end Add_Data;
------------
-- Put_32 --
------------
procedure Put_32
(Item : in out Stream_Element_Array;
Data : in Unsigned_32)
is
D : Unsigned_32 := Data;
begin
for J in Item'First .. Item'First + 3 loop
Item (J) := Stream_Element (D and 16#FF#);
D := Shift_Right (D, 8);
end loop;
end Put_32;
begin
Out_Last := Out_Data'First - 1;
if not Filter.Stream_End then
Add_Data (Simple_GZip_Header);
Translate_Auto
(Filter => Filter,
In_Data => In_Data,
In_Last => In_Last,
Out_Data => Out_Data (Out_First .. Out_Data'Last),
Out_Last => Out_Last,
Flush => Flush);
CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last));
end if;
if Filter.Stream_End and then Out_Last <= Out_Data'Last then
-- This detection method would work only when
-- Simple_GZip_Header'Last > Footer_Array'Last
if Filter.Offset = Simple_GZip_Header'Last + 1 then
Filter.Offset := Footer_Array'First;
end if;
declare
Footer : Footer_Array;
begin
Put_32 (Footer, Filter.CRC);
Put_32 (Footer (Footer'First + 4 .. Footer'Last),
Unsigned_32 (Total_In (Filter)));
Add_Data (Footer);
end;
end if;
end Translate_GZip;
-------------
-- Version --
-------------
function Version return String is
begin
return Interfaces.C.Strings.Value (Thin.zlibVersion);
end Version;
-----------
-- Write --
-----------
procedure Write
(Filter : in out Filter_Type;
Item : in Ada.Streams.Stream_Element_Array;
Flush : in Flush_Mode := No_Flush)
is
Buffer : Stream_Element_Array (1 .. Buffer_Size);
In_Last : Stream_Element_Offset;
Out_Last : Stream_Element_Offset;
In_First : Stream_Element_Offset := Item'First;
begin
if Item'Length = 0 and Flush = No_Flush then
return;
end if;
loop
Translate
(Filter => Filter,
In_Data => Item (In_First .. Item'Last),
In_Last => In_Last,
Out_Data => Buffer,
Out_Last => Out_Last,
Flush => Flush);
if Out_Last >= Buffer'First then
Write (Buffer (1 .. Out_Last));
end if;
exit when In_Last = Item'Last or Stream_End (Filter);
In_First := In_Last + 1;
end loop;
end Write;
end ZLib;
+328
View File
@@ -0,0 +1,328 @@
------------------------------------------------------------------------------
-- ZLib for Ada thick binding. --
-- --
-- Copyright (C) 2002-2004 Dmitriy Anisimkov --
-- --
-- This library is free software; you can redistribute it and/or modify --
-- it under the terms of the GNU General Public License as published by --
-- the Free Software Foundation; either version 2 of the License, or (at --
-- your option) any later version. --
-- --
-- This library is distributed in the hope that it will be useful, but --
-- WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU --
-- General Public License for more details. --
-- --
-- You should have received a copy of the GNU General Public License --
-- along with this library; if not, write to the Free Software Foundation, --
-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. --
-- --
-- As a special exception, if other files instantiate generics from this --
-- unit, or you link this unit with other files to produce an executable, --
-- this unit does not by itself cause the resulting executable to be --
-- covered by the GNU General Public License. This exception does not --
-- however invalidate any other reasons why the executable file might be --
-- covered by the GNU Public License. --
------------------------------------------------------------------------------
-- $Id: zlib.ads,v 1.26 2004/09/06 06:53:19 vagul Exp $
with Ada.Streams;
with Interfaces;
package ZLib is
ZLib_Error : exception;
Status_Error : exception;
type Compression_Level is new Integer range -1 .. 9;
type Flush_Mode is private;
type Compression_Method is private;
type Window_Bits_Type is new Integer range 8 .. 15;
type Memory_Level_Type is new Integer range 1 .. 9;
type Unsigned_32 is new Interfaces.Unsigned_32;
type Strategy_Type is private;
type Header_Type is (None, Auto, Default, GZip);
-- Header type usage have a some limitation for inflate.
-- See comment for Inflate_Init.
subtype Count is Ada.Streams.Stream_Element_Count;
Default_Memory_Level : constant Memory_Level_Type := 8;
Default_Window_Bits : constant Window_Bits_Type := 15;
----------------------------------
-- Compression method constants --
----------------------------------
Deflated : constant Compression_Method;
-- Only one method allowed in this ZLib version
---------------------------------
-- Compression level constants --
---------------------------------
No_Compression : constant Compression_Level := 0;
Best_Speed : constant Compression_Level := 1;
Best_Compression : constant Compression_Level := 9;
Default_Compression : constant Compression_Level := -1;
--------------------------
-- Flush mode constants --
--------------------------
No_Flush : constant Flush_Mode;
-- Regular way for compression, no flush
Partial_Flush : constant Flush_Mode;
-- Will be removed, use Z_SYNC_FLUSH instead
Sync_Flush : constant Flush_Mode;
-- All pending output is flushed to the output buffer and the output
-- is aligned on a byte boundary, so that the decompressor can get all
-- input data available so far. (In particular avail_in is zero after the
-- call if enough output space has been provided before the call.)
-- Flushing may degrade compression for some compression algorithms and so
-- it should be used only when necessary.
Block_Flush : constant Flush_Mode;
-- Z_BLOCK requests that inflate() stop
-- if and when it get to the next deflate block boundary. When decoding the
-- zlib or gzip format, this will cause inflate() to return immediately
-- after the header and before the first block. When doing a raw inflate,
-- inflate() will go ahead and process the first block, and will return
-- when it gets to the end of that block, or when it runs out of data.
Full_Flush : constant Flush_Mode;
-- All output is flushed as with SYNC_FLUSH, and the compression state
-- is reset so that decompression can restart from this point if previous
-- compressed data has been damaged or if random access is desired. Using
-- Full_Flush too often can seriously degrade the compression.
Finish : constant Flush_Mode;
-- Just for tell the compressor that input data is complete.
------------------------------------
-- Compression strategy constants --
------------------------------------
-- RLE stategy could be used only in version 1.2.0 and later.
Filtered : constant Strategy_Type;
Huffman_Only : constant Strategy_Type;
RLE : constant Strategy_Type;
Default_Strategy : constant Strategy_Type;
Default_Buffer_Size : constant := 4096;
type Filter_Type is tagged limited private;
-- The filter is for compression and for decompression.
-- The usage of the type is depend of its initialization.
function Version return String;
pragma Inline (Version);
-- Return string representation of the ZLib version.
procedure Deflate_Init
(Filter : in out Filter_Type;
Level : in Compression_Level := Default_Compression;
Strategy : in Strategy_Type := Default_Strategy;
Method : in Compression_Method := Deflated;
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
Memory_Level : in Memory_Level_Type := Default_Memory_Level;
Header : in Header_Type := Default);
-- Compressor initialization.
-- When Header parameter is Auto or Default, then default zlib header
-- would be provided for compressed data.
-- When Header is GZip, then gzip header would be set instead of
-- default header.
-- When Header is None, no header would be set for compressed data.
procedure Inflate_Init
(Filter : in out Filter_Type;
Window_Bits : in Window_Bits_Type := Default_Window_Bits;
Header : in Header_Type := Default);
-- Decompressor initialization.
-- Default header type mean that ZLib default header is expecting in the
-- input compressed stream.
-- Header type None mean that no header is expecting in the input stream.
-- GZip header type mean that GZip header is expecting in the
-- input compressed stream.
-- Auto header type mean that header type (GZip or Native) would be
-- detected automatically in the input stream.
-- Note that header types parameter values None, GZip and Auto are
-- supported for inflate routine only in ZLib versions 1.2.0.2 and later.
-- Deflate_Init is supporting all header types.
function Is_Open (Filter : in Filter_Type) return Boolean;
pragma Inline (Is_Open);
-- Is the filter opened for compression or decompression.
procedure Close
(Filter : in out Filter_Type;
Ignore_Error : in Boolean := False);
-- Closing the compression or decompressor.
-- If stream is closing before the complete and Ignore_Error is False,
-- The exception would be raised.
generic
with procedure Data_In
(Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset);
with procedure Data_Out
(Item : in Ada.Streams.Stream_Element_Array);
procedure Generic_Translate
(Filter : in out Filter_Type;
In_Buffer_Size : in Integer := Default_Buffer_Size;
Out_Buffer_Size : in Integer := Default_Buffer_Size);
-- Compress/decompress data fetch from Data_In routine and pass the result
-- to the Data_Out routine. User should provide Data_In and Data_Out
-- for compression/decompression data flow.
-- Compression or decompression depend on Filter initialization.
function Total_In (Filter : in Filter_Type) return Count;
pragma Inline (Total_In);
-- Returns total number of input bytes read so far
function Total_Out (Filter : in Filter_Type) return Count;
pragma Inline (Total_Out);
-- Returns total number of bytes output so far
function CRC32
(CRC : in Unsigned_32;
Data : in Ada.Streams.Stream_Element_Array)
return Unsigned_32;
pragma Inline (CRC32);
-- Compute CRC32, it could be necessary for make gzip format
procedure CRC32
(CRC : in out Unsigned_32;
Data : in Ada.Streams.Stream_Element_Array);
pragma Inline (CRC32);
-- Compute CRC32, it could be necessary for make gzip format
-------------------------------------------------
-- Below is more complex low level routines. --
-------------------------------------------------
procedure Translate
(Filter : in out Filter_Type;
In_Data : in Ada.Streams.Stream_Element_Array;
In_Last : out Ada.Streams.Stream_Element_Offset;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode);
-- Compress/decompress the In_Data buffer and place the result into
-- Out_Data. In_Last is the index of last element from In_Data accepted by
-- the Filter. Out_Last is the last element of the received data from
-- Filter. To tell the filter that incoming data are complete put the
-- Flush parameter to Finish.
function Stream_End (Filter : in Filter_Type) return Boolean;
pragma Inline (Stream_End);
-- Return the true when the stream is complete.
procedure Flush
(Filter : in out Filter_Type;
Out_Data : out Ada.Streams.Stream_Element_Array;
Out_Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode);
pragma Inline (Flush);
-- Flushing the data from the compressor.
generic
with procedure Write
(Item : in Ada.Streams.Stream_Element_Array);
-- User should provide this routine for accept
-- compressed/decompressed data.
Buffer_Size : in Ada.Streams.Stream_Element_Offset
:= Default_Buffer_Size;
-- Buffer size for Write user routine.
procedure Write
(Filter : in out Filter_Type;
Item : in Ada.Streams.Stream_Element_Array;
Flush : in Flush_Mode := No_Flush);
-- Compress/Decompress data from Item to the generic parameter procedure
-- Write. Output buffer size could be set in Buffer_Size generic parameter.
generic
with procedure Read
(Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset);
-- User should provide data for compression/decompression
-- thru this routine.
Buffer : in out Ada.Streams.Stream_Element_Array;
-- Buffer for keep remaining data from the previous
-- back read.
Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset;
-- Rest_First have to be initialized to Buffer'Last + 1
-- Rest_Last have to be initialized to Buffer'Last
-- before usage.
Allow_Read_Some : in Boolean := False;
-- Is it allowed to return Last < Item'Last before end of data.
procedure Read
(Filter : in out Filter_Type;
Item : out Ada.Streams.Stream_Element_Array;
Last : out Ada.Streams.Stream_Element_Offset;
Flush : in Flush_Mode := No_Flush);
-- Compress/Decompress data from generic parameter procedure Read to the
-- Item. User should provide Buffer and initialized Rest_First, Rest_Last
-- indicators. If Allow_Read_Some is True, Read routines could return
-- Last < Item'Last only at end of stream.
private
use Ada.Streams;
pragma Assert (Ada.Streams.Stream_Element'Size = 8);
pragma Assert (Ada.Streams.Stream_Element'Modulus = 2**8);
type Flush_Mode is new Integer range 0 .. 5;
type Compression_Method is new Integer range 8 .. 8;
type Strategy_Type is new Integer range 0 .. 3;
No_Flush : constant Flush_Mode := 0;
Partial_Flush : constant Flush_Mode := 1;
Sync_Flush : constant Flush_Mode := 2;
Full_Flush : constant Flush_Mode := 3;
Finish : constant Flush_Mode := 4;
Block_Flush : constant Flush_Mode := 5;
Filtered : constant Strategy_Type := 1;
Huffman_Only : constant Strategy_Type := 2;
RLE : constant Strategy_Type := 3;
Default_Strategy : constant Strategy_Type := 0;
Deflated : constant Compression_Method := 8;
type Z_Stream;
type Z_Stream_Access is access all Z_Stream;
type Filter_Type is tagged limited record
Strm : Z_Stream_Access;
Compression : Boolean;
Stream_End : Boolean;
Header : Header_Type;
CRC : Unsigned_32;
Offset : Stream_Element_Offset;
-- Offset for gzip header/footer output.
end record;
end ZLib;
+20
View File
@@ -0,0 +1,20 @@
project Zlib is
for Languages use ("Ada");
for Source_Dirs use (".");
for Object_Dir use ".";
for Main use ("test.adb", "mtest.adb", "read.adb", "buffer_demo");
package Compiler is
for Default_Switches ("ada") use ("-gnatwcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst");
end Compiler;
package Linker is
for Default_Switches ("ada") use ("-lz");
end Linker;
package Builder is
for Default_Switches ("ada") use ("-s", "-gnatQ");
end Builder;
end Zlib;
+452
View File
@@ -0,0 +1,452 @@
/*
* match.S -- optimized version of longest_match()
* based on the similar work by Gilles Vollant, and Brian Raiter, written 1998
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the BSD License. Use by owners of Che Guevarra
* parafernalia is prohibited, where possible, and highly discouraged
* elsewhere.
*/
#ifndef NO_UNDERLINE
# define match_init _match_init
# define longest_match _longest_match
#endif
#define scanend ebx
#define scanendw bx
#define chainlenwmask edx /* high word: current chain len low word: s->wmask */
#define curmatch rsi
#define curmatchd esi
#define windowbestlen r8
#define scanalign r9
#define scanalignd r9d
#define window r10
#define bestlen r11
#define bestlend r11d
#define scanstart r12d
#define scanstartw r12w
#define scan r13
#define nicematch r14d
#define limit r15
#define limitd r15d
#define prev rcx
/*
* The 258 is a "magic number, not a parameter -- changing it
* breaks the hell loose
*/
#define MAX_MATCH (258)
#define MIN_MATCH (3)
#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
/* stack frame offsets */
#define LocalVarsSize (112)
#define _chainlenwmask ( 8-LocalVarsSize)(%rsp)
#define _windowbestlen (16-LocalVarsSize)(%rsp)
#define save_r14 (24-LocalVarsSize)(%rsp)
#define save_rsi (32-LocalVarsSize)(%rsp)
#define save_rbx (40-LocalVarsSize)(%rsp)
#define save_r12 (56-LocalVarsSize)(%rsp)
#define save_r13 (64-LocalVarsSize)(%rsp)
#define save_r15 (80-LocalVarsSize)(%rsp)
.globl match_init, longest_match
/*
* On AMD64 the first argument of a function (in our case -- the pointer to
* deflate_state structure) is passed in %rdi, hence our offsets below are
* all off of that.
*/
/* you can check the structure offset by running
#include <stdlib.h>
#include <stdio.h>
#include "deflate.h"
void print_depl()
{
deflate_state ds;
deflate_state *s=&ds;
printf("size pointer=%u\n",(int)sizeof(void*));
printf("#define dsWSize (%3u)(%%rdi)\n",(int)(((char*)&(s->w_size))-((char*)s)));
printf("#define dsWMask (%3u)(%%rdi)\n",(int)(((char*)&(s->w_mask))-((char*)s)));
printf("#define dsWindow (%3u)(%%rdi)\n",(int)(((char*)&(s->window))-((char*)s)));
printf("#define dsPrev (%3u)(%%rdi)\n",(int)(((char*)&(s->prev))-((char*)s)));
printf("#define dsMatchLen (%3u)(%%rdi)\n",(int)(((char*)&(s->match_length))-((char*)s)));
printf("#define dsPrevMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_match))-((char*)s)));
printf("#define dsStrStart (%3u)(%%rdi)\n",(int)(((char*)&(s->strstart))-((char*)s)));
printf("#define dsMatchStart (%3u)(%%rdi)\n",(int)(((char*)&(s->match_start))-((char*)s)));
printf("#define dsLookahead (%3u)(%%rdi)\n",(int)(((char*)&(s->lookahead))-((char*)s)));
printf("#define dsPrevLen (%3u)(%%rdi)\n",(int)(((char*)&(s->prev_length))-((char*)s)));
printf("#define dsMaxChainLen (%3u)(%%rdi)\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));
printf("#define dsGoodMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->good_match))-((char*)s)));
printf("#define dsNiceMatch (%3u)(%%rdi)\n",(int)(((char*)&(s->nice_match))-((char*)s)));
}
*/
/*
to compile for XCode 3.2 on MacOSX x86_64
- run "gcc -g -c -DXCODE_MAC_X64_STRUCTURE amd64-match.S"
*/
#ifndef CURRENT_LINX_XCODE_MAC_X64_STRUCTURE
#define dsWSize ( 68)(%rdi)
#define dsWMask ( 76)(%rdi)
#define dsWindow ( 80)(%rdi)
#define dsPrev ( 96)(%rdi)
#define dsMatchLen (144)(%rdi)
#define dsPrevMatch (148)(%rdi)
#define dsStrStart (156)(%rdi)
#define dsMatchStart (160)(%rdi)
#define dsLookahead (164)(%rdi)
#define dsPrevLen (168)(%rdi)
#define dsMaxChainLen (172)(%rdi)
#define dsGoodMatch (188)(%rdi)
#define dsNiceMatch (192)(%rdi)
#else
#ifndef STRUCT_OFFSET
# define STRUCT_OFFSET (0)
#endif
#define dsWSize ( 56 + STRUCT_OFFSET)(%rdi)
#define dsWMask ( 64 + STRUCT_OFFSET)(%rdi)
#define dsWindow ( 72 + STRUCT_OFFSET)(%rdi)
#define dsPrev ( 88 + STRUCT_OFFSET)(%rdi)
#define dsMatchLen (136 + STRUCT_OFFSET)(%rdi)
#define dsPrevMatch (140 + STRUCT_OFFSET)(%rdi)
#define dsStrStart (148 + STRUCT_OFFSET)(%rdi)
#define dsMatchStart (152 + STRUCT_OFFSET)(%rdi)
#define dsLookahead (156 + STRUCT_OFFSET)(%rdi)
#define dsPrevLen (160 + STRUCT_OFFSET)(%rdi)
#define dsMaxChainLen (164 + STRUCT_OFFSET)(%rdi)
#define dsGoodMatch (180 + STRUCT_OFFSET)(%rdi)
#define dsNiceMatch (184 + STRUCT_OFFSET)(%rdi)
#endif
.text
/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
longest_match:
/*
* Retrieve the function arguments. %curmatch will hold cur_match
* throughout the entire function (passed via rsi on amd64).
* rdi will hold the pointer to the deflate_state (first arg on amd64)
*/
mov %rsi, save_rsi
mov %rbx, save_rbx
mov %r12, save_r12
mov %r13, save_r13
mov %r14, save_r14
mov %r15, save_r15
/* uInt wmask = s->w_mask; */
/* unsigned chain_length = s->max_chain_length; */
/* if (s->prev_length >= s->good_match) { */
/* chain_length >>= 2; */
/* } */
movl dsPrevLen, %eax
movl dsGoodMatch, %ebx
cmpl %ebx, %eax
movl dsWMask, %eax
movl dsMaxChainLen, %chainlenwmask
jl LastMatchGood
shrl $2, %chainlenwmask
LastMatchGood:
/* chainlen is decremented once beforehand so that the function can */
/* use the sign flag instead of the zero flag for the exit test. */
/* It is then shifted into the high word, to make room for the wmask */
/* value, which it will always accompany. */
decl %chainlenwmask
shll $16, %chainlenwmask
orl %eax, %chainlenwmask
/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
movl dsNiceMatch, %eax
movl dsLookahead, %ebx
cmpl %eax, %ebx
jl LookaheadLess
movl %eax, %ebx
LookaheadLess: movl %ebx, %nicematch
/* register Bytef *scan = s->window + s->strstart; */
mov dsWindow, %window
movl dsStrStart, %limitd
lea (%limit, %window), %scan
/* Determine how many bytes the scan ptr is off from being */
/* dword-aligned. */
mov %scan, %scanalign
negl %scanalignd
andl $3, %scanalignd
/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
movl dsWSize, %eax
subl $MIN_LOOKAHEAD, %eax
xorl %ecx, %ecx
subl %eax, %limitd
cmovng %ecx, %limitd
/* int best_len = s->prev_length; */
movl dsPrevLen, %bestlend
/* Store the sum of s->window + best_len in %windowbestlen locally, and in memory. */
lea (%window, %bestlen), %windowbestlen
mov %windowbestlen, _windowbestlen
/* register ush scan_start = *(ushf*)scan; */
/* register ush scan_end = *(ushf*)(scan+best_len-1); */
/* Posf *prev = s->prev; */
movzwl (%scan), %scanstart
movzwl -1(%scan, %bestlen), %scanend
mov dsPrev, %prev
/* Jump into the main loop. */
movl %chainlenwmask, _chainlenwmask
jmp LoopEntry
.balign 16
/* do {
* match = s->window + cur_match;
* if (*(ushf*)(match+best_len-1) != scan_end ||
* *(ushf*)match != scan_start) continue;
* [...]
* } while ((cur_match = prev[cur_match & wmask]) > limit
* && --chain_length != 0);
*
* Here is the inner loop of the function. The function will spend the
* majority of its time in this loop, and majority of that time will
* be spent in the first ten instructions.
*/
LookupLoop:
andl %chainlenwmask, %curmatchd
movzwl (%prev, %curmatch, 2), %curmatchd
cmpl %limitd, %curmatchd
jbe LeaveNow
subl $0x00010000, %chainlenwmask
js LeaveNow
LoopEntry: cmpw -1(%windowbestlen, %curmatch), %scanendw
jne LookupLoop
cmpw %scanstartw, (%window, %curmatch)
jne LookupLoop
/* Store the current value of chainlen. */
movl %chainlenwmask, _chainlenwmask
/* %scan is the string under scrutiny, and %prev to the string we */
/* are hoping to match it up with. In actuality, %esi and %edi are */
/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
/* initialized to -(MAX_MATCH_8 - scanalign). */
mov $(-MAX_MATCH_8), %rdx
lea (%curmatch, %window), %windowbestlen
lea MAX_MATCH_8(%windowbestlen, %scanalign), %windowbestlen
lea MAX_MATCH_8(%scan, %scanalign), %prev
/* the prefetching below makes very little difference... */
prefetcht1 (%windowbestlen, %rdx)
prefetcht1 (%prev, %rdx)
/*
* Test the strings for equality, 8 bytes at a time. At the end,
* adjust %rdx so that it is offset to the exact byte that mismatched.
*
* It should be confessed that this loop usually does not represent
* much of the total running time. Replacing it with a more
* straightforward "rep cmpsb" would not drastically degrade
* performance -- unrolling it, for example, makes no difference.
*/
#undef USE_SSE /* works, but is 6-7% slower, than non-SSE... */
LoopCmps:
#ifdef USE_SSE
/* Preload the SSE registers */
movdqu (%windowbestlen, %rdx), %xmm1
movdqu (%prev, %rdx), %xmm2
pcmpeqb %xmm2, %xmm1
movdqu 16(%windowbestlen, %rdx), %xmm3
movdqu 16(%prev, %rdx), %xmm4
pcmpeqb %xmm4, %xmm3
movdqu 32(%windowbestlen, %rdx), %xmm5
movdqu 32(%prev, %rdx), %xmm6
pcmpeqb %xmm6, %xmm5
movdqu 48(%windowbestlen, %rdx), %xmm7
movdqu 48(%prev, %rdx), %xmm8
pcmpeqb %xmm8, %xmm7
/* Check the comparisions' results */
pmovmskb %xmm1, %rax
notw %ax
bsfw %ax, %ax
jnz LeaveLoopCmps
/* this is the only iteration of the loop with a possibility of having
incremented rdx by 0x108 (each loop iteration add 16*4 = 0x40
and (0x40*4)+8=0x108 */
add $8, %rdx
jz LenMaximum
add $8, %rdx
pmovmskb %xmm3, %rax
notw %ax
bsfw %ax, %ax
jnz LeaveLoopCmps
add $16, %rdx
pmovmskb %xmm5, %rax
notw %ax
bsfw %ax, %ax
jnz LeaveLoopCmps
add $16, %rdx
pmovmskb %xmm7, %rax
notw %ax
bsfw %ax, %ax
jnz LeaveLoopCmps
add $16, %rdx
jmp LoopCmps
LeaveLoopCmps: add %rax, %rdx
#else
mov (%windowbestlen, %rdx), %rax
xor (%prev, %rdx), %rax
jnz LeaveLoopCmps
mov 8(%windowbestlen, %rdx), %rax
xor 8(%prev, %rdx), %rax
jnz LeaveLoopCmps8
mov 16(%windowbestlen, %rdx), %rax
xor 16(%prev, %rdx), %rax
jnz LeaveLoopCmps16
add $24, %rdx
jnz LoopCmps
jmp LenMaximum
# if 0
/*
* This three-liner is tantalizingly simple, but bsf is a slow instruction,
* and the complicated alternative down below is quite a bit faster. Sad...
*/
LeaveLoopCmps: bsf %rax, %rax /* find the first non-zero bit */
shrl $3, %eax /* divide by 8 to get the byte */
add %rax, %rdx
# else
LeaveLoopCmps16:
add $8, %rdx
LeaveLoopCmps8:
add $8, %rdx
LeaveLoopCmps: testl $0xFFFFFFFF, %eax /* Check the first 4 bytes */
jnz Check16
add $4, %rdx
shr $32, %rax
Check16: testw $0xFFFF, %ax
jnz LenLower
add $2, %rdx
shrl $16, %eax
LenLower: subb $1, %al
adc $0, %rdx
# endif
#endif
/* Calculate the length of the match. If it is longer than MAX_MATCH, */
/* then automatically accept it as the best possible match and leave. */
lea (%prev, %rdx), %rax
sub %scan, %rax
cmpl $MAX_MATCH, %eax
jge LenMaximum
/* If the length of the match is not longer than the best match we */
/* have so far, then forget it and return to the lookup loop. */
cmpl %bestlend, %eax
jg LongerMatch
mov _windowbestlen, %windowbestlen
mov dsPrev, %prev
movl _chainlenwmask, %edx
jmp LookupLoop
/* s->match_start = cur_match; */
/* best_len = len; */
/* if (len >= nice_match) break; */
/* scan_end = *(ushf*)(scan+best_len-1); */
LongerMatch:
movl %eax, %bestlend
movl %curmatchd, dsMatchStart
cmpl %nicematch, %eax
jge LeaveNow
lea (%window, %bestlen), %windowbestlen
mov %windowbestlen, _windowbestlen
movzwl -1(%scan, %rax), %scanend
mov dsPrev, %prev
movl _chainlenwmask, %chainlenwmask
jmp LookupLoop
/* Accept the current string, with the maximum possible length. */
LenMaximum:
movl $MAX_MATCH, %bestlend
movl %curmatchd, dsMatchStart
/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
/* return s->lookahead; */
LeaveNow:
movl dsLookahead, %eax
cmpl %eax, %bestlend
cmovngl %bestlend, %eax
LookaheadRet:
/* Restore the registers and return from whence we came. */
mov save_rsi, %rsi
mov save_rbx, %rbx
mov save_r12, %r12
mov save_r13, %r13
mov save_r14, %r14
mov save_r15, %r15
ret
match_init: ret
+51
View File
@@ -0,0 +1,51 @@
This is a patched version of zlib, modified to use
Pentium-Pro-optimized assembly code in the deflation algorithm. The
files changed/added by this patch are:
README.686
match.S
The speedup that this patch provides varies, depending on whether the
compiler used to build the original version of zlib falls afoul of the
PPro's speed traps. My own tests show a speedup of around 10-20% at
the default compression level, and 20-30% using -9, against a version
compiled using gcc 2.7.2.3. Your mileage may vary.
Note that this code has been tailored for the PPro/PII in particular,
and will not perform particuarly well on a Pentium.
If you are using an assembler other than GNU as, you will have to
translate match.S to use your assembler's syntax. (Have fun.)
Brian Raiter
breadbox@muppetlabs.com
April, 1998
Added for zlib 1.1.3:
The patches come from
http://www.muppetlabs.com/~breadbox/software/assembly.html
To compile zlib with this asm file, copy match.S to the zlib directory
then do:
CFLAGS="-O3 -DASMV" ./configure
make OBJA=match.o
Update:
I've been ignoring these assembly routines for years, believing that
gcc's generated code had caught up with it sometime around gcc 2.95
and the major rearchitecting of the Pentium 4. However, I recently
learned that, despite what I believed, this code still has some life
in it. On the Pentium 4 and AMD64 chips, it continues to run about 8%
faster than the code produced by gcc 4.1.
In acknowledgement of its continuing usefulness, I've altered the
license to match that of the rest of zlib. Share and Enjoy!
Brian Raiter
breadbox@muppetlabs.com
April, 2007
+357
View File
@@ -0,0 +1,357 @@
/* match.S -- x86 assembly version of the zlib longest_match() function.
* Optimized for the Intel 686 chips (PPro and later).
*
* Copyright (C) 1998, 2007 Brian Raiter <breadbox@muppetlabs.com>
*
* This software is provided 'as-is', without any express or implied
* warranty. In no event will the author be held liable for any damages
* arising from the use of this software.
*
* Permission is granted to anyone to use this software for any purpose,
* including commercial applications, and to alter it and redistribute it
* freely, subject to the following restrictions:
*
* 1. The origin of this software must not be misrepresented; you must not
* claim that you wrote the original software. If you use this software
* in a product, an acknowledgment in the product documentation would be
* appreciated but is not required.
* 2. Altered source versions must be plainly marked as such, and must not be
* misrepresented as being the original software.
* 3. This notice may not be removed or altered from any source distribution.
*/
#ifndef NO_UNDERLINE
#define match_init _match_init
#define longest_match _longest_match
#endif
#define MAX_MATCH (258)
#define MIN_MATCH (3)
#define MIN_LOOKAHEAD (MAX_MATCH + MIN_MATCH + 1)
#define MAX_MATCH_8 ((MAX_MATCH + 7) & ~7)
/* stack frame offsets */
#define chainlenwmask 0 /* high word: current chain len */
/* low word: s->wmask */
#define window 4 /* local copy of s->window */
#define windowbestlen 8 /* s->window + bestlen */
#define scanstart 16 /* first two bytes of string */
#define scanend 12 /* last two bytes of string */
#define scanalign 20 /* dword-misalignment of string */
#define nicematch 24 /* a good enough match size */
#define bestlen 28 /* size of best match so far */
#define scan 32 /* ptr to string wanting match */
#define LocalVarsSize (36)
/* saved ebx 36 */
/* saved edi 40 */
/* saved esi 44 */
/* saved ebp 48 */
/* return address 52 */
#define deflatestate 56 /* the function arguments */
#define curmatch 60
/* All the +zlib1222add offsets are due to the addition of fields
* in zlib in the deflate_state structure since the asm code was first written
* (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
* (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
* if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
*/
#define zlib1222add (8)
#define dsWSize (36+zlib1222add)
#define dsWMask (44+zlib1222add)
#define dsWindow (48+zlib1222add)
#define dsPrev (56+zlib1222add)
#define dsMatchLen (88+zlib1222add)
#define dsPrevMatch (92+zlib1222add)
#define dsStrStart (100+zlib1222add)
#define dsMatchStart (104+zlib1222add)
#define dsLookahead (108+zlib1222add)
#define dsPrevLen (112+zlib1222add)
#define dsMaxChainLen (116+zlib1222add)
#define dsGoodMatch (132+zlib1222add)
#define dsNiceMatch (136+zlib1222add)
.file "match.S"
.globl match_init, longest_match
.text
/* uInt longest_match(deflate_state *deflatestate, IPos curmatch) */
.cfi_sections .debug_frame
longest_match:
.cfi_startproc
/* Save registers that the compiler may be using, and adjust %esp to */
/* make room for our stack frame. */
pushl %ebp
.cfi_def_cfa_offset 8
.cfi_offset ebp, -8
pushl %edi
.cfi_def_cfa_offset 12
pushl %esi
.cfi_def_cfa_offset 16
pushl %ebx
.cfi_def_cfa_offset 20
subl $LocalVarsSize, %esp
.cfi_def_cfa_offset LocalVarsSize+20
/* Retrieve the function arguments. %ecx will hold cur_match */
/* throughout the entire function. %edx will hold the pointer to the */
/* deflate_state structure during the function's setup (before */
/* entering the main loop). */
movl deflatestate(%esp), %edx
movl curmatch(%esp), %ecx
/* uInt wmask = s->w_mask; */
/* unsigned chain_length = s->max_chain_length; */
/* if (s->prev_length >= s->good_match) { */
/* chain_length >>= 2; */
/* } */
movl dsPrevLen(%edx), %eax
movl dsGoodMatch(%edx), %ebx
cmpl %ebx, %eax
movl dsWMask(%edx), %eax
movl dsMaxChainLen(%edx), %ebx
jl LastMatchGood
shrl $2, %ebx
LastMatchGood:
/* chainlen is decremented once beforehand so that the function can */
/* use the sign flag instead of the zero flag for the exit test. */
/* It is then shifted into the high word, to make room for the wmask */
/* value, which it will always accompany. */
decl %ebx
shll $16, %ebx
orl %eax, %ebx
movl %ebx, chainlenwmask(%esp)
/* if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; */
movl dsNiceMatch(%edx), %eax
movl dsLookahead(%edx), %ebx
cmpl %eax, %ebx
jl LookaheadLess
movl %eax, %ebx
LookaheadLess: movl %ebx, nicematch(%esp)
/* register Bytef *scan = s->window + s->strstart; */
movl dsWindow(%edx), %esi
movl %esi, window(%esp)
movl dsStrStart(%edx), %ebp
lea (%esi,%ebp), %edi
movl %edi, scan(%esp)
/* Determine how many bytes the scan ptr is off from being */
/* dword-aligned. */
movl %edi, %eax
negl %eax
andl $3, %eax
movl %eax, scanalign(%esp)
/* IPos limit = s->strstart > (IPos)MAX_DIST(s) ? */
/* s->strstart - (IPos)MAX_DIST(s) : NIL; */
movl dsWSize(%edx), %eax
subl $MIN_LOOKAHEAD, %eax
subl %eax, %ebp
jg LimitPositive
xorl %ebp, %ebp
LimitPositive:
/* int best_len = s->prev_length; */
movl dsPrevLen(%edx), %eax
movl %eax, bestlen(%esp)
/* Store the sum of s->window + best_len in %esi locally, and in %esi. */
addl %eax, %esi
movl %esi, windowbestlen(%esp)
/* register ush scan_start = *(ushf*)scan; */
/* register ush scan_end = *(ushf*)(scan+best_len-1); */
/* Posf *prev = s->prev; */
movzwl (%edi), %ebx
movl %ebx, scanstart(%esp)
movzwl -1(%edi,%eax), %ebx
movl %ebx, scanend(%esp)
movl dsPrev(%edx), %edi
/* Jump into the main loop. */
movl chainlenwmask(%esp), %edx
jmp LoopEntry
.balign 16
/* do {
* match = s->window + cur_match;
* if (*(ushf*)(match+best_len-1) != scan_end ||
* *(ushf*)match != scan_start) continue;
* [...]
* } while ((cur_match = prev[cur_match & wmask]) > limit
* && --chain_length != 0);
*
* Here is the inner loop of the function. The function will spend the
* majority of its time in this loop, and majority of that time will
* be spent in the first ten instructions.
*
* Within this loop:
* %ebx = scanend
* %ecx = curmatch
* %edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
* %esi = windowbestlen - i.e., (window + bestlen)
* %edi = prev
* %ebp = limit
*/
LookupLoop:
andl %edx, %ecx
movzwl (%edi,%ecx,2), %ecx
cmpl %ebp, %ecx
jbe LeaveNow
subl $0x00010000, %edx
js LeaveNow
LoopEntry: movzwl -1(%esi,%ecx), %eax
cmpl %ebx, %eax
jnz LookupLoop
movl window(%esp), %eax
movzwl (%eax,%ecx), %eax
cmpl scanstart(%esp), %eax
jnz LookupLoop
/* Store the current value of chainlen. */
movl %edx, chainlenwmask(%esp)
/* Point %edi to the string under scrutiny, and %esi to the string we */
/* are hoping to match it up with. In actuality, %esi and %edi are */
/* both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and %edx is */
/* initialized to -(MAX_MATCH_8 - scanalign). */
movl window(%esp), %esi
movl scan(%esp), %edi
addl %ecx, %esi
movl scanalign(%esp), %eax
movl $(-MAX_MATCH_8), %edx
lea MAX_MATCH_8(%edi,%eax), %edi
lea MAX_MATCH_8(%esi,%eax), %esi
/* Test the strings for equality, 8 bytes at a time. At the end,
* adjust %edx so that it is offset to the exact byte that mismatched.
*
* We already know at this point that the first three bytes of the
* strings match each other, and they can be safely passed over before
* starting the compare loop. So what this code does is skip over 0-3
* bytes, as much as necessary in order to dword-align the %edi
* pointer. (%esi will still be misaligned three times out of four.)
*
* It should be confessed that this loop usually does not represent
* much of the total running time. Replacing it with a more
* straightforward "rep cmpsb" would not drastically degrade
* performance.
*/
LoopCmps:
movl (%esi,%edx), %eax
xorl (%edi,%edx), %eax
jnz LeaveLoopCmps
movl 4(%esi,%edx), %eax
xorl 4(%edi,%edx), %eax
jnz LeaveLoopCmps4
addl $8, %edx
jnz LoopCmps
jmp LenMaximum
LeaveLoopCmps4: addl $4, %edx
LeaveLoopCmps: testl $0x0000FFFF, %eax
jnz LenLower
addl $2, %edx
shrl $16, %eax
LenLower: subb $1, %al
adcl $0, %edx
/* Calculate the length of the match. If it is longer than MAX_MATCH, */
/* then automatically accept it as the best possible match and leave. */
lea (%edi,%edx), %eax
movl scan(%esp), %edi
subl %edi, %eax
cmpl $MAX_MATCH, %eax
jge LenMaximum
/* If the length of the match is not longer than the best match we */
/* have so far, then forget it and return to the lookup loop. */
movl deflatestate(%esp), %edx
movl bestlen(%esp), %ebx
cmpl %ebx, %eax
jg LongerMatch
movl windowbestlen(%esp), %esi
movl dsPrev(%edx), %edi
movl scanend(%esp), %ebx
movl chainlenwmask(%esp), %edx
jmp LookupLoop
/* s->match_start = cur_match; */
/* best_len = len; */
/* if (len >= nice_match) break; */
/* scan_end = *(ushf*)(scan+best_len-1); */
LongerMatch: movl nicematch(%esp), %ebx
movl %eax, bestlen(%esp)
movl %ecx, dsMatchStart(%edx)
cmpl %ebx, %eax
jge LeaveNow
movl window(%esp), %esi
addl %eax, %esi
movl %esi, windowbestlen(%esp)
movzwl -1(%edi,%eax), %ebx
movl dsPrev(%edx), %edi
movl %ebx, scanend(%esp)
movl chainlenwmask(%esp), %edx
jmp LookupLoop
/* Accept the current string, with the maximum possible length. */
LenMaximum: movl deflatestate(%esp), %edx
movl $MAX_MATCH, bestlen(%esp)
movl %ecx, dsMatchStart(%edx)
/* if ((uInt)best_len <= s->lookahead) return (uInt)best_len; */
/* return s->lookahead; */
LeaveNow:
movl deflatestate(%esp), %edx
movl bestlen(%esp), %ebx
movl dsLookahead(%edx), %eax
cmpl %eax, %ebx
jg LookaheadRet
movl %ebx, %eax
LookaheadRet:
/* Restore the stack and return from whence we came. */
addl $LocalVarsSize, %esp
.cfi_def_cfa_offset 20
popl %ebx
.cfi_def_cfa_offset 16
popl %esi
.cfi_def_cfa_offset 12
popl %edi
.cfi_def_cfa_offset 8
popl %ebp
.cfi_def_cfa_offset 4
.cfi_endproc
match_init: ret
+8
View File
@@ -0,0 +1,8 @@
blast: blast.c blast.h
cc -DTEST -o blast blast.c
test: blast
blast < test.pk | cmp - test.txt
clean:
rm -f blast blast.o
+4
View File
@@ -0,0 +1,4 @@
Read blast.h for purpose and usage.
Mark Adler
madler@alumni.caltech.edu
+466
View File
@@ -0,0 +1,466 @@
/* blast.c
* Copyright (C) 2003, 2012, 2013 Mark Adler
* For conditions of distribution and use, see copyright notice in blast.h
* version 1.3, 24 Aug 2013
*
* blast.c decompresses data compressed by the PKWare Compression Library.
* This function provides functionality similar to the explode() function of
* the PKWare library, hence the name "blast".
*
* This decompressor is based on the excellent format description provided by
* Ben Rudiak-Gould in comp.compression on August 13, 2001. Interestingly, the
* example Ben provided in the post is incorrect. The distance 110001 should
* instead be 111000. When corrected, the example byte stream becomes:
*
* 00 04 82 24 25 8f 80 7f
*
* which decompresses to "AIAIAIAIAIAIA" (without the quotes).
*/
/*
* Change history:
*
* 1.0 12 Feb 2003 - First version
* 1.1 16 Feb 2003 - Fixed distance check for > 4 GB uncompressed data
* 1.2 24 Oct 2012 - Add note about using binary mode in stdio
* - Fix comparisons of differently signed integers
* 1.3 24 Aug 2013 - Return unused input from blast()
* - Fix test code to correctly report unused input
* - Enable the provision of initial input to blast()
*/
#include <stddef.h> /* for NULL */
#include <setjmp.h> /* for setjmp(), longjmp(), and jmp_buf */
#include "blast.h" /* prototype for blast() */
#define local static /* for local function definitions */
#define MAXBITS 13 /* maximum code length */
#define MAXWIN 4096 /* maximum window size */
/* input and output state */
struct state {
/* input state */
blast_in infun; /* input function provided by user */
void *inhow; /* opaque information passed to infun() */
unsigned char *in; /* next input location */
unsigned left; /* available input at in */
int bitbuf; /* bit buffer */
int bitcnt; /* number of bits in bit buffer */
/* input limit error return state for bits() and decode() */
jmp_buf env;
/* output state */
blast_out outfun; /* output function provided by user */
void *outhow; /* opaque information passed to outfun() */
unsigned next; /* index of next write location in out[] */
int first; /* true to check distances (for first 4K) */
unsigned char out[MAXWIN]; /* output buffer and sliding window */
};
/*
* Return need bits from the input stream. This always leaves less than
* eight bits in the buffer. bits() works properly for need == 0.
*
* Format notes:
*
* - Bits are stored in bytes from the least significant bit to the most
* significant bit. Therefore bits are dropped from the bottom of the bit
* buffer, using shift right, and new bytes are appended to the top of the
* bit buffer, using shift left.
*/
local int bits(struct state *s, int need)
{
int val; /* bit accumulator */
/* load at least need bits into val */
val = s->bitbuf;
while (s->bitcnt < need) {
if (s->left == 0) {
s->left = s->infun(s->inhow, &(s->in));
if (s->left == 0) longjmp(s->env, 1); /* out of input */
}
val |= (int)(*(s->in)++) << s->bitcnt; /* load eight bits */
s->left--;
s->bitcnt += 8;
}
/* drop need bits and update buffer, always zero to seven bits left */
s->bitbuf = val >> need;
s->bitcnt -= need;
/* return need bits, zeroing the bits above that */
return val & ((1 << need) - 1);
}
/*
* Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of
* each length, which for a canonical code are stepped through in order.
* symbol[] are the symbol values in canonical order, where the number of
* entries is the sum of the counts in count[]. The decoding process can be
* seen in the function decode() below.
*/
struct huffman {
short *count; /* number of symbols of each length */
short *symbol; /* canonically ordered symbols */
};
/*
* Decode a code from the stream s using huffman table h. Return the symbol or
* a negative value if there is an error. If all of the lengths are zero, i.e.
* an empty code, or if the code is incomplete and an invalid code is received,
* then -9 is returned after reading MAXBITS bits.
*
* Format notes:
*
* - The codes as stored in the compressed data are bit-reversed relative to
* a simple integer ordering of codes of the same lengths. Hence below the
* bits are pulled from the compressed data one at a time and used to
* build the code value reversed from what is in the stream in order to
* permit simple integer comparisons for decoding.
*
* - The first code for the shortest length is all ones. Subsequent codes of
* the same length are simply integer decrements of the previous code. When
* moving up a length, a one bit is appended to the code. For a complete
* code, the last code of the longest length will be all zeros. To support
* this ordering, the bits pulled during decoding are inverted to apply the
* more "natural" ordering starting with all zeros and incrementing.
*/
local int decode(struct state *s, struct huffman *h)
{
int len; /* current number of bits in code */
int code; /* len bits being decoded */
int first; /* first code of length len */
int count; /* number of codes of length len */
int index; /* index of first code of length len in symbol table */
int bitbuf; /* bits from stream */
int left; /* bits left in next or left to process */
short *next; /* next number of codes */
bitbuf = s->bitbuf;
left = s->bitcnt;
code = first = index = 0;
len = 1;
next = h->count + 1;
while (1) {
while (left--) {
code |= (bitbuf & 1) ^ 1; /* invert code */
bitbuf >>= 1;
count = *next++;
if (code < first + count) { /* if length len, return symbol */
s->bitbuf = bitbuf;
s->bitcnt = (s->bitcnt - len) & 7;
return h->symbol[index + (code - first)];
}
index += count; /* else update for next length */
first += count;
first <<= 1;
code <<= 1;
len++;
}
left = (MAXBITS+1) - len;
if (left == 0) break;
if (s->left == 0) {
s->left = s->infun(s->inhow, &(s->in));
if (s->left == 0) longjmp(s->env, 1); /* out of input */
}
bitbuf = *(s->in)++;
s->left--;
if (left > 8) left = 8;
}
return -9; /* ran out of codes */
}
/*
* Given a list of repeated code lengths rep[0..n-1], where each byte is a
* count (high four bits + 1) and a code length (low four bits), generate the
* list of code lengths. This compaction reduces the size of the object code.
* Then given the list of code lengths length[0..n-1] representing a canonical
* Huffman code for n symbols, construct the tables required to decode those
* codes. Those tables are the number of codes of each length, and the symbols
* sorted by length, retaining their original order within each length. The
* return value is zero for a complete code set, negative for an over-
* subscribed code set, and positive for an incomplete code set. The tables
* can be used if the return value is zero or positive, but they cannot be used
* if the return value is negative. If the return value is zero, it is not
* possible for decode() using that table to return an error--any stream of
* enough bits will resolve to a symbol. If the return value is positive, then
* it is possible for decode() using that table to return an error for received
* codes past the end of the incomplete lengths.
*/
local int construct(struct huffman *h, const unsigned char *rep, int n)
{
int symbol; /* current symbol when stepping through length[] */
int len; /* current length when stepping through h->count[] */
int left; /* number of possible codes left of current length */
short offs[MAXBITS+1]; /* offsets in symbol table for each length */
short length[256]; /* code lengths */
/* convert compact repeat counts into symbol bit length list */
symbol = 0;
do {
len = *rep++;
left = (len >> 4) + 1;
len &= 15;
do {
length[symbol++] = len;
} while (--left);
} while (--n);
n = symbol;
/* count number of codes of each length */
for (len = 0; len <= MAXBITS; len++)
h->count[len] = 0;
for (symbol = 0; symbol < n; symbol++)
(h->count[length[symbol]])++; /* assumes lengths are within bounds */
if (h->count[0] == n) /* no codes! */
return 0; /* complete, but decode() will fail */
/* check for an over-subscribed or incomplete set of lengths */
left = 1; /* one possible code of zero length */
for (len = 1; len <= MAXBITS; len++) {
left <<= 1; /* one more bit, double codes left */
left -= h->count[len]; /* deduct count from possible codes */
if (left < 0) return left; /* over-subscribed--return negative */
} /* left > 0 means incomplete */
/* generate offsets into symbol table for each length for sorting */
offs[1] = 0;
for (len = 1; len < MAXBITS; len++)
offs[len + 1] = offs[len] + h->count[len];
/*
* put symbols in table sorted by length, by symbol order within each
* length
*/
for (symbol = 0; symbol < n; symbol++)
if (length[symbol] != 0)
h->symbol[offs[length[symbol]]++] = symbol;
/* return zero for complete set, positive for incomplete set */
return left;
}
/*
* Decode PKWare Compression Library stream.
*
* Format notes:
*
* - First byte is 0 if literals are uncoded or 1 if they are coded. Second
* byte is 4, 5, or 6 for the number of extra bits in the distance code.
* This is the base-2 logarithm of the dictionary size minus six.
*
* - Compressed data is a combination of literals and length/distance pairs
* terminated by an end code. Literals are either Huffman coded or
* uncoded bytes. A length/distance pair is a coded length followed by a
* coded distance to represent a string that occurs earlier in the
* uncompressed data that occurs again at the current location.
*
* - A bit preceding a literal or length/distance pair indicates which comes
* next, 0 for literals, 1 for length/distance.
*
* - If literals are uncoded, then the next eight bits are the literal, in the
* normal bit order in the stream, i.e. no bit-reversal is needed. Similarly,
* no bit reversal is needed for either the length extra bits or the distance
* extra bits.
*
* - Literal bytes are simply written to the output. A length/distance pair is
* an instruction to copy previously uncompressed bytes to the output. The
* copy is from distance bytes back in the output stream, copying for length
* bytes.
*
* - Distances pointing before the beginning of the output data are not
* permitted.
*
* - Overlapped copies, where the length is greater than the distance, are
* allowed and common. For example, a distance of one and a length of 518
* simply copies the last byte 518 times. A distance of four and a length of
* twelve copies the last four bytes three times. A simple forward copy
* ignoring whether the length is greater than the distance or not implements
* this correctly.
*/
local int decomp(struct state *s)
{
int lit; /* true if literals are coded */
int dict; /* log2(dictionary size) - 6 */
int symbol; /* decoded symbol, extra bits for distance */
int len; /* length for copy */
unsigned dist; /* distance for copy */
int copy; /* copy counter */
unsigned char *from, *to; /* copy pointers */
static int virgin = 1; /* build tables once */
static short litcnt[MAXBITS+1], litsym[256]; /* litcode memory */
static short lencnt[MAXBITS+1], lensym[16]; /* lencode memory */
static short distcnt[MAXBITS+1], distsym[64]; /* distcode memory */
static struct huffman litcode = {litcnt, litsym}; /* length code */
static struct huffman lencode = {lencnt, lensym}; /* length code */
static struct huffman distcode = {distcnt, distsym};/* distance code */
/* bit lengths of literal codes */
static const unsigned char litlen[] = {
11, 124, 8, 7, 28, 7, 188, 13, 76, 4, 10, 8, 12, 10, 12, 10, 8, 23, 8,
9, 7, 6, 7, 8, 7, 6, 55, 8, 23, 24, 12, 11, 7, 9, 11, 12, 6, 7, 22, 5,
7, 24, 6, 11, 9, 6, 7, 22, 7, 11, 38, 7, 9, 8, 25, 11, 8, 11, 9, 12,
8, 12, 5, 38, 5, 38, 5, 11, 7, 5, 6, 21, 6, 10, 53, 8, 7, 24, 10, 27,
44, 253, 253, 253, 252, 252, 252, 13, 12, 45, 12, 45, 12, 61, 12, 45,
44, 173};
/* bit lengths of length codes 0..15 */
static const unsigned char lenlen[] = {2, 35, 36, 53, 38, 23};
/* bit lengths of distance codes 0..63 */
static const unsigned char distlen[] = {2, 20, 53, 230, 247, 151, 248};
static const short base[16] = { /* base for length codes */
3, 2, 4, 5, 6, 7, 8, 9, 10, 12, 16, 24, 40, 72, 136, 264};
static const char extra[16] = { /* extra bits for length codes */
0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8};
/* set up decoding tables (once--might not be thread-safe) */
if (virgin) {
construct(&litcode, litlen, sizeof(litlen));
construct(&lencode, lenlen, sizeof(lenlen));
construct(&distcode, distlen, sizeof(distlen));
virgin = 0;
}
/* read header */
lit = bits(s, 8);
if (lit > 1) return -1;
dict = bits(s, 8);
if (dict < 4 || dict > 6) return -2;
/* decode literals and length/distance pairs */
do {
if (bits(s, 1)) {
/* get length */
symbol = decode(s, &lencode);
len = base[symbol] + bits(s, extra[symbol]);
if (len == 519) break; /* end code */
/* get distance */
symbol = len == 2 ? 2 : dict;
dist = decode(s, &distcode) << symbol;
dist += bits(s, symbol);
dist++;
if (s->first && dist > s->next)
return -3; /* distance too far back */
/* copy length bytes from distance bytes back */
do {
to = s->out + s->next;
from = to - dist;
copy = MAXWIN;
if (s->next < dist) {
from += copy;
copy = dist;
}
copy -= s->next;
if (copy > len) copy = len;
len -= copy;
s->next += copy;
do {
*to++ = *from++;
} while (--copy);
if (s->next == MAXWIN) {
if (s->outfun(s->outhow, s->out, s->next)) return 1;
s->next = 0;
s->first = 0;
}
} while (len != 0);
}
else {
/* get literal and write it */
symbol = lit ? decode(s, &litcode) : bits(s, 8);
s->out[s->next++] = symbol;
if (s->next == MAXWIN) {
if (s->outfun(s->outhow, s->out, s->next)) return 1;
s->next = 0;
s->first = 0;
}
}
} while (1);
return 0;
}
/* See comments in blast.h */
int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow,
unsigned *left, unsigned char **in)
{
struct state s; /* input/output state */
int err; /* return value */
/* initialize input state */
s.infun = infun;
s.inhow = inhow;
if (left != NULL && *left) {
s.left = *left;
s.in = *in;
}
else
s.left = 0;
s.bitbuf = 0;
s.bitcnt = 0;
/* initialize output state */
s.outfun = outfun;
s.outhow = outhow;
s.next = 0;
s.first = 1;
/* return if bits() or decode() tries to read past available input */
if (setjmp(s.env) != 0) /* if came back here via longjmp(), */
err = 2; /* then skip decomp(), return error */
else
err = decomp(&s); /* decompress */
/* return unused input */
if (left != NULL)
*left = s.left;
if (in != NULL)
*in = s.left ? s.in : NULL;
/* write any leftover output and update the error code if needed */
if (err != 1 && s.next && s.outfun(s.outhow, s.out, s.next) && err == 0)
err = 1;
return err;
}
#ifdef TEST
/* Example of how to use blast() */
#include <stdio.h>
#include <stdlib.h>
#define CHUNK 16384
local unsigned inf(void *how, unsigned char **buf)
{
static unsigned char hold[CHUNK];
*buf = hold;
return fread(hold, 1, CHUNK, (FILE *)how);
}
local int outf(void *how, unsigned char *buf, unsigned len)
{
return fwrite(buf, 1, len, (FILE *)how) != len;
}
/* Decompress a PKWare Compression Library stream from stdin to stdout */
int main(void)
{
int ret;
unsigned left;
/* decompress to stdout */
left = 0;
ret = blast(inf, stdin, outf, stdout, &left, NULL);
if (ret != 0)
fprintf(stderr, "blast error: %d\n", ret);
/* count any leftover bytes */
while (getchar() != EOF)
left++;
if (left)
fprintf(stderr, "blast warning: %u unused bytes of input\n", left);
/* return blast() error code */
return ret;
}
#endif
+83
View File
@@ -0,0 +1,83 @@
/* blast.h -- interface for blast.c
Copyright (C) 2003, 2012, 2013 Mark Adler
version 1.3, 24 Aug 2013
This software is provided 'as-is', without any express or implied
warranty. In no event will the author be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
Mark Adler madler@alumni.caltech.edu
*/
/*
* blast() decompresses the PKWare Data Compression Library (DCL) compressed
* format. It provides the same functionality as the explode() function in
* that library. (Note: PKWare overused the "implode" verb, and the format
* used by their library implode() function is completely different and
* incompatible with the implode compression method supported by PKZIP.)
*
* The binary mode for stdio functions should be used to assure that the
* compressed data is not corrupted when read or written. For example:
* fopen(..., "rb") and fopen(..., "wb").
*/
typedef unsigned (*blast_in)(void *how, unsigned char **buf);
typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len);
/* Definitions for input/output functions passed to blast(). See below for
* what the provided functions need to do.
*/
int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow,
unsigned *left, unsigned char **in);
/* Decompress input to output using the provided infun() and outfun() calls.
* On success, the return value of blast() is zero. If there is an error in
* the source data, i.e. it is not in the proper format, then a negative value
* is returned. If there is not enough input available or there is not enough
* output space, then a positive error is returned.
*
* The input function is invoked: len = infun(how, &buf), where buf is set by
* infun() to point to the input buffer, and infun() returns the number of
* available bytes there. If infun() returns zero, then blast() returns with
* an input error. (blast() only asks for input if it needs it.) inhow is for
* use by the application to pass an input descriptor to infun(), if desired.
*
* If left and in are not NULL and *left is not zero when blast() is called,
* then the *left bytes are *in are consumed for input before infun() is used.
*
* The output function is invoked: err = outfun(how, buf, len), where the bytes
* to be written are buf[0..len-1]. If err is not zero, then blast() returns
* with an output error. outfun() is always called with len <= 4096. outhow
* is for use by the application to pass an output descriptor to outfun(), if
* desired.
*
* If there is any unused input, *left is set to the number of bytes that were
* read and *in points to them. Otherwise *left is set to zero and *in is set
* to NULL. If left or in are NULL, then they are not set.
*
* The return codes are:
*
* 2: ran out of input before completing decompression
* 1: output error before completing decompression
* 0: successful decompression
* -1: literal flag not zero or one
* -2: dictionary size not in 4..6
* -3: distance is too far back
*
* At the bottom of blast.c is an example program that uses blast() that can be
* compiled to produce a command-line decompression filter by defining TEST.
*/
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
AIAIAIAIAIAIA
+557
View File
@@ -0,0 +1,557 @@
{*******************************************************}
{ }
{ Borland Delphi Supplemental Components }
{ ZLIB Data Compression Interface Unit }
{ }
{ Copyright (c) 1997,99 Borland Corporation }
{ }
{*******************************************************}
{ Updated for zlib 1.2.x by Cosmin Truta <cosmint@cs.ubbcluj.ro> }
unit ZLib;
interface
uses SysUtils, Classes;
type
TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl;
TFree = procedure (AppData, Block: Pointer); cdecl;
// Internal structure. Ignore.
TZStreamRec = packed record
next_in: PChar; // next input byte
avail_in: Integer; // number of bytes available at next_in
total_in: Longint; // total nb of input bytes read so far
next_out: PChar; // next output byte should be put here
avail_out: Integer; // remaining free space at next_out
total_out: Longint; // total nb of bytes output so far
msg: PChar; // last error message, NULL if no error
internal: Pointer; // not visible by applications
zalloc: TAlloc; // used to allocate the internal state
zfree: TFree; // used to free the internal state
AppData: Pointer; // private data object passed to zalloc and zfree
data_type: Integer; // best guess about the data type: ascii or binary
adler: Longint; // adler32 value of the uncompressed data
reserved: Longint; // reserved for future use
end;
// Abstract ancestor class
TCustomZlibStream = class(TStream)
private
FStrm: TStream;
FStrmPos: Integer;
FOnProgress: TNotifyEvent;
FZRec: TZStreamRec;
FBuffer: array [Word] of Char;
protected
procedure Progress(Sender: TObject); dynamic;
property OnProgress: TNotifyEvent read FOnProgress write FOnProgress;
constructor Create(Strm: TStream);
end;
{ TCompressionStream compresses data on the fly as data is written to it, and
stores the compressed data to another stream.
TCompressionStream is write-only and strictly sequential. Reading from the
stream will raise an exception. Using Seek to move the stream pointer
will raise an exception.
Output data is cached internally, written to the output stream only when
the internal output buffer is full. All pending output data is flushed
when the stream is destroyed.
The Position property returns the number of uncompressed bytes of
data that have been written to the stream so far.
CompressionRate returns the on-the-fly percentage by which the original
data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100
If raw data size = 100 and compressed data size = 25, the CompressionRate
is 75%
The OnProgress event is called each time the output buffer is filled and
written to the output stream. This is useful for updating a progress
indicator when you are writing a large chunk of data to the compression
stream in a single call.}
TCompressionLevel = (clNone, clFastest, clDefault, clMax);
TCompressionStream = class(TCustomZlibStream)
private
function GetCompressionRate: Single;
public
constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream);
destructor Destroy; override;
function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
property CompressionRate: Single read GetCompressionRate;
property OnProgress;
end;
{ TDecompressionStream decompresses data on the fly as data is read from it.
Compressed data comes from a separate source stream. TDecompressionStream
is read-only and unidirectional; you can seek forward in the stream, but not
backwards. The special case of setting the stream position to zero is
allowed. Seeking forward decompresses data until the requested position in
the uncompressed data has been reached. Seeking backwards, seeking relative
to the end of the stream, requesting the size of the stream, and writing to
the stream will raise an exception.
The Position property returns the number of bytes of uncompressed data that
have been read from the stream so far.
The OnProgress event is called each time the internal input buffer of
compressed data is exhausted and the next block is read from the input stream.
This is useful for updating a progress indicator when you are reading a
large chunk of data from the decompression stream in a single call.}
TDecompressionStream = class(TCustomZlibStream)
public
constructor Create(Source: TStream);
destructor Destroy; override;
function Read(var Buffer; Count: Longint): Longint; override;
function Write(const Buffer; Count: Longint): Longint; override;
function Seek(Offset: Longint; Origin: Word): Longint; override;
property OnProgress;
end;
{ CompressBuf compresses data, buffer to buffer, in one call.
In: InBuf = ptr to compressed data
InBytes = number of bytes in InBuf
Out: OutBuf = ptr to newly allocated buffer containing decompressed data
OutBytes = number of bytes in OutBuf }
procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
out OutBuf: Pointer; out OutBytes: Integer);
{ DecompressBuf decompresses data, buffer to buffer, in one call.
In: InBuf = ptr to compressed data
InBytes = number of bytes in InBuf
OutEstimate = zero, or est. size of the decompressed data
Out: OutBuf = ptr to newly allocated buffer containing decompressed data
OutBytes = number of bytes in OutBuf }
procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
{ DecompressToUserBuf decompresses data, buffer to buffer, in one call.
In: InBuf = ptr to compressed data
InBytes = number of bytes in InBuf
Out: OutBuf = ptr to user-allocated buffer to contain decompressed data
BufSize = number of bytes in OutBuf }
procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
const OutBuf: Pointer; BufSize: Integer);
const
zlib_version = '1.2.11';
type
EZlibError = class(Exception);
ECompressionError = class(EZlibError);
EDecompressionError = class(EZlibError);
implementation
uses ZLibConst;
const
Z_NO_FLUSH = 0;
Z_PARTIAL_FLUSH = 1;
Z_SYNC_FLUSH = 2;
Z_FULL_FLUSH = 3;
Z_FINISH = 4;
Z_OK = 0;
Z_STREAM_END = 1;
Z_NEED_DICT = 2;
Z_ERRNO = (-1);
Z_STREAM_ERROR = (-2);
Z_DATA_ERROR = (-3);
Z_MEM_ERROR = (-4);
Z_BUF_ERROR = (-5);
Z_VERSION_ERROR = (-6);
Z_NO_COMPRESSION = 0;
Z_BEST_SPEED = 1;
Z_BEST_COMPRESSION = 9;
Z_DEFAULT_COMPRESSION = (-1);
Z_FILTERED = 1;
Z_HUFFMAN_ONLY = 2;
Z_RLE = 3;
Z_DEFAULT_STRATEGY = 0;
Z_BINARY = 0;
Z_ASCII = 1;
Z_UNKNOWN = 2;
Z_DEFLATED = 8;
{$L adler32.obj}
{$L compress.obj}
{$L crc32.obj}
{$L deflate.obj}
{$L infback.obj}
{$L inffast.obj}
{$L inflate.obj}
{$L inftrees.obj}
{$L trees.obj}
{$L uncompr.obj}
{$L zutil.obj}
procedure adler32; external;
procedure compressBound; external;
procedure crc32; external;
procedure deflateInit2_; external;
procedure deflateParams; external;
function _malloc(Size: Integer): Pointer; cdecl;
begin
Result := AllocMem(Size);
end;
procedure _free(Block: Pointer); cdecl;
begin
FreeMem(Block);
end;
procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl;
begin
FillChar(P^, count, B);
end;
procedure _memcpy(dest, source: Pointer; count: Integer); cdecl;
begin
Move(source^, dest^, count);
end;
// deflate compresses data
function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar;
recsize: Integer): Integer; external;
function deflate(var strm: TZStreamRec; flush: Integer): Integer; external;
function deflateEnd(var strm: TZStreamRec): Integer; external;
// inflate decompresses data
function inflateInit_(var strm: TZStreamRec; version: PChar;
recsize: Integer): Integer; external;
function inflate(var strm: TZStreamRec; flush: Integer): Integer; external;
function inflateEnd(var strm: TZStreamRec): Integer; external;
function inflateReset(var strm: TZStreamRec): Integer; external;
function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl;
begin
// GetMem(Result, Items*Size);
Result := AllocMem(Items * Size);
end;
procedure zlibFreeMem(AppData, Block: Pointer); cdecl;
begin
FreeMem(Block);
end;
{function zlibCheck(code: Integer): Integer;
begin
Result := code;
if code < 0 then
raise EZlibError.Create('error'); //!!
end;}
function CCheck(code: Integer): Integer;
begin
Result := code;
if code < 0 then
raise ECompressionError.Create('error'); //!!
end;
function DCheck(code: Integer): Integer;
begin
Result := code;
if code < 0 then
raise EDecompressionError.Create('error'); //!!
end;
procedure CompressBuf(const InBuf: Pointer; InBytes: Integer;
out OutBuf: Pointer; out OutBytes: Integer);
var
strm: TZStreamRec;
P: Pointer;
begin
FillChar(strm, sizeof(strm), 0);
strm.zalloc := zlibAllocMem;
strm.zfree := zlibFreeMem;
OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255;
GetMem(OutBuf, OutBytes);
try
strm.next_in := InBuf;
strm.avail_in := InBytes;
strm.next_out := OutBuf;
strm.avail_out := OutBytes;
CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm)));
try
while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do
begin
P := OutBuf;
Inc(OutBytes, 256);
ReallocMem(OutBuf, OutBytes);
strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
strm.avail_out := 256;
end;
finally
CCheck(deflateEnd(strm));
end;
ReallocMem(OutBuf, strm.total_out);
OutBytes := strm.total_out;
except
FreeMem(OutBuf);
raise
end;
end;
procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer;
OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer);
var
strm: TZStreamRec;
P: Pointer;
BufInc: Integer;
begin
FillChar(strm, sizeof(strm), 0);
strm.zalloc := zlibAllocMem;
strm.zfree := zlibFreeMem;
BufInc := (InBytes + 255) and not 255;
if OutEstimate = 0 then
OutBytes := BufInc
else
OutBytes := OutEstimate;
GetMem(OutBuf, OutBytes);
try
strm.next_in := InBuf;
strm.avail_in := InBytes;
strm.next_out := OutBuf;
strm.avail_out := OutBytes;
DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
try
while DCheck(inflate(strm, Z_NO_FLUSH)) <> Z_STREAM_END do
begin
P := OutBuf;
Inc(OutBytes, BufInc);
ReallocMem(OutBuf, OutBytes);
strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P)));
strm.avail_out := BufInc;
end;
finally
DCheck(inflateEnd(strm));
end;
ReallocMem(OutBuf, strm.total_out);
OutBytes := strm.total_out;
except
FreeMem(OutBuf);
raise
end;
end;
procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer;
const OutBuf: Pointer; BufSize: Integer);
var
strm: TZStreamRec;
begin
FillChar(strm, sizeof(strm), 0);
strm.zalloc := zlibAllocMem;
strm.zfree := zlibFreeMem;
strm.next_in := InBuf;
strm.avail_in := InBytes;
strm.next_out := OutBuf;
strm.avail_out := BufSize;
DCheck(inflateInit_(strm, zlib_version, sizeof(strm)));
try
if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then
raise EZlibError.CreateRes(@sTargetBufferTooSmall);
finally
DCheck(inflateEnd(strm));
end;
end;
// TCustomZlibStream
constructor TCustomZLibStream.Create(Strm: TStream);
begin
inherited Create;
FStrm := Strm;
FStrmPos := Strm.Position;
FZRec.zalloc := zlibAllocMem;
FZRec.zfree := zlibFreeMem;
end;
procedure TCustomZLibStream.Progress(Sender: TObject);
begin
if Assigned(FOnProgress) then FOnProgress(Sender);
end;
// TCompressionStream
constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel;
Dest: TStream);
const
Levels: array [TCompressionLevel] of ShortInt =
(Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION);
begin
inherited Create(Dest);
FZRec.next_out := FBuffer;
FZRec.avail_out := sizeof(FBuffer);
CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec)));
end;
destructor TCompressionStream.Destroy;
begin
FZRec.next_in := nil;
FZRec.avail_in := 0;
try
if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END)
and (FZRec.avail_out = 0) do
begin
FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
FZRec.next_out := FBuffer;
FZRec.avail_out := sizeof(FBuffer);
end;
if FZRec.avail_out < sizeof(FBuffer) then
FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out);
finally
deflateEnd(FZRec);
end;
inherited Destroy;
end;
function TCompressionStream.Read(var Buffer; Count: Longint): Longint;
begin
raise ECompressionError.CreateRes(@sInvalidStreamOp);
end;
function TCompressionStream.Write(const Buffer; Count: Longint): Longint;
begin
FZRec.next_in := @Buffer;
FZRec.avail_in := Count;
if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
while (FZRec.avail_in > 0) do
begin
CCheck(deflate(FZRec, 0));
if FZRec.avail_out = 0 then
begin
FStrm.WriteBuffer(FBuffer, sizeof(FBuffer));
FZRec.next_out := FBuffer;
FZRec.avail_out := sizeof(FBuffer);
FStrmPos := FStrm.Position;
Progress(Self);
end;
end;
Result := Count;
end;
function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
begin
if (Offset = 0) and (Origin = soFromCurrent) then
Result := FZRec.total_in
else
raise ECompressionError.CreateRes(@sInvalidStreamOp);
end;
function TCompressionStream.GetCompressionRate: Single;
begin
if FZRec.total_in = 0 then
Result := 0
else
Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0;
end;
// TDecompressionStream
constructor TDecompressionStream.Create(Source: TStream);
begin
inherited Create(Source);
FZRec.next_in := FBuffer;
FZRec.avail_in := 0;
DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec)));
end;
destructor TDecompressionStream.Destroy;
begin
FStrm.Seek(-FZRec.avail_in, 1);
inflateEnd(FZRec);
inherited Destroy;
end;
function TDecompressionStream.Read(var Buffer; Count: Longint): Longint;
begin
FZRec.next_out := @Buffer;
FZRec.avail_out := Count;
if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos;
while (FZRec.avail_out > 0) do
begin
if FZRec.avail_in = 0 then
begin
FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer));
if FZRec.avail_in = 0 then
begin
Result := Count - FZRec.avail_out;
Exit;
end;
FZRec.next_in := FBuffer;
FStrmPos := FStrm.Position;
Progress(Self);
end;
CCheck(inflate(FZRec, 0));
end;
Result := Count;
end;
function TDecompressionStream.Write(const Buffer; Count: Longint): Longint;
begin
raise EDecompressionError.CreateRes(@sInvalidStreamOp);
end;
function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint;
var
I: Integer;
Buf: array [0..4095] of Char;
begin
if (Offset = 0) and (Origin = soFromBeginning) then
begin
DCheck(inflateReset(FZRec));
FZRec.next_in := FBuffer;
FZRec.avail_in := 0;
FStrm.Position := 0;
FStrmPos := 0;
end
else if ( (Offset >= 0) and (Origin = soFromCurrent)) or
( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then
begin
if Origin = soFromBeginning then Dec(Offset, FZRec.total_out);
if Offset > 0 then
begin
for I := 1 to Offset div sizeof(Buf) do
ReadBuffer(Buf, sizeof(Buf));
ReadBuffer(Buf, Offset mod sizeof(Buf));
end;
end
else
raise EDecompressionError.CreateRes(@sInvalidStreamOp);
Result := FZRec.total_out;
end;
end.
+11
View File
@@ -0,0 +1,11 @@
unit ZLibConst;
interface
resourcestring
sTargetBufferTooSmall = 'ZLib error: target buffer may be too small';
sInvalidStreamOp = 'Invalid stream operation';
implementation
end.
+76
View File
@@ -0,0 +1,76 @@
Overview
========
This directory contains an update to the ZLib interface unit,
distributed by Borland as a Delphi supplemental component.
The original ZLib unit is Copyright (c) 1997,99 Borland Corp.,
and is based on zlib version 1.0.4. There are a series of bugs
and security problems associated with that old zlib version, and
we recommend the users to update their ZLib unit.
Summary of modifications
========================
- Improved makefile, adapted to zlib version 1.2.1.
- Some field types from TZStreamRec are changed from Integer to
Longint, for consistency with the zlib.h header, and for 64-bit
readiness.
- The zlib_version constant is updated.
- The new Z_RLE strategy has its corresponding symbolic constant.
- The allocation and deallocation functions and function types
(TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl,
and _malloc and _free are added as C RTL stubs. As a result,
the original C sources of zlib can be compiled out of the box,
and linked to the ZLib unit.
Suggestions for improvements
============================
Currently, the ZLib unit provides only a limited wrapper around
the zlib library, and much of the original zlib functionality is
missing. Handling compressed file formats like ZIP/GZIP or PNG
cannot be implemented without having this functionality.
Applications that handle these formats are either using their own,
duplicated code, or not using the ZLib unit at all.
Here are a few suggestions:
- Checksum class wrappers around adler32() and crc32(), similar
to the Java classes that implement the java.util.zip.Checksum
interface.
- The ability to read and write raw deflate streams, without the
zlib stream header and trailer. Raw deflate streams are used
in the ZIP file format.
- The ability to read and write gzip streams, used in the GZIP
file format, and normally produced by the gzip program.
- The ability to select a different compression strategy, useful
to PNG and MNG image compression, and to multimedia compression
in general. Besides the compression level
TCompressionLevel = (clNone, clFastest, clDefault, clMax);
which, in fact, could have used the 'z' prefix and avoided
TColor-like symbols
TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax);
there could be a compression strategy
TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle);
- ZIP and GZIP stream handling via TStreams.
--
Cosmin Truta <cosmint@cs.ubbcluj.ro>
+99
View File
@@ -0,0 +1,99 @@
# Makefile for zlib
# For use with Delphi and C++ Builder under Win32
# Updated for zlib 1.2.x by Cosmin Truta
# ------------ Borland C++ ------------
# This project uses the Delphi (fastcall/register) calling convention:
LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl
CC = bcc32
LD = bcc32
AR = tlib
# do not use "-pr" in CFLAGS
CFLAGS = -a -d -k- -O2 $(LOC)
LDFLAGS =
# variables
ZLIB_LIB = zlib.lib
OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj
OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj
OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj
OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj
# targets
all: $(ZLIB_LIB) example.exe minigzip.exe
.c.obj:
$(CC) -c $(CFLAGS) $*.c
adler32.obj: adler32.c zlib.h zconf.h
compress.obj: compress.c zlib.h zconf.h
crc32.obj: crc32.c zlib.h zconf.h crc32.h
deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h
gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h
gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h
gzread.obj: gzread.c zlib.h zconf.h gzguts.h
gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h
infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
inffast.h inffixed.h
inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
inffast.h
inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \
inffast.h inffixed.h
inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h
trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h
uncompr.obj: uncompr.c zlib.h zconf.h
zutil.obj: zutil.c zutil.h zlib.h zconf.h
example.obj: test/example.c zlib.h zconf.h
minigzip.obj: test/minigzip.c zlib.h zconf.h
# For the sake of the old Borland make,
# the command line is cut to fit in the MS-DOS 128 byte limit:
$(ZLIB_LIB): $(OBJ1) $(OBJ2)
-del $(ZLIB_LIB)
$(AR) $(ZLIB_LIB) $(OBJP1)
$(AR) $(ZLIB_LIB) $(OBJP2)
# testing
test: example.exe minigzip.exe
example
echo hello world | minigzip | minigzip -d
example.exe: example.obj $(ZLIB_LIB)
$(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
minigzip.exe: minigzip.obj $(ZLIB_LIB)
$(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
# cleanup
clean:
-del *.obj
-del *.exe
-del *.lib
-del *.tds
-del zlib.bak
-del foo.gz
+33
View File
@@ -0,0 +1,33 @@
<?xml version="1.0" encoding="utf-8" ?>
<project name="DotZLib" default="build" basedir="./DotZLib">
<description>A .Net wrapper library around ZLib1.dll</description>
<property name="nunit.location" value="c:/program files/NUnit V2.1/bin" />
<property name="build.root" value="bin" />
<property name="debug" value="true" />
<property name="nunit" value="true" />
<property name="build.folder" value="${build.root}/debug/" if="${debug}" />
<property name="build.folder" value="${build.root}/release/" unless="${debug}" />
<target name="clean" description="Remove all generated files">
<delete dir="${build.root}" failonerror="false" />
</target>
<target name="build" description="compiles the source code">
<mkdir dir="${build.folder}" />
<csc target="library" output="${build.folder}DotZLib.dll" debug="${debug}">
<references basedir="${nunit.location}">
<includes if="${nunit}" name="nunit.framework.dll" />
</references>
<sources>
<includes name="*.cs" />
<excludes name="UnitTests.cs" unless="${nunit}" />
</sources>
<arg value="/d:nunit" if="${nunit}" />
</csc>
</target>
</project>
Binary file not shown.
+21
View File
@@ -0,0 +1,21 @@
Microsoft Visual Studio Solution File, Format Version 8.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotZLib", "DotZLib\DotZLib.csproj", "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"
ProjectSection(ProjectDependencies) = postProject
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfiguration) = preSolution
Debug = Debug
Release = Release
EndGlobalSection
GlobalSection(ProjectConfiguration) = postSolution
{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.ActiveCfg = Debug|.NET
{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Debug.Build.0 = Debug|.NET
{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.ActiveCfg = Release|.NET
{BB1EE0B1-1808-46CB-B786-949D91117FC5}.Release.Build.0 = Release|.NET
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EndGlobalSection
GlobalSection(ExtensibilityAddIns) = postSolution
EndGlobalSection
EndGlobal
@@ -0,0 +1,58 @@
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("DotZLib")]
[assembly: AssemblyDescription(".Net bindings for ZLib compression dll 1.2.x")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Henrik Ravn")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("(c) 2004 by Henrik Ravn")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.*")]
//
// In order to sign your assembly you must specify a key to use. Refer to the
// Microsoft .NET Framework documentation for more information on assembly signing.
//
// Use the attributes below to control which key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your machine. KeyFile refers to a file which contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed into the CSP and used.
// (*) In order to create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile should be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information on this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("")]
@@ -0,0 +1,202 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Runtime.InteropServices;
using System.Text;
namespace DotZLib
{
#region ChecksumGeneratorBase
/// <summary>
/// Implements the common functionality needed for all <see cref="ChecksumGenerator"/>s
/// </summary>
/// <example></example>
public abstract class ChecksumGeneratorBase : ChecksumGenerator
{
/// <summary>
/// The value of the current checksum
/// </summary>
protected uint _current;
/// <summary>
/// Initializes a new instance of the checksum generator base - the current checksum is
/// set to zero
/// </summary>
public ChecksumGeneratorBase()
{
_current = 0;
}
/// <summary>
/// Initializes a new instance of the checksum generator basewith a specified value
/// </summary>
/// <param name="initialValue">The value to set the current checksum to</param>
public ChecksumGeneratorBase(uint initialValue)
{
_current = initialValue;
}
/// <summary>
/// Resets the current checksum to zero
/// </summary>
public void Reset() { _current = 0; }
/// <summary>
/// Gets the current checksum value
/// </summary>
public uint Value { get { return _current; } }
/// <summary>
/// Updates the current checksum with part of an array of bytes
/// </summary>
/// <param name="data">The data to update the checksum with</param>
/// <param name="offset">Where in <c>data</c> to start updating</param>
/// <param name="count">The number of bytes from <c>data</c> to use</param>
/// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
/// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
/// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
/// <remarks>All the other <c>Update</c> methods are implmeneted in terms of this one.
/// This is therefore the only method a derived class has to implement</remarks>
public abstract void Update(byte[] data, int offset, int count);
/// <summary>
/// Updates the current checksum with an array of bytes.
/// </summary>
/// <param name="data">The data to update the checksum with</param>
public void Update(byte[] data)
{
Update(data, 0, data.Length);
}
/// <summary>
/// Updates the current checksum with the data from a string
/// </summary>
/// <param name="data">The string to update the checksum with</param>
/// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>
public void Update(string data)
{
Update(Encoding.UTF8.GetBytes(data));
}
/// <summary>
/// Updates the current checksum with the data from a string, using a specific encoding
/// </summary>
/// <param name="data">The string to update the checksum with</param>
/// <param name="encoding">The encoding to use</param>
public void Update(string data, Encoding encoding)
{
Update(encoding.GetBytes(data));
}
}
#endregion
#region CRC32
/// <summary>
/// Implements a CRC32 checksum generator
/// </summary>
public sealed class CRC32Checksum : ChecksumGeneratorBase
{
#region DLL imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern uint crc32(uint crc, int data, uint length);
#endregion
/// <summary>
/// Initializes a new instance of the CRC32 checksum generator
/// </summary>
public CRC32Checksum() : base() {}
/// <summary>
/// Initializes a new instance of the CRC32 checksum generator with a specified value
/// </summary>
/// <param name="initialValue">The value to set the current checksum to</param>
public CRC32Checksum(uint initialValue) : base(initialValue) {}
/// <summary>
/// Updates the current checksum with part of an array of bytes
/// </summary>
/// <param name="data">The data to update the checksum with</param>
/// <param name="offset">Where in <c>data</c> to start updating</param>
/// <param name="count">The number of bytes from <c>data</c> to use</param>
/// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
/// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
/// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
public override void Update(byte[] data, int offset, int count)
{
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > data.Length) throw new ArgumentException();
GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);
try
{
_current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);
}
finally
{
hData.Free();
}
}
}
#endregion
#region Adler
/// <summary>
/// Implements a checksum generator that computes the Adler checksum on data
/// </summary>
public sealed class AdlerChecksum : ChecksumGeneratorBase
{
#region DLL imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern uint adler32(uint adler, int data, uint length);
#endregion
/// <summary>
/// Initializes a new instance of the Adler checksum generator
/// </summary>
public AdlerChecksum() : base() {}
/// <summary>
/// Initializes a new instance of the Adler checksum generator with a specified value
/// </summary>
/// <param name="initialValue">The value to set the current checksum to</param>
public AdlerChecksum(uint initialValue) : base(initialValue) {}
/// <summary>
/// Updates the current checksum with part of an array of bytes
/// </summary>
/// <param name="data">The data to update the checksum with</param>
/// <param name="offset">Where in <c>data</c> to start updating</param>
/// <param name="count">The number of bytes from <c>data</c> to use</param>
/// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
/// <exception cref="NullReferenceException"><c>data</c> is a null reference</exception>
/// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
public override void Update(byte[] data, int offset, int count)
{
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > data.Length) throw new ArgumentException();
GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned);
try
{
_current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count);
}
finally
{
hData.Free();
}
}
}
#endregion
}
@@ -0,0 +1,83 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Diagnostics;
namespace DotZLib
{
/// <summary>
/// This class implements a circular buffer
/// </summary>
internal class CircularBuffer
{
#region Private data
private int _capacity;
private int _head;
private int _tail;
private int _size;
private byte[] _buffer;
#endregion
public CircularBuffer(int capacity)
{
Debug.Assert( capacity > 0 );
_buffer = new byte[capacity];
_capacity = capacity;
_head = 0;
_tail = 0;
_size = 0;
}
public int Size { get { return _size; } }
public int Put(byte[] source, int offset, int count)
{
Debug.Assert( count > 0 );
int trueCount = Math.Min(count, _capacity - Size);
for (int i = 0; i < trueCount; ++i)
_buffer[(_tail+i) % _capacity] = source[offset+i];
_tail += trueCount;
_tail %= _capacity;
_size += trueCount;
return trueCount;
}
public bool Put(byte b)
{
if (Size == _capacity) // no room
return false;
_buffer[_tail++] = b;
_tail %= _capacity;
++_size;
return true;
}
public int Get(byte[] destination, int offset, int count)
{
int trueCount = Math.Min(count,Size);
for (int i = 0; i < trueCount; ++i)
destination[offset + i] = _buffer[(_head+i) % _capacity];
_head += trueCount;
_head %= _capacity;
_size -= trueCount;
return trueCount;
}
public int Get()
{
if (Size == 0)
return -1;
int result = (int)_buffer[_head++ % _capacity];
--_size;
return result;
}
}
}
@@ -0,0 +1,198 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Runtime.InteropServices;
namespace DotZLib
{
/// <summary>
/// Implements the common functionality needed for all <see cref="Codec"/>s
/// </summary>
public abstract class CodecBase : Codec, IDisposable
{
#region Data members
/// <summary>
/// Instance of the internal zlib buffer structure that is
/// passed to all functions in the zlib dll
/// </summary>
internal ZStream _ztream = new ZStream();
/// <summary>
/// True if the object instance has been disposed, false otherwise
/// </summary>
protected bool _isDisposed = false;
/// <summary>
/// The size of the internal buffers
/// </summary>
protected const int kBufferSize = 16384;
private byte[] _outBuffer = new byte[kBufferSize];
private byte[] _inBuffer = new byte[kBufferSize];
private GCHandle _hInput;
private GCHandle _hOutput;
private uint _checksum = 0;
#endregion
/// <summary>
/// Initializes a new instance of the <c>CodeBase</c> class.
/// </summary>
public CodecBase()
{
try
{
_hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned);
_hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned);
}
catch (Exception)
{
CleanUp(false);
throw;
}
}
#region Codec Members
/// <summary>
/// Occurs when more processed data are available.
/// </summary>
public event DataAvailableHandler DataAvailable;
/// <summary>
/// Fires the <see cref="DataAvailable"/> event
/// </summary>
protected void OnDataAvailable()
{
if (_ztream.total_out > 0)
{
if (DataAvailable != null)
DataAvailable( _outBuffer, 0, (int)_ztream.total_out);
resetOutput();
}
}
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
public void Add(byte[] data)
{
Add(data,0,data.Length);
}
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <param name="offset">The index of the first byte to add from <c>data</c></param>
/// <param name="count">The number of bytes to add</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
/// <remarks>This must be implemented by a derived class</remarks>
public abstract void Add(byte[] data, int offset, int count);
/// <summary>
/// Finishes up any pending data that needs to be processed and handled.
/// </summary>
/// <remarks>This must be implemented by a derived class</remarks>
public abstract void Finish();
/// <summary>
/// Gets the checksum of the data that has been added so far
/// </summary>
public uint Checksum { get { return _checksum; } }
#endregion
#region Destructor & IDisposable stuff
/// <summary>
/// Destroys this instance
/// </summary>
~CodecBase()
{
CleanUp(false);
}
/// <summary>
/// Releases any unmanaged resources and calls the <see cref="CleanUp()"/> method of the derived class
/// </summary>
public void Dispose()
{
CleanUp(true);
}
/// <summary>
/// Performs any codec specific cleanup
/// </summary>
/// <remarks>This must be implemented by a derived class</remarks>
protected abstract void CleanUp();
// performs the release of the handles and calls the dereived CleanUp()
private void CleanUp(bool isDisposing)
{
if (!_isDisposed)
{
CleanUp();
if (_hInput.IsAllocated)
_hInput.Free();
if (_hOutput.IsAllocated)
_hOutput.Free();
_isDisposed = true;
}
}
#endregion
#region Helper methods
/// <summary>
/// Copies a number of bytes to the internal codec buffer - ready for proccesing
/// </summary>
/// <param name="data">The byte array that contains the data to copy</param>
/// <param name="startIndex">The index of the first byte to copy</param>
/// <param name="count">The number of bytes to copy from <c>data</c></param>
protected void copyInput(byte[] data, int startIndex, int count)
{
Array.Copy(data, startIndex, _inBuffer,0, count);
_ztream.next_in = _hInput.AddrOfPinnedObject();
_ztream.total_in = 0;
_ztream.avail_in = (uint)count;
}
/// <summary>
/// Resets the internal output buffers to a known state - ready for processing
/// </summary>
protected void resetOutput()
{
_ztream.total_out = 0;
_ztream.avail_out = kBufferSize;
_ztream.next_out = _hOutput.AddrOfPinnedObject();
}
/// <summary>
/// Updates the running checksum property
/// </summary>
/// <param name="newSum">The new checksum value</param>
protected void setChecksum(uint newSum)
{
_checksum = newSum;
}
#endregion
}
}
@@ -0,0 +1,106 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace DotZLib
{
/// <summary>
/// Implements a data compressor, using the deflate algorithm in the ZLib dll
/// </summary>
public sealed class Deflater : CodecBase
{
#region Dll imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int deflate(ref ZStream sz, int flush);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int deflateReset(ref ZStream sz);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int deflateEnd(ref ZStream sz);
#endregion
/// <summary>
/// Constructs an new instance of the <c>Deflater</c>
/// </summary>
/// <param name="level">The compression level to use for this <c>Deflater</c></param>
public Deflater(CompressLevel level) : base()
{
int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream));
if (retval != 0)
throw new ZLibException(retval, "Could not initialize deflater");
resetOutput();
}
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <param name="offset">The index of the first byte to add from <c>data</c></param>
/// <param name="count">The number of bytes to add</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
public override void Add(byte[] data, int offset, int count)
{
if (data == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > data.Length) throw new ArgumentException();
int total = count;
int inputIndex = offset;
int err = 0;
while (err >= 0 && inputIndex < total)
{
copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));
while (err >= 0 && _ztream.avail_in > 0)
{
err = deflate(ref _ztream, (int)FlushTypes.None);
if (err == 0)
while (_ztream.avail_out == 0)
{
OnDataAvailable();
err = deflate(ref _ztream, (int)FlushTypes.None);
}
inputIndex += (int)_ztream.total_in;
}
}
setChecksum( _ztream.adler );
}
/// <summary>
/// Finishes up any pending data that needs to be processed and handled.
/// </summary>
public override void Finish()
{
int err;
do
{
err = deflate(ref _ztream, (int)FlushTypes.Finish);
OnDataAvailable();
}
while (err == 0);
setChecksum( _ztream.adler );
deflateReset(ref _ztream);
resetOutput();
}
/// <summary>
/// Closes the internal zlib deflate stream
/// </summary>
protected override void CleanUp() { deflateEnd(ref _ztream); }
}
}
@@ -0,0 +1,288 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Text;
namespace DotZLib
{
#region Internal types
/// <summary>
/// Defines constants for the various flush types used with zlib
/// </summary>
internal enum FlushTypes
{
None, Partial, Sync, Full, Finish, Block
}
#region ZStream structure
// internal mapping of the zlib zstream structure for marshalling
[StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)]
internal struct ZStream
{
public IntPtr next_in;
public uint avail_in;
public uint total_in;
public IntPtr next_out;
public uint avail_out;
public uint total_out;
[MarshalAs(UnmanagedType.LPStr)]
string msg;
uint state;
uint zalloc;
uint zfree;
uint opaque;
int data_type;
public uint adler;
uint reserved;
}
#endregion
#endregion
#region Public enums
/// <summary>
/// Defines constants for the available compression levels in zlib
/// </summary>
public enum CompressLevel : int
{
/// <summary>
/// The default compression level with a reasonable compromise between compression and speed
/// </summary>
Default = -1,
/// <summary>
/// No compression at all. The data are passed straight through.
/// </summary>
None = 0,
/// <summary>
/// The maximum compression rate available.
/// </summary>
Best = 9,
/// <summary>
/// The fastest available compression level.
/// </summary>
Fastest = 1
}
#endregion
#region Exception classes
/// <summary>
/// The exception that is thrown when an error occurs on the zlib dll
/// </summary>
public class ZLibException : ApplicationException
{
/// <summary>
/// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
/// error message and error code
/// </summary>
/// <param name="errorCode">The zlib error code that caused the exception</param>
/// <param name="msg">A message that (hopefully) describes the error</param>
public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg))
{
}
/// <summary>
/// Initializes a new instance of the <see cref="ZLibException"/> class with a specified
/// error code
/// </summary>
/// <param name="errorCode">The zlib error code that caused the exception</param>
public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode))
{
}
}
#endregion
#region Interfaces
/// <summary>
/// Declares methods and properties that enables a running checksum to be calculated
/// </summary>
public interface ChecksumGenerator
{
/// <summary>
/// Gets the current value of the checksum
/// </summary>
uint Value { get; }
/// <summary>
/// Clears the current checksum to 0
/// </summary>
void Reset();
/// <summary>
/// Updates the current checksum with an array of bytes
/// </summary>
/// <param name="data">The data to update the checksum with</param>
void Update(byte[] data);
/// <summary>
/// Updates the current checksum with part of an array of bytes
/// </summary>
/// <param name="data">The data to update the checksum with</param>
/// <param name="offset">Where in <c>data</c> to start updating</param>
/// <param name="count">The number of bytes from <c>data</c> to use</param>
/// <exception cref="ArgumentException">The sum of offset and count is larger than the length of <c>data</c></exception>
/// <exception cref="ArgumentNullException"><c>data</c> is a null reference</exception>
/// <exception cref="ArgumentOutOfRangeException">Offset or count is negative.</exception>
void Update(byte[] data, int offset, int count);
/// <summary>
/// Updates the current checksum with the data from a string
/// </summary>
/// <param name="data">The string to update the checksum with</param>
/// <remarks>The characters in the string are converted by the UTF-8 encoding</remarks>
void Update(string data);
/// <summary>
/// Updates the current checksum with the data from a string, using a specific encoding
/// </summary>
/// <param name="data">The string to update the checksum with</param>
/// <param name="encoding">The encoding to use</param>
void Update(string data, Encoding encoding);
}
/// <summary>
/// Represents the method that will be called from a codec when new data
/// are available.
/// </summary>
/// <paramref name="data">The byte array containing the processed data</paramref>
/// <paramref name="startIndex">The index of the first processed byte in <c>data</c></paramref>
/// <paramref name="count">The number of processed bytes available</paramref>
/// <remarks>On return from this method, the data may be overwritten, so grab it while you can.
/// You cannot assume that startIndex will be zero.
/// </remarks>
public delegate void DataAvailableHandler(byte[] data, int startIndex, int count);
/// <summary>
/// Declares methods and events for implementing compressors/decompressors
/// </summary>
public interface Codec
{
/// <summary>
/// Occurs when more processed data are available.
/// </summary>
event DataAvailableHandler DataAvailable;
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
void Add(byte[] data);
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <param name="offset">The index of the first byte to add from <c>data</c></param>
/// <param name="count">The number of bytes to add</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
void Add(byte[] data, int offset, int count);
/// <summary>
/// Finishes up any pending data that needs to be processed and handled.
/// </summary>
void Finish();
/// <summary>
/// Gets the checksum of the data that has been added so far
/// </summary>
uint Checksum { get; }
}
#endregion
#region Classes
/// <summary>
/// Encapsulates general information about the ZLib library
/// </summary>
public class Info
{
#region DLL imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern uint zlibCompileFlags();
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern string zlibVersion();
#endregion
#region Private stuff
private uint _flags;
// helper function that unpacks a bitsize mask
private static int bitSize(uint bits)
{
switch (bits)
{
case 0: return 16;
case 1: return 32;
case 2: return 64;
}
return -1;
}
#endregion
/// <summary>
/// Constructs an instance of the <c>Info</c> class.
/// </summary>
public Info()
{
_flags = zlibCompileFlags();
}
/// <summary>
/// True if the library is compiled with debug info
/// </summary>
public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } }
/// <summary>
/// True if the library is compiled with assembly optimizations
/// </summary>
public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } }
/// <summary>
/// Gets the size of the unsigned int that was compiled into Zlib
/// </summary>
public int SizeOfUInt { get { return bitSize(_flags & 3); } }
/// <summary>
/// Gets the size of the unsigned long that was compiled into Zlib
/// </summary>
public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } }
/// <summary>
/// Gets the size of the pointers that were compiled into Zlib
/// </summary>
public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } }
/// <summary>
/// Gets the size of the z_off_t type that was compiled into Zlib
/// </summary>
public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } }
/// <summary>
/// Gets the version of ZLib as a string, e.g. "1.2.1"
/// </summary>
public static string Version { get { return zlibVersion(); } }
}
#endregion
}
@@ -0,0 +1,141 @@
<VisualStudioProject>
<CSHARP
ProjectType = "Local"
ProductVersion = "7.10.3077"
SchemaVersion = "2.0"
ProjectGuid = "{BB1EE0B1-1808-46CB-B786-949D91117FC5}"
>
<Build>
<Settings
ApplicationIcon = ""
AssemblyKeyContainerName = ""
AssemblyName = "DotZLib"
AssemblyOriginatorKeyFile = ""
DefaultClientScript = "JScript"
DefaultHTMLPageLayout = "Grid"
DefaultTargetSchema = "IE50"
DelaySign = "false"
OutputType = "Library"
PreBuildEvent = ""
PostBuildEvent = ""
RootNamespace = "DotZLib"
RunPostBuildEvent = "OnBuildSuccess"
StartupObject = ""
>
<Config
Name = "Debug"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "DEBUG;TRACE"
DocumentationFile = "docs\DotZLib.xml"
DebugSymbols = "true"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = "1591"
Optimize = "false"
OutputPath = "bin\Debug\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
<Config
Name = "Release"
AllowUnsafeBlocks = "false"
BaseAddress = "285212672"
CheckForOverflowUnderflow = "false"
ConfigurationOverrideFile = ""
DefineConstants = "TRACE"
DocumentationFile = "docs\DotZLib.xml"
DebugSymbols = "false"
FileAlignment = "4096"
IncrementalBuild = "false"
NoStdLib = "false"
NoWarn = ""
Optimize = "true"
OutputPath = "bin\Release\"
RegisterForComInterop = "false"
RemoveIntegerChecks = "false"
TreatWarningsAsErrors = "false"
WarningLevel = "4"
/>
</Settings>
<References>
<Reference
Name = "System"
AssemblyName = "System"
HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.dll"
/>
<Reference
Name = "System.Data"
AssemblyName = "System.Data"
HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.Data.dll"
/>
<Reference
Name = "System.XML"
AssemblyName = "System.Xml"
HintPath = "C:\WINNT\Microsoft.NET\Framework\v1.1.4322\System.XML.dll"
/>
<Reference
Name = "nunit.framework"
AssemblyName = "nunit.framework"
HintPath = "E:\apps\NUnit V2.1\\bin\nunit.framework.dll"
AssemblyFolderKey = "hklm\dn\nunit.framework"
/>
</References>
</Build>
<Files>
<Include>
<File
RelPath = "AssemblyInfo.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "ChecksumImpl.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "CircularBuffer.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "CodecBase.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Deflater.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "DotZLib.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "GZipStream.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "Inflater.cs"
SubType = "Code"
BuildAction = "Compile"
/>
<File
RelPath = "UnitTests.cs"
SubType = "Code"
BuildAction = "Compile"
/>
</Include>
</Files>
</CSHARP>
</VisualStudioProject>
@@ -0,0 +1,301 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.IO;
using System.Runtime.InteropServices;
namespace DotZLib
{
/// <summary>
/// Implements a compressed <see cref="Stream"/>, in GZip (.gz) format.
/// </summary>
public class GZipStream : Stream, IDisposable
{
#region Dll Imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
private static extern IntPtr gzopen(string name, string mode);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int gzclose(IntPtr gzFile);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int gzwrite(IntPtr gzFile, int data, int length);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int gzread(IntPtr gzFile, int data, int length);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int gzgetc(IntPtr gzFile);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int gzputc(IntPtr gzFile, int c);
#endregion
#region Private data
private IntPtr _gzFile;
private bool _isDisposed = false;
private bool _isWriting;
#endregion
#region Constructors
/// <summary>
/// Creates a new file as a writeable GZipStream
/// </summary>
/// <param name="fileName">The name of the compressed file to create</param>
/// <param name="level">The compression level to use when adding data</param>
/// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>
public GZipStream(string fileName, CompressLevel level)
{
_isWriting = true;
_gzFile = gzopen(fileName, String.Format("wb{0}", (int)level));
if (_gzFile == IntPtr.Zero)
throw new ZLibException(-1, "Could not open " + fileName);
}
/// <summary>
/// Opens an existing file as a readable GZipStream
/// </summary>
/// <param name="fileName">The name of the file to open</param>
/// <exception cref="ZLibException">If an error occurred in the internal zlib function</exception>
public GZipStream(string fileName)
{
_isWriting = false;
_gzFile = gzopen(fileName, "rb");
if (_gzFile == IntPtr.Zero)
throw new ZLibException(-1, "Could not open " + fileName);
}
#endregion
#region Access properties
/// <summary>
/// Returns true of this stream can be read from, false otherwise
/// </summary>
public override bool CanRead
{
get
{
return !_isWriting;
}
}
/// <summary>
/// Returns false.
/// </summary>
public override bool CanSeek
{
get
{
return false;
}
}
/// <summary>
/// Returns true if this tsream is writeable, false otherwise
/// </summary>
public override bool CanWrite
{
get
{
return _isWriting;
}
}
#endregion
#region Destructor & IDispose stuff
/// <summary>
/// Destroys this instance
/// </summary>
~GZipStream()
{
cleanUp(false);
}
/// <summary>
/// Closes the external file handle
/// </summary>
public void Dispose()
{
cleanUp(true);
}
// Does the actual closing of the file handle.
private void cleanUp(bool isDisposing)
{
if (!_isDisposed)
{
gzclose(_gzFile);
_isDisposed = true;
}
}
#endregion
#region Basic reading and writing
/// <summary>
/// Attempts to read a number of bytes from the stream.
/// </summary>
/// <param name="buffer">The destination data buffer</param>
/// <param name="offset">The index of the first destination byte in <c>buffer</c></param>
/// <param name="count">The number of bytes requested</param>
/// <returns>The number of bytes read</returns>
/// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>
/// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>
/// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is &gt; buffer.Length</exception>
/// <exception cref="NotSupportedException">If this stream is not readable.</exception>
/// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
public override int Read(byte[] buffer, int offset, int count)
{
if (!CanRead) throw new NotSupportedException();
if (buffer == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > buffer.Length) throw new ArgumentException();
if (_isDisposed) throw new ObjectDisposedException("GZipStream");
GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);
int result;
try
{
result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);
if (result < 0)
throw new IOException();
}
finally
{
h.Free();
}
return result;
}
/// <summary>
/// Attempts to read a single byte from the stream.
/// </summary>
/// <returns>The byte that was read, or -1 in case of error or End-Of-File</returns>
public override int ReadByte()
{
if (!CanRead) throw new NotSupportedException();
if (_isDisposed) throw new ObjectDisposedException("GZipStream");
return gzgetc(_gzFile);
}
/// <summary>
/// Writes a number of bytes to the stream
/// </summary>
/// <param name="buffer"></param>
/// <param name="offset"></param>
/// <param name="count"></param>
/// <exception cref="ArgumentNullException">If <c>buffer</c> is null</exception>
/// <exception cref="ArgumentOutOfRangeException">If <c>count</c> or <c>offset</c> are negative</exception>
/// <exception cref="ArgumentException">If <c>offset</c> + <c>count</c> is &gt; buffer.Length</exception>
/// <exception cref="NotSupportedException">If this stream is not writeable.</exception>
/// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
public override void Write(byte[] buffer, int offset, int count)
{
if (!CanWrite) throw new NotSupportedException();
if (buffer == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > buffer.Length) throw new ArgumentException();
if (_isDisposed) throw new ObjectDisposedException("GZipStream");
GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned);
try
{
int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count);
if (result < 0)
throw new IOException();
}
finally
{
h.Free();
}
}
/// <summary>
/// Writes a single byte to the stream
/// </summary>
/// <param name="value">The byte to add to the stream.</param>
/// <exception cref="NotSupportedException">If this stream is not writeable.</exception>
/// <exception cref="ObjectDisposedException">If this stream has been disposed.</exception>
public override void WriteByte(byte value)
{
if (!CanWrite) throw new NotSupportedException();
if (_isDisposed) throw new ObjectDisposedException("GZipStream");
int result = gzputc(_gzFile, (int)value);
if (result < 0)
throw new IOException();
}
#endregion
#region Position & length stuff
/// <summary>
/// Not supported.
/// </summary>
/// <param name="value"></param>
/// <exception cref="NotSupportedException">Always thrown</exception>
public override void SetLength(long value)
{
throw new NotSupportedException();
}
/// <summary>
/// Not suppported.
/// </summary>
/// <param name="offset"></param>
/// <param name="origin"></param>
/// <returns></returns>
/// <exception cref="NotSupportedException">Always thrown</exception>
public override long Seek(long offset, SeekOrigin origin)
{
throw new NotSupportedException();
}
/// <summary>
/// Flushes the <c>GZipStream</c>.
/// </summary>
/// <remarks>In this implementation, this method does nothing. This is because excessive
/// flushing may degrade the achievable compression rates.</remarks>
public override void Flush()
{
// left empty on purpose
}
/// <summary>
/// Gets/sets the current position in the <c>GZipStream</c>. Not suppported.
/// </summary>
/// <remarks>In this implementation this property is not supported</remarks>
/// <exception cref="NotSupportedException">Always thrown</exception>
public override long Position
{
get
{
throw new NotSupportedException();
}
set
{
throw new NotSupportedException();
}
}
/// <summary>
/// Gets the size of the stream. Not suppported.
/// </summary>
/// <remarks>In this implementation this property is not supported</remarks>
/// <exception cref="NotSupportedException">Always thrown</exception>
public override long Length
{
get
{
throw new NotSupportedException();
}
}
#endregion
}
}
@@ -0,0 +1,105 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace DotZLib
{
/// <summary>
/// Implements a data decompressor, using the inflate algorithm in the ZLib dll
/// </summary>
public class Inflater : CodecBase
{
#region Dll imports
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)]
private static extern int inflateInit_(ref ZStream sz, string vs, int size);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int inflate(ref ZStream sz, int flush);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int inflateReset(ref ZStream sz);
[DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)]
private static extern int inflateEnd(ref ZStream sz);
#endregion
/// <summary>
/// Constructs an new instance of the <c>Inflater</c>
/// </summary>
public Inflater() : base()
{
int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream));
if (retval != 0)
throw new ZLibException(retval, "Could not initialize inflater");
resetOutput();
}
/// <summary>
/// Adds more data to the codec to be processed.
/// </summary>
/// <param name="data">Byte array containing the data to be added to the codec</param>
/// <param name="offset">The index of the first byte to add from <c>data</c></param>
/// <param name="count">The number of bytes to add</param>
/// <remarks>Adding data may, or may not, raise the <c>DataAvailable</c> event</remarks>
public override void Add(byte[] data, int offset, int count)
{
if (data == null) throw new ArgumentNullException();
if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException();
if ((offset+count) > data.Length) throw new ArgumentException();
int total = count;
int inputIndex = offset;
int err = 0;
while (err >= 0 && inputIndex < total)
{
copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize));
err = inflate(ref _ztream, (int)FlushTypes.None);
if (err == 0)
while (_ztream.avail_out == 0)
{
OnDataAvailable();
err = inflate(ref _ztream, (int)FlushTypes.None);
}
inputIndex += (int)_ztream.total_in;
}
setChecksum( _ztream.adler );
}
/// <summary>
/// Finishes up any pending data that needs to be processed and handled.
/// </summary>
public override void Finish()
{
int err;
do
{
err = inflate(ref _ztream, (int)FlushTypes.Finish);
OnDataAvailable();
}
while (err == 0);
setChecksum( _ztream.adler );
inflateReset(ref _ztream);
resetOutput();
}
/// <summary>
/// Closes the internal zlib inflate stream
/// </summary>
protected override void CleanUp() { inflateEnd(ref _ztream); }
}
}
@@ -0,0 +1,274 @@
//
// © Copyright Henrik Ravn 2004
//
// Use, modification and distribution are subject to the Boost Software License, Version 1.0.
// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//
using System;
using System.Collections;
using System.IO;
// uncomment the define below to include unit tests
//#define nunit
#if nunit
using NUnit.Framework;
// Unit tests for the DotZLib class library
// ----------------------------------------
//
// Use this with NUnit 2 from http://www.nunit.org
//
namespace DotZLibTests
{
using DotZLib;
// helper methods
internal class Utils
{
public static bool byteArrEqual( byte[] lhs, byte[] rhs )
{
if (lhs.Length != rhs.Length)
return false;
for (int i = lhs.Length-1; i >= 0; --i)
if (lhs[i] != rhs[i])
return false;
return true;
}
}
[TestFixture]
public class CircBufferTests
{
#region Circular buffer tests
[Test]
public void SinglePutGet()
{
CircularBuffer buf = new CircularBuffer(10);
Assert.AreEqual( 0, buf.Size );
Assert.AreEqual( -1, buf.Get() );
Assert.IsTrue(buf.Put( 1 ));
Assert.AreEqual( 1, buf.Size );
Assert.AreEqual( 1, buf.Get() );
Assert.AreEqual( 0, buf.Size );
Assert.AreEqual( -1, buf.Get() );
}
[Test]
public void BlockPutGet()
{
CircularBuffer buf = new CircularBuffer(10);
byte[] arr = {1,2,3,4,5,6,7,8,9,10};
Assert.AreEqual( 10, buf.Put(arr,0,10) );
Assert.AreEqual( 10, buf.Size );
Assert.IsFalse( buf.Put(11) );
Assert.AreEqual( 1, buf.Get() );
Assert.IsTrue( buf.Put(11) );
byte[] arr2 = (byte[])arr.Clone();
Assert.AreEqual( 9, buf.Get(arr2,1,9) );
Assert.IsTrue( Utils.byteArrEqual(arr,arr2) );
}
#endregion
}
[TestFixture]
public class ChecksumTests
{
#region CRC32 Tests
[Test]
public void CRC32_Null()
{
CRC32Checksum crc32 = new CRC32Checksum();
Assert.AreEqual( 0, crc32.Value );
crc32 = new CRC32Checksum(1);
Assert.AreEqual( 1, crc32.Value );
crc32 = new CRC32Checksum(556);
Assert.AreEqual( 556, crc32.Value );
}
[Test]
public void CRC32_Data()
{
CRC32Checksum crc32 = new CRC32Checksum();
byte[] data = { 1,2,3,4,5,6,7 };
crc32.Update(data);
Assert.AreEqual( 0x70e46888, crc32.Value );
crc32 = new CRC32Checksum();
crc32.Update("penguin");
Assert.AreEqual( 0x0e5c1a120, crc32.Value );
crc32 = new CRC32Checksum(1);
crc32.Update("penguin");
Assert.AreEqual(0x43b6aa94, crc32.Value);
}
#endregion
#region Adler tests
[Test]
public void Adler_Null()
{
AdlerChecksum adler = new AdlerChecksum();
Assert.AreEqual(0, adler.Value);
adler = new AdlerChecksum(1);
Assert.AreEqual( 1, adler.Value );
adler = new AdlerChecksum(556);
Assert.AreEqual( 556, adler.Value );
}
[Test]
public void Adler_Data()
{
AdlerChecksum adler = new AdlerChecksum(1);
byte[] data = { 1,2,3,4,5,6,7 };
adler.Update(data);
Assert.AreEqual( 0x5b001d, adler.Value );
adler = new AdlerChecksum();
adler.Update("penguin");
Assert.AreEqual(0x0bcf02f6, adler.Value );
adler = new AdlerChecksum(1);
adler.Update("penguin");
Assert.AreEqual(0x0bd602f7, adler.Value);
}
#endregion
}
[TestFixture]
public class InfoTests
{
#region Info tests
[Test]
public void Info_Version()
{
Info info = new Info();
Assert.AreEqual("1.2.11", Info.Version);
Assert.AreEqual(32, info.SizeOfUInt);
Assert.AreEqual(32, info.SizeOfULong);
Assert.AreEqual(32, info.SizeOfPointer);
Assert.AreEqual(32, info.SizeOfOffset);
}
#endregion
}
[TestFixture]
public class DeflateInflateTests
{
#region Deflate tests
[Test]
public void Deflate_Init()
{
using (Deflater def = new Deflater(CompressLevel.Default))
{
}
}
private ArrayList compressedData = new ArrayList();
private uint adler1;
private ArrayList uncompressedData = new ArrayList();
private uint adler2;
public void CDataAvail(byte[] data, int startIndex, int count)
{
for (int i = 0; i < count; ++i)
compressedData.Add(data[i+startIndex]);
}
[Test]
public void Deflate_Compress()
{
compressedData.Clear();
byte[] testData = new byte[35000];
for (int i = 0; i < testData.Length; ++i)
testData[i] = 5;
using (Deflater def = new Deflater((CompressLevel)5))
{
def.DataAvailable += new DataAvailableHandler(CDataAvail);
def.Add(testData);
def.Finish();
adler1 = def.Checksum;
}
}
#endregion
#region Inflate tests
[Test]
public void Inflate_Init()
{
using (Inflater inf = new Inflater())
{
}
}
private void DDataAvail(byte[] data, int startIndex, int count)
{
for (int i = 0; i < count; ++i)
uncompressedData.Add(data[i+startIndex]);
}
[Test]
public void Inflate_Expand()
{
uncompressedData.Clear();
using (Inflater inf = new Inflater())
{
inf.DataAvailable += new DataAvailableHandler(DDataAvail);
inf.Add((byte[])compressedData.ToArray(typeof(byte)));
inf.Finish();
adler2 = inf.Checksum;
}
Assert.AreEqual( adler1, adler2 );
}
#endregion
}
[TestFixture]
public class GZipStreamTests
{
#region GZipStream test
[Test]
public void GZipStream_WriteRead()
{
using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best))
{
BinaryWriter writer = new BinaryWriter(gzOut);
writer.Write("hi there");
writer.Write(Math.PI);
writer.Write(42);
}
using (GZipStream gzIn = new GZipStream("gzstream.gz"))
{
BinaryReader reader = new BinaryReader(gzIn);
string s = reader.ReadString();
Assert.AreEqual("hi there",s);
double d = reader.ReadDouble();
Assert.AreEqual(Math.PI, d);
int i = reader.ReadInt32();
Assert.AreEqual(42,i);
}
}
#endregion
}
}
#endif
@@ -0,0 +1,23 @@
Boost Software License - Version 1.0 - August 17th, 2003
Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:
The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.
+58
View File
@@ -0,0 +1,58 @@
This directory contains a .Net wrapper class library for the ZLib1.dll
The wrapper includes support for inflating/deflating memory buffers,
.Net streaming wrappers for the gz streams part of zlib, and wrappers
for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples.
Directory structure:
--------------------
LICENSE_1_0.txt - License file.
readme.txt - This file.
DotZLib.chm - Class library documentation
DotZLib.build - NAnt build file
DotZLib.sln - Microsoft Visual Studio 2003 solution file
DotZLib\*.cs - Source files for the class library
Unit tests:
-----------
The file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher.
To include unit tests in the build, define nunit before building.
Build instructions:
-------------------
1. Using Visual Studio.Net 2003:
Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll)
will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on
you are building the release or debug version of the library. Check
DotZLib/UnitTests.cs for instructions on how to include unit tests in the
build.
2. Using NAnt:
Open a command prompt with access to the build environment and run nant
in the same directory as the DotZLib.build file.
You can define 2 properties on the nant command-line to control the build:
debug={true|false} to toggle between release/debug builds (default=true).
nunit={true|false} to include or esclude unit tests (default=true).
Also the target clean will remove binaries.
Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release
or ./DotZLib/bin/debug, depending on whether you are building the release
or debug version of the library.
Examples:
nant -D:debug=false -D:nunit=false
will build a release mode version of the library without unit tests.
nant
will build a debug version of the library with unit tests
nant clean
will remove all previously built files.
---------------------------------
Copyright (c) Henrik Ravn 2004
Use, modification and distribution are subject to the Boost Software License, Version 1.0.
(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+574
View File
@@ -0,0 +1,574 @@
/*
;uInt longest_match_x64(
; deflate_state *s,
; IPos cur_match); // current match
; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64
; (AMD64 on Athlon 64, Opteron, Phenom
; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7)
; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode)
; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
;
; File written by Gilles Vollant, by converting to assembly the longest_match
; from Jean-loup Gailly in deflate.c of zLib and infoZip zip.
; and by taking inspiration on asm686 with masm, optimised assembly code
; from Brian Raiter, written 1998
;
; This software is provided 'as-is', without any express or implied
; warranty. In no event will the authors be held liable for any damages
; arising from the use of this software.
;
; Permission is granted to anyone to use this software for any purpose,
; including commercial applications, and to alter it and redistribute it
; freely, subject to the following restrictions:
;
; 1. The origin of this software must not be misrepresented; you must not
; claim that you wrote the original software. If you use this software
; in a product, an acknowledgment in the product documentation would be
; appreciated but is not required.
; 2. Altered source versions must be plainly marked as such, and must not be
; misrepresented as being the original software
; 3. This notice may not be removed or altered from any source distribution.
;
; http://www.zlib.net
; http://www.winimage.com/zLibDll
; http://www.muppetlabs.com/~breadbox/software/assembly.html
;
; to compile this file for zLib, I use option:
; gcc -c -arch x86_64 gvmat64.S
;uInt longest_match(s, cur_match)
; deflate_state *s;
; IPos cur_match; // current match /
;
; with XCode for Mac, I had strange error with some jump on intel syntax
; this is why BEFORE_JMP and AFTER_JMP are used
*/
#define BEFORE_JMP .att_syntax
#define AFTER_JMP .intel_syntax noprefix
#ifndef NO_UNDERLINE
# define match_init _match_init
# define longest_match _longest_match
#endif
.intel_syntax noprefix
.globl match_init, longest_match
.text
longest_match:
#define LocalVarsSize 96
/*
; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12
; free register : r14,r15
; register can be saved : rsp
*/
#define chainlenwmask (rsp + 8 - LocalVarsSize)
#define nicematch (rsp + 16 - LocalVarsSize)
#define save_rdi (rsp + 24 - LocalVarsSize)
#define save_rsi (rsp + 32 - LocalVarsSize)
#define save_rbx (rsp + 40 - LocalVarsSize)
#define save_rbp (rsp + 48 - LocalVarsSize)
#define save_r12 (rsp + 56 - LocalVarsSize)
#define save_r13 (rsp + 64 - LocalVarsSize)
#define save_r14 (rsp + 72 - LocalVarsSize)
#define save_r15 (rsp + 80 - LocalVarsSize)
/*
; all the +4 offsets are due to the addition of pending_buf_size (in zlib
; in the deflate_state structure since the asm code was first written
; (if you compile with zlib 1.0.4 or older, remove the +4).
; Note : these value are good with a 8 bytes boundary pack structure
*/
#define MAX_MATCH 258
#define MIN_MATCH 3
#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
/*
;;; Offsets for fields in the deflate_state structure. These numbers
;;; are calculated from the definition of deflate_state, with the
;;; assumption that the compiler will dword-align the fields. (Thus,
;;; changing the definition of deflate_state could easily cause this
;;; program to crash horribly, without so much as a warning at
;;; compile time. Sigh.)
; all the +zlib1222add offsets are due to the addition of fields
; in zlib in the deflate_state structure since the asm code was first written
; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)").
; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0").
; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8").
*/
/* you can check the structure offset by running
#include <stdlib.h>
#include <stdio.h>
#include "deflate.h"
void print_depl()
{
deflate_state ds;
deflate_state *s=&ds;
printf("size pointer=%u\n",(int)sizeof(void*));
printf("#define dsWSize %u\n",(int)(((char*)&(s->w_size))-((char*)s)));
printf("#define dsWMask %u\n",(int)(((char*)&(s->w_mask))-((char*)s)));
printf("#define dsWindow %u\n",(int)(((char*)&(s->window))-((char*)s)));
printf("#define dsPrev %u\n",(int)(((char*)&(s->prev))-((char*)s)));
printf("#define dsMatchLen %u\n",(int)(((char*)&(s->match_length))-((char*)s)));
printf("#define dsPrevMatch %u\n",(int)(((char*)&(s->prev_match))-((char*)s)));
printf("#define dsStrStart %u\n",(int)(((char*)&(s->strstart))-((char*)s)));
printf("#define dsMatchStart %u\n",(int)(((char*)&(s->match_start))-((char*)s)));
printf("#define dsLookahead %u\n",(int)(((char*)&(s->lookahead))-((char*)s)));
printf("#define dsPrevLen %u\n",(int)(((char*)&(s->prev_length))-((char*)s)));
printf("#define dsMaxChainLen %u\n",(int)(((char*)&(s->max_chain_length))-((char*)s)));
printf("#define dsGoodMatch %u\n",(int)(((char*)&(s->good_match))-((char*)s)));
printf("#define dsNiceMatch %u\n",(int)(((char*)&(s->nice_match))-((char*)s)));
}
*/
#define dsWSize 68
#define dsWMask 76
#define dsWindow 80
#define dsPrev 96
#define dsMatchLen 144
#define dsPrevMatch 148
#define dsStrStart 156
#define dsMatchStart 160
#define dsLookahead 164
#define dsPrevLen 168
#define dsMaxChainLen 172
#define dsGoodMatch 188
#define dsNiceMatch 192
#define window_size [ rcx + dsWSize]
#define WMask [ rcx + dsWMask]
#define window_ad [ rcx + dsWindow]
#define prev_ad [ rcx + dsPrev]
#define strstart [ rcx + dsStrStart]
#define match_start [ rcx + dsMatchStart]
#define Lookahead [ rcx + dsLookahead] //; 0ffffffffh on infozip
#define prev_length [ rcx + dsPrevLen]
#define max_chain_length [ rcx + dsMaxChainLen]
#define good_match [ rcx + dsGoodMatch]
#define nice_match [ rcx + dsNiceMatch]
/*
; windows:
; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match)
; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and
; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp
;
; All registers must be preserved across the call, except for
; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch.
;
; gcc on macosx-linux:
; see http://www.x86-64.org/documentation/abi-0.99.pdf
; param 1 in rdi, param 2 in rsi
; rbx, rsp, rbp, r12 to r15 must be preserved
;;; Save registers that the compiler may be using, and adjust esp to
;;; make room for our stack frame.
;;; Retrieve the function arguments. r8d will hold cur_match
;;; throughout the entire function. edx will hold the pointer to the
;;; deflate_state structure during the function's setup (before
;;; entering the main loop.
; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)
; mac: param 1 in rdi, param 2 rsi
; this clear high 32 bits of r8, which can be garbage in both r8 and rdx
*/
mov [save_rbx],rbx
mov [save_rbp],rbp
mov rcx,rdi
mov r8d,esi
mov [save_r12],r12
mov [save_r13],r13
mov [save_r14],r14
mov [save_r15],r15
//;;; uInt wmask = s->w_mask;
//;;; unsigned chain_length = s->max_chain_length;
//;;; if (s->prev_length >= s->good_match) {
//;;; chain_length >>= 2;
//;;; }
mov edi, prev_length
mov esi, good_match
mov eax, WMask
mov ebx, max_chain_length
cmp edi, esi
jl LastMatchGood
shr ebx, 2
LastMatchGood:
//;;; chainlen is decremented once beforehand so that the function can
//;;; use the sign flag instead of the zero flag for the exit test.
//;;; It is then shifted into the high word, to make room for the wmask
//;;; value, which it will always accompany.
dec ebx
shl ebx, 16
or ebx, eax
//;;; on zlib only
//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
mov eax, nice_match
mov [chainlenwmask], ebx
mov r10d, Lookahead
cmp r10d, eax
cmovnl r10d, eax
mov [nicematch],r10d
//;;; register Bytef *scan = s->window + s->strstart;
mov r10, window_ad
mov ebp, strstart
lea r13, [r10 + rbp]
//;;; Determine how many bytes the scan ptr is off from being
//;;; dword-aligned.
mov r9,r13
neg r13
and r13,3
//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
//;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
mov eax, window_size
sub eax, MIN_LOOKAHEAD
xor edi,edi
sub ebp, eax
mov r11d, prev_length
cmovng ebp,edi
//;;; int best_len = s->prev_length;
//;;; Store the sum of s->window + best_len in esi locally, and in esi.
lea rsi,[r10+r11]
//;;; register ush scan_start = *(ushf*)scan;
//;;; register ush scan_end = *(ushf*)(scan+best_len-1);
//;;; Posf *prev = s->prev;
movzx r12d,word ptr [r9]
movzx ebx, word ptr [r9 + r11 - 1]
mov rdi, prev_ad
//;;; Jump into the main loop.
mov edx, [chainlenwmask]
cmp bx,word ptr [rsi + r8 - 1]
jz LookupLoopIsZero
LookupLoop1:
and r8d, edx
movzx r8d, word ptr [rdi + r8*2]
cmp r8d, ebp
jbe LeaveNow
sub edx, 0x00010000
BEFORE_JMP
js LeaveNow
AFTER_JMP
LoopEntry1:
cmp bx,word ptr [rsi + r8 - 1]
BEFORE_JMP
jz LookupLoopIsZero
AFTER_JMP
LookupLoop2:
and r8d, edx
movzx r8d, word ptr [rdi + r8*2]
cmp r8d, ebp
BEFORE_JMP
jbe LeaveNow
AFTER_JMP
sub edx, 0x00010000
BEFORE_JMP
js LeaveNow
AFTER_JMP
LoopEntry2:
cmp bx,word ptr [rsi + r8 - 1]
BEFORE_JMP
jz LookupLoopIsZero
AFTER_JMP
LookupLoop4:
and r8d, edx
movzx r8d, word ptr [rdi + r8*2]
cmp r8d, ebp
BEFORE_JMP
jbe LeaveNow
AFTER_JMP
sub edx, 0x00010000
BEFORE_JMP
js LeaveNow
AFTER_JMP
LoopEntry4:
cmp bx,word ptr [rsi + r8 - 1]
BEFORE_JMP
jnz LookupLoop1
jmp LookupLoopIsZero
AFTER_JMP
/*
;;; do {
;;; match = s->window + cur_match;
;;; if (*(ushf*)(match+best_len-1) != scan_end ||
;;; *(ushf*)match != scan_start) continue;
;;; [...]
;;; } while ((cur_match = prev[cur_match & wmask]) > limit
;;; && --chain_length != 0);
;;;
;;; Here is the inner loop of the function. The function will spend the
;;; majority of its time in this loop, and majority of that time will
;;; be spent in the first ten instructions.
;;;
;;; Within this loop:
;;; ebx = scanend
;;; r8d = curmatch
;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask)
;;; esi = windowbestlen - i.e., (window + bestlen)
;;; edi = prev
;;; ebp = limit
*/
.balign 16
LookupLoop:
and r8d, edx
movzx r8d, word ptr [rdi + r8*2]
cmp r8d, ebp
BEFORE_JMP
jbe LeaveNow
AFTER_JMP
sub edx, 0x00010000
BEFORE_JMP
js LeaveNow
AFTER_JMP
LoopEntry:
cmp bx,word ptr [rsi + r8 - 1]
BEFORE_JMP
jnz LookupLoop1
AFTER_JMP
LookupLoopIsZero:
cmp r12w, word ptr [r10 + r8]
BEFORE_JMP
jnz LookupLoop1
AFTER_JMP
//;;; Store the current value of chainlen.
mov [chainlenwmask], edx
/*
;;; Point edi to the string under scrutiny, and esi to the string we
;;; are hoping to match it up with. In actuality, esi and edi are
;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is
;;; initialized to -(MAX_MATCH_8 - scanalign).
*/
lea rsi,[r8+r10]
mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8)
lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8]
lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8]
prefetcht1 [rsi+rdx]
prefetcht1 [rdi+rdx]
/*
;;; Test the strings for equality, 8 bytes at a time. At the end,
;;; adjust rdx so that it is offset to the exact byte that mismatched.
;;;
;;; We already know at this point that the first three bytes of the
;;; strings match each other, and they can be safely passed over before
;;; starting the compare loop. So what this code does is skip over 0-3
;;; bytes, as much as necessary in order to dword-align the edi
;;; pointer. (rsi will still be misaligned three times out of four.)
;;;
;;; It should be confessed that this loop usually does not represent
;;; much of the total running time. Replacing it with a more
;;; straightforward "rep cmpsb" would not drastically degrade
;;; performance.
*/
LoopCmps:
mov rax, [rsi + rdx]
xor rax, [rdi + rdx]
jnz LeaveLoopCmps
mov rax, [rsi + rdx + 8]
xor rax, [rdi + rdx + 8]
jnz LeaveLoopCmps8
mov rax, [rsi + rdx + 8+8]
xor rax, [rdi + rdx + 8+8]
jnz LeaveLoopCmps16
add rdx,8+8+8
BEFORE_JMP
jnz LoopCmps
jmp LenMaximum
AFTER_JMP
LeaveLoopCmps16: add rdx,8
LeaveLoopCmps8: add rdx,8
LeaveLoopCmps:
test eax, 0x0000FFFF
jnz LenLower
test eax,0xffffffff
jnz LenLower32
add rdx,4
shr rax,32
or ax,ax
BEFORE_JMP
jnz LenLower
AFTER_JMP
LenLower32:
shr eax,16
add rdx,2
LenLower:
sub al, 1
adc rdx, 0
//;;; Calculate the length of the match. If it is longer than MAX_MATCH,
//;;; then automatically accept it as the best possible match and leave.
lea rax, [rdi + rdx]
sub rax, r9
cmp eax, MAX_MATCH
BEFORE_JMP
jge LenMaximum
AFTER_JMP
/*
;;; If the length of the match is not longer than the best match we
;;; have so far, then forget it and return to the lookup loop.
;///////////////////////////////////
*/
cmp eax, r11d
jg LongerMatch
lea rsi,[r10+r11]
mov rdi, prev_ad
mov edx, [chainlenwmask]
BEFORE_JMP
jmp LookupLoop
AFTER_JMP
/*
;;; s->match_start = cur_match;
;;; best_len = len;
;;; if (len >= nice_match) break;
;;; scan_end = *(ushf*)(scan+best_len-1);
*/
LongerMatch:
mov r11d, eax
mov match_start, r8d
cmp eax, [nicematch]
BEFORE_JMP
jge LeaveNow
AFTER_JMP
lea rsi,[r10+rax]
movzx ebx, word ptr [r9 + rax - 1]
mov rdi, prev_ad
mov edx, [chainlenwmask]
BEFORE_JMP
jmp LookupLoop
AFTER_JMP
//;;; Accept the current string, with the maximum possible length.
LenMaximum:
mov r11d,MAX_MATCH
mov match_start, r8d
//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
//;;; return s->lookahead;
LeaveNow:
mov eax, Lookahead
cmp r11d, eax
cmovng eax, r11d
//;;; Restore the stack and return from whence we came.
// mov rsi,[save_rsi]
// mov rdi,[save_rdi]
mov rbx,[save_rbx]
mov rbp,[save_rbp]
mov r12,[save_r12]
mov r13,[save_r13]
mov r14,[save_r14]
mov r15,[save_r15]
ret 0
//; please don't remove this string !
//; Your can freely use gvmat64 in any free or commercial app
//; but it is far better don't remove the string in the binary!
// db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0
match_init:
ret 0
+1
View File
@@ -0,0 +1 @@
See infback9.h for what this is and how to use it.
+615
View File
@@ -0,0 +1,615 @@
/* infback9.c -- inflate deflate64 data using a call-back interface
* Copyright (C) 1995-2008 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "zutil.h"
#include "infback9.h"
#include "inftree9.h"
#include "inflate9.h"
#define WSIZE 65536UL
/*
strm provides memory allocation functions in zalloc and zfree, or
Z_NULL to use the library memory allocation functions.
window is a user-supplied window and output buffer that is 64K bytes.
*/
int ZEXPORT inflateBack9Init_(strm, window, version, stream_size)
z_stream FAR *strm;
unsigned char FAR *window;
const char *version;
int stream_size;
{
struct inflate_state FAR *state;
if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
stream_size != (int)(sizeof(z_stream)))
return Z_VERSION_ERROR;
if (strm == Z_NULL || window == Z_NULL)
return Z_STREAM_ERROR;
strm->msg = Z_NULL; /* in case we return an error */
if (strm->zalloc == (alloc_func)0) {
strm->zalloc = zcalloc;
strm->opaque = (voidpf)0;
}
if (strm->zfree == (free_func)0) strm->zfree = zcfree;
state = (struct inflate_state FAR *)ZALLOC(strm, 1,
sizeof(struct inflate_state));
if (state == Z_NULL) return Z_MEM_ERROR;
Tracev((stderr, "inflate: allocated\n"));
strm->state = (voidpf)state;
state->window = window;
return Z_OK;
}
/*
Build and output length and distance decoding tables for fixed code
decoding.
*/
#ifdef MAKEFIXED
#include <stdio.h>
void makefixed9(void)
{
unsigned sym, bits, low, size;
code *next, *lenfix, *distfix;
struct inflate_state state;
code fixed[544];
/* literal/length table */
sym = 0;
while (sym < 144) state.lens[sym++] = 8;
while (sym < 256) state.lens[sym++] = 9;
while (sym < 280) state.lens[sym++] = 7;
while (sym < 288) state.lens[sym++] = 8;
next = fixed;
lenfix = next;
bits = 9;
inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work);
/* distance table */
sym = 0;
while (sym < 32) state.lens[sym++] = 5;
distfix = next;
bits = 5;
inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work);
/* write tables */
puts(" /* inffix9.h -- table for decoding deflate64 fixed codes");
puts(" * Generated automatically by makefixed9().");
puts(" */");
puts("");
puts(" /* WARNING: this file should *not* be used by applications.");
puts(" It is part of the implementation of this library and is");
puts(" subject to change. Applications should only use zlib.h.");
puts(" */");
puts("");
size = 1U << 9;
printf(" static const code lenfix[%u] = {", size);
low = 0;
for (;;) {
if ((low % 6) == 0) printf("\n ");
printf("{%u,%u,%d}", lenfix[low].op, lenfix[low].bits,
lenfix[low].val);
if (++low == size) break;
putchar(',');
}
puts("\n };");
size = 1U << 5;
printf("\n static const code distfix[%u] = {", size);
low = 0;
for (;;) {
if ((low % 5) == 0) printf("\n ");
printf("{%u,%u,%d}", distfix[low].op, distfix[low].bits,
distfix[low].val);
if (++low == size) break;
putchar(',');
}
puts("\n };");
}
#endif /* MAKEFIXED */
/* Macros for inflateBack(): */
/* Clear the input bit accumulator */
#define INITBITS() \
do { \
hold = 0; \
bits = 0; \
} while (0)
/* Assure that some input is available. If input is requested, but denied,
then return a Z_BUF_ERROR from inflateBack(). */
#define PULL() \
do { \
if (have == 0) { \
have = in(in_desc, &next); \
if (have == 0) { \
next = Z_NULL; \
ret = Z_BUF_ERROR; \
goto inf_leave; \
} \
} \
} while (0)
/* Get a byte of input into the bit accumulator, or return from inflateBack()
with an error if there is no input available. */
#define PULLBYTE() \
do { \
PULL(); \
have--; \
hold += (unsigned long)(*next++) << bits; \
bits += 8; \
} while (0)
/* Assure that there are at least n bits in the bit accumulator. If there is
not enough available input to do that, then return from inflateBack() with
an error. */
#define NEEDBITS(n) \
do { \
while (bits < (unsigned)(n)) \
PULLBYTE(); \
} while (0)
/* Return the low n bits of the bit accumulator (n <= 16) */
#define BITS(n) \
((unsigned)hold & ((1U << (n)) - 1))
/* Remove n bits from the bit accumulator */
#define DROPBITS(n) \
do { \
hold >>= (n); \
bits -= (unsigned)(n); \
} while (0)
/* Remove zero to seven bits as needed to go to a byte boundary */
#define BYTEBITS() \
do { \
hold >>= bits & 7; \
bits -= bits & 7; \
} while (0)
/* Assure that some output space is available, by writing out the window
if it's full. If the write fails, return from inflateBack() with a
Z_BUF_ERROR. */
#define ROOM() \
do { \
if (left == 0) { \
put = window; \
left = WSIZE; \
wrap = 1; \
if (out(out_desc, put, (unsigned)left)) { \
ret = Z_BUF_ERROR; \
goto inf_leave; \
} \
} \
} while (0)
/*
strm provides the memory allocation functions and window buffer on input,
and provides information on the unused input on return. For Z_DATA_ERROR
returns, strm will also provide an error message.
in() and out() are the call-back input and output functions. When
inflateBack() needs more input, it calls in(). When inflateBack() has
filled the window with output, or when it completes with data in the
window, it calls out() to write out the data. The application must not
change the provided input until in() is called again or inflateBack()
returns. The application must not change the window/output buffer until
inflateBack() returns.
in() and out() are called with a descriptor parameter provided in the
inflateBack() call. This parameter can be a structure that provides the
information required to do the read or write, as well as accumulated
information on the input and output such as totals and check values.
in() should return zero on failure. out() should return non-zero on
failure. If either in() or out() fails, than inflateBack() returns a
Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it
was in() or out() that caused in the error. Otherwise, inflateBack()
returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format
error, or Z_MEM_ERROR if it could not allocate memory for the state.
inflateBack() can also return Z_STREAM_ERROR if the input parameters
are not correct, i.e. strm is Z_NULL or the state was not initialized.
*/
int ZEXPORT inflateBack9(strm, in, in_desc, out, out_desc)
z_stream FAR *strm;
in_func in;
void FAR *in_desc;
out_func out;
void FAR *out_desc;
{
struct inflate_state FAR *state;
z_const unsigned char FAR *next; /* next input */
unsigned char FAR *put; /* next output */
unsigned have; /* available input */
unsigned long left; /* available output */
inflate_mode mode; /* current inflate mode */
int lastblock; /* true if processing last block */
int wrap; /* true if the window has wrapped */
unsigned char FAR *window; /* allocated sliding window, if needed */
unsigned long hold; /* bit buffer */
unsigned bits; /* bits in bit buffer */
unsigned extra; /* extra bits needed */
unsigned long length; /* literal or length of data to copy */
unsigned long offset; /* distance back to copy string from */
unsigned long copy; /* number of stored or match bytes to copy */
unsigned char FAR *from; /* where to copy match bytes from */
code const FAR *lencode; /* starting table for length/literal codes */
code const FAR *distcode; /* starting table for distance codes */
unsigned lenbits; /* index bits for lencode */
unsigned distbits; /* index bits for distcode */
code here; /* current decoding table entry */
code last; /* parent table entry */
unsigned len; /* length to copy for repeats, bits to drop */
int ret; /* return code */
static const unsigned short order[19] = /* permutation of code lengths */
{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
#include "inffix9.h"
/* Check that the strm exists and that the state was initialized */
if (strm == Z_NULL || strm->state == Z_NULL)
return Z_STREAM_ERROR;
state = (struct inflate_state FAR *)strm->state;
/* Reset the state */
strm->msg = Z_NULL;
mode = TYPE;
lastblock = 0;
wrap = 0;
window = state->window;
next = strm->next_in;
have = next != Z_NULL ? strm->avail_in : 0;
hold = 0;
bits = 0;
put = window;
left = WSIZE;
lencode = Z_NULL;
distcode = Z_NULL;
/* Inflate until end of block marked as last */
for (;;)
switch (mode) {
case TYPE:
/* determine and dispatch block type */
if (lastblock) {
BYTEBITS();
mode = DONE;
break;
}
NEEDBITS(3);
lastblock = BITS(1);
DROPBITS(1);
switch (BITS(2)) {
case 0: /* stored block */
Tracev((stderr, "inflate: stored block%s\n",
lastblock ? " (last)" : ""));
mode = STORED;
break;
case 1: /* fixed block */
lencode = lenfix;
lenbits = 9;
distcode = distfix;
distbits = 5;
Tracev((stderr, "inflate: fixed codes block%s\n",
lastblock ? " (last)" : ""));
mode = LEN; /* decode codes */
break;
case 2: /* dynamic block */
Tracev((stderr, "inflate: dynamic codes block%s\n",
lastblock ? " (last)" : ""));
mode = TABLE;
break;
case 3:
strm->msg = (char *)"invalid block type";
mode = BAD;
}
DROPBITS(2);
break;
case STORED:
/* get and verify stored block length */
BYTEBITS(); /* go to byte boundary */
NEEDBITS(32);
if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
strm->msg = (char *)"invalid stored block lengths";
mode = BAD;
break;
}
length = (unsigned)hold & 0xffff;
Tracev((stderr, "inflate: stored length %lu\n",
length));
INITBITS();
/* copy stored block from input to output */
while (length != 0) {
copy = length;
PULL();
ROOM();
if (copy > have) copy = have;
if (copy > left) copy = left;
zmemcpy(put, next, copy);
have -= copy;
next += copy;
left -= copy;
put += copy;
length -= copy;
}
Tracev((stderr, "inflate: stored end\n"));
mode = TYPE;
break;
case TABLE:
/* get dynamic table entries descriptor */
NEEDBITS(14);
state->nlen = BITS(5) + 257;
DROPBITS(5);
state->ndist = BITS(5) + 1;
DROPBITS(5);
state->ncode = BITS(4) + 4;
DROPBITS(4);
if (state->nlen > 286) {
strm->msg = (char *)"too many length symbols";
mode = BAD;
break;
}
Tracev((stderr, "inflate: table sizes ok\n"));
/* get code length code lengths (not a typo) */
state->have = 0;
while (state->have < state->ncode) {
NEEDBITS(3);
state->lens[order[state->have++]] = (unsigned short)BITS(3);
DROPBITS(3);
}
while (state->have < 19)
state->lens[order[state->have++]] = 0;
state->next = state->codes;
lencode = (code const FAR *)(state->next);
lenbits = 7;
ret = inflate_table9(CODES, state->lens, 19, &(state->next),
&(lenbits), state->work);
if (ret) {
strm->msg = (char *)"invalid code lengths set";
mode = BAD;
break;
}
Tracev((stderr, "inflate: code lengths ok\n"));
/* get length and distance code code lengths */
state->have = 0;
while (state->have < state->nlen + state->ndist) {
for (;;) {
here = lencode[BITS(lenbits)];
if ((unsigned)(here.bits) <= bits) break;
PULLBYTE();
}
if (here.val < 16) {
NEEDBITS(here.bits);
DROPBITS(here.bits);
state->lens[state->have++] = here.val;
}
else {
if (here.val == 16) {
NEEDBITS(here.bits + 2);
DROPBITS(here.bits);
if (state->have == 0) {
strm->msg = (char *)"invalid bit length repeat";
mode = BAD;
break;
}
len = (unsigned)(state->lens[state->have - 1]);
copy = 3 + BITS(2);
DROPBITS(2);
}
else if (here.val == 17) {
NEEDBITS(here.bits + 3);
DROPBITS(here.bits);
len = 0;
copy = 3 + BITS(3);
DROPBITS(3);
}
else {
NEEDBITS(here.bits + 7);
DROPBITS(here.bits);
len = 0;
copy = 11 + BITS(7);
DROPBITS(7);
}
if (state->have + copy > state->nlen + state->ndist) {
strm->msg = (char *)"invalid bit length repeat";
mode = BAD;
break;
}
while (copy--)
state->lens[state->have++] = (unsigned short)len;
}
}
/* handle error breaks in while */
if (mode == BAD) break;
/* check for end-of-block code (better have one) */
if (state->lens[256] == 0) {
strm->msg = (char *)"invalid code -- missing end-of-block";
mode = BAD;
break;
}
/* build code tables -- note: do not change the lenbits or distbits
values here (9 and 6) without reading the comments in inftree9.h
concerning the ENOUGH constants, which depend on those values */
state->next = state->codes;
lencode = (code const FAR *)(state->next);
lenbits = 9;
ret = inflate_table9(LENS, state->lens, state->nlen,
&(state->next), &(lenbits), state->work);
if (ret) {
strm->msg = (char *)"invalid literal/lengths set";
mode = BAD;
break;
}
distcode = (code const FAR *)(state->next);
distbits = 6;
ret = inflate_table9(DISTS, state->lens + state->nlen,
state->ndist, &(state->next), &(distbits),
state->work);
if (ret) {
strm->msg = (char *)"invalid distances set";
mode = BAD;
break;
}
Tracev((stderr, "inflate: codes ok\n"));
mode = LEN;
case LEN:
/* get a literal, length, or end-of-block code */
for (;;) {
here = lencode[BITS(lenbits)];
if ((unsigned)(here.bits) <= bits) break;
PULLBYTE();
}
if (here.op && (here.op & 0xf0) == 0) {
last = here;
for (;;) {
here = lencode[last.val +
(BITS(last.bits + last.op) >> last.bits)];
if ((unsigned)(last.bits + here.bits) <= bits) break;
PULLBYTE();
}
DROPBITS(last.bits);
}
DROPBITS(here.bits);
length = (unsigned)here.val;
/* process literal */
if (here.op == 0) {
Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
"inflate: literal '%c'\n" :
"inflate: literal 0x%02x\n", here.val));
ROOM();
*put++ = (unsigned char)(length);
left--;
mode = LEN;
break;
}
/* process end of block */
if (here.op & 32) {
Tracevv((stderr, "inflate: end of block\n"));
mode = TYPE;
break;
}
/* invalid code */
if (here.op & 64) {
strm->msg = (char *)"invalid literal/length code";
mode = BAD;
break;
}
/* length code -- get extra bits, if any */
extra = (unsigned)(here.op) & 31;
if (extra != 0) {
NEEDBITS(extra);
length += BITS(extra);
DROPBITS(extra);
}
Tracevv((stderr, "inflate: length %lu\n", length));
/* get distance code */
for (;;) {
here = distcode[BITS(distbits)];
if ((unsigned)(here.bits) <= bits) break;
PULLBYTE();
}
if ((here.op & 0xf0) == 0) {
last = here;
for (;;) {
here = distcode[last.val +
(BITS(last.bits + last.op) >> last.bits)];
if ((unsigned)(last.bits + here.bits) <= bits) break;
PULLBYTE();
}
DROPBITS(last.bits);
}
DROPBITS(here.bits);
if (here.op & 64) {
strm->msg = (char *)"invalid distance code";
mode = BAD;
break;
}
offset = (unsigned)here.val;
/* get distance extra bits, if any */
extra = (unsigned)(here.op) & 15;
if (extra != 0) {
NEEDBITS(extra);
offset += BITS(extra);
DROPBITS(extra);
}
if (offset > WSIZE - (wrap ? 0: left)) {
strm->msg = (char *)"invalid distance too far back";
mode = BAD;
break;
}
Tracevv((stderr, "inflate: distance %lu\n", offset));
/* copy match from window to output */
do {
ROOM();
copy = WSIZE - offset;
if (copy < left) {
from = put + copy;
copy = left - copy;
}
else {
from = put - offset;
copy = left;
}
if (copy > length) copy = length;
length -= copy;
left -= copy;
do {
*put++ = *from++;
} while (--copy);
} while (length != 0);
break;
case DONE:
/* inflate stream terminated properly -- write leftover output */
ret = Z_STREAM_END;
if (left < WSIZE) {
if (out(out_desc, window, (unsigned)(WSIZE - left)))
ret = Z_BUF_ERROR;
}
goto inf_leave;
case BAD:
ret = Z_DATA_ERROR;
goto inf_leave;
default: /* can't happen, but makes compilers happy */
ret = Z_STREAM_ERROR;
goto inf_leave;
}
/* Return unused input */
inf_leave:
strm->next_in = next;
strm->avail_in = have;
return ret;
}
int ZEXPORT inflateBack9End(strm)
z_stream FAR *strm;
{
if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
return Z_STREAM_ERROR;
ZFREE(strm, strm->state);
strm->state = Z_NULL;
Tracev((stderr, "inflate: end\n"));
return Z_OK;
}
+37
View File
@@ -0,0 +1,37 @@
/* infback9.h -- header for using inflateBack9 functions
* Copyright (C) 2003 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/*
* This header file and associated patches provide a decoder for PKWare's
* undocumented deflate64 compression method (method 9). Use with infback9.c,
* inftree9.h, inftree9.c, and inffix9.h. These patches are not supported.
* This should be compiled with zlib, since it uses zutil.h and zutil.o.
* This code has not yet been tested on 16-bit architectures. See the
* comments in zlib.h for inflateBack() usage. These functions are used
* identically, except that there is no windowBits parameter, and a 64K
* window must be provided. Also if int's are 16 bits, then a zero for
* the third parameter of the "out" function actually means 65536UL.
* zlib.h must be included before this header file.
*/
#ifdef __cplusplus
extern "C" {
#endif
ZEXTERN int ZEXPORT inflateBack9 OF((z_stream FAR *strm,
in_func in, void FAR *in_desc,
out_func out, void FAR *out_desc));
ZEXTERN int ZEXPORT inflateBack9End OF((z_stream FAR *strm));
ZEXTERN int ZEXPORT inflateBack9Init_ OF((z_stream FAR *strm,
unsigned char FAR *window,
const char *version,
int stream_size));
#define inflateBack9Init(strm, window) \
inflateBack9Init_((strm), (window), \
ZLIB_VERSION, sizeof(z_stream))
#ifdef __cplusplus
}
#endif
+107
View File
@@ -0,0 +1,107 @@
/* inffix9.h -- table for decoding deflate64 fixed codes
* Generated automatically by makefixed9().
*/
/* WARNING: this file should *not* be used by applications.
It is part of the implementation of this library and is
subject to change. Applications should only use zlib.h.
*/
static const code lenfix[512] = {
{96,7,0},{0,8,80},{0,8,16},{132,8,115},{130,7,31},{0,8,112},
{0,8,48},{0,9,192},{128,7,10},{0,8,96},{0,8,32},{0,9,160},
{0,8,0},{0,8,128},{0,8,64},{0,9,224},{128,7,6},{0,8,88},
{0,8,24},{0,9,144},{131,7,59},{0,8,120},{0,8,56},{0,9,208},
{129,7,17},{0,8,104},{0,8,40},{0,9,176},{0,8,8},{0,8,136},
{0,8,72},{0,9,240},{128,7,4},{0,8,84},{0,8,20},{133,8,227},
{131,7,43},{0,8,116},{0,8,52},{0,9,200},{129,7,13},{0,8,100},
{0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},
{128,7,8},{0,8,92},{0,8,28},{0,9,152},{132,7,83},{0,8,124},
{0,8,60},{0,9,216},{130,7,23},{0,8,108},{0,8,44},{0,9,184},
{0,8,12},{0,8,140},{0,8,76},{0,9,248},{128,7,3},{0,8,82},
{0,8,18},{133,8,163},{131,7,35},{0,8,114},{0,8,50},{0,9,196},
{129,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},{0,8,130},
{0,8,66},{0,9,228},{128,7,7},{0,8,90},{0,8,26},{0,9,148},
{132,7,67},{0,8,122},{0,8,58},{0,9,212},{130,7,19},{0,8,106},
{0,8,42},{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},
{128,7,5},{0,8,86},{0,8,22},{65,8,0},{131,7,51},{0,8,118},
{0,8,54},{0,9,204},{129,7,15},{0,8,102},{0,8,38},{0,9,172},
{0,8,6},{0,8,134},{0,8,70},{0,9,236},{128,7,9},{0,8,94},
{0,8,30},{0,9,156},{132,7,99},{0,8,126},{0,8,62},{0,9,220},
{130,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
{0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{133,8,131},
{130,7,31},{0,8,113},{0,8,49},{0,9,194},{128,7,10},{0,8,97},
{0,8,33},{0,9,162},{0,8,1},{0,8,129},{0,8,65},{0,9,226},
{128,7,6},{0,8,89},{0,8,25},{0,9,146},{131,7,59},{0,8,121},
{0,8,57},{0,9,210},{129,7,17},{0,8,105},{0,8,41},{0,9,178},
{0,8,9},{0,8,137},{0,8,73},{0,9,242},{128,7,4},{0,8,85},
{0,8,21},{144,8,3},{131,7,43},{0,8,117},{0,8,53},{0,9,202},
{129,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},
{0,8,69},{0,9,234},{128,7,8},{0,8,93},{0,8,29},{0,9,154},
{132,7,83},{0,8,125},{0,8,61},{0,9,218},{130,7,23},{0,8,109},
{0,8,45},{0,9,186},{0,8,13},{0,8,141},{0,8,77},{0,9,250},
{128,7,3},{0,8,83},{0,8,19},{133,8,195},{131,7,35},{0,8,115},
{0,8,51},{0,9,198},{129,7,11},{0,8,99},{0,8,35},{0,9,166},
{0,8,3},{0,8,131},{0,8,67},{0,9,230},{128,7,7},{0,8,91},
{0,8,27},{0,9,150},{132,7,67},{0,8,123},{0,8,59},{0,9,214},
{130,7,19},{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},
{0,8,75},{0,9,246},{128,7,5},{0,8,87},{0,8,23},{77,8,0},
{131,7,51},{0,8,119},{0,8,55},{0,9,206},{129,7,15},{0,8,103},
{0,8,39},{0,9,174},{0,8,7},{0,8,135},{0,8,71},{0,9,238},
{128,7,9},{0,8,95},{0,8,31},{0,9,158},{132,7,99},{0,8,127},
{0,8,63},{0,9,222},{130,7,27},{0,8,111},{0,8,47},{0,9,190},
{0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},
{0,8,16},{132,8,115},{130,7,31},{0,8,112},{0,8,48},{0,9,193},
{128,7,10},{0,8,96},{0,8,32},{0,9,161},{0,8,0},{0,8,128},
{0,8,64},{0,9,225},{128,7,6},{0,8,88},{0,8,24},{0,9,145},
{131,7,59},{0,8,120},{0,8,56},{0,9,209},{129,7,17},{0,8,104},
{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},{0,9,241},
{128,7,4},{0,8,84},{0,8,20},{133,8,227},{131,7,43},{0,8,116},
{0,8,52},{0,9,201},{129,7,13},{0,8,100},{0,8,36},{0,9,169},
{0,8,4},{0,8,132},{0,8,68},{0,9,233},{128,7,8},{0,8,92},
{0,8,28},{0,9,153},{132,7,83},{0,8,124},{0,8,60},{0,9,217},
{130,7,23},{0,8,108},{0,8,44},{0,9,185},{0,8,12},{0,8,140},
{0,8,76},{0,9,249},{128,7,3},{0,8,82},{0,8,18},{133,8,163},
{131,7,35},{0,8,114},{0,8,50},{0,9,197},{129,7,11},{0,8,98},
{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
{128,7,7},{0,8,90},{0,8,26},{0,9,149},{132,7,67},{0,8,122},
{0,8,58},{0,9,213},{130,7,19},{0,8,106},{0,8,42},{0,9,181},
{0,8,10},{0,8,138},{0,8,74},{0,9,245},{128,7,5},{0,8,86},
{0,8,22},{65,8,0},{131,7,51},{0,8,118},{0,8,54},{0,9,205},
{129,7,15},{0,8,102},{0,8,38},{0,9,173},{0,8,6},{0,8,134},
{0,8,70},{0,9,237},{128,7,9},{0,8,94},{0,8,30},{0,9,157},
{132,7,99},{0,8,126},{0,8,62},{0,9,221},{130,7,27},{0,8,110},
{0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},
{96,7,0},{0,8,81},{0,8,17},{133,8,131},{130,7,31},{0,8,113},
{0,8,49},{0,9,195},{128,7,10},{0,8,97},{0,8,33},{0,9,163},
{0,8,1},{0,8,129},{0,8,65},{0,9,227},{128,7,6},{0,8,89},
{0,8,25},{0,9,147},{131,7,59},{0,8,121},{0,8,57},{0,9,211},
{129,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},{0,8,137},
{0,8,73},{0,9,243},{128,7,4},{0,8,85},{0,8,21},{144,8,3},
{131,7,43},{0,8,117},{0,8,53},{0,9,203},{129,7,13},{0,8,101},
{0,8,37},{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},
{128,7,8},{0,8,93},{0,8,29},{0,9,155},{132,7,83},{0,8,125},
{0,8,61},{0,9,219},{130,7,23},{0,8,109},{0,8,45},{0,9,187},
{0,8,13},{0,8,141},{0,8,77},{0,9,251},{128,7,3},{0,8,83},
{0,8,19},{133,8,195},{131,7,35},{0,8,115},{0,8,51},{0,9,199},
{129,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
{0,8,67},{0,9,231},{128,7,7},{0,8,91},{0,8,27},{0,9,151},
{132,7,67},{0,8,123},{0,8,59},{0,9,215},{130,7,19},{0,8,107},
{0,8,43},{0,9,183},{0,8,11},{0,8,139},{0,8,75},{0,9,247},
{128,7,5},{0,8,87},{0,8,23},{77,8,0},{131,7,51},{0,8,119},
{0,8,55},{0,9,207},{129,7,15},{0,8,103},{0,8,39},{0,9,175},
{0,8,7},{0,8,135},{0,8,71},{0,9,239},{128,7,9},{0,8,95},
{0,8,31},{0,9,159},{132,7,99},{0,8,127},{0,8,63},{0,9,223},
{130,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},
{0,8,79},{0,9,255}
};
static const code distfix[32] = {
{128,5,1},{135,5,257},{131,5,17},{139,5,4097},{129,5,5},
{137,5,1025},{133,5,65},{141,5,16385},{128,5,3},{136,5,513},
{132,5,33},{140,5,8193},{130,5,9},{138,5,2049},{134,5,129},
{142,5,32769},{128,5,2},{135,5,385},{131,5,25},{139,5,6145},
{129,5,7},{137,5,1537},{133,5,97},{141,5,24577},{128,5,4},
{136,5,769},{132,5,49},{140,5,12289},{130,5,13},{138,5,3073},
{134,5,193},{142,5,49153}
};
+47
View File
@@ -0,0 +1,47 @@
/* inflate9.h -- internal inflate state definition
* Copyright (C) 1995-2003 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* Possible inflate modes between inflate() calls */
typedef enum {
TYPE, /* i: waiting for type bits, including last-flag bit */
STORED, /* i: waiting for stored size (length and complement) */
TABLE, /* i: waiting for dynamic block table lengths */
LEN, /* i: waiting for length/lit code */
DONE, /* finished check, done -- remain here until reset */
BAD /* got a data error -- remain here until reset */
} inflate_mode;
/*
State transitions between above modes -
(most modes can go to the BAD mode -- not shown for clarity)
Read deflate blocks:
TYPE -> STORED or TABLE or LEN or DONE
STORED -> TYPE
TABLE -> LENLENS -> CODELENS -> LEN
Read deflate codes:
LEN -> LEN or TYPE
*/
/* state maintained between inflate() calls. Approximately 7K bytes. */
struct inflate_state {
/* sliding window */
unsigned char FAR *window; /* allocated sliding window, if needed */
/* dynamic table building */
unsigned ncode; /* number of code length code lengths */
unsigned nlen; /* number of length code lengths */
unsigned ndist; /* number of distance code lengths */
unsigned have; /* number of code lengths in lens[] */
code FAR *next; /* next available space in codes[] */
unsigned short lens[320]; /* temporary storage for code lengths */
unsigned short work[288]; /* work area for code table building */
code codes[ENOUGH]; /* space for code tables */
};
+324
View File
@@ -0,0 +1,324 @@
/* inftree9.c -- generate Huffman trees for efficient decoding
* Copyright (C) 1995-2017 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
#include "zutil.h"
#include "inftree9.h"
#define MAXBITS 15
const char inflate9_copyright[] =
" inflate9 1.2.11 Copyright 1995-2017 Mark Adler ";
/*
If you use the zlib library in a product, an acknowledgment is welcome
in the documentation of your product. If for some reason you cannot
include such an acknowledgment, I would appreciate that you keep this
copyright string in the executable of your product.
*/
/*
Build a set of tables to decode the provided canonical Huffman code.
The code lengths are lens[0..codes-1]. The result starts at *table,
whose indices are 0..2^bits-1. work is a writable array of at least
lens shorts, which is used as a work area. type is the type of code
to be generated, CODES, LENS, or DISTS. On return, zero is success,
-1 is an invalid code, and +1 means that ENOUGH isn't enough. table
on return points to the next available entry's address. bits is the
requested root table index bits, and on return it is the actual root
table index bits. It will differ if the request is greater than the
longest code or if it is less than the shortest code.
*/
int inflate_table9(type, lens, codes, table, bits, work)
codetype type;
unsigned short FAR *lens;
unsigned codes;
code FAR * FAR *table;
unsigned FAR *bits;
unsigned short FAR *work;
{
unsigned len; /* a code's length in bits */
unsigned sym; /* index of code symbols */
unsigned min, max; /* minimum and maximum code lengths */
unsigned root; /* number of index bits for root table */
unsigned curr; /* number of index bits for current table */
unsigned drop; /* code bits to drop for sub-table */
int left; /* number of prefix codes available */
unsigned used; /* code entries in table used */
unsigned huff; /* Huffman code */
unsigned incr; /* for incrementing code, index */
unsigned fill; /* index for replicating entries */
unsigned low; /* low bits for current root entry */
unsigned mask; /* mask for low root bits */
code this; /* table entry for duplication */
code FAR *next; /* next available space in table */
const unsigned short FAR *base; /* base value table to use */
const unsigned short FAR *extra; /* extra bits table to use */
int end; /* use base and extra for symbol > end */
unsigned short count[MAXBITS+1]; /* number of codes of each length */
unsigned short offs[MAXBITS+1]; /* offsets in table for each length */
static const unsigned short lbase[31] = { /* Length codes 257..285 base */
3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17,
19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115,
131, 163, 195, 227, 3, 0, 0};
static const unsigned short lext[31] = { /* Length codes 257..285 extra */
128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129,
130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132,
133, 133, 133, 133, 144, 77, 202};
static const unsigned short dbase[32] = { /* Distance codes 0..31 base */
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49,
65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073,
4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153};
static const unsigned short dext[32] = { /* Distance codes 0..31 extra */
128, 128, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132,
133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138,
139, 139, 140, 140, 141, 141, 142, 142};
/*
Process a set of code lengths to create a canonical Huffman code. The
code lengths are lens[0..codes-1]. Each length corresponds to the
symbols 0..codes-1. The Huffman code is generated by first sorting the
symbols by length from short to long, and retaining the symbol order
for codes with equal lengths. Then the code starts with all zero bits
for the first code of the shortest length, and the codes are integer
increments for the same length, and zeros are appended as the length
increases. For the deflate format, these bits are stored backwards
from their more natural integer increment ordering, and so when the
decoding tables are built in the large loop below, the integer codes
are incremented backwards.
This routine assumes, but does not check, that all of the entries in
lens[] are in the range 0..MAXBITS. The caller must assure this.
1..MAXBITS is interpreted as that code length. zero means that that
symbol does not occur in this code.
The codes are sorted by computing a count of codes for each length,
creating from that a table of starting indices for each length in the
sorted table, and then entering the symbols in order in the sorted
table. The sorted table is work[], with that space being provided by
the caller.
The length counts are used for other purposes as well, i.e. finding
the minimum and maximum length codes, determining if there are any
codes at all, checking for a valid set of lengths, and looking ahead
at length counts to determine sub-table sizes when building the
decoding tables.
*/
/* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
for (len = 0; len <= MAXBITS; len++)
count[len] = 0;
for (sym = 0; sym < codes; sym++)
count[lens[sym]]++;
/* bound code lengths, force root to be within code lengths */
root = *bits;
for (max = MAXBITS; max >= 1; max--)
if (count[max] != 0) break;
if (root > max) root = max;
if (max == 0) return -1; /* no codes! */
for (min = 1; min <= MAXBITS; min++)
if (count[min] != 0) break;
if (root < min) root = min;
/* check for an over-subscribed or incomplete set of lengths */
left = 1;
for (len = 1; len <= MAXBITS; len++) {
left <<= 1;
left -= count[len];
if (left < 0) return -1; /* over-subscribed */
}
if (left > 0 && (type == CODES || max != 1))
return -1; /* incomplete set */
/* generate offsets into symbol table for each length for sorting */
offs[1] = 0;
for (len = 1; len < MAXBITS; len++)
offs[len + 1] = offs[len] + count[len];
/* sort symbols by length, by symbol order within each length */
for (sym = 0; sym < codes; sym++)
if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
/*
Create and fill in decoding tables. In this loop, the table being
filled is at next and has curr index bits. The code being used is huff
with length len. That code is converted to an index by dropping drop
bits off of the bottom. For codes where len is less than drop + curr,
those top drop + curr - len bits are incremented through all values to
fill the table with replicated entries.
root is the number of index bits for the root table. When len exceeds
root, sub-tables are created pointed to by the root entry with an index
of the low root bits of huff. This is saved in low to check for when a
new sub-table should be started. drop is zero when the root table is
being filled, and drop is root when sub-tables are being filled.
When a new sub-table is needed, it is necessary to look ahead in the
code lengths to determine what size sub-table is needed. The length
counts are used for this, and so count[] is decremented as codes are
entered in the tables.
used keeps track of how many table entries have been allocated from the
provided *table space. It is checked for LENS and DIST tables against
the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
the initial root table size constants. See the comments in inftree9.h
for more information.
sym increments through all symbols, and the loop terminates when
all codes of length max, i.e. all codes, have been processed. This
routine permits incomplete codes, so another loop after this one fills
in the rest of the decoding tables with invalid code markers.
*/
/* set up for code type */
switch (type) {
case CODES:
base = extra = work; /* dummy value--not used */
end = 19;
break;
case LENS:
base = lbase;
base -= 257;
extra = lext;
extra -= 257;
end = 256;
break;
default: /* DISTS */
base = dbase;
extra = dext;
end = -1;
}
/* initialize state for loop */
huff = 0; /* starting code */
sym = 0; /* starting code symbol */
len = min; /* starting code length */
next = *table; /* current table to fill in */
curr = root; /* current table index bits */
drop = 0; /* current bits to drop from code for index */
low = (unsigned)(-1); /* trigger new sub-table when len > root */
used = 1U << root; /* use root table entries */
mask = used - 1; /* mask for comparing low */
/* check available table space */
if ((type == LENS && used >= ENOUGH_LENS) ||
(type == DISTS && used >= ENOUGH_DISTS))
return 1;
/* process all codes and make table entries */
for (;;) {
/* create table entry */
this.bits = (unsigned char)(len - drop);
if ((int)(work[sym]) < end) {
this.op = (unsigned char)0;
this.val = work[sym];
}
else if ((int)(work[sym]) > end) {
this.op = (unsigned char)(extra[work[sym]]);
this.val = base[work[sym]];
}
else {
this.op = (unsigned char)(32 + 64); /* end of block */
this.val = 0;
}
/* replicate for those indices with low len bits equal to huff */
incr = 1U << (len - drop);
fill = 1U << curr;
do {
fill -= incr;
next[(huff >> drop) + fill] = this;
} while (fill != 0);
/* backwards increment the len-bit code huff */
incr = 1U << (len - 1);
while (huff & incr)
incr >>= 1;
if (incr != 0) {
huff &= incr - 1;
huff += incr;
}
else
huff = 0;
/* go to next symbol, update count, len */
sym++;
if (--(count[len]) == 0) {
if (len == max) break;
len = lens[work[sym]];
}
/* create new sub-table if needed */
if (len > root && (huff & mask) != low) {
/* if first time, transition to sub-tables */
if (drop == 0)
drop = root;
/* increment past last table */
next += 1U << curr;
/* determine length of next table */
curr = len - drop;
left = (int)(1 << curr);
while (curr + drop < max) {
left -= count[curr + drop];
if (left <= 0) break;
curr++;
left <<= 1;
}
/* check for enough space */
used += 1U << curr;
if ((type == LENS && used >= ENOUGH_LENS) ||
(type == DISTS && used >= ENOUGH_DISTS))
return 1;
/* point entry in root table to sub-table */
low = huff & mask;
(*table)[low].op = (unsigned char)curr;
(*table)[low].bits = (unsigned char)root;
(*table)[low].val = (unsigned short)(next - *table);
}
}
/*
Fill in rest of table for incomplete codes. This loop is similar to the
loop above in incrementing huff for table indices. It is assumed that
len is equal to curr + drop, so there is no loop needed to increment
through high index bits. When the current sub-table is filled, the loop
drops back to the root table to fill in any remaining entries there.
*/
this.op = (unsigned char)64; /* invalid code marker */
this.bits = (unsigned char)(len - drop);
this.val = (unsigned short)0;
while (huff != 0) {
/* when done with sub-table, drop back to root table */
if (drop != 0 && (huff & mask) != low) {
drop = 0;
len = root;
next = *table;
curr = root;
this.bits = (unsigned char)len;
}
/* put invalid code marker in table */
next[huff >> drop] = this;
/* backwards increment the len-bit code huff */
incr = 1U << (len - 1);
while (huff & incr)
incr >>= 1;
if (incr != 0) {
huff &= incr - 1;
huff += incr;
}
else
huff = 0;
}
/* set return parameters */
*table += used;
*bits = root;
return 0;
}
+61
View File
@@ -0,0 +1,61 @@
/* inftree9.h -- header to use inftree9.c
* Copyright (C) 1995-2008 Mark Adler
* For conditions of distribution and use, see copyright notice in zlib.h
*/
/* WARNING: this file should *not* be used by applications. It is
part of the implementation of the compression library and is
subject to change. Applications should only use zlib.h.
*/
/* Structure for decoding tables. Each entry provides either the
information needed to do the operation requested by the code that
indexed that table entry, or it provides a pointer to another
table that indexes more bits of the code. op indicates whether
the entry is a pointer to another table, a literal, a length or
distance, an end-of-block, or an invalid code. For a table
pointer, the low four bits of op is the number of index bits of
that table. For a length or distance, the low four bits of op
is the number of extra bits to get after the code. bits is
the number of bits in this code or part of the code to drop off
of the bit buffer. val is the actual byte to output in the case
of a literal, the base length or distance, or the offset from
the current table to the next table. Each entry is four bytes. */
typedef struct {
unsigned char op; /* operation, extra bits, table bits */
unsigned char bits; /* bits in this part of the code */
unsigned short val; /* offset in table or code value */
} code;
/* op values as set by inflate_table():
00000000 - literal
0000tttt - table link, tttt != 0 is the number of table index bits
100eeeee - length or distance, eeee is the number of extra bits
01100000 - end of block
01000000 - invalid code
*/
/* Maximum size of the dynamic table. The maximum number of code structures is
1446, which is the sum of 852 for literal/length codes and 594 for distance
codes. These values were found by exhaustive searches using the program
examples/enough.c found in the zlib distribtution. The arguments to that
program are the number of symbols, the initial root table size, and the
maximum bit length of a code. "enough 286 9 15" for literal/length codes
returns returns 852, and "enough 32 6 15" for distance codes returns 594.
The initial root table size (9 or 6) is found in the fifth argument of the
inflate_table() calls in infback9.c. If the root table size is changed,
then these maximum sizes would be need to be recalculated and updated. */
#define ENOUGH_LENS 852
#define ENOUGH_DISTS 594
#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
/* Type of code to build for inflate_table9() */
typedef enum {
CODES,
LENS,
DISTS
} codetype;
extern int inflate_table9 OF((codetype type, unsigned short FAR *lens,
unsigned codes, code FAR * FAR *table,
unsigned FAR *bits, unsigned short FAR *work));
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
+24
View File
@@ -0,0 +1,24 @@
#include "zfstream.h"
int main() {
// Construct a stream object with this filebuffer. Anything sent
// to this stream will go to standard out.
gzofstream os( 1, ios::out );
// This text is getting compressed and sent to stdout.
// To prove this, run 'test | zcat'.
os << "Hello, Mommy" << endl;
os << setcompressionlevel( Z_NO_COMPRESSION );
os << "hello, hello, hi, ho!" << endl;
setcompressionlevel( os, Z_DEFAULT_COMPRESSION )
<< "I'm compressing again" << endl;
os.close();
return 0;
}
+329
View File
@@ -0,0 +1,329 @@
#include "zfstream.h"
gzfilebuf::gzfilebuf() :
file(NULL),
mode(0),
own_file_descriptor(0)
{ }
gzfilebuf::~gzfilebuf() {
sync();
if ( own_file_descriptor )
close();
}
gzfilebuf *gzfilebuf::open( const char *name,
int io_mode ) {
if ( is_open() )
return NULL;
char char_mode[10];
char *p = char_mode;
if ( io_mode & ios::in ) {
mode = ios::in;
*p++ = 'r';
} else if ( io_mode & ios::app ) {
mode = ios::app;
*p++ = 'a';
} else {
mode = ios::out;
*p++ = 'w';
}
if ( io_mode & ios::binary ) {
mode |= ios::binary;
*p++ = 'b';
}
// Hard code the compression level
if ( io_mode & (ios::out|ios::app )) {
*p++ = '9';
}
// Put the end-of-string indicator
*p = '\0';
if ( (file = gzopen(name, char_mode)) == NULL )
return NULL;
own_file_descriptor = 1;
return this;
}
gzfilebuf *gzfilebuf::attach( int file_descriptor,
int io_mode ) {
if ( is_open() )
return NULL;
char char_mode[10];
char *p = char_mode;
if ( io_mode & ios::in ) {
mode = ios::in;
*p++ = 'r';
} else if ( io_mode & ios::app ) {
mode = ios::app;
*p++ = 'a';
} else {
mode = ios::out;
*p++ = 'w';
}
if ( io_mode & ios::binary ) {
mode |= ios::binary;
*p++ = 'b';
}
// Hard code the compression level
if ( io_mode & (ios::out|ios::app )) {
*p++ = '9';
}
// Put the end-of-string indicator
*p = '\0';
if ( (file = gzdopen(file_descriptor, char_mode)) == NULL )
return NULL;
own_file_descriptor = 0;
return this;
}
gzfilebuf *gzfilebuf::close() {
if ( is_open() ) {
sync();
gzclose( file );
file = NULL;
}
return this;
}
int gzfilebuf::setcompressionlevel( int comp_level ) {
return gzsetparams(file, comp_level, -2);
}
int gzfilebuf::setcompressionstrategy( int comp_strategy ) {
return gzsetparams(file, -2, comp_strategy);
}
streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) {
return streampos(EOF);
}
int gzfilebuf::underflow() {
// If the file hasn't been opened for reading, error.
if ( !is_open() || !(mode & ios::in) )
return EOF;
// if a buffer doesn't exists, allocate one.
if ( !base() ) {
if ( (allocate()) == EOF )
return EOF;
setp(0,0);
} else {
if ( in_avail() )
return (unsigned char) *gptr();
if ( out_waiting() ) {
if ( flushbuf() == EOF )
return EOF;
}
}
// Attempt to fill the buffer.
int result = fillbuf();
if ( result == EOF ) {
// disable get area
setg(0,0,0);
return EOF;
}
return (unsigned char) *gptr();
}
int gzfilebuf::overflow( int c ) {
if ( !is_open() || !(mode & ios::out) )
return EOF;
if ( !base() ) {
if ( allocate() == EOF )
return EOF;
setg(0,0,0);
} else {
if (in_avail()) {
return EOF;
}
if (out_waiting()) {
if (flushbuf() == EOF)
return EOF;
}
}
int bl = blen();
setp( base(), base() + bl);
if ( c != EOF ) {
*pptr() = c;
pbump(1);
}
return 0;
}
int gzfilebuf::sync() {
if ( !is_open() )
return EOF;
if ( out_waiting() )
return flushbuf();
return 0;
}
int gzfilebuf::flushbuf() {
int n;
char *q;
q = pbase();
n = pptr() - q;
if ( gzwrite( file, q, n) < n )
return EOF;
setp(0,0);
return 0;
}
int gzfilebuf::fillbuf() {
int required;
char *p;
p = base();
required = blen();
int t = gzread( file, p, required );
if ( t <= 0) return EOF;
setg( base(), base(), base()+t);
return t;
}
gzfilestream_common::gzfilestream_common() :
ios( gzfilestream_common::rdbuf() )
{ }
gzfilestream_common::~gzfilestream_common()
{ }
void gzfilestream_common::attach( int fd, int io_mode ) {
if ( !buffer.attach( fd, io_mode) )
clear( ios::failbit | ios::badbit );
else
clear();
}
void gzfilestream_common::open( const char *name, int io_mode ) {
if ( !buffer.open( name, io_mode ) )
clear( ios::failbit | ios::badbit );
else
clear();
}
void gzfilestream_common::close() {
if ( !buffer.close() )
clear( ios::failbit | ios::badbit );
}
gzfilebuf *gzfilestream_common::rdbuf()
{
return &buffer;
}
gzifstream::gzifstream() :
ios( gzfilestream_common::rdbuf() )
{
clear( ios::badbit );
}
gzifstream::gzifstream( const char *name, int io_mode ) :
ios( gzfilestream_common::rdbuf() )
{
gzfilestream_common::open( name, io_mode );
}
gzifstream::gzifstream( int fd, int io_mode ) :
ios( gzfilestream_common::rdbuf() )
{
gzfilestream_common::attach( fd, io_mode );
}
gzifstream::~gzifstream() { }
gzofstream::gzofstream() :
ios( gzfilestream_common::rdbuf() )
{
clear( ios::badbit );
}
gzofstream::gzofstream( const char *name, int io_mode ) :
ios( gzfilestream_common::rdbuf() )
{
gzfilestream_common::open( name, io_mode );
}
gzofstream::gzofstream( int fd, int io_mode ) :
ios( gzfilestream_common::rdbuf() )
{
gzfilestream_common::attach( fd, io_mode );
}
gzofstream::~gzofstream() { }
+128
View File
@@ -0,0 +1,128 @@
#ifndef zfstream_h
#define zfstream_h
#include <fstream.h>
#include "zlib.h"
class gzfilebuf : public streambuf {
public:
gzfilebuf( );
virtual ~gzfilebuf();
gzfilebuf *open( const char *name, int io_mode );
gzfilebuf *attach( int file_descriptor, int io_mode );
gzfilebuf *close();
int setcompressionlevel( int comp_level );
int setcompressionstrategy( int comp_strategy );
inline int is_open() const { return (file !=NULL); }
virtual streampos seekoff( streamoff, ios::seek_dir, int );
virtual int sync();
protected:
virtual int underflow();
virtual int overflow( int = EOF );
private:
gzFile file;
short mode;
short own_file_descriptor;
int flushbuf();
int fillbuf();
};
class gzfilestream_common : virtual public ios {
friend class gzifstream;
friend class gzofstream;
friend gzofstream &setcompressionlevel( gzofstream &, int );
friend gzofstream &setcompressionstrategy( gzofstream &, int );
public:
virtual ~gzfilestream_common();
void attach( int fd, int io_mode );
void open( const char *name, int io_mode );
void close();
protected:
gzfilestream_common();
private:
gzfilebuf *rdbuf();
gzfilebuf buffer;
};
class gzifstream : public gzfilestream_common, public istream {
public:
gzifstream();
gzifstream( const char *name, int io_mode = ios::in );
gzifstream( int fd, int io_mode = ios::in );
virtual ~gzifstream();
};
class gzofstream : public gzfilestream_common, public ostream {
public:
gzofstream();
gzofstream( const char *name, int io_mode = ios::out );
gzofstream( int fd, int io_mode = ios::out );
virtual ~gzofstream();
};
template<class T> class gzomanip {
friend gzofstream &operator<<(gzofstream &, const gzomanip<T> &);
public:
gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { }
private:
gzofstream &(*func)(gzofstream &, T);
T val;
};
template<class T> gzofstream &operator<<(gzofstream &s, const gzomanip<T> &m)
{
return (*m.func)(s, m.val);
}
inline gzofstream &setcompressionlevel( gzofstream &s, int l )
{
(s.rdbuf())->setcompressionlevel(l);
return s;
}
inline gzofstream &setcompressionstrategy( gzofstream &s, int l )
{
(s.rdbuf())->setcompressionstrategy(l);
return s;
}
inline gzomanip<int> setcompressionlevel(int l)
{
return gzomanip<int>(&setcompressionlevel,l);
}
inline gzomanip<int> setcompressionstrategy(int l)
{
return gzomanip<int>(&setcompressionstrategy,l);
}
#endif
+307
View File
@@ -0,0 +1,307 @@
/*
*
* Copyright (c) 1997
* Christian Michelsen Research AS
* Advanced Computing
* Fantoftvegen 38, 5036 BERGEN, Norway
* http://www.cmr.no
*
* Permission to use, copy, modify, distribute and sell this software
* and its documentation for any purpose is hereby granted without fee,
* provided that the above copyright notice appear in all copies and
* that both that copyright notice and this permission notice appear
* in supporting documentation. Christian Michelsen Research AS makes no
* representations about the suitability of this software for any
* purpose. It is provided "as is" without express or implied warranty.
*
*/
#ifndef ZSTREAM__H
#define ZSTREAM__H
/*
* zstream.h - C++ interface to the 'zlib' general purpose compression library
* $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $
*/
#include <strstream.h>
#include <string.h>
#include <stdio.h>
#include "zlib.h"
#if defined(_WIN32)
# include <fcntl.h>
# include <io.h>
# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
#else
# define SET_BINARY_MODE(file)
#endif
class zstringlen {
public:
zstringlen(class izstream&);
zstringlen(class ozstream&, const char*);
size_t value() const { return val.word; }
private:
struct Val { unsigned char byte; size_t word; } val;
};
// ----------------------------- izstream -----------------------------
class izstream
{
public:
izstream() : m_fp(0) {}
izstream(FILE* fp) : m_fp(0) { open(fp); }
izstream(const char* name) : m_fp(0) { open(name); }
~izstream() { close(); }
/* Opens a gzip (.gz) file for reading.
* open() can be used to read a file which is not in gzip format;
* in this case read() will directly read from the file without
* decompression. errno can be checked to distinguish two error
* cases (if errno is zero, the zlib error is Z_MEM_ERROR).
*/
void open(const char* name) {
if (m_fp) close();
m_fp = ::gzopen(name, "rb");
}
void open(FILE* fp) {
SET_BINARY_MODE(fp);
if (m_fp) close();
m_fp = ::gzdopen(fileno(fp), "rb");
}
/* Flushes all pending input if necessary, closes the compressed file
* and deallocates all the (de)compression state. The return value is
* the zlib error number (see function error() below).
*/
int close() {
int r = ::gzclose(m_fp);
m_fp = 0; return r;
}
/* Binary read the given number of bytes from the compressed file.
*/
int read(void* buf, size_t len) {
return ::gzread(m_fp, buf, len);
}
/* Returns the error message for the last error which occurred on the
* given compressed file. errnum is set to zlib error number. If an
* error occurred in the file system and not in the compression library,
* errnum is set to Z_ERRNO and the application may consult errno
* to get the exact error code.
*/
const char* error(int* errnum) {
return ::gzerror(m_fp, errnum);
}
gzFile fp() { return m_fp; }
private:
gzFile m_fp;
};
/*
* Binary read the given (array of) object(s) from the compressed file.
* If the input file was not in gzip format, read() copies the objects number
* of bytes into the buffer.
* returns the number of uncompressed bytes actually read
* (0 for end of file, -1 for error).
*/
template <class T, class Items>
inline int read(izstream& zs, T* x, Items items) {
return ::gzread(zs.fp(), x, items*sizeof(T));
}
/*
* Binary input with the '>' operator.
*/
template <class T>
inline izstream& operator>(izstream& zs, T& x) {
::gzread(zs.fp(), &x, sizeof(T));
return zs;
}
inline zstringlen::zstringlen(izstream& zs) {
zs > val.byte;
if (val.byte == 255) zs > val.word;
else val.word = val.byte;
}
/*
* Read length of string + the string with the '>' operator.
*/
inline izstream& operator>(izstream& zs, char* x) {
zstringlen len(zs);
::gzread(zs.fp(), x, len.value());
x[len.value()] = '\0';
return zs;
}
inline char* read_string(izstream& zs) {
zstringlen len(zs);
char* x = new char[len.value()+1];
::gzread(zs.fp(), x, len.value());
x[len.value()] = '\0';
return x;
}
// ----------------------------- ozstream -----------------------------
class ozstream
{
public:
ozstream() : m_fp(0), m_os(0) {
}
ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION)
: m_fp(0), m_os(0) {
open(fp, level);
}
ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION)
: m_fp(0), m_os(0) {
open(name, level);
}
~ozstream() {
close();
}
/* Opens a gzip (.gz) file for writing.
* The compression level parameter should be in 0..9
* errno can be checked to distinguish two error cases
* (if errno is zero, the zlib error is Z_MEM_ERROR).
*/
void open(const char* name, int level = Z_DEFAULT_COMPRESSION) {
char mode[4] = "wb\0";
if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
if (m_fp) close();
m_fp = ::gzopen(name, mode);
}
/* open from a FILE pointer.
*/
void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) {
SET_BINARY_MODE(fp);
char mode[4] = "wb\0";
if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level;
if (m_fp) close();
m_fp = ::gzdopen(fileno(fp), mode);
}
/* Flushes all pending output if necessary, closes the compressed file
* and deallocates all the (de)compression state. The return value is
* the zlib error number (see function error() below).
*/
int close() {
if (m_os) {
::gzwrite(m_fp, m_os->str(), m_os->pcount());
delete[] m_os->str(); delete m_os; m_os = 0;
}
int r = ::gzclose(m_fp); m_fp = 0; return r;
}
/* Binary write the given number of bytes into the compressed file.
*/
int write(const void* buf, size_t len) {
return ::gzwrite(m_fp, (voidp) buf, len);
}
/* Flushes all pending output into the compressed file. The parameter
* _flush is as in the deflate() function. The return value is the zlib
* error number (see function gzerror below). flush() returns Z_OK if
* the flush_ parameter is Z_FINISH and all output could be flushed.
* flush() should be called only when strictly necessary because it can
* degrade compression.
*/
int flush(int _flush) {
os_flush();
return ::gzflush(m_fp, _flush);
}
/* Returns the error message for the last error which occurred on the
* given compressed file. errnum is set to zlib error number. If an
* error occurred in the file system and not in the compression library,
* errnum is set to Z_ERRNO and the application may consult errno
* to get the exact error code.
*/
const char* error(int* errnum) {
return ::gzerror(m_fp, errnum);
}
gzFile fp() { return m_fp; }
ostream& os() {
if (m_os == 0) m_os = new ostrstream;
return *m_os;
}
void os_flush() {
if (m_os && m_os->pcount()>0) {
ostrstream* oss = new ostrstream;
oss->fill(m_os->fill());
oss->flags(m_os->flags());
oss->precision(m_os->precision());
oss->width(m_os->width());
::gzwrite(m_fp, m_os->str(), m_os->pcount());
delete[] m_os->str(); delete m_os; m_os = oss;
}
}
private:
gzFile m_fp;
ostrstream* m_os;
};
/*
* Binary write the given (array of) object(s) into the compressed file.
* returns the number of uncompressed bytes actually written
* (0 in case of error).
*/
template <class T, class Items>
inline int write(ozstream& zs, const T* x, Items items) {
return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T));
}
/*
* Binary output with the '<' operator.
*/
template <class T>
inline ozstream& operator<(ozstream& zs, const T& x) {
::gzwrite(zs.fp(), (voidp) &x, sizeof(T));
return zs;
}
inline zstringlen::zstringlen(ozstream& zs, const char* x) {
val.byte = 255; val.word = ::strlen(x);
if (val.word < 255) zs < (val.byte = val.word);
else zs < val;
}
/*
* Write length of string + the string with the '<' operator.
*/
inline ozstream& operator<(ozstream& zs, const char* x) {
zstringlen len(zs, x);
::gzwrite(zs.fp(), (voidp) x, len.value());
return zs;
}
#ifdef _MSC_VER
inline ozstream& operator<(ozstream& zs, char* const& x) {
return zs < (const char*) x;
}
#endif
/*
* Ascii write with the << operator;
*/
template <class T>
inline ostream& operator<<(ozstream& zs, const T& x) {
zs.os_flush();
return zs.os() << x;
}
#endif
Loaded 100 of 1618 files, more files were not shown because too many files have changed in this diff. Show more