summaryrefslogtreecommitdiffstats
path: root/Python/thread.c
diff options
context:
space:
mode:
authorKumar Aditya <59607654+kumaraditya303@users.noreply.github.com>2022-06-28 16:14:47 (GMT)
committerGitHub <noreply@github.com>2022-06-28 16:14:47 (GMT)
commit079ea445706e2afae8f1bcc53fe967b0839b310c (patch)
tree1aa5129a6e69b9aea8a456a2b3e1beafa3fbcb12 /Python/thread.c
parentf6b6b5af784c3b977854e404aaf7c936c517bc4e (diff)
downloadcpython-079ea445706e2afae8f1bcc53fe967b0839b310c.zip
cpython-079ea445706e2afae8f1bcc53fe967b0839b310c.tar.gz
cpython-079ea445706e2afae8f1bcc53fe967b0839b310c.tar.bz2
[3.10] GH-89988: Fix memory leak in pickle.Pickler dispatch_table lookup (GH-94298) (#94385)
Diffstat (limited to 'Python/thread.c')
0 files changed, 0 insertions, 0 deletions
ug_3562640'>bug_3562640 Tcl is a high-level, general-purpose, interpreted, dynamic programming language. It was designed with the goal of being very simple but powerful.
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat
-rw-r--r--.fossil-settings/binary-glob3
-rw-r--r--.fossil-settings/crnl-glob0
-rw-r--r--.fossil-settings/ignore-glob24
-rw-r--r--.project11
-rw-r--r--.settings/org.eclipse.core.resources.prefs2
-rw-r--r--.settings/org.eclipse.core.runtime.prefs2
-rw-r--r--ChangeLog13926
-rw-r--r--ChangeLog.19992738
-rw-r--r--ChangeLog.20001872
-rw-r--r--ChangeLog.20013025
-rw-r--r--ChangeLog.20024741
-rw-r--r--ChangeLog.20033349
-rw-r--r--ChangeLog.20044619
-rw-r--r--ChangeLog.20053822
-rw-r--r--ChangeLog.20075921
-rw-r--r--ChangeLog.20083796
-rw-r--r--README117
-rw-r--r--changes2415
-rw-r--r--compat/README2
-rw-r--r--compat/dirent.h2
-rw-r--r--compat/dirent2.h12
-rw-r--r--compat/dlfcn.h21
-rw-r--r--compat/fake-rfc2553.c266
-rw-r--r--compat/fake-rfc2553.h170
-rw-r--r--compat/fixstrtod.c10
-rw-r--r--compat/float.h2
-rw-r--r--compat/gettod.c10
-rw-r--r--compat/limits.h2
-rw-r--r--compat/memcmp.c51
-rw-r--r--compat/mkstemp.c78
-rw-r--r--compat/opendir.c126
-rw-r--r--compat/stdlib.h53
-rw-r--r--compat/strftime.c513
-rw-r--r--compat/string.h80
-rw-r--r--compat/strncasecmp.c48
-rw-r--r--compat/strstr.c34
-rw-r--r--compat/strtod.c76
-rw-r--r--compat/strtol.c44
-rw-r--r--compat/strtoll.c111
-rw-r--r--compat/strtoul.c76
-rw-r--r--compat/strtoull.c261
-rw-r--r--compat/tclErrno.h99
-rw-r--r--compat/tmpnam.c42
-rw-r--r--compat/unistd.h114
-rw-r--r--compat/waitpid.c94
-rw-r--r--compat/zlib/CMakeLists.txt249
-rw-r--r--compat/zlib/ChangeLog1472
-rw-r--r--compat/zlib/FAQ368
-rw-r--r--compat/zlib/INDEX68
-rw-r--r--compat/zlib/Makefile5
-rw-r--r--compat/zlib/Makefile.in288
-rw-r--r--compat/zlib/README115
-rw-r--r--compat/zlib/adler32.c179
-rw-r--r--compat/zlib/amiga/Makefile.pup69
-rw-r--r--compat/zlib/amiga/Makefile.sas68
-rw-r--r--compat/zlib/as400/bndsrc215
-rw-r--r--compat/zlib/as400/compile.clp110
-rw-r--r--compat/zlib/as400/readme.txt115
-rw-r--r--compat/zlib/as400/zlib.inc451
-rw-r--r--compat/zlib/compress.c80
-rwxr-xr-xcompat/zlib/configure831
-rw-r--r--compat/zlib/contrib/README.contrib78
-rw-r--r--compat/zlib/contrib/ada/buffer_demo.adb106
-rw-r--r--compat/zlib/contrib/ada/mtest.adb156
-rw-r--r--compat/zlib/contrib/ada/read.adb156
-rw-r--r--compat/zlib/contrib/ada/readme.txt65
-rw-r--r--compat/zlib/contrib/ada/test.adb463
-rw-r--r--compat/zlib/contrib/ada/zlib-streams.adb225
-rw-r--r--compat/zlib/contrib/ada/zlib-streams.ads114
-rw-r--r--compat/zlib/contrib/ada/zlib-thin.adb141
-rw-r--r--compat/zlib/contrib/ada/zlib-thin.ads450
-rw-r--r--compat/zlib/contrib/ada/zlib.adb701
-rw-r--r--compat/zlib/contrib/ada/zlib.ads328
-rw-r--r--compat/zlib/contrib/ada/zlib.gpr20
-rw-r--r--compat/zlib/contrib/amd64/amd64-match.S452
-rw-r--r--compat/zlib/contrib/asm686/README.68651
-rw-r--r--compat/zlib/contrib/asm686/match.S357
-rw-r--r--compat/zlib/contrib/blast/Makefile8
-rw-r--r--compat/zlib/contrib/blast/README4
-rw-r--r--compat/zlib/contrib/blast/blast.c446
-rw-r--r--compat/zlib/contrib/blast/blast.h75
-rw-r--r--compat/zlib/contrib/blast/test.pkbin0 -> 8 bytes
-rw-r--r--compat/zlib/contrib/blast/test.txt1
-rw-r--r--compat/zlib/contrib/delphi/ZLib.pas557
-rw-r--r--compat/zlib/contrib/delphi/ZLibConst.pas11
-rw-r--r--compat/zlib/contrib/delphi/readme.txt76
-rw-r--r--compat/zlib/contrib/delphi/zlibd32.mak99
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib.build33
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib.chmbin0 -> 72726 bytes
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib.sln21
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs58
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs202
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs83
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/CodecBase.cs198
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/Deflater.cs106
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/DotZLib.cs288
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj141
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/GZipStream.cs301
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/Inflater.cs105
-rw-r--r--compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs274
-rw-r--r--compat/zlib/contrib/dotzlib/LICENSE_1_0.txt23
-rw-r--r--compat/zlib/contrib/dotzlib/readme.txt58
-rw-r--r--compat/zlib/contrib/gcc_gvmat64/gvmat64.S574
-rw-r--r--compat/zlib/contrib/infback9/README1
-rw-r--r--compat/zlib/contrib/infback9/infback9.c615
-rw-r--r--compat/zlib/contrib/infback9/infback9.h37
-rw-r--r--compat/zlib/contrib/infback9/inffix9.h107
-rw-r--r--compat/zlib/contrib/infback9/inflate9.h47
-rw-r--r--compat/zlib/contrib/infback9/inftree9.c324
-rw-r--r--compat/zlib/contrib/infback9/inftree9.h61
-rw-r--r--compat/zlib/contrib/inflate86/inffas86.c1157
-rw-r--r--compat/zlib/contrib/inflate86/inffast.S1368
-rw-r--r--compat/zlib/contrib/iostream/test.cpp24
-rw-r--r--compat/zlib/contrib/iostream/zfstream.cpp329
-rw-r--r--compat/zlib/contrib/iostream/zfstream.h128
-rw-r--r--compat/zlib/contrib/iostream2/zstream.h307
-rw-r--r--compat/zlib/contrib/iostream2/zstream_test.cpp25
-rw-r--r--compat/zlib/contrib/iostream3/README35
-rw-r--r--compat/zlib/contrib/iostream3/TODO17
-rw-r--r--compat/zlib/contrib/iostream3/test.cc50
-rw-r--r--compat/zlib/contrib/iostream3/zfstream.cc479
-rw-r--r--compat/zlib/contrib/iostream3/zfstream.h466
-rw-r--r--compat/zlib/contrib/masmx64/bld_ml64.bat2
-rw-r--r--compat/zlib/contrib/masmx64/gvmat64.asm553
-rw-r--r--compat/zlib/contrib/masmx64/inffas8664.c186
-rw-r--r--compat/zlib/contrib/masmx64/inffasx64.asm396
-rw-r--r--compat/zlib/contrib/masmx64/readme.txt31
-rw-r--r--compat/zlib/contrib/masmx86/bld_ml32.bat2
-rw-r--r--compat/zlib/contrib/masmx86/inffas32.asm1080
-rw-r--r--compat/zlib/contrib/masmx86/match686.asm479
-rw-r--r--compat/zlib/contrib/masmx86/readme.txt27
-rw-r--r--compat/zlib/contrib/minizip/Makefile25
-rw-r--r--compat/zlib/contrib/minizip/Makefile.am45
-rw-r--r--compat/zlib/contrib/minizip/MiniZip64_Changes.txt6
-rw-r--r--compat/zlib/contrib/minizip/MiniZip64_info.txt74
-rw-r--r--compat/zlib/contrib/minizip/configure.ac32
-rw-r--r--compat/zlib/contrib/minizip/crypt.h131
-rw-r--r--compat/zlib/contrib/minizip/ioapi.c247
-rw-r--r--compat/zlib/contrib/minizip/ioapi.h208
-rw-r--r--compat/zlib/contrib/minizip/iowin32.c461
-rw-r--r--compat/zlib/contrib/minizip/iowin32.h28
-rw-r--r--compat/zlib/contrib/minizip/make_vms.com25
-rw-r--r--compat/zlib/contrib/minizip/miniunz.c660
-rw-r--r--compat/zlib/contrib/minizip/miniunzip.163
-rw-r--r--compat/zlib/contrib/minizip/minizip.146
-rw-r--r--compat/zlib/contrib/minizip/minizip.c520
-rw-r--r--compat/zlib/contrib/minizip/minizip.pc.in12
-rw-r--r--compat/zlib/contrib/minizip/mztools.c291
-rw-r--r--compat/zlib/contrib/minizip/mztools.h37
-rw-r--r--compat/zlib/contrib/minizip/unzip.c2125
-rw-r--r--compat/zlib/contrib/minizip/unzip.h437
-rw-r--r--compat/zlib/contrib/minizip/zip.c2007
-rw-r--r--compat/zlib/contrib/minizip/zip.h362
-rw-r--r--compat/zlib/contrib/pascal/example.pas599
-rw-r--r--compat/zlib/contrib/pascal/readme.txt76
-rw-r--r--compat/zlib/contrib/pascal/zlibd32.mak99
-rw-r--r--compat/zlib/contrib/pascal/zlibpas.pas276
-rw-r--r--compat/zlib/contrib/puff/Makefile42
-rw-r--r--compat/zlib/contrib/puff/README63
-rw-r--r--compat/zlib/contrib/puff/puff.c840
-rw-r--r--compat/zlib/contrib/puff/puff.h35
-rw-r--r--compat/zlib/contrib/puff/pufftest.c165
-rw-r--r--compat/zlib/contrib/puff/zeros.rawbin0 -> 2517 bytes
-rw-r--r--compat/zlib/contrib/testzlib/testzlib.c275
-rw-r--r--compat/zlib/contrib/testzlib/testzlib.txt10
-rw-r--r--compat/zlib/contrib/untgz/Makefile14
-rw-r--r--compat/zlib/contrib/untgz/Makefile.msc17
-rw-r--r--compat/zlib/contrib/untgz/untgz.c674
-rw-r--r--compat/zlib/contrib/vstudio/readme.txt65
-rw-r--r--compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj310
-rw-r--r--compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters22
-rw-r--r--compat/zlib/contrib/vstudio/vc10/minizip.vcxproj307
-rw-r--r--compat/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters22
-rw-r--r--compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj420
-rw-r--r--compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters58
-rw-r--r--compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj310
-rw-r--r--compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters22
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlib.rc32
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj473
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters77
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibvc.def143
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibvc.sln135
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj657
-rw-r--r--compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters118
-rw-r--r--compat/zlib/contrib/vstudio/vc11/miniunz.vcxproj314
-rw-r--r--compat/zlib/contrib/vstudio/vc11/minizip.vcxproj311
-rw-r--r--compat/zlib/contrib/vstudio/vc11/testzlib.vcxproj426
-rw-r--r--compat/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj314
-rw-r--r--compat/zlib/contrib/vstudio/vc11/zlib.rc32
-rw-r--r--compat/zlib/contrib/vstudio/vc11/zlibstat.vcxproj464
-rw-r--r--compat/zlib/contrib/vstudio/vc11/zlibvc.def143
-rw-r--r--compat/zlib/contrib/vstudio/vc11/zlibvc.sln117
-rw-r--r--compat/zlib/contrib/vstudio/vc11/zlibvc.vcxproj688
-rw-r--r--compat/zlib/contrib/vstudio/vc9/miniunz.vcproj565
-rw-r--r--compat/zlib/contrib/vstudio/vc9/minizip.vcproj562
-rw-r--r--compat/zlib/contrib/vstudio/vc9/testzlib.vcproj852
-rw-r--r--compat/zlib/contrib/vstudio/vc9/testzlibdll.vcproj565
-rw-r--r--compat/zlib/contrib/vstudio/vc9/zlib.rc32
-rw-r--r--compat/zlib/contrib/vstudio/vc9/zlibstat.vcproj835
-rw-r--r--compat/zlib/contrib/vstudio/vc9/zlibvc.def143
-rw-r--r--compat/zlib/contrib/vstudio/vc9/zlibvc.sln144
-rw-r--r--compat/zlib/contrib/vstudio/vc9/zlibvc.vcproj1156
-rw-r--r--compat/zlib/crc32.c425
-rw-r--r--compat/zlib/crc32.h441
-rw-r--r--compat/zlib/deflate.c1967
-rw-r--r--compat/zlib/deflate.h346
-rw-r--r--compat/zlib/doc/algorithm.txt209
-rw-r--r--compat/zlib/doc/rfc1950.txt619
-rw-r--r--compat/zlib/doc/rfc1951.txt955
-rw-r--r--compat/zlib/doc/rfc1952.txt675
-rw-r--r--compat/zlib/doc/txtvsbin.txt107
-rw-r--r--compat/zlib/examples/README.examples49
-rw-r--r--compat/zlib/examples/enough.c572
-rw-r--r--compat/zlib/examples/fitblk.c233
-rw-r--r--compat/zlib/examples/gun.c702
-rw-r--r--compat/zlib/examples/gzappend.c504
-rw-r--r--compat/zlib/examples/gzjoin.c449
-rw-r--r--compat/zlib/examples/gzlog.c1059
-rw-r--r--compat/zlib/examples/gzlog.h91
-rw-r--r--compat/zlib/examples/zlib_how.html545
-rw-r--r--compat/zlib/examples/zpipe.c205
-rw-r--r--compat/zlib/examples/zran.c409
-rw-r--r--compat/zlib/gzclose.c25
-rw-r--r--compat/zlib/gzguts.h209
-rw-r--r--compat/zlib/gzlib.c634
-rw-r--r--compat/zlib/gzread.c594
-rw-r--r--compat/zlib/gzwrite.c577
-rw-r--r--compat/zlib/infback.c640
-rw-r--r--compat/zlib/inffast.c340
-rw-r--r--compat/zlib/inffast.h11
-rw-r--r--compat/zlib/inffixed.h94
-rw-r--r--compat/zlib/inflate.c1512
-rw-r--r--compat/zlib/inflate.h122
-rw-r--r--compat/zlib/inftrees.c306
-rw-r--r--compat/zlib/inftrees.h62
-rw-r--r--compat/zlib/make_vms.com867
-rw-r--r--compat/zlib/msdos/Makefile.bor115
-rw-r--r--compat/zlib/msdos/Makefile.dj2104
-rw-r--r--compat/zlib/msdos/Makefile.emx69
-rw-r--r--compat/zlib/msdos/Makefile.msc112
-rw-r--r--compat/zlib/msdos/Makefile.tc100
-rw-r--r--compat/zlib/nintendods/Makefile126
-rw-r--r--compat/zlib/nintendods/README5
-rw-r--r--compat/zlib/old/Makefile.emx69
-rw-r--r--compat/zlib/old/Makefile.riscos151
-rw-r--r--compat/zlib/old/README3
-rw-r--r--compat/zlib/old/descrip.mms48
-rw-r--r--compat/zlib/old/os2/Makefile.os2136
-rw-r--r--compat/zlib/old/os2/zlib.def51
-rw-r--r--compat/zlib/old/visual-basic.txt160
-rw-r--r--compat/zlib/qnx/package.qpg141
-rw-r--r--compat/zlib/test/example.c601
-rw-r--r--compat/zlib/test/infcover.c671
-rw-r--r--compat/zlib/test/minigzip.c651
-rw-r--r--compat/zlib/treebuild.xml116
-rw-r--r--compat/zlib/trees.c1226
-rw-r--r--compat/zlib/trees.h128
-rw-r--r--compat/zlib/uncompr.c59
-rw-r--r--compat/zlib/watcom/watcom_f.mak43
-rw-r--r--compat/zlib/watcom/watcom_l.mak43
-rw-r--r--compat/zlib/win32/DLL_FAQ.txt397
-rw-r--r--compat/zlib/win32/Makefile.bor110
-rw-r--r--compat/zlib/win32/Makefile.gcc182
-rw-r--r--compat/zlib/win32/Makefile.msc163
-rw-r--r--compat/zlib/win32/README-WIN32.txt103
-rw-r--r--compat/zlib/win32/README.txt60
-rw-r--r--compat/zlib/win32/USAGE.txt89
-rw-r--r--compat/zlib/win32/VisualC.txt3
-rw-r--r--compat/zlib/win32/zdll.libbin0 -> 15658 bytes
-rw-r--r--compat/zlib/win32/zlib.def86
-rwxr-xr-xcompat/zlib/win32/zlib1.dllbin0 -> 107520 bytes
-rw-r--r--compat/zlib/win32/zlib1.rc40
-rw-r--r--compat/zlib/win64/libz.dll.abin0 -> 46874 bytes
-rw-r--r--compat/zlib/win64/zdll.libbin0 -> 15288 bytes
-rwxr-xr-xcompat/zlib/win64/zlib1.dllbin0 -> 112640 bytes
-rw-r--r--compat/zlib/zconf.h511
-rw-r--r--compat/zlib/zconf.h.cmakein513
-rw-r--r--compat/zlib/zconf.h.in511
-rw-r--r--compat/zlib/zlib.3151
-rw-r--r--compat/zlib/zlib.3.pdfbin0 -> 8734 bytes
-rw-r--r--compat/zlib/zlib.h1768
-rw-r--r--compat/zlib/zlib.map83
-rw-r--r--compat/zlib/zlib.pc.cmakein13
-rw-r--r--compat/zlib/zlib.pc.in13
-rw-r--r--compat/zlib/zlib2ansi152
-rw-r--r--compat/zlib/zutil.c324
-rw-r--r--compat/zlib/zutil.h253
-rw-r--r--doc/Access.377
-rw-r--r--doc/AddErrInfo.3307
-rw-r--r--doc/Alloc.316
-rw-r--r--doc/AllowExc.312
-rw-r--r--doc/AppInit.326
-rw-r--r--doc/AssocData.322
-rw-r--r--doc/Async.340
-rw-r--r--doc/BackgdErr.372
-rw-r--r--doc/Backslash.312
-rw-r--r--doc/BoolObj.3110
-rw-r--r--doc/ByteArrObj.364
-rw-r--r--doc/CallDel.324
-rw-r--r--doc/Cancel.366
-rw-r--r--doc/ChnlStack.326
-rw-r--r--doc/Class.3236
-rw-r--r--doc/CmdCmplt.38
-rw-r--r--doc/Concat.312
-rw-r--r--doc/CrtChannel.3446
-rw-r--r--doc/CrtChnlHdlr.315
-rw-r--r--doc/CrtCloseHdlr.312
-rw-r--r--doc/CrtCommand.365
-rw-r--r--doc/CrtFileHdlr.329
-rw-r--r--doc/CrtInterp.367
-rw-r--r--doc/CrtMathFnc.3111
-rw-r--r--doc/CrtObjCmd.386
-rw-r--r--doc/CrtSlave.393
-rw-r--r--doc/CrtTimerHdlr.322
-rw-r--r--doc/CrtTrace.357
-rw-r--r--doc/DString.332
-rw-r--r--doc/DetachPids.320
-rw-r--r--doc/DictObj.3234
-rw-r--r--doc/DoOneEvent.312
-rw-r--r--doc/DoWhenIdle.317
-rw-r--r--doc/DoubleObj.375
-rw-r--r--doc/DumpActiveMemory.39
-rw-r--r--doc/Encoding.3236
-rw-r--r--doc/Ensemble.3219
-rw-r--r--doc/Environment.324
-rw-r--r--doc/Eval.374
-rw-r--r--doc/Exit.351
-rw-r--r--doc/ExprLong.342
-rw-r--r--doc/ExprLongObj.324
-rw-r--r--doc/FileSystem.31625
-rw-r--r--doc/FindExec.315
-rw-r--r--[-rwxr-xr-x]doc/GetCwd.38
-rw-r--r--doc/GetHostName.36
-rw-r--r--doc/GetIndex.368
-rw-r--r--doc/GetInt.359
-rw-r--r--doc/GetOpnFl.325
-rw-r--r--doc/GetStdChan.321
-rw-r--r--doc/GetTime.380
-rw-r--r--[-rwxr-xr-x]doc/GetVersion.35
-rw-r--r--doc/Hash.3173
-rw-r--r--doc/Init.311
-rw-r--r--doc/InitStubs.320
-rw-r--r--doc/IntObj.3197
-rw-r--r--doc/Interp.346
-rw-r--r--doc/Limit.3192
-rw-r--r--doc/LinkVar.3130
-rw-r--r--doc/ListObj.3152
-rw-r--r--doc/Load.370
-rw-r--r--doc/Macintosh.3111
-rw-r--r--doc/Method.3249
-rw-r--r--doc/NRE.3328
-rw-r--r--doc/Namespace.3165
-rw-r--r--doc/Notifier.3185
-rw-r--r--doc/OOInitStubs.354
-rw-r--r--doc/Object.3263
-rw-r--r--doc/ObjectType.3214
-rw-r--r--doc/OpenFileChnl.3147
-rw-r--r--doc/OpenTcp.354
-rw-r--r--doc/Panic.355
-rw-r--r--doc/ParseArgs.3198
-rw-r--r--doc/ParseCmd.3121
-rw-r--r--doc/PkgRequire.346
-rw-r--r--doc/Preserve.316
-rw-r--r--doc/PrintDbl.332
-rw-r--r--doc/RecEvalObj.326
-rw-r--r--doc/RecordEval.326
-rw-r--r--doc/RegConfig.3111
-rw-r--r--doc/RegExp.3205
-rw-r--r--doc/SaveResult.393
-rw-r--r--doc/SetChanErr.3140
-rw-r--r--doc/SetErrno.315
-rw-r--r--doc/SetRecLmt.34
-rw-r--r--doc/SetResult.3182
-rw-r--r--doc/SetVar.372
-rw-r--r--doc/Signal.315
-rw-r--r--doc/Sleep.39
-rw-r--r--doc/SourceRCFile.310
-rw-r--r--doc/SplitList.335
-rw-r--r--doc/SplitPath.317
-rw-r--r--doc/StaticPkg.323
-rw-r--r--doc/StdChannels.339
-rw-r--r--doc/StrMatch.331
-rw-r--r--doc/StringObj.3260
-rw-r--r--doc/SubstObj.327
-rw-r--r--doc/TCL_MEM_DEBUG.343
-rw-r--r--doc/Tcl.n163
-rw-r--r--doc/TclZlib.3276
-rw-r--r--doc/Tcl_Main.3117
-rw-r--r--doc/Thread.3168
-rw-r--r--doc/ToUpper.36
-rw-r--r--doc/TraceCmd.363
-rw-r--r--doc/TraceVar.3113
-rw-r--r--doc/Translate.333
-rw-r--r--doc/UniCharIsAlpha.37
-rw-r--r--doc/UpVar.325
-rw-r--r--doc/Utf.3104
-rw-r--r--doc/WrongNumArgs.339
-rw-r--r--doc/after.n41
-rw-r--r--doc/append.n22
-rw-r--r--doc/apply.n102
-rw-r--r--doc/array.n44
-rw-r--r--doc/bgerror.n52
-rw-r--r--doc/binary.n601
-rw-r--r--doc/break.n22
-rw-r--r--doc/case.n4
-rw-r--r--doc/catch.n126
-rw-r--r--doc/cd.n10
-rw-r--r--doc/chan.n836
-rw-r--r--doc/class.n136
-rw-r--r--doc/clock.n1127
-rw-r--r--doc/close.n61
-rw-r--r--doc/concat.n46
-rw-r--r--doc/continue.n24
-rw-r--r--doc/copy.n66
-rw-r--r--doc/coroutine.n205
-rw-r--r--doc/dde.n103
-rw-r--r--doc/define.n404
-rw-r--r--doc/dict.n441
-rw-r--r--doc/encoding.n68
-rw-r--r--doc/eof.n10
-rw-r--r--doc/error.n66
-rw-r--r--doc/eval.n70
-rw-r--r--doc/exec.n291
-rw-r--r--doc/exit.n20
-rw-r--r--doc/expr.n462
-rw-r--r--doc/fblocked.n6
-rw-r--r--doc/fconfigure.n103
-rw-r--r--doc/fcopy.n138
-rw-r--r--doc/file.n348
-rw-r--r--doc/fileevent.n72
-rw-r--r--doc/filename.n156
-rw-r--r--doc/flush.n11
-rw-r--r--doc/for.n31
-rw-r--r--doc/foreach.n40
-rw-r--r--doc/format.n128
-rw-r--r--doc/gets.n16
-rw-r--r--doc/glob.n249
-rw-r--r--doc/global.n23
-rw-r--r--doc/history.n26
-rw-r--r--doc/http.n422
-rw-r--r--doc/if.n33
-rw-r--r--doc/incr.n20
-rw-r--r--doc/info.n605
-rw-r--r--doc/interp.n482
-rw-r--r--doc/join.n14
-rw-r--r--doc/lappend.n26
-rw-r--r--doc/lassign.n60
-rw-r--r--doc/library.n105
-rw-r--r--doc/lindex.n102
-rw-r--r--doc/linsert.n37
-rw-r--r--doc/list.n27
-rw-r--r--doc/llength.n16
-rw-r--r--doc/lmap.n85
-rw-r--r--doc/load.n86
-rw-r--r--doc/lrange.n37
-rw-r--r--doc/lrepeat.n38
-rw-r--r--doc/lreplace.n64
-rw-r--r--doc/lreverse.n34
-rw-r--r--doc/lsearch.n260
-rw-r--r--[-rwxr-xr-x]doc/lset.n97
-rw-r--r--doc/lsort.n188
-rw-r--r--doc/man.macros203
-rw-r--r--doc/mathfunc.n305
-rw-r--r--doc/mathop.n310
-rw-r--r--doc/memory.n41
-rw-r--r--doc/msgcat.n192
-rw-r--r--doc/my.n56
-rw-r--r--doc/namespace.n551
-rw-r--r--doc/next.n206
-rw-r--r--doc/object.n128
-rw-r--r--doc/open.n185
-rw-r--r--doc/package.n237
-rw-r--r--doc/packagens.n19
-rw-r--r--doc/pid.n6
-rw-r--r--doc/pkgMkIndex.n75
-rw-r--r--doc/platform.n86
-rw-r--r--doc/platform_shell.n57
-rw-r--r--doc/prefix.n116
-rw-r--r--doc/proc.n53
-rw-r--r--doc/puts.n19
-rw-r--r--doc/pwd.n11
-rw-r--r--doc/re_syntax.n1270
-rw-r--r--doc/read.n25
-rw-r--r--doc/refchan.n411
-rw-r--r--doc/regexp.n123
-rw-r--r--doc/registry.n80
-rw-r--r--doc/regsub.n138
-rw-r--r--doc/rename.n9
-rw-r--r--doc/resource.n155
-rw-r--r--doc/return.n318
-rw-r--r--doc/safe.n85
-rw-r--r--doc/scan.n243
-rw-r--r--doc/seek.n27
-rw-r--r--doc/self.n152
-rw-r--r--doc/set.n16
-rw-r--r--doc/socket.n174
-rw-r--r--doc/source.n46
-rw-r--r--doc/split.n43
-rw-r--r--doc/string.n309
-rw-r--r--doc/subst.n97
-rw-r--r--doc/switch.n115
-rw-r--r--doc/tailcall.n69
-rw-r--r--doc/tclsh.169
-rw-r--r--doc/tcltest.n1084
-rw-r--r--doc/tclvars.n462
-rw-r--r--doc/tell.n13
-rw-r--r--doc/throw.n48
-rw-r--r--doc/time.n17
-rw-r--r--doc/tm.n308
-rw-r--r--doc/trace.n267
-rw-r--r--doc/transchan.n160
-rw-r--r--doc/try.n103
-rw-r--r--doc/unknown.n34
-rw-r--r--doc/unload.n172
-rw-r--r--doc/unset.n26
-rw-r--r--doc/update.n16
-rw-r--r--doc/uplevel.n27
-rw-r--r--doc/upvar.n62
-rw-r--r--doc/variable.n17
-rw-r--r--doc/vwait.n209
-rw-r--r--doc/while.n12
-rw-r--r--doc/zlib.n460
-rw-r--r--generic/README6
-rw-r--r--generic/regc_color.c1287
-rw-r--r--generic/regc_cvec.c182
-rw-r--r--generic/regc_lex.c1857
-rw-r--r--generic/regc_locale.c1196
-rw-r--r--generic/regc_nfa.c2825
-rw-r--r--generic/regcomp.c3616
-rw-r--r--generic/regcustom.h147
-rw-r--r--generic/rege_dfa.c1233
-rw-r--r--generic/regerror.c150
-rw-r--r--generic/regerrs.h2
-rw-r--r--generic/regex.h176
-rw-r--r--generic/regexec.c1904
-rw-r--r--generic/regfree.c47
-rw-r--r--generic/regfronts.c92
-rw-r--r--generic/regguts.h408
-rw-r--r--generic/tcl.decls2356
-rw-r--r--generic/tcl.h3149
-rw-r--r--generic/tclAlloc.c540
-rw-r--r--generic/tclAssembly.c4325
-rw-r--r--generic/tclAsync.c254
-rw-r--r--generic/tclBasic.c9617
-rw-r--r--generic/tclBinary.c3455
-rw-r--r--generic/tclCkalloc.c988
-rw-r--r--generic/tclClock.c2226
-rw-r--r--generic/tclCmdAH.c3857
-rw-r--r--generic/tclCmdIL.c4904
-rw-r--r--generic/tclCmdMZ.c7105
-rw-r--r--generic/tclCompCmds.c4896
-rw-r--r--generic/tclCompCmdsGR.c3171
-rw-r--r--generic/tclCompCmdsSZ.c4383
-rw-r--r--generic/tclCompExpr.c3318
-rw-r--r--generic/tclCompile.c5347
-rw-r--r--generic/tclCompile.h1900
-rw-r--r--generic/tclConfig.c408
-rw-r--r--generic/tclDTrace.d225
-rw-r--r--generic/tclDate.c4366
-rw-r--r--generic/tclDecls.h4985
-rw-r--r--generic/tclDictObj.c3688
-rw-r--r--generic/tclEncoding.c2812
-rw-r--r--generic/tclEnsemble.c3486
-rw-r--r--generic/tclEnv.c664
-rw-r--r--generic/tclEvent.c1565
-rw-r--r--generic/tclExecute.c13232
-rw-r--r--generic/tclFCmd.c1257
-rw-r--r--generic/tclFileName.c3151
-rw-r--r--generic/tclFileSystem.h74
-rw-r--r--generic/tclGet.c341
-rw-r--r--generic/tclGetDate.y1742
-rw-r--r--generic/tclHash.c795
-rw-r--r--generic/tclHistory.c167
-rw-r--r--generic/tclIO.c10215
-rw-r--r--generic/tclIO.h425
-rw-r--r--generic/tclIOCmd.c1938
-rw-r--r--generic/tclIOGT.c1607
-rw-r--r--generic/tclIORChan.c3238
-rw-r--r--generic/tclIORTrans.c3420
-rw-r--r--generic/tclIOSock.c226
-rw-r--r--generic/tclIOUtil.c7765
-rw-r--r--generic/tclIndexObj.c1444
-rw-r--r--generic/tclInitScript.h112
-rw-r--r--generic/tclInt.decls1161
-rw-r--r--generic/tclInt.h5493
-rw-r--r--generic/tclIntDecls.h1772
-rw-r--r--generic/tclIntPlatDecls.h802
-rw-r--r--generic/tclInterp.c4537
-rw-r--r--generic/tclLink.c528
-rw-r--r--generic/tclListObj.c2318
-rw-r--r--generic/tclLiteral.c1028
-rw-r--r--generic/tclLoad.c989
-rw-r--r--generic/tclLoadNone.c144
-rw-r--r--generic/tclMain.c1033
-rw-r--r--generic/tclMath.h27
-rw-r--r--generic/tclNamesp.c5390
-rw-r--r--generic/tclNotify.c691
-rw-r--r--generic/tclOO.c2977
-rw-r--r--generic/tclOO.decls218
-rw-r--r--generic/tclOO.h147
-rw-r--r--generic/tclOOBasic.c1249
-rw-r--r--generic/tclOOCall.c1495
-rw-r--r--generic/tclOODecls.h234
-rw-r--r--generic/tclOODefineCmds.c2697
-rw-r--r--generic/tclOOInfo.c1526
-rw-r--r--generic/tclOOInt.h604
-rw-r--r--generic/tclOOIntDecls.h166
-rw-r--r--generic/tclOOMethod.c1783
-rw-r--r--generic/tclOOStubInit.c78
-rw-r--r--generic/tclOOStubLib.c71
-rw-r--r--generic/tclObj.c4489
-rw-r--r--generic/tclOptimize.c444
-rw-r--r--generic/tclPanic.c113
-rw-r--r--generic/tclParse.c2415
-rw-r--r--generic/tclParse.h17
-rw-r--r--generic/tclParseExpr.c2104
-rw-r--r--generic/tclPathObj.c2695
-rw-r--r--generic/tclPipe.c784
-rw-r--r--generic/tclPkg.c2075
-rw-r--r--generic/tclPkgConfig.c135
-rw-r--r--generic/tclPlatDecls.h207
-rw-r--r--generic/tclPort.h18
-rw-r--r--generic/tclPosixStr.c827
-rw-r--r--generic/tclPreserve.c364
-rw-r--r--generic/tclProc.c3369
-rw-r--r--generic/tclRegexp.c621
-rw-r--r--generic/tclRegexp.h39
-rw-r--r--generic/tclResolve.c468
-rw-r--r--generic/tclResult.c1456
-rw-r--r--generic/tclScan.c1079
-rw-r--r--generic/tclStrToD.c5015
-rw-r--r--generic/tclStringObj.c3207
-rw-r--r--generic/tclStringTrim.h43
-rw-r--r--generic/tclStubInit.c951
-rw-r--r--generic/tclStubLib.c138
-rw-r--r--generic/tclStubLibTbl.c58
-rw-r--r--generic/tclTest.c6655
-rw-r--r--generic/tclTestObj.c1063
-rw-r--r--generic/tclTestProcBodyObj.c200
-rw-r--r--generic/tclThread.c384
-rw-r--r--[-rwxr-xr-x]generic/tclThreadAlloc.c887
-rw-r--r--generic/tclThreadJoin.c317
-rw-r--r--generic/tclThreadStorage.c373
-rw-r--r--generic/tclThreadTest.c856
-rw-r--r--generic/tclTimer.c959
-rw-r--r--generic/tclTomMath.decls223
-rw-r--r--generic/tclTomMath.h832
-rw-r--r--generic/tclTomMathDecls.h501
-rw-r--r--generic/tclTomMathInt.h3
-rw-r--r--generic/tclTomMathInterface.c310
-rw-r--r--generic/tclTomMathStubLib.c79
-rw-r--r--generic/tclTrace.c3267
-rw-r--r--generic/tclUniData.c2138
-rw-r--r--generic/tclUtf.c1083
-rw-r--r--generic/tclUtil.c4240
-rw-r--r--generic/tclVar.c7700
-rw-r--r--generic/tclZlib.c4017
-rw-r--r--generic/tommath.h1
-rw-r--r--library/auto.tcl476
-rw-r--r--library/clock.tcl4573
-rw-r--r--library/dde/pkgIndex.tcl10
-rw-r--r--[-rwxr-xr-x]library/encoding/tis-620.enc0
-rw-r--r--library/history.tcl307
-rw-r--r--library/http/http.tcl1229
-rw-r--r--library/http/pkgIndex.tcl14
-rw-r--r--library/http1.0/http.tcl8
-rw-r--r--library/init.tcl451
-rw-r--r--library/ldAout.tcl233
-rw-r--r--library/msgcat/msgcat.tcl485
-rw-r--r--library/msgcat/pkgIndex.tcl4
-rw-r--r--library/msgs/af.msg49
-rw-r--r--library/msgs/af_za.msg6
-rw-r--r--library/msgs/ar.msg54
-rw-r--r--library/msgs/ar_in.msg6
-rw-r--r--library/msgs/ar_jo.msg39
-rw-r--r--library/msgs/ar_lb.msg39
-rw-r--r--library/msgs/ar_sy.msg39
-rw-r--r--library/msgs/be.msg52
-rw-r--r--library/msgs/bg.msg52
-rw-r--r--library/msgs/bn.msg49
-rw-r--r--library/msgs/bn_in.msg6
-rw-r--r--library/msgs/ca.msg50
-rw-r--r--library/msgs/cs.msg54
-rw-r--r--library/msgs/da.msg52
-rw-r--r--library/msgs/de.msg54
-rw-r--r--library/msgs/de_at.msg35
-rw-r--r--library/msgs/de_be.msg53
-rw-r--r--library/msgs/el.msg52
-rw-r--r--library/msgs/en_au.msg7
-rw-r--r--library/msgs/en_be.msg7
-rw-r--r--library/msgs/en_bw.msg6
-rw-r--r--library/msgs/en_ca.msg7
-rw-r--r--library/msgs/en_gb.msg7
-rw-r--r--library/msgs/en_hk.msg8
-rw-r--r--library/msgs/en_ie.msg7
-rw-r--r--library/msgs/en_in.msg8
-rw-r--r--library/msgs/en_nz.msg7
-rw-r--r--library/msgs/en_ph.msg8
-rw-r--r--library/msgs/en_sg.msg6
-rw-r--r--library/msgs/en_za.msg6
-rw-r--r--library/msgs/en_zw.msg6
-rw-r--r--library/msgs/eo.msg54
-rw-r--r--library/msgs/es.msg52
-rw-r--r--library/msgs/es_ar.msg6
-rw-r--r--library/msgs/es_bo.msg6
-rw-r--r--library/msgs/es_cl.msg6
-rw-r--r--library/msgs/es_co.msg6
-rw-r--r--library/msgs/es_cr.msg6
-rw-r--r--library/msgs/es_do.msg6
-rw-r--r--library/msgs/es_ec.msg6
-rw-r--r--library/msgs/es_gt.msg6
-rw-r--r--library/msgs/es_hn.msg6
-rw-r--r--library/msgs/es_mx.msg6
-rw-r--r--library/msgs/es_ni.msg6
-rw-r--r--library/msgs/es_pa.msg6
-rw-r--r--library/msgs/es_pe.msg6
-rw-r--r--library/msgs/es_pr.msg6
-rw-r--r--library/msgs/es_py.msg6
-rw-r--r--library/msgs/es_sv.msg6
-rw-r--r--library/msgs/es_uy.msg6
-rw-r--r--library/msgs/es_ve.msg6
-rw-r--r--library/msgs/et.msg52
-rw-r--r--library/msgs/eu.msg47
-rw-r--r--library/msgs/eu_es.msg7
-rw-r--r--library/msgs/fa.msg47
-rw-r--r--library/msgs/fa_in.msg52
-rw-r--r--library/msgs/fa_ir.msg9
-rw-r--r--library/msgs/fi.msg50
-rw-r--r--library/msgs/fo.msg47
-rw-r--r--library/msgs/fo_fo.msg7
-rw-r--r--library/msgs/fr.msg52
-rw-r--r--library/msgs/fr_be.msg7
-rw-r--r--library/msgs/fr_ca.msg7
-rw-r--r--library/msgs/fr_ch.msg7
-rw-r--r--library/msgs/ga.msg47
-rw-r--r--library/msgs/ga_ie.msg7
-rw-r--r--library/msgs/gl.msg47
-rw-r--r--library/msgs/gl_es.msg6
-rw-r--r--library/msgs/gv.msg47
-rw-r--r--library/msgs/gv_gb.msg6
-rw-r--r--library/msgs/he.msg52
-rw-r--r--library/msgs/hi.msg39
-rw-r--r--library/msgs/hi_in.msg6
-rw-r--r--library/msgs/hr.msg50
-rw-r--r--library/msgs/hu.msg54
-rw-r--r--library/msgs/id.msg47
-rw-r--r--library/msgs/id_id.msg6
-rw-r--r--library/msgs/is.msg50
-rw-r--r--library/msgs/it.msg54
-rw-r--r--library/msgs/it_ch.msg6
-rw-r--r--library/msgs/ja.msg44
-rw-r--r--library/msgs/kl.msg47
-rw-r--r--library/msgs/kl_gl.msg7
-rw-r--r--library/msgs/ko.msg55
-rw-r--r--library/msgs/ko_kr.msg8
-rw-r--r--library/msgs/kok.msg39
-rw-r--r--library/msgs/kok_in.msg6
-rw-r--r--library/msgs/kw.msg47
-rw-r--r--library/msgs/kw_gb.msg6
-rw-r--r--library/msgs/lt.msg52
-rw-r--r--library/msgs/lv.msg52
-rw-r--r--library/msgs/mk.msg52
-rw-r--r--library/msgs/mr.msg39
-rw-r--r--library/msgs/mr_in.msg6
-rw-r--r--library/msgs/ms.msg47
-rw-r--r--library/msgs/ms_my.msg6
-rw-r--r--library/msgs/mt.msg27
-rw-r--r--library/msgs/nb.msg52
-rw-r--r--library/msgs/nl.msg50
-rw-r--r--library/msgs/nl_be.msg7
-rw-r--r--library/msgs/nn.msg52
-rw-r--r--library/msgs/pl.msg52
-rw-r--r--library/msgs/pt.msg50
-rw-r--r--library/msgs/pt_br.msg7
-rw-r--r--library/msgs/ro.msg52
-rw-r--r--library/msgs/ru.msg52
-rw-r--r--library/msgs/ru_ua.msg6
-rw-r--r--library/msgs/sh.msg52
-rw-r--r--library/msgs/sk.msg52
-rw-r--r--library/msgs/sl.msg52
-rw-r--r--library/msgs/sq.msg54
-rw-r--r--library/msgs/sr.msg52
-rw-r--r--library/msgs/sv.msg52
-rw-r--r--library/msgs/sw.msg49
-rw-r--r--library/msgs/ta.msg39
-rw-r--r--library/msgs/ta_in.msg6
-rw-r--r--library/msgs/te.msg47
-rw-r--r--library/msgs/te_in.msg8
-rw-r--r--library/msgs/th.msg54
-rw-r--r--library/msgs/tr.msg50
-rw-r--r--library/msgs/uk.msg52
-rw-r--r--library/msgs/vi.msg50
-rw-r--r--library/msgs/zh.msg55
-rw-r--r--library/msgs/zh_cn.msg7
-rw-r--r--library/msgs/zh_hk.msg28
-rw-r--r--library/msgs/zh_sg.msg8
-rw-r--r--library/msgs/zh_tw.msg8
-rw-r--r--library/opt/optparse.tcl484
-rw-r--r--library/opt/pkgIndex.tcl2
-rw-r--r--library/package.tcl466
-rw-r--r--library/parray.tcl9
-rw-r--r--library/platform/pkgIndex.tcl3
-rw-r--r--library/platform/platform.tcl387
-rw-r--r--library/platform/shell.tcl241
-rwxr-xr-xlibrary/reg/pkgIndex.tcl14
-rw-r--r--library/safe.tcl1705
-rw-r--r--library/tclIndex30
-rw-r--r--library/tcltest/pkgIndex.tcl4
-rw-r--r--library/tcltest/tcltest.tcl365
-rw-r--r--library/tm.tcl375
-rw-r--r--library/tzdata/Africa/Abidjan6
-rw-r--r--library/tzdata/Africa/Accra20
-rw-r--r--library/tzdata/Africa/Addis_Ababa7
-rw-r--r--library/tzdata/Africa/Algiers39
-rw-r--r--library/tzdata/Africa/Asmara8
-rw-r--r--library/tzdata/Africa/Asmera5
-rw-r--r--library/tzdata/Africa/Bamako8
-rw-r--r--library/tzdata/Africa/Bangui6
-rw-r--r--library/tzdata/Africa/Banjul8
-rw-r--r--library/tzdata/Africa/Bissau7
-rw-r--r--library/tzdata/Africa/Blantyre6
-rw-r--r--library/tzdata/Africa/Brazzaville6
-rw-r--r--library/tzdata/Africa/Bujumbura6
-rw-r--r--library/tzdata/Africa/Cairo128
-rw-r--r--library/tzdata/Africa/Casablanca168
-rw-r--r--library/tzdata/Africa/Ceuta258
-rw-r--r--library/tzdata/Africa/Conakry8
-rw-r--r--library/tzdata/Africa/Dakar7
-rw-r--r--library/tzdata/Africa/Dar_es_Salaam8
-rw-r--r--library/tzdata/Africa/Djibouti6
-rw-r--r--library/tzdata/Africa/Douala6
-rw-r--r--library/tzdata/Africa/El_Aaiun7
-rw-r--r--library/tzdata/Africa/Freetown36
-rw-r--r--library/tzdata/Africa/Gaborone9
-rw-r--r--library/tzdata/Africa/Harare6
-rw-r--r--library/tzdata/Africa/Johannesburg11
-rw-r--r--library/tzdata/Africa/Juba5
-rw-r--r--library/tzdata/Africa/Kampala9
-rw-r--r--library/tzdata/Africa/Khartoum39
-rw-r--r--library/tzdata/Africa/Kigali6
-rw-r--r--library/tzdata/Africa/Kinshasa6
-rw-r--r--library/tzdata/Africa/Lagos6
-rw-r--r--library/tzdata/Africa/Libreville6
-rw-r--r--library/tzdata/Africa/Lome6
-rw-r--r--library/tzdata/Africa/Luanda7
-rw-r--r--library/tzdata/Africa/Lubumbashi6
-rw-r--r--library/tzdata/Africa/Lusaka6
-rw-r--r--library/tzdata/Africa/Malabo7
-rw-r--r--library/tzdata/Africa/Maputo6
-rw-r--r--library/tzdata/Africa/Maseru8
-rw-r--r--library/tzdata/Africa/Mbabane6
-rw-r--r--library/tzdata/Africa/Mogadishu8
-rw-r--r--library/tzdata/Africa/Monrovia8
-rw-r--r--library/tzdata/Africa/Nairobi9
-rw-r--r--library/tzdata/Africa/Ndjamena8
-rw-r--r--library/tzdata/Africa/Niamey8
-rw-r--r--library/tzdata/Africa/Nouakchott8
-rw-r--r--library/tzdata/Africa/Ouagadougou6
-rw-r--r--library/tzdata/Africa/Porto-Novo7
-rw-r--r--library/tzdata/Africa/Sao_Tome7
-rw-r--r--library/tzdata/Africa/Timbuktu5
-rw-r--r--library/tzdata/Africa/Tripoli206
-rw-r--r--library/tzdata/Africa/Tunis39
-rw-r--r--library/tzdata/Africa/Windhoek222
-rw-r--r--library/tzdata/America/Adak276
-rw-r--r--library/tzdata/America/Anchorage276
-rw-r--r--library/tzdata/America/Anguilla5
-rw-r--r--library/tzdata/America/Antigua7
-rw-r--r--library/tzdata/America/Araguaina60
-rw-r--r--library/tzdata/America/Argentina/Buenos_Aires67
-rw-r--r--library/tzdata/America/Argentina/Catamarca68
-rw-r--r--library/tzdata/America/Argentina/ComodRivadavia5
-rw-r--r--library/tzdata/America/Argentina/Cordoba67
-rw-r--r--library/tzdata/America/Argentina/Jujuy67
-rw-r--r--library/tzdata/America/Argentina/La_Rioja69
-rw-r--r--library/tzdata/America/Argentina/Mendoza68
-rw-r--r--library/tzdata/America/Argentina/Rio_Gallegos68
-rw-r--r--library/tzdata/America/Argentina/Salta66
-rw-r--r--library/tzdata/America/Argentina/San_Juan69
-rw-r--r--library/tzdata/America/Argentina/San_Luis68
-rw-r--r--library/tzdata/America/Argentina/Tucuman69
-rw-r--r--library/tzdata/America/Argentina/Ushuaia68
-rw-r--r--library/tzdata/America/Aruba5
-rw-r--r--library/tzdata/America/Asuncion259
-rw-r--r--library/tzdata/America/Atikokan12
-rw-r--r--library/tzdata/America/Atka5
-rw-r--r--library/tzdata/America/Bahia68
-rw-r--r--library/tzdata/America/Bahia_Banderas222
-rw-r--r--library/tzdata/America/Barbados15
-rw-r--r--library/tzdata/America/Belem35
-rw-r--r--library/tzdata/America/Belize60
-rw-r--r--library/tzdata/America/Blanc-Sablon12
-rw-r--r--library/tzdata/America/Boa_Vista40
-rw-r--r--library/tzdata/America/Bogota9
-rw-r--r--library/tzdata/America/Boise281
-rw-r--r--library/tzdata/America/Buenos_Aires5
-rw-r--r--library/tzdata/America/Cambridge_Bay252
-rw-r--r--library/tzdata/America/Campo_Grande257
-rw-r--r--library/tzdata/America/Cancun216
-rw-r--r--library/tzdata/America/Caracas9
-rw-r--r--library/tzdata/America/Catamarca5
-rw-r--r--library/tzdata/America/Cayenne7
-rw-r--r--library/tzdata/America/Cayman7
-rw-r--r--library/tzdata/America/Chicago369
-rw-r--r--library/tzdata/America/Chihuahua221
-rw-r--r--library/tzdata/America/Coral_Harbour5
-rw-r--r--library/tzdata/America/Cordoba5
-rw-r--r--library/tzdata/America/Costa_Rica15
-rw-r--r--library/tzdata/America/Creston8
-rw-r--r--library/tzdata/America/Cuiaba257
-rw-r--r--library/tzdata/America/Curacao7
-rw-r--r--library/tzdata/America/Danmarkshavn39
-rw-r--r--library/tzdata/America/Dawson256
-rw-r--r--library/tzdata/America/Dawson_Creek64
-rw-r--r--library/tzdata/America/Denver291
-rw-r--r--library/tzdata/America/Detroit272
-rw-r--r--library/tzdata/America/Dominica5
-rw-r--r--library/tzdata/America/Edmonton284
-rw-r--r--library/tzdata/America/Eirunepe40
-rw-r--r--library/tzdata/America/El_Salvador10
-rw-r--r--library/tzdata/America/Ensenada5
-rw-r--r--library/tzdata/America/Fort_Wayne5
-rw-r--r--library/tzdata/America/Fortaleza48
-rw-r--r--library/tzdata/America/Glace_Bay273
-rw-r--r--library/tzdata/America/Godthab246
-rw-r--r--library/tzdata/America/Goose_Bay338
-rw-r--r--library/tzdata/America/Grand_Turk249
-rw-r--r--library/tzdata/America/Grenada5
-rw-r--r--library/tzdata/America/Guadeloupe5
-rw-r--r--library/tzdata/America/Guatemala14
-rw-r--r--library/tzdata/America/Guayaquil7
-rw-r--r--library/tzdata/America/Guyana9
-rw-r--r--library/tzdata/America/Halifax361
-rw-r--r--library/tzdata/America/Havana285
-rw-r--r--library/tzdata/America/Hermosillo21
-rw-r--r--library/tzdata/America/Indiana/Indianapolis234
-rw-r--r--library/tzdata/America/Indiana/Knox285
-rw-r--r--library/tzdata/America/Indiana/Marengo236
-rw-r--r--library/tzdata/America/Indiana/Petersburg247
-rw-r--r--library/tzdata/America/Indiana/Tell_City234
-rw-r--r--library/tzdata/America/Indiana/Vevay213
-rw-r--r--library/tzdata/America/Indiana/Vincennes234
-rw-r--r--library/tzdata/America/Indiana/Winamac240
-rw-r--r--library/tzdata/America/Indianapolis5
-rw-r--r--library/tzdata/America/Inuvik249
-rw-r--r--library/tzdata/America/Iqaluit250
-rw-r--r--library/tzdata/America/Jamaica28
-rw-r--r--library/tzdata/America/Jujuy5
-rw-r--r--library/tzdata/America/Juneau276
-rw-r--r--library/tzdata/America/Kentucky/Louisville314
-rw-r--r--library/tzdata/America/Kentucky/Monticello279
-rw-r--r--library/tzdata/America/Knox_IN5
-rw-r--r--library/tzdata/America/Kralendijk5
-rw-r--r--library/tzdata/America/La_Paz8
-rw-r--r--library/tzdata/America/Lima16
-rw-r--r--library/tzdata/America/Los_Angeles317
-rw-r--r--library/tzdata/America/Louisville5
-rw-r--r--library/tzdata/America/Lower_Princes5
-rw-r--r--library/tzdata/America/Maceio52
-rw-r--r--library/tzdata/America/Managua21
-rw-r--r--library/tzdata/America/Manaus39
-rw-r--r--library/tzdata/America/Marigot5
-rw-r--r--library/tzdata/America/Martinique9
-rw-r--r--library/tzdata/America/Matamoros219
-rw-r--r--library/tzdata/America/Mazatlan222
-rw-r--r--library/tzdata/America/Mendoza5
-rw-r--r--library/tzdata/America/Menominee274
-rw-r--r--library/tzdata/America/Merida216
-rw-r--r--library/tzdata/America/Metlakatla43
-rw-r--r--library/tzdata/America/Mexico_City228
-rw-r--r--library/tzdata/America/Miquelon234
-rw-r--r--library/tzdata/America/Moncton342
-rw-r--r--library/tzdata/America/Monterrey218
-rw-r--r--library/tzdata/America/Montevideo261
-rw-r--r--library/tzdata/America/Montreal366
-rw-r--r--library/tzdata/America/Montserrat5
-rw-r--r--library/tzdata/America/Nassau279
-rw-r--r--library/tzdata/America/New_York369
-rw-r--r--library/tzdata/America/Nipigon264
-rw-r--r--library/tzdata/America/Nome276
-rw-r--r--library/tzdata/America/Noronha48
-rw-r--r--library/tzdata/America/North_Dakota/Beulah279
-rw-r--r--library/tzdata/America/North_Dakota/Center279
-rw-r--r--library/tzdata/America/North_Dakota/New_Salem279
-rw-r--r--library/tzdata/America/Ojinaga222
-rw-r--r--library/tzdata/America/Panama7
-rw-r--r--library/tzdata/America/Pangnirtung252
-rw-r--r--library/tzdata/America/Paramaribo10
-rw-r--r--library/tzdata/America/Phoenix17
-rw-r--r--library/tzdata/America/Port-au-Prince217
-rw-r--r--library/tzdata/America/Port_of_Spain6
-rw-r--r--library/tzdata/America/Porto_Acre5
-rw-r--r--library/tzdata/America/Porto_Velho35
-rw-r--r--library/tzdata/America/Puerto_Rico10
-rw-r--r--library/tzdata/America/Rainy_River264
-rw-r--r--library/tzdata/America/Rankin_Inlet248
-rw-r--r--library/tzdata/America/Recife48
-rw-r--r--library/tzdata/America/Regina58
-rw-r--r--library/tzdata/America/Resolute248
-rw-r--r--library/tzdata/America/Rio_Branco36
-rw-r--r--library/tzdata/America/Rosario5
-rw-r--r--library/tzdata/America/Santa_Isabel284
-rw-r--r--library/tzdata/America/Santarem36
-rw-r--r--library/tzdata/America/Santiago291
-rw-r--r--library/tzdata/America/Santo_Domingo21
-rw-r--r--library/tzdata/America/Sao_Paulo258
-rw-r--r--library/tzdata/America/Scoresbysund246
-rw-r--r--library/tzdata/America/Shiprock5
-rw-r--r--library/tzdata/America/Sitka275
-rw-r--r--library/tzdata/America/St_Barthelemy5
-rw-r--r--library/tzdata/America/St_Johns372
-rw-r--r--library/tzdata/America/St_Kitts5
-rw-r--r--library/tzdata/America/St_Lucia5
-rw-r--r--library/tzdata/America/St_Thomas5
-rw-r--r--library/tzdata/America/St_Vincent5
-rw-r--r--library/tzdata/America/Swift_Current29
-rw-r--r--library/tzdata/America/Tegucigalpa12
-rw-r--r--library/tzdata/America/Thule224
-rw-r--r--library/tzdata/America/Thunder_Bay272
-rw-r--r--library/tzdata/America/Tijuana285
-rw-r--r--library/tzdata/America/Toronto365
-rw-r--r--library/tzdata/America/Tortola5
-rw-r--r--library/tzdata/America/Vancouver320
-rw-r--r--library/tzdata/America/Virgin5
-rw-r--r--library/tzdata/America/Whitehorse256
-rw-r--r--library/tzdata/America/Winnipeg316
-rw-r--r--library/tzdata/America/Yakutat276
-rw-r--r--library/tzdata/America/Yellowknife252
-rw-r--r--library/tzdata/Antarctica/Casey10
-rw-r--r--library/tzdata/Antarctica/Davis12
-rw-r--r--library/tzdata/Antarctica/DumontDUrville8
-rw-r--r--library/tzdata/Antarctica/Macquarie97
-rw-r--r--library/tzdata/Antarctica/Mawson7
-rw-r--r--library/tzdata/Antarctica/McMurdo5
-rw-r--r--library/tzdata/Antarctica/Palmer254
-rw-r--r--library/tzdata/Antarctica/Rothera6
-rw-r--r--library/tzdata/Antarctica/South_Pole5
-rw-r--r--library/tzdata/Antarctica/Syowa6
-rw-r--r--library/tzdata/Antarctica/Vostok6
-rw-r--r--library/tzdata/Arctic/Longyearbyen5
-rw-r--r--library/tzdata/Asia/Aden6
-rw-r--r--library/tzdata/Asia/Almaty56
-rw-r--r--library/tzdata/Asia/Amman74
-rw-r--r--library/tzdata/Asia/Anadyr72
-rw-r--r--library/tzdata/Asia/Aqtau58
-rw-r--r--library/tzdata/Asia/Aqtobe57
-rw-r--r--library/tzdata/Asia/Ashgabat31
-rw-r--r--library/tzdata/Asia/Ashkhabad5
-rw-r--r--library/tzdata/Asia/Baghdad59
-rw-r--r--library/tzdata/Asia/Bahrain7
-rw-r--r--library/tzdata/Asia/Baku242
-rw-r--r--library/tzdata/Asia/Bangkok7
-rw-r--r--library/tzdata/Asia/Beirut270
-rw-r--r--library/tzdata/Asia/Bishkek57
-rw-r--r--library/tzdata/Asia/Brunei7
-rw-r--r--library/tzdata/Asia/Calcutta5
-rw-r--r--library/tzdata/Asia/Choibalsan51
-rw-r--r--library/tzdata/Asia/Chongqing19
-rw-r--r--library/tzdata/Asia/Chungking5
-rw-r--r--library/tzdata/Asia/Colombo13
-rw-r--r--library/tzdata/Asia/Dacca5
-rw-r--r--library/tzdata/Asia/Damascus280
-rw-r--r--library/tzdata/Asia/Dhaka14
-rw-r--r--library/tzdata/Asia/Dili10
-rw-r--r--library/tzdata/Asia/Dubai6
-rw-r--r--library/tzdata/Asia/Dushanbe29
-rw-r--r--library/tzdata/Asia/Gaza278
-rw-r--r--library/tzdata/Asia/Harbin22
-rw-r--r--library/tzdata/Asia/Hebron277
-rw-r--r--library/tzdata/Asia/Ho_Chi_Minh9
-rw-r--r--library/tzdata/Asia/Hong_Kong75
-rw-r--r--library/tzdata/Asia/Hovd51
-rw-r--r--library/tzdata/Asia/Irkutsk71
-rw-r--r--library/tzdata/Asia/Istanbul5
-rw-r--r--library/tzdata/Asia/Jakarta13
-rw-r--r--library/tzdata/Asia/Jayapura8
-rw-r--r--library/tzdata/Asia/Jerusalem272
-rw-r--r--library/tzdata/Asia/Kabul7
-rw-r--r--library/tzdata/Asia/Kamchatka71
-rw-r--r--library/tzdata/Asia/Karachi16
-rw-r--r--library/tzdata/Asia/Kashgar20
-rw-r--r--library/tzdata/Asia/Kathmandu7
-rw-r--r--library/tzdata/Asia/Katmandu5
-rw-r--r--library/tzdata/Asia/Khandyga72
-rw-r--r--library/tzdata/Asia/Kolkata10
-rw-r--r--library/tzdata/Asia/Krasnoyarsk70
-rw-r--r--library/tzdata/Asia/Kuala_Lumpur13
-rw-r--r--library/tzdata/Asia/Kuching24
-rw-r--r--library/tzdata/Asia/Kuwait6
-rw-r--r--library/tzdata/Asia/Macao5
-rw-r--r--library/tzdata/Asia/Macau46
-rw-r--r--library/tzdata/Asia/Magadan70
-rw-r--r--library/tzdata/Asia/Makassar9
-rw-r--r--library/tzdata/Asia/Manila15
-rw-r--r--library/tzdata/Asia/Muscat6
-rw-r--r--library/tzdata/Asia/Nicosia257
-rw-r--r--library/tzdata/Asia/Novokuznetsk71
-rw-r--r--library/tzdata/Asia/Novosibirsk71
-rw-r--r--library/tzdata/Asia/Omsk70
-rw-r--r--library/tzdata/Asia/Oral58
-rw-r--r--library/tzdata/Asia/Phnom_Penh9
-rw-r--r--library/tzdata/Asia/Pontianak13
-rw-r--r--library/tzdata/Asia/Pyongyang11
-rw-r--r--library/tzdata/Asia/Qatar7
-rw-r--r--library/tzdata/Asia/Qyzylorda58
-rw-r--r--library/tzdata/Asia/Rangoon9
-rw-r--r--library/tzdata/Asia/Riyadh6
-rw-r--r--library/tzdata/Asia/Saigon5
-rw-r--r--library/tzdata/Asia/Sakhalin72
-rw-r--r--library/tzdata/Asia/Samarkand32
-rw-r--r--library/tzdata/Asia/Seoul18
-rw-r--r--library/tzdata/Asia/Shanghai23
-rw-r--r--library/tzdata/Asia/Singapore14
-rw-r--r--library/tzdata/Asia/Taipei46
-rw-r--r--library/tzdata/Asia/Tashkent32
-rw-r--r--library/tzdata/Asia/Tbilisi60
-rw-r--r--library/tzdata/Asia/Tehran105
-rw-r--r--library/tzdata/Asia/Tel_Aviv5
-rw-r--r--library/tzdata/Asia/Thimbu5
-rw-r--r--library/tzdata/Asia/Thimphu7
-rw-r--r--library/tzdata/Asia/Tokyo16
-rw-r--r--library/tzdata/Asia/Ujung_Pandang5
-rw-r--r--library/tzdata/Asia/Ulaanbaatar51
-rw-r--r--library/tzdata/Asia/Ulan_Bator5
-rw-r--r--library/tzdata/Asia/Urumqi19
-rw-r--r--library/tzdata/Asia/Ust-Nera70
-rw-r--r--library/tzdata/Asia/Vientiane9
-rw-r--r--library/tzdata/Asia/Vladivostok70
-rw-r--r--library/tzdata/Asia/Yakutsk70
-rw-r--r--library/tzdata/Asia/Yekaterinburg70
-rw-r--r--library/tzdata/Asia/Yerevan70
-rw-r--r--library/tzdata/Atlantic/Azores349
-rw-r--r--library/tzdata/Atlantic/Bermuda259
-rw-r--r--library/tzdata/Atlantic/Canary248
-rw-r--r--library/tzdata/Atlantic/Cape_Verde9
-rw-r--r--library/tzdata/Atlantic/Faeroe5
-rw-r--r--library/tzdata/Atlantic/Faroe245
-rw-r--r--library/tzdata/Atlantic/Jan_Mayen5
-rw-r--r--library/tzdata/Atlantic/Madeira350
-rw-r--r--library/tzdata/Atlantic/Reykjavik70
-rw-r--r--library/tzdata/Atlantic/South_Georgia6
-rw-r--r--library/tzdata/Atlantic/St_Helena7
-rw-r--r--library/tzdata/Atlantic/Stanley75
-rw-r--r--library/tzdata/Australia/ACT5
-rw-r--r--library/tzdata/Australia/Adelaide273
-rw-r--r--library/tzdata/Australia/Brisbane23
-rw-r--r--library/tzdata/Australia/Broken_Hill275
-rw-r--r--library/tzdata/Australia/Canberra5
-rw-r--r--library/tzdata/Australia/Currie273
-rw-r--r--library/tzdata/Australia/Darwin15
-rw-r--r--library/tzdata/Australia/Eucla25
-rw-r--r--library/tzdata/Australia/Hobart281
-rw-r--r--library/tzdata/Australia/LHI5
-rw-r--r--library/tzdata/Australia/Lindeman28
-rw-r--r--library/tzdata/Australia/Lord_Howe244
-rw-r--r--library/tzdata/Australia/Melbourne272
-rw-r--r--library/tzdata/Australia/NSW5
-rw-r--r--library/tzdata/Australia/North5
-rw-r--r--library/tzdata/Australia/Perth25
-rw-r--r--library/tzdata/Australia/Queensland5
-rw-r--r--library/tzdata/Australia/South5
-rw-r--r--library/tzdata/Australia/Sydney272
-rw-r--r--library/tzdata/Australia/Tasmania5
-rw-r--r--library/tzdata/Australia/Victoria5
-rw-r--r--library/tzdata/Australia/West5
-rw-r--r--library/tzdata/Australia/Yancowinna5
-rw-r--r--library/tzdata/Brazil/Acre5
-rw-r--r--library/tzdata/Brazil/DeNoronha5
-rw-r--r--library/tzdata/Brazil/East5
-rw-r--r--library/tzdata/Brazil/West5
-rw-r--r--library/tzdata/CET265
-rw-r--r--library/tzdata/CST6CDT278
-rw-r--r--library/tzdata/Canada/Atlantic5
-rw-r--r--library/tzdata/Canada/Central5
-rw-r--r--library/tzdata/Canada/East-Saskatchewan5
-rw-r--r--library/tzdata/Canada/Eastern5
-rw-r--r--library/tzdata/Canada/Mountain5
-rw-r--r--library/tzdata/Canada/Newfoundland5
-rw-r--r--library/tzdata/Canada/Pacific5
-rw-r--r--library/tzdata/Canada/Saskatchewan5
-rw-r--r--library/tzdata/Canada/Yukon5
-rw-r--r--library/tzdata/Chile/Continental5
-rw-r--r--library/tzdata/Chile/EasterIsland5
-rw-r--r--library/tzdata/Cuba5
-rw-r--r--library/tzdata/EET251
-rw-r--r--library/tzdata/EST5
-rw-r--r--library/tzdata/EST5EDT278
-rw-r--r--library/tzdata/Egypt5
-rw-r--r--library/tzdata/Eire5
-rw-r--r--library/tzdata/Etc/GMT5
-rw-r--r--library/tzdata/Etc/GMT+05
-rw-r--r--library/tzdata/Etc/GMT+15
-rw-r--r--library/tzdata/Etc/GMT+105
-rw-r--r--library/tzdata/Etc/GMT+115
-rw-r--r--library/tzdata/Etc/GMT+125
-rw-r--r--library/tzdata/Etc/GMT+25
-rw-r--r--library/tzdata/Etc/GMT+35
-rw-r--r--library/tzdata/Etc/GMT+45
-rw-r--r--library/tzdata/Etc/GMT+55
-rw-r--r--library/tzdata/Etc/GMT+65
-rw-r--r--library/tzdata/Etc/GMT+75
-rw-r--r--library/tzdata/Etc/GMT+85
-rw-r--r--library/tzdata/Etc/GMT+95
-rw-r--r--library/tzdata/Etc/GMT-05
-rw-r--r--library/tzdata/Etc/GMT-15
-rw-r--r--library/tzdata/Etc/GMT-105
-rw-r--r--library/tzdata/Etc/GMT-115
-rw-r--r--library/tzdata/Etc/GMT-125
-rw-r--r--library/tzdata/Etc/GMT-135
-rw-r--r--library/tzdata/Etc/GMT-145
-rw-r--r--library/tzdata/Etc/GMT-25
-rw-r--r--library/tzdata/Etc/GMT-35
-rw-r--r--library/tzdata/Etc/GMT-45
-rw-r--r--library/tzdata/Etc/GMT-55
-rw-r--r--library/tzdata/Etc/GMT-65
-rw-r--r--library/tzdata/Etc/GMT-75
-rw-r--r--library/tzdata/Etc/GMT-85
-rw-r--r--library/tzdata/Etc/GMT-95
-rw-r--r--library/tzdata/Etc/GMT05
-rw-r--r--library/tzdata/Etc/Greenwich5
-rw-r--r--library/tzdata/Etc/UCT5
-rw-r--r--library/tzdata/Etc/UTC5
-rw-r--r--library/tzdata/Etc/Universal5
-rw-r--r--library/tzdata/Etc/Zulu5
-rw-r--r--library/tzdata/Europe/Amsterdam310
-rw-r--r--library/tzdata/Europe/Andorra237
-rw-r--r--library/tzdata/Europe/Athens268
-rw-r--r--library/tzdata/Europe/Belfast5
-rw-r--r--library/tzdata/Europe/Belgrade250
-rw-r--r--library/tzdata/Europe/Berlin274
-rw-r--r--library/tzdata/Europe/Bratislava5
-rw-r--r--library/tzdata/Europe/Brussels316
-rw-r--r--library/tzdata/Europe/Bucharest268
-rw-r--r--library/tzdata/Europe/Budapest284
-rw-r--r--library/tzdata/Europe/Busingen5
-rw-r--r--library/tzdata/Europe/Chisinau272
-rw-r--r--library/tzdata/Europe/Copenhagen264
-rw-r--r--library/tzdata/Europe/Dublin359
-rw-r--r--library/tzdata/Europe/Gibraltar328
-rw-r--r--library/tzdata/Europe/Guernsey5
-rw-r--r--library/tzdata/Europe/Helsinki248
-rw-r--r--library/tzdata/Europe/Isle_of_Man5
-rw-r--r--library/tzdata/Europe/Istanbul304
-rw-r--r--library/tzdata/Europe/Jersey5
-rw-r--r--library/tzdata/Europe/Kaliningrad84
-rw-r--r--library/tzdata/Europe/Kiev251
-rw-r--r--library/tzdata/Europe/Lisbon351
-rw-r--r--library/tzdata/Europe/Ljubljana5
-rw-r--r--library/tzdata/Europe/London372
-rw-r--r--library/tzdata/Europe/Luxembourg313
-rw-r--r--library/tzdata/Europe/Madrid294
-rw-r--r--library/tzdata/Europe/Malta299
-rw-r--r--library/tzdata/Europe/Mariehamn5
-rw-r--r--library/tzdata/Europe/Minsk74
-rw-r--r--library/tzdata/Europe/Monaco315
-rw-r--r--library/tzdata/Europe/Moscow83
-rw-r--r--library/tzdata/Europe/Nicosia5
-rw-r--r--library/tzdata/Europe/Oslo271
-rw-r--r--library/tzdata/Europe/Paris314
-rw-r--r--library/tzdata/Europe/Podgorica5
-rw-r--r--library/tzdata/Europe/Prague272
-rw-r--r--library/tzdata/Europe/Riga258
-rw-r--r--library/tzdata/Europe/Rome301
-rw-r--r--library/tzdata/Europe/Samara73
-rw-r--r--library/tzdata/Europe/San_Marino5
-rw-r--r--library/tzdata/Europe/Sarajevo5
-rw-r--r--library/tzdata/Europe/Simferopol253
-rw-r--r--library/tzdata/Europe/Skopje5
-rw-r--r--library/tzdata/Europe/Sofia259
-rw-r--r--library/tzdata/Europe/Stockholm250
-rw-r--r--library/tzdata/Europe/Tallinn255
-rw-r--r--library/tzdata/Europe/Tirane263
-rw-r--r--library/tzdata/Europe/Tiraspol5
-rw-r--r--library/tzdata/Europe/Uzhgorod254
-rw-r--r--library/tzdata/Europe/Vaduz5
-rw-r--r--library/tzdata/Europe/Vatican5
-rw-r--r--library/tzdata/Europe/Vienna271
-rw-r--r--library/tzdata/Europe/Vilnius251
-rw-r--r--library/tzdata/Europe/Volgograd70
-rw-r--r--library/tzdata/Europe/Warsaw296
-rw-r--r--library/tzdata/Europe/Zagreb5
-rw-r--r--library/tzdata/Europe/Zaporozhye252
-rw-r--r--library/tzdata/Europe/Zurich250
-rw-r--r--library/tzdata/GB5
-rw-r--r--library/tzdata/GB-Eire5
-rw-r--r--library/tzdata/GMT5
-rw-r--r--library/tzdata/GMT+05
-rw-r--r--library/tzdata/GMT-05
-rw-r--r--library/tzdata/GMT05
-rw-r--r--library/tzdata/Greenwich5
-rw-r--r--library/tzdata/HST5
-rw-r--r--library/tzdata/Hongkong5
-rw-r--r--library/tzdata/Iceland5
-rw-r--r--library/tzdata/Indian/Antananarivo8
-rw-r--r--library/tzdata/Indian/Chagos7
-rw-r--r--library/tzdata/Indian/Christmas6
-rw-r--r--library/tzdata/Indian/Cocos6
-rw-r--r--library/tzdata/Indian/Comoro6
-rw-r--r--library/tzdata/Indian/Kerguelen6
-rw-r--r--library/tzdata/Indian/Mahe6
-rw-r--r--library/tzdata/Indian/Maldives7
-rw-r--r--library/tzdata/Indian/Mauritius10
-rw-r--r--library/tzdata/Indian/Mayotte6
-rw-r--r--library/tzdata/Indian/Reunion6
-rw-r--r--library/tzdata/Iran5
-rw-r--r--library/tzdata/Israel5
-rw-r--r--library/tzdata/Jamaica5
-rw-r--r--library/tzdata/Japan5
-rw-r--r--library/tzdata/Kwajalein5
-rw-r--r--library/tzdata/Libya5
-rw-r--r--library/tzdata/MET265
-rw-r--r--library/tzdata/MST5
-rw-r--r--library/tzdata/MST7MDT278
-rw-r--r--library/tzdata/Mexico/BajaNorte5
-rw-r--r--library/tzdata/Mexico/BajaSur5
-rw-r--r--library/tzdata/Mexico/General5
-rw-r--r--library/tzdata/NZ5
-rw-r--r--library/tzdata/NZ-CHAT5
-rw-r--r--library/tzdata/Navajo5
-rw-r--r--library/tzdata/PRC5
-rw-r--r--library/tzdata/PST8PDT278
-rw-r--r--library/tzdata/Pacific/Apia188
-rw-r--r--library/tzdata/Pacific/Auckland285
-rw-r--r--library/tzdata/Pacific/Chatham257
-rw-r--r--library/tzdata/Pacific/Chuuk6
-rw-r--r--library/tzdata/Pacific/Easter275
-rw-r--r--library/tzdata/Pacific/Efate26
-rw-r--r--library/tzdata/Pacific/Enderbury8
-rw-r--r--library/tzdata/Pacific/Fakaofo7
-rw-r--r--library/tzdata/Pacific/Fiji191
-rw-r--r--library/tzdata/Pacific/Funafuti6
-rw-r--r--library/tzdata/Pacific/Galapagos7
-rw-r--r--library/tzdata/Pacific/Gambier6
-rw-r--r--library/tzdata/Pacific/Guadalcanal6
-rw-r--r--library/tzdata/Pacific/Guam8
-rw-r--r--library/tzdata/Pacific/Honolulu11
-rw-r--r--library/tzdata/Pacific/Johnston5
-rw-r--r--library/tzdata/Pacific/Kiritimati8
-rw-r--r--library/tzdata/Pacific/Kosrae8
-rw-r--r--library/tzdata/Pacific/Kwajalein8
-rw-r--r--library/tzdata/Pacific/Majuro7
-rw-r--r--library/tzdata/Pacific/Marquesas6
-rw-r--r--library/tzdata/Pacific/Midway10
-rw-r--r--library/tzdata/Pacific/Nauru9
-rw-r--r--library/tzdata/Pacific/Niue8
-rw-r--r--library/tzdata/Pacific/Norfolk7
-rw-r--r--library/tzdata/Pacific/Noumea12
-rw-r--r--library/tzdata/Pacific/Pago_Pago10
-rw-r--r--library/tzdata/Pacific/Palau6
-rw-r--r--library/tzdata/Pacific/Pitcairn7
-rw-r--r--library/tzdata/Pacific/Pohnpei6
-rw-r--r--library/tzdata/Pacific/Ponape5
-rw-r--r--library/tzdata/Pacific/Port_Moresby7
-rw-r--r--library/tzdata/Pacific/Rarotonga32
-rw-r--r--library/tzdata/Pacific/Saipan9
-rw-r--r--library/tzdata/Pacific/Samoa5
-rw-r--r--library/tzdata/Pacific/Tahiti6
-rw-r--r--library/tzdata/Pacific/Tarawa6
-rw-r--r--library/tzdata/Pacific/Tongatapu14
-rw-r--r--library/tzdata/Pacific/Truk5
-rw-r--r--library/tzdata/Pacific/Wake6
-rw-r--r--library/tzdata/Pacific/Wallis6
-rw-r--r--library/tzdata/Pacific/Yap5
-rw-r--r--library/tzdata/Poland5
-rw-r--r--library/tzdata/Portugal5
-rw-r--r--library/tzdata/ROC5
-rw-r--r--library/tzdata/ROK5
-rw-r--r--library/tzdata/Singapore5
-rw-r--r--library/tzdata/SystemV/AST45
-rw-r--r--library/tzdata/SystemV/AST4ADT5
-rw-r--r--library/tzdata/SystemV/CST65
-rw-r--r--library/tzdata/SystemV/CST6CDT5
-rw-r--r--library/tzdata/SystemV/EST55
-rw-r--r--library/tzdata/SystemV/EST5EDT5
-rw-r--r--library/tzdata/SystemV/HST105
-rw-r--r--library/tzdata/SystemV/MST75
-rw-r--r--library/tzdata/SystemV/MST7MDT5
-rw-r--r--library/tzdata/SystemV/PST85
-rw-r--r--library/tzdata/SystemV/PST8PDT5
-rw-r--r--library/tzdata/SystemV/YST95
-rw-r--r--library/tzdata/SystemV/YST9YDT5
-rw-r--r--library/tzdata/Turkey5
-rw-r--r--library/tzdata/UCT5
-rw-r--r--library/tzdata/US/Alaska5
-rw-r--r--library/tzdata/US/Aleutian5
-rw-r--r--library/tzdata/US/Arizona5
-rw-r--r--library/tzdata/US/Central5
-rw-r--r--library/tzdata/US/East-Indiana5
-rw-r--r--library/tzdata/US/Eastern5
-rw-r--r--library/tzdata/US/Hawaii5
-rw-r--r--library/tzdata/US/Indiana-Starke5
-rw-r--r--library/tzdata/US/Michigan5
-rw-r--r--library/tzdata/US/Mountain5
-rw-r--r--library/tzdata/US/Pacific5
-rw-r--r--library/tzdata/US/Pacific-New5
-rw-r--r--library/tzdata/US/Samoa5
-rw-r--r--library/tzdata/UTC5
-rw-r--r--library/tzdata/Universal5
-rw-r--r--library/tzdata/W-SU5
-rw-r--r--library/tzdata/WET251
-rw-r--r--library/tzdata/Zulu5
-rw-r--r--library/word.tcl146
-rw-r--r--libtommath/LICENSE4
-rw-r--r--libtommath/bn.ilg6
-rw-r--r--libtommath/bn.ind82
-rw-r--r--libtommath/bn.pdfbin0 -> 340921 bytes
-rw-r--r--libtommath/bn.tex1835
-rw-r--r--libtommath/bn_error.c43
-rw-r--r--libtommath/bn_fast_mp_invmod.c144
-rw-r--r--libtommath/bn_fast_mp_montgomery_reduce.c168
-rw-r--r--libtommath/bn_fast_s_mp_mul_digs.c103
-rw-r--r--libtommath/bn_fast_s_mp_mul_high_digs.c94
-rw-r--r--libtommath/bn_fast_s_mp_sqr.c110
-rw-r--r--libtommath/bn_mp_2expt.c44
-rw-r--r--libtommath/bn_mp_abs.c39
-rw-r--r--libtommath/bn_mp_add.c49
-rw-r--r--libtommath/bn_mp_add_d.c109
-rw-r--r--libtommath/bn_mp_addmod.c37
-rw-r--r--libtommath/bn_mp_and.c53
-rw-r--r--libtommath/bn_mp_clamp.c40
-rw-r--r--libtommath/bn_mp_clear.c40
-rw-r--r--libtommath/bn_mp_clear_multi.c30
-rw-r--r--libtommath/bn_mp_cmp.c39
-rw-r--r--libtommath/bn_mp_cmp_d.c40
-rw-r--r--libtommath/bn_mp_cmp_mag.c51
-rw-r--r--libtommath/bn_mp_cnt_lsb.c49
-rw-r--r--libtommath/bn_mp_copy.c64
-rw-r--r--libtommath/bn_mp_count_bits.c41
-rw-r--r--libtommath/bn_mp_div.c288
-rw-r--r--libtommath/bn_mp_div_2.c64
-rw-r--r--libtommath/bn_mp_div_2d.c93
-rw-r--r--libtommath/bn_mp_div_3.c75
-rw-r--r--libtommath/bn_mp_div_d.c110
-rw-r--r--libtommath/bn_mp_dr_is_modulus.c39
-rw-r--r--libtommath/bn_mp_dr_reduce.c90
-rw-r--r--libtommath/bn_mp_dr_setup.c28
-rw-r--r--libtommath/bn_mp_exch.c30
-rw-r--r--libtommath/bn_mp_expt_d.c53
-rw-r--r--libtommath/bn_mp_exptmod.c108
-rw-r--r--libtommath/bn_mp_exptmod_fast.c316
-rw-r--r--libtommath/bn_mp_exteuclid.c78
-rw-r--r--libtommath/bn_mp_fread.c63
-rw-r--r--libtommath/bn_mp_fwrite.c48
-rw-r--r--libtommath/bn_mp_gcd.c101
-rw-r--r--libtommath/bn_mp_get_int.c41
-rw-r--r--libtommath/bn_mp_grow.c53
-rw-r--r--libtommath/bn_mp_init.c42
-rw-r--r--libtommath/bn_mp_init_copy.c28
-rw-r--r--libtommath/bn_mp_init_multi.c55
-rw-r--r--libtommath/bn_mp_init_set.c28
-rw-r--r--libtommath/bn_mp_init_set_int.c27
-rw-r--r--libtommath/bn_mp_init_size.c44
-rw-r--r--libtommath/bn_mp_invmod.c39
-rw-r--r--libtommath/bn_mp_invmod_slow.c171
-rw-r--r--libtommath/bn_mp_is_square.c105
-rw-r--r--libtommath/bn_mp_jacobi.c101
-rw-r--r--libtommath/bn_mp_karatsuba_mul.c163
-rw-r--r--libtommath/bn_mp_karatsuba_sqr.c117
-rw-r--r--libtommath/bn_mp_lcm.c56
-rw-r--r--libtommath/bn_mp_lshd.c63
-rw-r--r--libtommath/bn_mp_mod.c44
-rw-r--r--libtommath/bn_mp_mod_2d.c51
-rw-r--r--libtommath/bn_mp_mod_d.c23
-rw-r--r--libtommath/bn_mp_montgomery_calc_normalization.c55
-rw-r--r--libtommath/bn_mp_montgomery_reduce.c114
-rw-r--r--libtommath/bn_mp_montgomery_setup.c55
-rw-r--r--libtommath/bn_mp_mul.c62
-rw-r--r--libtommath/bn_mp_mul_2.c78
-rw-r--r--libtommath/bn_mp_mul_2d.c81
-rw-r--r--libtommath/bn_mp_mul_d.c75
-rw-r--r--libtommath/bn_mp_mulmod.c36
-rw-r--r--libtommath/bn_mp_n_root.c128
-rw-r--r--libtommath/bn_mp_neg.c36
-rw-r--r--libtommath/bn_mp_or.c46
-rw-r--r--libtommath/bn_mp_prime_fermat.c58
-rw-r--r--libtommath/bn_mp_prime_is_divisible.c46
-rw-r--r--libtommath/bn_mp_prime_is_prime.c79
-rw-r--r--libtommath/bn_mp_prime_miller_rabin.c99
-rw-r--r--libtommath/bn_mp_prime_next_prime.c166
-rw-r--r--libtommath/bn_mp_prime_rabin_miller_trials.c48
-rw-r--r--libtommath/bn_mp_prime_random_ex.c121
-rw-r--r--libtommath/bn_mp_radix_size.c83
-rw-r--r--libtommath/bn_mp_radix_smap.c20
-rw-r--r--libtommath/bn_mp_rand.c51
-rw-r--r--libtommath/bn_mp_read_radix.c88
-rw-r--r--libtommath/bn_mp_read_signed_bin.c37
-rw-r--r--libtommath/bn_mp_read_unsigned_bin.c51
-rw-r--r--libtommath/bn_mp_reduce.c96
-rw-r--r--libtommath/bn_mp_reduce_2k.c57
-rw-r--r--libtommath/bn_mp_reduce_2k_l.c58
-rw-r--r--libtommath/bn_mp_reduce_2k_setup.c43
-rw-r--r--libtommath/bn_mp_reduce_2k_setup_l.c40
-rw-r--r--libtommath/bn_mp_reduce_is_2k.c48
-rw-r--r--libtommath/bn_mp_reduce_is_2k_l.c40
-rw-r--r--libtommath/bn_mp_reduce_setup.c30
-rw-r--r--libtommath/bn_mp_rshd.c68
-rw-r--r--libtommath/bn_mp_set.c25
-rw-r--r--libtommath/bn_mp_set_int.c44
-rw-r--r--libtommath/bn_mp_shrink.c36
-rw-r--r--libtommath/bn_mp_signed_bin_size.c23
-rw-r--r--libtommath/bn_mp_sqr.c54
-rw-r--r--libtommath/bn_mp_sqrmod.c37
-rw-r--r--libtommath/bn_mp_sqrt.c142
-rw-r--r--libtommath/bn_mp_sub.c55
-rw-r--r--libtommath/bn_mp_sub_d.c89
-rw-r--r--libtommath/bn_mp_submod.c38
-rw-r--r--libtommath/bn_mp_to_signed_bin.c29
-rw-r--r--libtommath/bn_mp_to_signed_bin_n.c27
-rw-r--r--libtommath/bn_mp_to_unsigned_bin.c44
-rw-r--r--libtommath/bn_mp_to_unsigned_bin_n.c27
-rw-r--r--libtommath/bn_mp_toom_mul.c280
-rw-r--r--libtommath/bn_mp_toom_sqr.c222
-rw-r--r--libtommath/bn_mp_toradix.c71
-rw-r--r--libtommath/bn_mp_toradix_n.c84
-rw-r--r--libtommath/bn_mp_unsigned_bin_size.c24
-rw-r--r--libtommath/bn_mp_xor.c47
-rw-r--r--libtommath/bn_mp_zero.c32
-rw-r--r--libtommath/bn_prime_tab.c57
-rw-r--r--libtommath/bn_reverse.c35
-rw-r--r--libtommath/bn_s_mp_add.c105
-rw-r--r--libtommath/bn_s_mp_exptmod.c248
-rw-r--r--libtommath/bn_s_mp_mul_digs.c86
-rw-r--r--libtommath/bn_s_mp_mul_high_digs.c77
-rw-r--r--libtommath/bn_s_mp_sqr.c80
-rw-r--r--libtommath/bn_s_mp_sub.c85
-rw-r--r--libtommath/bncore.c32
-rw-r--r--libtommath/booker.pl265
-rw-r--r--libtommath/callgraph.txt11913
-rw-r--r--libtommath/changes.txt403
-rw-r--r--libtommath/demo/demo.c736
-rw-r--r--libtommath/demo/timing.c315
-rw-r--r--libtommath/dep.pl123
-rw-r--r--libtommath/etc/2kprime.12
-rw-r--r--libtommath/etc/2kprime.c75
-rw-r--r--libtommath/etc/drprime.c59
-rw-r--r--libtommath/etc/drprimes.2825
-rw-r--r--libtommath/etc/drprimes.txt9
-rw-r--r--libtommath/etc/makefile50
-rw-r--r--libtommath/etc/makefile.icc67
-rw-r--r--libtommath/etc/makefile.msvc23
-rw-r--r--libtommath/etc/mersenne.c140
-rw-r--r--libtommath/etc/mont.c41
-rw-r--r--libtommath/etc/pprime.c396
-rw-r--r--libtommath/etc/prime.1024414
-rw-r--r--libtommath/etc/prime.512205
-rw-r--r--libtommath/etc/timer.asm37
-rw-r--r--libtommath/etc/tune.c138
-rw-r--r--libtommath/gen.pl17
-rw-r--r--libtommath/logs/README13
-rw-r--r--libtommath/logs/add.log16
-rw-r--r--libtommath/logs/addsub.pngbin0 -> 6253 bytes
-rw-r--r--libtommath/logs/expt.log7
-rw-r--r--libtommath/logs/expt.pngbin0 -> 6604 bytes
-rw-r--r--libtommath/logs/expt_2k.log5
-rw-r--r--libtommath/logs/expt_2kl.log4
-rw-r--r--libtommath/logs/expt_dr.log7
-rw-r--r--libtommath/logs/graphs.dem17
-rw-r--r--libtommath/logs/index.html24
-rw-r--r--libtommath/logs/invmod.log0
-rw-r--r--libtommath/logs/invmod.pngbin0 -> 4917 bytes
-rw-r--r--libtommath/logs/mult.log84
-rw-r--r--libtommath/logs/mult.pngbin0 -> 6769 bytes
-rw-r--r--libtommath/logs/mult_kara.log84
-rw-r--r--libtommath/logs/sqr.log84
-rw-r--r--libtommath/logs/sqr_kara.log84
-rw-r--r--libtommath/logs/sub.log16
-rw-r--r--libtommath/makefile186
-rw-r--r--libtommath/makefile.bcc44
-rw-r--r--libtommath/makefile.cygwin_dll51
-rw-r--r--libtommath/makefile.icc116
-rw-r--r--libtommath/makefile.msvc40
-rw-r--r--libtommath/makefile.shared102
-rw-r--r--libtommath/mess.sh4
-rw-r--r--libtommath/mtest/logtab.h19
-rw-r--r--libtommath/mtest/mpi-config.h85
-rw-r--r--libtommath/mtest/mpi-types.h15
-rw-r--r--libtommath/mtest/mpi.c3979
-rw-r--r--libtommath/mtest/mpi.h225
-rw-r--r--libtommath/mtest/mtest.c304
-rw-r--r--libtommath/pics/design_process.sxdbin0 -> 6950 bytes
-rw-r--r--libtommath/pics/design_process.tifbin0 -> 79042 bytes
-rw-r--r--libtommath/pics/expt_state.sxdbin0 -> 6869 bytes
-rw-r--r--libtommath/pics/expt_state.tifbin0 -> 87540 bytes
-rw-r--r--libtommath/pics/makefile35
-rw-r--r--libtommath/pics/primality.tifbin0 -> 85512 bytes
-rw-r--r--libtommath/pics/radix.sxdbin0 -> 6181 bytes
-rw-r--r--libtommath/pics/sliding_window.sxdbin0 -> 6787 bytes
-rw-r--r--libtommath/pics/sliding_window.tifbin0 -> 53880 bytes
-rw-r--r--libtommath/poster.out0
-rw-r--r--libtommath/poster.pdfbin0 -> 37822 bytes
-rw-r--r--libtommath/poster.tex35
-rw-r--r--libtommath/pre_gen/mpi.c9048
-rw-r--r--libtommath/pretty.build66
-rw-r--r--libtommath/tombc/grammar.txt35
-rw-r--r--libtommath/tommath.h579
-rw-r--r--libtommath/tommath.out139
-rw-r--r--libtommath/tommath.pdfbin0 -> 1194158 bytes
-rw-r--r--libtommath/tommath.src6350
-rw-r--r--libtommath/tommath.tex6691
-rw-r--r--libtommath/tommath_class.h995
-rw-r--r--libtommath/tommath_superclass.h72
-rw-r--r--license.terms2
-rw-r--r--mac/AppleScript.html312
-rw-r--r--mac/Background.doc92
-rwxr-xr-xmac/MW_TclAppleScriptHeader.h7
-rw-r--r--mac/MW_TclAppleScriptHeader.pch36
-rw-r--r--mac/MW_TclBuildLibHeader.h7
-rw-r--r--mac/MW_TclBuildLibHeader.pch35
-rwxr-xr-xmac/MW_TclHeader.h7
-rw-r--r--mac/MW_TclHeader.pch33
-rw-r--r--mac/MW_TclHeaderCommon.h54
-rw-r--r--mac/MW_TclStaticHeader.h7
-rw-r--r--mac/MW_TclStaticHeader.pch35
-rwxr-xr-xmac/MW_TclTestHeader.h7
-rwxr-xr-xmac/MW_TclTestHeader.pch41
-rw-r--r--mac/README69
-rw-r--r--mac/bugs.doc44
-rw-r--r--mac/libmoto.doc39
-rw-r--r--mac/morefiles.doc74
-rw-r--r--mac/porting.notes23
-rw-r--r--mac/tclMac.h28
-rw-r--r--mac/tclMacAETE.r58
-rw-r--r--mac/tclMacAlloc.c412
-rw-r--r--mac/tclMacAppInit.c213
-rw-r--r--mac/tclMacApplication.r115
-rw-r--r--mac/tclMacBOAAppInit.c257
-rw-r--r--mac/tclMacBOAMain.c304
-rw-r--r--mac/tclMacChan.c1300
-rwxr-xr-xmac/tclMacCommonPch.h71
-rw-r--r--mac/tclMacDNR.c23
-rw-r--r--mac/tclMacEnv.c536
-rw-r--r--mac/tclMacExit.c333
-rw-r--r--mac/tclMacFCmd.c1652
-rw-r--r--mac/tclMacFile.c1350
-rw-r--r--mac/tclMacInit.c805
-rw-r--r--mac/tclMacInt.h77
-rw-r--r--mac/tclMacInterupt.c289
-rw-r--r--mac/tclMacLibrary.c248
-rw-r--r--mac/tclMacLibrary.r209
-rw-r--r--mac/tclMacLoad.c380
-rw-r--r--mac/tclMacMath.h145
-rw-r--r--mac/tclMacNotify.c581
-rw-r--r--mac/tclMacOSA.c2958
-rw-r--r--mac/tclMacOSA.r78
-rw-r--r--mac/tclMacPanic.c172
-rw-r--r--mac/tclMacPort.h279
-rw-r--r--mac/tclMacProjects.sea.hqx3759
-rw-r--r--mac/tclMacResource.c2222
-rw-r--r--mac/tclMacResource.r44
-rw-r--r--mac/tclMacSock.c2792
-rw-r--r--mac/tclMacTclCode.r37
-rw-r--r--mac/tclMacTest.c213
-rw-r--r--mac/tclMacThrd.c871
-rw-r--r--mac/tclMacThrd.h20
-rw-r--r--mac/tclMacTime.c435
-rw-r--r--mac/tclMacUnix.c425
-rw-r--r--mac/tclMacUtil.c514
-rw-r--r--mac/tcltkMacBuildSupport.sea.hqx3970
-rw-r--r--macosx/GNUmakefile208
-rw-r--r--macosx/Makefile239
-rw-r--r--macosx/README232
-rw-r--r--macosx/Tcl-Common.xcconfig37
-rw-r--r--macosx/Tcl-Debug.xcconfig20
-rw-r--r--macosx/Tcl-Info.plist.in36
-rw-r--r--macosx/Tcl-Release.xcconfig20
-rw-r--r--macosx/Tcl.pbproj/jingham.pbxuser79
-rw-r--r--macosx/Tcl.pbproj/project.pbxproj1270
-rw-r--r--macosx/Tcl.xcode/default.pbxuser200
-rw-r--r--macosx/Tcl.xcode/project.pbxproj2936
-rw-r--r--macosx/Tcl.xcodeproj/default.pbxuser211
-rw-r--r--macosx/Tcl.xcodeproj/project.pbxproj3041
-rw-r--r--macosx/Tclsh-Info.plist.in36
-rw-r--r--macosx/configure.ac11
-rw-r--r--macosx/tclMacOSXBundle.c356
-rw-r--r--macosx/tclMacOSXFCmd.c721
-rw-r--r--macosx/tclMacOSXNotify.c2036
-rw-r--r--pkgs/README57
-rw-r--r--pkgs/package.list.txt35
-rw-r--r--tests/README2
-rw-r--r--tests/all.tcl20
-rw-r--r--tests/append.test252
-rw-r--r--tests/appendComp.test301
-rw-r--r--tests/apply.test321
-rw-r--r--tests/assemble.test3292
-rw-r--r--tests/assemble1.bench85
-rw-r--r--tests/assocd.test72
-rw-r--r--tests/async.test147
-rw-r--r--tests/autoMkindex.test303
-rw-r--r--tests/basic.test557
-rw-r--r--tests/binary.test2468
-rw-r--r--tests/case.test20
-rw-r--r--tests/chan.test275
-rw-r--r--tests/chanio.test7723
-rw-r--r--tests/clock.test37104
-rw-r--r--tests/cmdAH.test1863
-rw-r--r--tests/cmdIL.test574
-rw-r--r--tests/cmdInfo.test29
-rw-r--r--tests/cmdMZ.test335
-rw-r--r--tests/compExpr-old.test513
-rw-r--r--tests/compExpr.test373
-rw-r--r--tests/compile.test741
-rw-r--r--tests/concat.test33
-rw-r--r--tests/config.test60
-rw-r--r--tests/coroutine.test739
-rw-r--r--tests/dcall.test44
-rw-r--r--tests/dict.test1979
-rw-r--r--tests/dstring.test327
-rw-r--r--tests/encoding.test281
-rw-r--r--tests/env.test342
-rw-r--r--tests/error.test1108
-rw-r--r--tests/eval.test56
-rw-r--r--tests/event.test663
-rw-r--r--tests/exec.test549
-rw-r--r--tests/execute.test518
-rw-r--r--tests/expr-old.test559
-rw-r--r--tests/expr.test6931
-rw-r--r--tests/fCmd.test2842
-rw-r--r--tests/fileName.test2023
-rw-r--r--tests/fileSystem.test1147
-rw-r--r--tests/for-old.test14
-rw-r--r--tests/for.test521
-rw-r--r--tests/foreach.test68
-rw-r--r--tests/format.test147
-rw-r--r--tests/get.test120
-rw-r--r--tests/history.test253
-rw-r--r--tests/http.test559
-rw-r--r--tests/http11.test656
-rw-r--r--tests/httpd44
-rw-r--r--tests/httpd11.tcl254
-rw-r--r--tests/httpold.test14
-rw-r--r--tests/if-old.test2
-rw-r--r--tests/if.test729
-rw-r--r--tests/incr-old.test22
-rw-r--r--tests/incr.test345
-rw-r--r--tests/indexObj.test145
-rw-r--r--tests/info.test2197
-rw-r--r--tests/init.test165
-rw-r--r--tests/interp.test2237
-rw-r--r--tests/io.test1158
-rw-r--r--tests/ioCmd.test3535
-rw-r--r--tests/ioTrans.test1918
-rw-r--r--tests/ioUtil.test310
-rw-r--r--tests/iogt.test537
-rw-r--r--tests/join.test27
-rw-r--r--tests/lindex.test307
-rw-r--r--tests/link.test290
-rw-r--r--tests/linsert.test14
-rw-r--r--tests/list.test28
-rw-r--r--tests/listObj.test57
-rw-r--r--tests/llength.test14
-rw-r--r--tests/lmap.test471
-rw-r--r--tests/load.test89
-rw-r--r--tests/lrange.test23
-rw-r--r--tests/lrepeat.test84
-rw-r--r--tests/lreplace.test12
-rw-r--r--tests/lsearch.test238
-rw-r--r--tests/lset.test464
-rw-r--r--[-rwxr-xr-x]tests/lsetComp.test4
-rw-r--r--tests/macFCmd.test203
-rw-r--r--tests/macOSXFCmd.test181
-rw-r--r--tests/macOSXLoad.test33
-rw-r--r--tests/main.test183
-rw-r--r--tests/mathop.test1340
-rw-r--r--tests/misc.test37
-rw-r--r--tests/msgcat.test159
-rw-r--r--tests/namespace-old.test182
-rw-r--r--tests/namespace.test1821
-rw-r--r--[-rwxr-xr-x]tests/notify.test5
-rw-r--r--tests/nre.test426
-rw-r--r--tests/obj.test293
-rw-r--r--tests/oo.test3512
-rw-r--r--tests/ooNext2.test788
-rw-r--r--tests/opt.test67
-rw-r--r--tests/osa.test48
-rw-r--r--tests/package.test1258
-rw-r--r--tests/parse.test780
-rw-r--r--tests/parseExpr.test1132
-rw-r--r--tests/parseOld.test36
-rw-r--r--tests/pid.test32
-rw-r--r--tests/pkg.test665
-rw-r--r--tests/pkgMkIndex.test177
-rw-r--r--tests/platform.test38
-rw-r--r--tests/proc-old.test57
-rw-r--r--tests/proc.test454
-rw-r--r--tests/pwd.test23
-rw-r--r--tests/reg.test1565
-rw-r--r--tests/regexp.test596
-rw-r--r--tests/regexpComp.test477
-rw-r--r--tests/registry.test919
-rw-r--r--tests/remote.tcl45
-rw-r--r--tests/rename.test201
-rw-r--r--tests/resolver.test203
-rw-r--r--tests/resource.test365
-rw-r--r--tests/result.test83
-rw-r--r--tests/safe.test1064
-rw-r--r--tests/scan.test736
-rw-r--r--tests/security.test29
-rw-r--r--tests/set-old.test40
-rw-r--r--tests/set.test49
-rw-r--r--tests/socket.test1554
-rw-r--r--tests/source.test229
-rw-r--r--tests/split.test34
-rw-r--r--tests/stack.test88
-rw-r--r--tests/string.test763
-rw-r--r--tests/stringComp.test599
-rw-r--r--tests/stringObj.test284
-rw-r--r--tests/subst.test169
-rw-r--r--tests/switch.test792
-rw-r--r--tests/tailcall.test666
-rw-r--r--[-rwxr-xr-x]tests/tcltest.test263
-rw-r--r--tests/thread.test1495
-rw-r--r--tests/timer.test327
-rw-r--r--tests/tm.test245
-rw-r--r--tests/trace.test886
-rw-r--r--tests/unixFCmd.test391
-rw-r--r--tests/unixFile.test26
-rw-r--r--tests/unixForkEvent.test45
-rw-r--r--tests/unixInit.test385
-rw-r--r--tests/unixNotfy.test99
-rw-r--r--tests/unknown.test32
-rw-r--r--tests/unload.test245
-rw-r--r--tests/uplevel.test128
-rw-r--r--tests/upvar.test396
-rw-r--r--tests/utf.test200
-rw-r--r--tests/util.test3745
-rw-r--r--tests/var.test634
-rw-r--r--tests/while-old.test16
-rw-r--r--tests/while.test403
-rw-r--r--tests/winConsole.test8
-rw-r--r--tests/winDde.test546
-rw-r--r--tests/winFCmd.test1543
-rw-r--r--tests/winFile.test251
-rw-r--r--tests/winNotify.test48
-rw-r--r--tests/winPipe.test239
-rw-r--r--tests/winTime.test9
-rw-r--r--tests/zlib.test878
-rw-r--r--tools/Makefile.in2
-rw-r--r--tools/README3
-rwxr-xr-xtools/checkLibraryDoc.tcl30
-rwxr-xr-xtools/configure2215
-rw-r--r--tools/configure.in4
-rw-r--r--tools/cvtEOL.tcl35
-rw-r--r--tools/encoding/big5.txt2
-rw-r--r--[-rwxr-xr-x]tools/encoding/ebcdic.txt0
-rw-r--r--tools/encoding/gb2312.txt2
-rw-r--r--[-rwxr-xr-x]tools/encoding/tis-620.txt0
-rw-r--r--tools/eolFix.tcl18
-rwxr-xr-xtools/findBadExternals.tcl53
-rwxr-xr-xtools/fix_tommath_h.tcl102
-rw-r--r--tools/genStubs.tcl718
-rw-r--r--tools/genWinImage.tcl157
-rw-r--r--tools/index.tcl15
-rw-r--r--tools/installData.tcl50
-rwxr-xr-xtools/loadICU.tcl619
-rwxr-xr-xtools/makeTestCases.tcl1180
-rw-r--r--tools/man2help.tcl10
-rw-r--r--tools/man2help2.tcl188
-rw-r--r--tools/man2html.tcl174
-rw-r--r--tools/man2html1.tcl35
-rw-r--r--tools/man2html2.tcl468
-rw-r--r--tools/man2tcl.c252
-rw-r--r--tools/mkdepend.tcl420
-rw-r--r--tools/regexpTestLib.tcl33
-rw-r--r--tools/str2c8
-rw-r--r--tools/tcl.hpj.in4
-rw-r--r--tools/tcl.wse.in2376
-rw-r--r--tools/tclSplash.bmpbin162030 -> 0 bytes
-rwxr-xr-xtools/tclZIC.tcl1375
-rw-r--r--tools/tclmin.wse247
-rw-r--r--tools/tclsh.svg67
-rw-r--r--tools/tcltk-man2html-utils.tcl1629
-rwxr-xr-xtools/tcltk-man2html.tcl2129
-rw-r--r--tools/tsdPerf.c59
-rw-r--r--tools/tsdPerf.tcl24
-rw-r--r--tools/uniClass.tcl53
-rw-r--r--tools/uniParse.tcl159
-rw-r--r--unix/Makefile.in1978
-rw-r--r--unix/README230
-rw-r--r--unix/aclocal.m42
-rwxr-xr-xunix/configure22998
-rw-r--r--unix/configure.in838
-rw-r--r--unix/dltest/Makefile.in90
-rw-r--r--unix/dltest/README6
-rw-r--r--unix/dltest/pkga.c83
-rw-r--r--unix/dltest/pkgb.c126
-rw-r--r--unix/dltest/pkgc.c100
-rw-r--r--unix/dltest/pkgd.c97
-rw-r--r--unix/dltest/pkge.c40
-rw-r--r--unix/dltest/pkgf.c53
-rw-r--r--unix/dltest/pkgooa.c141
-rw-r--r--unix/dltest/pkgua.c341
-rwxr-xr-xunix/install-sh580
-rwxr-xr-xunix/installManPage117
-rwxr-xr-xunix/ldAix40
-rw-r--r--unix/mkLinks1857
-rw-r--r--unix/mkLinks.tcl119
-rw-r--r--unix/tcl.m42746
-rw-r--r--unix/tcl.pc.in15
-rw-r--r--unix/tcl.spec51
-rw-r--r--unix/tclAppInit.c160
-rw-r--r--unix/tclConfig.h.in531
-rw-r--r--unix/tclConfig.sh.in23
-rw-r--r--unix/tclLoadAix.c955
-rw-r--r--unix/tclLoadAout.c536
-rw-r--r--unix/tclLoadDl.c237
-rw-r--r--unix/tclLoadDld.c201
-rw-r--r--unix/tclLoadDyld.c765
-rw-r--r--unix/tclLoadNext.c177
-rw-r--r--unix/tclLoadOSF.c177
-rw-r--r--unix/tclLoadShl.c199
-rw-r--r--unix/tclUnixChan.c2849
-rw-r--r--unix/tclUnixCompat.c1022
-rw-r--r--unix/tclUnixEvent.c59
-rw-r--r--unix/tclUnixFCmd.c2259
-rw-r--r--unix/tclUnixFile.c1076
-rw-r--r--unix/tclUnixInit.c1477
-rw-r--r--unix/tclUnixNotfy.c1439
-rw-r--r--unix/tclUnixPipe.c940
-rw-r--r--unix/tclUnixPort.h605
-rw-r--r--unix/tclUnixSock.c1502
-rw-r--r--unix/tclUnixTest.c495
-rw-r--r--unix/tclUnixThrd.c623
-rw-r--r--unix/tclUnixThrd.h2
-rw-r--r--unix/tclUnixTime.c550
-rw-r--r--unix/tclXtNotify.c385
-rw-r--r--unix/tclXtTest.c79
-rw-r--r--unix/tclooConfig.sh19
-rw-r--r--win/.cvsignore15
-rw-r--r--win/Makefile.in681
-rw-r--r--win/README99
-rw-r--r--win/README.binary143
-rw-r--r--[-rwxr-xr-x]win/buildall.vc.bat101
-rw-r--r--win/cat.c16
-rw-r--r--win/coffbase.txt21
-rwxr-xr-xwin/configure6657
-rw-r--r--win/configure.in407
-rw-r--r--win/makefile.bc178
-rw-r--r--win/makefile.vc866
-rw-r--r--win/nmakehlp.c576
-rw-r--r--win/rules.vc500
-rw-r--r--win/stub16.c198
-rw-r--r--win/tcl.dsp72
-rw-r--r--win/tcl.hpj.in4
-rw-r--r--win/tcl.m4942
-rw-r--r--win/tcl.rc10
-rw-r--r--win/tclAppInit.c391
-rw-r--r--win/tclConfig.sh.in4
-rw-r--r--win/tclWin32Dll.c1213
-rw-r--r--win/tclWinChan.c1329
-rw-r--r--win/tclWinConsole.c1007
-rw-r--r--win/tclWinDde.c2131
-rw-r--r--win/tclWinError.c96
-rw-r--r--win/tclWinFCmd.c1660
-rw-r--r--win/tclWinFile.c3698
-rw-r--r--win/tclWinInit.c781
-rw-r--r--win/tclWinInt.h139
-rw-r--r--win/tclWinLoad.c412
-rw-r--r--win/tclWinMtherr.c53
-rw-r--r--win/tclWinNotify.c615
-rw-r--r--win/tclWinPipe.c1852
-rw-r--r--win/tclWinPort.h439
-rw-r--r--win/tclWinReg.c1071
-rw-r--r--win/tclWinSerial.c2652
-rw-r--r--win/tclWinSock.c2701
-rw-r--r--win/tclWinTest.c675
-rw-r--r--win/tclWinThrd.c861
-rw-r--r--win/tclWinThrd.h21
-rw-r--r--win/tclWinTime.c1077
-rw-r--r--win/tclooConfig.sh19
-rw-r--r--win/tclsh.exe.manifest.in33
-rw-r--r--win/tclsh.icobin3630 -> 57022 bytes
-rw-r--r--win/tclsh.rc23
1972 files changed, 617239 insertions, 195872 deletions
diff --git a/.fossil-settings/binary-glob b/.fossil-settings/binary-glob
new file mode 100644
index 0000000..ca85874
--- /dev/null
+++ b/.fossil-settings/binary-glob
@@ -0,0 +1,3 @@
+*.bmp
+*.gif
+*.png
diff --git a/.fossil-settings/crnl-glob b/.fossil-settings/crnl-glob
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/.fossil-settings/crnl-glob
diff --git a/.fossil-settings/ignore-glob b/.fossil-settings/ignore-glob
new file mode 100644
index 0000000..9ed86b1
--- /dev/null
+++ b/.fossil-settings/ignore-glob
@@ -0,0 +1,24 @@
+*.a
+*.dll
+*.dylib
+*.exe
+*.exp
+*.lib
+*.o
+*.obj
+*.res
+*.sl
+*.so
+*/Makefile
+*/config.cache
+*/config.log
+*/config.status
+*/tclConfig.sh
+*/tclsh*
+*/tcltest*
+*/versions.vc
+unix/dltest.marker
+unix/tcl.pc
+unix/pkgs/*
+win/pkgs/*
+win/tcl.hpj
diff --git a/.project b/.project
new file mode 100644
index 0000000..358cc74
--- /dev/null
+++ b/.project
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+ <name>tcl8.6</name>
+ <comment></comment>
+ <projects>
+ </projects>
+ <buildSpec>
+ </buildSpec>
+ <natures>
+ </natures>
+</projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
new file mode 100644
index 0000000..99f26c0
--- /dev/null
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
diff --git a/.settings/org.eclipse.core.runtime.prefs b/.settings/org.eclipse.core.runtime.prefs
new file mode 100644
index 0000000..5a0ad22
--- /dev/null
+++ b/.settings/org.eclipse.core.runtime.prefs
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+line.separator=\n
diff --git a/ChangeLog b/ChangeLog
index 0569fbf..bb441a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7835 +1,8847 @@
-2004-10-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+A NOTE ON THE CHANGELOG:
+Starting in early 2011, Tcl source code has been under the management of
+fossil, hosted at http://core.tcl.tk/tcl/ . Fossil presents a "Timeline"
+view of changes made that is superior in every way to a hand edited log file.
+Because of this, many Tcl developers are now out of the habit of maintaining
+this log file. You may still find useful things in it, but the Timeline is
+a better first place to look now.
+============================================================================
- * doc/*.n: Backporting of documentation updates.
+2013-09-19 Don Porter <dgp@users.sourceforge.net>
-2004-10-26 Don Porter <dgp@users.sourceforge.net>
+ *** 8.6.1 TAGGED FOR RELEASE ***
- * tests/subst.test (subst-12.3-5): More tests for Bug 1036649.
+ * generic/tcl.h: Bump version number to 8.6.1.
+ * library/init.tcl:
+ * unix/configure.in:
+ * win/configure.in:
+ * unix/tcl.spec:
+ * README:
- * tests/compile.test (compile-12.4): Backport test for Bug 1001997.
- * tests/timer.test (timer-10.1): Backport test for Bug 1016167.
- * tests/tcltest.test (tcltest-12.3,4): Backport setup corrections.
- * tests/error.test (error-6.3,4,7,9): Backport of some tests.
- * tests/basic.test (basic-49.*):
- * tests/namespace.test (namespace-8.7):
- * tests/init.test (init-2.8): Updated to not rely on http package.
+ * unix/configure: autoconf-2.59
+ * win/configure:
- * generic/tclThreadTest.c (ThreadEventProc): Corrected subtle
- bug where the returned (char *) from Tcl_GetStringResult(interp)
- continued to be used without copying or refcounting, while
- activity on the interp continued.
+2013-09-19 Donal Fellows <dkf@users.sf.net>
-2004-10-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * doc/next.n (METHOD SEARCH ORDER): Bug [3606943]: Corrected
+ description of method search order.
- * generic/tclUtil.c (TclMatchIsTrivial): Detect degenerate cases
- of glob matching that let us avoid scanning through hash tables.
- * generic/tclCmdIL.c (InfoCommandsCmd, InfoGlobalsCmd, InfoProcsCmd):
- (InfoVarsCmd): Use this to speed up some [info] subcommands.
+2013-09-18 Donal Fellows <dkf@users.sf.net>
-2004-10-08 Jeff Hobbs <jeffh@ActiveState.com>
+ Bump TclOO version to 1.0.1 for release.
- * win/tclWinFile.c (NativeIsExec): correct result of 'file
- executable' to not be case sensitive. [Bug 954263]
+2013-09-17 Donal Fellows <dkf@users.sf.net>
-2004-10-05 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclBinary.c (BinaryEncodeUu, BinaryDecodeUu): [Bug 2152292]:
+ Corrected implementation of the core of uuencode handling so that the
+ line length processing is correctly applied.
+ ***POTENTIAL INCOMPATIBILITY***
+ Existing code that was using the old versions and working around the
+ limitations will now need to do far less. The -maxlen option now has
+ strict limits on the range of supported lengths; this is a limitation
+ of the format itself.
- * generic/tclNamesp.c (Tcl_PopCallFrame): Removed Bug 1038021
- workaround. That bug is now fixed.
+2013-09-09 Donal Fellows <dkf@users.sf.net>
-2004-09-30 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclOOMethod.c (CloneProcedureMethod): [Bug 3609693]: Strip
+ the internal representation of method bodies during cloning in order
+ to ensure that any bound references to instance variables are removed.
- * generic/tclNamespace.c (TclTeardownNamespace): Tcl_Obj-ified
- * tests/namespace.test (namespace-8.5,6): the save/restore
- of ::errorInfo and ::errorCode during global namespace teardown.
- Revised the comment to clarify why this is done, and added tests
- that will fail if this is not done.
+2013-09-01 Donal Fellows <dkf@users.sf.net>
- * generic/tclResult.c (TclTransferResult): Added safety
- checks so that unexpected undefined ::errorInfo or ::errorCode
- will not lead to a segfault.
+ * generic/tclBinary.c (BinaryDecodeHex): [Bug b98fa55285]: Ensure that
+ whitespace at the end of a string don't cause the decoder to drop the
+ last decoded byte.
- * generic/tclVar.c (CallVarTraces): Save/restore the flag
- * tests/var.test (var-16.1): values that define part of the
- interpreter state during variable traces. [Bug 1038021].
+2013-08-03 Donal Fellows <dkf@users.sf.net>
-2004-09-30 Miguel Sofer <msofer@users.sf.net>
+ * library/auto.tcl: [Patch 3611643]: Allow TclOO classes to be found
+ by the autoloading mechanism.
- * tests/subst.test (12.2): test correction.
+2013-08-02 Donal Fellows <dkf@users.sf.net>
-2004-09-29 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclOODefineCmds.c (ClassSuperSet): Bug [9d61624b3d]: Stop
+ crashes when emptying the superclass slot, even when doing elaborate
+ things with metaclasses.
- * generic/tclBasic.c (Tcl_EvalEx):
- * tests/subst.test (12.1-2): fix for buffer overflow in [subst],
- [Bug 1036649]
+2013-08-01 Harald Oehlmann <oehhar@users.sf.net>
-2004-09-23 Mo DeJong <mdejong@users.sourceforge.net>
+ * tclUnixNotify.c (Tcl_InitNotifier): Bug [a0bc856dcd]: Start notifier
+ thread again if we were forked, to solve Rivet bug 55153.
- * unix/dltest/Makefile.in (clean): Fixup make clean
- rule so that it does not delete all files when
- SHLIB_SUFFIX is set to the empty string in a static build.
- [Bug 1016726]
+2013-07-05 Kevin B. Kenny <kennykb@acm.org>
-2004-09-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/America/Asuncion:
+ * library/tzdata/Antarctica/Macquarie:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Hebron:
+ * library/tzdata/Asia/Jerusalem:
+ http://www.iana.org/time-zones/repository/releases/tzdata2013d.tar.gz
- * generic/tclExecute.c (TEBC-INST_LSHIFT,INST_RSHIFT): Ensure that
- large shifts end up shifting correctly. [Bug 868467]
+2013-07-03 Jan Nijtmans <nijtmans@users.sf.net>
-2004-09-15 Daniel Steffen <das@users.sourceforge.net>
+ * unix/tclXtNotify.c: Bug [817249]: bring tclXtNotify.c up to date with
+ Tcl_SetNotifier() change.
- * tests/load.test (load-2.3): adopted fix for failure on darwin
- from HEAD.
+2013-07-02 Jan Nijtmans <nijtmans@users.sf.net>
-2004-09-14 Don Porter <dgp@users.sourceforge.net>
+ * unix/tcl.m4: Bug [32afa6e256]: dirent64 check is incorrect in tcl.m4
+ * unix/configure: (thanks to Brian Griffin)
- * generic/tclObj.c (Tcl_GetIntFromObj): Corrected flaw in returning
- the int value of a wideInteger. [Bug 1027690]
+2013-06-27 Jan Nijtmans <nijtmans@users.sf.net>
-2004-09-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * generic/tclConfig.c: Bug [9b2e636361]: Tcl_CreateInterp() needs
+ * generic/tclMain.c: initialized encodings.
- * generic/tclObj.c (SetIntOrWideFromAny): Rewritten integral value
- parsing code so that values do not flip so easily between numeric
- representations. Thanks to KBK for this! [Bug 868489]
+2013-06-18 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIO.c (Tcl_Seek): Make sure wide seeks do not fail to
- set ::errorCode on error. [Bug 1025359]
+ * generic/tclEvent.c: Bug [3611974]: InitSubsystems multiple thread
+ issue.
-2004-09-10 Andreas Kupries <andreask@activestate.com>
+2013-06-17 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tcl.h: Micro formatting fixes.
- * generic/tclIOGT.c: Channel version fixed, must be 3, to have
- wideseekProc. Thanks to David Graveraux <davygrvy@pobox.com>.
+ * generic/regc_locale.c: Bug [a876646efe]: re_expr character class
+ [:cntrl:] should contain \u0000 - \u001f
-2004-09-11 Don Porter <dgp@users.sourceforge.net>
+2013-06-09 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclNamespace.c (TclGetNamespaceForQualName): Resolved
- longstanding inconsistency in the treatment of the TCL_NAMESPACE_ONLY
- flag revealed by testing the 2004-09-09 commits against Itcl.
- TCL_NAMESPACE_ONLY now acts as specified in the pre-function
- comment, forcing resolution in the passed in context namespace.
- It has been incorrectly forcing resolution in the interp's current
- namespace.
+ * generic/tclCompCmdsSZ.c (TclCompileTryCmd): [Bug 779d38b996]:
+ Rewrote the [try] compiler to generate better code in some cases and
+ to behave correctly in others; when an error happens during the
+ processing of an exception-trap clause or a finally clause, the
+ *original* return options are now captured in a -during option, even
+ when fully compiled.
-2004-09-10 Miguel Sofer <msofer@users.sf.net>
+2013-06-05 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclExecute.c (INST_CONCAT1): added a peephole
- optimisation for concatting an empty string. This enables
- replacing the idiom 'K $x [set x {}]' by '$x[set x {}]' for
- fastest execution.
+ * generic/tclExecute.c (INST_EXPAND_DROP): [Bugs 2835313, 3614226]:
+ New opcode to allow resetting the stack to get rid of an expansion,
+ restoring the stack to a known state in the process.
+ * generic/tclCompile.c, generic/tclCompCmds.c: Adjusted the compilers
+ for [break] and [continue] to get stack cleanup right in the majority
+ of cases.
+ * tests/for.test (for-7.*): Set of tests for these evil cases.
-2004-09-09 Don Porter <dgp@users.sourceforge.net>
+2013-06-04 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclNamesp.c (Tcl_ForgetImport): Corrected faulty
- * tests/namespace.test: logic that relied exclusively on string
- matching and failed in the presence of [rename]s. [Bug 560297]
- Also corrected faulty prevention of [namespace import] cycles.
- [Bug 1017299]
+ * unix/tcl.m4: Eliminate NO_VIZ macro as current zlib uses HAVE_HIDDEN
+ instead. One more last-moment fix for FreeBSD by Pietro Cerutti
-2004-09-08 Kevin B. Kenny <kennykb@acm.org>
+2013-06-03 Miguel Sofer <msofer@users.sf.net>
- * compat/strftime.c (_conv): Corrected a problem where hour 0
- would format as a blank format group with %k.
- * tests/clock.test (clock-41.1): Added regression test case for
- %k at the zero hour.
+ * generic/tclExecute.c: fix for perf bug detected by Kieran
+ (https://groups.google.com/forum/?fromgroups#!topic/comp.lang.tcl/vfpI3bc-DkQ),
+ diagnosed by dgp to be a close relative of [Bug 781585], which was
+ fixed by commit [f46fb50cb3]. This bug was introduced by myself in
+ commit [cbfe055d8c].
-2004-09-07 Kevin B. Kenny <kennykb@acm.org>
+2013-06-03 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclTimer.c: Removed a premature optimisation that
- attempted to store the assoc data in the client data; the
- optimisation caused a bug that [after] would overwrite
- its imports. [Bug 1016167]
-
-2004-09-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * generic/tclCompCmds.c (TclCompileBreakCmd, TclCompileContinueCmd):
+ Added code to allow [break] and [continue] to be issued as a jump (in
+ the most common cases) rather than using the more expensive exception
+ processing path in the bytecode engine. [Bug 3614226]: Partial fix for
+ the issues relating to cleaning up the stack when dealing with [break]
+ and [continue].
- * doc/lsearch.n: Clarified meaning of -dictionary. [Bug 759545]
+2013-05-27 Harald Oehlmann <oehhar@users.sf.net>
-2004-09-01 Jeff Hobbs <jeffh@ActiveState.com>
+ * library/msgcat/msgcat.tcl: [Bug 3036566]: Also get locale from
+ registry key HCU\Control Panel\Desktop : PreferredUILanguages to honor
+ installed language packs on Vista+.
+ Bumped msgcat version to 1.5.2
- * win/tclWinReg.c (BroadcastValue): WIN64 cast corrections
+2013-05-22 Andreas Kupries <andreask@activestate.com>
- * win/tclWinDde.c (DdeClientWindowProc):
- (DdeServicesOnAck, DdeEnumWindowsCallback): WIN64 corrections
+ * tclCompile.c: Removed duplicate const qualifier causing the HP
+ native cc to error out.
- * win/tclWin32Dll.c (TclWinCPUID): need _asm for WIN64 (Itanium),
- until we have it, just return unknown. [Bug 1020445]
+2013-05-22 Donal K. Fellows <dkf@users.sf.net>
-2004-08-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * generic/tclUtf.c (TclUtfCasecmp): [Bug 3613609]: Replace problematic
+ uses of strcasecmp with a proper UTF-8-aware version. Affects both
+ [lsearch -nocase] and [lsort -nocase].
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): Stop [string map] from
- crashing when its map and input string are the same object.
+2013-05-22 Donal K. Fellows <dkf@users.sf.net>
-2004-08-27 Daniel Steffen <das@users.sourceforge.net>
+ * doc/file.n: [Bug 3613671]: Added note to portability section on the
+ fact that [file owned] does not produce useful results on Windows.
- * tests/env.test: macosx fixes.
+2013-05-20 Donal K. Fellows <dkf@users.sf.net>
-2004-08-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * unix/tclUnixFCmd.c (DefaultTempDir): [Bug 3613567]: Corrected logic
+ for checking return code of access() system call, which was inverted.
- * generic/tclScan.c (Tcl_ScanObjCmd, ValidateFormat): Ensure that
- the %ld conversion works correctly on 64-bit platforms. [Bug 1011860]
+2013-05-19 Jan Nijtmans <nijtmans@users.sf.net>
-2004-08-16 Miguel Sofer <msofer@users.sf.net>
+ * unix/tcl.m4: Fix for FreeBSD, and remove support for older
+ * unix/configure: FreeBSD versions. Patch by Pietro Cerutti.
- * doc/SetVar.3:
- * generic/tclTest.c (TestseterrorcodeCmd):
- * generic/tclVar.c (TclPtrSetVar):
- * tests/result.test (result-4.*, result-5.*): [Bug 1008314]
- detected and fixed by dgp.
+2013-05-18 Donal K. Fellows <dkf@users.sf.net>
-2004-08-13 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCompCmdsGR.c: Split tclCompCmds.c again to keep size of
+ code down.
- * library/msgcat/msgcat.tcl: Added checks to prevent [mclocale]
- * tests/msgcat.test: from registering filesystem paths to possibly
- malicious code to be evaluated by a later [mcload].
- * library/msgcat/pkgIndex.tcl: Bump to msgcat 1.3.3
+2013-05-16 Jan Nijtmans <nijtmans@users.sf.net>
-2004-08-10 Zoran Vasiljevic <vasiljevic@users.sf.net>
+ * generic/tclBasic.c: Add panic in order to detect incompatible
+ mingw32 sys/stat.h and sys/time.h headers.
- * unix/tclUnixThrd.c (TclpThreadCreate): changed handling of
- the returned thread ID since broken on 64-bit systems (Cray).
- Thanks to Rob Ratcliff for reporting the bug.
+2013-05-13 Jan Nijtmans <nijtmans@users.sf.net>
-2004-07-30 Don Porter <dgp@users.sourceforge.net>
+ * compat/zlib/*: Upgrade to zlib 1.2.8
- * generic/tclEvent.c (Tcl_Finalize): Re-organized Tcl_Finalize
- so that Tcl_ExitProc's that call Tcl_Finalize recursively do not
- cause deadlock. [Patch 999084 fixes Tk Bug 714956]
+2013-05-10 Donal K. Fellows <dkf@users.sf.net>
-2004-07-30 Daniel Steffen <das@users.sourceforge.net>
+ Optimizations and general bytecode generation improvements.
+ * generic/tclCompCmds.c (TclCompileAppendCmd, TclCompileLappendCmd):
+ (TclCompileReturnCmd): Make these generate bytecode in more cases.
+ (TclCompileListCmd): Make this able to push a literal when it can.
+ * generic/tclCompile.c (TclSetByteCodeFromAny, PeepholeOptimize):
+ Added checks to see if we can apply some simple cross-command-boundary
+ optimizations, and defined a small number of such optimizations.
+ (TclCompileScript): Added the special ability to compile the list
+ command with expansion ([list {*}blah]) into bytecode that does not
+ call an external command.
- * unix/configure:
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Darwin: instead of setting PLAT_OBJS
- to explict object files in tcl.m4, refer to MAC_OSX_OBJS makefile var.
- * unix/Makefile.in: added MAC_OSX_OBJS variable.
+2013-05-06 Jan Nijtmans <nijtmans@users.sf.net>
-2004-07-28 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclStubInit.c: Add support for Cygwin64, which has a 64-bit
+ * generic/tclDecls.h: "long" type. Binary compatibility with win64
+ requires that all stub entries use 32-bit long's, therefore the need
+ for various wrapper functions/macros. For Tcl 9 a better solution is
+ needed, but that cannot be done without introducing binary
+ incompatibility.
- * generic/tclMain.c (Tcl_Main, StdinProc): Append newline only
- * tests/basic.test (basic-46.1): to incomplete scripts
- as part of multi-line script construction. Do not add an extra
- trailing newline to the complete script. [Bug 833150]
+2013-04-30 Andreas Kupries <andreask@activestate.com>
-2004-07-26 Jeff Hobbs <jeffh@ActiveState.com>
+ * library/platform/platform.tcl (::platform::LibcVersion):
+ * library/platform/pkgIndex.tcl: Followup to the 2013-01-30 change.
+ The RE become too restrictive again. SuSe added a timestamp after the
+ version. Loosened up a bit. Bumped package to version 1.0.12.
- *** 8.4.7 TAGGED FOR RELEASE ***
+2013-04-29 Donal K. Fellows <dkf@users.sf.net>
- * tests/io.test (io-61.1): create file in binary mode for x-plat.
+ * generic/tclCompCmds.c (TclCompileArraySetCmd): Generate better code
+ when the list of things to set is a literal.
-2004-07-25 Pat Thoyts <patthoyts@users.sourceforge.net>
+2013-04-25 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclThreadAlloc.c: Moved the tclInt.h include to provide
- Tcl_Panic which is now required for non-threaded build.
+ * generic/tclDecls.h: Implement Tcl_NewBooleanObj, Tcl_DbNewBooleanObj
+ and Tcl_SetBooleanObj as macros using Tcl_NewIntObj, Tcl_DbNewLongObj
+ and Tcl_SetIntObj. Starting with Tcl 8.5, this is exactly the same, it
+ only eliminates code duplication.
+ * generic/tclInt.h: Eliminate use of NO_WIDE_TYPE everywhere: It's
+ exactly the same as TCL_WIDE_INT_IS_LONG
-2004-07-22 Don Porter <dgp@users.sourceforge.net>
+2013-04-19 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/eofchar.data (removed): Test io-61.1 now generates its own
- * tests/io.test: file of test data as needed.
+ * generic/tclDecls.h: Implement many Tcl_*Var* functions and
+ Tcl_GetIndexFromObj as (faster/stack-saving) macros around resp their
+ Tcl_*Var*2 equivalent and Tcl_GetIndexFromObjStruct.
-2004-07-21 Don Porter <dgp@users.sourceforge.net>
- * win/tclWinDde.c: Bump to dde 1.2.3 to cover changes
- * library/dde/pkgIndex.tcl: committed on 2004-06-14.
+2013-04-12 Jan Nijtmans <nijtmans@users.sf.net>
- * changes: Updated for Tcl 8.4.7 release.
+ * generic/tclDecls.h: Implement Tcl_Pkg* functions as
+ (faster/stack-saving) macros around Tcl_Pkg*Ex functions.
-2004-07-20 Jeff Hobbs <jeffh@ActiveState.com>
+2013-04-08 Don Porter <dgp@users.sourceforge.net>
- * generic/tclEvent.c: Correct threaded obj allocator to
- * generic/tclInt.h: fully cleanup on exit and allow for
- * generic/tclThreadAlloc.c: reinitialization. [Bug #736426]
- * unix/tclUnixThrd.c: (mistachkin, kenny)
- * win/tclWinThrd.c:
+ * generic/regc_color.c: [Bug 3610026]: Stop crash when the number of
+ * generic/regerrs.h: "colors" in a regular expression overflows a
+ * generic/regex.h: short int. Thanks to Heikki Linnakangas for
+ * generic/regguts.h: the report and the patch.
+ * tests/regexp.test:
-2004-07-20 Daniel Steffen <das@users.sourceforge.net>
+2013-04-04 Reinhard Max <max@suse.de>
+
+ * library/http/http.tcl (http::geturl): Allow URLs that don't have a
+ path, but a query query, e.g. http://example.com?foo=bar
+ * Bump the http package to 2.8.7.
+
+2013-03-22 Venkat Iyer <venkat@comit.com>
+ * library/tzdata/Africa/Cairo: Update to tzdata2013b.
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/Africa/Gaborone:
+ * library/tzdata/Africa/Tripoli:
+ * library/tzdata/America/Asuncion:
+ * library/tzdata/America/Barbados:
+ * library/tzdata/America/Bogota:
+ * library/tzdata/America/Costa_Rica:
+ * library/tzdata/America/Curacao:
+ * library/tzdata/America/Nassau:
+ * library/tzdata/America/Port-au-Prince:
+ * library/tzdata/America/Santiago:
+ * library/tzdata/Antarctica/Palmer:
+ * library/tzdata/Asia/Aden:
+ * library/tzdata/Asia/Hong_Kong:
+ * library/tzdata/Asia/Muscat:
+ * library/tzdata/Asia/Rangoon:
+ * library/tzdata/Asia/Shanghai:
+ * library/tzdata/Atlantic/Bermuda:
+ * library/tzdata/Europe/Vienna:
+ * library/tzdata/Pacific/Easter:
+ * library/tzdata/Pacific/Fiji:
+ * library/tzdata/Asia/Khandyga: (new)
+ * library/tzdata/Asia/Ust-Nera: (new)
+ * library/tzdata/Europe/Busingen: (new)
+
+2013-03-21 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: [Bug 2102614]: Add ensemble indexing support to
+ * tests/autoMkindex.test: [auto_mkindex]. Thanks Brian Griffin.
+
+2013-03-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFCmd.c: [Bug 3597000]: Consistent [file copy] result.
+ * tests/fileSystem.test:
- * unix/tcl.m4: fixed Darwin autoconf breakage caused by
- recent CFLAGS reordering.
- * unix/configure: regen
-
- * unix/tclConfig.sh.in: replaced EXTRA_CFLAGS with CFLAGS.
- * unix/dltest/Makefile.in: replaced EXTRA_CFLAGS with DEFS.
+2013-03-19 Jan Nijtmans <nijtmans@users.sf.net>
- * macosx/tclMacOSXBundle.c: dynamically acquire address for
- CFBundleOpenBundleResourceMap symbol, since it is only present in
- full CoreFoundation on Mac OS X and not in CFLite on pure Darwin.
+ * win/tclWinFile.c: [Bug 3608360]: Incompatible behaviour of "file
+ exists".
-2004-07-19 Jeff Hobbs <jeffh@ActiveState.com>
+2013-03-18 Donal K. Fellows <dkf@users.sf.net>
- * unix/Makefile.in, unix/tcl.m4: move (C|LD)FLAGS after their
- * unix/configure.in, unix/configure: _DEFAULT to allow for env
- setting to override m4 switches.
- Consolidate header checks to limit redundancy in configure.
- (CFLAGS_WARNING): Remove -Wconversion, add -fno-strict-aliasing
- for gcc builds (need to suppress 3.x type puning warnings).
- (SC_ENABLE_THREADS): Set m4 to force threaded build when built
- against a threaded Tcl core.
- Reorder configure.in for better 64-bit build configuration,
- replacing EXTRA_CFLAGS with CFLAGS. [Bug #874058]
+ * tests/cmdAH.test (cmdAH-19.12): [Bug 3608360]: Added test to ensure
+ that we never ever allow [file exists] to do globbing.
-2004-07-19 Zoran Vasiljevic <vasiljevic@users.sf.net>
+2013-03-12 Jan Nijtmans <nijtmans@users.sf.net>
- * win/tclwinThrd.c: redefined MASTER_LOCK to call
- TclpMasterLock. Fixes Bug #987967
+ * unix/tcl.m4: Patch by Andrew Shadura, providing better support for
+ three architectures they have in Debian.
-2004-07-16 Andreas Kupries <andreask@activestate.com>
+2013-03-11 Don Porter <dgp@users.sourceforge.net>
- * generic/tclIOCmd.c (Tcl_FcopyObjCmd): Corrected a typo in the
- generation of error messages and simplified by reusing data in a
- variable instead of retrieving the string again.
- Fixes [Tcl SF Bug 835289].
+ * generic/tclCompile.c: [Bugs 3607246,3607372]: Unbalanced refcounts
+ * generic/tclLiteral.c: of literals in the global literal table.
- * doc/OpenFileChnl.3: Added description of the behaviour of
- Tcl_ReadChars when its 'charsToRead' argument is set to
- -1. Fixes [Tcl SF Bug 934511].
+2013-03-06 Don Porter <dgp@users.sourceforge.net>
- * doc/CrtCommand.3: Added note that the arguments given to the
- command proc of a Tcl_CreateCommand are in utf8 since Tcl
- 8.1. Closing [Tcl SF Patch 414778].
+ * generic/regc_nfa.c: [Bugs 3604074,3606683]: Rewrite of the
+ * generic/regcomp.c: fixempties() routine (and supporting routines)
+ to completely eliminate the infinite loop hazard. Thanks to Tom Lane
+ for the much improved solution.
- * doc/ChnlStack.3: Removed the declaration that the interp
- argument to Tcl_(un)StackChannel can be NULL. This fixes [Tcl SF
- Bug 881220], reported by Marco Maggi
- <marcomaggi@users.sourceforge.net>.
+2013-02-28 Don Porter <dgp@users.sourceforge.net>
- * tests/socket.test: Accepted two new testcases by Stuart Casoff
- <stwo@users.sourceforge.net> checking that -server and -async
- don't go together [Tcl SF Bug 796534].
+ * generic/tclLiteral.c: Revise TclReleaseLiteral() to tolerate a NULL
+ interp argument.
- * unix/tclUnixNotfy.c (NotifierThreadProc): Accepted Joe
- Mistachkin's patch for [Tcl SF Bug 990500], properly closing the
- notifier thread when its exits.
+ * generic/tclCompile.c: Update callers and revise mistaken comments.
+ * generic/tclProc.c:
-2004-07-15 Andreas Kupries <andreask@activestate.com>
+2013-02-27 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclUnixThrd.c (TclpFinalizeMutex): Accepted Joe
- Mistachkin's patch for [Tcl SF Bug 990453], closing leakage of
- mutexes. They were not destroyed properly upon finalization.
+ * generic/regcomp.c: [Bug 3606139]: missing error check allows
+ * tests/regexp.test: regexp to crash Tcl. Thanks to Tom Lane for
+ providing the test-case and the patch.
-2004-07-15 Zoran Vasiljevic <vasiljevic@users.sf.net>
+2013-02-26 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclEvent.c (NewThreadProc): Backout of changes
- to fix the Tcl Bug #770053. See SF bugreport for more info.
+ * tests/chanio.test (chan-io-28.7): [Bug 3605120]: Stop test from
+ hanging when run standalone.
- * generic/tclNotify.c (TclFinalizeNotifier): Added conditional
- notifier finalization based on the fact that an TclInitNotifier
- has been called for the current thread. This fixes the Tcl
- Bug #770053 again. Hopefully this time w/o unwanted side-effects.
+2013-02-26 Jan Nijtmans <nijtmans@users.sf.net>
-2004-07-14 Andreas Kupries <andreask@activestate.com>
+ * generic/tclObj.c: Don't panic if Tcl_ConvertToType is called for a
+ type that doesn't have a setFromAnyProc, create a proper error message.
- * generic/tclIO.h (CHANNEL_INCLOSE): New flag. Set in
- * generic/tclIO.c (Tcl_UnregisterChannel): 'Tcl_Close' while the
- * generic/tclIO.c (Tcl_Close): close callbacks are
- run. Checked in 'Tcl_Close' and 'Tcl_Unregister' to prevent
- recursive call of 'close' in the close-callbacks. This is a
- possible error made by implementors of virtual filesystems based
- on 'tclvfs', thinking that they have to close the channel in the
- close handler for the filesystem.
+2013-02-25 Donal K. Fellows <dkf@users.sf.net>
-2004-07-14 Andreas Kupries <andreask@activestate.com>
+ * tests/binary.test (binary-41.*): [Bug 3605721]: Test independence
+ fixes. Thanks to Rolf Ade for pointing out the problem.
- * generic/tclIO.c:
- * generic/tclIO.h:
- * Not reverting, but #ifdef'ing the changes from May 19, 2004 out
- of the core. This removes the ***POTENTIAL INCOMPATIBILITY***
- for channel drivers it introduced. This has become possible due
- to Expect gaining a BlockModeProc and now handling blockingg and
- non-blocking modes correctly. Thus [SF Tcl Bug 943274] is still
- fixed if a recent enough version of Expect is used.
+2013-02-25 Don Porter <dgp@users.sourceforge.net>
- * doc/CrtChannel.3: Added warning about usage of a channel without
- a BlockModeProc.
+ * tests/assocd.test: [Bugs 3605719,3605720]: Test independence.
+ * tests/basic.test: Thanks Rolf Ade for patches.
-2004-07-15 Andreas Kupries <andreask@pliers.activestate.com>
+2013-02-23 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIOCmd.c (Tcl_PutsObjCmd): Added length check to the
- old depreceated newline syntax, to ensure that only "nonewline"
- is accepted. [Tcl SF Bug 985869], reported by Joe Mistachkin
- <mistachkin@users.sourceforge.net>.
+ * compat/fake-rfc2553.c: [Bug 3599194]: compat/fake-rfc2553.c is
+ broken.
-2004-07-13 Jeff Hobbs <jeffh@ActiveState.com>
+2013-02-22 Don Porter <dgp@users.sourceforge.net>
- * README, generic/tcl.h, tools/tcl.wse.in: bumped to
- * unix/configure, unix/configure.in, unix/tcl.spec: patchlevel
- * win/README.binary, win/configure, win/configure.in: 8.4.7
+ * generic/tclAssembly.c: Shift more burden of smart cleanup
+ * generic/tclCompile.c: onto the TclFreeCompileEnv() routine.
+ Stop crashes when the hookProc raises an error.
-2004-07-13 Zoran Vasiljevic <vasiljevic@users.sf.net>
+2013-02-20 Don Porter <dgp@users.sourceforge.net>
- * generic/tclEvent.c (NewThreadProc): Fixed broken build on
- Windows caused by missing TCL_THREAD_CREATE_RETURN. This is
- backported from head. Thnx to Kevin Kenny for spotting this.
+ * generic/tclNamesp.c: [Bug 3605447]: Make sure the -clear option
+ * tests/namespace.test: to [namespace export] always clears, whether
+ or not new export patterns are specified.
-2004-07-03 Miguel Sofer <msofer@users.sf.net>
+2013-02-20 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclExecute.c (ExprRoundFunc):
- * tests/expr-old.test (39.1): added support for wide integers to
- round(); [Bug 908375], reported by Hemang Lavana.
+ * win/tclWinDde.c: [Bug 3605401]: Compiler error with latest mingw-w64
+ headers.
-2004-07-02 Jeff Hobbs <jeffh@ActiveState.com>
+2013-02-19 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/regcomp.c (stid): correct minor pointer size error
+ * generic/tclTrace.c: [Bug 2438181]: Incorrect error reporting in
+ * tests/trace.test: traces. Test-case and fix provided by Poor
+ Yorick.
- * generic/tclPipe.c (TclCreatePipeline): Add 2>@1 as a special
- * tests/exec.test: case redir of stderr to the result output.
+2013-02-15 Don Porter <dgp@users.sourceforge.net>
-2004-07-02 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/regc_nfa.c: [Bug 3604074]: Fix regexp optimization to
+ * tests/regexp.test: stop hanging on the expression
+ ((((((((a)*)*)*)*)*)*)*)* . Thanks to Bjørn Grathwohl for discovery.
- * tests/fileSystem.test: new tests backported
- * win/tclWin32Dll.c: compilation fix for VC++5.2
+2013-02-14 Harald Oehlmann <oehhar@users.sf.net>
-2004-06-29 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * library/msgcat/msgcat.tcl: [Bug 3604576]: Catch missing registry
+ entry "HCU\Control Panel\International".
+ Bumped msgcat version to 1.5.1
- * library/safe.tcl: Make sure that the temporary variable is
- local to the namespace and not inadvertently global. [Bug 981733]
+2013-02-11 Donal K. Fellows <dkf@users.sf.net>
-2004-06-22 Zoran Vasiljevic <vasiljevic@users.sf.net>
+ * generic/tclZlib.c (ZlibTransformOutput): [Bug 3603553]: Ensure that
+ data gets written to the underlying stream by compressing transforms
+ when the amount of data to be written is one buffer's-worth; problem
+ was particularly likely to occur when compressing large quantities of
+ not-very-compressible data. Many thanks to Piera Poggio (vampiera) for
+ reporting.
- * generic/tclEvent.c:
- * generic/tclInt.h:
- * unix/tclUnixNotfy.c:
- * unix/tclUnixThrd.c:
- * win/tclWinThrd.c: [Bug #770053]. See bug report for
- more information about what it does.
-
- * tests/unixNotfy.test: rewritten to use tcltest::threadReap
- to gracefully wait for the test thread to exit. Otherwise
- we got a race condition with main thread exiting before the
- test thread. This exposed the long-standing Tcl lib issue
- with resource garbage-collection on application exit.
-
-2004-06-21 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWin32Dll.c (DllMain, _except_dllmain_detach_handler,
- TclpCheckStackSpace, _except_checkstackspace_handler,
- TclWinCPUID, _except_TclWinCPUID_detach_handler):
- * win/tclWinChan.c (Tcl_MakeFileChannel,
- _except_makefilechannel_handler):
- * win/tclWinFCmd.c (DoRenameFile,
- _except_dorenamefile_handler, DoCopyFile,
- _except_docopyfile_handler):
- Rework pushing of exception handler function pointer
- so that compiling with gcc -O3 works. Remove empty
- function call to avoid compiler warning. Mark the
- DllMain function as noinline to avoid compiler
- error from duplicated asm labels in generated code.
-
-2004-06-14 Pat Thoyts <patthoyts@users.sourceforge.net>
-
- * tests/winDde.test: Fixed -async test
- * win/tclWinDde.c: Backported the fix from 8.5 to avoid hanging in
- the presence of applications that do not process Window messages.
-
-2004-06-10 Andreas Kupries <andreask@activestate.com>
-
- * generic/tclDecls.h: Regenerated on a unix box.
- * generic/tclIntDecls.h: The Win/DOS EOLs from the
- * generic/tclIntPlatDecls.h: last regen screwed up compilation
- * generic/tclPlatDecls.h: with an older gcc.
- * generic/tclStubInit.c:
+2013-02-09 Donal K. Fellows <dkf@users.sf.net>
-2004-06-10 Zoran Vasiljevic <vasiljevic@users.sf.net>
-
- * generic/tclIOUtil.c: partially corrected [Bug 932314].
- Also, corrected return values of Tcl_FSChdir() to
- reflect those of the underlying platform-specific call.
- Originally, return codes were mixed with those of Tcl.
-
-2004-06-08 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclCompile.c: handle warning [Bug 969066]
-
-2004-06-05 Kevin B. Kenny <kennykb@acm.org>
-
- * generic/tcl.h: Corrected Tcl_WideInt declarations so that the mingw
- build works again.
- * generic/tclDecls.h: Changes to the tests for
- * generic/tclInt.decls: clock frequency in
- * generic/tclIntDecls.h: Tcl_WinTime
- * generic/tclIntPlatDecls.h: so that any clock frequency
- * generic/tclPlatDecls.h: is accepted provided that
- * generic/tclStubInit.c: all CPU's in the system share
- * tests/platform.test (platform-1.3): a common chip, and hence,
- * win/tclWin32Dll.c (TclWinCPUID): presumably, a common clock.
- * win/tclWinTest.c (TestwincpuidCmd) This change necessitated a
- * win/tclWinTime.c (Tcl_GetTime): small burst of assembly code
- to read CPU ID information, which was added as TclWinCPUID in the
- internal Stubs. To test this code in the common case of a
- single-processor machine, a 'testwincpuid' command was added to
- tclWinTest.c, and a test case in platform.test. Thanks to Jeff
- Godfrey and Richard Suchenwirth for reporting this bug. [Bug
- #976722]
-
-2004-05-27 Kevin B. Kenny <kennykb@acm.org>
-
- * tests/clock.test: Added a single test for the presence of %G
- in [clock format], and conditioned out the clock-10.x series if
- they're all going to fail because of a broken strftime() call.
- [Bug 961714]
-
-2004-05-27 Reinhard Max <max@suse.de>
-
- * generic/tclEncoding.c:
- * tests/encoding.test: added support and tests for translating
- embedded null characters between real nullbytes and the internal
- representation on input/output (Bug #949905).
-
-2004-05-26 Don Porter <dgp@users.sourceforge.net>
-
- * library/tcltest/tcltest.tcl: Correction to debug prints and testing
- * library/tcltest/pkgIndex.tcl: if TCLTEST_OPTIONS value. Corrected
- * tests/tcltest.test: double increment of numTestFiles in
- -singleproc 1 configurations. Updated tcltest-19.1 to tcltest 2.1
- behavior. Corrected tcltest-25.3 to not falsely report a failure
- in tcltest.test. Bumped to tcltest 2.2.6. [Bugs 960560, 960926]
-
-2004-05-25 Jeff Hobbs <jeffh@ActiveState.com>
-
- * doc/http.n (http::config): add -urlencoding option (default utf-8)
- * library/http/http.tcl: that specifies encoding conversion of
- * library/http/pkgIndex.tcl: args for http::formatQuery. Previously
- * tests/http.test: undefined, RFC 2718 says it should be
- utf-8. 'http::config -urlencoding {}' returns previous behavior,
- which will throw errors processing non-latin-1 chars.
- Bumped http package to 2.5.0.
-
-2004-05-25 Kevin Kenny <kennykb@acm.org>
-
- * tests/winFCmd.test: Correct test for the presence of a CD-ROM so
- that it doesn't misdetect some other sort
- of filesystem with a write-protected root as
- being a CD-ROM drive. [Bug 918267]
-
-2004-05-24 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclExecute.c (VerifyExprObjType): use GET_WIDE_OR_INT to
- properly have tclIntType used for smaller values. This corrects
- TclX bug 896727 and any other 3rd party extension that created
- math functions but was not yet WIDE_INT aware in them.
-
-2004-05-24 Miguel Sofer <msofer@users.sf.net>
-
- * doc/set.n: accurate description of name resolution process,
- referring to namespace.n for details [Bug 959180]
-
-2004-05-22 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclVar.c (TclObjUnsetVar2): backported fix [Bug 735335]
- and new (in tcl8.4) exteriorisations of [Bug 736729] due to the use of
- tclNsVarNameType obj types. The consequences of [Bug 736729]
- should be the same as in tcl8.3 and previous versions.
- The use of tclNsVarNameType objs is still disabled, pending a
- decision by the release manager.
-
-2004-05-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
-
- * win/tclWinFile.c (TclpMatchInDirectory): fix for an issue
- where there was a sneak path from Tcl_DStringFree to
- SetErrorCode(0). The result was that the error code could
- be reset between a call to FindFirstFile and the check
- of its status return, leading to a bizarre error return of
- {POSIX unknown {No error}}. (Found in unplanned test -
- no incident logged at SourceForge.)
-
-2004-05-19 Andreas Kupries <andreask@activestate.com>
-
- * generic/tclIO.c: Fixed [SF Tcl Bug 943274]. This is the same problem
- * generic/tclIO.h: as [SF Tcl Bug 462317], see ChangeLog entry
- 2001-09-26. The fix done at that time is incomplete. It is
- possible to get around it if the actual read operation is defered
- and not executed in the event handler itself. Instead of tracking
- if we are in an read caused by a synthesized fileevent we now
- track if the OS has delivered a true event = actual data and
- bypass the driver if a read finds that there is no actual data
- waiting. The flag is cleared by a short or full read.
- [[this bug amended 2004-07-14]]
-
-2004-05-18 Kevin B. Kenny <kennykb@acm.org>
-
- * compat/strftime.c (_fmt, ISO8601Week):
- * doc/clock.n:
- * tests/clock.test: Major rework to the handling of ISO8601
- week numbers. Now passes all the %G and %V test cases on
- Windows, Linux and Solaris [Bugs #500285, #500389, and #852944]
-
-2004-05-17 Kevin B. Kenny <kennykb.@acm.org>
-
- * generic/tclInt.decls: Restored TclpTime_t kludge to all
- * generic/tclIntPlatDecls.h: places where it appeared before the
- * unix/tclUnixPort.h changes of 14 May, because use of
- * unix/tclUnixTime.h native time_t in its place requires
- * win/tclWinTime.h: the 8.5 header reforms. [Bug #955146]
-
-2004-05-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
-
- * doc/OpenFileChnl.3: Documented type of 'offset' argument to
- Tcl_Seek was wrong. [Bug 953374]
-
-2004-05-14 Kevin B. Kenny <kennykb@acm.org>
-
- * generic/tclInt.decls: Promoted TclpLocaltime and TclpGmtime
- * generic/tclIntDecls.h: from Unix-specific stubs to the generic
- * generic/tclIntPlatDecls.h: internal Stubs table. Reran 'genstubs'
- * generic/tclStubInit.c:
- * unix/tclUnixPort.h:
+ * generic/tclOOBasic.c (TclOO_Object_VarName): [Bug 3603695]: Change
+ the way that the 'varname' method is implemented so that there are no
+ longer problems with interactions due to the resolver. Thanks to
+ Taylor Venable <tcvena@gmail.com> for identifying the problem.
- * generic/tclClock.c: Changed a buggy 'GMT' timezone specification
- to the correct 'GMT0'. [Bug #922848]
-
- * unix/tclUnixThrd.c: Moved TclpGmtime and TclpLocaltime to
- unix/tclUnixTime.c where they belong.
-
- * unix/tclUnixTime.c (TclpGmtime, TclpLocaltime, TclpGetTimeZone,
- ThreadSafeGMTime [removed],
- ThreadSafeLocalTime [removed],
- SetTZIfNecessary, CleanupMemory):
- Restructured to make sure that the same mutex protects
- all calls to localtime, gmtime, and tzset. Added a check
- in front of those calls to make sure that the TZ env var
- hasn't changed since the last call to tzset, and repeat
- tzset if necessary. [Bug #940278] Removed a buggy test
- of the Daylight Saving Time information in 'gettimeofday'
- in favor of applying 'localtime' to a known value.
- [Bug #922848]
-
- * tests/clock.test (clock-3.14): Added test to make sure that
- changes to $env(TZ) take effect immediately.
-
- * win/tclWinTime.c (TclpLocaltime, TclpGmtime):
- Added porting layer for 'localtime' and 'gmtime' calls.
-
-2004-05-10 David Gravereaux <davygrvy@pobox.com>
-
- * win/tclWinPipe.c (BuildCommandLine): Append a space when the
- path got primed.
- (TclpCreateProcess): When under NT, with no console, and executing a
- DOS application, the path priming does not need an ending space as
- BuildCommandLine() will append one for us.
-
-2004-05-07 Miguel Sofer <msofer@users.sf.net>
-
- * doc/unset.n: added upvar.n to the "see also" list
-
-2004-05-05 David Gravereaux <davygrvy@pobox.com>
-
- * generic/tclEvent.c: TclSetLibraryPath's use of caching the
- stringrep of the pathPtr object to TclGetLibraryPath called from
- another thread was ineffective if the original's stringrep had
- been invalidated as what happens when it gets muted to a list.
-
- * generic/tclEncoding.c: Added FreeEncoding(systemEncoding) in
- TclFinalizeEncodingSubsystem because its ref count was incremented
- in TclInitEncodingSubsystem.
-
- * win/tclWin32Dll.c: Structured Exception Handling added around
- Tcl_Finalize called from DllMain's DLL_PROCESS_DETACH. We can't
- be 100% assured that Tcl is being unloaded by the OS in a stable
- condition and we need to protect the exit handlers should the
- stack be in a hosed state. AT&T style assembly for SEH under
- MinGW included, too. [Patch 858493]
-
- Also added DisableThreadLibraryCalls() for the DLL_PROCESS_ATTACH
- case. We're not interested in knowing about DLL_THREAD_ATTACH, so
- disable the notices.
+2013-02-08 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclInt.h:
- * generic/tclThread.c:
- * generic/tclEvent.c:
- * unix/tclUnixThrd.c:
- * win/tclWinThrd.c: Provisions made so masterLock, initLock,
- allocLock and joinLock mutexes can be recovered during
- Tcl_Finalize.
+ * generic/regc_nfa.c (duptraverse): [Bug 3603557]: Increase the
+ maximum depth of recursion used when duplicating an automaton in
+ response to encountering a "wild" RE that hit the previous limit.
+ Allow the limit (DUPTRAVERSE_MAX_DEPTH) to be set by defining its
+ value in the Makefile. Problem reported by Jonathan Mills.
- * win/tclWinSock.c:
- (SocketThreadExitHandler): Don't call TerminateThread when
- WaitForSingleObject returns a timeout. Tcl_Finalize called from
- DllMain will pause all threads. Trust that the thread will get
- the close notice at a later time if it does ever wake up before
- being cleaned up by the system anyway.
- (SocketEventProc) : connect errors should fire both the readable
- and writable handlers because this is how it works on UNIX
- [Bug 794839]
+2013-02-05 Don Porter <dgp@users.sourceforge.net>
- * win/coffbase.txt: Added the tls extension to the list of
- preferred load addresses.
+ * win/tclWinFile.c: [Bug 3603434]: Make sure TclpObjNormalizePath()
+ properly declares "a:/" to be normalized, even when no "A:" drive is
+ present on the system.
-2004-05-05 Don Porter <dgp@users.sourceforge.net>
+2013-02-05 Donal K. Fellows <dkf@users.sf.net>
- * tests/unixInit.test (unixInit-2.10): Test correction for Mac OSX.
- Be sure to consistently compare normalized path names. Thanks to
- Steven Abner (tauvan). [Bug 948177]
+ * generic/tclLoadNone.c (TclpLoadMemory): [Bug 3433012]: Added dummy
+ version of this function to use in the event that a platform thinks it
+ can load from memory but cannot actually do so due to it being
+ disabled at configuration time.
-2004-05-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+2013-02-04 Donal K. Fellows <dkf@users.sf.net>
- * doc/CrtObjCmd.3: Remove reference to Tcl_RenameCommand; there is
- no such API. [Bug 848440]
+ * generic/tclCompCmds.c (TclCompileArraySetCmd): [Bug 3603163]: Stop
+ crash in weird case where [eval] is used to make [array set] get
+ confused about whether there is a local variable table or not. Thanks
+ to Poor Yorick for identifying a reproducible crashing case.
-2004-05-04 Jeff Hobbs <jeffh@ActiveState.com>
+2013-01-30 Andreas Kupries <andreask@activestate.com>
- * generic/tclIOUtil.c (Tcl_FSChdir): Work-around crash condition
- * tests/winFCmd.test (winFCmd-16.12): triggered when $HOME is
- volumerelative (ie 'C:').
+ * library/platform/platform.tcl (::platform::LibcVersion): See
+ * library/platform/pkgIndex.tcl: [Bug 3599098]: Fixed the RE
+ * unix/Makefile.in: extracting the version to avoid issues with
+ * win/Makefile.in: recent changes to the glibc banner. Now targeting a
+ less variable part of the string. Bumped package to version 1.0.11.
- * tests/fileName.test (filename-12.9): use C:/ instead of the
- first item in file volumes - that's usually A:/, which for most
- will have nothing in it.
+2013-01-28 Donal K. Fellows <dkf@users.sf.net>
-2004-05-04 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCompCmds.c (TclCompileArraySetCmd)
+ (TclCompileArrayUnsetCmd, TclCompileDictAppendCmd)
+ (TclCompileDictCreateCmd, CompileDictEachCmd, TclCompileDictIncrCmd)
+ (TclCompileDictLappendCmd, TclCompileDictMergeCmd)
+ (TclCompileDictUnsetCmd, TclCompileDictUpdateCmd)
+ (TclCompileDictWithCmd, TclCompileInfoCommandsCmd):
+ * generic/tclCompCmdsSZ.c (TclCompileStringMatchCmd)
+ (TclCompileStringMapCmd): Improve the code generation in cases where
+ full compilation is impossible but a full ensemble invoke is provably
+ not necessary.
- * tests/tcltest.test: Test corrections for Mac OSX. Thanks
- to Steven Abner (tauvan). [Bug 947440]
+2013-01-26 Jan Nijtmans <nijtmans@users.sf.net>
-2004-05-03 Andreas Kupries <andreask@activestate.com>
+ * unix/tclUnixCompat.c: [Bug 3601804]: platformCPUID segmentation
+ fault on Darwin.
- * Applied [SF Tcl Patch 868853], fixing a mem leak in
- TtySetOptionProc. Report and Patch provided by Stuart
- Cassoff <stwo@users.sf.net>.
+2013-01-23 Donal K. Fellows <dkf@users.sf.net>
-2004-05-03 Kevin Kenny <kennykb@acm.org>
+ * library/http/http.tcl (http::geturl): [Bug 2911139]: Do not do vwait
+ for connect to avoid reentrancy problems (except when operating
+ without a -command option). Internally, this means that all sockets
+ created by the http package will always be operated in asynchronous
+ mode.
- * win/tclWin32Dll.c (TclpCheckStackSpace):
- * tests/stack.test (stack-3.1): Fix for undetected stack
- overflow in TclReExec on Windows. [Bug 947070]
+2013-01-21 Jan Nijtmans <nijtmans@users.sf.net>
-2004-05-03 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclInt.decls: Put back Tcl[GS]etStartupScript(Path|FileName)
+ in private stub table, so extensions using this (like Tk 8.4) will
+ continue to work in all Tcl 8.x versions. Extensions using this
+ still cannot be compiled against Tcl 8.6 headers.
- * library/init.tcl: Corrected unique prefix matching of
- interactive command completion in [unknown]. [Bug 946952]
+2013-01-18 Jan Nijtmans <nijtmans@users.sf.net>
-2004-05-02 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclPort.h: [Bug 3598300]: unix: tcl.h does not include
+ sys/stat.h
- * generic/tclProc.c (TclObjInvokeProc):
- * tests/proc.test (proc-3.6): fix for bad quoting of multi-word
- proc names in error messages [Bug 942757]
+2013-01-17 Donal K. Fellows <dkf@users.sf.net>
-2004-04-23 Andreas Kupries <andreask@activestate.com>
+ * generic/tclCompCmds.c (PushVarName): [Bug 3600328]: Added mechanism
+ for suppressing compilation of variables when we couldn't cope with
+ the results. Useful for some [array] subcommands.
+ * generic/tclEnsemble.c (CompileToCompiledCommand): Must restore the
+ compilation environment when a command compiler fails.
- * generic/tclIO.c (Tcl_SetChannelOption): Fixed [SF Tcl Bug
- 930851]. When changing the eofchar we have to zap the related
- flags to prevent them from prematurely aborting the next read.
+2013-01-16 Donal K. Fellows <dkf@users.sf.net>
-2004-04-07 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclZlib.c (TclZlibInit): [Bug 3601086]: Register the config
+ info in the iso8859-1 encoding as that is guaranteed to be present.
- * win/configure:
- * win/configure.in: define TCL_LIB_FLAG, TCL_BUILD_LIB_SPEC,
- TCL_LIB_SPEC and TCL_PACKAGE_PATH in tclConfig.sh.
+2013-01-16 Jan Nijtmans <nijtmans@users.sf.net>
-2004-04-06 Don Porter <dgp@users.sourceforge.net>
+ * Makefile.in: Allow win32 build with -DTCL_NO_DEPRECATED, just as
+ * generic/tcl.h: in the UNIX build. Define Tcl_EvalObj and
+ * generic/tclDecls.h: Tcl_GlobalEvalObj as macros, even when
+ * generic/tclBasic.c: TCL_NO_DEPRECATED is defined, so Tk can benefit
+ from it too.
- * tests/unixInit.test (unixInit-3.1): Default encoding on Darwin
- systems is utf-8. Thanks to Steven Abner (tauvan). [Bug 928808]
+2013-01-14 Jan Nijtmans <nijtmans@users.sf.net>
-2004-04-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * win/tcl.m4: More flexible search for win32 tclConfig.sh, backported
+ from TEA (not actually used in Tcl, only for Tk)
- * tests/cmdAH.test (cmdAH-18.2): Added constraint because
- access(...,X_OK) is defined to be permitted to be meaningless when
- running as root, and OSX exhibits this. [Bug 929892]
+2013-01-14 Jan Nijtmans <nijtmans@users.sf.net>
-2004-04-02 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclInt.decls: Put back Tcl_[GS]etStartupScript in internal
+ stub table, so extensions using this, compiled against 8.5 headers
+ still run in Tcl 8.6.
- * tests/tcltest.test: Corrected constraint typos: "nonRoot" ->
- "notRoot". Thanks to Steven Abner (tauvan). [Bug 928353]
+2013-01-13 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
-2004-03-31 Don Porter <dgp@users.sourceforge.net>
+ * doc/fileevent.n: [Bug 3436609]: Clarify readable fileevent "false
+ positives" in the case of multibyte encodings/transforms.
- * doc/msgcat.n: Clarified message catalog file encodings. [Bug 811457]
- * library/msgcat/msgcat.tcl ([mcset], [ConvertLocale], [Init]):
- Corrected [mcset] to be able to successfully set a translation to
- the empty string. [mcset $loc $src {}] was incorrectly set the
- $loc translation of $src back to $src. Also changed [ConvertLocale]
- to minimally require a non-empty "language" part in the locale value.
- If not, an error raised prompts [Init] to keep looking for a valid
- locale value, or ultimately fall back on the "C" locale. [Bug 811461].
- * library/msgcat/pkgIndex.tcl: Bump to msgcat 1.3.2.
+2013-01-13 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-31 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * generic/tclIntDecls.h: If TCL_NO_DEPRECATED is defined, make sure
+ that TIP #139 functions all are taken from the public stub table, even
+ if the inclusion is through tclInt.h.
- * generic/tclObj.c (HashObjKey): Make sure this hashes the whole
- string rep of the object, instead of missing the last character.
+2013-01-12 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-29 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclInt.decls: Put back TclBackgroundException in internal
+ stub table, so extensions using this, compiled against 8.5 headers
+ still run in Tcl 8.6.
- * generic/tclInt.h:
- * generic/tclEncoding.c (TclFindEncodings, Tcl_FindExecutable):
- * mac/tclMacInit.c (TclpInitLibraryPath): Correct handling of UTF
- * unix/tclUnixInit.c (TclpInitLibraryPath): data that is actually
- * win/tclWinFile.c (TclpFindExecutable): "clean", allowing the
- * win/tclWinInit.c (TclpInitLibraryPath): loading of Tcl from
- paths that contain multi-byte chars on Windows [Bug 920667]
+2013-01-09 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-28 Miguel Sofer <msofer@users.sf.net>
+ * library/http/http.tcl: [Bug 3599395]: http assumes status line is a
+ proper Tcl list.
- * generic/tclCompile.c (TclCompileScript): corrected possible
- segfault when a compilation returns TCL_OUTLINE_COMPILE after
- having grown the compile environment [Bug 925121].
+2013-01-08 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-21 Jeff Hobbs <jeffh@ActiveState.com>
+ * win/tclWinFile.c: [Bug 3092089]: [file normalize] can remove path
+ components. [Bug 3587096]: win vista/7: "can't find init.tcl" when
+ called via junction without folder list access.
- * win/tclWinInt.h: define VER_PLATFORM_WIN32_CE if not already set.
- * win/tclWinInit.c (TclpSetInitialEncodings): recognize WIN32_CE
- as a unicode (WCHAR) platform.
+2013-01-07 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-15 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclOOStubLib.c: Restrict the stub library to only use
+ * generic/tclTomMathStubLib.c: Tcl_PkgRequireEx, Tcl_ResetResult and
+ Tcl_AppendResult, not any other function. This puts least restrictions
+ on eventual Tcl 9 stubs re-organization, and it works on the widest
+ range of Tcl versions.
- * generic/tclCompile.c (TclCompileScript):
- * tests/compile.test (compile-3.5): corrected wrong test and
- behaviour in the earlier fix for [Bug 705406]; Don Porter reported
- this as [Bug 735055], and provided the solution.
- Fixed in HEAD on 2003-05-09, but backport to 8-4-branch was
- wrongly omitted; re-reported as [Bug 916795] by Roy Terry,
- diagnosed by dgp.
+2013-01-06 Jan Nijtmans <nijtmans@users.sf.net>
-2004-03-08 Vince Darley <vincentdarley@users.sourceforge.net>
+ * library/http/http.tcl: Don't depend on Spencer-specific regexp
+ * tests/env.test: syntax (/u and /U) any more in unrelated places.
+ * tests/exec.test:
+ Bump http package to 2.8.6.
- * generic/tclFileName.c: Fix to 'glob -path' near the root
- * tests/fileName.test: of the filesystem. [Bug 910525]
+2013-01-04 Donal K. Fellows <dkf@users.sf.net>
-2004-03-01 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclEnsemble.c (CompileBasicNArgCommand): Added very simple
+ compiler (which just compiles to a normal invoke of the implementation
+ command) for many ensemble subcommands where we can prove that there
+ is no way for scripts to detect the difference even through error
+ handling or [info level]/[info frame]. This improves the code produced
+ from some ensembles (e.g., [info], [string]) to the point where the
+ ensemble is now not normally seen at the bytecode level at all.
- *** 8.4.6 TAGGED FOR RELEASE ***
+2013-01-04 Miguel Sofer <msofer@users.sf.net>
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Allow 64-bit enabling on
- IRIX64-6.5* systems. [Bug 218561]
- * unix/configure: autoconf-2.13
+ * generic/tclInt.h: Insure that PURIFY builds cannot exploit the
+ * generic/tclExecute.c: Tcl stack to hide mem defects.
- * generic/tclCmdMZ.c (TclCheckInterpTraces): The TIP 62
- * generic/tclTest.c (TestcmdtraceCmd): implementation introduced a
- * tests/basic.test (basic-39.10): bug by testing the CallFrame
- level instead of the iPtr->numLevels level when deciding what traces
- created by Tcl_Create(Obj)Trace to call. Added test to expose the
- error, and made fix. [Request 462580]
+2013-01-03 Donal K. Fellows <dkf@users.sf.net>
-2004-02-26 Daniel Steffen <das@users.sourceforge.net>
+ * doc/fconfigure.n, doc/CrtChannel.3: Updated to reflect the fact that
+ the minimum buffer size is one byte, not ten. Identified by Schelte
+ Bron on the Tcler's Chat.
- * macosx/Makefile: fixed copyright year in Tcl.framework Info.plist
+ * generic/tclExecute.c (TEBCresume:INST_INVOKE_REPLACE):
+ * generic/tclEnsemble.c (TclCompileEnsemble): Added new mechanism to
+ allow for more efficient dispatch of non-bytecode-compiled subcommands
+ of bytecode-compiled ensembles. This can provide substantial speed
+ benefits in some cases.
-2004-02-25 Don Porter <dgp@users.sourceforge.net>
+2013-01-02 Miguel Sofer <msofer@users.sf.net>
- * tests/basic.test: Made several tests more robust to the
- * tests/cmdMZ.test: list-quoting of path names that might
- * tests/exec.test: contain Tcl-special chars like { or [.
- * tests/io.test: Should help us sort out Tcl Bug 554068.
- * tests/pid.test:
- * tests/socket.test:
- * tests/source.test:
- * tests/unixInit.test:
+ * generic/tclEnsemble.c: Remove stray calls to Tcl_Alloc and friends:
+ * generic/tclExecute.c: the core should only use ckalloc to allow
+ * generic/tclIORTrans.c: MEM_DEBUG to work properly.
+ * generic/tclTomMathInterface.c:
+
+2012-12-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/string.n: Noted the obsolescence of the 'bytelength',
+ 'wordstart' and 'wordend' subcommands, and moved them to later in the
+ file.
+
+2012-12-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclListObj.c: [Bug 3598580]: Tcl_ListObjReplace may release
+ deleted elements too early.
+
+2012-12-22 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclUtil.c: [Bug 3598150]: Stop leaking allocated space when
+ objifying a zero-length DString. Spotted by afredd.
+
+2012-12-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/dltest/pkgb.c: Inline compat Tcl_GetDefaultEncodingDir.
+ * generic/tclStubLib.c: Eliminate unnecessary static HasStubSupport()
+ and isDigit() functions, just do the same inline.
+
+2012-12-18 Donal K. Fellows <dkf@users.sf.net>
-2004-02-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+ * generic/tclCompCmdsSZ.c (TclSubstCompile): Improved the sequence of
+ instructions issued for [subst] when dealing with simple variable
+ references.
- * unix/tclUnixChan.c (TcpGetOptionProc): Stop memory leak with
- very long hostnames. [Bug 888777]
+2012-12-14 Don Porter <dgp@users.sourceforge.net>
-2004-02-25 David Gravereaux <davygrvy@pobox.com>
+ *** 8.6.0 TAGGED FOR RELEASE ***
- * tests/winPipe.test:
- * win/tclWinPipe.c: backport of BuildCommandLine changes to mirror
- msvcrt's parse_cmdline() rules of quoting.
+ * changes: updates for 8.6.0
-2004-02-19 Mo DeJong <mdejong@users.sourceforge.net>
+2012-12-13 Don Porter <dgp@users.sourceforge.net>
- * win/tclWinInit.c (AppendEnvironment):
- Use the tail component of the passed in
- lib path instead of just blindly using
- lib+4. That worked when lib was "lib/..."
- but fails for other values. Thanks go to
- Patrick Samson for pointing this out.
+ * generic/tclZlib.c: Repair same issue with misusing the
+ * tests/zlib.test: 'fire and forget' nature of Tcl_ObjSetVar2
+ in the new TIP 400 implementation.
-2004-02-17 Don Porter <dgp@users.sourceforge.net>
+2012-12-13 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdAH.c: (CatchObjCmdCallback): do not decrRefCount
+ * tests/cmdAH.test: the newValuePtr sent to Tcl_ObjSetVar2:
+ TOSV2 is 'fire and forget', it decrs on its own.
+ Fix for [Bug 3595576], found by andrewsh.
+
+2012-12-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: Fix Tcl_DecrRefCount macro such that it doesn't
+ access its objPtr parameter twice any more.
+
+2012-12-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump version number to 8.6.0.
+ * library/init.tcl:
+ * unix/configure.in:
+ * win/configure.in:
+ * unix/tcl.spec:
+ * README:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
- * doc/tcltest.n:
- * library/tcltest/tcltest.tcl: Changed -verbose default value to
- {body error} so that detailed information on unexpected errors in
- tests is provided by default, even after the fix for [Bug 725253]
+2012-12-10 Donal K. Fellows <dkf@users.sf.net>
-2004-02-17 Jeff Hobbs <jeffh@ActiveState.com>
+ * tools/tcltk-man2html.tcl (plus-pkgs): Increased robustness of
+ version number detection code to deal with packages whose names are
+ prefixes of other packages.
+ * unix/Makefile.in (dist): Added pkgs/package.list.txt to distribution
+ builds to ensure that 'make html' will work better.
- (reverted due to test failures on Solaris, but not Win/Lin :/)
- * generic/tclIOUtil.c: backport of rewrite of generic file
- normalization code to cope with links followed by '..'.
- [Bug 849514], and parts of [859251]
-
- * tests/unixInit.test: unixInit-7.1
- * unix/tclUnixInit.c (TclpInitPlatform): ensure the std fds exist
- to prevent crash condition [Bug #772288]
+2012-12-09 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
-2004-02-16 Jeff Hobbs <jeffh@ActiveState.com>
+ * tests/chan.test: Clean up unwanted eofchar side-effect of chan-4.6
+ leading to a spurious "'" at end of chan.test under certain conditions
+ (see [Bug 3389289] and [Bug 3389251]).
- * generic/tclCmdMZ.c (TclTraceExecutionObjCmd)
- (TclTraceCommandObjCmd): fix possible mem leak in trace info.
+ * doc/expr.n: [Bug 3594188]: Clarifications about commas.
-2004-02-12 Jeff Hobbs <jeffh@ActiveState.com>
+2012-12-08 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: Fix busyloop at exit under TCL_FINALIZE_ON_EXIT
+ when there are unflushed nonblocking channels. Thanks Miguel for
+ spotting.
+
+2012-12-07 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/dltest/pkgb.c: Turn pkgb.so into a Tcl9 interoperability test
+ library: Whatever Tcl9 looks like, loading pkgb.so in Tcl 9 should
+ either result in an error-message, either succeed, but never crash.
+
+2012-11-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (ZlibStreamSubcmd): [Bug 3590483]: Use a mechanism
+ for complex option resolution that has fewer problems with more
+ finicky compilers.
+
+2012-11-26 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixSock.c: Factor out creation of the -sockname and
+ -peername lists from TcpGetOptionProc() to TcpHostPortList(). Make it
+ robust against implementations of getnameinfo() that error out if
+ reverse mapping fails instead of falling back to the numeric
+ representation.
+
+2012-11-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBinary.c (BinaryDecode64): [Bug 3033307]: Corrected
+ handling of trailing whitespace when decoding base64. Thanks to Anton
+ Kovalenko for reporting, and Andy Goth for the fix and tests.
+
+2012-11-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (INST_STR_RANGE_IMM): [Bug 3588366]: Corrected
+ implementation of bounds restriction for end-indexed compiled [string
+ range]. Thanks to Emiliano Gavilan for diagnosis and fix.
+
+2012-11-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ IMPLEMENTATION OF TIP#416
+
+ New Options for 'load': -global and -lazy
- * README: update patchlevel to 8.4.6
* generic/tcl.h:
- * tools/tcl.wse.in:
- * unix/configure, unix/configure.in, unix/tcl.spec:
- * win/README.binary, win/configure, win/configure.in:
+ * generic/tclLoad.c
+ * unix/tclLoadDl.c
+ * unix/tclLoadDyld.c
+ * tests/load.test
+ * doc/Load.3
+ * doc/load.n
+
+2012-11-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixFCmd.c (TclUnixOpenTemporaryFile): [Bug 2933003]: Factor
+ out all the code to do temporary file creation so that it is possible
+ to make it correct in one place. Allow overriding of the back-stop
+ default temporary file location at compile time by setting the
+ TCL_TEMPORARY_FILE_DIRECTORY #def to a string containing the directory
+ name (defaults to "/tmp" as that is the most common default).
+
+2012-11-13 Joe Mistachkin <joe@mistachkin.com>
+
+ * win/tclWinInit.c: also search for the library directory (init.tcl,
+ encodings, etc) relative to the build directory associated with the
+ source checkout.
- * unix/tcl.m4: update HP-11 build libs setup
+2012-11-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: re-enable bcc-tailcall, after fixing an
+ * generic/tclExecute.c: infinite loop in the TCL_COMPILE_DEBUG mode
+
+
+2012-11-07 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/America/Araguaina:
+ * library/tzdata/America/Bahia:
+ * library/tzdata/America/Havana:
+ * library/tzdata/Asia/Amman:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Hebron:
+ * library/tzdata/Asia/Jerusalem:
+ * library/tzdata/Pacific/Apia:
+ * library/tzdata/Pacific/Fakaofo:
+ * library/tzdata/Pacific/Fiji: Import tzdata2012i.
+
+2012-11-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/http/http.tcl (http::Finish): [Bug 3581754]: Ensure that
+ callbacks are done at most once to prevent problems with timeouts on a
+ keep-alive connection (combined with reentrant http package use)
+ causing excessive stack growth. Not a fix for the underlying problem,
+ but ensures that pain will be mostly kept away from users.
+ Bump http package to 2.8.5.
+
+2012-11-05 Donal K. Fellows <dkf@users.sf.net>
+
+ Added bytecode compilation of many Tcl commands. Some of these are
+ total compilations and some are only partial (i.e., only compile in
+ some cases). The (sub-)commands affected are:
+ * array: exists, set, unset
+ * dict: create, exists, merge
+ * format: (simple cases only)
+ * info: commands, coroutine, level, object
+ * info object: class, isa object, namespace
+ * namespace: current, code, qualifiers, tail, which
+ * regsub: (only cases convertable to simple [string map])
+ * self: (only no-argument and [self object] cases)
+ * string: first, last, map, range
+ * tailcall:
+ * yield:
-2004-02-06 Don Porter <dgp@users.sourceforge.net>
+ [This was work originally done on the 'dkf-compile-misc-info' branch.]
- * doc/clock.n: Removed reference to non-existent [file ctime].
+2012-11-05 Jan Nijtmans <nijtmans@users.sf.net>
-2004-02-04 Don Porter <dgp@users.sourceforge.net>
+ IMPLEMENTATION OF TIP#413
- * library/tcltest/tcltest.tcl: Corrected references to
- non-existent $name variable in [cleanupTests]. [Bug 833637]
-
-2004-02-03 Don Porter <dgp@users.sourceforge.net>
+ Align the [string trim] and [string is space] commands, such that
+ [string trim] by default trims all characters for which [string is
+ space] returns 1, augmented with the NUL character.
- * library/tcltest/tcltest.tcl: Corrected parsing of single
- command line argument (option with missing value) [Bug 833910]
- * library/tcltest/pkgIndex.tcl: Bump to version 2.2.5.
+ * generic/tclUtf.c: Add NEL, BOM and two more characters to [string is
+ space]
+ * generic/tclCmdMZ.c: Modify [string trim] for Unicode modifications.
+ * generic/regc_locale.c: Regexp engine must match [string is space]
+ * doc/string.n
+ * tests/string.test
+ ***POTENTIAL INCOMPATIBILITY***
+ Code that relied on characters not previously trimmed being not
+ removed will notice a difference; it is believed that this is rare,
+ but a workaround to get the behavior in Tcl 8.5 is to use " \t\n\r" as
+ an explicit trim set.
-2004-02-02 David Gravereaux <davygrvy@pobox.com>
+2012-10-31 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIO.c (Tcl_Ungets): fixes improper filling of the
- channel buffer. [Bug 405995]
+ * win/Makefile.in: Dde version number to 1.4.0, ready for Tcl 8.6.0rc1
+ * win/makefile.vc
+ * win/tclWinDde.c
+ * library/dde/pkgIndex.tcl
+ * tests/winDde.test
-2004-01-13 Don Porter <dgp@users.sourceforge.net>
+2012-10-24 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclFileName.c (Tcl_GlobObjCmd): Latest changes to
- management of the interp result by Tcl_GetIndexFromObj() exposed
- improper interp result management in the [glob] command procedure.
- Corrected by adopting the Tcl_SetObjResult(Tcl_NewStringObj) pattern.
- This stopped a segfault in test filename-11.36.
+ * generic/tclCompCmds.c (TclCompileDictUnsetCmd): Added compilation of
+ the [dict unset] command (for scalar var in LVT only).
-2004-01-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+2012-10-23 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct, Tcl_WrongNumArgs):
- Create fresh objects instead of using the one currently in the
- interpreter, which isn't guaranteed to be fresh and unshared. The
- cost for the core will be minimal because of the object cache, and
- this fixes [Bug 875395].
+ * generic/tclInt.h: Add "flags" parameter from Tcl_LoadFile to
+ * generic/tclIOUtil.c: to various internal functions, so these
+ * generic/tclLoadNone.c: flags are available through the whole
+ * unix/tclLoad*.c: filesystem for (future) internal use.
+ * win/tclWinLoad.c:
-2004-01-09 Vince Darley <vincentdarley@users.sourceforge.net>
+2012-10-17 Miguel Sofer <msofer@users.sf.net>
- * generic/tclIOUtil.c: fix to infinite loop in
- TclFinalizeFilesystem [Bug 873311]
+ * generic/tclBasic.c (TclNRCoroutineObjCmd): insure that numlevels
+ are properly set, fix bug discovered by dkf and reported at
+ http://code.activestate.com/lists/tcl-core/12213/
-2003-12-17 Daniel Steffen <das@users.sourceforge.net>
+2012-10-16 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclBinary.c (DeleteScanNumberCache): fixed crashing bug
- when numeric scan-value cache contains NULL value.
+ IMPLEMENTATION OF TIP#405
-2003-12-17 Zoran Vasiljevic <zv@archiware.com>
+ New commands for applying a transformation to the elements of a list
+ to produce another list (the [lmap] command) and to the mappings of a
+ dictionary to produce another dictionary (the [dict map] command). In
+ both cases, a [continue] will cause the skipping of an element/pair,
+ and a [break] will terminate the construction early and successfully.
- * generic/tclIOUtil.c: fixed 2 memory (object) leaks.
- This fixes Tcl Bug #839519.
+ * generic/tclCmdAH.c (Tcl_LmapObjCmd, TclNRLmapCmd): Implementation of
+ the new [lmap] command, based on (and sharing much of) [foreach].
+ * generic/tclDictObj.c (DictMapNRCmd): Implementation of the new [dict
+ map] subcommand, based on (and sharing much of) [dict for].
+ * generic/tclCompCmds.c (TclCompileLmapCmd, TclCompileDictMapCmd):
+ Compilation engines for [lmap] and [dict map].
-2003-12-12 Vince Darley <vincentdarley@users.sourceforge.net>
+ IMPLEMENTATION OF TIP#400
- * generic/tclCmdAH.c: fix to normalization of non-existent user
- name ('file normalize ~nobody') [Bug 858937]
+ * generic/tclZlib.c: Allow the specification of a compression
+ dictionary (a binary blob used to seed the compression engine) in both
+ streams and channel transformations. Also some reorganization to allow
+ for getting gzip header dictionaries and controlling buffering levels
+ in channel transformations (allowing a trade-off between formal
+ correctness and speed).
+ (Tcl_ZlibStreamSetCompressionDictionary): New C API to allow setting
+ the compression dictionary without using a Tcl script.
-2003-12-09 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+2012-10-14 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclUnixPort.h: #ifdef'd out declarations of errno which
- * tools/man2tcl.c: are known to cause problems with recent
- glibc. [Bug 852369]
+ * generic/tclDictObj.c: [Bug 3576509]: ::tcl::Bgerror crashes with
+ * generic/tclEvent.c: invalid arguments. Better fix, which helps
+ for all Tcl_DictObjGet() calls in Tcl's source code.
-2003-12-03 Don Porter <dgp@users.sourceforge.net>
+2012-10-13 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tcl.h: Bumped patch level to 8.4.5.1 to distinguish
- * unix/configure.in: CVS snapshots from 8.4.5 release.
- * unix/tcl.spec:
- * win/configure.in:
+ * generic/tclEvent.c: [Bug 3576509]: tcl::Bgerror crashes with invalid
+ arguments
+
+2012-10-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: [Bug 2459774]: tcl/win/Makefile.in not compatible
+ with msys 0.8.
+
+2012-10-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIO.c: When checking for std channels being closed,
+ compare the channel state, not the channel itself so that stacked
+ channels do not cause trouble.
+
+2012-09-26 Reinhard Max <max@suse.de>
+
+ * generic/tclIOSock.c (TclCreateSocketAddress): Work around a bug in
+ getaddrinfo() on OSX that caused name resolution to fail for [socket
+ -server foo -myaddr localhost 0].
+
+2012-09-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/configure.in: New import libraries for zlib 1.2.7, usable for
+ * win/configure: all win32/win64 compilers
+ * compat/zlib/win32/zdll.lib:
+ * compat/zlib/win64/zdll.lib:
+
+ * win/tclWinDde.c: [FRQ 3527238]: Full unicode support for dde. Dde
+ version is now 1.4.0b2.
+ ***POTENTIAL INCOMPATIBILITY***
+
+2012-09-19 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: Make Tcl_Interp a fully opaque structure if
+ TCL_NO_DEPRECATED is set (TIP 330 and 336).
+ * win/nmakehlp.c: Let "nmakehlp -V" start searching digits after the
+ found match (suggested by Harald Oehlmann).
+
+2012-09-07 Harald Oehlmann <oehhar@users.sf.net>
+
+ *** 8.6b3 TAGGED FOR RELEASE ***
+
+ IMPLEMENTATION OF TIP#404.
+
+ * library/msgcat/msgcat.tcl: [FRQ 3544988]: New commands [mcflset]
+ * library/msgcat/pkgIndex.tcl: and [mcflmset] to set mc entries with
+ * unix/Makefile.in: implicit message file locale.
+ * win/Makefile.in: Bump to 1.5.0.
+
+2012-08-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/msgs/uk.msg: [Bug 3561330]: Use the correct full name of
+ March in Ukrainian. Thanks to Mikhail Teterin for reporting.
+
+2012-08-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclBinary.c: [Bug 3496014]: Unecessary memset() in
+ Tcl_SetByteArrayObj().
+
+2012-08-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: [Bug 3559678]: Fix bad filename normalization
+ when the last component is the empty string.
+
+2012-08-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: Remove wrapper macro for ntohs(): unnecessary,
+ because it doesn't require an initialized winsock_2 library. See:
+ <http://msdn.microsoft.com/en-us/library/windows/desktop/ms740075%28v=vs.85%29.aspx>
+ * win/tclWinSock.c:
+ * generic/tclStubInit.c:
+
+2012-08-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/nmakehlp.c: Add "-V<num>" option, in order to be able to detect
+ partial version numbers.
- * unix/configure: autoconf (2.13)
+2012-08-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/buildall.vc.bat: Only build the threaded builds by default
+ * win/rules.vc: Some code cleanup
+
+2010-08-13 Stuart Cassoff <stwo@users.sourceforge.net>
+
+ * unix/tclUnixCompat.c: [Bug 3555454]: Rearrange a bit to quash
+ 'declared but never defined' compiler warnings.
+
+2012-08-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * compat/zlib/win64/zlib1.dll: Add 64-bit build of zlib1.dll, and use
+ * compat/zlib/win64/zdll.lib: it for the dynamic mingw-w64 build.
+ * win/Makefile.in:
+ * win/configure.in:
* win/configure:
-2003-12-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+2012-08-09 Reinhard Max <max@suse.de>
- * generic/tclBinary.c (DeleteScanNumberCache, ScanNumber): Made
- the numeric scan-value cache have proper references to the objects
- within it so strange patterns of writes won't cause references to
- freed objects. Thanks to Paul Obermeier for the report. [Bug 851747]
+ * tests/http.test: Fix http-3.29 for machines without IPv6 support.
-2003-12-01 Miguel Sofer <msofer@users.sf.net>
+2010-08-08 Stuart Cassoff <stwo@users.sourceforge.net>
- * doc/lset.n: fix typo [Bug 852224]
+ * unix/tclUnixCompat.c: Change one '#ifdef' to '#if defined()' for
+ improved consistency within the file.
-2003-11-21 Don Porter <dgp@users.sourceforge.net>
+2012-08-08 Jan Nijtmans <nijtmans@users.sf.net>
- *** 8.4.5 TAGGED FOR RELEASE ***
+ * generic/tclfileName.c: [Bug #1536227]: Cygwin network pathname
+ * tests/fileName.test: support
- * tests/windFCmd.test (winFCmd-16.10): Corrected failure to
- initialize variable $dd that caused test suite failure.
+2012-08-07 Don Porter <dgp@users.sourceforge.net>
-2003-11-20 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclIOUtil.c: [Bug 3554250]: Overlooked one field of cleanup
+ in the thread exit handler for the filesystem subsystem.
- * generic/tclVar.c: fix flag bit collision between
- LOOKUP_FOR_UPVAR and TCL_PARSE_PART1 (deprecated) [Bug 835020]
-
-2003-11-20 Vince Darley <vincentdarley@users.sourceforge.net>
+2012-07-31 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclIOUtil.c:
- * tests/winFCmd.test: fix to [Bug 845778] - Infinite recursion
- on [cd] (Windows only bug).
-
-2003-11-18 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclInterp.c (Tcl_GetInterpPath):
+ * unix/tclUnixPipe.c (TclGetAndDetachPids, Tcl_PidObjCmd):
+ * win/tclWinPipe.c (TclGetAndDetachPids, Tcl_PidObjCmd):
+ Purge use of Tcl_AppendElement, and corrected conversion of PIDs to
+ integer objects.
- * changes: updated for 8.4.5 release
+2012-07-31 Jan Nijtmans <nijtmans@users.sf.net>
-2003-11-17 Don Porter <dgp@users.sourceforge.net>
+ * win/nmakehlp.c: Add -Q option from sampleextension.
+ * win/Makefile.in: [FRQ 3544967]: Missing objectfiles in static lib
+ * win/makefile.vc: (Thanks to Jos Decoster).
- * generic/regcomp.c: Backported regexp bug fixes and tests. Thanks
- * generic/tclTest.c: to Pavel Goran and Vince Darley.
- * tests/reg.test: [Bugs 230589, 504785, 505048, 703709, 840258]
+2012-07-29 Jan Nijtmans <nijtmans@users.sf.net>
-2003-11-12 Jeff Hobbs <jeffh@ActiveState.com>
+ * win/Makefile.in: No longer build tcltest.exe to run the tests,
+ but use tclsh86.exe in combination with tcltest86.dll to do that.
+ * tests/*.test: load tcltest86.dll if necessary.
- * tests/cmdMZ.test (cmdMZ-1.4): change to nonPortable as more
- systems are using permissions caching, and this isn't really a Tcl
- controlled issue.
+2012-07-28 Jan Nijtmans <nijtmans@users.sf.net>
-2003-11-11 Jeff Hobbs <jeffh@ActiveState.com>
+ * tests/clock.test: [Bug 3549770]: Multiple test failures running
+ * tests/registry.test: tcltest outside build tree
+ * tests/winDde.test:
- * unix/configure:
- * unix/tcl.m4: improve AIX --enable-64bit handling
+2012-07-27 Jan Nijtmans <nijtmans@users.sf.net>
-2003-11-10 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclUniData.c: Support Unicode 6.2 (Add Turkish lira sign)
+ * generic/regc_locale.c:
- * tests/unixInit.test (unixInit-2.10): re-enabled.
- * unix/tclUnixInit.c (TclpInitLibraryPath): Alternative fix
- * win/tclWinInit.c (TclpInitLibraryPath): for [Bug 832657]
- that should not run afoul of startup constraints.
+2012-07-25 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * library/dde/pkgIndex.tcl: Added safeguards so that registry
- * library/reg/pkgIndex.tcl: and dde packages are not offered
- * win/tclWinDde.c: on non-Windows platforms. Bumped to
- * win/tclWinReg.c: registry 1.1.3 and dde 1.2.2.
+ * win/tclWinPipe.c: [Bug 3547994]: Abandon the synchronous Windows
+ pipe driver to its fate when needed to honour TIP#398.
-2003-11-06 Jeff Hobbs <jeffh@ActiveState.com>
+2012-07-24 Trevor Davel <twylite@crypt.co.za>
- * tests/unixInit.test (unixInit-2.10): mark as knownBug
- * generic/tclEncoding.c (TclFindEncodings): revert patch from
- 2003-11-05. It wasn't valid in the sensitive startup init phase
- and broke Windows from working at all.
+ * win/tclWinSock.c: [Bug: 3545363]: Loop over multiple underlying file
+ descriptors for a socket where required (TcpCloseProc, SocketProc).
+ Refactor socket/descriptor setup to manage linked list operations in
+ one place. Fix memory leak in socket close (TcpCloseProc) and related
+ dangling pointers in SocketEventProc.
-2003-11-07 Daniel Steffen <das@users.sourceforge.net>
+2012-07-19 Reinhard Max <max@suse.de>
- * macosx/Makefile: optimized builds define NDEBUG to turn off
- ThreadAlloc range checking.
+ * win/tclWinSock.c (TcpAccept): [Bug: 3545363]: Use a large enough
+ buffer for accept()ing IPv6 connections. Fix conversion of host and
+ port for passing to the accept proc to be independent of the IP
+ version.
-2003-11-05 Don Porter <dgp@users.sourceforge.net>
+2012-07-23 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tclEncoding.c (TclFindEncodings): Normalize the path
- of the executable before passing to TclpInitLibraryPath() to avoid
- buggy handling of paths containing "..". [Bug 832657]
- * tests/unixInit.test (unixInit-2.10): New test for fixed bug.
+ * generic/tclIO.c: [Bug 3545365]: Never try a bg-flush on a dead
+ channel, just like before 2011-08-17.
-2003-11-04 Daniel Steffen <das@users.sourceforge.net>
+2012-07-19 Joe Mistachkin <joe@mistachkin.com>
- * macosx/Makefile: added 'test' target.
+ * generic/tclTest.c: Fix several more missing mutex-locks in
+ TestasyncCmd.
-2003-10-31 Vince Darley <vincentdarley@users.sourceforge.net>
+2012-07-19 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tclTest.c: fix test suite memory leak (backport error)
- * unix/tclUnixFile.c: ensure translated path (required for
- correct error messages) is freed in both code paths.
-
-2003-10-23 Andreas Kupries <andreask@activestate.com>
+ * generic/tclTest.c: [Bug 3544685]: Missing mutex-lock in
+ TestasyncCmd since 2011-08-19. Unbounded gratitude to Stuart
+ Cassoff for spotting it.
- * unix/tclUnixChan.c (Tcl_MakeFileChannel): Applied [Patch 813606]
- fixing [Bug 813087]. Detection of sockets was off for Mac OS X
- which implements pipes as local sockets. The new code ensures
- that only IP sockets are detected as such.
+2012-07-17 Jan Nijtmans <nijtmans@users.sf.net>
-2003-10-22 Andreas Kupries <andreask@activestate.com>
+ * win/makefile.vc: [Bug 3544932]: Visual studio compiler check fails
- * win/tclWinSock.c (TcpWatchProc): Watch for FD_CLOSE too when
- asked for writable events by the generic layer.
- (SocketEventProc): Generate a writable event too when a close is
- detected.
+2012-07-16 Donal K. Fellows <dkf@users.sf.net>
- Together the changes fix [Bug 599468].
+ * generic/tclUtil.c (UpdateStringOfEndOffset): [Bug 3544658]: Stop
+ 1-byte overrun in memcpy, that object placement rules made harmless
+ but which still caused compiler complaints.
-2003-10-22 Andreas Kupries <andreask@activestate.com>
+2012-07-16 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIOUtil.c (FsListMounts, FsAddMountsToGlobResult): New
- functions. See below for context.
- (Tcl_FSMatchInDirectory): Modified to call on the new functions
- (above) to handle the mountpoints in the glob'bed directory
- correctly. Part of the patch by Vincent Darley to solve the
- [Bug 800106] for the 8.4.x series.
+ * library/reg/pkgIndex.tcl: Make registry 1.3 package dynamically
+ loadable when ::tcl::pkgconfig is available.
- * generic/tcl.h (TCL_GLOB_TYPE_MOUNT): New definition. Part of the
- patch by Vincent Darley to solve [Bug 800106] for the 8.4.x series.
+2012-07-11 Jan Nijtmans <nijtmans@users.sf.net>
-2003-10-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * win/tclWinReg.c: [Bug 3362446]: registry keys command fails
+ with 8.5/8.6. Follow Microsofts example better in order to prevent
+ problems when using HKEY_PERFORMANCE_DATA.
- * generic/tclCmdAH.c (Tcl_FileObjCmd): Changed FILE_ prefix for
- option enumeration to FCMD_ to prevent collision with symbols
- defined by Cygwin/Mingw32 on NT. [Bug 822528]
+2012-07-10 Jan Nijtmans <nijtmans@users.sf.net>
-2003-10-21 Daniel Steffen <das@users.sourceforge.net>
+ * unix/tclUnixNotfy.c: [Bug 3541646]: Don't panic on triggerPipe
+ overrun.
- * tools/tcltk-man2html.tcl: fixed incorrect html generated for
- .IP/.TP lists, now use <DL><DT>...<DD>...<P><DT>...<DD>...</DL>
- instead of illegal <DL><P><DT>...<DD>...<P><DT>...<DD>...</DL>.
- Added skipping of directives directly after .TP to avoid them
- being used as item descriptions, e.g. .TP\n.VS in clock.n.
+2012-07-10 Donal K. Fellows <dkf@users.sf.net>
-2003-10-21 Andreas Kupries <andreask@activestate.com>
+ * win/tclWinSock.c (InitializeHostName): Corrected logic that
+ extracted the name of the computer from the gethostname call so that
+ it would use the name on success, not failure. Also ensured that the
+ buffer size is exactly that recommended by Microsoft.
- * win/tclWinPipe.c (BuildCommandLine): Applied the patch coming
- with [Bug 805605] to the code, fixing the incorrect use of
- ispace noted by Ronald Dauster <ronaldd@users.sourceforge.net>.
+2012-07-08 Reinhard Max <max@suse.de>
-2003-10-14 David Gravereaux <davygrvy@pobox.com>
+ * library/http/http.tcl: [Bug 3531209]: Add fix and test for URLs that
+ * tests/http.test: contain literal IPv6 addresses.
- * win/tclAppInit.c (sigHandler): Punt gracefully if exitToken
- has already been destroyed.
+2012-07-05 Don Porter <dgp@users.sourceforge.net>
-2003-10-13 Vince Darley <vincentdarley@users.sourceforge.net>
+ * unix/tclUnixPipe.c: [Bug 1189293]: Make "<<" binary safe.
+ * win/tclWinPipe.c:
- * generic/tclCmdMZ.c:
- * tests/regexp.test: fix to [Bug 823524] in regsub; added three
- new tests.
+2012-07-03 Donal K. Fellows <dkf@users.sf.net>
-2003-10-12 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclUtil.c (TclDStringAppendObj, TclDStringAppendDString):
+ * generic/tclInt.h (TclDStringAppendLiteral, TclDStringClear):
+ * generic/tclCompile.h (TclDStringAppendToken): Added wrappers to make
+ common cases of appending to Tcl_DStrings simpler to write. Prompted
+ by looking at [FRQ 1357401] (these are an _internal_ implementation of
+ that FRQ).
- * unix/tclUnixTest.c (TestalarmCmd): don't bother checking return
- value of alarm. [Bug #664755] (english)
+2012-06-29 Jan Nijtmans <nijtmans@users.sf.net>
-2003-10-08 Don Porter <dgp@users.sourceforge.net>
+ * library/msgcat/msgcat.tcl: Add tn, ro_MO and ru_MO to msgcat.
- * generic/tclBasic.c: Save and restore the iPtr->flag bits that
- control the state of errorCode and errorInfo management when calling
- "leave" execution traces, so that all error information of the traced
- command is still available whether traced or not. [Bug 760947]
- Thanks to Yahalom Emet.
+2012-06-29 Harald Oehlmann <oehhar@users.sf.net>
-2003-10-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * library/msgcat/msgcat.tcl: [Bug 3536888]: Locale guessing of
+ * library/msgcat/pkgIndex.tcl: msgcat fails on (some) Windows 7. Bump
+ * unix/Makefile.in: to 1.4.5
+ * win/Makefile.in:
- * generic/tclTest.c (TestNumUtfCharsCmd): Command to allow finer
- access to Tcl_NumUtfChars for testing.
- * generic/tclUtf.c (Tcl_NumUtfChars): Corrected string length
- determining when the length parameter is negative; the terminator
- is a zero byte, not (necessarily) a \u0000 character. [Bug 769812]
+2012-06-29 Donal K. Fellows <dkf@users.sf.net>
-2003-10-07 Don Porter <dgp@users.sourceforge.net>
+ * doc/GetIndex.3: Reinforced the description of the requirement for
+ the tables of names to index over to be static, following posting to
+ tcl-core by Brian Griffin about a bug caused by Tktreectrl not obeying
+ this rule correctly. This does not represent a functionality change,
+ merely a clearer documentation of a long-standing constraint.
- * tests/exec.test: Corrected temporary file management
- * tests/fileSystem.test: issues uncovered by -debug 1 test
- * tests/io.test: operations. Also backported some
- * tests/ioCmd.test: other fixes from the HEAD.
- * tests/pid.test: [Bugs 675605, 675655, 675659]
- * tests/socket.test:
- * tests/source.test:
+2012-06-26 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/fCmd.test: Run tests with the [temporaryDirectory] as
- the current directory, so that tests can depend on ability to write
- files. [Bug 575837]
+ * unix/tcl.m4: Let Cygwin shared build link with
+ * unix/configure.in: zlib1.dll, not cygz.dll (two less
+ * unix/configure: dependencies on cygwin-specific dll's)
+ * unix/Makefile.in:
- * doc/OpenFileChnl.3: Updated Tcl_Tell and Tcl_Seek documentation
- to reflect that they now return Tcl_WideInt (TIP 72) [Bug 787537]
+2012-06-26 Reinhard Max <max@suse.de>
- * tests/io.test: Corrected several tests that failed when paths
- * tests/ioCmd.test: included regexp-special chars. [Bug 775394]
+ * generic/tclIOSock.c: Use EAI_SYSTEM only if it exists.
+ * unix/tclUnixSock.c:
-2003-10-06 Don Porter <dgp@users.sourceforge.net>
+2012-06-25 Don Porter <dgp@users.sourceforge.net>
- * tests/regexp.test: Matched [makeFile] with [removeFile].
- * tests/regexpComp.test: [Bug 675652]
+ * generic/tclFileSystem.h: [Bug 3024359]: Make sure that the
+ * generic/tclIOUtil.c: per-thread cache of the list of file systems
+ * generic/tclPathObj.c: currently registered is only updated at times
+ when no active loops are traversing it. Also reduce the amount of
+ epoch storing and checking to where it can make a difference.
- * tests/fCmd.test (fCmd-8.2): Test only that tilde-substitution
- happens, not for any particular result. [Bug 685991]
+2012-06-25 Donal K. Fellows <dkf@users.sf.net>
- * unix/tcl.m4 (SC_PATH_TCLCONFIG): Corrected search path so
- that alpha and beta releases of Tcl are not favored. [Bug 608698]
+ * generic/tclCmdAH.c (EncodingDirsObjCmd): [Bug 3537605]: Do the right
+ thing when reporting errors with the number of arguments.
- * tests/reg.test: Corrected duplicate test names.
- * tests/resource.test: [Bugs 710370, 710358]
+2012-06-25 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/cmdMZ.test: Updated [package require tcltest] lines to
- * tests/fileSystem.test: indiciate that these test files
- * tests/notify.test: use features of tcltest 2. [Bug 706114]
- * tests/parseExpr.test:
- * tests/unixNotfy.test:
+ * generic/tclfileName.c: [Patch 1536227]: Cygwin network pathname
+ * tests/fileName.test: support.
-2003-10-06 Vince Darley <vincentdarley@users.sourceforge.net>
+2012-06-23 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclFileName.c:
- * generic/tclIOUtil.c: backport of volumerelative file normalization
- and 'file join' inconsistency fixes [Bug 767834, 813273].
+ * unix/tclUnixNotfy.c: [Bug 3508771]: Cygwin notifier for handling
+ win32 events.
-2003-10-04 Chengye Mao <chengye.geo@yahoo.com>
+2012-06-22 Reinhard Max <max@suse.de>
- * win/tclWinPipe.c: fixed a bug in BuildCommandLine.
- This bug built a command line with a missing space between
- tclpipe.dll and the following arguments. It caused error
- in Windows 98 when exec command.com (e.g. dir) [Bug 789040]
+ * generic/tclIOSock.c: Rework the error message generation of [socket],
+ * unix/tclUnixSock.c: so that the error code of getaddrinfo is used
+ * win/tclWinSock.c: instead of errno unless it is EAI_SYSTEM.
-2003-10-03 Don Porter <dgp@users.sourceforge.net>
+2012-06-21 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclBasic.c: Fixed error in ref count management of command
- * generic/tclCmdMZ.c: and execution traces that caused access to
- freed memory in trace-32.1. [Bug 811483].
+ * win/tclWinReg.c: [Bug 3362446]: registry keys command fails
+ * tests/registry.test: with 8.5/8.6
-2003-10-03 Vince Darley <vincentdarley@users.sourceforge.net>
+2012-06-11 Don Porter <dgp@users.sourceforge.net>
- * tests/fileName.test:
- * tests/winFCmd.test:
- * doc/FileSystem.3: backported various test and documentation
- changes from HEAD. Backport of actual code fixes to follow.
+ * generic/tclBasic.c: [Bug 3532959]: Make sure the lifetime
+ * generic/tclProc.c: management of entries in the linePBodyPtr
+ * tests/proc.test: hash table can tolerate either order of
+ teardown, interp first, or Proc first.
-2003-10-02 Don Porter <dgp@users.sourceforge.net>
+2012-06-08 Don Porter <dgp@users.sourceforge.net>
- * README: Bumped patch level to 8.4.5 to prepare
- * generic/tcl.h: for next patch release.
- * tools/tcl.wse.in:
+ * unix/configure.in: Update autogoo for gettimeofday().
+ * unix/tclUnixPort.h: Thanks Joe English.
+ * unix/configure: autoconf 2.13
+
+ * unix/tclUnixPort.h: [Bug 3530533]: Centralize #include <pthread.h>
+ * unix/tclUnixThrd.c: in the tclUnixPort.h header so that old unix
+ systems that need inclusion in all compilation units are supported.
+
+2012-06-08 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: Revise the "null data" check: null strings are
+ possible, but empty binary arrays are not.
+ * tests/winDde.test: Add test-case (winDde-9.4) for transferring
+ null-strings with dde. Convert tests to tcltest-2 syntax.
+
+2012-06-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (TclZlibInit): Declare that Tcl is publishing the
+ zlib package (version 2.0) as part of its bootstrap process. This will
+ have an impact on tclkit (which includes zlib 1.1) but otherwise be
+ very low impact.
+
+2012-06-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclUnixInit.c: On Cygwin, use win32 API in stead of uname()
+ to determine the tcl_platform variables.
+
+2012-05-31 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclZlib.c: [Bug 3530536]: zlib-7.4 fails on IRIX64
+ * tests/zlib.test:
+ * doc/zlib.n: Document that [stream checksum] doesn't do
+ what's expected for "inflate" and "deflate" formats
+
+2012-05-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/safe.tcl (safe::AliasFileSubcommand): Don't assume that
+ slaves have corresponding commands, as that is not true for
+ sub-subinterpreters (used in Tk's test suite).
+
+ * doc/safe.n: [Bug 1997845]: Corrected formatting so that generated
+ HTML can link properly.
+
+ * tests/socket.test (socket*-13.1): Prevented intermittent test
+ failure due to race condition.
+
+2012-05-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/expr.n, doc/mathop.n: [Bug 2931407]: Clarified semantics of
+ division and remainder operators.
+
+2012-05-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: [Bug 3525762]: Encoding handling in dde.
+ * win/Makefile.in: Fix "make genstubs" when cross-compiling on UNIX
+
+2012-05-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/safe.tcl (safe::AliasFileSubcommand): [Bug 3529949]: Made a
+ more sophisticated method for preventing information leakage; it
+ changes references to "~user" into "./~user", which is safe.
+
+2012-05-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/namespace.n, doc/Ensemble.3: [Bug 3528418]: Document what is
+ going on with respect to qualification of command prefixes in ensemble
+ subcommand maps.
+
+ * generic/tclIO.h (SYNTHETIC_EVENT_TIME): Factored out the definition
+ of the amount of time that should be waited before firing a synthetic
+ event on a channel.
+
+2012-05-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: [Bug 473946]: Special characters were not correctly
+ sent, now for XTYP_EXECUTE as well as XTYP_REQUEST.
+ * win/Makefile.in: Fix "make genstubs" when cross-compiling on UNIX
+
+2012-05-24 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: Take cygwin handling of X11 into account.
+ * generic/tcl*Decls.h: re-generated
+ * generic/tclStubInit.c: Implement TclpIsAtty, Cygwin only.
+ * doc/dde.n: Doc fix: "dde execute iexplore" doesn't work
+ without -async, because iexplore doesn't return a value
+
+2012-05-24 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: Let cygwin share stub table with win32
+ * win/tclWinSock.c: implement TclpInetNtoa for win32
+ * generic/tclInt.decls: Revert most of [3caedf05df], since when
+ we let cygwin share the win32 stub table this is no longer necessary
+ * generic/tcl*Decls.h: re-generated
+ * doc/dde.n: 1.3 -> 1.4
+
+2012-05-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (ZlibTransformInput): [Bug 3525907]: Ensure that
+ decompressed input is flushed through the transform correctly when the
+ input stream gets to the end. Thanks to Alexandre Ferrieux and Andreas
+ Kupries for their work on this.
+
+2012-05-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFileName.c: When using Tcl_SetObjLength() calls to
+ * generic/tclPathObj.c: grow and shrink the objPtr->bytes
+ buffer, care must be taken that the value cannot possibly become pure
+ Unicode. Calling Tcl_AppendToObj() has the possibility of making such
+ a conversion. Bug found while valgrinding the trunk.
+
+2012-05-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ IMPLEMENTATION OF TIP#106
+
+ * win/tclWinDde.c: Added encoding-related abilities to
+ * library/dde/pkgIndex.tcl: the [dde] command. The dde package's
+ * tests/winDde.test: version is now 1.4.0.
+ * doc/dde.n:
+
+2012-05-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOBasic.c (TclOO_Class_Constructor): [Bug 2023112]: Cut
+ the amount of hackiness in class constructors, and refactor some of
+ the error message handling from [oo::define] to be saner in the face
+ of odd happenings.
+
+2012-05-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): [Bug 3106532]: Corrected
+ resulting indexes from -indexvar option to be usable with [string
+ range]; this was always the intention (and is consistent with [regexp
+ -indices] too).
+ ***POTENTIAL INCOMPATIBILITY***
+ Uses of [switch -regexp -indexvar] that previously compensated for the
+ wrong offsets (by subtracting 1 from the end indices) now do not need
+ to do so as the value is correct.
+
+ * library/safe.tcl (safe::InterpInit): Ensure that the module path is
+ constructed in the correct order.
+ (safe::AliasGlob): [Bug 2964715]: More extensive handling of what
+ globbing is required to support package loading.
+
+ * doc/expr.n: [Bug 3525462]: Corrected statement about what happens
+ when comparing "0y" and "0x12"; the previously documented behavior was
+ actually a subtle bug (now long-corrected).
+
+2012-05-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdAH.c (TclMakeFileCommandSafe): [Bug 3445787]: Improve
+ the compatibility of safe interpreters' version of 'file' with that of
+ unsafe interpreters.
+ * library/safe.tcl (::safe::InterpInit): Teach the safe-interp scripts
+ about how to expose 'file' properly.
+
+2012-05-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: Protect against receiving strings without ending
+ \0, as external applications (or Tcl with TIP #106) could generate
+ that.
+
+2012-05-10 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: [Bug 473946]: Special characters not correctly sent
+ * library/dde/pkgIndex.tcl: Increase version to 1.3.3
+
+2012-05-10 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * {win,unix}/configure{,.in}: [Bug 2812981]: Clean up bundled
+ packages' build directory from within Tcl's ./configure, to avoid
+ stale configuration.
+
+2012-05-09 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c: [Bug 3522560]: Fixed the crash, enabled the
+ test case. Modified [chan postevent] to properly inject the event(s)
+ into the owner thread's event queue for execution in the correct
+ context. Renamed the ForwardOpTo...Thread() function to match with our
+ terminology.
+
+ * tests/ioCmd.test: [Bug 3522560]: Added a test which crashes the core
+ if it were not disabled as knownBug. For a reflected channel
+ transfered to a different thread the [chan postevent] run in the
+ handler thread tries to execute the owner threads's fileevent scripts
+ by itself, wrongly reaching across thread boundaries.
+
+2012-04-28 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: Properly close nonblocking channels even when
+ not flushing them.
+
+2012-05-03 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * compat/zlib/*: Upgrade to zlib 1.2.7 (pre-built dll is still 1.2.5,
+ will be upgraded as soon as the official build is available)
+
+2012-05-03 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/socket.test: [Bug 3428754]: Test socket-14.2 tolerate
+ [socket -async] connection that connects synchronously.
+
+ * unix/tclUnixSock.c: [Bug 3428753]: Fix [socket -async] connections
+ that manage to connect synchronously.
+
+2012-05-02 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/configure.in: Better detection and implementation for
+ * generic/configure: cpuid instruction on Intel-derived
+ * generic/tclUnixCompat.c: processors, both 32-bit and 64-bit.
+ * generic/tclTest.c: Move cpuid testcase from win-specific to
+ * win/tclWinTest.c: generic tests, as it should work on all
+ * tests/platform.test: Intel-related platforms now.
+
+2012-04-30 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tests/ioCmd.test: [Bug 3522560]: Tame deadlocks in broken refchan
+ tests.
+
+2012-04-28 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ IMPLEMENTATION OF TIP#398
+
+ * generic/tclIO.c: Quickly Exit with Non-Blocking Blocked Channels
+ * tests/io.test : *** POTENTIAL INCOMPATIBILITY ***
+ * doc/close.n : (compat flag available)
+
+2012-04-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclPort.h: Move CYGWIN-specific stuff from tclPort.h to
+ * generic/tclEnv.c: tclUnixPort.h, where it belongs.
+ * unix/tclUnixPort.h:
+ * unix/tclUnixFile.c:
+
+2012-04-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/init.tcl (auto_execok): Allow shell builtins to be detected
+ even if they are upper-cased.
+
+2012-04-26 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclStubInit.c: Get rid of _ANSI_ARGS_ and CONST
+ * generic/tclIO.c:
+ * generic/tclIOCmd.c:
+ * generic/tclTest.c:
+ * unix/tclUnixChan.c:
+
+2012-04-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclUtil.c (TclDStringToObj): Added internal function to make
+ the fairly-common operation of converting a DString into an Obj a more
+ efficient one; for long strings, it can just transfer the ownership of
+ the buffer directly. Replaces this:
+ obj=Tcl_NewStringObj(Tcl_DStringValue(&ds),Tcl_DStringLength(&ds));
+ Tcl_DStringFree(&ds);
+ with this:
+ obj=TclDStringToObj(&ds);
+
+2012-04-24 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: [Bug 3508771]: load tclreg.dll in cygwin
+ tclsh
+ * generic/tclIntPlatDecls.h: Implement TclWinGetSockOpt,
+ * generic/tclStubInit.c: TclWinGetServByName and TclWinCPUID for
+ * generic/tclUnixCompat.c: Cygwin.
* unix/configure.in:
- * unix/tcl.spec:
- * win/README.binary:
+ * unix/configure:
+ * unix/tclUnixCompat.c:
+
+2012-04-18 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/America/Port-au-Prince:
+ * library/tzdata/Asia/Damascus:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Hebron: tzdata2012c
+
+2012-04-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/FileSystem.3 (Tcl_FSOpenFileChannelProc): [Bug 3518244]: Fixed
+ documentation of this filesystem callback function; it must not
+ register its created channel - that's the responsibility of the caller
+ of Tcl_FSOpenFileChannel - as that leads to reference leaks.
+
+2012-04-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclEnsemble.c (NsEnsembleImplementationCmdNR):
+ * generic/tclIOUtil.c (Tcl_FSEvalFileEx): Cut out levels of the C
+ stack by going direct to the relevant internal evaluation function.
+
+ * generic/tclZlib.c (ZlibTransformSetOption): [Bug 3517696]: Make
+ flushing work correctly in a pushed compressing channel transform.
+
+2012-04-12 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: [Bug 3514475]: Remove TclpGetTimeZone and
+ * generic/tclIntDecls.h: TclpGetTZName
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c:
+ * unix/tclUnixTime.c:
+ * unix/tclWinTilemc:
+
+2012-04-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinInit.c: [Bug 3448512]: clock scan "1958-01-01" fails
+ * win/tcl.m4: only in debug compilation.
+ * win/configure:
+ * unix/tcl.m4: Use NDEBUG consistantly meaning: no debugging.
+ * unix/configure:
+ * generic/tclBasic.c:
+ * library/dde/pkgIndex.tcl: Use [::tcl::pkgconfig get debug] instead
+ * library/reg/pkgIndex.tcl: of [info exists ::tcl_platform(debug)]
+
+2012-04-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tcl.h (TCL_DEPRECATED_API): [Bug 2458976]: Added macro that
+ can be used to mark parts of Tcl's API as deprecated. Currently only
+ used for fields of Tcl_Interp, which TIPs 330 and 336 have deprecated
+ with a migration strategy; we want to encourage people to move away
+ from those fields.
+
+2012-04-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOODefineCmds.c (ClassVarsSet, ObjVarsSet): [Bug 3396896]:
+ Ensure that the lists of variable names used to drive variable
+ resolution will never have the same name twice.
+
+ * generic/tclVar.c (AppendLocals): [Bug 2712377]: Fix problem with
+ reporting of declared variables in methods. It's really a problem with
+ how [info vars] interacts with variable resolvers; this is just a bit
+ of a hack so it is no longer a big problem.
+
+2012-04-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (Tcl_NewObjectInstance, TclNRNewObjectInstance):
+ [Bug 3514761]: Fixed bogosity with automated argument description
+ handling when constructing an instance of a class that is itself a
+ member of an ensemble. Thanks to Andreas Kupries for identifying that
+ this was a problem case at all!
+ (Tcl_CopyObjectInstance): Fix potential bleed-over of ensemble
+ information into [oo::copy].
+
+2012-04-04 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinSock.c: [Bug 510001]: TclSockMinimumBuffers needs
+ * generic/tclIOSock.c: platform implementation.
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+2012-04-03 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclStubInit.c: Remove the TclpGetTZName implementation for
+ * generic/tclIntDecls.h: Cygwin (from 2012-04-02 commit), re-generated
+ * generic/tclIntPlatDecls.h:
+
+2012-04-02 Donal K. Fellows <dkf@users.sf.net>
+
+ IMPLEMENTATION OF TIP#396.
+
+ * generic/tclBasic.c (builtInCmds, TclNRYieldToObjCmd): Convert the
+ formerly-unsupported yieldm and yieldTo commands into [yieldto].
+
+2012-04-02 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: [Bug 3508771]: load tclreg.dll in cygwin tclsh
+ * generic/tclIntPlatDecls.h: Implement TclWinGetTclInstance,
+ * generic/tclStubInit.c: TclpGetTZName, and various more
+ win32-specific internal functions for Cygwin, so win32 extensions
+ using those can be loaded in the cygwin version of tclsh.
+
+2012-03-30 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tcl.m4: [Bug 3511806]: Compiler checks too early
+ * unix/configure.in: This change allows to build the cygwin and
+ * unix/tclUnixPort.h: mingw32 ports of Tcl/Tk to build out-of-the-box
+ * win/tcl.m4: using a native or cross-compiler.
* win/configure.in:
+ * win/tclWinPort.h:
+ * win/README Document how to build win32 or win64 executables
+ with Linux, Cygwin or Darwin.
+
+2012-03-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclCmdMZ.c (StringIsCmd): Faster mem-leak free
+ implementation of [string is entier].
+
+2012-03-27 Donal K. Fellows <dkf@users.sf.net>
+
+ IMPLEMENTATION OF TIP#395.
+
+ * generic/tclCmdMZ.c (StringIsCmd): Implementation of the [string is
+ entier] check. Code by Jos Decoster.
+
+2012-03-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug 3508771]: Wrong Tcl_StatBuf used on MinGW.
+ * generic/tclFCmd.c: [Bug 2015723]: Duplicate inodes from file stat
+ * generic/tclCmdAH.c: on windows (but now for cygwin as well).
+ * generic/tclOODefineCmds.c: minor gcc warning
+ * win/tclWinPort.h: Use lower numbers, preventing integer overflow.
+ Remove the workaround for mingw-w64 [Bug 3407992]. It's long fixed.
+
+2012-03-27 Donal K. Fellows <dkf@users.sf.net>
+
+ IMPLEMENTATION OF TIP#397.
+
+ * generic/tclOO.c (Tcl_CopyObjectInstance): [Bug 3474460]: Make the
+ target object name optional when copying classes. [RFE 3485060]: Add
+ callback method ("<cloned>") so that scripted control over copying is
+ easier.
+ ***POTENTIAL INCOMPATIBILITY***
+ If you'd previously been using the "<cloned>" method name, this now
+ has a standard semantics and call interface. Only a problem if you are
+ also using [oo::copy].
+
+2012-03-26 Donal K. Fellows <dkf@users.sf.net>
+
+ IMPLEMENTATION OF TIP#380.
+
+ * doc/define.n, doc/object.n, generic/tclOO.c, generic/tclOOBasic.c:
+ * generic/tclOOCall.c, generic/tclOODefineCmds.c, generic/tclOOInt.h:
+ * tests/oo.test: Switch definitions of lists of things in objects and
+ classes to a slot-based approach, which gives a lot more flexibility
+ and programmability at the script-level. Introduce new [::oo::Slot]
+ class which is the implementation of these things.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ The unknown method handler now may be asked to deal with the case
+ where no method name is provided at all. The default implementation
+ generates a compatible error message, and any override that forces the
+ presence of a first argument (i.e., a method name) will continue to
+ function as at present as well, so this is a pretty small change.
+
+ * generic/tclOOBasic.c (TclOO_Object_Destroy): Made it easier to do a
+ tailcall inside a normally-invoked destructor; prevented leakage out
+ to calling command.
+
+2012-03-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: [Bug 3508771]: load tclreg.dll in cygwin
+ * generic/tclIntPlatDecls.h: tclsh. Implement TclWinConvertError,
+ * generic/tclStubInit.c: TclWinConvertWSAError, and various more
+ * unix/Makefile.in: win32-specific internal functions for
+ * unix/tcl.m4: Cygwin, so win32 extensions using those
+ * unix/configure: can be loaded in the cygwin version of
+ * win/tclWinError.c: tclsh.
+
+2012-03-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: Revert some cygwin-related signature
+ * generic/tclIntPlatDecls.h: changes from [835f8e1e9d] (2010-01-22).
+ * win/tclWinError.c: They were an attempt to make the cygwin
+ port compile again, but since cygwin is
+ based on unix this serves no purpose any
+ more.
+ * win/tclWinSerial.c: Use EAGAIN in stead of EWOULDBLOCK,
+ * win/tclWinSock.c: because in VS10+ the value of
+ EWOULDBLOCK is no longer the same as
+ EAGAIN.
+ * unix/Makefile.in: Add tclWinError.c to the CYGWIN build.
+ * unix/tcl.m4:
+ * unix/configure:
+
+2012-03-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls: [Bug 3508771]: load tclreg.dll in cygwin
+ * generic/tclInt.decls: tclsh. Implement TclWinGetPlatformId,
+ * generic/tclIntPlatDecls.h: Tcl_WinUtfToTChar, Tcl_WinTCharToUtf (and
+ * generic/tclPlatDecls.h: a dummy TclWinCPUID) for Cygwin, so win32
+ * generic/tclStubInit.c: extensions using those can be loaded in
+ * unix/tclUnixCompat.c: the cygwin version of tclsh.
+
+2012-03-19 Venkat Iyer <venkat@comit.com>
+
+ * library/tzdata/America/Atikokan: Update to tzdata2012b.
+ * library/tzdata/America/Blanc-Sablon:
+ * library/tzdata/America/Dawson_Creek:
+ * library/tzdata/America/Edmonton:
+ * library/tzdata/America/Glace_Bay:
+ * library/tzdata/America/Goose_Bay:
+ * library/tzdata/America/Halifax:
+ * library/tzdata/America/Havana:
+ * library/tzdata/America/Moncton:
+ * library/tzdata/America/Montreal:
+ * library/tzdata/America/Nipigon:
+ * library/tzdata/America/Rainy_River:
+ * library/tzdata/America/Regina:
+ * library/tzdata/America/Santiago:
+ * library/tzdata/America/St_Johns:
+ * library/tzdata/America/Swift_Current:
+ * library/tzdata/America/Toronto:
+ * library/tzdata/America/Vancouver:
+ * library/tzdata/America/Winnipeg:
+ * library/tzdata/Antarctica/Casey:
+ * library/tzdata/Antarctica/Davis:
+ * library/tzdata/Antarctica/Palmer:
+ * library/tzdata/Asia/Yerevan:
+ * library/tzdata/Atlantic/Stanley:
+ * library/tzdata/Pacific/Easter:
+ * library/tzdata/Pacific/Fakaofo:
+ * library/tzdata/America/Creston: (new)
+
+2012-03-19 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixSock.c (Tcl_OpenTcpServer): Use the values returned
+ by getaddrinfo() for all three arguments to socket() instead of
+ only using ai_family. Try to keep the most meaningful error while
+ iterating over the result list, because using the last error can
+ be misleading.
+
+2012-03-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug 3288345]: Wrong Tcl_StatBuf used on Cygwin
+ * unix/tclUnixFile.c:
+ * unix/tclUnixPort.h:
+ * win/cat.c: Remove cygwin stuff no longer needed
+ * win/tclWinFile.c:
+ * win/tclWinPort.h:
+
+2012-03-12 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinFile.c: [Bug 3388350]: mingw64 compiler warnings
+
+2012-03-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/*.n, doc/*.3: A number of small spelling and wording fixes.
+
+2012-03-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/info.n: Various minor fixes (prompted by Andreas Kupries
+ * doc/socket.n: detecting a spelling mistake).
+
+2012-03-07 Andreas Kupries <andreask@activestate.com>
+
+ * library/http/http.tcl: [Bug 3498327]: Generate upper-case
+ * library/http/pkgIndex.tcl: hexadecimal output for compliance
+ * tests/http.test: with RFC 3986. Bumped version to 2.8.4.
+ * unix/Makefile.in:
+ * win/Makefile.in:
+
+2012-03-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: Compatibility with older Visual Studio versions.
+
+2012-03-04 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclLoad.c: Patch from the cygwin folks
+ * unix/tcl.m4:
+ * unix/configure: (re-generated)
+
+2012-03-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBinary.c (Tcl_SetByteArrayObj): [Bug 3496014]: Only zero
+ out the memory block if it is not being immediately overwritten. (Our
+ caller might still overwrite, but we should at least avoid
+ known-useless work.)
+
+2012-02-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIOUtil.c: [Bug 3466099]: BOM in Unicode
+ * generic/tclEncoding.c:
+ * tests/source.test:
+
+2012-02-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/reg.test (14.21-23): Add tests relating to Bug 1115587. Actual
+ bug is characterised by test marked with 'knownBug'.
+
+2012-02-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIOUtil.c: [Bug 2233954]: AIX: compile error
+ * unix/tclUnixPort.h:
+
+2012-02-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (INST_LIST_RANGE_IMM): Enhance implementation
+ so that shortening a (not multiply-referenced) list by lopping the end
+ off with [lrange] or [lreplace] is efficient.
+
+2012-02-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileLreplaceCmd): Added a compilation
+ strategy for [lreplace] that tackles the cases which are equivalent to
+ a static [lrange].
+ (TclCompileLrangeCmd): Add compiler for [lrange] with constant indices
+ so we can take advantage of existing TCL_LIST_RANGE_IMM opcode.
+ (TclCompileLindexCmd): Improve coverage of constant-index-style
+ compliation using technique developed for [lrange] above.
+
+ (TclCompileDictForCmd): [Bug 3487626]: Fix crash in compilation of
+ [dict for] when its implementation command is used directly rather
+ than through the ensemble.
+
+2012-02-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Converted the memcpy() calls in append
+ operations to memmove() calls. This adds safety in the case of
+ overlapping copies, and improves performance on some benchmarks.
+
+2012-02-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEnsemble.c: [Bug 3485022]: TclCompileEnsemble() avoid
+ * tests/trace.test: compile when exec traces set.
+
+2012-02-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclTrace.c: [Bug 3484621]: Ensure that execution traces on
+ * tests/trace.test: bytecoded commands bump the interp's compile
+ epoch.
+
+2012-02-02 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclUniData.c: [FRQ 3464401]: Support Unicode 6.1
+ * generic/regc_locale.c:
+
+2012-02-02 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinFile.c: [Bugs 2974459,2879351,1951574,1852572,
+ 1661378,1613456]: Revisions to the NativeAccess() routine that queries
+ file permissions on Windows native filesystems. Meant to fix numerous
+ bugs where [file writable|readable|executable] "lies" about what
+ operations are possible, especially when the file resides on a Samba
+ share.
- * unix/configure: autoconf (2.13)
- * win/configure:
+2012-02-01 Donal K. Fellows <dkf@users.sf.net>
- * library/http/http.tcl: Bumped to http 2.4.5
+ * doc/AddErrInfo.3: [Bug 3482614]: Documentation nit.
+
+2012-01-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileCatchCmd): Added a more efficient
+ bytecode generator for the case where 'catch' is used without any
+ variable arguments; don't capture the result just to discard it.
+
+2012-01-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c: [Bug 3479689]: New internal routine
+ * generic/tclFCmd.c: TclJoinPath(). Refactor all the
+ * generic/tclFileName.c: *Join*Path* routines to give them more
+ * generic/tclInt.h: useful interfaces that are easier to
+ * generic/tclPathObj.c: manage getting the refcounts right.
+
+2012-01-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: [Bug 3475569]: Add checks for unshared values
+ before calls demanding them. [Bug 3479689]: Stop memory corruption
+ when shimmering 0-refCount value to "path" type.
+
+2012-01-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (Tcl_CopyObjectInstance): [Bug 3474460]: When
+ copying an object, make sure that the configuration of the variable
+ resolver is also duplicated.
+
+2012-01-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/uniClass.tcl: [FRQ 3473670]: Various Unicode-related
+ * tools/uniParse.tcl: speedups/robustness. Enhanced tools to be
+ * generic/tclUniData.c: able to handle characters > 0xffff. Done in
+ * generic/tclUtf.c: all branches in order to simplify merges for
+ * generic/regc_locale.c: new Unicode versions (such as 6.1)
+
+2012-01-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictExistsCmd): [Bug 3475264]: Ensure that
+ errors only ever happen when insufficient arguments are supplied, and
+ not when a path doesn't exist or a dictionary is poorly formatted (the
+ two cases can't be easily distinguished).
+
+2012-01-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug 3474726]: Eliminate detection of struct
+ * generic/tclWinPort.h: _stat32i64, just use _stati64 in combination
+ * generic/tclFCmd.c: with _USE_32BIT_TIME_T, which is the same
+ * generic/tclTest.c: then. Only keep _stat32i64 usage for cygwin,
+ * win/configure.in: so it will not conflict with cygwin's own
+ * win/configure: struct stat.
+
+2012-01-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: [Bug 3475667]: Prevent buffer read overflow.
+ Thanks to "sebres" for the report and fix.
+
+2012-01-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n (dict with): [Bug 3474512]: Explain better what is going
+ on when a dictionary key and the dictionary variable collide.
+
+2012-01-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/http/http.tcl (http::Connect): [Bug 3472316]: Ensure that we
+ only try to read the socket error exactly once.
+
+2012-01-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/tclvars.n: [Bug 3466506]: Document more environment variables.
+
+2012-01-09 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclUtf.c: [Bug 3464428]: [string is graph \u0120] was
+ * generic/regc_locale.c: wrong. Add table for Unicode [:cntrl:] class.
+ * tools/uniClass.tcl: Generate Unicode [:cntrl:] class table.
+ * tests/utf.test:
+
+2012-01-08 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (ReadZoneinfoFile): [Bug 3470928]: Corrected a bug
+ * tests/clock.test (clock-56.4): where loading zoneinfo would
+ fail if one timezone abbreviation was a proper tail of another, and
+ zic used the same bytes of the file to represent both of them. Added a
+ test case for the bug, using the same data that caused the observed
+ failure "in the wild."
+
+2011-12-30 Venkat Iyer <venkat@comit.com>
+
+ * library/tzdata/America/Bahia: Update to Olson's tzdata2011n
+ * library/tzdata/America/Havana:
+ * library/tzdata/Europe/Kiev:
+ * library/tzdata/Europe/Simferopol:
+ * library/tzdata/Europe/Uzhgorod:
+ * library/tzdata/Europe/Zaporozhye:
+ * library/tzdata/Pacific/Fiji:
+
+2011-12-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclUtf.c: [Bug 3464428]: [string is graph \u0120] is wrong.
+ * generic/tclUniData.c:
+ * generic/regc_locale.c:
+ * tests/utf.test:
+ * tools/uniParse.tcl: Clean up some unused stuff, and be more robust
+ against changes in UnicodeData.txt syntax
+
+2011-12-13 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclCompile.c (TclInitAuxDataTypeTable): Extended to register
+ the DictUpdateInfo structure as an AuxData type. For use by tbcload,
+ tclcompiler.
+
+2011-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/regc_locale.c: [Bug 3457031]: Some Unicode 6.0 chars not
+ * tests/utf.test: in [:print:] class
+
+2011-12-07 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/uniParse.tcl: [Bug 3444754]: string tolower \u01c5 is wrong
+ * generic/tclUniData.c:
+ * tests/utf.test:
+
+2011-11-30 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * library/tcltest/tcltest.tcl: [Bug 967195]: Make tcltest work
+ when tclsh is compiled without using the setargv() function on mingw.
+
+2011-11-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: don't install tommath_(super)?class.h
+ * unix/Makefile.in: don't install directories like 8.2 and 8.3
+ * generic/tclTomMath.h: [Bug 2991415]: move include tclInt.h from
+ * generic/tclTomMathInt.h: tclTomMath.h to tclTomMathInt.h
+
+2011-11-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/history.tcl (history): Simplify the dance of variable
+ management used when chaining to the implementation command.
+
+2011-11-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TclCompileObj): Simplify and de-indent the
+ logic so that it is easier to comprehend.
+
+2011-11-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: [Bug 3354324]: Windows: [file mtime] sets wrong
+ * win/tclWinFile.c: time (VS2005+ only).
+ * generic/tclTest.c:
+
+2011-11-20 Joe Mistachkin <joe@mistachkin.com>
+
+ * tests/thread.test: Remove unnecessary [after] calls from the thread
+ tests. Make error message matching more robust for tests that may
+ have built-in race conditions. Test thread-7.26 must first unset all
+ thread testing related variables. Revise results of the thread-7.28
+ through thread-7.31 tests to account for the fact they are canceled
+ via a script sent to the thread asynchronously, which then impacts the
+ error message handling. Attempt to manually drain the event queue for
+ the main thread after joining the test thread to make sure no stray
+ events are processed at the wrong time on the main thread. Revise all
+ the synchronization and comparison semantics related to the thread id
+ and error message.
+
+2011-11-18 Joe Mistachkin <joe@mistachkin.com>
+
+ * tests/thread.test: Remove all use of thread::release from the thread
+ 7.x tests, replacing it with a script that can easily cause "stuck"
+ threads to self-destruct for those test cases that require it. Also,
+ make the error message handling far more robust by keeping track of
+ every asynchronous error.
+
+2011-11-17 Joe Mistachkin <joe@mistachkin.com>
+
+ * tests/thread.test: Refactor all the remaining thread-7.x tests that
+ were using [testthread]. Note that this test file now requires the
+ very latest version of the Thread package to pass all tests. In
+ addition, the thread-7.18 and thread-7.19 tests have been flagged as
+ knownBug because they cannot pass without modifications to the [expr]
+ command, persuant to TIP #392.
+
+2011-11-17 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclThreadTest.c: For [testthread cancel], avoid creating a
+ new Tcl_Obj when the default script cancellation result is desired.
+
+2011-11-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/tclWinConsole.c: Refactor common thread handling patterns.
+
+2011-11-11 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tests/zlib.test: [Bug 3428756]: Use nonblocking writes in
+ single-threaded IO tests to avoid deadlocks when going beyond OS
+ buffers. Tidy up [chan configure] flags across zlib.test.
+
+2011-11-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixCompat.c (TclpGetPwNam, TclpGetPwUid, TclpGetGrNam)
+ (TclpGetGrGid): Use the elaborate memory management scheme outlined on
+ http://www.opengroup.org/austin/docs/austin_328.txt to handle Tcl's
+ use of standard reentrant versions of the passwd/group access
+ functions so that everything can work on all BSDs. Problem identified
+ by Stuart Cassoff.
+
+2011-10-20 Don Porter <dgp@users.sourceforge.net>
+
+ * library/http/http.tcl: Bump to version 2.8.3
* library/http/pkgIndex.tcl:
+ * unix/Makefile.in:
+ * win/Makefile.in:
-2003-10-01 Daniel Steffen <das@users.sourceforge.net>
+ * changes: Updates toward 8.6b3 release.
- * macosx/Makefile: fixed redo prebinding bug when DESTDIR="".
- * mac/tclMacResource.c: fixed possible NULL dereference (bdesgraupes).
+2011-10-20 Donal K. Fellows <dkf@users.sf.net>
-2003-09-29 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclLiteral.c (TclInvalidateCmdLiteral): [Bug 3418547]:
+ Additional code for handling the invalidation of literals.
+ * generic/tclBasic.c (Tcl_CreateObjCommand, Tcl_CreateCommand)
+ (TclRenameCommand, Tcl_ExposeCommand): The four additional places that
+ need extra care when dealing with literals.
+ * generic/tclTest.c (TestInterpResolverCmd): Additional test machinery
+ for interpreter resolvers.
- * generic/tclBasic.c (CallCommandTraces): Added safety bit
- * tests/trace.test: masking to prevent any of the bit values
- TCL_TRACE_*_EXEC from leaking into the flags field of any
- Command struct. This does not fix [Bug 811483] but helps to
- contain some of its worst symptoms. Also backported the corrections
- to test trace-28.4 from Vince Darley.
+2011-10-18 Reinhard Max <max@suse.de>
-2003-09-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * library/clock.tcl (::tcl::clock::GetSystemTimeZone): Cache the time
+ zone only if it was detected by one of the expensive methods.
+ Otherwise after unsetting TCL_TZ or TZ the previous value will still
+ be used.
- * library/http/http.tcl (geturl): Correctly check the type of
- boolean-valued options. [Bug 811170]
+2011-10-15 Venkat Iyer <venkat@comit.com>
- * unix/tcl.m4 (SC_ENABLE_FRAMEWORK): Added note to make it clearer
- that this is an OSX feature, not a general Unix feature. [Bug 619440]
+ * library/tzdata/America/Sitka: Update to Olson's tzdata2011l
+ * library/tzdata/Pacific/Fiji:
+ * library/tzdata/Asia/Hebron: (New)
-2003-09-28 David Gravereaux <davygrvy@pobox.com>
+2011-10-11 Jan Nijtmans <nijtmans@users.sf.net>
- * win/tclWinPipe.c: The windows port of expect can call
- TclWinAddProcess before any of the other pipe functions.
- Added a missing PipeInit() call to make sure the
- initialization happens.
+ * win/tclWinFile.c: [Bug 2935503]: Incorrect mode field returned by
+ [file stat] command.
-2003-09-25 Daniel Steffen <das@users.sourceforge.net>
+2011-10-09 Donal K. Fellows <dkf@users.sf.net>
- * macosx/Makefile: ensure SYMROOT exists if OBJROOT is overridden
- on command line. Replaced explict use of /usr/bin by ${BINDIR}.
+ * generic/tclCompCmds.c (TclCompileDictWithCmd): Corrected handling of
+ qualified names, and added spacial cases for empty bodies (used when
+ [dict with] is just used for extracting variables).
-2003-09-23 Don Porter <dgp@users.sourceforge.net>
+2011-10-07 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclCmdMZ.c: Fixed [Bug 807243] where
- * tests/trace.test (trace-31,32.*): the introspection results
- of both [trace info command] and [trace info execution] were getting
- co-mingled. Thanks to Mark Saye for the report.
+ * generic/tcl.h: Fix gcc warnings (discovered with latest
+ * generic/tclIORChan.c: mingw, based on gcc 4.6.1)
+ * tests/env.test: Fix env.test, when running under wine 1.3.
- * library/init.tcl (auto_load, auto_import): Expanded Eric Melski's
- 2000-01-28 fix for [Bug 218871] to all potentially troubled uses of
- [info commands] on input data, where glob-special characters could
- cause problems.
+2011-10-06 Donal K. Fellows <dkf@users.sf.net>
-2003-09-19 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclDictObj.c (TclDictWithInit, TclDictWithFinish):
+ * generic/tclCompCmds.c (TclCompileDictWithCmd): Experimental
+ compilation for the [dict with] subcommand, using parts factored out
+ from the interpreted version of the command.
- * generic/tclExecute.c: adding (DE)CACHE_STACK_INFO() pairs to
- protect all calls that may cause traces on ::errorInfo or
- ::errorCode to corrupt the stack [Bug 804681]
+2011-10-05 Jan Nijtmans <nijtmans@users.sf.net>
-2003-09-10 Don Porter <dgp@users.sourceforge.net>
+ * win/tclWinInt.h: Remove tclWinProcs, as it is no longer
+ * win/tclWin32Dll.c: being used.
- * library/opt/optparse.tcl: Overlooked dependence of opt 0.4.4
- * library/opt/pkgIndex.tcl: on Tcl 8.2. Bumped to opt 0.4.4.1.
+2011-10-03 Venkat Iyer <venkat@comit.com>
-2003-09-01 Zoran Vasiljevic <zoran@archiware.com>
+ * library/tzdata/Africa/Dar_es_Salaam: Update to Olson's tzdata2011k
+ * library/tzdata/Africa/Kampala:
+ * library/tzdata/Africa/Nairobi:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Europe/Kaliningrad:
+ * library/tzdata/Europe/Kiev:
+ * library/tzdata/Europe/Minsk:
+ * library/tzdata/Europe/Simferopol:
+ * library/tzdata/Europe/Uzhgorod:
+ * library/tzdata/Europe/Zaporozhye:
+ * library/tzdata/Pacific/Apia:
- * generic/tclIOUtil.c: backported fix from HEAD [Bug 788780]
+2011-09-29 Donal K. Fellows <dkf@users.sf.net>
-2003-08-27 Don Porter <dgp@users.sourceforge.net>
+ * tools/tcltk-man2html.tcl, tools/tcltk-man2html-utils.tcl: More
+ refactoring so that more of the utility code is decently out of the
+ way. Adjusted the header-material generator so that version numbers
+ are only included in locations where there is room.
- * generic/tclUtil.c: Corrected [Bug 411825] and other bugs in
- TclNeedSpace() where non-breaking space (\u00A0) and backslash-escaped
- spaces were handled incorrectly.
- * tests/util.test: Added new tests util-8.[2-6].
+2011-09-28 Jan Nijtmans <nijtmans@users.sf.net>
-2003-08-06 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclOO.h: [RFE 3010352]: make all TclOO API functions
+ * generic/tclOODecls.h: MODULE_SCOPE
+ * generic/tclOOIntDecls.h:
- * win/tclWinInit.c: recognize amd64 and ia32_on_win64 cpus and
- Windows CE platform.
+2011-09-27 Donal K. Fellows <dkf@users.sf.net>
-2003-08-06 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclIndexObj.c (Tcl_ParseArgsObjv): [Bug 3413857]: Corrected
+ the memory management for the code parsing arguments when returning
+ "large" numbers of arguments. Also unbroke the TCL_ARGV_AUTO_REST
+ macro in passing.
- * library/msgcat/msgcat.tcl: Added escape so that non-Windows
- * library/msgcat/pkgIndex.tcl: platforms do not try to use the
- registry package. This can save a costly and pointless package
- search. Bumped to 1.3.1. Thanks to Dave Bodenstab. [Bug 781609].
+2011-09-26 Donal K. Fellows <dkf@users.sf.net>
-2003-08-05 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclCmdAH.c (TclMakeFileCommandSafe): [Bug 3211758]: Also
+ make the main [file] command hidden by default in safe interpreters,
+ because that's what existing code expects. This will reduce the amount
+ which the code breaks, but not necessarily eliminate it...
- * generic/tclExecute.c (INST_INVOKE, INST_EVAL, INST_PUSH_RESULT):
- added a Tcl_ResetResult(interp) at each point where the interp's
- result is pushed onto the stack, to avoid keeping an extra
- reference that may cause costly Tcl_Obj duplication [Bug 781585]
- Detected by Franco Violi, analyzed by Peter Spjuth and Donal
- Fellows.
+2011-09-23 Don Porter <dgp@users.sourceforge.net>
-2003-07-24 Reinhard Max <max@suse.de>
+ * generic/tclIORTrans.c: More revisions to get finalization of
+ ReflectedTransforms correct, including adopting a "dead" field as was
+ done in tclIORChan.c.
- * library/package.tcl: Fixed a typo that broke pkg_mkIndex -verbose.
-
- * tests/pkgMkIndex.test: Added a test for [pkg_mkIndex -verbose].
+ * tests/thread.test: Stop using the deprecated thread management
+ commands of the tcltest package. The test suite ought to provide
+ these tools for itself. They do not belong in a testing harness.
-2003-07-23 Daniel Steffen <das@users.sourceforge.net>
+2011-09-22 Don Porter <dgp@users.sourceforge.net>
- * unix/Makefile.in: changes to html-tcl & html-tk
- targets for compatibility with non-gnu makes.
+ * generic/tclCmdIL.c: Revise [info frame] so that it stops creating
+ cycles in the iPtr->cmdFramePtr stack.
- * unix/Makefile.in: added macosx/README to dist target.
+2011-09-22 Donal K. Fellows <dkf@users.sf.net>
-2003-07-23 Pat Thoyts <patthoyts@users.sourceforge.net>
+ * doc/re_syntax.n: [Bug 2903743]: Add more magic so that we can do at
+ least something sane on Solaris.
+ * tools/tcltk-man2html-utils.tcl (process-text): Teach the HTML
+ generator how to handle this magic.
- * win/tclWinReg.c (OpenSubKey): Backported fix for bug 775976
- which causes the registry set command to fail when built with VC7.
- * library/reg/pkgIndex.tcl: Incremented the version to 1.1.2.
+2011-09-21 Don Porter <dgp@users.sourceforge.net>
-2003-07-21 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclThreadTest.c: Revise the thread exit handling of the
+ [testthread] command so that it properly maintains the per-process
+ data structures even when the thread exits for reasons other than the
+ [testthread exit] command.
- *** 8.4.4 TAGGED FOR RELEASE ***
+2011-09-21 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * changes: updated for 8.4.4 release
+ * unix/tclIO.c: [Bug 3412487]: Now short reads are allowed in
+ synchronous fcopy, avoid mistaking them as nonblocking ones.
-2003-07-18 Daniel Steffen <das@users.sourceforge.net>
+2011-09-21 Andreas Kupries <andreask@activestate.com>
- * macosx/Makefile: added option to allow installing manpages
- in addition to default html help.
+ * generic/tclIORTrans.c (ForwardOpToOwnerThread): Fixed the missing
+ initialization of the 'dsti' field. Reported by Don Porter, on chat.
-2003-07-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-09-20 Don Porter <dgp@users.sourceforge.net>
- * doc/Utf.3: Tightened up documentation of Tcl_UtfNext and
- Tcl_UtfPrev to better match the behaviour. [Bug 769895]
+ * generic/tclIORChan.c: Re-using the "interp" field to signal a dead
+ channel (via NULL value) interfered with conditional cleanup tasks
+ testing for "the right interp". Added a new field "dead" to perform
+ the dead channel signalling task so the corrupted logic is avoided.
-2003-07-18 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclIORTrans.c: Revised ReflectClose() and
+ FreeReflectedTransform() so that we stop leaking ReflectedTransforms,
+ yet free all Tcl_Obj values in the same thread that alloced them.
- * generic/tclIOUtil.c: correct MT-safety issues with filesystem
- records. [Bug 753315] (vasiljevic)
+2011-09-19 Don Porter <dgp@users.sourceforge.net>
- * library/http/pkgIndex.tcl: merged to v2.4.4 from head
- * library/http/http.tcl: add support for user:pass info in URL.
- * tests/http.test: [Bug 759888] (shiobara)
+ * tests/ioTrans.test: Conversion from [testthread] to Thread package
+ stops most memory leaks.
-2003-07-18 Don Porter <dgp@users.sourceforge.net>
+ * tests/thread.test: Plug most memory leaks in thread.test.
+ Constrain the rest to be skipped during `make valgrind'. Tests using
+ the [testthread cancel] testing command are leaky. Corrections wait
+ for either addition of [thread::cancel] to the Thread package, or
+ improvements to the [testthread] testing command to make leak-free
+ versions of these tests possible.
- * generic/tclBasic.c: Corrected several instances of unsafe
- * generic/tclCompile.c: truncation of UTF-8 strings that might
- * generic/tclProc.c: break apart a multi-byte character.
- * library/init.tcl: [Bug 760872]
- * tests/init.test:
+ * generic/tclIORChan.c: Plug all memory leaks in ioCmd.test exposed
+ * tests/ioCmd.test: by `make valgrind'.
+ * unix/Makefile.in:
- * doc/tcltest.n: Restored the [Eval] proc to replace
- * library/tcltest/tcltest.tcl: the [::puts] command when either the
- -output or -error option for [test] is in use, in order to capture
- data written to the output or error channels for comparison against
- what is expected. This is easier to document and agrees better with
- most user expectations than the previous attempt to replace [puts]
- only in the caller's namespace. Documentation made more precise on
- the subject. [Bug 706359]
-
- * doc/AddErrInfo.3: Improved consistency of documentation
- * doc/CrtTrace.3: by using "null" everywhere to refer to
- * doc/Encoding.3: the character '\0', and using "NULL"
- * doc/Eval.3: everywhere to refer to the value of a
- * doc/GetIndex.3: pointer that points to nowhere.
- * doc/Hash.3: Also dropped references to ASCII that
- * doc/LinkVar.3: are no longer true, and standardized on
- * doc/Macintosh.3: the hyphenated spelling of "null-terminated".
- * doc/OpenFileChnl.3:
- * doc/SetVar.3:
- * doc/StringObj.3:
- * doc/Utf.3:
-
- * doc/CrtSlave.3 (Tcl_MakeSafe): Removed warning about possible
- deprecation (no TIP on that).
-
-2003-07-17 Daniel Steffen <das@users.sourceforge.net>
-
- * macosx/Makefile: added var to allow overriding of tclsh used
- during html help building (Landon Fuller).
-
-2003-07-16 Mumit Khan <khan@nanotech.wisc.edu>
-
- * generic/tclIOUtil.c (SetFsPathFromAny): Add Cygwin specific
- code to convert POSIX filename to native format.
- * generic/tclFileName.c (Tcl_TranslateFileName): And remove from here.
- (TclDoGlob): Adjust for cygwin and append / for dirs instead of \
- * win/tclWinFile.c (TclpObjChdir): Use chdir on Cygwin.
- [Patch 679315]
-
-2003-07-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- * library/safe.tcl (FileInAccessPath): normalize paths before
- comparison. [Bug 759607] (myers)
-
- * unix/tclUnixNotfy.c (NotifierThreadProc): correct size of found
- and word vars from int to long. [Bug 767578] (hgo)
-
-2003-07-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/CrtSlave.3 (Tcl_MakeSafe): Updated documentation to strongly
- discourage use. IMHO code outside the core that uses this
- function is a bug... [Bug 655300]
-
-2003-07-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tcl.h: add recognition of -DTCL_UTF_MAX=6 on the
- * generic/regcustom.h: make line to support UCS-4 mode. No config
- arg at this time, as it is not the recommended build mode.
-
- * generic/tclPreserve.c: In Result and Preserve'd routines, do not
- * generic/tclUtil.c: assume that ckfree == free, as that is not
- * generic/tclResult.c: always true. [Bug 756791] (fuller)
-
-2003-07-16 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/Makefile.in: Don't define TCL_DBGX
- symbol for every compile. Instead, define
- TCL_PIPE_DLL only when compiling tclWinPipe.c.
- This will break other build systems, so
- they will need to remove the TCL_DBGX define
- and replace it with a define for TCL_PIPE_DLL.
- * win/makefile.vc: Ditto.
- * win/tclWinPipe.c (TclpCreateProcess):
- Remove PREFIX_IDENT and DEBUG_IDENT from
- top of file. Use TCL_PIPE_DLL passed in
- from build env instead of trying to construct
- the dll name from already defined symbols.
- This approach is more flexible and better
- in the long run.
+2011-09-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ IMPLEMENTATION OF TIP #388
+
+ * doc/Tcl.n:
+ * doc/re_syntax.n:
+ * generic/regc_lex.c:
+ * generic/regcomp.c:
+ * generic/regcustom.h:
+ * generic/tcl.h:
+ * generic/tclParse.c:
+ * tests/reg.test:
+ * tests/utf.test:
-2003-07-16 Don Porter <dgp@users.sourceforge.net>
+2011-09-16 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclFileName.c (Tcl_GlobObjCmd): [Bug 771840]
- * generic/tclIOUtil.c (Tcl_FSConvertToPathType):[Bug 771947]
- * unix/tclUnixFCmd.c (GetModeFromPermString): [Bug 771949]
- Silence compiler warnings about unreached lines.
+ * generic/tclProc.c (ProcWrongNumArgs): [Bugs 3400658,3408830]:
+ Corrected the handling of procedure error messages (found by TclOO).
- * library/tcltest/tcltest.tcl (ProcessFlags): Corrected broken call
- * library/tcltest/pkgIndex.tcl: to [lrange]. Bumped
- to version 2.2.4. [Bug 772333]
+2011-09-16 Jan Nijtmans <nijtmans@users.sf.net>
-2003-07-15 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tcl.h: Don't change Tcl_UniChar type when
+ * generic/regcustom.h: TCL_UTF_MAX == 4 (not supported anyway)
- * unix/dltest/pkga.c (Pkga_EqObjCmd): Fix typo
- that was causing a crash in load.test.
+2011-09-16 Donal K. Fellows <dkf@users.sf.net>
-2003-07-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclProc.c (ProcWrongNumArgs): [Bugs 3400658,3408830]:
+ Ensemble-like rewriting of error messages is complex, and TclOO (in
+ combination with iTcl) hits the most tricky cases.
- * doc/array.n: Added some examples from David Welton [Patch 763312]
+ * library/http/http.tcl (http::geturl): [Bug 3391977]: Ensure that the
+ -headers option overrides the -type option (important because -type
+ has a default that is not always appropriate, and the header must not
+ be duplicated).
-2003-07-15 Don Porter <dgp@users.sourceforge.net>
+2011-09-15 Don Porter <dgp@users.sourceforge.net>
- * doc/http.n: Updated SYNOPSIS to match actual syntax of
- commands. [Bug 756112]
+ * generic/tclCompExpr.c: [Bug 3408408]: Partial improvement by sharing
+ as literals the computed values of constant subexpressions when we can
+ do so without incurring the cost of string rep generation.
- * unix/dltest/pkga.c: Updated to not use Tcl_UtfNcmp and counted
- strings instead of strcmp (not defined in any #include'd header)
- and presumed NULL-terminated strings.
+2011-09-13 Don Porter <dgp@users.sourceforge.net>
- * README: Bumped patch level to 8.4.4 in anticipation
- * generic/tcl.h: of another patch release.
- * tools/tcl.wse.in:
- * unix/configure.in:
- * unix/tcl.spec:
- * win/README.binary:
- * win/configure.in:
+ * generic/tclUtil.c: [Bug 3390638]: Workaround broken Solaris
+ Studio cc optimizer. Thanks to Wolfgang S. Kechel.
+
+ * generic/tclDTrace.d: [Bug 3405652]: Portability workaround for
+ broken system DTrace support. Thanks to Dagobert Michelson.
+
+2011-09-12 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: [Bug 3407070]: tclPosixStr.c won't build with
+ EOVERFLOW==E2BIG
+
+2011-09-11 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/thread.test: Convert [testthread] use to Thread package use
+ in thread-6.1. Eliminates a memory leak in `make valgrind`.
+
+ * tests/socket.test: [Bug 3390699]: Convert [testthread] use to
+ Thread package use in socket_*-13.1. Eliminates a memory leak in
+ `make valgrind`.
+
+2011-09-09 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/chanio.test: [Bug 3389733]: Convert [testthread] use to
+ * tests/io.test: Thread package use in *io-70.1. Eliminates a
+ memory leak in `make valgrind`.
+
+2011-09-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: [Bug 3401704]: Allow function names like
+ * tests/parseExpr.test: influence(), nanobot(), and 99bottles() that
+ have been parsed as missing operator syntax errors before with the
+ form NUMBER + FUNCTION.
+ ***POTENTIAL INCOMPATIBILITY***
+
+2011-09-06 Venkat Iyer <venkat@comit.com>
+
+ * library/tzdata/America/Goose_Bay: Update to Olson's tzdata2011i
+ * library/tzdata/America/Metlakatla:
+ * library/tzdata/America/Resolute:
+ * library/tzdata/America/St_Johns:
+ * library/tzdata/Europe/Kaliningrad:
+ * library/tzdata/Pacific/Apia:
+ * library/tzdata/Pacific/Honolulu:
+ * library/tzdata/Africa/Juba: (new)
+
+2011-09-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [RFE 1711975]: Tcl_MainEx() (like Tk_MainEx())
+ * generic/tclDecls.h:
+ * generic/tclMain.c:
+
+2011-09-02 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/http.test: Convert [testthread] use to Thread package use.
+ Eliminates memory leak seen in `make valgrind`.
- * unix/configure: autoconf (2.13)
+2011-09-01 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * unix/tclUnixSock.c: [Bug 3401422]: Cache script-level changes to the
+ nonblocking flag of an async client socket in progress, and commit
+ them on completion.
+
+2011-09-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStrToD.c: [Bug 3402540]: Corrections to TclParseNumber()
+ * tests/binary.test: to make it reject invalid Nan(Hex) strings.
+
+ * tests/scan.test: [scan Inf %g] is portable; remove constraint.
+
+2011-08-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInterp.c (SlaveCommandLimitCmd, SlaveTimeLimitCmd):
+ [Bug 3398794]: Ensure that low-level conditions in the limit API are
+ enforced at the script level through errors, not a Tcl_Panic. This
+ means that interpreters cannot read their own limits (writing already
+ did not work).
+
+2011-08-30 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixSock.c (TcpWatchProc): [Bug 3394732]: Put back the check
+ for server sockets.
+
+2011-08-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIORTrans.c: Leak of ReflectedTransformMap.
+
+2011-08-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: [RFE 3396731]: Revise the [string reverse]
+ * tests/string.test: implementation to operate on the representation
+ that comes in, avoid conversion to other reps.
+
+2011-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIORChan.c: [Bug 3396948]: Leak of ReflectedChannelMap.
+
+2011-08-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIORTrans.c: [Bugs 3393279, 3393280]: ReflectClose(.) is
+ missing Tcl_EventuallyFree() calls at some of its exits.
+
+ * generic/tclIO.c: [Bugs 3394654, 3393276]: Revise FlushChannel() to
+ account for the possibility that the ChanWrite() call might recycle
+ the buffer out from under us.
+
+ * generic/tclIO.c: Preserve the chanPtr during FlushChannel so that
+ channel drivers don't yank it away before we're done with it.
+
+2011-08-19 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclTest.c: [Bug 2981154]: async-4.3 segfault.
+ * tests/async.test: [Bug 1774689]: async-4.3 sometimes fails.
+
+2011-08-18 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: [Bug 3096275]: Sync fcopy buffers input.
+
+2011-08-18 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclUniData.c: [Bug 3393714]: Overflow in toupper delta
+ * tools/uniParse.tcl:
+ * tests/utf.test:
+
+2011-08-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: [Bug 2946474]: Consistently resume backgrounded
+ * tests/ioCmd.test: flushes+closes when exiting.
+
+2011-08-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * doc/interp.n: Document TIP 378's one-way-ness.
+
+2011-08-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclGet.c: [Bug 3393150]: Overlooked free of intreps.
+ (It matters for bignums!)
+
+2011-08-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c: [Bug 3392070]: More complete prevention of
+ Tcl_Obj reference cycles when producing an intrep of ByteCode.
+
+2011-08-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclListObj.c (TclLindexList, TclLsetFlat): Silence warnings
+ about (unreachable) cases of uninitialized variables.
+ * generic/tclCmdIL.c (SelectObjFromSublist): Improve the generation of
+ * generic/tclIndexObj.c (Tcl_ParseArgsObjv): messages through the use
+ * generic/tclVar.c (ArrayStartSearchCmd): of Tcl_ObjPrintf.
+
+2011-08-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: [Bug 3390272]: Leak of [info script] value.
+
+2011-08-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclPosixStr.c: [Bug 3388350]: mingw64 compiler warnings
+ * win/tclWinPort.h:
+ * win/configure.in:
* win/configure:
- * generic/tclCompCmds.c (TclCompileIfCmd): Prior fix of Bug 711371
- on 2003-04-07 introduced a buffer overflow. Corrected. [Bug 771613]
+2011-08-14 Jan Nijtmans <nijtmans@users.sf.net>
-2003-07-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * doc/FindExec.3: [Patch 3124554]: Move WishPanic from Tk to Tcl
+ * doc/Panic.3 Added Documentation
- * generic/tclCmdIL.c (SortCompare): Cleared up confusing error
- message. [Bug 771539]
+2011-08-12 Don Porter <dgp@users.sourceforge.net>
-2003-07-15 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclPathObj.c: [Bug 3389764]: Eliminate possibility that dup
+ of a "path" value can create reference cycle.
- * macosx/Makefile: Rewrote buildsystem for Mac OS X framework build
- to be purely make driven; in order to become independent of Apple's
- closed-source IDE and build tool. The changes are intended to be
- transparent to the Makefile user, all existing make targets and
- cmd line variable overrides should continue to work.
- Changed build to only include tcl specific html help in Tcl.framework,
- the tk specific html help is now included in Tk.framework.
+2011-08-12 Donal K. Fellows <dkf@users.sf.net>
- * macosx/Tcl.pbproj/project.pbxproj:
- * macosx/Tcl.pbproj/jingham.pbxuser: Changed to purely call through
- to the make driven buildsystem; Tcl.framework is no longer assembled
- by ProjectBuilder.
- Set default SYMROOT in target options to simplify setting up PB
- (manually setting common build folder for tcl & tk no longer needed).
+ * generic/tclZlib.c (ZlibTransformOutput): [Bug 3390073]: Return the
+ correct length of written data for a compressing transform.
- * tools/tcltk-man2html.tcl: Added options to allow building only the
- tcl or tk html help files; the default behaviour with none of the new
- options is to build both, as before.
+2011-08-10 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * unix/Makefile.in: Added targets for building only the tcl or tk help.
+ * generic/tclTestObj.c: [Bug 3386721]: Allow multiple [load]ing of the
+ Tcltest package.
- * macosx/README (new): Tcl specific excerpts of tk/macosx/README.
+2011-08-09 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tcl.h: Updated reminder comment about editing
- macosx/Tcl.pbproj/project.pbxproj when version number changes.
+ * generic/tclBasic.c: [Bug 2919042]: Restore "valgrindability" of Tcl
+ * generic/tclEvent.c: that was lost by the streamlining of [exit], by
+ * generic/tclExecute.c: conditionally forcing a full Finalize:
+ * generic/tclInt.h: use -DPURIFY or ::env(TCL_FINALIZE_ON_EXIT)
-2003-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-08-09 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * tests/binary.test (binary-46.*): Tests to help enforce the
- current behaviour.
- * doc/binary.n: Documented that [binary format a] and [binary scan a]
- do encoding conversion by dropping high bytes, unlike the rest of
- the core. [Bug 735364]
+ * generic/tclCompCmds.c: [Bug 3386417]: Avoid a reference loop between
+ * generic/tclInt.h: the bytecode and its companion errostack
+ * generic/tclResult.c: when compiling a syntax error.
-2003-07-11 Don Porter <dgp@users.sourceforge.net>
+2011-08-09 Jan Nijtmans <nijtmans@users.sf.net>
- * library/package.tcl: Corrected [pkg_mkIndex] bug reported on
- comp.lang.tcl. The indexer was searching for newly indexed packages
- instead of newly provided packages.
+ * win/tclWinConsole.c: [Bug 3388350]: mingw64 compiler warnings
+ * win/tclWinDde.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
-2003-07-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-08-09 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/expr.n: Tighten up the wording of some operations. [Bug 758488]
+ * generic/tclInt.h: Change the signature of TclParseHex(), such that
+ * generic/tclParse.c: it can now parse up to 8 hex characters.
- * tests/cmdAH.test: Made tests of [file mtime] work better on FAT
- filesystems. [Patch 760768] Also a little general cleanup.
+2011-08-08 Donal K. Fellows <dkf@users.sf.net>
-2003-06-25 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tclZlib.c (ZlibStreamCmd): Make the -buffersize option to
+ '$zstream add' function correctly instead of having its value just be
+ discarded unceremoniously. Also generate error codes from more of the
+ code, not just the low-level code but also the Tcl infrastructure.
- * unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add -ieee when
- compiling with cc and add -mieee when compiling
- with gcc under OSF1-V5 "Tru64" systems.
- [Bug 748957]
+2011-08-07 Donal K. Fellows <dkf@users.sf.net>
-2003-06-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclOOInfo.c (InfoClassCallCmd): [Bug 3387082]: Plug memory
+ leak in call chain introspection.
- * doc/encoding.n: Corrected the docs to say that [source] uses the
- system encoding, which it always did anyway (since 8.1) [Bug 742100]
+2011-08-06 Kevin B, Kenny <kennykb@acm.org>
-2003-06-23 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclAssemnbly.c: [Bug 3384840]: Plug another memory leak.
+ * generic/tclStrToD.c: [Bug 3386975]: Plug another memory leak.
- * generic/tclFCmd.c: fix to bad error message when trying to
- do 'file copy foo ""'. [Bug 756951]
- * tests/fCmd.test: added two new tests for the bug.
+2011-08-05 Kevin B. Kenny <kennykb@acm.org>
- * doc/FileSystem.3: documentation fix [Bug 720634]
+ * generic/tclStrToD.c: [Bug 3386975]: Plugged a memory leak in
+ double->string conversion.
-2003-06-18 Miguel Sofer <msofer@users.sf.net>
+2011-08-05 Don Porter <dgp@users.sourceforge.net>
- * generic/tclNamesp.c (Tcl_Export): removed erroneous comments
- [Bug 756744]
+ *** 8.6b2 TAGGED FOR RELEASE ***
-2003-06-17 Vince Darley <vincentdarley@users.sourceforge.net>
+ * changes: Updates for 8.6b2 release.
- * generic/tclCmdMZ.c:
- * tests/regexp.test: fixing of bugs related to regexp and regsub
- matching of empty strings. Addition of a number of new tests.
+2011-08-05 Donal K. Fellows <dkf@users.sf.net>
-2003-06-10 Miguel Sofer <msofer@users.sf.net>
+ * generic/tclAssembly.c (AssembleOneLine): Ensure that memory isn't
+ leaked when an unknown instruction is encountered. Also simplify code
+ through use of Tcl_ObjPrintf in error message generation.
- * generic/tclBasic.c:
- * generic/tclExecute.c: let TclEvalObjvInternal call
- TclInterpReady instead of relying on its callers to do so; fix for
- the part of [Bug 495830] that is new in 8.4.
- * tests/interp.test: Added tests 18.9 (knownbug) and 18.10
+ * generic/tclZlib.c (ZlibTransformClose): [Bug 3386197]: Plug a memory
+ leak found by Miguel with valgrind, and ensure that the correct
+ direction's buffers are released.
-2003-06-09 Don Porter <dgp@users.sourceforge.net>
+2011-08-04 Miguel Sofer <msofer@users.sf.net>
- * tests/string.test (string-4.15): Added test for [string first] bug
- reported in Tcl 8.3, where test for all-single-byte-encoded strings
- was not reliable.
+ * generic/tclVar.c (TclPtrSetVar): Fix valgrind-detected error when
+ newValuePtr is the interp's result obj.
-2003-06-04 Joe Mistachkin <joe@mistachkin.com>
+2011-08-04 Donal K. Fellows <dkf@users.sf.net>
- * tools/man2help.tcl: Added duplicate help section checking
- * tools/index.tcl: and corrected a comment typo for the
- getTopics proc in index.tcl [Bug #748700].
+ * generic/tclAssembly.c (FreeAssemblyEnv): [Bug 3384840]: Plug another
+ possible memory leak due to over-complex code for freeing the table of
+ labels.
-2003-05-23 Don Porter <dgp@users.sourceforge.net>
+2011-08-04 Reinhard Max <max@suse.de>
- * generic/tclObj.c (tclCmdNameType): Converted internal rep
- management of the cmdName Tcl_ObjType the opposite way, to always
- use the twoPtrValue instead of always using the otherValuePtr.
- Previous fix on 2003-05-12 broke several extensions that wanted
- to poke around with the twoPtrValue.ptr2 value of a cmdName
- Tcl_Obj, like TclBlend and e4graph. [Bug 726018]
- Thanks to George Petasis for the bug report and Jacob Levy for
- testing assistance.
+ * generic/tclIOSock.c (TclCreateSocketAddress): Don't bother using
+ AI_ADDRCONFIG for now, as it was causing problems in various
+ situations.
-2003-05-22 Daniel Steffen <das@users.sourceforge.net>
+2011-08-04 Donal K. Fellows <dkf@users.sf.net>
- *** 8.4.3 TAGGED FOR RELEASE ***
+ * generic/tclAssembly.c (AssembleOneLine, GetBooleanOperand)
+ (GetIntegerOperand, GetListIndexOperand, FindLocalVar): [Bug 3384840]:
+ A Tcl_Obj is allocated by GetNextOperand, so callers of it must not
+ hold a reference to one in the 'out' parameter when calling it. This
+ was causing a great many memory leaks.
+ * tests/assemble.test (assemble-51.*): Added group of memory leak
+ tests.
- * macosx/tclMacOSXBundle.c: fixed a problem that caused only the
- first call to Tcl_MacOSXOpenVersionedBundleResources() for a given
- bundle identifier to succeed. This caused the tcl runtime library
- not to be found in all interps created after the inital one.
-
-2003-05-20 Jeff Hobbs <jeffh@ActiveState.com>
+2011-08-02 Don Porter <dgp@users.sourceforge.net>
- * changes: updated for 8.4.3
+ * changes: Updates for 8.6b2 release.
+ * tools/tcltk-man2html.tcl: Variable substitution botch.
- * unix/Makefile.in: do not run autoconf during 'make dist' as the
- configure is now a CVS-maintained file and should be up-to-date.
+2011-08-02 Donal K. Fellows <dkf@users.sf.net>
-2003-05-19 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclObj.c (Tcl_DbIncrRefCount, Tcl_DbDecrRefCount)
+ (Tcl_DbIsShared): [Bug 3384007]: Fix the panic messages so they share
+ what should be shared and have the right number of spaces.
- * macosx/Tcl.pbproj/project.pbxproj: changed tclConfig.sh location
- in versioned framework subdirectories to be identical to location
- in framework toplevel; fixed stub library symbolic links to be
- tcl version specific.
+2011-08-01 Miguel Sofer <msofer@users.sf.net>
-2003-05-16 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclProc.c (TclProcCompileProc): [Bug 3383616]: Fix for leak
+ of resolveInfo when recompiling procs. Thanks go to Gustaf Neumann for
+ detecting the bug and providing the fix.
- * macosx/Tcl.pbproj/project.pbxproj: updated copyright year.
-
-2003-05-15 Jeff Hobbs <jeffh@ActiveState.com>
+2011-08-01 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinFile.c (TclpMatchInDirectory): revert glob code to
- r1.44 as 2003-04-14 optimizations broke Windows98 glob'ing.
+ * doc/tclvars.n (EXAMPLES): Added some examples of how some of the
+ standard global variables can be used, following prompting by a
+ request by Robert Hicks.
- * README: bumped version to 8.4.3
- * generic/tcl.h:
- * macosx/Tcl.pbproj/project.pbxproj:
- * tools/tcl.wse.in:
- * unix/configure:
+ * tools/tcltk-man2html.tcl (plus-pkgs): [Bug 3382474]: Added code to
+ determine the version number of contributed packages from their
+ directory names so that HTML documentation builds are less confusing.
+
+2011-07-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (ensemble_commands, remap_link_target):
+ Small enhancements to improve cross-linking with contributed packages.
+ * tools/tcltk-man2html-utils.tcl (insert-cross-references): Enhance to
+ cope with contributed packages' C API.
+
+2011-07-28 Reinhard Max <max@suse.de>
+
+ * unix/tcl.m4 (SC_TCL_IPV6): Fix AC_DEFINE invocation for
+ NEED_FAKE_RFC2553.
+ * unix/configure: autoconf-2.59
+
+2011-07-28 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.6b2 release.
+
+ * library/tzdata/Asia/Anadyr: Update to Olson's tzdata2011h
+ * library/tzdata/Asia/Irkutsk:
+ * library/tzdata/Asia/Kamchatka:
+ * library/tzdata/Asia/Krasnoyarsk:
+ * library/tzdata/Asia/Magadan:
+ * library/tzdata/Asia/Novokuznetsk:
+ * library/tzdata/Asia/Novosibirsk:
+ * library/tzdata/Asia/Omsk:
+ * library/tzdata/Asia/Sakhalin:
+ * library/tzdata/Asia/Vladivostok:
+ * library/tzdata/Asia/Yakutsk:
+ * library/tzdata/Asia/Yekaterinburg:
+ * library/tzdata/Europe/Kaliningrad:
+ * library/tzdata/Europe/Moscow:
+ * library/tzdata/Europe/Samara:
+ * library/tzdata/Europe/Volgograd:
+ * library/tzdata/America/Kralendijk: (new)
+ * library/tzdata/America/Lower_Princes: (new)
+
+2011-07-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (initScript): Ensure that TclOO is properly found by
+ all the various package mechanisms (by adding a dummy ifneeded script)
+ and not just some of them.
+
+2011-07-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: [Bug 3372130]: Fix hypot math function with MSVC10
+
+2011-07-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c: [Bug 3371644]: Repair failure to properly handle
+ * tests/util.test: (length == -1) scanning in TclConvertElement().
+ Thanks to Thomas Sader and Alexandre Ferrieux.
+
+2011-07-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/*.3, doc/*.n: Many small fixes to documentation as part of
+ project to improve quality of generated HTML docs.
+
+ * tools/tcltk-man2html.tcl (remap_link_target): More complete set of
+ definitions of link targets, especially for major C API types.
+ * tools/tcltk-man2html-utils.tcl (output-IP-list, cross-reference):
+ Update to generation to produce proper HTML bulleted and enumerated
+ lists.
+
+2011-07-19 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * doc/upvar.n: Undocument long gone limitation of [upvar].
+
+2011-07-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump version number to 8.6b2.
+ * library/init.tcl:
* unix/configure.in:
+ * win/configure.in:
* unix/tcl.spec:
- * win/README.binary:
+ * tools/tcl.wse.in:
+ * README:
+
+ * unix/configure: autoconf-2.59
* win/configure:
- * win/configure.in:
- * doc/socket.n: nroff font handling correction.
+2011-07-15 Don Porter <dgp@users.sourceforge.net>
- * library/encoding/gb2312-raw.enc (new): This is the original
- gb2312.enc renamed to allow for it to still be used. This is
- needed by Tk (unix) because X fonts with gb2312* charsets really
- do want the original gb2312 encoding. [Bug 557030]
+ * generic/tclCompile.c: Avoid segfaults when RecordByteCodeStats() is
+ called in a deleted interp.
-2003-05-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclCompile.c: [Bug 467523, 3357771]: Prevent circular
+ references in values with ByteCode intreps. They can lead to memory
+ leaks.
- * generic/tclCmdAH.c (Tcl_FormatObjCmd): Values which can't be
- anything but wide shouldn't be demoted to long. [consequence of
- HEAD fixes for Bug 699060]
+2011-07-14 Donal K. Fellows <dkf@users.sf.net>
-2003-05-14 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclOOCall.c (TclOORenderCallChain): [Bug 3365156]: Remove
+ stray refcount bump that caused a memory leak.
- * library/encoding/gb2312.enc: copy euc-cn.enc over original
- gb2312.enc. gb2312.enc appeared to not work as expected, and most
- uses of gb2312 really mean euc-cn (which may be the cause of the
- problem). [Bug 557030]
+2011-07-12 Don Porter <dgp@users.sourceforge.net>
- * generic/tclEnv.c (TclUnsetEnv): Another putenv() copy behavior
- problem repaired when compiling on windows and using microsoft's
- runtime. [Bug 736421] (gravereaux)
+ * generic/tclUnixSock.c: [Bug 3364777]: Stop segfault caused by
+ reading from struct after it had been freed.
-2003-05-13 Jeff Hobbs <jeffh@ActiveState.com>
+2011-07-11 Joe Mistachkin <joe@mistachkin.com>
- * generic/tclIOUtil.c: add decl for FsThrExitProc to suppress
- warnings.
+ * generic/tclExecute.c: [Bug 3339502]: Correct cast for CURR_DEPTH to
+ silence compiler warning.
-2003-05-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-07-08 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclEvent.c (Tcl_Finalize): Removed unused variable to
- reduce compiler warnings. [Bug 664745]
+ * doc/http.n: [FRQ 3358415]: State what RFC defines HTTP/1.1.
-2003-05-13 Joe Mistachkin <joe@mistachkin.com>
+2011-07-07 Miguel Sofer <msofer@users.sf.net>
- * generic/tcl.decls: Changed Tcl_JoinThread parameter name from
- * generic/tclDecls.h: "id" to "threadId". [Bug 732477]
- * unix/tclUnixThrd.c:
- * win/tclWinThrd.c:
- * mac/tclMacThrd.c:
-
-2003-05-13 Daniel Steffen <das@users.sourceforge.net>
-
- * generic/tcl.decls:
- * macosx/tclMacOSXBundle.c: added extended version of the
- Tcl_MacOSXOpenBundleResources() API taking an extra version number
- argument: Tcl_MacOSXOpenVersionedBundleResources().
- This is needed to be able to access bundle resources in versioned
- frameworks such as Tcl and Tk, otherwise if multiple versions were
- installed, only the latest version's resources could be accessed.
- [Bug 736774]
-
- * unix/tclUnixInit.c (Tcl_MacOSXGetLibraryPath): use new versioned
- bundle resource API to get tcl runtime library for TCL_VERSION.
- [Bug 736774]
-
- * generic/tclPlatDecls.h:
- * generic/tclStubInit.c: regen.
+ * generic/tclBasic.c: Add missing INT2PTR
- * unix/tclUnixPort.h: worked around the issue of realpath() not
- being thread-safe on Mac OS X by defining NO_REALPATH for threaded
- builds on Mac OS X. [Bug 711232]
+2011-07-03 Donal K. Fellows <dkf@users.sf.net>
-2003-05-12 Don Porter <dgp@users.sourceforge.net>
+ * doc/FileSystem.3: Corrected statements about ctime field of 'struct
+ stat'; that was always the time of the last metadata change, not the
+ time of creation.
- * generic/tclInterp.c: (AliasObjCmd): Added refCounting of the words
- * tests/interp.test (interp-33.1): of the target of an interp
- alias during its execution. Also added test. [Bug 730244].
+2011-07-02 Kevin B. Kenny <kennykb@acm.org>
- * generic/tclBasic.c (TclInvokeObjectCommand): objv[argc] is no
- longer set to NULL (Tcl_CreateObjCommand docs already say that it
- should not be accessed).
+ * generic/tclStrToD.c:
+ * generic/tclTomMath.decls:
+ * generic/tclTomMathDecls.h:
+ * macosx/Tcl.xcode/project.pbxproj:
+ * macosx/Tcl.xcodeproj/project.pbxproj:
+ * tests/util.test:
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/Makefile.vc:
+ [Bug 3349507]: Fix a bug where bignum->double conversion is "round up"
+ and not "round to nearest" (causing expr double(1[string repeat 0 23])
+ not to be 1e+23).
- * generic/tclObj.c (tclCmdNameType): Corrected variable use of the
- otherValuePtr or the twoPtrValue.ptr1 fields to store a
- (ResolvedCmdName *) as the internal rep. [Bug 726018].
+2011-06-28 Reinhard Max <max@suse.de>
- * doc/Eval.3: Corrected prototype for Tcl_GlobalEvalObj [Bug 727622].
+ * unix/tclUnixSock.c (CreateClientSocket): [Bug 3325339]: Fix and
+ simplify posting of the writable fileevent at the end of an
+ asynchronous connection attempt. Improve comments for some of the
+ trickery around [socket -async].
-2003-05-12 Miguel Sofer <msofer@users.sf.net>
+ * tests/socket.test: Adjust tests to the async code changes. Add more
+ tests for corner cases of async sockets.
- * generic/tclVar.c (TclObjLookupVar): [Bug 735335] temporary fix,
- disabling usage of tclNsVarNameType.
- * tests/var.test (var-15.1): test for [Bug 735335]
+2011-06-22 Andreas Kupries <andreask@activestate.com>
-2003-05-10 Zoran Vasiljevic <zoran@archiware.com>
+ * library/platform/pkgIndex.tcl: Updated to platform 1.0.10. Added
+ * library/platform/platform.tcl: handling of the DEB_HOST_MULTIARCH
+ * unix/Makefile.in: location change for libc.
+ * win/Makefile.in:
- * unix/tclUnixThrd.c: corrected Tcl Bug #723502
+ * generic/tclInt.h: Fixed the inadvertently committed disabling of
+ stack checks, see my 2010-11-15 commit.
-2003-05-10 Jeff Hobbs <jeffh@ActiveState.com>
+2011-06-22 Reinhard Max <max@suse.de>
- * generic/tclIOUtil.c: ensure cd is thread-safe.
- [Bug #710642] (vasiljevic)
+ Merge from rmax-ipv6-branch:
+ * unix/tclUnixSock.c: Fix [socket -async], so that all addresses
+ returned by getaddrinfo() are tried, not just the first one. This
+ requires the event loop to be running while the async connection is in
+ progress. ***POTENTIAL INCOMPATIBILITY***
+ * tests/socket.test: Add a test for the above.
+ * doc/socket: Document the fact that -async needs the event loop
+ * generic/tclIOSock.c: AI_ADDRCONFIG is broken on HP-UX
- * win/tclWinSerial.c (SerialCloseProc): correct mem leak on
- closing a Windows serial port [Bug #718002] (schroedter)
+2011-06-21 Don Porter <dgp@users.sourceforge.net>
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): prevent string repeat
- crash when overflow sizes were given (throws error). [Bug #714106]
+ * generic/tclLink.c: [Bug 3317466]: Prevent multiple links to a
+ single Tcl variable when calling Tcl_LinkVar().
-2003-05-09 Joe Mistachkin <joe@mistachkin.com>
+2011-06-13 Don Porter <dgp@users.sourceforge.net>
- * generic/tclThreadAlloc.c (TclFreeAllocCache): Fixed memory leak
- caused by treating cachePtr as a TLS index [Bug 731754].
+ * generic/tclStrToD.c: [Bug 3315098]: Mem leak fix from Gustaf
+ Neumann.
- * win/tclAppInit.c (Tcl_AppInit): Fixed memory leaks caused by not
- freeing the memory allocated by setargv and the async handler created
- by Tcl_AppInit. An exit handler has been created that takes care of
- both leaks. In addition, Tcl_AppInit now uses ckalloc instead of
- Tcl_Alloc to allow for easier leak tracking and to be more consistent
- with the rest of the Tcl core [Bugs 733156, 733221].
+2011-06-08 Andreas Kupries <andreask@activestate.com>
- * tools/encoding/txt2enc.c (main): Fixed memory leak caused by failing
- to free the memory used by the toUnicode array of strings [Bug 733221].
+ * generic/tclExecute.c: Reverted the fix for [Bug 3274728] committed
+ on 2011-04-06 and replaced with one which is 64bit-safe. The existing
+ fix crashed tclsh on Windows 64bit.
-2003-05-05 Don Porter <dgp@users.sourceforge.net>
+2011-06-08 Donal K. Fellows <dkf@users.sf.net>
- * library/tcltest/tcltest.tcl: The -returnCodes option to [test]
- failed to recognize the symbolic name "ok" for return code 0.
+ * tests/fileSystem.test: Reduce the amount of use of duplication of
+ complex code to perform common tests, and convert others to do the
+ test result check directly using Tcltest's own primitives.
-2003-05-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-06-06 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclBasic.c (Tcl_HideCommand): Fixed error message
- grammar and spelling.
+ * tests/socket.test: Add test constraint, so 6.2 and 6.3 don't fail
+ when the machine does not have support for ip6. Follow-up to checkin
+ from 2011-05-11 by rmax.
-2003-04-29 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-06-02 Don Porter <dgp@users.sourceforge.net>
- * generic/tclFileName.c: fix to bug reported privately by
- Jeff where, for example, 'glob -path {[tcl]} *' gets confused
- by the leading special character (which is escaped internally),
- and instead lists files in '/'. Bug only occurs on Windows
- where '\' is also a directory separator. (Bug has been around
- at least since Tcl 8.3).
- * tests/fileName.test: added test for the above bug.
-
-2003-04-25 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclBasic.c: Removed TclCleanupLiteralTable(), and old
+ * generic/tclInt.h: band-aid routine put in place while a fix for
+ * generic/tclLiteral.c: [Bug 994838] took shape. No longer needed.
- * generic/tclBasic.c: Tcl_EvalObjv() failed to honor the
- TCL_EVAL_GLOBAL flag when resolving command names. Tcl_EvalEx
- passed a string rep including leading whitespace and comments
- to TclEvalObjvInternal().
+2011-06-02 Donal K. Fellows <dkf@users.sf.net>
-2003-04-25 Andreas Kupries <andreask@activestate.com>
+ * generic/tclInt.h (TclInvalidateNsCmdLookup): [Bug 3185407]: Extend
+ the set of epochs that are potentially bumped when a command is
+ created, for a slight performance drop (in some circumstances) and
+ improved semantics.
- * win/tclWinThrd.c: Applied SF patch #727271. This patch changes
- the code to catch any errors returned by the windows functions
- handling TLS ASAP instead of waiting to get some mysterious
- crash later on due to bogus pointers. Patch provided by Joe
- Mistachkin.
+2011-06-01 Miguel Sofer <msofer@users.sf.net>
- This is a stop-gap measure to deal with the low number of ?TLS
- slots provided by some of the variants of Windows (60-80).
+ * generic/tclBasic.c: Using the two free data elements in NRCommand to
+ store objc and objv - useful for debugging.
-2003-04-21 Don Porter <dgp@users.sourceforge.net>
+2011-06-01 Jan Nijtmans <nijtmans@users.sf.net>
- * library/tcltest/tcltest.tcl: When the return code of a test does
- not meet expectations, report that as the reason for test failure,
- and do not attempt to check the test result for correctness.
- [Bug 725253]
+ * generic/tclUtil.c: Fix for [Bug 3309871]: Valgrind finds: invalid
+ read in TclMaxListLength().
-2003-04-18 Jeff Hobbs <jeffh@ActiveState.com>
+2011-05-31 Don Porter <dgp@users.sourceforge.net>
- * generic/tclExecute.c (ExprCallMathFunc): remove incorrect
- extraneous cast from Tcl_WideAsDouble.
+ * generic/tclInt.h: Use a complete growth algorithm for lists so
+ * generic/tclListObj.c: that length limits do not overconstrain by a
+ * generic/tclStringObj.c: factor of 2. [Bug 3293874]: Fix includes
+ * generic/tclUtil.c: rooting all growth routines by default on a
+ common tunable parameter TCL_MIN_GROWTH.
-2003-04-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-05-25 Don Porter <dgp@users.sourceforge.net>
- * doc/open.n: Moved serial port options from [fconfigure]
- * doc/fconfigure.n: to [open] as it is up to the creator of a
- channel to describe the channel's special
- config options. [Bug 679010]
+ * library/msgcat/msgcat.tcl: Bump to msgcat 1.4.4.
+ * library/msgcat/pkgIndex.tcl:
+ * unix/Makefile.in:
+ * win/Makefile.in:
-2003-04-16 Don Porter <dgp@users.sourceforge.net>
+2011-05-25 Donal K. Fellows <dkf@users.sf.net>
- * generic/tcl.h Made changes so that the "wideInt" Tcl_ObjType
- * generic/tclObj.c is defined on all platforms, even those where
- * generic/tclPort.h TCL_WIDE_INT_IS_LONG is defined. Also made
- the Tcl_Value struct have a wideValue field on all platforms. This is
- a ***POTENTIAL INCOMPATIBILITY*** for TCL_WIDE_INT_IS_LONG platforms
- because that struct changes size. This is the same TIP 72
- incompatibility that was seen on other platforms at the 8.4.0 release,
- when this change should have happened as well. [Bug 713562]
+ * generic/tclOO.h (TCLOO_VERSION): Bump version.
- * generic/tclInt.h: New internal macros TclGetWide() and
- TclGetLongFromWide() to deal with both forms of the "wideInt"
- Tcl_ObjType, so that conditional TCL_WIDE_INT_IS_LONG code
- is confined to the header file.
+ IMPLEMENTATION OF TIP#381.
- * generic/tclCmdAH.c: Replaced most coding that was conditional
- * generic/tclCmdIL.c: on TCL_WIDE_INT_IS_LONG with code that
- * generic/tclExecute.c: works across platforms, sometimes using
- * generic/tclTest.c: the new macros above to do it.
- * generic/tclUtil.c:
- * generic/tclVar.c:
-
-2003-04-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/socket.n: Added a paragraph to remind people to specify
- their encodings when using sockets. [Bug 630621]
-
-2003-04-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/CrtMathFnc.3: Functions also have to deal with wide ints,
- but this was not documented. [Bug 709720]
-
-2003-04-15 Kevin Kenny <kennykb@acm.org>
-
- * win/tclWinTime.c: Corrected use of types to make compilation
- compatible with VC++5.
-
-2003-04-14 Kevin Kenny <kennykb@acm.org>
-
- * win/tclWinFile.c: added conditionals to restore compilation on
- VC++6, which was broken by recent changes.
-
-2003-04-14 Vince Darley <vincentdarley@users.sourceforge.net>
-
- Merged various bug fixes from current cvs head:
-
- * tests/cmdAH.test: better fix to test suite problem
- if /home is a symlink [Bug #703264]
-
- * generic/tclIOUtil.c: fix bad error message with 'cd ""'
- [Bug #704917]
- * win/tclWinFile.c:
- * win/tclWin32Dll.c:
- * win/tclWinInt.h: allow Tcl to differentiate between reparse
- points which are symlinks and mounted volumes, and correctly
- handle the latter. This involves some elaborate code to find
- the actual drive letter (if possible) corresponding to a mounted
- volume. [Bug #697862]
- * tests/fileSystem.test: add constraints to stop tests running
- in ordinary tcl interpreter. [Bug #705675]
- * generic/tclIOUtil.c: Some re-arrangement of code to bring it
- closer to cvs head. No functional changes.
-
- * tests/fCmd.test:
- * win/tclWinFile.c: added some filesystem optimisation to the
- 'glob' implementation, and some new tests.
-
- * tests/winFile.test:
- * tests/ioUtil.test:
- * tests/unixFCmd.test: renumbered tests with duplicate numbers.
- (Bug #710361)
-
-2003-04-12 Kevin Kenny <kennykb@acm.org>
-
- * tests/clock.test: Renumbered test cases to avoid
- duplicates [Bug 710310].
- * tests/winTime.test:
- * win/tclWinTest.c (TestwinclockCmd, TestwinsleepCmd):
- * win/tclWinTime.c (Tcl_WinTime, UpdateTimeEachSecond,
- ResetCounterSamples, AccumulateSample,
- SAMPLES, TimeInfo): Made substantial changes
- to the phase-locked loop (replaced an IIR filter with an FIR one)
- in a quest for improved loop stability (Bug not logged at SF, but
- cited in private communication from Jeff Hobbs).
-
-2003-04-11 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclCmdMZ.c (Tcl_StringObjCmd,STR_IS_INT): Corrected
- inconsistent results of [string is integer] observed on systems
- where sizeof(long) != sizeof(int). [Bug 718878]
- * tests/string.test: Added tests for Bug 718878.
- * doc/string.n: Clarified that [string is integer] accepts
- 32-bit integers.
-
-2003-04-11 Andreas Kupries <andreask@activestate.com>
-
- * generic/tclIO.c (UpdateInterest): When dropping interest in
- TCL_READABLE now dropping interest in TCL_EXCEPTION too. This
- fixes a bug where Expect detects eof on a file prematurely on
- solaris 2.6 and higher. A much more complete explanation is in
- the code itself (40 lines of comments for a one-line change :)
-
-2003-04-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/binary.n: Fixed typo in [binary format w] desc. [Bug 718543]
-
-2003-04-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * generic/tclCmdAH.c (Tcl_ErrorObjCmd): Strings are only empty if
- they have zero length, not if their first byte is zero, so fix
- test guarding Tcl_AddObjErrorInfo to take this into account. [Bug
- reported by Don Porter; no bug-id.]
-
-2003-04-07 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclCompCmds.c (TclCompileIfCmd): Corrected string limits of
- arguments interpolated in error messages. [Bug 711371]
-
- * generic/tclCmdMZ.c (TraceExecutionProc): Added missing
- Tcl_DiscardResult() call to avoid memory leak.
-
-2003-04-07 Donal K. Fellows <zzcgudf@ernie.mvc.mcc.ac.uk>
-
- * generic/tclObj.c (tclWideIntType, TclInitObjSubsystem):
- (SetBooleanFromAny): Make sure that tclWideIntType is defined and
- somewhat sensible everywhere. [Bug 713562]
-
-2003-04-02 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/configure.in: Set stub lib flag based
- on new LIBFLAGSUFFIX variable.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Set new
- LIBFLAGSUFFIX that works like LIBSUFFIX,
- it is used when creating library names.
- The previous implementation would generate
- -ltclstub85 instead of -ltclstub85s when
- configured with --disable-shared.
-
-2003-04-01 Don Porter <dgp@users.sourceforge.net>
-
- * tests/README: Direct [source] of *.test files is no longer
- recommended. The tests/*.test files should only be evaluated under
- the control of the [runAllTests] command in tests/all.tcl.
-
-2003-03-27 Miguel Sofer <msofer@users.sf.net>
-
- * tests/encoding.test:
- * tests/proc-old.test:
- * tests/set-old.test: Altered test numers to eliminate duplicates,
- [Bugs 710313, 710320, 710352]
-
-2003-03-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * tests/parseOld.test: Altered test numers to eliminate duplicates.
- * tests/parse.test: [Bugs 710365, 710369]
- * tests/expr-old.test:
- * tests/expr.test:
+ * doc/next.n, doc/ooInfo.n, doc/self.n, generic/tclOO.c,
+ * generic/tclOOBasic.c, generic/tclOOCall.c, generic/tclOOInfo.c,
+ * generic/tclOOInt.h, tests/oo.test, tests/ooNext2.test: Added
+ introspection of call chains ([self call], [info object call], [info
+ class call]) and ability to skip ahead in chain ([nextto]).
+
+2011-05-24 Venkat Iyer <venkat@comit.com>
+
+ * library/tzdata/Africa/Cairo: Update to Olson tzdata2011g
+
+2011-05-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/msgcat/msgcat.tcl (msgcat::mcset, msgcat::mcmset): Remove
+ some useless code; [dict set] builds dictionary levels for us.
+
+2011-05-17 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclCompile.c (TclFixupForwardJump): Tracked down and fixed
+ * generic/tclBasic.c (TclArgumentBCEnter): the cause of a violation of
+ my assertion that 'ePtr->nline == objc' in TclArgumentBCEnter. When a
+ bytecode was grown during jump fixup the pc -> command line mapping
+ was not updated. When things aligned just wrong the mapping would
+ direct command A to the data for command B, with a different number of
+ arguments.
+
+2011-05-11 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixSock.c (TcpWatchProc): No need to check for server
+ sockets here, as the generic server code already takes care of that.
+ * tests/socket.test (accept): Add tests to make sure that this remains
+ so.
+
+2011-05-10 Don Porter <dgp@users.sourceforge.net>
- * tests/utf.test: Altered test numers to eliminate duplicates.
- * tests/trace.test: [Bugs 710322, 710327, 710349, 710363]
- * tests/lsearch.test:
+ * generic/tclInt.h: New internal routines TclScanElement() and
+ * generic/tclUtil.c: TclConvertElement() are rewritten guts of
+ machinery to produce string rep of lists. The new routines avoid and
+ correct [Bug 3173086]. See comments for much more detail.
+
+ * generic/tclDictObj.c: Update all callers.
+ * generic/tclIndexObj.c:
+ * generic/tclListObj.c:
+ * generic/tclUtil.c:
* tests/list.test:
- * tests/info.test:
- * tests/incr-old.test:
- * tests/if-old.test:
- * tests/format.test:
- * tests/foreach.test:
-2003-03-26 Don Porter <dgp@users.sourceforge.net>
+2011-05-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclNamesp.c (NamespacePathCmd): Convert to use Tcl_Obj API
+ * generic/tclPkg.c (Tcl_PackageObjCmd): for result generation in
+ * generic/tclTimer.c (Tcl_AfterObjCmd): [after info], [namespace
+ path] and [package versions].
+
+2011-05-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclListObj.c: Revise empty string tests so that we avoid
+ potentially expensive string rep generations, especially for dicts.
+
+2011-05-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclLoad.c (TclGetLoadedPackages): Convert to use Tcl_Obj API
+ for result generation.
+
+2011-05-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h: Fix USE_TCLALLOC so that it can be enabled without
+ * unix/Makefile.in: editing the Makefile.
+
+2011-05-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclListObj.c: Stop generating string rep of dict when
+ converting to list. Tolerate NULL interps more completely.
- * doc/tcltest.n:
- * library/tcltest/tcltest.tcl: Added reporting during
- [configure -debug 1] operations to warn about multiple uses of
- the same test name. [FR 576693] Replaced [regexp] and [regsub]
- with [string map] where possible. Thanks to David Welton.
- [Bugs 667456,667558]
- * library/tcltest/pkgIndex.tcl: Bumped to tcltest 2.2.3
+2011-05-03 Don Porter <dgp@users.sourceforge.net>
- * tests/msgcat.test (msgcat-2.2.1): changed test name to avoid
- duplication. [Bug 710356]
+ * generic/tclUtil.c: Tighten Tcl_SplitList().
+ * generic/tclListObj.c: Tighten SetListFromAny().
+ * generic/tclDictObj.c: Tighten SetDictFromAny().
+ * tests/join.test:
+ * tests/mathop.test:
+
+2011-05-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: Revised TclFindElement() interface. The final
+ * generic/tclDictObj.c: argument had been bracePtr, the address of a
+ * generic/tclListObj.c: boolean var, where the caller can be told
+ * generic/tclParse.c: whether or not the parsed list element was
+ * generic/tclUtil.c: enclosed in braces. In practice, no callers
+ really care about that. What the callers really want to know is
+ whether the list element value exists as a literal substring of the
+ string being parsed, or whether a call to TclCopyAndCollpase() is
+ needed to produce the list element value. Now the final argument is
+ changed to do what callers actually need. This is a better fit for the
+ calls in tclParse.c, where now a good deal of post-processing checking
+ for "naked backslashes" is no longer necessary.
+ ***POTENTIAL INCOMPATIBILITY***
+ For any callers calling in via the internal stubs table who really do
+ use the final argument explicitly to check for the enclosing brace
+ scenario. Simply looking for the braces where they must be is the
+ revision available to those callers, and it will backport cleanly.
+
+ * tests/parse.test: Tests for expanded literals quoting detection.
+
+ * generic/tclCompCmdsSZ.c: New TclFindElement() is also a better
+ fit for the [switch] compiler.
+
+ * generic/tclInt.h: Replace TclCountSpaceRuns() with
+ * generic/tclListObj.c: TclMaxListLength() which is the function we
+ * generic/tclUtil.c: actually want.
+ * generic/tclCompCmdsSZ.c:
+
+ * generic/tclCompCmdsSZ.c: Rewrite of parts of the switch compiler to
+ better use the powers of TclFindElement() and do less parsing on its
+ own.
+
+2011-04-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: New utility routines:
+ * generic/tclParse.c: TclIsSpaceProc() and TclCountSpaceRuns()
+ * generic/tclUtil.c:
+
+ * generic/tclCmdMZ.c: Use new routines to replace calls to isspace()
+ * generic/tclListObj.c: and their /* INTL */ risk.
+ * generic/tclStrToD.c:
+ * generic/tclUtf.c:
+ * unix/tclUnixFile.c:
- * unix/dltest/pkg?.c: Changed all Tcl_InitStubs calls to pass
- argument exact = 0, so that rebuilds are not required when Tcl
- bumps to a new version. [Bug 701926]
+ * generic/tclStringObj.c: Improved reaction to out of memory.
-2003-03-24 Miguel Sofer <msofer@users.sf.net>
+2011-04-27 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCmdMZ.c: TclFreeIntRep() correction & cleanup.
+ * generic/tclExecute.c:
+ * generic/tclIndexObj.c:
+ * generic/tclInt.h:
+ * generic/tclListObj.c:
+ * generic/tclNamesp.c:
+ * generic/tclResult.c:
+ * generic/tclStringObj.c:
* generic/tclVar.c:
- * tests/var.test: fixing ObjMakeUpvar's lookup algorithm for the
- created local variable, bugs #631741 (Chris Darroch) and #696893
- (David Hilker).
-
-2003-03-22 Kevin Kenny <kennykb@acm.org>
-
- * library/dde/pkgIndex.tcl:
- * library/reg/pkgIndex.tcl: Fixed a bug where [package require dde]
- or [package require registry] attempted to load the release version
- of the DLL into a debug build. [Bug 708218] Thanks to Joe Mistachkin
- for the patch.
- * win/makefile.vc: Added quoting around the script name in the
- 'test' target; Joe Mistachkin insists that he has a configuration
- that fails to launch tcltest without it, and it appears harmless
- otherwise.
-
-2003-03-20 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclInt.h (tclOriginalNotifier):
- * generic/tclStubInit.c (tclOriginalNotifier):
- * mac/tclMacNotify.c (Tcl_SetTimer,Tcl_WaitForEvent):
- * unix/tclUnixNotfy.c (Tcl_SetTimer,Tcl_WaitForEvent,
- Tcl_CreateFileHandler,Tcl_DeleteFileHandler):
- * win/tclWinNotify.c (Tcl_SetTimer,Tcl_WaitForEvent): Some linkers
- apparently use a different representation for a pointer to a function
- within the same compilation unit and a pointer to a function in a
- different compilation unit. This causes checks like those in the
- original notifier procedures to fall into infinite loops. The fix
- is to store pointers to the original notifier procedures in a struct
- defined in the same compilation unit as the stubs tables, and compare
- against those values. [Bug 707174]
-
- * generic/tclInt.h: Removed definition of ParseValue struct that
- is no longer used.
-
-2003-03-19 Miguel Sofer <msofer@users.sf.net>
- * generic/tclCompile.c:
- * tests/compile.test: bad command count on TCL_OUT_LINE_COMPILE
- [Bug 705406] (Don Porter).
+ * generic/tclListObj.c: FreeListInternalRep() cleanup.
-2003-03-19 Don Porter <dgp@users.sourceforge.net>
+2011-04-21 Don Porter <dgp@users.sourceforge.net>
- * doc/Eval.3 (Tcl_EvalObjEx): Corrected CONST and
- * doc/ParseCmd.3 (Tcl_EvalTokensStandard): return type errors
- in documentation. [Bug 683994]
+ * generic/tclInt.h: Use macro to set List intreps.
+ * generic/tclListObj.c:
-2003-03-18 Kevin Kenny <kennykb@users.sourceforge.net>
+ * generic/tclCmdIL.c: Limits on list length were too strict.
+ * generic/tclInt.h: Revised panics to errors where possible.
+ * generic/tclListObj.c:
+ * tests/lrepeat.test:
- * tests/registry.test: Changed the conditionals to avoid an
- abort if [testlocale] is missing, as when running the test in
- tclsh rather than tcltest. [Bug #705677]
-
-2003-03-18 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclCompile.c: Make sure SetFooFromAny routines react
+ * generic/tclIO.c: reasonably when passed a NULL interp.
+ * generic/tclIndexObj.c:
+ * generic/tclListObj.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * macosx/tclMacOSXFCmd.c:
- * tools/tcltk-man2html.tcl: added support for building 'make html'
- from inside distribution directories named with 8.x.x version
- numbers. tcltk-man2html now uses the latest tcl8.x.x resp. tk8.x.x
- directories found inside its --srcdir argument.
+2011-04-21 Jan Nijtmans <nijtmans@users.sf.net>
-2003-03-18 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tcl.h: fix for [Bug 3288345]: Wrong Tcl_StatBuf
+ * generic/tclInt.h: used on MinGW. Make sure that all _WIN32
+ * win/tclWinFile.c: compilers use exactly the same layout
+ * win/configure.in: for Tcl_StatBuf - the one used by MSVC6 -
+ * win/configure: in all situations.
- * tests/cmdAH.test: fix test suite problem if /home is a symlink
- * generic/tclIOUtil.c: fix bad error message with 'cd ""'
- * win/tclWinFile.c: allow Tcl to differentiate between reparse
- points which are symlinks and mounted drives.
-
- These changes fix [Bug #703264], [Bug #704917], [Bug #697862]
- respectively.
+2011-04-19 Don Porter <dgp@users.sourceforge.net>
-2003-03-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclConfig.c: Reduce internals access in the implementation
+ of [<foo>::pkgconfig list].
- * doc/lsearch.n: Altered documentation of -ascii options so
- * doc/lsort.n: they don't specify that they operate on
- ASCII strings, which they never did
- anyway. [Bug #703807]
+2011-04-18 Don Porter <dgp@users.sourceforge.net>
-2003-03-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclCmdIL.c: Use ListRepPtr(.) and other cleanup.
+ * generic/tclConfig.c:
+ * generic/tclListObj.c:
- * generic/tclCmdAH.c (Tcl_FileObjCmd): Remove assumption that file
- times and longs are the same size. [Bug #698146]
- (Tcl_FormatObjCmd): Stop surprising type conversions from
- happening when working with integer and wide values. [Bug #699060]
+ * generic/tclInt.h: Define and use macros that test whether a Tcl
+ * generic/tclBasic.c: list value is canonical.
+ * generic/tclUtil.c:
- * generic/tclCmdAH.c (Tcl_FormatObjCmd): Only add the modifier
- that indicates we've got a wide int when we're formatting in an
- integer style. Stops some libc's from going mad. [Bug #702622]
- Also tidied whitespace.
+2011-04-18 Donal K. Fellows <dkf@users.sf.net>
-2003-03-13 Kevin Kenny <kennykb@users.sourceforge.net>
+ * doc/dict.n: [Bug 3288696]: Command summary was confusingly wrong
+ when it came to [dict filter] with a 'value' filter.
- * win/makefile.vc: Backed the version to 8.4 on the 8.4 branch.
- (I just loathe sticky tags).
-
-2003-03-12 Don Porter <dgp@users.sourceforge.net>
+2011-04-16 Donal K. Fellows <dkf@users.sf.net>
- * generic/tcl.h: Removed TCL_PREFIX_IDENT and TCL_DEBUG_IDENT
- * win/tclWinPipe.c: from tcl.h -- they are not part of Tcl's
- public interface. Put them in win/tclWinPipe.c where they are used.
+ * generic/tclFCmd.c (TclFileAttrsCmd): Add comments to make this code
+ easier to understand. Added a panic to handle the case where the VFS
+ layer does something odd.
- * generic/tclCmdMZ.c (Tcl_SubstObj): Corrected and added test for
- * tests/subst.test (subst-2.4): Tcl_SubstObj's incorrect
- halting of substitution at the first \x00 byte. [Bug 685106]
+2011-04-13 Don Porter <dgp@users.sourceforge.net>
- * generic/tclInterp.c (Tcl_InterpObjCmd): Corrected and added
- * tests/interp.test (interp-2.13): test for option
- parsing beyond objc for [interp create --]. Thanks to Marco Maggi.
- [Bug 702383]
+ * generic/tclUtil.c: [Bug 3285375]: Rewrite of Tcl_Concat*()
+ routines to prevent segfaults on buffer overflow. Build them out of
+ existing primitives already coded to handle overflow properly. Uses
+ the new TclTrim*() routines.
-2003-03-11 Kevin Kenny <kennykb@users.sourceforge.net>
+ * generic/tclCmdMZ.c: New internal utility routines TclTrimLeft()
+ * generic/tclInt.h: and TclTrimRight(). Refactor the
+ * generic/tclUtil.c: [string trim*] implementations to use them.
- * win/makefile.vc: Added two missing uses of $(DBGX) so that
- tclpip8x.dll loads without panicking on Win9x.
+2011-04-13 Miguel Sofer <msofer@users.sf.net>
-2003-03-08 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclVar.c: [Bug 2662380]: Fix crash caused by appending to a
+ variable with a write trace that unsets it.
- * doc/tcltest.n: Added missing "-body" to example. Thanks to
- Helmut Giese. [Bug 700011]
+2011-04-13 Donal K. Fellows <dkf@users.sf.net>
-2003-03-06 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclUtil.c (Tcl_ConcatObj): [Bug 3285375]: Make the crash
+ less mysterious through the judicious use of a panic. Not yet properly
+ fixed, but at least now clearer what the failure mode is.
- * generic/TclUtf.c (Tcl_UniCharNcasecmp): Corrected failure to
- * tests/utf.test (utf-25.*): properly compare Unicode strings of
- different case in a case insensitive manner. [Bug 699042]
+2011-04-12 Don Porter <dgp@users.sourceforge.net>
-2003-03-03 Jeff Hobbs <jeffh@ActiveState.com>
+ * tests/string.test: Test for [Bug 3285472]. Not buggy in trunk.
- *** 8.4.2 TAGGED FOR RELEASE ***
+2011-04-12 Venkat Iyer <venkat@comit.com>
-2003-03-03 Daniel Steffen <das@users.sourceforge.net>
+ * library/tzdata/Atlantic/Stanley: Update to Olson tzdata2011f
- Mac OS Classic specific fixes:
- * generic/tclIOUtil.c (TclNewFSPathObj): on TCL_PLATFORM_MAC,
- skip potential directory separator at the beginning of addStrRep.
- * mac/tclMacChan.c (OpenFileChannel, CommonWatch): followup
- fixes to cut and splice implementation for file channels.
- * mac/tclMacFile.c (TclpUtime): pass native path to utime().
- * mac/tclMacFile.c (TclpObjLink): correctly implemented creation
- of alias files via new static proc CreateAliasFile().
- * mac/tclMacPort.h: define S_ISLNK macro to fix stat'ing of links.
- * mac/tclMacUtil.c (FSpLocationFromPathAlias): fix to enable
- stat'ing of broken links.
+2011-04-12 Miguel Sofer <msofer@users.sf.net>
-2003-03-03 Kevin Kenny <kennykb@users.sourceforge.net>
+ * generic/tclBasic.c: Fix for [Bug 2440625], kbk's patch
- * win/Makefile.vc: corrected bug introduced by 'g' for debug builds.
-
-2003-03-03 Don Porter <dgp@users.sourceforge.net>
+2011-04-11 Miguel Sofer <msofer@users.sf.net>
- * library/dde/pkgIndex.tcl: dde bumped to version 1.2.1 for
- * win/tclWinDde.c: bundled release with Tcl 8.4.2
+ * generic/tclBasic.c:
+ * tests/coroutine.test: [Bug 3282869]: Ensure that 'coroutine eval'
+ runs the initial command in the proper context.
- * library/reg/pkgIndex.tcl: registry bumped to version 1.1.1 for
- * win/tclWinReg.c: bundled release with Tcl 8.4.2
+2011-04-11 Jan Nijtmans <nijtmans@users.sf.net>
- * library/opt/pkgIndex.tcl: updated package index to version 0.4.4
+ * generic/tcl.h: Fix for [Bug 3281728]: Tcl sources from 2011-04-06
+ * unix/tcl.m4: do not build on GCC9 (RH9)
+ * unix/configure:
-2003-02-28 Jeff Hobbs <jeffh@ActiveState.com>
+2011-04-08 Jan Nijtmans <nijtmans@users.sf.net>
- * win/configure:
- * win/configure.in: check for 'g' for debug build type, not 'd'.
- * win/rules.vc (DBGX): correct to use 'g' for nmake win makefile
- to match the cygwin makefile for debug builds. [Bug #635107]
+ * win/tclWinPort.h: Fix for [Bug 3280043]: win2k: unresolved DLL
+ * win/configure.in: imports.
+ * win/configure
-2003-02-28 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-04-06 Miguel Sofer <msofer@users.sf.net>
- * doc/file.n: subcommand is 'file volumes' not 'file volume'
+ * generic/tclExecute.c (TclCompileObj): Earlier return if Tip280
+ gymnastics not needed.
-2003-02-27 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclExecute.c: Fix for [Bug 3274728]: making *catchTop an
+ unsigned long.
- * generic/tclIOUtil.c (MakeFsPathFromRelative): removed dead code
- check of typePtr (darley).
+2011-04-06 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/winTime.test: added note about PCI hardware dependency
- issues with high performance clock.
+ * unix/tclAppInit.c: Make symbols "main" and "Tcl_AppInit"
+ MODULE_SCOPE: there is absolutely no reason for exporting them.
+ * unix/tcl.m4: Don't use -fvisibility=hidden with static
+ * unix/configure libraries (--disable-shared)
-2003-02-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-04-06 Donal K. Fellows <dkf@users.sf.net>
- * tests/lsearch.test (lsearch-10.7):
- * generic/tclCmdIL.c (Tcl_LsearchObjCmd): Stopped -start option
- from causing an option when used with an empty list. [Bug #694232]
+ * generic/tclFCmd.c, macosx/tclMacOSXFCmd.c, unix/tclUnixChan.c,
+ * unix/tclUnixFCmd.c, win/tclWinChan.c, win/tclWinDde.c,
+ * win/tclWinFCmd.c, win/tclWinLoad.c, win/tclWinPipe.c,
+ * win/tclWinReg.c, win/tclWinSerial.c, win/tclWinSock.c: More
+ generation of error codes (most platform-specific parts not already
+ using Tcl_PosixError).
-2003-02-26 Chengye Mao <chengye.geo@yahoo.com>
+2011-04-05 Venkat Iyer <venkat@comit.com>
- * win/tclWinInit.c: fixed a bug in TclpSetVariables by initializing
- dwUserNameLen with the sizeof(szUserName) before calling GetUserName.
- Don't know if this bug has been recorded: it caused crash in starting
- Tcl or wish in Windows.
+ * library/tzdata/Africa/Casablanca: Update to Olson's tzdata2011e
+ * library/tzdata/America/Santiago:
+ * library/tzdata/Pacific/Easter:
+ * library/tzdata/America/Metlakatla: (new)
+ * library/tzdata/America/North_Dakota/Beulah: (new)
+ * library/tzdata/America/Sitka: (new)
-2003-02-26 Jeff Hobbs <jeffh@ActiveState.com>
+2011-04-04 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclCmdMZ.c (TraceCommandProc): Fix mem leak when
- deleting a command that had trace on it. [Bug #693564] (sofer)
+ * generic/tclOO.c, generic/tclOOBasic.c, generic/tclOODefineCmds.c
+ * generic/tclOOInfo.c, generic/tclOOMethod.c: More generation of
+ error codes (TclOO miscellany).
-2003-02-25 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCmdAH.c, generic/tclCmdIL.c: More generation of error
+ codes (miscellaneous commands mostly already handled).
- * doc/pkgMkIndex.n: Modified [pkg_mkIndex] to use -nocase matching
- * library/package.tcl: of -load patterns, to better accomodate
- common user errors due to confusion between [package names] names
- and [info loaded] names.
+2011-04-04 Don Porter <dgp@users.sourceforge.net>
-2003-02-25 Andreas Kupries <andreask@activestate.com>
+ * README: [Bug 3202030]: Updated README files, repairing broken
+ * macosx/README:URLs and removing other bits that were clearly wrong.
+ * unix/README: Still could use more eyeballs on the detailed build
+ * win/README: advice on various plaforms.
- * tests/pid.test: See below [Bug #678412].
- * tests/io.test: Made more robust against spaces in paths
- [Bug #678400].
+2011-04-04 Donal K. Fellows <dkf@users.sf.net>
-2003-02-25 Miguel Sofer <msofer@users.sf.net>
+ * library/init.tcl (tcl::mathfunc::rmmadwiw): Disable by default to
+ make test suite work.
- * tests/execute.test: cleaning up testobj's at the end, to avoid
- leak warning by valgrind.
+ * generic/tclBasic.c, generic/tclStringObj.c, generic/tclTimer.c,
+ * generic/tclTrace.c, generic/tclUtil.c: More generation of error
+ codes ([format], [after], [trace], RE optimizer).
-2003-02-22 Zoran Vasiljevic <zoran@archiwrae.com>
+2011-04-04 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclEvent.c (Tcl_FinalizeThread): Fix [Bug #571002]
+ * generic/tclCmdAH.c: Better error-message in case of errors
+ * generic/tclCmdIL.c: related to setting a variable. This fixes
+ * generic/tclDictObj.c: a warning: "Why make your own error
+ * generic/tclScan.c: message? Why?"
+ * generic/tclTest.c:
+ * test/error.test:
+ * test/info.test:
+ * test/scan.test:
+ * unix/tclUnixThrd.h: Remove this unused header file.
-2003-02-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-04-03 Donal K. Fellows <dkf@users.sf.net>
- * tests/binary.test (binary-44.[34]):
- * generic/tclBinary.c (ScanNumber): Fixed problem with unwanted
- sign-bit propagation when scanning wide ints. [Bug #690774]
+ * generic/tclNamesp.c, generic/tclObj.c, generic/tclPathObj.c:
+ * generic/tclPipe.c, generic/tclPkg.c, generic/tclProc.c:
+ * generic/tclScan.c: More generation of error codes (namespace
+ creation, path normalization, pipeline creation, package handling,
+ procedures, [scan] formats)
-2003-02-21 Daniel Steffen <das@users.sourceforge.net>
+2011-04-02 Kevin B. Kenny <kennykb@acm.org>
- * mac/tclMacChan.c (TclpCutFileChannel, TclpSpliceFileChannel):
- Implemented missing cut and splice procs for file channels.
+ * generic/tclStrToD.c (QuickConversion): Replaced another couple
+ of 'double' declarations with 'volatile double' to work around
+ misrounding issues in mingw-gcc 3.4.5.
-2003-02-21 Don Porter <dgp@users.sourceforge.net>
+2011-04-02 Donal K. Fellows <dkf@users.sf.net>
- * library/package.tcl (tclPkgUnknown): Minor performance tweaks
- to reduce the number of [file] invocations. Meant to improve
- startup times, at least a little bit. [Patch 687906]
+ * generic/tclInterp.c, generic/tclListObj.c, generic/tclLoad.c:
+ More generation of errorCodes ([interp], [lset], [load], [unload]).
-2003-02-20 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclEvent.c, generic/tclFileName.c: More generation of
+ errorCode information (default [bgerror] and [glob]).
- * unix/tcl.m4:
- * unix/tclUnixPipe.c: (macosx) use vfork() instead of fork() to
- create new processes, as recommended by Apple (vfork can be up to
- 100 times faster thank fork on macosx).
- * unix/configure: regen.
+2011-04-01 Reinhard Max <max@suse.de>
-2003-02-20 Jeff Hobbs <jeffh@ActiveState.com>
+ * library/init.tcl: TIP#131 implementation.
- * generic/tclEncoding.c (LoadTableEncoding):
- * library/encoding/cp932.enc: Correct jis round-trip encoding
- * library/encoding/euc-jp.enc: by adding 'R' type to .enc files.
- * library/encoding/iso2022-jp.enc: [Patch #689341] (koboyasi, taguchi)
- * library/encoding/jis0208.enc:
- * library/encoding/shiftjis.enc:
- * tests/encoding.test:
+2011-03-31 Donal K. Fellows <dkf@users.sf.net>
- * unix/tclUnixChan.c (Tcl_MakeTcpClientChannel): add
- MakeTcpClientChannelMode that takes actual mode flags to avoid
- hang on OS X (may be OS X bug, but patch works x-plat).
- [Bug #689835] (steffen)
+ * generic/tclGetDate.y, generic/tclDate.c (TclClockOldscanObjCmd):
+ More generation of errorCode information.
-2003-02-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-03-28 Donal K. Fellows <dkf@users.sf.net>
- * doc/regsub.n: Typo fix [Bug #688943]
+ * generic/tclCmdMZ.c, generic/tclConfig.c, generic/tclUtil.c: More
+ generation of errorCode information, notably when lists are mis-parsed
-2003-02-19 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd): Use the
+ error messages generated by the variable management code rather than
+ creating our own.
- * unix/tclUnixThrd.c (TclpReaddir):
- * unix/tclUnixPort.h: update to Bug 689100 patch to ensure that
- there is a defined value of MAXNAMLEN (aka NAME_MAX in POSIX) and
- that we have some buffer allocated.
+2011-03-27 Miguel Sofer <msofer@users.sf.net>
-2003-02-19 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclBasic.c (TclNREvalObjEx): fix performance issue, notably
+ apparent in tclbench's "LIST lset foreach". Many thanks to Twylite for
+ patiently researching the issue and explaining it to me: a missing
+ Tcl_ResetObjResult that causes unwanted sharing of the current result
+ Tcl_Obj.
- * generic/tclStringObj.c: restored Tcl_SetObjLength() side-effect
- of always invalidating unicode rep (if the obj has a string rep).
- Added hasUnicode flag to String struct, allows decoupling of
- validity of unicode rep from buffer size allocated to it (improves
- memory allocation efficiency). [Bugs #686782, #671138, #635200]
+2011-03-26 Donal K. Fellows <dkf@users.sf.net>
- * macosx/Tcl.pbproj/project.pbxproj:
- * macosx/Makefile: reworked embedded build to no longer require
- relinking but to use install_name_tool instead to change the
- install_names for embedded frameworks. [Bug #644510]
+ * generic/tclNamesp.c (Tcl_Export, Tcl_Import, DoImport): More
+ generation of errorCode information.
- * macosx/Tcl.pbproj/project.pbxproj: preserve mod dates when
- running 'make install' to build framework (avoids bogus rebuilds
- of dependent frameworks because tcl headers appear changed).
-
- * tests/ioCmd.test (iocmd-1.8): fix failure when system encoding
- is utf-8: use iso8859-1 encoding explicitly.
+ * generic/tclCompExpr.c, generic/tclCompile.c, generic/tclExecute.c:
+ * generic/tclListObj.c, generic/tclNamesp.c, generic/tclObj.c:
+ * generic/tclStringObj.c, generic/tclUtil.c: Reduce the number of
+ casts used to manage Tcl_Obj internal representations.
-2003-02-18 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclCompile.c (TclCompileExprWords): remove unused
- variable "range" [Bug 664743]
- * generic/tclExecute.c (ExprSrandFunc): remove unused
- variable "result" [Bug 664743]
- * generic/tclStringObj.c (UpdateStringOfString): remove unused
- variable "length" [Bug 664751]
- * tests/execute.test (execute-7.30): fix for [Bug 664775]
-
-2003-02-18 Andreas Kupries <andreask@activestate.com>
-
- * unix/tcl.m4: [Bug #651811] Added definition of _XOPEN_SOURCE and
- linkage of 'xnet' library to HP 11 branch. This kills a lot of
- socket-related failures in the testsuite when Tcl was compiled
- in 64 bit mode (both PA-RISC 2.0W, and IA 64).
-
- * unix/configure: Regenerated.
-
-2003-02-18 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclIO.c (HaveVersion): correctly decl static
-
- * unix/tclUnixThrd.c (TclpReaddir): reduce size of name string in
- tsd to NAME_MAX instead of PATH_MAX. [Bug #689100] (waters)
-
-2003-02-18 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/configure: Regen.
- * unix/tcl.m4 (SC_ENABLE_THREADS): Make sure
- -lpthread gets passed on the link line when
- checking for the pthread_attr_setstacksize symbol.
-
-2003-02-18 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclTest.c: cleanup of new 'simplefs' test code, and
- better documentation.
-
-2003-02-17 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclBasic.c (TclRenameCommand): fixing error in previous
- commit.
-
-2003-02-17 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclExecute.c (TclExecuteByteCode INST_STR_MATCH):
- * generic/tclCmdMZ.c (Tcl_StringObjCmd STR_MATCH):
- * generic/tclUtf.c (TclUniCharMatch):
- * generic/tclInt.decls: add private TclUniCharMatch function that
- * generic/tclIntDecls.h: does string match on counted unicode
- * generic/tclStubInit.c: strings. Tcl_UniCharCaseMatch has the
- * tests/string.test: failing that it can't handle strings or
- * tests/stringComp.test: patterns with embedded NULLs. Added
- tests that actually try strings/pats with NULLs. TclUniCharMatch
- should be TIPed and made public in the next minor version rev.
+2011-03-24 Don Porter <dgp@users.sourceforge.net>
-2003-02-17 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclBasic.c (TclRenameCommand): 'oldFullName' object was
- not being freed on all function exits, causing a memory leak
- [Bug 684756]
-
-2003-02-17 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tcl.h (ckfree,etc.): Restored C++ usability to the memory
+ allocation and free macros.
- * generic/tclIO.c (Tcl_GetsObj): Minor change
- so that eol is only assigned at the top of the
- TCL_TRANSLATE_AUTO case block. The other cases
- assign eol so this does not change any functionality.
+2011-03-24 Donal K. Fellows <dkf@users.sf.net>
-2003-02-17 Kevin Kenny <kennykb@users.sourceforge.net>
+ * generic/tclFCmd.c (TclFileAttrsCmd): Ensure that any reference to
+ temporary index tables is squelched immediately rather than hanging
+ around to trip us up in the future.
- * tests/notify.test: Removed Windows line terminators. [Bug 687913].
-
-2003-02-15 Miguel Sofer <msofer@users.sf.net>
-
- * generic/tclBasic.c (Tcl_EvalEx):
- * generic/tclCompExpr.c (CompileSubExpr):
- * generic/tclCompile.c (TclCompileScript):
- * generic/tclParse.c (Tcl_ParseCommand, ParseTokens):
- * generic/tclParseExpr.c (ParsePrimaryExpr):
- * tests/basic.test (47.1):
- * tests/main.test (3.4):
- * tests/misc.test (1.2):
- * tests/parse.test (6.18):
- * tests/parseExpr.test (15.35):
- * tests/subst.test (8.6): Don Porter's fix for bad parsing of
- nested scripts [Bug 681841].
+2011-03-23 Miguel Sofer <msofer@users.sf.net>
-2003-02-15 Kevin Kenny <kennykb@users.sourceforge.net>
-
- * tests/notify.test (new-file):
- * generic/tclTest.c (TclTest_Init, EventtestObjCmd, EventtestProc,
- EventTestDeleteProc):
- * generic/tclNotify.c (Tcl_DeleteEvents): Fixed Tcl_DeleteEvents
- not to get a pointer smash when deleting the last event in the
- queue. Added test code in 'tcltest' and a new file of test cases
- 'notify.test' to exercise this functionality; several of the new
- test cases fail for the original code and pass for the corrected
- code. [Bug 673714]
+ * generic/tclObj.c: Exploit HAVE_FAST_TSD for the deletion context in
+ TclFreeObj()
- * unix/tclUnixTest.c (TestfilehandlerCmd): Corrected a couple
- of typos in error messages. [Bug 596027]
-
-2003-02-14 Jeff Hobbs <jeffh@ActiveState.com>
-
- * README: Bumped to version 8.4.2.
- * generic/tcl.h:
- * tools/tcl.wse.in:
- * unix/configure:
- * unix/configure.in:
- * unix/tcl.m4:
- * unix/tcl.spec:
- * win/README.binary:
- * win/configure:
- * win/configure.in:
- * macosx/Tcl.pbproj/project.pbxproj:
-
- * generic/tclStringObj.c (Tcl_GetCharLength): perf tweak
-
- * unix/tcl.m4: correct HP-UX ia64 --enable-64bit build flags
-
-2003-02-14 Kevin Kenny <kennykb@users.sourceforge.net>
-
- * win/tclWinTime.c: Added code to test and compensate for
- forward leaps of the performance counter. See the MSDN Knowledge
- Base article Q274323 for the hardware problem that makes this
- necessary on certain machines.
- * tests/winTime.test: Revised winTime-2.1 - it had a tolerance
- of thousands of seconds, rather than milliseconds. (What's six
- orders of magnitude among friends?
- Both the above changes are triggered by a problem reported at
- http://aspn.activestate.com/ASPN/Mail/Message/ActiveTcl/1536811
- although the developers find it difficult to believe that it
- accounts for the observed behavior and suspect a fault in the
- RTC chip.
-
-2003-02-13 Kevin Kenny <kennykb@users.sourceforge.net>
-
- * win/tclWinInit.c: Added conversion from the system encoding
- to tcl_platform(user), so that it works with non-ASCII7 user names.
- [Bug 685926]
-
- * doc/tclsh.1: Added language to describe the handling of the
- end-of-file character \u001a embedded in a script file.
- [Bug 685485]
-
-2003-02-11 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-03-22 Miguel Sofer <msofer@users.sf.net>
- * tests/fileName.test:
- * unix/tclUnixFile.c: fix for [Bug 685445] when using 'glob -l'
- on broken symbolic links. Added two new tests for this bug.
+ * generic/tclThreadAlloc.c: Simpler initialization of Cache under
+ HAVE_FAST_TSD, from mig-alloc-reform.
-2003-02-11 Kevin Kenny <kennykb@users.sourceforge.net>
+2011-03-21 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/http.test: Corrected a problem where http-4.14 would fail
- when run in an environment with a proxy server. Replaced references
- to scriptics.com by tcl.tk.
-
-2003-02-11 Jeff Hobbs <jeffh@ActiveState.com>
+ * unix/tclLoadDl.c: [Bug 3216070]: Loading extension libraries
+ * unix/tclLoadDyld.c: from embedded Tcl applications.
+ ***POTENTIAL INCOMPATIBILITY***
+ For extensions which rely on symbols from other extensions being
+ present in the global symbol table. For an example and some discussion
+ of workarounds, see http://stackoverflow.com/q/8330614/301832
- * tests/lsearch.test:
- * generic/tclCmdIL.c (Tcl_LsearchObjCmd): protect against the case
- that lsearch -regepx list and pattern objects are equal.
+2011-03-21 Miguel Sofer <msofer@users.sf.net>
- * tests/stringObj.test:
- * generic/tclStringObj.c (Tcl_GetCharLength): correct ascii char
- opt of 2002-11-11 to not stop early on \x00. [Bug #684699]
+ * generic/tclCkAlloc.c:
+ * generic/tclInt.h: Remove one level of allocator indirection in
+ non-memdebug builds, imported from mig-alloc-reform.
- * tests.parse.test: remove excess EOF whitespace
+2011-03-20 Miguel Sofer <msofer@users.sf.net>
- * generic/tclParse.c (CommandComplete): more paranoid check to
- break on (p >= end) instead of just (p == end).
+ * generic/tclThreadAlloc.c: Imported HAVE_FAST_TSD support from
+ mig-alloc-reform. The feature has to be enabled by hand: no autoconf
+ support has been added. It is not clear how universal a build using
+ this will be: it also requires some loader support.
-2003-02-11 Miguel Sofer <msofer@users.sf.net>
+2011-03-17 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclParse.c (CommandComplete):
- * tests/parse.test: fix for [Bug 684744], by Don Porter.
+ * generic/tclCompExpr.c (ParseExpr): Generate errorCode information on
+ failure to parse expressions.
-2003-02-11 Jeff Hobbs <jeffh@ActiveState.com>
+2011-03-17 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIOUtil.c (Tcl_FSJoinPath, Tcl_FSGetNormalizedPath):
- (UpdateStringOfFsPath): revert the cwdLen == 0 check and instead
- follow a different code path in Tcl_FSJoinPath.
- (Tcl_FSConvertToPathType, Tcl_FSGetNormalizedPath):
- (Tcl_FSGetFileSystemForPath): Update string rep of path objects
- before freeing the internal object. (darley)
+ * generic/tclMain.c: [Patch 3124683]: Reorganize the platform-specific
+ stuff in (tcl|tk)Main.c.
- * tests/fileSystem.test: added test 8.3
- * generic/tclIOUtil.c (Tcl_FSGetNormalizedPath):
- (UpdateStringOfFsPath): handle the cwdLen == 0 case
+2011-03-16 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclUnixFile.c (TclpMatchInDirectory): simplify the hidden
- file match check.
+ * generic/tclCkalloc.c: [Bug 3197864]: Pointer truncation on Win64
+ TCL_MEM_DEBUG builds.
-2003-02-10 Mo DeJong <mdejong@users.sourceforge.net>
+2011-03-16 Don Porter <dgp@users.sourceforge.net>
- * win/configure:
- * win/configure.in: Generate error when attempting
- to build under Cygwin. The Cygwin port of Tcl/Tk
- does not build and people are filing bug reports
- under the mistaken impression that someone is
- actually maintaining the Cygwin port. A post to
- comp.lang.tcl asking someone to volunteer as an
- area maintainer has generated no results.
- Closing bugs 680840, 630199, and 634772 and
- marking as "Won't fix".
+ * generic/tclBasic.c: Some rewrites to eliminate calls to isspace()
+ * generic/tclParse.c: and their /* INTL */ risk.
+ * generic/tclProc.c:
-2003-02-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2011-03-16 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/append.n: Return value was not documented. [Bug 683188]
+ * unix/tcl.m4: Make SHLIB_LD_LIBS='${LIBS}' the default and
+ * unix/configure: set to "" on per-platform necessary basis.
+ Backported from TEA, but kept all original platform code which was
+ removed from TEA.
-2003-02-10 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-03-14 Kevin B. Kenny <kennykb@acm.org>
- * doc/FileSystem.3:
- * generic/tclIOUtil.c:
- * generic/tclInt.h:
- * tests/fileSystem.test:
- * unix/tclUnixFCmd.c:
- * unix/tclUnixFile.c:
- * win/tclWinFile.c: further filesystem optimization, applying
- [Patch 682500]. In particular, these code examples are
- faster now:
- foreach f $flist { if {[file exists $f]} {file stat $f arr;...}}
- foreach f [glob -dir $dir *] { # action and/or recursion on $f }
- cd $dir
- foreach f [glob *] { # action and/or recursion on $f }
- cd ..
+ * tools/tclZIC.tcl (onDayOfMonth): Allow for leading zeroes in month
+ and day so that tzdata2011d parses correctly.
+ * library/tzdata/America/Havana:
+ * library/tzdata/America/Juneau:
+ * library/tzdata/America/Santiago:
+ * library/tzdata/Europe/Istanbul:
+ * library/tzdata/Pacific/Apia:
+ * library/tzdata/Pacific/Easter:
+ * library/tzdata/Pacific/Honolulu: tzdata2011d
- * generic/tclTest.c: Fix for [Bug 683181] where test suite
- left files in 'tmp'.
+ * generic/tclAssembly.c (BBEmitInstInt1): Changed parameter data types
+ in an effort to silence a MSVC warning reported by Ashok P. Nadkarni.
+ Unable to test, since both forms work on my machine in VC2005, 2008,
+ 2010, in both release and debug builds.
+ * tests/tclTest.c (TestdstringCmd): Restored MSVC buildability broken
+ by [5574bdd262], which changed the effective return type of 'ckalloc'
+ from 'char*' to 'void*'.
-2003-02-08 Jeff Hobbs <jeffh@ActiveState.com>
+2011-03-13 Miguel Sofer <msofer@users.sf.net>
- * library/safe.tcl: code cleanup of eval and string comp use.
+ * generic/tclExecute.c: remove TEBCreturn()
-2003-02-07 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-03-12 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinFCmd.c: cleanup long lines
- * win/tclWinFile.c: sped up pure 'glob' by a factor of 2.5
- ('foreach f [glob *] { file exists $f }' is still slow)
- * tests/fileSystem.text:
- * tests/fileName.test: added new tests to ensure correct
- behaviour in optimized filesystem code.
+ * generic/tcl.h (ckalloc,ckfree,ckrealloc): Moved casts into these
+ macro so that they work with VOID* (which is a void* on all platforms
+ which Tcl actually builds on) and unsigned int for the length
+ parameters, removing the need for MANY casts across the rest of Tcl.
+ Note that this is a strict source-level-only change, so size_t cannot
+ be used (would break binary compatibility on 64-bit platforms).
-2003-02-07 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-03-12 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclTest.c:
- * tests/fileSystem.text: fixed test 7.2 to avoid a possible
- crash, and not change the pwd.
-
- * tests/http.text: added comment to test 4.15, that it may
- fail if you use a proxy server.
-
-2003-02-06 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tclCompCmds.c (TclCompileIncrCmd):
- * tests/incr.test: Don't include the text
- "(increment expression)" in the errorInfo
- generated by the compiled version of the
- incr command since it does not match the
- message generated by the non-compiled version
- of incr. It is also not possible to match
- this error output under Jacl, which does
- not support a compiler.
-
-2003-02-06 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tclExecute.c (TclExecuteByteCode): When an
- error is encountered reading the increment value during
- a compiled call to incr, add a "(reading increment)"
- error string to the errorInfo variable. This makes
- the errorInfo variable set by the compiled incr command
- match the value set by the non-compiled version.
- * tests/incr-old.test: Change errorInfo result for
- the compiled incr command case to match the modified
- implementation.
- * tests/incr.test: Add tests to make sure the compiled
- and non-compiled errorInfo messages are the same.
+ * win/tclWinFile.c: [Bug 3185609]: File normalization corner case
+ of ... broken with -DUNICODE
-2003-02-06 Don Porter <dgp@users.sourceforge.net>
+2011-03-11 Donal K. Fellows <dkf@users.sf.net>
- * library/tcltest/tcltest.tcl: Filename arguments to [outputChannel]
- and [errorChannel] (also -outfile and -errfile) were [open]ed but
- never [closed]. Also, [cleanupTests] could remove output or error
- files. [Bug 676978].
- * library/tcltest/pkgIndex.tcl: Bumped to version 2.2.2.
+ * tests/unixInit.test: Make better use of tcltest2.
-2003-02-05 Mo DeJong <mdejong@users.sourceforge.net>
+2011-03-10 Donal K. Fellows <dkf@users.sf.net>
- * tests/interp.test:
- * tests/set-old.test: Run test cases that depend
- on hash order through lsort so that the tests
- also pass under Jacl. Does not change test
- results under Tcl.
+ * generic/tclBasic.c, generic/tclCompCmds.c, generic/tclEnsemble.c:
+ * generic/tclInt.h, generic/tclNamesp.c, library/auto.tcl:
+ * tests/interp.test, tests/namespace.test, tests/nre.test:
+ Converted the [namespace] command into an ensemble. This has the
+ consequence of making it vital for Tcl code that wishes to work with
+ namespaces to _not_ delete the ::tcl namespace.
+ ***POTENTIAL INCOMPATIBILITY***
-2003-02-04 Vince Darley <vincentdarley@users.sourceforge.net>
+ * library/tcltest/tcltest.tcl (loadIntoSlaveInterpreter): Added this
+ command to handle connecting tcltest to a slave interpreter. This adds
+ in the hook (inside the tcltest namespace) that allows the tests run
+ in the child interpreter to be reported as part of the main sequence
+ of test results. Bumped version of tcltest to 2.3.3.
+ * tests/init.test, tests/package.test: Adapted these test files to use
+ the new feature.
- * generic/tclIOUtil.c:
- * generic/tclEvent.c:
- * generic/tclInt.h:
- * mac/tclMacFCmd.c:
- * unix/tclUnixFCmd.c:
- * win/tclWin32Dll.c:
- * win/tclWinFCmd.c:
- * win/tclWinInit.c:
- * win/tclWinInt.h:
- * tests/fileSystem.test: fix to finalization/unloading/encoding
- issues to make filesystem much less dependent on encodings for
- its cleanup, and therefore allow it to be finalized later in the
- exit process. This fixes fileSystem.test-7.1. Also fixed one
- more bug in setting of modification dates of files which have
- undergone cross-platform copies. [Patch 676271]
-
- * tests/basic.test:
- * tests/exec.test:
- * tests/fileName.test:
- * tests/io.test: fixed some test failures when tests are run
- from a directory containing spaces.
-
- * tests/fileSystem.test:
- * generic/tclTest.c: added regression test for the modification
- date setting of cross-platform file copies.
-
-2003-02-03 Kevin Kenny <kennykb@users.sourceforge.net>
-
- * generic/tclBasic.c: Changed [trace add command] so that 'rename'
- callbacks get fully qualified names of the command. [Bug
- 651271]. ***POTENTIAL INCOMPATIBILITY***
- * tests/trace.test: Modified the test cases for [trace add
- command] to expect fully qualified names on the 'rename'
- callbacks. Added a case for renaming a proc within a namespace.
- * doc/trace.n: Added language about use of fully qualified names
- in trace callbacks.
-
-2003-02-01 Kevin Kenny <kennykb@users.sourceforge.net>
-
- * generic/tclCompCmds.c: Removed an unused variable that caused
- compiler warnings on SGI. [Bug 664379]
-
- * generic/tclLoad.c: Changed the code so that if Tcl_StaticPackage
- is called to report the same package as being loaded in two interps,
- it shows up in [info loaded {}] in both of them (previously,
- it didn't appear in the static package list in the second.
-
- * tests/load.test Added regression test for the above bug.
- [Bug 670042]
-
- * generic/tclClock.c: Fixed a bug that incorrectly allowed
- [clock clicks {}] and [clock clicks -] to be accepted as if
- they were [clock clicks -milliseconds].
-
- * tests/clock.test: Added regression tests for the above bug.
- [Bug 675356]
-
- * tests/unixNotfy.test: Added cleanup of working files
- [Bug 675609]
-
- * doc/Tcl.n: Added headings to the eleven paragraphs, to improve
- formatting in the tools that attempt to extract tables of contents
- from the manual pages. [Bug 627455]
-
- * generic/tclClock.c: Expanded mutex protection around the setting
- of env(TZ) and the thread-unsafe call to tzset(). [Bug 656660]
-
-2003-01-31 Don Porter <dgp@users.sourceforge.net>
-
- * tests/tcltest.test: Cleaned up management of file/directory
- creation/deletion to improve "-debug 1" output. [Bug 675614]
- The utility [slave] command failed to properly [list]-quote a
- constructed [open] command, causing failure when the pathname
- contained whitespace. [Bug 678415]
-
- * tests/main.test: Stopped main.test from deleting existing file.
- Test suite should not delete files that already exist. [Bug 675660]
-
-2003-01-28 Don Porter <dgp@users.sourceforge.net>
-
- * tests/main.test: Constrain tests that do not work on Windows.
- [Bug 674387]
-
-2003-01-28 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclIOUtil.c: fix to setting modification date
- in TclCrossFilesystemCopy. Also added 'panic' in
- Tcl_FSGetFileSystemForPath under illegal calling circumstances
- which lead to hard-to-track-down bugs.
-
- * generic/tclTest.c: added test suite code to allow
- exercising a vfs-crash-on-exit bug in Tcl's finalization caused
- by the encodings being cleaned up before unloading occurs.
- * tests/fileSystem.test: added new 'knownBug' test 7.1
- to demonstrate the crash on exit.
-
-2003-01-28 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tcl.h: Add TCL_PREFIX_IDENT and
- TCL_DEBUG_IDENT, used only by TclpCreateProcess.
- * unix/Makefile.in: Define TCL_DBGX.
- * win/Makefile.in: Define TCL_DBGX.
- * win/tclWinPipe.c (TclpCreateProcess):
- Check that the Tcl pipe dll actually exists
- in the Tcl bin directory and panic if it
- is not found. Incorporate TCL_DBGX into
- the Tcl pipe dll name. This fixes a really
- mysterious error that would show up when
- exec'ing a 16 bit application under Win95
- or Win98 when Tcl was compiled with symbols.
- The error seemed to indicate that the executable
- could not be found, but it was actually the
- Tcl pipe dll that could not be found.
-
-2003-01-26 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/README: Update msys+mingw URL to release 6.
- This version bundles gcc 3.
-
-2003-01-26 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/configure.in: Add test that checks to
- see if the compiler can cast to a union type.
- * win/tclWinTime.c: Squelch compiler warning
- about union initializer by casting to union
- type when compiling with gcc.
-
-2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tclIO.c (Tcl_CutChannel, Tcl_SpliceChannel):
- Invoke TclpCutFileChannel and TclpSpliceFileChannel.
- * generic/tclInt.h: Declare TclpCutFileChannel
- and TclpSpliceFileChannel.
- * unix/tclUnixChan.c (FileCloseProc, TclpOpenFileChannel,
- Tcl_MakeFileChannel, TclpCutFileChannel,
- TclpSpliceFileChannel): Implement thread load data
- cut and splice for file channels. This avoids
- an invalid memory ref when compiled with -DDEPRECATED.
- * win/tclWinChan.c (FileCloseProc, TclpCutFileChannel,
- TclpSpliceFileChannel): Implement thread load data
- cut and splice for file channels. This avoids
- an invalid memory ref that was showing up in the
- thread extension.
-
-2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWin32Dll.c (TclpCheckStackSpace, squelch_warnings):
- * win/tclWinChan.c (Tcl_MakeFileChannel, squelch_warnings):
- * win/tclWinFCmd.c (DoRenameFile, DoCopyFile, squelch_warnings):
- Re-implement inline ASM SEH handlers for gcc.
- The esp and ebp registers are now saved on the
- stack instead of in global variables so that
- the code is thread safe. Add additional checks
- when TCL_MEM_DEBUG is defined to be sure the
- values were recovered from the stack properly.
- Remove squelch_warnings functions and add
- a dummy call in the handler methods to squelch
- compiler warnings.
-
-2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tclAlloc.c, generic/tclCmdMZ.c, generic/tclCompExpr.c:
+ * generic/tclCompile.c, generic/tclEnv.c, generic/tclEvent.c:
+ * generic/tclIO.c, generic/tclIOCmd.c, generic/tclIORChan.c:
+ * generic/tclIORTrans.c, generic/tclLiteral.c, generic/tclNotify.c:
+ * generic/tclParse.c, generic/tclStringObj.c, generic/tclUtil.c:
+ * generic/tclZlib.c, unix/tclUnixFCmd.c, unix/tclUnixNotfy.c:
+ * unix/tclUnixPort.h, unix/tclXtNotify.c: Formatting fixes, mainly to
+ comments, so code better fits the style in the Engineering Manual.
- * win/configure:
- * win/configure.in: Define HAVE_ALLOCA_GCC_INLINE
- when we detect that no alloca function is found
- in malloc.h and we are compiling with GCC.
- Remove HAVE_NO_ALLOC_DECL define.
- * win/tclWin32Dll.c (TclpCheckStackSpace):
- Don't define alloca as a cdecl function.
- Doing this caused a tricky runtime bug because
- the _alloca function expects the size argument
- to be passed in a register and not on the stack.
- To fix this problem, we use inline ASM when
- compiling with gcc to invoke _alloca with the
- size argument loaded into a register.
-
-2003-01-24 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinDde.c (Dde_Init): clarified use of tsdPtr.
- (DdeServerProc): better refcount handling of returnPackagePtr.
-
- * generic/tclEvent.c (Tcl_Finalize): revert finalize change on
- 2002-12-04 to correct the issue with extensions that have TSD
- needing to finalize that before they are unloaded. This issue
- needs further clarification.
-
- * tests/unixFCmd.test: only do groups check on unix
-
-2003-01-24 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclStringObj.c: proper fixes for Tcl_SetObjLength and
- Tcl_AttemptSetObjectLength dealing with string objects with
- both pure-unicode and normal internal representations.
- Previous fix didn't handle all cases correctly.
- * generic/tclIO.c: Add 'Tcl_GetString()' to ensure the object has
- a valid 'objPtr->bytes' field before manipulating it directly.
-
- This fixes [Bug 635200] and [Bug 671138], but may reduce performance
- of Unicode string handling in some cases. A further patch will
- be applied to address this, once the code is known to be correct.
-
-2003-01-24 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/configure.in: Add test to see if alloca
- is undefined in malloc.h.
- * win/tclWin32Dll.c (TclpCheckStackSpace): Rework
- the SEH exception handler logic to avoid using
- the stack since alloca will modify the stack.
- This was causing a nasty bug that would set the
- exception handler to 0 because it tried to pop
- the previous exception handler off the top of
- the stack.
-
-2003-01-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/lset.n: Fixed fault in return values from lset in
- documentation examples [SF Bug #658463] and tidied up a bit at the
- same time.
-
-2003-01-21 Joe English <jenglish@users.sourceforge.net>
- * doc/namespace.n (namespace inscope): Clarified documentation
- [SF Patch #670110]
-
-2003-01-21 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Set SHLIB_SUFFIX
- so that TCL_SHLIB_SUFFIX will be set to a useful
- value in the generated tclConfig.sh.
- Set SHLIB_LD_LIBS to "" or '${LIBS}' based on
- the --enable-shared flag. This matches the
- UNIX implementation.
-
-2003-01-18 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclCkalloc.c: change %ud to %u as appropriate.
-
-2003-01-17 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWinDde.c (DdeServerProc): Deallocate
- the Tcl_Obj returned by ExecuteRemoteObject
- if it was not saved in a connection object.
-
-2003-01-17 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tcl.h: Revert earlier change that
- defined TCL_WIDE_INT_TYPE as long long and
- TCL_LL_MODIFIER as L when compiling with
- mingw. This change ended up causing some
- test case failures when compiling with mingw.
- * generic/tclObj.c (UpdateStringOfWideInt):
- Describe the warning generated by mingw and
- why it needs to be ignored so that someone
- is not tempted to "fix" this problem again
- in the future.
-
-2003-01-16 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclStringObj.c: Tcl_SetObjLength fix for when
- the object has a unicode string rep. Fixes [Bug 635200]
- * tests/stringObj.test: removed 'knownBug' constraint from
- test 14.1 now that this bug is fixed.
-
- * generic/tclInt.h:
- * generic/tclBasic.c:
- * generic/tclCmdMZ.z:
- * tests/trace.test: execution and command tracing bug fixes and
- cleanup. In particular fixed [Bug 655645], [Bug 615043],
- [Bug 571385]
- - fixed some subtle cleanup problems with tracing. This
- required replacing Tcl_Preserve/Tcl_Release with a more
- robust refCount approach. Solves at least one known crash
- caused by memory corruption.
- - fixed some confusion in the code between new style traces
- (Tcl 8.4) and the very limited 'Tcl_CreateTrace' which existed
- before.
- - made behaviour consistent with documentation (several
- tests even contradicted the documentation before).
- - fixed some minor error message details
- - added a number of new tests
-
-2003-01-16 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinSerial.c (SerialOutputProc): add casts for
- bytesWritten to allow strict compilation (no warnings).
+2011-03-09 Donal K. Fellows <dkf@users.sf.net>
- * tests/winDde.test:
- * win/tclWinDde.c (Tcl_DdeObjCmd): Prevent crash when empty
- service name is passed to 'dde eval' and goto errorNoResult in
- request and poke error cases to free up any allocated data.
-
-2003-01-16 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWin32Dll.c (squelch_warnings): Squelch
- compiler warnings from SEH ASM code.
- * win/tclWinChan.c (squelch_warnings): Squelch
- compiler warnings from SEH ASM code.
- * win/tclWinDde.c: Add casts to avoid compiler
- warnings. Pass pointer to DWORD instead of int
- to avoid compiler warnings.
- * win/tclWinFCmd.c (squelch_warnings): Add casts
- and fixup decls to avoid compiler warnings.
- Squelch compiler warnings from SEH ASM code.
- * win/tclWinFile.c: Add casts and fixup decls
- to avoid compiler warnings. Remove unused variable.
- * win/tclWinNotify.c: Declare as DWORD instead
- of int to avoid compiler warning.
- * win/tclWinReg.c: Add casts to avoid compiler
- warning. Fix assignment in if expression bug.
- * win/tclWinSerial.c: Add casts to avoid compiler
- warnings. Remove unused variable.
- * win/tclWinSock.c: Add casts and fixup decls
- to avoid compiler warnings.
-
-2003-01-14 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclClock.c (FormatClock): corrected typo that
- incorrectly conditionally defined savedTZEnv and savedTimeZone.
-
-2003-01-13 Mo DeJong <mdejong@users.sourceforge.net>
-
- Fix mingw build problems and compiler warnings.
-
- * generic/tcl.h: Add if defined(__MINGW32__)
- check to code that sets the TCL_WIDE_INT_TYPE
- and TCL_LL_MODIFIER.
- * generic/tclClock.c (FormatClock): Don't
- define savedTimeZone and savedTZEnv if
- we are not going to use them.
- * generic/tclEnv.c: Add cast to avoid warning.
- * win/tclWinChan.c: Use DWORD instead of int
- to avoid compiler warning.
- * win/tclWinThrd.c: Only define allocLock,
- allocLockPtr, and dataKey when TCL_THREADS
- is defined. This avoid a compiler warning
- about unused variables.
-
-2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/README: Update msys + mingw URL, the
- new release includes the released 1.0.8
- version of msys which includes a number
- of bug fixes.
-
-2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Pull in
- addition of shell32.lib to LIBS_GUI that
- was added to the Tk tcl.m4 but never made
- it back into the Tcl version.
-
-2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tcl.h: Skip Tcl's define of CHAR,
- SHORT, and LONG when HAVE_WINNT_IGNORE_VOID
- is defined. This avoids a bunch of compiler
- warnings when building with Cygwin or Mingw.
- * win/configure: Regen.
- * win/configure.in: Define HAVE_WINNT_IGNORE_VOID
- when we detect a winnt.h that still defines
- CHAR, SHORT, and LONG when VOID has already
- been defined.
- * win/tcl.m4 (SC_LOAD_TCLCONFIG): Subst the
- TCL_DEFS loaded from tclConfig.sh so that
- Tcl defines can make it into the Tk Makefile.
-
-2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/configure.in: Check for typedefs like LPFN_ACCEPT
- in winsock2.h and define HAVE_NO_LPFN_DECLS if not found.
- * win/tclWinSock.c: Define LPFN_* typedefs if
- HAVE_NO_LPFN_DECLS is defined. This fixes the build
- under Mingw and Cygwin, it was broken by the changes
- made on 2002-11-26.
-
-2003-01-10 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclIOUtil.c:
- * win/tclWinInt.h:
- * win/tclWinInit.c: fix to new WinTcl crash on exit with vfs,
- introduced on 2002-12-06. Encodings must be cleaned up after
- the filesystem.
-
- * win/makefile.vc: fix to minor VC++ 5.2 syntax problem
-
-2003-01-09 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclCompCmds.c (TclCompilerReturnCmd): Corrected off-by-one
- problem with recent commit. [Bug 633204]
-
-2003-01-09 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclFileName.c: remove unused variable 'macSpecialCase'
- [Bug 664749]
-
- * generic/tclIOUtil.c:
- * generic/tclInt.h:
- * unix/tclUnixFile.c:
- * mac/tclMacFile.c:
- * win/tclWinFile.c:
- * win/tclWinInt.h:
- * win/tclWin32Dll.c:
- * tests/cmdAH.test: fix to non-ascii chars in paths when
- setting mtime and atime through 'file (a|m)time $path $time'
- [Bug 634151]
+ * tests/incr.test: Update more of the test suite to use Tcltest 2.
-2003-01-08 Don Porter <dgp@users.sourceforge.net>
+2011-03-09 Don Porter <dgp@users.sourceforge.net>
- * generic/tclExecute.c (TclExprFloatError): Use the IS_NAN macro
- for greater clarity of code.
+ * generic/tclNamesp.c: [Bug 3202171]: Tighten the detector of nested
+ * tests/namespace.test: [namespace code] quoting that the quoted
+ scripts function properly even in a namespace that contains a custom
+ "namespace" command.
-2003-01-07 Don Porter <dgp@users.sourceforge.net>
+ * doc/tclvars.n: Formatting fix. Thanks to Pat Thotys.
- * generic/tclCompCmds.c (TclCompileReturnCmd):
- * tests/compile.test: Corrects failure of bytecompiled
- [catch {return}] to have result TCL_RETURN (not TCL_OK) [Bug 633204].
- This patch is a workaround for 8.4.X. A new opcode INST_RETURN is a
- better long term solution for 8.5 and later.
+2011-03-09 Donal K. Fellows <dkf@users.sf.net>
-2003-01-04 David Gravereaux <davygrvy@pobox.com>
+ * tests/dstring.test, tests/init.test, tests/link.test: Update more of
+ the test suite to use Tcltest 2.
- * win/makefile.vc:
- * win/rules.vc: Fixed INSTALLDIR macro problem that blanked itself
- by accident causing the install target to put the tree at the root
- of the drive built on. Whoops..
-
- Renamed the 'linkexten' option to be 'staticpkg'. Added 'thrdalloc'
- to allow the switching _on_ of the thread allocator. Under testing,
- I found it not to be benificial under windows for the purpose of the
- application I was using it for. It was more important for this app
- that resources for tcl threads be returned to the system rather than
- saved/moved to the global recycler. Be extra clean or extra fast
- for the default threaded build? Let's move to clean and allow it to
- be switched on for users who find it benificial for their use of
- threads.
+2011-03-08 Jan Nijtmans <nijtmans@users.sf.net>
-2002-12-18 David Gravereaux <davygrvy@pobox.com>
-
- * win/makefile.vc: some uses of xcopy swapped to the @$(CPY) macro.
- Reported by Joe Mistachkin <joe@mistachkin.com>.
+ * generic/tclBasic.c: Fix gcc warnings: variable set but not used
+ * generic/tclProc.c:
+ * generic/tclIORChan.c:
+ * generic/tclIORTrans.c:
+ * generic/tclAssembly.c: Fix gcc warning: comparison between signed
+ and unsigned integer expressions
-2002-12-17 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclNotify.c (TclFinalizeNotifier, Tcl_SetServiceMode):
- (Tcl_ThreadAlert): Check that the stub functions are non-NULL
- before calling them. They could be set to NULL by Tcl_SetNotifier.
-
-2002-12-16 David Gravereaux <davygrvy@pobox.com>
+2011-03-08 Don Porter <dgp@users.sourceforge.net>
- * generic/tclPipe.c (TclCleanupChildren):
- * tests/winPipe.test:
- * win/tclWinPipe.c (Tcl_WaitPid):
- * win/tclWinTest.c: Gave Tcl_WaitPid the ability to return a
- Win32 exception code translated into a posix style SIG*. This
- allows [close] to report "CHILDKILLED" without the meaning
- getting lost in a truncated exit code. In TclCleanupChildren(),
- TclpGetPid() had to get moved to before Tcl_WaitPid() as the
- the handle is removed from the list taking away the ability
- to get the process id after the wait is done. This shouldn't
- effect the unix implimentaion unless waitpid is called with
- a pid of zero, meaning "any". I don't think it is..
-
-2002-12-13 Don Porter <dgp@users.sourceforge.net>
-
- * unix/configure.in: Updated configure of CVS snapshots to reflect
- * win/configure.in: the 8.4.1.1 patchlevel.
-
- * unix/configure: autoconf
- * win/configure autoconf
-
-2002-12-11 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclProc.c (ProcessProcResultCode): Fix failure to
- propagate negative return codes up the call stack. [Bug 647307]
- * tests/proc.test (proc-6.1): Test for Bug 647307
-
- * generic/tclParseExpr.c (TclParseInteger): Return 1 for the
- string "0x" (recognize leading "0" as an integer). [Bug 648441].
- * tests/parseExpr.test (parseExpr-19.1): Test for Bug 648441.
-
-2002-12-09 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinThrd.c (TclpMasterUnlock):
- * generic/tclThread.c (TclFinalizeThreadData): TclpMasterUnlock
- must exist and be called unconditional of TCL_THREADS. [Bug #651139]
-
-2002-12-08 David Gravereaux <davygrvy@pobox.com>
-
- * win/tclWinSock.c (SocketThreadExitHandler, InitSockets): Check
- that the tsdPtr is valid before dereferencing as we call it from
- the exit handler, too [Bug 650353]. Another WSAStartup() loaded
- version comparison byte swap issue fixed. Although 0x0101 byte
- swapped is still 0x0101, properly claiming which is major/minor
- is more correct.
+ * generic/tclInt.h: Remove TclMarkList() routine, an experimental
+ * generic/tclUtil.c: dead-end from the 8.5 alpha days.
-2002-12-06 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclResult.c (ResetObjResult): [Bug 3202905]: Correct failure
+ to clear invalid intrep. Thanks to Colin McDonald.
- * generic/tclStubInit.c: regen
- * generic/tclIntPlatDecls.h: regen
- * generic/tclInt.decls: added TclWinResetInterface
+2011-03-08 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWin32Dll.c (TclWinResetInterfaces):
- * win/tclWinInit.c (TclpSetInitialEncodings, WinEncodingsCleanup):
- add exit handler that resets the encoding information to a state
- where we can reuse Tcl. Following these changes, it is possible
- to reuse Tcl (following Tcl_FindExecutable or Tcl_CreateInterp)
- following a Tcl_Finalize.
+ * generic/tclAssembly.c, tests/assemble.test: Migrate to use a style
+ more consistent with the rest of Tcl.
- * generic/tclIOUtil.c (TclFinalizeFilesystem): reset statics to
- their original values on finalize to allow reuse of the library.
+2011-03-06 Don Porter <dgp@users.sourceforge.net>
-2002-12-04 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclBasic.c: More replacements of Tcl_UtfBackslash() calls
+ * generic/tclCompile.c: with TclParseBackslash() where possible.
+ * generic/tclCompCmdsSZ.c:
+ * generic/tclParse.c:
+ * generic/tclUtil.c:
- * win/tclWinPipe.c: reverted back to -r1.27 due to numerous test
- failures that need to be resolved first. The idea was good,
- but the details aren't.
-
-2002-12-04 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclUtil.c (TclFindElement): [Bug 3192636]: Guard escape
+ sequence scans to not overrun the string end.
- * win/tclWinPipe.c (Tcl_WaitPid): When a process exits with an
- exception, pass this notice on to the caller with a SIG* code
- rather than truncating the exit code and missing the meaning.
- This allows TclCleanupChildren() to report "CHILDKILLED".
+2011-03-05 Don Porter <dgp@users.sourceforge.net>
- This has a different behavior than unix in that closing the
- read pipe to a process sends the SIGPIPE signal which is
- returned as a SIGPIPE exit status. On windows, we send the
- process a CTRL_BREAK_EVENT and get back a CONTROL_C_EXIT which
- is documented to mean a SIGINT which seems wrong as a system,
- but is the correct exit status.
+ * generic/tclParse.c (TclParseBackslash): [Bug 3200987]: Correct
+ * tests/parse.test: trunction checks in \x and \u substitutions.
-2002-12-04 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-03-05 Miguel Sofer <msofer@users.sf.net>
- * generic/tclIOUtil.c: fix to redirected 'load' in virtual
- filesystem for some Unix systems.
+ * generic/tclExecute.c (TclStackFree): insure that the execStack
+ satisfies "at most one free stack after the current one" when
+ consecutive reallocs caused the creation of intervening stacks.
- * generic/tclEvent.c: the filesystem must be cleaned up before
- the encoding subsystem because it needs access to encodings.
- Fixes crash on exit observed in embedded applications.
+2011-03-05 Kevin B. Kenny <kennykb@acm.org>
- * generic/tclTestObj.c: patch omitted from previous change
- of 2002-11-13
-
-2002-12-03 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclAssembly.c (new file):
+ * generic/tclBasic.c (Tcl_CreateInterp):
+ * generic/tclInt.h:
+ * tests/assemble.test (new file):
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc: Merged dogeen-assembler-branch into HEAD. Since
+ all functional changes are in the tcl::unsupported namespace, there's
+ no reason to sequester this code on a separate branch.
- * generic/tclStubLib.c (Tcl_InitStubs): prevent the cached check of
- tclStubsPtr to allow for repeated load/unload of the Tcl dll by
- hosting apps. [Bug 615304]
+2011-03-05 Miguel Sofer <msofer@users.sf.net>
-2002-12-03 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclExecute.c: Cleaner mem management for TEBCdata
- * win/tclAppInit.c (sigHandler): Protect from trying to close a
- NULL handle.
+ * generic/tclExecute.c:
+ * tests/nre.test: Renamed BottomData to TEBCdata, so that the name
+ refers to what it is rather than to its storage location.
- * win/tclWinPipe.c (PipeClose2Proc, TclpCreateProcess): Send a
- real Win32 signal (CTRL_C_EVENT) when the read channel is brought
- down to alert the child to close on its side. Start the process
- with CREATE_NEW_PROCESS_GROUP to allow the ability to send these
- signals. The following test case now brings down the child
- without the use of an external [kill] command.
+ * generic/tclBasic.c: Renamed struct TEOV_callback to the more
+ * generic/tclCompExpr.c: descriptive NRE_callback.
+ * generic/tclCompile.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclTest.c:
- % set p [open "|[info name]" w+]
- file8d5380
- % pid $p
- 2876
- % close $p <- now doesn't block in Tcl_WaitPid()
- %
+2011-03-04 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinPipe.c (PipeClose2Proc): Changed CTRL_C_EVENT
- to CTRL_BREAK_EVENT as it can't be ignored by the child and
- proved to work on [open "|netstat 1" w+] where CTRL_C_EVENT
- didn't.
+ * generic/tclOOMethod.c (ProcedureMethodCompiledVarConnect)
+ (ProcedureMethodCompiledVarDelete): [Bug 3185009]: Keep references to
+ resolved object variables so that an unset doesn't leave any dangling
+ pointers for code to trip over.
-2002-11-27 David Gravereaux <davygrvy@pobox.com>
+2011-03-01 Miguel Sofer <msofer@users.sf.net>
- * win/tclWinPort.h: Don't turn off winsock prototypes!
- TclX didn't like it. Even though the core doesn't use the
- prototypes, do offer them.
+ * generic/tclBasic.c (TclNREvalObjv): Missing a variable declaration
+ in commented out non-optimised code, left for ref in checkin
+ [b97b771b6d]
- * win/tclWinSock.c: Removed shutdown() from the function
- table as it wasn't referenced anywhere and cleaned-up some
- casting that that wasn't needed.
+2011-03-03 Don Porter <dgp@users.sourceforge.net>
- * win/tclWinSock.c: WSAStartup() loaded version comparison
- error which resulted in 2.0 looking less than 1.1.
+ * generic/tclResult.c (Tcl_AppendResultVA): Use the directive
+ USE_INTERP_RESULT [TIP 330] to force compat with interp->result
+ access, instead of the improvised hack USE_DIRECT_INTERP_RESULT_ACCESS
+ from releases past.
- * win/tclWinChan.c (Tcl_MakeFileChannel): return of
- DuplicateHandle() incorrectly used [Bug 618852].
+2011-03-01 Miguel Sofer <msofer@users.sf.net>
-2002-11-26 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclCompCmdsSZ.c (TclCompileThrowCmd, TclCompileUnsetCmd):
+ fix leaks
- * generic/tclEncoding.c (TclFinalizeEncodingSubsystem): properly
- cleanup all encodings by using Tcl_FirstHashEntry in the while loop.
+ * generic/tclBasic.c: This is [Patch 3168398],
+ * generic/tclCompCmdsSZ.c: Joe Mistachkin's optimisation
+ * generic/tclExecute.c: of Tip #285
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclInterp.c:
+ * generic/tclOODecls.h:
+ * generic/tclStubInit.c:
+ * win/makefile.vc:
- * unix/Makefile.in (valgrind): add simple valgrind target
+ * generic/tclExecute.c (ExprObjCallback): Fix object leak
- * tests/exec.test: unset path var to allow singleproc testing
+ * generic/tclExecute.c (TEBCresume): Store local var array and
+ constants in automatic vars to reduce indirection, slight perf
+ increase
- * generic/tclInterp.c (AliasCreate): preserve/release interps to
- prevent possible FMR error in bad alias cases.
+ * generic/tclOOCall.c (TclOODeleteContext): Added missing '*' so that
+ trunk compiles.
-2002-11-26 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclBasic.c (TclNRRunCallbacks): [Patch 3168229]: Don't do
+ the trampoline dance for commands that do not have an nreProc.
- * win/tclWinPort.h:
- * win/tclWinSock.c: This patch does two things:
+2011-03-01 Donal K. Fellows <dkf@users.sf.net>
- 1) Cleans-up the winsock typedefs by using the typedefs
- provided by winsock2.h. This has no effect on how winsock
- is initialized; just makes the source code easier to read.
- [Patch 561305 561301]
+ * generic/tclOO.c (Tcl_NewObjectInstance, TclNRNewObjectInstance)
+ (TclOOObjectCmdCore, FinalizeObjectCall):
+ * generic/tclOOBasic.c (TclOO_Object_Destroy, AfterNRDestructor):
+ * generic/tclOOCall.c (TclOODeleteContext, TclOOGetCallContext):
+ Reorganization of call context reference count management so that code
+ is (mostly) simpler.
- 2) Revamps how the socket message handler thread is brought
- up and down to allow for cleaner exits without the use of
- TerminateThread(). TerminateThread is evil. No attempt has
- been made to resolve [Bug 593810] which may need a new
- channel driver version for adding a registering function
- within the transfered thread to init the handler thread.
- IOW, initialization of the TSD structure is getting bypassed
- through the thread extension's [thread::transfer] command.
+2011-01-26 Donal K. Fellows <dkf@users.sf.net>
-2002-11-26 David Gravereaux <davygrvy@pobox.com>
+ * doc/RegExp.3: [Bug 3165108]: Corrected documentation of description
+ of subexpression info in Tcl_RegExpInfo structure.
- * win/tclWinConsole.c:
+2011-01-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclPreserve.c: Don't miss 64-bit address bits in panic
+ message.
+ * win/tclWinChan.c: Fix various gcc-4.5.2 64-bit warning
+ * win/tclWinConsole.c: messages, e.g. by using full 64-bits for
+ * win/tclWinDde.c: socket fd's
* win/tclWinPipe.c:
+ * win/tclWinReg.c:
* win/tclWinSerial.c:
* win/tclWinSock.c:
* win/tclWinThrd.c:
- * win/tclWinTime.c: General cleanup of all worker threads used
- by the channel drivers. Eliminates the normal case where the
- worker thread is terminated ('cept the winsock one). Instead,
- use kernel events to signal a clean exit. Only when the worker
- thread is blocked on an I/O call is the thread terminated.
- Essentially, this makes all other channel worker threads behave
- like the PipeReaderThread() function for it's cleaner exit
- behavior. This appears to fix [Bug 597924] but needs 3rd party
- confirmation to close the issue.
-2002-11-26 Mo DeJong <mdejong@users.sourceforge.net>
+2011-01-19 Jan Nijtmans <nijtmans@users.sf.net>
- * win/README: Update msys build env URL. This
- release #4 build both tcl and tk without problems.
+ * tools/genStubs.tcl: [FRQ 3159920]: Tcl_ObjPrintf() crashes with
+ * generic/tcl.decls bad format specifier.
+ * generic/tcl.h:
+ * generic/tclDecls.h:
-2002-11-22 Jeff Hobbs <jeffh@ActiveState.com>
+2011-01-18 Donal K. Fellows <dkf@users.sf.net>
- * library/init.tcl: code cleanup to reduce use of
- * library/opt/optparse.tcl: string compare
+ * generic/tclOOMethod.c (PushMethodCallFrame): [Bug 3001438]: Make
+ sure that the cmdPtr field of the procPtr is correct and relevant at
+ all times so that [info frame] can report sensible information about a
+ frame after a return to it from a recursive call, instead of probably
+ crashing (depending on what else has overwritten the Tcl stack!)
- * tests/interp.test: interp-14.4
- * generic/tclInterp.c (TclPreventAliasLoop): prevent seg fault
- when creating an alias command over the interp name. [Bug #641195]
+2011-01-18 Jan Nijtmans <nijtmans@users.sf.net>
-2002-11-18 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclBasic.c: Various mismatches between Tcl_Panic
+ * generic/tclCompCmds.c: format string and its arguments,
+ * generic/tclCompCmdsSZ.c: discovered thanks to [Bug 3159920]
+ * generic/tclCompExpr.c:
+ * generic/tclEnsemble.c:
+ * generic/tclPreserve.c:
+ * generic/tclTest.c:
- * generic/tclUtil.c (SetEndOffsetFromAny): handle integer offset
- after the "end-" prefix.
+2011-01-17 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/get.test:
- * generic/string.test:
- * generic/tclObj.c (SetIntFromAny, SetWideIntFromAny):
- * generic/tclGet.c (TclGetLong, Tcl_GetInt): simplify sign
- handling before calling strtoul(l). [Bug #634856]
+ * generic/tclIOCmd.c: [Bug 3148192]: Commands "read/puts" incorrectly
+ * tests/chanio.test: interpret parameters. Improved error-message
+ * tests/io.test regarding legacy form.
+ * tests/ioCmd.test
-2002-11-18 David Gravereaux <davygrvy@pobox.com>
+2011-01-15 Kevin B. Kenny <kennykb@acm.org>
- * win/tclWinThrd.c (Tcl_CreateThread/TclpThreadExit): Fixed
- improper compiler macros that missed the VC++ compiler. This
- resulted in VC++ builds using CreateThread()/ExitThread() in place
- of the proper _beginthreadex()/_endthreadex(). This was a large
- error and am surprised I missed seeing it earlier.
+ * doc/tclvars.n:
+ * generic/tclStrToD.c:
+ * generic/tclUtil.c (Tcl_PrintDouble):
+ * tests/util.test (util-16.*): [Bug 3157475]: Restored full Tcl 8.4
+ compatibility for the formatting of floating point numbers when
+ $::tcl_precision is not zero. Added compatibility tests to make sure
+ that excess trailing zeroes are suppressed for all eight major code
+ paths.
-2002-11-13 Jeff Hobbs <jeffh@ActiveState.com>
+2011-01-12 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/regexpComp.test: added tests 22.*
- * generic/tclCompCmds.c (TclCompileRegexpCmd): add left and right
- anchoring (^ and $) recognition and check starting or ending .* to
- extend the number of REs that can be compiled to string match or
- string equal.
+ * win/tclWinFile.c: Use _vsnprintf in stead of vsnprintf, because
+ MSVC 6 doesn't have it. Reported by andreask.
+ * win/tcl.m4: handle --enable-64bit=ia64 for gcc
+ * win/configure.in: more accurate test for correct <intrin.h>
+ * win/configure: (autoconf-2.59)
+ * win/tclWin32Dll.c: VS 2005 64-bit does not have intrin.h, and
+ * generic/tclPanic.c: does not need it.
-2002-11-13 Vince Darley <vincentdarley@users.sourceforge.net>
+2011-01-07 Kevin B. Kenny <kennykb@acm.org>
- * generic/tclCmdMZ.c:
- * tests/trace.test: applied patch from Hemang Levana to fix
- [Bug #615043] in execution traces with 'return -code error'.
-
- * generic/tclTestObj.c:
- * tests/stringObj.test: added 'knownBug' test for [Bug 635200]
- * generic/tclStringObj.c: corrected typos in comments
+ * tests/util.test (util-15.*): Added test cases for floating point
+ conversion of the largest denormal and the smallest normal number, to
+ avoid any possibility of the failure suffered by PHP in the last
+ couple of days. (They didn't fail, so no actual functional change.)
- * generic/tclFileName.c:
- * tests/fileName.test: applied patch for bug reported against
- tclvfs concerning handling of Windows serial ports like 'com1',
- 'lpt3' by the virtual filesystem code.
+2011-01-05 Donal K. Fellows <dkf@users.sf.net>
- * doc/RegExp.3: clarification of the 'extendMatch' return
- values.
+ * tests/package.test, tests/pkg.test: Coalesce these tests into one
+ file that is concerned with the package system. Convert to use
+ tcltest2 properly.
+ * tests/autoMkindex.test, tests/pkgMkIndex.test: Convert to use
+ tcltest2 properly.
-2002-11-11 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclUtil.c (Tcl_Backslash): use TclUtfToUniChar.
- (Tcl_StringCaseMatch): use TclUtfToUniChar and add further
- optimizations for the one-byte/char case.
-
- * generic/tclUtf.c: make use of TclUtfToUniChar macro throughout
- the functions, and add extra optimization to Tcl_NumUtfChars for
- one-byte/char case.
-
- * generic/tclVar.c (DisposeTraceResult, CallVarTraces): add proper
- static declarations.
-
- * generic/tclStringObj.c (Tcl_GetCharLength): optimize for the
- ascii char case.
- (Tcl_GetUniChar): remove unnecessary use of Tcl_UtfToUniChar.
- (FillUnicodeRep): Use TclUtfToUniChar.
-
- * generic/tclHash.c (HashStringKey): move string++ lower to save
- an instruction.
-
- * generic/tclExecute.c (TclExecuteByteCode): improve INST_STR_CMP
- to use memcmp in the one-byte/char case, also use direct index for
- INST_STR_INDEX in that case.
-
- * generic/tclEncoding.c (UtfToUtfProc, UtfToUnicodeProc):
- (TableFromUtfProc, EscapeFromUtfProc): Use TclUtfToUniChar.
- (UnicodeToUtfProc, TableToUtfProc): add 1-byte char optimizations
- for Tcl_UniCharToUtf call. These improve encoded channel
- conversion speeds by up to 20%.
-
- * tests/split.test: added 1-char string split tests
- * generic/tclCmdMZ.c (Tcl_SplitObjCmd): Use TclUtfToUniChar.
- Also added a special case for single-ascii-char splits.
- (Tcl_StringObjCmd): Use TclUtfToUniChar.
- For STR_RANGE, support getting ranges of ByteArrays (reverts
- change from 2000-05-26).
- (TraceExecutionProc) add proper static declaration.
-
- * generic/tclInt.h: add macro version of Tcl_UtfToUniChar
- (TclUtfToUniChar) that does the one-byte utf-char check without
- calling Tcl_UtfToUniChar, for use by the core. This brings
- notable speedups for primarily ascii string handling.
-
- * generic/tcl.h (TCL_PATCH_LEVEL): bump to 8.4.1.1 for patchlevel
- only. This interim number will only be reflected by
- [info patchlevel].
-
-2002-11-11 Kevin Kenny <kennykb@acm.org>
- * doc/Tcl.n: Corrected indentation of the new language. Oops.
-
-2002-11-10 Kevin Kenny <kennykb@acm.org>
-
- * doc/Tcl.n: Added language to the Endekalogue to make it clear
- that substitutions always take place from left to right. [Bug
- #635644]
-
-2002-11-06 Mo DeJong <mdejong@users.sourceforge.net>
-
- * changes: Note TclInExit TclInThreadExit changes.
- * generic/tclEvent.c (TclInExit, TclInThreadExit):
- Split out functionality of TclInExit to make it
- clear which one should be called in each situation.
- * generic/tclInt.decls: Declare TclInThreadExit.
- * generic/tclIntDecls.h: Regen.
- * generic/tclStubInit.c: Regen.
- * mac/tclMacChan.c (StdIOClose):
- * unix/tclUnixChan.c (FileCloseProc):
- * win/tclWinChan.c (FileCloseProc):
- * win/tclWinConsole.c (ConsoleCloseProc):
- * win/tclWinPipe.c (TclpCloseFile):
- * win/tclWinSerial.c (SerialCloseProc): Invoke the
- new TclInThreadExit method instead of TclInExit.
-
-2002-11-06 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Generate a fatal
- configure error if no ar program can be found on the
- path. [Bug #582039]
- * win/configure: Regen.
- * win/configure.in: Check that AR, RANLIB, and RC
- are found on the path when building with gcc.
-
-2002-11-03 David Gravereaux <davygrvy@pobox.com>
-
- * win/tclAppInit.c: Calls Registry_Init() and Dde_Init() when
- STATIC_BUILD and TCL_USE_STATIC_PACKAGES macros are set.
+2011-01-01 Donal K. Fellows <dkf@users.sf.net>
- * win/makefile.vc:
- * win/rules.vc: linkexten option now sets the TCL_USE_STATIC_PACKAGES
- macro which also adds the registry and dde object files to the link
- of the shell. [Patch 479697] Also factored some additional macros
- that will be helpful for extension authors. Version grepping of tcl.h
- will need to be added to complete this.
+ * tests/cmdAH.test, tests/cmdMZ.test, tests/compExpr.test,
+ * tests/compile.test, tests/concat.test, tests/eval.test,
+ * tests/fileName.test, tests/fileSystem.test, tests/interp.test,
+ * tests/lsearch.test, tests/namespace-old.test, tests/namespace.test,
+ * tests/oo.test, tests/proc.test, tests/security.test,
+ * tests/switch.test, tests/unixInit.test, tests/var.test,
+ * tests/winDde.test, tests/winPipe.test: Clean up of tests and
+ conversion to tcltest 2. Target has been to get init and cleanup code
+ out of the test body and into the -setup/-cleanup stanzas.
- * win/buildall.vc.bat: Added more descriptive commentary.
+ * tests/execute.test (execute-11.1): [Bug 3142026]: Added test that
+ fails (with a crash) in an unfixed memdebug build on 64-bit systems.
-2002-11-01 David Gravereaux <davygrvy@pobox.com>
+2010-12-31 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinReg.c: Changed the Tcl_PkgProvide() line to declare
- the registry extension at version 1.1 from 1.0.
+ * generic/tclCmdIL.c (SortElement): Use unions properly in the
+ definition of this structure so that there is no need to use nasty
+ int/pointer type punning. Made it clearer what the purposes of the
+ various parts of the structure are.
-2002-10-31 Andreas Kupries <andreask@activestate.com>
+2010-12-31 Jan Nijtmans <nijtmans@users.sf.net>
- * library/word.tcl: Changed $tcl_platform to $::tcl_platform to
- avoid possible scope trouble.
+ * unix/dltest/*.c: [Bug 3148192]: Fix broken [load] tests by ensuring
+ that the affected files are never compiled with -DSTATIC_BUILD.
-2002-10-29 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-12-30 Miguel Sofer <msofer@users.sf.net>
- * win/tclWinInt.h:
- * win/tclWin32Dll.c: added comments about certain NULL function
- pointers which will be filled in when Tcl_FindExecutable is
- called, so that users don't report invalid bugs on this topic.
- (No code changes at all).
-
-2002-10-29 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclExecute.c (GrowEvaluationStack): Off-by-one error in
+ sizing the new allocation - was ok in comment but wrong in the code.
+ Triggered by [Bug 3142026] which happened to require exactly one more
+ than what was in existence.
- * unix/tclLoadDyld.c (TclpFindSymbol): pass all dyld error
- messages upstream [Bug #627546].
+2010-12-26 Donal K. Fellows <dkf@users.sf.net>
-2002-10-28 Andreas Kupries <andreask@activestate.com>
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Fix crash when multiple -index
+ options are used. Simplified memory handling logic.
- * library/dde/pkgIndex.tcl:
- * library/reg/pkgIndex.tcl: Changed the hardwired debug suffix
- (d) to the correct suffix (g).
+2010-12-20 Jan Nijtmans <nijtmans@users.sf.net>
-2002-10-28 Don Porter <dgp@users.sourceforge.net>
+ * win/tclWin32Dll.c: [Patch 3059922]: fixes for mingw64 - gcc4.5.1
+ tdm64-1: completed for all environments.
- * library/auto.tcl: Converted the Mac-specific [package unknown]
- * library/init.tcl: behavior to use a chaining mechanism to extend
- * library/package.tcl: the default [tclPkgUnknown]. [Bug 627660]
- * library/tclIndex: [Patch 624509] (steffen)
+2010-12-20 Jan Nijtmans <nijtmans@users.sf.net>
-2002-10-26 David Gravereaux <davygrvy@pobox.com>
+ * win/configure.in: Explicitely test for intrinsics support in
+ compiler, before assuming only MSVC has it.
+ * win/configure: (autoconf-2.59)
+ * generic/tclPanic.c:
- * win/makefile.vc: xcopy on NT 4.0 doesn't support the /Y switch
- (overwrite). Added logic to handle this. [Bug 618019]
+2010-12-19 Jan Nijtmans <nijtmans@users.sf.net>
-2002-10-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * win/tclWin32Dll.c: [Patch 3059922]: fixes for mingw64 - gcc4.5.1
+ tdm64-1: Fixed for gcc, not yet for MSVC 64-bit.
- * generic/tclInt.h: Removed definitions of obsolete HistoryEvent
- and HistoryRev structures (the history mechanism has been written
- in Tcl for some time now.)
+2010-12-17 Stuart Cassoff <stwo@users.sourceforge.net>
-2002-10-22 Jeff Hobbs <jeffh@ActiveState.com>
+ * unix/Makefile.in: Remove unwanted/obsolete 'ddd' target.
- *** 8.4.1 TAGGED FOR RELEASE ***
+2010-12-17 Stuart Cassoff <stwo@users.sourceforge.net>
- * changes: updated for 8.4.1 release
+ * unix/Makefile.in: Clean up '.PHONY:' targets: Arrange those
+ common to Tcl and Tk as in Tk's Makefile.in,
+ add any missing ones and remove duplicates.
- * win/Makefile.in: removed @MEM_DEBUG_FLAGS@ subst.
- * win/configure: regen
- * win/configure.in: removed SC_ENABLE_MEMDEBUG call
- * win/tcl.m4: replaced SC_ENABLE_MEMDEBUG with a more intelligent
- SC_ENABLE_SYMBOLS that takes yes|no|mem|compile|all as options now.
+2010-12-17 Stuart Cassoff <stwo@users.sourceforge.net>
-2002-10-22 Daniel Steffen <das@users.sourceforge.net>
+ * unix/Makefile.in: [Bug 2446711]: Remove 'allpatch' target.
- * library/auto.tcl (tcl_findLibrary):
- * library/package.tcl (tclPkgUnknown): on macosx, search inside the
- Resources/Scripts subdirectory of any potential package directory
- * macosx/Tcl.pbproj/project.pbxproj: add standard Frameworks dirs
- to TCL_PACKAGE_PATH make argument.
- * unix/tclUnixInit.c (TclpSetVariables): on macosx, add embedded
- framework dirs to tcl_pkgPath: @executable_path/../Frameworks and
- @executable_path/../PrivateFrameworks (if they exist), as well as
- the dirs in DYLD_FRAMEWORK_PATH (if set). [Patch #624509]
- use standard MAXPATHLEN instead of literal 1024
+2010-12-17 Stuart Cassoff <stwo@users.sourceforge.net>
-2002-10-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/Makefile.in: [Bug 2537626]: Use 'rpmbuild', not 'rpm'.
- * doc/StringObj.3, doc/Object.3: Documented that Tcl_Obj's
- standard string form is a modified UTF-8; apparently, this was not
- mentioned anywhere in the main docs, and lead to [Bug 624919].
+2010-12-16 Jan Nijtmans <nijtmans@users.sf.net>
-2002-10-21 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclPanic.c: [Patch 3124554]: Move WishPanic from Tk to Tcl
+ * win/tclWinFile.c: Better communication with debugger, if present.
- * macosx/Tcl.pbproj/project.pbxproj: bumped version to 8.4.1
- * generic/tcl.h: Added reminder comment to edit
- macosx/Tcl.pbproj/project.pbxproj when version number changes.
+2010-12-15 Kevin B. Kenny <kennykb@acm.org>
-2002-10-18 Jeff Hobbs <jeffh@ActiveState.com>
+ [dogeen-assembler-branch]
- * library/reg/pkgIndex.tcl:
- * win/configure:
- * win/configure.in:
- * win/Makefile.in:
- * win/makefile.vc:
- * win/makefile.bc: Updated to reg1.1
+ * tclAssembly.c:
+ * assemble.test: Reworked beginCatch/endCatch handling to
+ enforce the more severe (but more correct) restrictions on catch
+ handling that appeared in the discussion of [Bug 3098302] and in
+ tcl-core traffic beginning about 2010-10-29.
- * doc/registry.n: Added support for broadcasting changes to
- * tests/registry.test: the registry Environment. Noted proper code
- * win/tclWinReg.c: in the docs. [Patch #625453]
+2010-12-15 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/Makefile.in (dist): add any mac/tcl*.sea.hqx files
+ * generic/tclPanic.c: Restore abort() as it was before.
+ * win/tclWinFile.c: [Patch 3124554]: Use ExitProcess() here, like
+ in wish.
-2002-10-17 Don Porter <dgp@users.sourceforge.net>
+2010-12-14 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclVar.c: Fixed code that check for proper # of args to
- * tests/var.test: [array names]. Added test. [Bug 624755]
+ * generic/tcl.h: [Bug 3137454]: Tcl CVS HEAD does not build on GCC 3.
-2002-10-16 Jeff Hobbs <jeffh@ActiveState.com>
+2010-12-14 Reinhard Max <max@suse.de>
- * win/configure: add workaround for cygwin windres
- * win/tcl.m4 (SC_CONFIG_CFLAGS): problem. [Patch #624010] (howell)
+ * win/tclWinSock.c (CreateSocket): Swap the loops over
+ * unix/tclUnixSock.c (CreateClientSocket): local and remote addresses,
+ so that the system's address preference for the remote side decides
+ which family gets tried first. Cleanup and clarify some of the
+ comments.
-2002-10-15 Jeff Hobbs <jeffh@ActiveState.com>
+2010-12-13 Jan Nijtmans <nijtmans@users.sf.net>
- * README: added archives.tcl.tk note
+ * generic/tcl.h: [Bug 3135271]: Link error due to hidden
+ * unix/tcl.m4: symbols (CentOS 4.2)
+ * unix/configure: (autoconf-2.59)
+ * win/tclWinFile.c: Undocumented feature, only meant to be used by
+ Tk_Main. See [Patch 3124554]: Move WishPanic from Tk to Tcl
- * unix/configure:
- * unix/tcl.m4: Correct AIX-5 ppc build flags.
- Correct HP 11 64-bit gcc building. [Patch #601051] (martin)
+2010-12-12 Stuart Cassoff <stwo@users.sourceforge.net>
+
+ * unix/tcl.m4: Better building on OpenBSD.
+ * unix/configure: (autoconf-2.59)
+
+2010-12-10 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug 3129448]: Possible over-allocation on
+ * generic/tclCkalloc.c: 64-bit platforms, part 2
+ * generic/tclCompile.c:
+ * generic/tclHash.c:
+ * generic/tclInt.h:
+ * generic/tclIO.h:
+ * generic/tclProc.c:
+
+2010-12-10 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: Make sure [fcopy -size ... -command ...] always
+ * tests/io.test: calls the callback asynchronously, even for size
+ zero.
-2002-10-15 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-12-10 Jan Nijtmans <nijtmans@users.sf.net>
+ * generic/tclBinary.c: Fix gcc -Wextra warning: missing initializer
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
* generic/tclCmdMZ.c:
- * tests/trace.test: applied patch from Hemang Levana to fix
- [Bug #615043] in execution traces with idle tasks firing.
+ * generic/tclDictObj.c:
+ * generic/tclIndexObj.c:
+ * generic/tclIOCmd.c:
+ * generic/tclVar.c:
+ * win/tcl.m4: Fix manifest-generation for 64-bit gcc
+ (mingw-w64)
+ * win/configure.in: Check for availability of intptr_t and
+ uintptr_t
+ * win/configure: (autoconf-2.59)
+ * generic/tclInt.decls: Change 1st param of TclSockMinimumBuffers
+ * generic/tclIntDecls.h: to ClientData, and TclWin(Get|Set)SockOpt
+ * generic/tclIntPlatDecls.h:to SOCKET, because on Win64 those are
+ * generic/tclIOSock.c: 64-bit, which does not fit.
+ * win/tclWinSock.c:
+ * unix/tclUnixSock.c:
-2002-10-14 Jeff Hobbs <jeffh@ActiveState.com>
+2010-12-09 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclEnv.c (Tcl_PutEnv): correct possible mem leak.
- [Patch #623269] (brouwers)
+ * tests/fCmd.test: Improve sanity of constraints now that we don't
+ support anything before Windows 2000.
-2002-10-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclCmdAH.c (TclInitFileCmd, TclMakeFileCommandSafe, ...):
+ Break up [file] into an ensemble. Note that the ensemble is safe in
+ itself, but the majority of its subcommands are not.
+ * generic/tclFCmd.c (FileCopyRename,TclFileDeleteCmd,TclFileAttrsCmd)
+ (TclFileMakeDirsCmd): Adjust these subcommand implementations to work
+ inside an ensemble.
+ (TclFileLinkCmd, TclFileReadLinkCmd, TclFileTemporaryCmd): Move these
+ subcommand implementations from tclCmdAH.c, where they didn't really
+ belong.
+ * generic/tclIOCmd.c (TclChannelNamesCmd): Move to more appropriate
+ source file.
+ * generic/tclEnsemble.c (TclMakeEnsemble): Start of code to make
+ partially-safe ensembles. Currently does not function as expected due
+ to various shortcomings in how safe interpreters are constructed.
+ * tests/cmdAH.test, tests/fCmd.test, tests/interp.test: Test updates
+ to take into account systematization of error messages.
- * generic/tcl.h: Need a different strategy through the maze of
- #defines to let people building with Cygwin build correctly. Also
- made some comments less misleading...
+ * tests/append.test, tests/appendComp.test: Clean up tests so that
+ they don't leave things in the global environment (detected when doing
+ -singleproc testing).
-2002-10-10 Jeff Hobbs <jeffh@ActiveState.com>
+2010-12-07 Donal K. Fellows <dkf@users.sf.net>
- * README: fixed minor nits [Bug #607776] (virden)
+ * tests/fCmd.test, tests/safe.test, tests/uplevel.test,
+ * tests/upvar.test, tests/var.test: Convert more tests to tcltest2 and
+ factor them to be easier to understand.
- * win/configure:
- * win/tcl.m4: enable USE_THREAD_ALLOC (new threaded allocator) by
- default in cygwin configure on Windows.
+ * generic/tclStrToD.c: Tidy up code so that more #ifdef-fery is
+ quarantined at the front of the file and function headers follow the
+ modern Tcl style.
-2002-10-10 Don Porter <dgp@users.sourceforge.net>
+2010-12-06 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/Tcl.n: Clarified that namespace separators are legal in
- the variable names during $-subtitution. [Bug 615139]
-
- * doc/regexp.n: Typo correction. Thanks Ronnie Brunner. [Bug 606826]
+ * generic/tclBinary.c: [Bug 3129448]: Possible over-allocation on
+ * generic/tclCkalloc.c: 64-bit platforms.
+ * generic/tclTrace.c:
-2002-10-10 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-12-05 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclLoadAout.c
- * unix/tclLoadDl.c
- * unix/tclLoadDld.c
- * unix/tclLoadDyld.c
- * unix/tclLoadNext.c
- * unix/tclLoadOSF.c
- * unix/tclLoadShl.c
- * win/tclWinLoad.c: allow either full paths or simply dll names
- to be specified when loading files (the latter will be looked
- up by the OS on your PATH/LD_LIBRARY_PATH as appropriate).
- Fixes [Bug 611108]
+ * unix/tcl.m4: [Patch 3116490]: Cross-compile support for unix
+ * unix/configure: (autoconf-2.59)
-2002-10-09 Jeff Hobbs <jeffh@ActiveState.com>
+2010-12-03 Jeff Hobbs <jeffh@ActiveState.com>
- * unix/README: doc'ed --enable-symbols options.
- * unix/Makefile.in: removed @MEM_DEBUG_FLAGS@ subst.
- * unix/configure: regen
- * unix/configure.in: removed SC_ENABLE_MEMDEBUG call
- * unix/tcl.m4: replaced SC_ENABLE_MEMDEBUG with a more intelligent
- SC_ENABLE_SYMBOLS that takes yes|no|mem|compile|all as options now.
+ * generic/tclUtil.c (TclReToGlob): Add extra check for multiple inner
+ *s that leads to poor recursive glob matching, defer to original RE
+ instead. tclbench RE var backtrack.
-2002-10-09 Kevin B. Kenny <kennykb@acm.org>
+2010-12-03 Jan Nijtmans <nijtmans@users.sf.net>
- * win/tclWinTime.c: Added code to set an exit handler that
- terminates the thread that calibrates the performance counter, so
- that the thread won't outlive unloading the Tcl DLL. [Tcl bug
- 620735].
+ * generic/tclUtil.c: Silence gcc warning when using -Wwrite-strings
+ * generic/tclStrToD.c: Silence gcc warning for non-IEEE platforms
+ * win/Makefile.in: [Patch 3116490]: Cross-compile Tcl mingw32 on unix
+ * win/tcl.m4: This makes it possible to cross-compile Tcl/Tk for
+ * win/configure.in: Windows (either 32-bit or 64-bit) out-of-the-box
+ * win/configure: on UNIX, using mingw-w64 build tools (If Itcl,
+ tdbc and Thread take over the latest tcl.m4, they can do that too).
+
+2010-12-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (SetPrecisionLimits, TclDoubleDigits):
+ [Bug 3124675]: Added meaningless initialization of 'i', 'ilim' and
+ 'ilim1' to silence warnings from the C compiler about possible use of
+ uninitialized variables, Added a panic to the 'switch' that assigns
+ them, to assert that the 'default' case is impossible.
+
+2010-12-01 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclBasic.c: Fix gcc 64-bit warnings: cast from pointer to
+ * generic/tclHash.c: integer of different size.
+ * generic/tclTest.c:
+ * generic/tclThreadTest.c:
+ * generic/tclStrToD.c: Fix gcc(-4.5.2) warning: 'static' is not at
+ beginning of declaration.
+ * generic/tclPanic.c: Allow Tcl_Panic() to enter the debugger on win32
+ * generic/tclCkalloc.c: Use Tcl_Panic() in stead of duplicating the
+ code.
-2002-10-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-11-30 Jeff Hobbs <jeffh@ActiveState.com>
- * doc/binary.n: More clarification of [binary scan]'s behaviour.
+ * generic/tclInt.decls, generic/tclInt.h, generic/tclIntDecls.h:
+ * generic/tclStubInit.c: TclFormatInt restored at slot 24
+ * generic/tclUtil.c (TclFormatInt): restore TclFormatInt func from
+ 2005-07-05 macro-ization. Benchmarks indicate it is faster, as a key
+ int->string routine (e.g. int-indexed arrays).
-2002-10-09 Daniel Steffen <das@users.sourceforge.net>
+2010-11-29 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tclIntDecls.h: fixed botched regen.
+ * generic/tclBasic.c: Patch by Miguel, providing a
+ [::tcl::unsupported::inject coroname command args], which prepends
+ ("injects") arbitrary code to a suspended coro's future resumption.
+ Neat for debugging complex coros without heavy instrumentation.
-2002-10-09 Daniel Steffen <das@users.sourceforge.net>
+2010-11-29 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclStrToD.c:
+ * generic/tclTest.c:
+ * generic/tclTomMath.decls:
+ * generic/tclUtil.c:
+ * tests/util.test:
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc: Rewrite of Tcl_PrintDouble and TclDoubleDigits that
+ (a) fixes a severe performance problem with floating point shimmering
+ reported by Karl Lehenbauer, (b) allows TclDoubleDigits to generate
+ the digit strings for 'e' and 'f' format, so that it can be used for
+ tcl_precision != 0 (and possibly later for [format]), (c) fixes [Bug
+ 3120139] by making TclPrintDouble inherently locale-independent, (d)
+ adds test cases to util.test for correct rounding in difficult cases
+ of TclDoubleDigits where fixed- precision results are requested. (e)
+ adds test cases to util.test for the controversial aspects of [Bug
+ 3105247]. As a side effect, two more modules from libtommath
+ (bn_mp_set_int.c and bn_mp_init_set_int.c) are brought into the build,
+ since the new code uses them.
- * generic/tclInt.decls: made TclSetPreInitScript() declaration
- generic as it is used on mac & aqua as well.
* generic/tclIntDecls.h:
- * generic/tclStubInit.c: regen.
- * generic/tclCompile.h: added prototype for TclCompileVariableCmd.
+ * generic/tclStubInit.c:
+ * generic/tclTomMathDecls.h: Regenerated.
- * mac/tclMacPort.h: removed incorrect <fcntl.h> definitions
- and obsolete <stat.h> definitions.
- * mac/tclMacChan.c: removed obsolete GetOpenMode() and replaced
- associated constants with the <fcntl.h> analogues (they existing
- defs were inconsistent with <fcntl.h> which was causing havoc when
- Tcl_GetOpenMode was used instead of private GetOpenMode).
+2010-11-24 Donal K. Fellows <dkf@users.sf.net>
- * mac/tclMacFCmd.c: removed GenerateUniqueName(), use equivalent
- (and identically named) routine from MoreFiles instead.
+ * tests/chanio.test, tests/iogt.test, tests/ioTrans.test: Convert more
+ tests to tcltest2 and factor them to be easier to understand.
- * mac/tclMacLoad.c: CONSTification, fixes to Vince's last changes.
+2010-11-20 Donal K. Fellows <dkf@users.sf.net>
- * mac/tclMacFile.c:
- * mac/tclMacTest.c:
- * mac/tclMacUnix.c: CONSTification.
+ * tests/chanio.test: Converted many tests to tcltest2 by marking the
+ setup and cleanup parts as such.
- * mac/tclMacOSA.c: CONSTification, sprintf fixes, UH 3.4.x changes;
- fix for missing autoname token from TclOSACompileCmd. (bdesgraupes)
- * mac/AppleScript.html(AppleScript delete): doc fix. (bdesgraupes)
+2010-11-19 Jan Nijtmans <nijtmans@users.sf.net>
- * mac/tcltkMacBuildSupport.sea.hqx: updated MoreFiles to 1.5.3,
- updated build instructions for 8.4.
- * mac/tclMacProjects.sea.hqx: rebuilt archive.
+ * win/tclWin32Dll.c: Fix gcc warnings: unused variable 'registration'
+ * win/tclWinChan.c:
+ * win/tclWinFCmd.c:
-2002-10-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-11-18 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/Alloc.3: Added a note to mention that attempting to allocate
- a zero-length block can return NULL. [Tk bug 619544]
+ * win/tclAppInit.c: [FRQ 491789]: "setargv() doesn't support a unicode
+ cmdline" now implemented for cygwin and mingw32 too.
+ * tests/main.test: No longer disable tests Tcl_Main-1.4 and 1.6 on
+ Windows, because those now work on all supported platforms.
+ * win/configure.in: Set NO_VIZ=1 when zlib is compiled in libtcl,
+ this resolves compiler warnings in 64-bit and static builds.
+ * win/configure (regenerated)
-2002-10-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-11-18 Donal K. Fellows <dkf@users.sf.net>
- * doc/binary.n: Doc improvements [Patch 616480]
+ * doc/file.n: [Bug 3111298]: Typofix.
- * tests/fCmd.test, tests/winFCmd.test:
- * tools/eolFix.tcl, tools/genStubs.tcl: [file exist] -> [file exists]
- Thanks to David Welton.
+ * tests/oo.test: [Bug 3111059]: Added testing that neatly trapped this
+ issue.
-2002-10-03 Don Porter <dgp@users.sourceforge.net>
+2010-11-18 Miguel Sofer <msofer@users.sf.net>
- * doc/tcltest.n: fixed typo [Bug 618018]. Thanks to "JJM".
+ * generic/tclNamesp.c: [Bug 3111059]: Fix leak due to bad looping
+ construct.
-2002-10-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-11-17 Jan Nijtmans <nijtmans@users.sf.net>
- * tools/man2help2.tcl:
- * tests/http.test, tests/httpd, tests/httpold.test:
- * tests/env.test, tests/binary.test, tests/autoMkindex.test:
- * library/init.tcl, library/http/http.tcl: [info exist] should
- really be [info exists]. [Bug 602566]
+ * win/tcl.m4: [FRQ 491789]: "setargv() doesn't support a unicode
+ cmdline" now implemented for mingw-w64
+ * win/configure (re-generated)
- * doc/lsearch.n: Better specification of what happens when -sorted
- is mixed with other options. [Bug 617816]
+2010-11-16 Jan Nijtmans <nijtmans@users.sf.net>
-2002-10-01 Jeff Hobbs <jeffh@ActiveState.com>
+ * win/tclAppInit.c:Bring compilation under mingw-w64 a bit closer
+ * win/cat.c: to reality. See for what's missing:
+ * win/tcl.m4: <https://sourceforge.net/apps/trac/mingw-w64/wiki/Unicode%20apps>
+ * win/configure: (re-generated)
+ * win/tclWinPort.h: [Bug 3110161]: Extensions using TCHAR don't
+ compile on VS2005 SP1
- * generic/tclProc.c (TclCreateProc): mask out VAR_UNDEFINED for
- precompiled locals to support 8.3 precompiled code.
- (Tcl_ProcObjCmd): correct 2002-09-26 fix to look for tclProcBodyType.
+2010-11-15 Andreas Kupries <andreask@activestate.com>
-2002-10-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * doc/interp.n: [Bug 3081184]: TIP #378.
+ * doc/tclvars.n: Performance fix for TIP #280.
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+ * tests/info.test:
+ * tests/interp.test:
- * doc/socket.n: Mentioned that ports may be specified as serivce
- names as well as integers. [Bug 616843]
+2010-11-10 Andreas Kupries <andreask@activestate.com>
-2002-09-30 Jeff Hobbs <jeffh@ActiveState.com>
+ * changes: Updates for 8.6b2 release.
- * generic/tclCompCmds.c (TclCompileRegexpCmd): correct the
- checking for bad re's that didn't terminate the re string.
- Resultant compiles were correct, but much slower than necessary.
+2010-11-09 Donal K. Fellows <dkf@users.sf.net>
-2002-09-29 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclOOMethod.c (ProcedureMethodVarResolver): [Bug 3105999]:
+ * tests/oo.test: Make sure that resolver structures that are
+ only temporarily needed get squelched.
- * win/tclAppInit.c: Added proper exiting conditions using Win32
- console signals. This handles the existing lack of a Ctrl+C exit
- to call exit handlers when built for thread support. Also, properly
- handles exits from other conditions such as CTRL_CLOSE_EVENT,
- CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT signals. In all cases,
- exit handlers will be called. [Bug 219355]
+2010-11-05 Jan Nijtmans <nijtmans@users.sf.net>
- * win/makefile.vc: Added missing tclThreadAlloc.c to the build
- rules and defines USE_THREAD_ALLOC when TCL_THREADS is defined
- to get the new behavior by default.
+ * generic/tclMain.c: Thanks, Kevin, for the fix, but this how it was
+ supposed to be (TCL_ASCII_MAIN is only supposed to be defined on
+ WIN32).
-2002-09-27 Don Porter <dgp@users.sourceforge.net>
+2010-11-05 Kevin B. Kenny <kennykb@acm.org>
- * README: Bumped to version 8.4.1 to avoid confusion
- * generic/tcl.h: of CVS snapshots with the actual 8.4.0
- * tools/tcl.wse.in: release.
- * unix/configure.in:
- * unix/tcl.spec:
- * win/configure.in:
+ * generic/tclMain.c: Added missing conditional on _WIN32 around code
+ that messes around with the definition of _UNICODE, to correct a badly
+ broken Unix build from Jan's last commit.
- * unix/configure: autoconf
- * win/configure:
+2010-11-04 Jan Nijtmans <nijtmans@users.sf.net>
-2002-09-26 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclDecls.h: [FRQ 491789]: "setargv() doesn't support a
+ * generic/tclMain.c: unicode cmdline" implemented for Tcl on MSVC++
+ * doc/Tcl_Main.3:
+ * win/tclAppInit.c:
+ * win/makefile.vc:
+ * win/Makefile.in:
+ * win/tclWin32Dll.c: Eliminate minor MSVC warning TCHAR -> char
+ conversion
- * unix/configure: regen.
- * unix/tcl.m4: improve AIX-4/5 64bit compilation support.
+2010-11-04 Reinhard Max <max@suse.de>
- * generic/tclProc.c (Tcl_ProcObjCmd): correct overeager
- optimization of noop proc to handle the precompiled case. (sofer)
+ * tests/socket.test: Run the socket tests three times with the address
+ family set to any, inet, and inet6 respectively. Use constraints to
+ skip the tests if a family is found to be unsupported or not
+ configured on the local machine. Adjust the tests to dynamically adapt
+ to the address family that is being tested.
- * unix/ldAix (nmopts): add -X32_64 to make it work for 32 or 64bit
- mode compilation.
+ Rework some of the tests to speed them up by avoiding (supposedly)
+ unneeded [after]s.
- * library/encoding/koi8-u.enc: removed extraneous spaces that
- confused encoding reader. [Bug #615115]
+2010-11-04 Stuart Cassoff <stwo@users.sourceforge.net>
- * unix/Makefile.in: generate source dists with -src designator and
- do not generate .Z anymore (just .gz and .zip).
+ * unix/Makefile.in: [Patch 3101127]: Installer Improvements.
+ * unix/install-sh:
-2002-09-18 Mumit Khan <khan@nanotech.wisc.edu>
+2010-11-04 Donal K. Fellows <dkf@users.sf.net>
- Added basic Cygwin support.
+ * tests/error.test (error-19.13): Another variation on testing for
+ issues in [try] compilation.
- * win/tcl.m4 (SC_PATH_TCLCONFIG): Support one-tree build.
- (SC_PATH_TKCONFIG): Likewise.
- (SC_PROG_TCLSH): Likewise.
- (SC_CONFIG_CFLAGS): Assume real Cygwin port and remove -mno-cygwin
- flags. Add -mwin32 to extra_cflags and extra_ldflags.
- Remove ``-e _WinMain@16'' from LDFLAGS_WINDOW.
- * win/configure.in: Allow Cygwin build.
- (SEH test): Define to be 1 instead of empty value.
- (EXCEPTION_DISPOSITION): Add test.
- * win/configure: Regenerate.
+ * doc/Tcl.n (Variable substitution): [Bug 3099086]: Increase clarity
+ of explanation of what characters are actually permitted in variable
+ substitutions. Note that this does not constitute a change of
+ behavior; it is just an improvement of explanation.
- * generic/tcl.h: Don't explicitly define __WIN32__ for Cygwin, let
- the user decide whether to use Windows or POSIX personality.
- (TCL_WIDE_INT_TYPE, TCL_LL_MODIFIER, struct Tcl_StatBuf): Define
- for Cygwin.
- * generic/tclEnv.c (Tcl_CygwinPutenv): putenv replacement for
- Cygwin.
- * generic/tclFileName.c (Tcl_TranslateFileName): Convert POSIX
- to native format.
- (TclDoGlob): Likewise.
- * generic/tclPlatDecls.h (TCHAR): Define for Cygwin.
- * win/tclWinPort.h (putenv, TclpSysAlloc, TclpSysFree,
- TclpSysRealloc): Define for Cygwin.
+2010-11-04 Don Porter <dgp@users.sourceforge.net>
-2002-09-26 Daniel Steffen <das@users.sourceforge.net>
+ * changes: Updates for 8.6b2 release. (Thanks Andreas Kupries)
- * macosx/Makefile: preserve environment value of INSTALL_ROOT.
- When embedding only use deployment build. Force relink before
- embedded build to ensure new linker flags are picked up.
+2010-11-03 Jan Nijtmans <nijtmans@users.sf.net>
- * macosx/Tcl.pbproj/project.pbxproj: add symbolic links to
- debug lib, stub libs and tclConfig.sh in framework toplevel.
- Configure target dependency fix. Fix to 'clean' action. Added
- private tcl headers to framework. Install tclsh symbolic link.
- Html doc build works when no installed tclsh available. Made
- html doc structure in framework more like in Apple frameworks.
+ * win/tclWinFcmd.c: [FRQ 2965056]: Windows build with -DUNICODE
+ * win/tclWinFile.c: (more clean-ups for pre-win2000 stuff)
+ * win/tclWinReg.c:
-2002-09-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-11-03 Donal K. Fellows <dkf@users.sf.net>
- * unix/tcl.m4 (SC_TCL_64BIT_FLAGS): Yet more robust 64-bit value
- detection to close [Bug 613117] on more systems.
+ * generic/tclCmdMZ.c (TryPostBody): Ensure that errors when setting
+ * tests/error.test (error-19.1[12]): message/opt capture variables get
+ reflected properly to the caller.
- * generic/tclCompile.c (TclPrintSource): More CONSTifying.
- * generic/tclExecute.c (EvalStatsCmd): Object-ify to reduce
- warnings. Thanks to 'CoderX2' on the chat for bringing this to my
- attention...
+2010-11-03 Kevin B. Kenny <kennykb@acm.org>
- * unix/tcl.m4: Forgot to define TCL_WIDE_INT_IS_LONG at the
- appropriate moment. I believe this is the cause of [Bug 613117]
+ * generic/tclCompCmds.c (TclCompileCatchCmd): [Bug 3098302]:
+ * tests/compile.test (compile-3.6): Reworked the compilation of the
+ [catch] command so as to avoid placing any code that might throw an
+ exception (specifically, any initial substitutions or any stores to
+ result or options variables) between the BEGIN_CATCH and END_CATCH but
+ outside the exception range. Added a test case that panics on a stack
+ smash if the change is not made.
- * doc/lset.n: Changed 'list' to 'varName' for consistency with
- lappend documentation. Thanks to Glenn Jackman [Bug 611719]
+2010-11-01 Stuart Cassoff <stwo@users.sourceforge.net>
-2002-09-22 Don Porter <dgp@users.sourceforge.net>
+ * library/safe.tcl: Improved handling of non-standard module path
+ * tests/safe.test: lists, empty path lists in particular.
- * library/tcltest/tcltest.tcl: Corrected [puts -nonewline] within
- test bodies. Thanks to Harald Kirsch. [Bug 612786, Patch 612788]
- Also corrected reporting of body return code. Thanks to David
- Taback [Bug 611922]
- * library/tcltest/pkgIndex.tcl: Bump to version 2.2.1.
- * tests/tcltest.test: added tests for these bugs.
+2010-11-01 Kevin B. Kenny <kennykb@acm.org>
-2002-09-15 Mo DeJong <mdejong@users.sourceforge.net>
+ * library/tzdata/Asia/Hong_Kong:
+ * library/tzdata/Pacific/Apia:
+ * library/tzdata/Pacific/Fiji: Olson's tzdata2010o.
- * unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add PEEK_XCLOSEIM
- define under Linux. This is used by Tk to double
- check that an X input context is cleaned up
- before it is closed.
+2010-10-29 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
-2002-09-12 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclTimer.c: [Bug 2905784]: Stop small [after]s from
+ wasting CPU while keeping accuracy.
- * win/coffbase.txt: Added BLT to the virtual base address
- listings table should BLT's build tools decide to use it.
+2010-10-28 Kevin B. Kenny <kennykb@acm.org>
-2002-09-12 Daniel Steffen <das@users.sourceforge.net>
+ [dogeen-assembler-branch]
+ * generic/tclAssembly.c:
+ * tests/assembly.test (assemble-31.*): Added jump tables.
- * generic/tcl.h:
- * mac/tclMacApplication.r:
- * mac/tclMacLibrary.r:
- * mac/tclMacResource.r: unified use of the two equivalent
- resource compiler header inclusion defines RC_INVOKED and
- RESOURCE_INCLUDED, now use RC_INVOKED throughout.
+2010-10-28 Don Porter <dgp@users.sourceforge.net>
-2002-09-10 Mo DeJong <mdejong@users.sourceforge.net>
+ * tests/http.test: [Bug 3097490]: Make http-4.15 pass in
+ isolation.
- * unix/README: Add note about building extensions
- with the same compiler Tcl was built with.
- [Tk Bug 592096]
+ * unix/tclUnixSock.c: [Bug 3093120]: Prevent calls of
+ freeaddrinfo(NULL) which can crash some
+ systems. Thanks Larry Virden.
-2002-09-10 Daniel Steffen <das@users.sourceforge.net>
+2010-10-26 Reinhard Max <max@suse.de>
- * macosx/Tcl.pbproj/project.pbxproj: disabled building html
- documentation during embedded build.
+ * Changelog.2008: Split off from Changelog.
+ * generic/tclIOSock.c (TclCreateSocketAddress): The interp != NULL
+ check is needed for ::tcl::unsupported::socketAF as well.
-2002-09-10 Daniel Steffen <das@users.sourceforge.net>
+2010-10-26 Donal K. Fellows <dkf@users.sf.net>
- * unix/Makefile.in: added DYLIB_INSTALL_DIR variable for macosx
- and set it to default value ${LIB_RUNTIME_DIR}
- * unix/tcl.m4 (Darwin): use DYLIB_INSTALL_DIR instead of
- LIB_RUNTIME_DIR in the -install_name argument to ld.
- * unix/configure: regen.
+ * unix/tclUnixSock.c (TcpGetOptionProc): Prevent crash if interp is
+ * win/tclWinSock.c (TcpGetOptionProc): NULL (a legal situation).
- * macosx/Tcl.pbproj/project.pbxproj:
- * macosx/Makefile: added support for building Tcl as an embedded
- framework, i.e. using an dyld install_name containing
- @executable_path/../Frameworks via the new DYLIB_INSTALL_DIR
- unix/Makefile variable.
-
-2002-09-10 Jeff Hobbs <jeffh@ActiveState.com>
+2010-10-26 Reinhard Max <max@suse.de>
- *** 8.4.0 TAGGED FOR RELEASE ***
+ * unix/tclUnixSock.c (TcpGetOptionProc): Added support for
+ ::tcl::unsupported::noReverseDNS, which if set to any value, prevents
+ [fconfigure -sockname] and [fconfigure -peername] from doing
+ reverse DNS queries.
-2002-09-06 Don Porter <dgp@users.sourceforge.net>
+2010-10-24 Kevin B. Kenny <kennykb@acm.org>
- * doc/file.n: Format correction, and clarified [file normalize]
- returns an absolute path.
+ [dogeen-assembler-branch]
+ * generic/tclAssembly.c:
+ * tests/assembly.test (assemble-17.15): Reworked branch handling so
+ that forward branches can use jump1 (jumpTrue1, jumpFalse1). Added
+ test cases that the forward branches will expand to jump4, jumpTrue4,
+ jumpFalse4 when needed.
- * doc/tcltest.n: Added examples section, as long promised.
+2010-10-23 Kevin B. Kenny <kennykb@acm.org>
-2002-09-06 Reinhard Max <max@suse.de>
+ [dogeen-assembler-branch]
+ * generic/tclAssembly.h (removed):
+ Removed file that was included in only one
+ source file.
+ * generictclAssembly.c: Inlined tclAssembly.h.
- * tests/tcltest.test: Added nonRoot flag to tests 8.3, 8.4, and 8.12.
+2010-10-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
-2002-09-05 Don Porter <dgp@users.sourceforge.net>
+ * doc/info.n: [Patch 2995655]:
+ * generic/tclBasic.c: Report inner contexts in [info errorstack]
+ * generic/tclCompCmds.c:
+ * generic/tclCompile.c:
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * tests/error.test:
+ * tests/result.test:
- * doc/tcltest.n: Clarified phrasing.
+2010-10-20 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclBasic.c (TclRenameCommand,CallCommandTraces):
- * tests/trace.test (trace-27.1): Corrected memory leak when a rename
- trace deleted the command being traced. Test added. Thanks to
- Hemang Lavana for the fix. [Bug 604609]
+ * generic/tclCompCmds.c (TclCompileDictForCmd): Update the compilation
+ * generic/tclCompile.c (tclInstructionTable): of [dict for] so that
+ * generic/tclExecute.c (TEBCresume): it no longer makes any
+ use of INST_DICT_DONE now that's not needed, and make it clearer in
+ the implementation of the instruction that it's just a deprecated form
+ of unset operation. Followup to my commit of 2010-10-16.
- * generic/tclVar.c (TclDeleteVars): Corrected logic for setting the
- TCL_INTERP_DESTROYED flag when calling variable traces. [Tk Bug 605121]
+2010-10-19 Donal K. Fellows <dkf@users.sf.net>
-2002-09-04 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclZlib.c (Tcl_ZlibStreamGet): [Bug 3081008]: Ensure that
+ when a bytearray gets its internals entangled with zlib for more than
+ a passing moment, that bytearray will never be shimmered away. This
+ increases the amount of copying but is simple to get right, which is a
+ reasonable trade-off.
- * generic/tclVar.c (DeleteArray): leak plug [Bug 604239]. Thanks
- to dkf and dgp for the long and difficult discussion in the chat.
+ * generic/tclStringObj.c (Tcl_AppendObjToObj): Added some special
+ cases so that most of the time when you build up a bytearray by
+ appending, it actually ends up being a bytearray rather than
+ shimmering back and forth to string.
-2002-09-03 Jeff Hobbs <jeffh@ActiveState.com>
+ * tests/http11.test (check_crc): Use a simpler way to express the
+ functionality of this procedure.
- * generic/tclVar.c (Tcl_UpVar2): code cleanup to not use goto
+ * generic/tclZlib.c: Purge code that wrote to the object returned by
+ Tcl_GetObjResult, as we don't want to do that anti-pattern no more.
- * unix/configure: remove -pthread from LIBS on FreeBSD in thread
- * unix/tcl.m4: enabled build. [Bug #602849]
+2010-10-18 Jan Nijtmans <nijtmans@users.sf.net>
-2002-09-03 Miguel Sofer <msofer@users.sourceforge.net>
+ * tools/uniParse.tcl: [Bug 3085863]: tclUniData was 9 years old;
+ Ignore non-BMP characters and fix comment about UnicodeData.txt file.
+ * generic/regcomp.c: Fix comment
+ * tests/utf.test: Add some Unicode 6 testcases
- * generic/tclInterp.c (AliasCreate): a Tcl_Obj was leaked on error
- return from TclPreventAliasLoop.
-
-2002-09-03 Daniel Steffen <das@users.sourceforge.net>
+2010-10-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * macosx/Tcl.pbproj/project.pbxproj: Bumped version number to
- 8.4.0 and updated copyright info.
+ * doc/info.n: Document [info errorstack] faithfully.
-2002-09-03 Miguel Sofer <msofer@users.sourceforge.net>
+2010-10-16 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclVar.c (Tcl_UpVar2): a Tcl_Obj was being leaked on
- error return from TclGetFrame.
+ * generic/tclExecute.c (ReleaseDictIterator): Factored out the release
+ of the bytecode-level dictionary iterator information so that the
+ side-conditions on instruction issuing are simpler.
-2002-09-03 Don Porter <dgp@users.sourceforge.net>
+2010-10-15 Jan Nijtmans <nijtmans@users.sf.net>
- * changes: Updated changes for 8.4.0 release.
+ * generic/reg_locale.c: [Bug 3085863]: tclUniData 9 years old: Updated
+ * generic/tclUniData.c: Unicode tables to latest UnicodeData.txt,
+ * tools/uniParse.tcl: corresponding with Unicode 6.0 (except for
+ out-of-range chars > 0xFFFF)
-2002-09-02 Jeff Hobbs <jeffh@ActiveState.com>
+2010-10-13 Don Porter <dgp@users.sourceforge.net>
- * unix/tclUnixFile.c (TclpObjLink): removed unnecessary/unfreed
- extra native char*.
+ * generic/tclCompile.c: Alternative fix for [Bugs 467523,983660] where
+ * generic/tclExecute.c: sharing of empty scripts is allowed again.
- * unix/tclUnixChan.c (Tcl_MakeTcpClientChannel): make sure to init
- flags field of TcpState ptr to 0.
+2010-10-13 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/configure:
- * unix/tcl.m4: added 64-bit gcc compilation support on HP-11.
- [Patch #601051] (martin)
+ * win/tclWinThrd.h: (removed) because it is just empty en used nowhere
+ * win/tcl.dsp
- * README: Bumped version number to 8.4.0
- * generic/tcl.h:
- * tools/tcl.wse.in:
- * unix/configure:
- * unix/configure.in:
- * unix/tcl.spec:
- * win/README.binary:
+2010-10-12 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/uniClass.tcl: Spacing and comments: let uniClass.tcl
+ * generic/regc_locale.c: generation match better the current
+ (hand-modified) regc_locale.c
+ * tools/uniParse.tcl: Generate proper const qualifiers for
+ * generic/tclUniData.c: tclUniData.c
+
+2010-10-12 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixSock.c (CreateClientSocket): [Bug 3084338]: Fix a
+ memleak and refactor the calls to freeaddrinfo().
+
+2010-10-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: [FRQ 2965056]: Windows build with -DUNICODE
+ * win/tclWinReg.c:
+ * win/tclWinTest.c: More cleanups
+ * win/tclWinFile.c: Add netapi32 to the link line, so we no longer
+ * win/tcl.m4: have to use LoadLibrary to access those
+ functions.
+ * win/makefile.vc:
+ * win/configure: (Re-generate with autoconf-2.59)
+ * win/rules.vc Update for VS10
+
+2010-10-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Fix overallocation of exec stack in TEBC (due
+ to mixing numwords and numbytes)
+
+2010-10-08 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIOSock.c: On Windows, use gai_strerrorA
+
+2010-10-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/winPipe.test: Test hygiene with makeFile and removeFile.
+
+ * generic/tclCompile.c: [Bug 3081065]: Prevent writing to the intrep
+ * tests/subst.test: fields of a freed Tcl_Obj.
+
+2010-10-06 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * generic/tclAssembly.c:
+ * generic/tclAssembly.h:
+ * tests/assemble.test: Added catches. Still needs a lot of testing.
+
+2010-10-02 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * generic/tclAssembly.c:
+ * generic/tclAssembly.h:
+ * tests/assemble.test: Added dictAppend, dictIncrImm, dictLappend,
+ dictSet, dictUnset, nop, regexp, nsupvar, upvar, and variable.
+
+2010-10-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TEBCresume): [Bug 3079830]: Added invalidation
+ of string representations of dictionaries in some cases.
+
+2010-10-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclExecute.c (EvalStatsCmd): change 'evalstats' to return
+ data to interp by default, or if given an arg, use that as filename to
+ output to (accepts 'stdout' and 'stderr'). Fix output to print used
+ inst count data.
+ * generic/tclCkalloc.c: Change TclDumpMemoryInfo sig to allow objPtr
+ * generic/tclInt.decls: as well as FILE* as output.
+ * generic/tclIntDecls.h:
+
+2010-10-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c, generic/tclClock.c, generic/tclEncoding.c,
+ * generic/tclEnv.c, generic/tclLoad.c, generic/tclNamesp.c,
+ * generic/tclObj.c, generic/tclRegexp.c, generic/tclResolve.c,
+ * generic/tclResult.c, generic/tclUtil.c, macosx/tclMacOSXFCmd.c:
+ More purging of strcpy() from locations where we already know the
+ length of the data being copied.
+
+2010-10-01 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * tests/assemble.test:
+ * generic/tclAssemble.h:
+ * generic/tclAssemble.c: Added listIn, listNotIn, and dictGet.
+
+2010-09-30 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * tests/assemble.test: Added tryCvtToNumeric and several more list
+ * generic/tclAssemble.c: operations.
+ * generic/tclAssemble.h:
+
+2010-09-29 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * tests/assemble.test: Completed conversion of tests to a
+ * generic/tclAssemble.c: "white box" structure that follows the
+ C code. Added missing safety checks on the operands of 'over' and
+ 'reverse' so that negative operand counts don't smash the stack.
+
+2010-09-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/configure: Re-generate with autoconf-2.59
* win/configure:
- * win/configure.in:
+ * generic/tclMain.c: Make compilable with -DUNICODE as well
+
+2010-09-28 Reinhard Max <max@suse.de>
+
+ TIP #162 IMPLEMENTATION
+
+ * doc/socket.n: Document the changes to the [socket] and
+ [fconfigure] commands.
+
+ * generic/tclInt.h: Introduce TclCreateSocketAddress() as a
+ * generic/tclIOSock.c: replacement for the platform-dependent
+ * unix/tclUnixSock.c: TclpCreateSocketAddress() functions. Extend
+ * unix/tclUnixChan.c: the [socket] and [fconfigure] commands to
+ * unix/tclUnixPort.h: behave as proposed in TIP #162. This is the
+ * win/tclWinSock.c: core of what is required to support the use of
+ * win/tclWinPort.h: IPv6 sockets in Tcl.
+
+ * compat/fake-rfc2553.c: A compat implementation of the APIs defined
+ * compat/fake-rfc2553.h: in RFC-2553 (getaddrinfo() and friends) on
+ top of the existing gethostbyname() etc.
+ * unix/configure.in: Test whether the fake-implementation is
+ * unix/tcl.m4: needed.
+ * unix/Makefile.in: Add a compile target for fake-rfc2553.
+
+ * win/configure.in: Allow cross-compilation by default.
+
+ * tests/socket.test: Improve the test suite to make more use of
+ * tests/remote.tcl: randomized ports to reduce interference with
+ tests running in parallel or other services on
+ the machine.
+
+2010-09-28 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * tests/assemble.test: Added more "white box" tests.
+ * generic/tclAssembly.c: Added the error checking and reporting
+ for undefined labels. Revised code so that no pointers into the
+ bytecode sequence are held (because the sequence can move!),
+ that no Tcl_HashEntry pointers are held (because the hash table
+ doesn't guarantee their stability!) and to eliminate the BBHash
+ table, which is merely additional information indexed by jump
+ labels and can just as easily be held in the 'label' structure.
+ Renamed shared structures to CamelCase, and renamed 'label' to
+ JumpLabel because other types of labels may eventually be possible.
+
+2010-09-27 Kevin B. Kenny <kennykb@acm.org>
+
+ [dogeen-assembler-branch]
+
+ * tests/assemble.test: Added more "white box" tests.
+ * generic/tclAssembly.c: Fixed bugs exposed by the new tests.
+ (a) [eval] and [expr] had incorrect stack balance computed if
+ the arg was not a simple word. (b) [concat] accepted a negative
+ operand count. (c) [invoke] accepted a zero or negative operand
+ count. (d) more misspelt error messages.
+ Also replaced a funky NRCallTEBC with the new call
+ TclNRExecuteByteCode, necessitated by a merge with changes on the
+ HEAD.
+
+2010-09-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Patch 3072080] (minus the itcl
+ * generic/tclCmdIL.c: update): a saner NRE.
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c: This makes TclNRExecuteByteCode (ex TEBC)
+ * generic/tclCompile.h: to be a normal NRE citizen: it loses its
+ * generic/tclExecute.c: special status.
+ * generic/tclInt.decls: The logic flow within the BC engine is
+ * generic/tclInt.h: simplified considerably.
+ * generic/tclIntDecls.h:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * generic/tclTest.c:
- * generic/tclInterp.c (SlaveCreate): make sure that the memory and
- checkmem commands are initialized in non-safe slave interpreters
- when TCL_MEM_DEBUG is used. [Bug #583445]
+ * generic/tclVar.c: Use the macro HasLocalVars everywhere
- * win/tclWinConsole.c (ConsoleCloseProc): only wait on writable
- pipe if there was something to write. This may prevent infinite
- wait on exit.
+2010-09-26 Miguel Sofer <msofer@users.sf.net>
- * tests/exec.test: marked exec-18.1 unixOnly until the Windows
- incompatability (in the test, not the core) can be resolved.
+ * generic/tclOOMethod.c (ProcedureMethodVarResolver): avoid code
+ duplication, let the runtime var resolver call the compiled var
+ resolver.
- * tests/http.test (http-3.11): added close $fp that was causing an
- error on Windows because the file was not closed before deleting.
+2010-09-26 Kevin B. Kenny <kennykb@acm.org>
- * unix/tclUnixInit.c (Tcl_MacOSXGetLibraryPath): made this static
- function only appear when HAVE_CFBUNDLE is defined.
+ [dogeen-assembler-branch]
-2002-08-31 Daniel Steffen <das@users.sourceforge.net>
+ * tests/assemble.test: Added many new tests moving toward a more
+ comprehensive test suite for the assembler.
+ * generic/tclAssembly.c: Fixed bugs exposed by the new tests:
+ (a) [bitnot] and [not] had incorrect operand counts. (b)
+ INST_CONCAT cannot concatenate zero objects. (c) misspelt error
+ messages. (d) the "assembly code" internal representation lacked
+ a duplicator, which caused double-frees of the Bytecode object
+ if assembly code ever was duplicated.
- * unix/tcl.m4: added TK_SHLIB_LD_EXTRAS analogue of existing
- TCL_SHLIB_LD_EXTRAS for linker settings only used when linking Tk.
+2010-09-25 Kevin B. Kenny <kennykb@acm.org>
- * unix/configure: regen
+ [dogeen-assembler-branch]
-2002-08-31 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclAssembly.c: Massive refactoring of the assembler
+ * generic/tclAssembly.h: to use a Tcl-like syntax (and use
+ * tests/assemble.test: Tcl_ParseCommand to parse it). The
+ * tests/assemble1.bench: refactoring also ensures that
+ Tcl_Tokens in the assembler have string ranges inside the source
+ code, which allows for [eval] and [expr] assembler directives
+ that simply call TclCompileScript and TclCompileExpr recursively.
- *** macosx-8-4-branch merged into the mainline [tcl patch #602770] ***
+2010-09-24 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tcl.decls: added new macosx specific entry to stubs table.
+ * tests/stringComp.test: improved string eq/cmp test coverage
+ * generic/tclExecute.c (TclExecuteByteCode): merge INST_STR_CMP and
+ INST_STR_EQ/INST_STR_NEQ paths. Speeds up eq/ne/[string eq] with
+ obj-aware comparisons and eq/==/ne/!= with length equality check.
- * tools/genStubs.tcl: added generation of platform guards for
- macosx. This is a little more complex than it seems, because MacOS
- X IS "unix" plus a little bit, for the purposes of Tcl. BUT
- unfortunately, Tk uses "unix" to mean X11. So added platform keys
- for macosx (the little added to "unix"), "aqua" and "x11" to
- distinguish these for Tk.
-
- * generic/tcl.h: added a #ifnded RESOURCE_INCLUDED so that tcl.h
- can be passed to the resource compiler.
-
- * generic/tcl.h:
- * generic/tclNotify.c: added a few Notifier procs, to be able to
- modify more bits of the Tcl notifier dynamically. Required to get
- Mac OS X Tk to live on top of the Tcl Unix threaded notifier.
- Changes the size of the Tcl_NotifierProcs structure, but doesn't
- move any elements around.
+2010-09-24 Andreas Kupries <andreask@activestate.com>
+
+ * tclWinsock.c: [Bug 3056775]: Fixed race condition between thread and
+ internal co-thread access of a socket's structure because of the
+ thread not using the socketListLock in TcpAccept(). Added
+ documentation on how the module works to the top.
- * unix/tclUnixNotfy.c: moved the call to Tcl_ConditionNotify till
- AFTER we are done mucking with the pointer swap. Fixes cases where
- the thread waiting on the condition wakes & accesses the
- waitingListPtr before it gets reset, causing a hang.
+2010-09-23 Jan Nijtmans <nijtmans@users.sf.net>
- * library/auto.tcl (tcl_findLibrary): added checking the
- directories in the tcl_pkgPath for library files on macosx to
- enable support of the standard Mac OSX library locations
+ * generic/tclDecls.h: Make Tcl_SetPanicProc and Tcl_GetStringResult
+ * unix/tclAppInit.c: callable without stubs, just as Tcl_SetVar.
+ * win/tclAppInit.c:
+2010-09-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c: Fix cases where value returned by
+ * generic/tclEvent.c: Tcl_GetReturnOptions() was leaked.
+ * generic/tclMain.c: Thanks to Jeff Hobbs for discovery of the
+ anti-pattern to seek and destroy.
+
+2010-09-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclAppInit.c: Make compilable with -DUNICODE (not activated
+ * win/tclAppInit.c: yet), many clean-ups in comments.
+
+2010-09-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute: [Bug 3072640]: One more DECACHE_STACK_INFO() was
+ missing.
+
+ * tests/execute.test: Added execute-10.3 for [Bug 3072640]. The test
+ causes a mem failure.
+
+ * generic/tclExecute: Protect all possible writes to ::errorInfo or
+ ::errorCode with DECACHE_STACK_INFO(), as they could run traces. The
+ new calls to be protected are Tcl_ResetResult(), Tcl_SetErrorCode(),
+ IllegalExprOperandType(), TclExprFloatError(). The error was triggered
+ by [Patch 3072080].
+
+2010-09-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tcl.m4: Add kernel32 to LIBS, so the link line for
+ * win/configure: mingw is exactly the same as for MSVC++.
+
+2010-09-21 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclExecute.c (TclExecuteByteCode):
+ * generic/tclOOMethod.c (ProcedureMethodCompiledVarConnect):
+ * generic/tclVar.c (TclLookupSimpleVar, CompareVarKeys):
+ * generic/tclPathObj.c (Tcl_FSGetNormalizedPath, Tcl_FSEqualPaths):
+ * generic/tclIOUtil.c (TclFSCwdPointerEquals): peephole opt
+ * generic/tclResult.c (TclMergeReturnOptions): Use memcmp where
+ applicable as possible speedup on some libc variants.
+
+2010-09-21 Kevin B. Kenny <kennykb@acm.org>
+
+ [BRANCH: dogeen-assembler-branch]
+
+ * generic/tclAssembly.c (new file):
+ * generic/tclAssembly.h:
+ * generic/tclBasic.c (builtInCmds, Tcl_CreateInterp):
+ * generic/tclInt.h:
+ * tests/assemble.test (new file):
+ * tests/assemble1.bench (new file):
* unix/Makefile.in:
- * unix/configure.in:
- * unix/tcl.m4: added MAC_OSX_DIR. Added PLAT_OBJS to the OBJS:
- there are some MacOS X specific files now for Tcl, and when I get
- he resource & applescript stuff ported over, and restore support
- for FindFiles, etc, there will be a few more.
- Added LD_LIBRARY_PATH_VAR configure variable to avoid having to set
- all possible LD_LIBRARY_PATH analogues on all platforms.
- LD_LIBRARY_PATH_VAR is "LD_LIBRARY_PATH" by default, "LIBPATH" on
- AIX, "SHLIB_PATH" on HPUX and "DYLD_LIBRARY_PATH" on Mac OSX.
- Added configure option to package Tcl as a framework on Mac OSX.
+ * win/Makefile.in:
+ * win/Makefile.vc:
+ Initial commit of Ozgur Dogan Ugurlu's (SF user: dogeen)
+ assembler for the Tcl bytecode language.
- * macosx/tclMacOSXBundle.c (new): support for finding Tcl extension
- packaged as 'bundles' in the standard Mac OSX library locations.
+2010-09-21 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclUnixInit.c: added support for findig the tcl script
- library inside Tcl packaged as a framework on Mac OSX.
+ * win/tclWinFile.c: Fix declaration after statement.
+ * win/tcl.m4: Add -Wdeclaration-after-statement, so this
+ * win/configure: mistake cannot happen again.
+ * win/tclWinFCmd.c: [Bug 3069278]: Breakage on head Windows
+ * win/tclWinPipe.c: triggered by install-tzdata, final fix
- * macosx/Tcl.pbproj/jingham.pbxuser (new):
- * macosx/Tcl.pbproj/project.pbxproj (new): project for Apple's
- ProjectBuilder IDE.
+2010-09-20 Jan Nijtmans <nijtmans@users.sf.net>
- * macosx/Makefile (new): simple makefile for building the project
- from the command line via the ProjectBuilder tool 'pbxbuild'.
+ * win/tclWinFCmd.c: Eliminate tclWinProcs->useWide everywhere, since
+ * win/tclWinFile.c: the value is always "1" on platforms >win95
+ * win/tclWinPipe.c:
- * unix/configure:
- * generic/tclStubInit.c:
- * generic/tclPlatDecls.h: regen
+2010-09-19 Donal K. Fellows <dkf@users.sf.net>
-2002-08-29 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ * doc/file.n (file readlink): [Bug 3070580]: Typofix.
- * win/tclWinThrd.c (TclpFinalizeThreadData, TclWinFreeAllocCache):
- Applied patch for bug #599428, provided by Miguel Sofer
- <msofer@users.sourceforge.net>.
+2010-09-18 Jan Nijtmans <nijtmans@users.sf.net>
-2002-08-28 David Gravereaux <davygrvy@pobox.com>
+ * win/tclWinFCmd.c [Bug 3069278]: Breakage on head Windows triggered
+ by install-tzdata. Temporary don't compile this with -DUNICODE, while
+ investigating this bug.
- * generic/tclEnv.c:
- * unix/configure.in:
- * win/tclWinPort.h: putenv() on some systems copies the buffer
- rather than taking reference to it. This causes memory leaks
- and is know to effect mswindows (msvcrt) and NetBSD 1.5.2 . This
- patch tests for this behavior and turns on -DHAVE_PUTENV_THAT_COPIES=1
- when approriate. Thanks to David Welton for assistance.
- [Bug 414910]
+2010-09-16 Jeff Hobbs <jeffh@ActiveState.com>
- * unix/configure: regen'd
+ * win/tclWinFile.c: Remove define of FINDEX_INFO_LEVELS as all
+ supported versions of compilers should now have it.
-2002-08-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/Makefile.in: Do not pass current build env vars when using
+ NATIVE_TCLSH in targets.
- * doc/eval.n: Added mention of list command and corrected "SEE ALSO".
+2010-09-16 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/configure.in: Cache handling of ac_cv_type_socklen_t was
- wrong. [Bug 600931] reported by John Ellson. Fixed by putting the
- brackets where they belong.
+ * generic/tclDecls.h: Make Tcl_FindExecutable() work in UNICODE
+ * generic/tclEncoding.c: compiles (windows-only) as well as ASCII.
+ * generic/tclStubInit.c: Needed for [FRQ 491789]: setargv() doesn't
+ support a unicode cmdline.
-2002-08-26 Miguel Sofer <msofer@users.sourceforge.net>
+2010-09-15 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclCompCmds.c: fix for [Bug 599788] (error in element
- name causing segfault), reported by Tom Wilkason. Fixed by copying
- the tokens instead of the source string.
+ * generic/tclBinary.c (TclAppendBytesToByteArray): [Bug 3067036]: Make
+ sure we never try to double zero repeatedly to get a buffer size. Also
+ added a check for sanity on the size of buffer being appended.
-2002-08-26 Miguel Sofer <msofer@users.sourceforge.net>
+2010-09-15 Don Porter <dgp@users.sourceforge.net>
- * generic/tclThreadAlloc.c: small optimisation, reducing the
- new allocator's overhead.
-
-2002-08-23 Miguel Sofer <msofer@users.sourceforge.net>
+ * unix/Makefile.in: Revise `make dist` target to tolerate the
+ case of zero bundled packages.
- * generic/tclObj.c (USE_THREAD_ALLOC): fixed leak [Bug 597936].
- Thanks to Zoran Vasiljevic.
+2010-09-15 Jan Nijtmans <nijtmans@users.sf.net>
-2002-08-23 Miguel Sofer <msofer@users.sourceforge.net>
+ * tools/genStubs.tcl: [Patch 3034251]: Backport ttkGenStubs.tcl
+ * generic/tcl.decls: features to genStubs.tcl. Make the "generic"
+ * generic/tclInt.decls: argument in the *.decls files optional
+ * generic/tclOO.decls: (no change to any tcl*Decls.h files)
+ * generic/tclTomMath.decls:
+ This allows genStubs.tcl to generate the ttk stub files as well, while
+ keeping full compatibility with existing *.decls files.
- * generic/tclThreadAlloc.c (USE_THREAD_ALLOC): moving objects
- between caches as a block, instead of one-by-one.
+2010-09-14 Jan Nijtmans <nijtmans@users.sf.net>
-2002-08-22 Miguel Sofer <msofer@users.sourceforge.net>
+ * win/tclWinPort.h: Allow all Win2000+ API entries in Tcl
+ * win/tclWin32Dll.c: Eliminate dynamical loading of advapi23 and
+ kernel32 symbols.
- * generic/tclBasic.c:
- * generic/tclCmdMZ.c: fix for freed memory r/w in delete traces
- [Bug 589863], patch by Hemang Lavana.
+2010-09-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinChan.c: Various clean-ups, converting from
+ * win/tclWinConsole.c: tclWinProc->xxxProc directly to Xxx
+ * win/tclWinInit.c: (no change in functionality)
+ * win/tclWinLoad.c:
+ * win/tclWinSerial.c:
+ * win/tclWinSock.c:
+ * tools/genStubs.tcl: Add scspec feature from ttkGenStubs.tcl
+ (no change in output for *Decls.h files)
-2002-08-20 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2010-09-10 Jan Nijtmans <nijtmans@users.sf.net>
- * win/Makefile.in (CFLAGS):
- * unix/Makefile.in (MEM_DEBUG_FLAGS): Added usage of @MEM_DEBUG_FLAGS@.
- * win/configure.in:
- * unix/configure.in: Added usage of SC_ENABLE_MEMDEBUG.
+ * win/tclWin32Dll.c: Partly revert yesterday's change, to make it work
+ on VC++ 6.0 again.
+
+2010-09-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/regsub.n: [Bug 3063568]: Fix for gotcha in example due to Tcl's
+ special handling of backslash-newline. Makes example slightly less
+ pure, but more useful.
+
+2010-09-09 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/makefile.vc: Mingw should always link with -ladvapi32.
* win/tcl.m4:
- * unix/tcl.m4: Added macro SC_ENABLE_MEMDEBUG. Allows a user of
- configure to (de)activate memory validation and debugging
- (TCL_MEM_DEBUG). No need to modify the makefile anymore.
+ * win/configure: (regenerated)
+ * win/tclWinInt.h: Remove ascii variant of tkWinPocs table, it is
+ * win/tclWin32Dll.c: no longer necessary. Fix CreateProcess signature
+ * win/tclWinPipe.c: and remove unused GetModuleFileName and lstrcpy.
+ * win/tclWinPort.h: Mingw/cygwin fixes: <tchar.h> should always be
+ included, and fix conflict in various macro values: Always force the
+ same values as in VC++.
-2002-08-20 Don Porter <dgp@users.sourceforge.net>
+2010-09-08 Don Porter <dgp@users.sourceforge.net>
- * generic/tclCkalloc.c: CONSTified MemoryCmd and CheckmemCmd.
+ * win/tclWinChan.c: [Bug 3059922]: #ifdef protections to permit
+ * win/tclWinFCmd.c: builds with mingw on amd64 systems. Thanks to
+ "mescalinum" for reporting and testing.
- * README: Bumped version number to 8.4b3 to distinguish
- * generic/tcl.h: HEAD from the 8.4b2 release.
- * tools/tcl.wse.in:
- * unix/configure.in:
- * unix/tcl.spec:
- * win/README.binary:
- * win/configure.in:
+2010-09-08 Andreas Kupries <andreask@activestate.com>
- * unix/configure: autoconf
- * win/configure:
+ * doc/tm.n: Added underscore to the set of characters accepted in
+ module names. This is true for quite some time in the code, this
+ change catches up the documentation.
- * library/http/http.tcl: Corrected installation directory of
- * library/msgcat/msgcat.tcl: the package tcltest 2.2. Added
- * library/opt/optparse.tcl: comments in other packages to remind
- * library/tcltest/tcltest.tcl: that installation directories need
- * unix/Makefile.in: updates to match increasing version
- * win/Makefile.in: numbers. [Bug 597450]
- * win/makefile.bc:
- * win/makefile.vc:
+2010-09-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (plus-pkgs): Improve the package
+ documentation search pattern to support the doctoos-generated
+ directory structure.
+ * tools/tcltk-man2html-utils.tcl (output-name): Made this more
+ resilient against misformatted NAME sections, induced by import of
+ Thread package documentation into Tcl doc tree.
+
+2010-09-02 Andreas Kupries <andreask@activestate.com>
+
+ * doc/glob.n: Fixed documentation ambiguity regarding the handling
+ of -join.
+
+ * library/safe.tcl (safe::AliasGlob): Fixed another problem, the
+ option -join does not stop option processing in the core builtin, so
+ the emulation must not do that either.
+
+2010-09-01 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * library/safe.tcl (safe::AliasGlob): Moved the command extending the
+ actual glob command with a -directory flag to when we actually have a
+ proper untranslated path,
+
+2010-09-01 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclExecute.c: [Bug 3057639]: Applied patch by Jeff to make
+ * generic/tclVar.c: the behaviour of lappend in bytecompiled mode
+ * tests/append.test: consistent with direct-eval and 'append'
+ * tests/appendComp.test: generally. Added tests (append*-9.*)
+ showing the difference.
+
+2010-08-31 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/rules.vc: Typo (thanks to Twylite discovering
+ this)
+ * generic/tclStubLib.c: Revert to previous version: MSVC++ 6.0
+ * generic/tclTomMathStubLib.c:cannot handle the new construct.
+ * generic/tcl.decls [Patch 2997642]: Many type casts needed
+ * generic/tclDecls.h: when using Tcl_Pkg* API. Remaining part.
+ * generic/tclPkg.c:
+ * generic/tclBasic.c:
+ * generic/tclTomMathInterface.c:
+ * doc/PkgRequire.3
+
+2010-08-31 Andreas Kupries <andreask@activestate.com>
+
+ * win/tcl.m4: Applied patch by Jeff fixing issues with the manifest
+ handling on Win64.
+ * win/configure: Regenerated.
+
+2010-08-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Bugs 3046594,3047235,3048771]: New
+ * generic/tclCmdAH.c: implementation for [tailcall] command: it now
+ * generic/tclCmdMZ.c: schedules the command and returns TCL_RETURN.
+ * generic/tclExecute.c: This fixes all issues with [catch] and [try].
+ * generic/tclInt.h: Thanks dgp for exploring the dark corners.
+ * generic/tclNamesp.c: More thorough testing is required.
+ * tests/tailcall.test:
+
+2010-08-30 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: [FRQ 2965056]: Windows build with -DUNICODE
+ * win/rules.vc:
+ * win/tclWinFCmd.c: Make sure that allocated TCHAR arrays are
+ * win/tclWinFile.c: always properly aligned as wchar_t, and
+ * win/tclWinPipe.c: not bigger than necessary.
+ * win/tclWinSock.c:
+ * win/tclWinDde.c: Those 3 files are not converted yet to be
+ * win/tclWinReg.c: built with -DUNICODE, so add a TODO.
+ * win/tclWinTest.c:
+ * generic/tcl.decls: [Patch 2997642]: Many type casts needed when
+ * generic/tclDecls.h: using Tcl_Pkg* API. Partly.
+ * generic/tclPkg.c:
+ * generic/tclStubLib.c: Demonstration how this change can benefit
+ code.
+ * generic/tclTomMathStubLib.c:
+ * doc/PkgRequire.3:
+
+2010-08-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n: [Bug 3046999]: Corrected cross reference to array
+ manpage to refer to (correct) existing subcommand.
+
+2010-08-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure, unix/tcl.m4: SHLIB_LD_LIBS='${LIBS}' for OSF1-V*.
+ Add /usr/lib64 to set of auto-search dirs. [Bug 1230554]
+ (SC_PATH_X): Correct syntax error when xincludes not found.
+
+ * win/Makefile.in (VC_MANIFEST_EMBED_DLL VC_MANIFEST_EMBED_EXE):
+ * win/configure, win/configure.in, win/tcl.m4: SC_EMBED_MANIFEST
+ macro and --enable-embedded-manifest configure arg added to support
+ manifest embedding where we know the magic. Help prevents DLL hell
+ with MSVC8+.
+
+2010-08-24 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls: [Bug 3007895]: Tcl_(Find|Create)HashEntry
+ * generic/tclHash.c: stub entries can never be called.
+ * generic/tclDecls.h:
+ * generic/tclStubInit.c: [Patch 2994165]: Change signature of
+ Tcl_FSGetNativePath and TclpDeleteFile follow-up: move stub entry back
+ to original location.
+
+2010-08-23 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/Asia/Gaza: Olson's tzdata2010l.
+
+2010-08-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclBasic.c: [Patch 3009403]: Signature of Tcl_GetHashKey,
+ * generic/tclBinary.c: Tcl_(Create|Find)HashEntry follow-up:
+ * generic/tclCmdIL.c: Remove many type casts which are no longer
+ * generic/tclCompile.c:necessary as a result of this signature change.
+ * generic/tclDictObj.c:
+ * generic/tclEncoding.c:
+ * generic/tclExecute.c:
+ * generic/tclInterp.c:
+ * generic/tclIOCmd.c:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * generic/tclTest.c:
+ * generic/tclTrace.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+
+2010-08-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/linsert.n: [Bug 3045123]: Make description of what is actually
+ happening more accurate.
+
+2010-08-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: [Patch 3034251]: Backport ttkGenStubs.tcl
+ features to genStubs.tcl, partly: Use void (*reserved$i)(void) = 0
+ instead of void *reserved$i = NULL for unused stub entries, in case
+ pointer-to-function and pointer-to-object are different sizes.
+ * generic/tcl*Decls.h: (regenerated)
+ * generic/tcl*StubInit.c:(regenerated)
+
+2010-08-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/Method.3: Fix definition of Tcl_MethodType.
+
+2010-08-19 Donal K. Fellows <dkf@users.sf.net>
-2002-08-19 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ * generic/tclTrace.c (TraceExecutionObjCmd, TraceCommandObjCmd)
+ (TraceVariableObjCmd): [Patch 3048354]: Use memcpy() instead of
+ strcpy() to avoid buffer overflow; we have the correct length of data
+ to copy anyway since we've just allocated the target buffer.
- * unix/tclUnixTest.c (TestfilehandlerCmd): Changed
- readable/writable to the more common readable|writable.
+2010-08-18 Jan Nijtmans <nijtmans@users.sf.net>
- Fixes SF #596034 reported by Larry Virden
- <lvirden@users.sourceforge.net>.
+ * tools/genStubs.tcl: [Patch 3034251]: Backport ttkGenStubs.tcl
+ features to genStubs.tcl, partly: remove unneeded ifdeffery and put
+ C++ guard around stubs pointer definition.
+ * generic/*Decls.h: (regenerated)
-2002-08-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-08-18 Miguel Sofer <msofer@users.sf.net>
- * tests/fCmd.test: Added test to make sure that the cause of the
- problem is detectable with an unpatched Tcl.
- * doc/ObjectType.3: Added note on the root cause of this problem
- to the documentation, since it is possible for user code to
- trigger this sort of behaviour too.
- * generic/tclIOUtil.c (SetFsPathFromAny): Objects should only have
- their old representation deleted when we know that we are about to
- install a new one. This stops a weird TclX bug under Linux with
- certain kinds of memory debugging enabled which essentally came
- down to a double-free of a string.
+ * generic/tclBasic.c: New redesign of [tailcall]: find
+ * generic/tclExecute.c: errors early on, so that errorInfo
+ * generic/tclInt.h: contains the proper info [Bug 3047235]
+ * generic/tclNamesp.c:
-2002-08-14 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclCmdAH.c (TclNRTryObjCmd): [Bug 3046594]: Block
+ tailcalling out of the body of a non-bc'ed [try].
+ * generic/tclBasic.c: Redesign of [tailcall] to
+ * generic/tclCmdAH.c: (a) fix [Bug 3047235]
+ * generic/tclCompile.h: (b) enable fix for [Bug 3046594]
+ * generic/tclExecute.c: (c) enable recursive tailcalls
* generic/tclInt.h:
- * generic/tclObj.c: (code cleanup) factored the parts in the macros
- TclNewObj() / TclDecrRefCount() into a common part for all
- memory allocators and two new macros TclAllocObjStorage() /
- TclFreeObjStorage() that are specific to each allocator and fully
- describe the differences. Removed allocator-specific code from
- tclObj.c by using the macros.
-
-2002-08-12 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclNamesp.c:
+ * tests/tailcall.test:
- * generic/tclCmdMZ.c: fixing UMR in delete traces, [Bug 589863].
-
-2002-08-08 David Gravereaux <davygrvy@pobox.com>
+2010-08-18 Donal K. Fellows <dkf@users.sf.net>
- * tools/man2help.tcl: Fixed $argv handling bug where if -bitmap
- wasn't specified $argc was off by one.
+ * library/safe.tcl (AliasGlob): [Bug 3004191]: Restore safe [glob] to
+ working condition.
-2002-08-08 Miguel Sofer <msofer@users.sourceforge.net>
+2010-08-15 Donal K. Fellows <dkf@users.sf.net>
- * tests/uplevel.test: added 6.1 to test [uplevel] with shadowed
- commands [Bug 524383]
+ * generic/tclProc.c (ProcWrongNumArgs): [Bug 3045010]: Make the
+ handling of passing the wrong number of arguments to [apply] somewhat
+ less verbose when a lambda term is present.
- * tests/subst.test: added 5.8-10 as further tests for [Bug 495207]
+2010-08-14 Jan Nijtmans <nijtmans@users.sf.net>
-2002-08-08 Don Porter <dgp@users.sourceforge.net>
+ * compat/unicows: Remove completely, see [FRQ 2819611].
+ * doc/FileSystem.3: [Patch 2994165]: Change signature of
+ * generic/tcl.decls Tcl_FSGetNativePath and TclpDeleteFile
+ * generic/tclDecls.h:
+ * generic/tclIOUtil.c:
+ * generic/tclStubInit.c:
+ * generic/tclInt.h:
+ * unix/tclUnixFCmd.c:
+ * win/tclWinFCmd.c:
+ * doc/Hash.3: [Patch 3009403]: Signature of Tcl_GetHashKey,
+ * generic/tcl.h: Tcl_(Create|Find)HashEntry
- * tests/README: Noted removal of defs.tcl.
+2010-08-11 Jeff Hobbs <jeffh@ActiveState.com>
-2002-08-08 Jeff Hobbs <jeffh@ActiveState.com>
+ * unix/ldAix: Remove ancient (pre-4.2) AIX support
+ * unix/configure: Regen with ac-2.59
+ * unix/configure.in, unix/tclConfig.sh.in, unix/Makefile.in:
+ * unix/tcl.m4 (AIX): Remove the need for ldAIX, replace with
+ -bexpall/-brtl. Remove TCL_EXP_FILE (export file) and other baggage
+ that went with it. Remove pre-4 AIX build support.
- * doc/lsearch.n: corrected lsearch docs to use -inline in examples.
+2010-08-11 Miguel Sofer <msofer@users.sf.net>
- *** 8.4b2 TAGGED FOR RELEASE ***
+ * generic/tclBasic.c (TclNRYieldToObjCmd):
+ * tests/coroutine.test: Fixed bad copypasta snafu. Thanks to Andy Goth
+ for finding the bug.
- * tests/fCmd.test:
- * tests/unixFCmd.test: updated tests for new link copy behavior.
- * generic/tclFCmd.c (CopyRenameOneFile): changed the behavior to
- follow links to endpoints and copy that file/directory instead of
- just copying the surface link. This means that trying to copy a
- link that has no endpoint (danling link) is an error.
- [Patch #591647] (darley)
- (CopyRenameOneFile): this is currently disabled by default until
- further issues with such behavior (like relative links) can be
- handled correctly.
+2010-08-10 Jeff Hobbs <jeffh@ActiveState.com>
- * tests/README: slight wording improvements
+ * generic/tclUtil.c (TclByteArrayMatch): Patterns may not be
+ null-terminated, so account for that.
-2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+2010-08-09 Don Porter <dgp@users.sourceforge.net>
- * docs/BoolObj.3: added description of valid string reps for a
- boolean object [Bug 584794]
- * generic/tclObj.c: optimised Tcl_GetBooleanFromObj and
- SetBooleanFromAny to avoid parsing the string rep when it can be
- avoided [Bugs 584650, 472576]
-
-2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+ * changes: Updates for 8.6b2 release.
- * generic/tclCompile.h:
- * generic/tclObj.c: making tclCmdNameType static ([Bug 584567],
- Don Porter).
-
-2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+2010-08-04 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclObj.c (Tcl_NewObj): added conditional code for
- USE_THREAD_ALLOC; objects allocated through Tcl_NewObj() were
- otherwise being leaked. [Bug 587488] reported by Sven Sass.
-
-2002-08-06 Daniel Steffen <das@users.sourceforge.net>
+ * win/Makefile.in, win/makefile.bc, win/makefile.vc, win/tcl.dsp:
+ * win/tclWinPipe.c (TclpCreateProcess):
+ * win/stub16.c (removed): Removed Win9x tclpip8x.dll build and 16-bit
+ application loader stub support. Win9x is no longer supported.
- * generic/tclInt.decls:
- * unix/tclUnixThrd.c: Added stubs and implementations for
- non-threaded build for the tclUnixThrd.c procs TclpReaddir,
- TclpLocaltime, TclpGmtime and TclpInetNtoa.
- Fixes link errors in stubbed & threaded extensions that include
- tclUnixPort.h and use any of the procs readdir, localtime,
- gmtime or inet_ntoa (e.g. TclX 8.4) [Bug 589526]
- * generic/tclIntPlatDecls.h:
- * generic/tclStubInit.c: Regen.
-
-2002-08-05 Don Porter <dgp@users.sourceforge.net>
-
- * library/tcltest/tcltest.tcl: The setup and cleanup scripts are now
- * library/tcltest/pkgIndex.tcl: skipped when a test is skipped, fixing
- * tests/tcltest.test: [Bug 589859]. Test for bug added, and
- corrected tcltest package bumped to version 2.2.
-
- * generic/tcl.decls: Restored Tcl_Concat to return (char *). Like
- * generic/tclDecls.h: Tcl_Merge, it transfers ownership of a dynamic
- * generic/tclUtil.c: allocated string to the caller.
-
-2002-08-04 Don Porter <dgp@users.sourceforge.net>
-
- * doc/CmdCmplt.3: Applied Patch 585105 to fully CONST-ify
- * doc/Concat.3: all remaining public interfaces of Tcl.
- * doc/CrtCommand.3: Notably, the parser no longer writes on
- * doc/CrtSlave.3: the string it is parsing, so it is no
- * doc/CrtTrace.3: longer necessary for Tcl_Eval() to be
- * doc/Eval.3: given a writable string. Also, the
- * doc/ExprLong.3: refactoring of the Tcl_*Var* routines
- * doc/LinkVar.3: by Miguel Sofer is included, so that the
- * doc/ParseCmd.3: "part1" argument for them no longer needs
- * doc/SetVar.3: to be writable either.
- * doc/TraceVar.3:
- * doc/UpVar.3: Compatibility support has been enhanced so
- * generic/tcl.decls that a #define of USE_NON_CONST will remove
- * generic/tcl.h all possible source incompatibilities with
- * generic/tclBasic.c the 8.3 version of the header file(s).
- * generic/tclCmdMZ.c The new #define of USE_COMPAT_CONST now does
- * generic/tclCompCmds.c what USE_NON_CONST used to do -- disable
- * generic/tclCompExpr.c only those new CONST's that introduce
- * generic/tclCompile.c irreconcilable incompatibilities.
- * generic/tclCompile.h
- * generic/tclDecls.h Several bugs are also fixed by this patch.
- * generic/tclEnv.c [Bugs 584051,580433] [Patches 585105,582429]
- * generic/tclEvent.c
- * generic/tclInt.decls
- * generic/tclInt.h
- * generic/tclIntDecls.h
- * generic/tclInterp.c
- * generic/tclLink.c
- * generic/tclObj.c
- * generic/tclParse.c
- * generic/tclParseExpr.c
- * generic/tclProc.c
- * generic/tclTest.c
- * generic/tclUtf.c
- * generic/tclUtil.c
- * generic/tclVar.c
- * mac/tclMacTest.c
- * tests/expr-old.test
- * tests/parseExpr.test
- * unix/tclUnixTest.c
- * unix/tclXtTest.c
- * win/tclWinTest.c
+ * win/tclWin32Dll.c (TclWinInit): Hard-enforce Windows 9x as an
+ unsupported platform with a panic. Code to support it still exists in
+ other files (to go away in time), but new APIs are being used that
+ don't exist on Win9x.
-2002-08-01 Miguel Sofer <msofer@users.sourceforge.net>
+ * unix/tclUnixFCmd.c: Adjust license header as per
+ ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
- * generic/tclExecute.c: bugfix (reading freed memory). Testsuite
- passed on linux/i386, compile-13.1 hung on linux/alpha.
+ * license.terms: Fix DFARs note for number-adjusted rights clause
-2002-08-01 Miguel Sofer <msofer@users.sourceforge.net>
+ * win/tclWin32Dll.c (asciiProcs, unicodeProcs):
+ * win/tclWinLoad.c (TclpDlopen): 'load' use LoadLibraryEx with
+ * win/tclWinInt.h (TclWinProcs): LOAD_WITH_ALTERED_SEARCH_PATH to
+ prefer dependent DLLs in same dir as loaded DLL.
- * generic/tclExecute.c: added a reference count for the complete
- execution stack, instead of Tcl_Preserve/Tcl_Release.
+ * win/Makefile.in (%.${OBJEXT}): better implicit rules support
-2002-08-01 Mo DeJong <mdejong@users.sourceforge.net>
+2010-08-04 Andreas Kupries <andreask@activestate.com>
- * generic/tclCkalloc.c (TclFinalizeMemorySubsystem):
- Don't lock the ckalloc mutex before invoking the
- Tcl_DumpActiveMemory function since it also
- locks the same mutex. This code is only executed
- when "memory onexit filename" has been executed
- and Tcl is compiled with -DTCL_MEM_DEBUG.
+ * generic/tclIORChan.c: [Bug 3034840]: Fixed reference counting in
+ * generic/tclIORTrans.c: InvokeTclMethod and callers.
+ * tests/ioTrans.test:
-2002-08-01 Reinhard Max <max@suse.de>
+2010-08-03 Andreas Kupries <andreask@activestate.com>
- * win/tclWinPort.h: The windows headers don't provide socklen_t,
- so we have to do it.
+ * tests/var.test (var-19.1): [Bug 3037525]: Added test demonstrating
+ the local hashtable deletion crash and fix.
-2002-07-31 Miguel Sofer <msofer@users.sourceforge.net>
+ * tests/info.test (info-39.1): Added forward copy of test in 8.5
+ branch about [Bug 2933089]. Should not fail, and doesn't, after
+ updating the line numbers to the changed position.
- * generic/tclInt.h (USE_THREAD_ALLOC): for unshared objects,
- TclDecrRefCount now frees the internal rep before the string rep -
- just like the non-macro Tcl_DecrRefCount/TclFreeObj [Bug 524802].
- For the other allocators the fix was done on 2002-03-06.
+2010-08-02 Kevin B. Kenny <kennykb@users.sf.net>
-2002-07-31 Miguel Sofer <msofer@users.sourceforge.net>
+ * library/tzdata/America/Bahia_Banderas:
+ * library/tzdata/Pacific/Chuuk:
+ * library/tzdata/Pacific/Pohnpei:
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/Europe/Helsinki:
+ * library/tzdata/Pacific/Ponape:
+ * library/tzdata/Pacific/Truk:
+ * library/tzdata/Pacific/Yap: Olson's tzdata2010k.
- * generic/tclInterp.c: signed/unsigned comparison warning fixed
- (Vince Darley).
+2010-08-02 Miguel Sofer <msofer@users.sf.net>
-2002-07-31 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclVar.c: Correcting bad port of [Bug 3037525] fix
- * unix/tcl.m4 (SC_BUGGY_STRTOD): Enabled caching of test results.
+2010-07-28 Miguel Sofer <msofer@users.sf.net>
- * unix/tcl.m4 (SC_BUGGY_STRTOD): Solaris 2.8 still has a buggy
- strtod() implementation; make sure we detect it.
+ * generic/tclVar.c: [Bug 3037525]: Lose fickle optimisation in
+ TclDeleteVars (used for runtime-created locals) that caused crash.
- * tests/expr.test (expr-22.*): Marked as non-portable because it
- seems that these tests have an annoying tendency to fail in
- unexpected ways. [Bugs 584825, 584950, 585986]
+2010-07-29 Jan Nijtmans <nijtmans@users.sf.net>
-2002-07-30 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ * compat/zlib/win32/README.txt: Official build of zlib1.dll 1.2.5 is
+ * compat/zlib/win32/USAGE.txt: finally available, so put it in.
+ * compat/zlib/win32/zlib1.dll:
- * tests/io.test:
- * generic/tclIO.c (WriteChars): Added flag to break out of loop if
- nothing of the input is consumed at all, to prevent infinite
- looping of called with a non-UTF-8 string. Fixes Bug 584603
- (partially). Added new test "io-60.1". Might need additional
- changes to Tcl_Main so that unprintable results are printed as
- binary data.
+2010-07-25 Donal K. Fellows <dkf@users.sf.net>
-2002-07-29 Mo DeJong <mdejong@users.sourceforge.net>
+ * doc/http.n: Corrected description of location of one of the entries
+ in the state array.
- * unix/Makefile.in: Use CC_SEARCH_FLAGS instead of
- LD_SEARCH_FLAGS when linking with ${CC}.
- * unix/configure: Regen.
- * unix/configure.in: Don't subst CC_SEARCH_FLAGS or
- LD_SEARCH_FLAGS since this is now done in tcl.m4.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Document and
- set CC_SEARCH_FLAGS whenever LD_SEARCH_FLAGS is set.
- [Tcl patch 588290]
+2010-07-24 Jan Nijtmans <nijtmans@users.sf.net>
-2002-07-29 Reinhard Max <max@suse.de>
+ * generic/tclDecls.h: [Bug 3029891]: Functions that don't belong in
+ * generic/tclTest.c: the stub table.
+ * generic/tclBasic.c: From [Bug 3030870] make itcl 3.x built with
+ pre-8.6 work in 8.6: Relax the relation between Tcl_CallFrame and
+ CallFrame.
- * unix/tcl.m4 (SC_SERIAL_PORT): Fixed detection for cases when
- configure's stdin is not a tty.
-
- * unix/tclUnixPort.h:
- * generic/tclIOSock.c: Changed size_t to socklen_t in
- socket-related function calls.
+2010-07-16 Donal K. Fellows <dkf@users.sf.net>
- * unix/configure.in: Added test and fallback definition
- for socklen_t.
-
- * unix/configure: generated.
+ * generic/tclBasic.c: Added more errorCode setting.
-2002-07-29 Miguel Sofer <msofer@users.sourceforge.net>
+2010-07-15 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclObj.c: fixed a comment
+ * generic/tclExecute.c (TclExecuteByteCode): Ensure that [dict get]
+ * generic/tclDictObj.c (DictGetCmd): always generates an errorCode on
+ a failure to look up an entry.
- * generic/tcl.h:
- * generic/tclBasic.c:
- * generic/tclInterp.c: added the new flag TCL_EVAL_INVOKE to
- the interface of the Tcl_Eval* functions, removing the
- TCL_EVAL_NO_TRACEBACK added yesterday: alias invocations not only
- require no tracebacks, but also look up the command name in the
- global scope - see new test interp-9.4
- * tests/interp.test: added 9.3 to test for safety of aliases to
- hidden commands, 9.4 to test for correct command lookup scope.
+2010-07-11 Pat Thoyts <patthoyts@users.sourceforge.net>
-2002-07-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/configure: (regenerated)
+ * unix/configure.in: For the NATIVE_TCLSH variable use the autoconf
+ * unix/Makefile.in: SC_PROG_TCLSH to try and find a locally installed
+ native binary. This avoids manually fixing up when cross compiling. If
+ there is not one, revert to using the build product.
- * generic/regc_locale.c (cclass): [[:xdigit:]] is only a defined
- concept on western characters, so should not allow any unicode
- digit, and hence number of ranges in [[:xdigit:]] is fixed.
- * tests/reg.test: Added test to detect the bug.
- * generic/regc_cvec.c (newcvec): Corrected initial size value in
- character vector structure. [Bug 578363] Many thanks to
- pvgoran@users.sf.net for tracking this down.
-
-2002-07-28 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tcl.h:
- * generic/tclBasic.c: added the new flag TCL_EVAL_NO_TRACEBACK to
- the interface of the Tcl_Eval* functions. Modified the error
- message for too many nested evaluations.
- * generic/tclInterp.h: changed the Alias struct to be of variable
- length and store the prefix arguments directly (instead of a
- pointer to a Tcl_Obj list). Made AliasObjCmd call Tcl_EvalObjv
- instead of TclObjInvoke - thus making aliases trigger execution
- traces [Bug 582522].
- * tests/interp.test:
- * tests/stack.test: adapted to the new error message.
- * tests/trace.test: added tests for aliases firing the exec
- traces.
+2010-07-02 Don Porter <dgp@users.sourceforge.net>
-2002-07-27 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tclInt.decs: Reverted to the original TIP 337
+ implementation on what to do with the obsolete internal stub for
+ TclBackgroundException() (eliminate it!)
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2010-07-02 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: [Bug 803489]: Tcl_FindNamespace problem in
+ * generic/tclIntDecls.h: the Stubs table
+ * generic/tclStubInit.c:
+
+2010-07-02 Donal K. Fellows <dkf@users.sf.net>
- * unix/Makefile.in: Revert fix for Tcl bug 529801
- since it was incorrect and broke the build on
- other systems. Fix Tcl bug 587299.
- Add MAJOR_VERSION, MINOR_VERSION, PATCH_LEVEL,
- SHLIB_LD_FLAGS, SHLIB_LD_LIBS, CC_SEARCH_FLAGS,
- LD_SEARCH_FLAGS, and LIB_FILE variables to support
- more generic library build/install rules.
- * unix/configure: Regen.
- * unix/configure.in: Move AC_PROG_RANLIB into
- tcl.m4. Move shared build test and setting
- of MAKE_LIB and MAKE_STUB_LIB into tcl.m4.
- Move subst of a number of variables into
- tcl.m4 where they are defined.
- * unix/tcl.m4 (SC_ENABLE_SYMBOLS, SC_CONFIG_CFLAGS):
- Subst vars where they are defined. Add MAKE_LIB,
- MAKE_STUB_LIB, INSTALL_LIB, and INSTALL_STUB_LIB
- rules to deal with the ugly details of running
- ranlib on static libs at build and install time.
- Replace TCL_SHLIB_LD_EXTRAS with SHLIB_LD_FLAGS
- and use it when building a shared library.
- * unix/tclConfig.sh.in: Add TCL_CC_SEARCH_FLAGS.
+ * generic/tclExecute.c (IllegalExprOperandType): [Bug 3024379]: Made
+ sure that errors caused by an argument to an operator being outside
+ the domain of the operator all result in ::errorCode being ARITH
+ DOMAIN and not NONE.
-2002-07-26 Miguel Sofer <msofer@users.sourceforge.net>
+2010-07-01 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclExecute.c: fixed Tcl_Obj leak in code corresponding
- to the macro NEXT_INST_V(x, 0, 1) [Bug 587495].
-
-2002-07-26 Miguel Sofer <msofer@users.sourceforge.net>
+ * win/rules.vc: [Bug 3020677]: wish can't link reg1.2
+ * tools/checkLibraryDoc.tcl: formatting, spacing, cleanup unused
+ * tools/eolFix.tcl: variables; no change in generated output
+ * tools/fix_tommath_h.tcl:
+ * tools/genStubs.tcl:
+ * tools/index.tcl:
+ * tools/man2help2.tcl:
+ * tools/regexpTestLib.tcl:
+ * tools/tsdPerf.tcl:
+ * tools/uniClass.tcl:
+ * tools/uniParse.tcl:
- * generic/tclVar.c (TclObjLookupVar): leak fix and improved
- comments.
+2010-07-01 Donal K. Fellows <dkf@users.sf.net>
-2002-07-26 Jeff Hobbs <jeffh@ActiveState.com>
+ * doc/mathop.n: [Bug 3023165]: Fix typo that was preventing proper
+ rendering of the exclusive-or operator.
- * generic/tclVar.c (TclLookupVar): removed early returns that
- prevented the parens from being restored. also removed goto label
- as it was not necessary.
+2010-06-28 Jan Nijtmans <nijtmans@users.sf.net>
-2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclPosixStr.c: [Bug 3019634]: errno.h and tclWinPort.h have
+ conflicting definitions. Added messages for ENOTRECOVERABLE, EOTHER,
+ ECANCELED and EOWNERDEAD, and fixed various typing mistakes in other
+ messages.
- * generic/tclExecute.c:
- * tests/expr-old.test: fix for erroneous error messages in [expr],
- [Bug 587140] reported by Martin Lemburg.
+2010-06-25 Reinhard Max <max@suse.de>
-2002-07-25 Joe English <jenglish@users.sourceforge.net>
- * generic/tclProc.c: fix for Tk Bug #219218 "error handling
- with bgerror in Tk"
+ * tests/socket.test: Prevent a race condition during shutdown of the
+ remote test server that can cause a hang when the server is being run
+ in verbose mode.
-2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+2010-06-24 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclExecute.c: restoring full TCL_COMPILE_DEBUG
- functionality.
+ * win/tclWinPort.h: [Bug 3019634]: errno.h and tclWinPort.h have
+ conflicting definitions.
-2002-07-24 Don Porter <dgp@users.sourceforge.net>
+ ***POTENTIAL INCOMPATIBILITY***
+ On win32, the correspondence between errno and the related error
+ message, as handled by Tcl_ErrnoMsg() changes. The error message is
+ kept the same, but the corresponding errno value might change.
- * tests/unixInit.test: relaxed unixInit-3.1 to accept iso8859-15
- as a valid C encoding. [Bug 575336]
+2010-06-22 Donal K. Fellows <dkf@users.sf.net>
-2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclCmdIL.c (Tcl_LsetObjCmd): [Bug 3019351]: Corrected wrong
+ args message.
- * generic/tclExecute.c: restoring the tcl_traceCompile
- functionality while I repair tcl_traceExec. The core now compiles
- and runs also under TCL_COMPILE_DEBUG, but execution in the
- bytecode engine can still not be traced.
+2010-06-21 Jan Nijtmans <nijtmans@users.sf.net>
-2002-07-24 Daniel Steffen <das@users.sourceforge.net>
+ * unix/tclLoadDl.c: Eliminate various unnecessary type casts, use
+ * unix/tclLoadNext.c: function typedefs whenever possible
+ * unix/tclUnixChan.c:
+ * unix/tclUnixFile.c:
+ * unix/tclUnixNotfy.c:
+ * unix/tclUnixSock.c:
+ * unix/tclUnixTest.c:
+ * unix/tclXtTest.c:
+ * generic/tclZlib.c: Remove hack needed for zlib 1.2.3 on win32
+
+2010-06-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/init.tcl (auto_execok): [Bug 3017997]: Add .cmd to the
+ default list of extensions that we can execute interactively.
+
+2010-06-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/loadICU.tcl: [Bug 3016135]: Traceback using clock format
+ * library/msgs/he.msg: with locale of he_IL.
+
+ * generic/tcl.h: Simplify Tcl_AppInit and *_Init definitions,
+ * generic/tclInt.h: spacing. Change TclpThreadCreate and
+ * generic/tcl.decls: Tcl_CreateThread signature, making clear that
+ * generic/tclDecls.h: "proc" is a function pointer, as in all other
+ * generic/tclEvent.c: "proc" function parameters.
+ * generic/tclTestProcBodyObj.c:
+ * win/tclWinThrd.c:
+ * unix/tclUnixThrd.c:
+ * doc/Thread.3:
+ * doc/Class.3: Fix Tcl_ObjectMetadataType definition.
+2010-06-14 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/Makefile.in: Fix compilation of xttest with 8.6 changes
+ * unix/tclXtNotify.c:
+ * unix/tclXtTest.c:
+ * generic/tclPipe.c: Fix gcc warning (with -fstrict-aliasing=2)
+ * library/auto.tcl: Spacing and style fixes.
+ * library/history.tcl:
+ * library/init.tcl:
+ * library/package.tcl:
+ * library/safe.tcl:
+ * library/tm.tcl:
+
+2010-06-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (make-man-pages): [Bug 3015327]: Make the
+ title of a manual page be stored relative to its resulting directory
+ name as well as its source filename. This was caused by both Tcl and a
+ contributed package ([incr Tcl]) defining an Object.3. Also corrected
+ the joining of strings in titles to avoid extra braces.
+
+2010-06-09 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Added OSX Intel 64bit
+ * library/platform/pkgIndex.tcl: Package updated to version 1.0.9.
* unix/Makefile.in:
- * unix/configure.in: corrected fix for [Bug 529801]: ranlib
- only needed for static builds on Mac OS X.
- * unix/configure: Regen.
- * unix/tclLoadDyld.c: fixed small bugs introduced by Vince,
- implemented library unloading correctly (needs OS X 10.2).
+ * win/Makefile.in:
-2002-07-23 Joe English <jenglish@users.sourceforge.net>
+2010-06-09 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/OpenFileChnl.3: (Updates from Larry Virden)
- * doc/open.n:
- * doc/tclsh.1: Fix section numbers in Unix man page references.
- * doc/lset.n: In EXAMPLES section, include command to set the
- initial value used in subsequent examples.
- * doc/http.n: Package version updated to 2.4.
+ * tools/tsdPerf.c: Fix export of symbol Tsdperf_Init, when using
+ -fvisibility=hidden. Make two functions static, eliminate some
+ unnecessary type casts.
+ * tools/configure.in: Update to Tcl 8.6
+ * tools/configure: (regenerated)
+ * tools/.cvsignore new file
-2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+2010-06-07 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Enable 64 bit compilation
- when using the native compiler on a 64 bit version of IRIX.
- [Tcl bug 219220]
+ * generic/tclExecute.c: Ensure proper reset of [info errorstack] even
+ * generic/tclNamesp.c: when compiling constant expr's with errors.
-2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+2010-06-05 Miguel Sofer <msofer@users.sf.net>
- * unix/Makefile.in: Combine ranlib tests and
- avoid printing unless ranlib is actually run.
+ * generic/tclBasic.c: [Bug 3008307]: make callerPtr chains be
+ * generic/tclExecute.c: traversable accross coro boundaries. Add the
+ special coroutine CallFrame (partially reverting commit of
+ 2009-12-10), as it is needed for coroutines that do not push a CF, eg,
+ those with [eval] as command. Thanks to Colin McCormack (coldstore)
+ and Alexandre Ferrieux for the hard work on this.
-2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+2010-06-03 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * unix/tcl.m4 (SC_PATH_X): Set XINCLUDES to "" instead
- of "# no special path needed" or "# no include files found"
- when x headers cannot be located.
+ * generic/tclNamesp.c: Safer (and faster) computation of [uplevel]
+ * tests/error.test: offsets in TIP 348. Toplevel offsets no longer
+ * tests/result.test: overestimated.
-2002-07-22 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-06-02 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclIOUtil.c: made tclNativeFilesystem static
- (since 07-19 changes removed its usage elsewhere), and
- added comments about its usage.
- * generic/tclLoad.c:
- * generic/tcl.h:
- * generic/tcl.decls:
- * doc/FileSystem.3: converted last load-related ClientData
- parameter to Tcl_LoadHandle opaque structure, removing a
- couple of casts in the process.
-
- * generic/tclInt.h: removed tclNativeFilesystem declaration
- since it is now static again.
-
-2002-07-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * tests/expr.test (expr-22.*): Added tests to help detect the
- corrected handling.
- * generic/tclExecute.c (IllegalExprOperandType): Improved error
- message generated when attempting to manipulate Inf and NaN values.
- * generic/tclParseExpr.c (GetLexeme): Allowed parser to recognise
- 'Inf' as a floating-point number. [Bug 218000]
-
-2002-07-21 Don Porter <dgp@users.sourceforge.net>
-
- * tclIOUtil.c: Silence compiler warning. [Bug 584408].
-
-2002-07-19 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclIOUtil.c: fix to GetFilesystemRecord
- * win/tclWinFile.c:
- * unix/tclUnixFile.c: fix to subtle problem with links shown
- up by latest tclkit builds.
+ * generic/tclOO.h: BUILD_tcloo is never defined (leftover)
+ * win/makefile.bc: Don't set BUILD_tcloo (leftover)
+ See also entry below: 2008-06-01 Joe Mistachkin
-2002-07-19 Mo DeJong <mdejong@users.sourceforge.net>
+2010-06-01 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * unix/configure:
- * unix/configure.in:
- * win/configure:
- * win/configure.in: Add AC_PREREQ(2.13) in an attempt
- to make it more clear that the configure scripts
- must be generated with autoconf version 2.13.
- [Bug 583573]
+ * generic/tclNamesp.c: Fix computation of [uplevel] offsets in TIP 348
+ * tests/error.test: Only depend on callerPtr chaining now.
+ * tests/result.test: Needed for upcoming coro patch.
+
+2010-05-31 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclVar.c: Eliminate some casts to (Tcl_HashTable *)
+ * generic/tclExecute.c:
+ * tests/fileSystem.test: Fix filesystem-5.1 test failure on CYGWIN
+
+2010-05-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.h: [Patch 3008541]: Order of TIP #348 fields in
+ Interp structure
+
+2010-05-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmdsSZ.c (IssueTryFinallyInstructions): [3007374]:
+ Corrected error in handling of catch contexts to prevent crash with
+ chained handlers.
+
+ * generic/tclExecute.c (TclExecuteByteCode): Restore correct operation
+ of instruction-level execution tracing (had been broken by NRE).
+
+2010-05-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * library/opt/optParse.tcl: Don't generate spaces at the end of a
+ * library/opt/pkgIndex.tcl: line, eliminate ';' at line end, bump to
+ * tools/uniParse.tcl: v0.4.6
+ * generic/tclUniData.c:
+ * tests/opt.test:
+ * tests/safe.test:
-2002-07-19 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-05-21 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/Makefile.in: fix to build on MacOS X [Bug 529801], bug
- report and fix from jcw.
+ * tools/installData.tcl: Make sure that copyDir only receives
+ normalized paths, otherwise it might result in a crash on CYGWIN.
+ Restyle according to the Tcl style guide.
+ * generic/tclStrToD.c: [Bug 3005233]: Fix for build on OpenBSD vax
-2002-07-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-05-19 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * win/tclWinSerial.c (no_timeout): Made this variable static.
+ * tests/dict.test: Add missing tests for [Bug 3004007], fixed under
+ the radar on 2010-02-24 (dkf): EIAS violation in list-dict conversions
- * generic/tclExecute.c, generic/tclCompile.c, generic/tclBasic.c:
- * generic/tclCompile.h (builtinFuncTable, instructionTable): Added
- prefix to these symbols because they are visible outside the Tcl
- library.
+2010-05-19 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclCompExpr.c (operatorTable):
- * unix/tclUnixTime.c (tmKey):
- * generic/tclIOUtil.c (theFilesystemEpoch, filesystemWantToModify,
- filesystemIteratorsInProgress, filesystemOkToModify): Made these
- variables static.
+ * generic/regcomp.c: Don't use arrays of length 1, just use a
+ * generic/tclFileName.c: single element then, it makes code more
+ * generic/tclLoad.c: readable. (Here it even prevents a type cast)
- * unix/tclUnixFile.c: Renamed nativeFilesystem to
- * win/tclWinFile.c: tclNativeFilesystem and declared
- * generic/tclIOUtil.c: it properly in tclInt.h
- * generic/tclInt.h:
+2010-05-17 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclUtf.c (totalBytes): Made this array static and const.
+ * generic/tclStrToD.c: [Bug 2996549]: Failure in expr.test on Win32
- * generic/tclParse.c (typeTable): Made this array static and const.
- (Tcl_ParseBraces): Simplified error handling case so that scans
- are only performed when needed, and flags are simpler too.
+2010-05-17 Donal K. Fellows <dkf@users.sf.net>
- * license.terms: Added AS to list of copyright holders; it's only
- fair for the current gatekeepers to be listed here!
+ * generic/tclCmdIL.c (TclInfoFrame): Change this code to use
+ Tcl_GetCommandFullName rather than rolling its own. Discovered during
+ the hunting of [Bug 3001438] but unlikely to be a fix.
- * tests/cmdMZ.test: Renamed constraint for clarity. [Bug#583427]
- Added tests for the [time] command, which was previously only
- indirectly tested!
+2010-05-11 Jan Nijtmans <nijtmans@users.sf.net>
-2002-07-18 Vince Darley <vincentdarley@users.sourceforge.net>
+ * win/tclWinConsole.c: [Patch 2997087]: Unnecessary type casts.
+ * win/tclWinDde.c:
+ * win/tclWinLoad.c:
+ * win/tclWinNotify.c:
+ * win/tclWinSerial.c:
+ * win/tclWinSock.c:
+ * win/tclWinTime.c:
+ * win/tclWinPort.h: Don't duplicate CYGWIN timezone #define from
+ tclPort.h
+
+2010-05-07 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Fix cpu name for Solaris/Intel 64bit.
+ * library/platform/pkgIndex.tcl: Package updated to version 1.0.8.
+ * unix/Makefile.in:
+ * win/Makefile.in:
+2010-05-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclPkg.c: Unnecessary type casts, see [Patch 2997087]
+
+2010-05-04 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinNotify.c: TCHAR-related fixes, making those two files
+ * win/tclWinSock.c: compile fine when TCHAR != char. Please see
+ comments in [FRQ 2965056] (2965056-1.patch).
+
+2010-05-03 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIORChan.c: Use "tclIO.h" and "tclTomMathDecls.h"
+ * generic/tclIORTrans.c: everywhere
+ * generic/tclTomMath.h:
+ * tools/fix_tommath_h.tcl:
+ * libtommath/tommath.h: Formatting (# should always be first char on
+ line)
+ * win/tclAppInit.c: For MINGW/CYGWIN, use GetCommandLineA
+ explicitly.
+ * unix/.cvsignore: Add pkg, *.dll
+
+ * libtommath/tommath.h: CONSTify various useful internal
+ * libtommath/bn_mp_cmp_d.c: functions (TclBignumToDouble, TclCeil,
+ * libtommath/bn_mp_cmp_mag.c: TclFloor), and related tommath functions
+ * libtommath/bn_mp_cmp.c:
+ * libtommath/bn_mp_copy.c:
+ * libtommath/bn_mp_count_bits.c:
+ * libtommath/bn_mp_div_2d.c:
+ * libtommath/bn_mp_mod_2d.c:
+ * libtommath/bn_mp_mul_2d.c:
+ * libtommath/bn_mp_neg.c:
+ * generic/tclBasic.c: Handle TODO: const correctness ?
* generic/tclInt.h:
- * generic/tcl.h:
- * */*Load*.c: added comments on changes of 07/17 and
- replaced clientData with Tcl_LoadHandle in all locations.
-
- * generic/tclFCmd.c:
- * tests/fileSystem.test: fixed a 'knownBug' with 'file
- attributes ""'
- * tests/winFCmd.test:
- * tests/winPipe.test:
- * tests/fCmd.test:
- * tessts/winFile.test: added 'pcOnly' constraint to some
- tests to make for more useful 'tests skipped' log from
- running all tests on non-Windows platforms.
-
-2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclBasic.c (CallCommandTraces): delete traces now
- receive the FQ old name of the command.
- [Bug 582532] (Don Porter)
-
-2002-07-18 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * tests/ioUtil.test: added constraints to 1.4,2.4 so they
- don't run outside of tcltest. [Bugs 583276,583277]
-
-2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclVar.c (DupParsedVarName): nasty bug fixed, reported
- by Vince Darley.
-
-2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclVar.c (TclPtrIncrVar): missing CONST in declarations,
- inconsistent with tclInt.h. Thanks to Vince Darley for reporting,
- boo to gcc for not complaining.
-
-2002-07-17 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclStrToD.c:
+ * generic/tclTomMath.decls:
+ * generic/tclTomMath.h:
+ * generic/tclTomMathDecls.h:
+
+2010-04-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump patchlevel to 8.6b1.2 to distinguish
+ * library/init.tcl: CVS snapshots from earlier snapshots as well
+ * unix/configure.in: as the 8.6b1 and 8.6b2 releases.
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * generic/tclBinary.c (TclAppendBytesToByteArray): Add comments
+ * generic/tclInt.h (TclAppendBytesToByteArray): placing overflow
+ protection responsibility on caller. Convert "len" argument to signed
+ int which any value already vetted for overflow issues will fit into.
+ * generic/tclStringObj.c: Update caller; standardize panic msg.
+
+ * generic/tclBinary.c (UpdateStringOfByteArray): [Bug 2994924]: Add
+ panic when the generated string representation would grow beyond Tcl's
+ size limits.
+
+2010-04-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBinary.c (TclAppendBytesToByteArray): Add extra armour
+ against buffer overflows.
+
+ * generic/tclBasic.c (NRInterpCoroutine): Corrected handling of
+ * tests/coroutine.test (coroutine-6.4): arguments to deal with
+ trickier cases.
+
+2010-04-30 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/coroutine.test: testing coroutine arguments after [yield]:
+ check that only 0/1 allowed
+
+2010-04-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (NRInterpCoroutine): Corrected handling of
+ arguments to deal with trickier cases.
+
+ * generic/tclCompCmds.c (TclCompileVariableCmd): Slightly tighter
+ issuing of instructions.
+ * generic/tclExecute.c (TclExecuteByteCode): Add peephole optimization
+ of the fact that INST_DICT_FIRST and INST_DICT_NEXT always have a
+ conditional jump afterwards.
+
+ * generic/tclBasic.c (TclNRYieldObjCmd, TclNRYieldmObjCmd)
+ (NRInterpCoroutine): Replace magic values for formal argument counts
+ for coroutine command implementations with #defines, for an increase
+ in readability.
+
+2010-04-30 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclMain.c: Unnecessary TCL_STORAGE_CLASS re-definition. It
+ was used for an ancient dummy reference to Tcl_LinkVar(), but that's
+ already gone since 2002-05-29.
+
+2010-04-29 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompExpr.c: Slight change in the literal sharing
+ * generic/tclCompile.c: mechanism to avoid shimmering of
+ * generic/tclCompile.h: command names.
+ * generic/tclLiteral.c:
+
+2010-04-29 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Another stab at getting the /lib,
+ * library/platform/pkgIndex.tcl: /lib64 difference right for linux.
+ * unix/Makefile.in: Package updated to version 1.0.7.
+ * win/Makefile.in:
+
+2010-04-29 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Antarctica/Macquarie:
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/Africa/Tunis:
+ * library/tzdata/America/Santiago:
+ * library/tzdata/America/Argentina/San_Luis:
+ * library/tzdata/Antarctica/Casey:
+ * library/tzdata/Antarctica/Davis:
+ * library/tzdata/Asia/Anadyr:
+ * library/tzdata/Asia/Damascus:
+ * library/tzdata/Asia/Dhaka:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Kamchatka:
+ * library/tzdata/Asia/Karachi:
+ * library/tzdata/Asia/Taipei:
+ * library/tzdata/Europe/Samara:
+ * library/tzdata/Pacific/Apia:
+ * library/tzdata/Pacific/Easter:
+ * library/tzdata/Pacific/Fiji: Olson's tzdata2010i.
+
+2010-04-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBinary.c (TclAppendBytesToByteArray): [Bug 2992970]: Make
+ * generic/tclStringObj.c (Tcl_AppendObjToObj): an append of a byte
+ array to another into an efficent operation. The problem was the (lack
+ of) a proper growth management strategy for the byte array.
+
+2010-04-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * compat/dirent2.h: Include "tcl.h", not <tcl.h>, like everywhere
+ * compat/dlfcn.h: else, to ensure that the version in the Tcl
+ * compat/stdlib.h: distribution is used, not some version from
+ * compat/string.h: somewhere else.
+ * compat/unistd.h:
+
+2010-04-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: Remove unused @MAN2TCLFLAGS@
+ * win/tclWinPort.h: Move <limits.h> include from tclInt.h to
+ * generic/tclInt.h: tclWinPort.h, and eliminate unneeded
+ * generic/tclEnv.c: <stdlib.h>, <stdio.h> and <string.h>, which
+ are already in tclInt.h
+ * generic/regcustom.h: Move "tclInt.h" from regcustom.h up to
+ * generic/regex.h: regex.h.
+ * generic/tclAlloc.c: Unneeded <stdio.h> include.
+ * generic/tclExecute.c: Fix gcc warning: comparison between signed and
+ unsigned.
+
+2010-04-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h (TclIsVarDirectUnsettable): Corrected flags so that
+ deletion of traces is not optimized out...
+
+ * generic/tclExecute.c (ExecuteExtendedBinaryMathOp)
+ (TclCompareTwoNumbers,ExecuteExtendedUnaryMathOp,TclExecuteByteCode):
+ [Patch 2981677]: Move the less common arithmetic operations (i.e.,
+ exponentiation and operations on non-longs) out of TEBC for a big drop
+ in the overall size of the stack frame for most code. Net effect on
+ speed is minimal (slightly faster overall in tclbench). Also extended
+ the number of places where TRESULT handling is replaced with a jump to
+ dedicated code.
+
+2010-04-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Rearrange location of an
+ assignment to shorten the object code.
+
+2010-04-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIOUtil.c (Tcl_FSGetNativePath): [Bug 2992292]:
+ tclIOUtil.c assignment type mismatch compiler warning
+ * generic/regguts.h: If tclInt.h or tclPort.h is already
+ * generic/tclBasic.c: included, don't include <limits.h>
+ * generic/tclExecute.c: again. Follow-up to [Bug 2991415]:
+ * generic/tclIORChan.c: tclport.h #included before limits.h
+ * generic/tclIORTrans.c: See comments in [Bug 2991415]
+ * generic/tclObj.c:
+ * generic/tclOOInt.h:
+ * generic/tclStrToD.c:
+ * generic/tclTomMath.h:
+ * generic/tclTomMathInterface.c:
+ * generic/tclUtil.c:
+ * compat/strtod.c:
+ * compat/strtol.c:
+
+2010-04-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/tclLoadDl.c (FindSymbol): [Bug 2992295]: Simplified the logic
+ so that the casts added in Donal Fellows's change for the same bug are
+ no longer necessary.
+
+2010-04-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclLoadDl.c (FindSymbol): [Bug 2992295]: Added an explicit cast
+ because auto-casting between function and non-function types is never
+ naturally warning-free.
+
+ * generic/tclStubInit.c: Add a small amount of gcc-isms (with #ifdef
+ * generic/tclOOStubInit.c: guards) to ensure that warnings are issued
+ when these files are older than the various *.decls files.
+
+2010-04-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Add unsupported [yieldm] command. Credit
+ * generic/tclInt.h: Lars Hellstrom for the basic idea.
+
+2010-04-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Modify api of TclSpliceTailcall() to fix
+ * generic/tclExecute.c: [yieldTo], which had not survived the latest
+ * generic/tclInt.h: mods to tailcall. Thanks kbk for detecting
+ the problem.
+
+2010-04-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclUnixPort.h: [Bug 2991415]: tclport.h #included before
+ limits.h
+
+2010-04-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclPlatDecls.h: Move TCHAR fallback typedef from tcl.h to
+ * generic/tcl.h: tclPlatDecls.h (as suggested by dgp)
+ * generic/tclInt.h: fix typo
+ * generic/tclIOUtil.c: Eliminate various unnecessary
+ * unix/tclUnixFile.c: type casts.
+ * unix/tclUnixPipe.c:
+ * win/tclWinChan.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclWinLoad.c:
+ * win/tclWinPipe.c:
+
+2010-04-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Use function prototypes from the FS API.
+ * compat/zlib/*: Upgrade to zlib 1.2.5
+
+2010-04-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Improve commenting and
+ reduce indentation for the Invocation Block.
+
+2010-04-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/unset.n: [Bug 2988940]: Fix typo.
+
+2010-04-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: Move inclusion of <tchar.h> from
+ * generic/tcl.h: tclPlatDecls.h to tclWinPort.h, where it
+ * generic/tclPlatDecls.h: belongs. Add fallback in tcl.h, so TCHAR is
+ available in win32 always.
+
+2010-04-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/try.n: [Bug 2987551]: Fix typo.
+
+2010-04-14 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Linux platform identification:
+ * library/platform/pkgIndex.tcl: Check /lib64 for existence of files
+ * unix/Makefile.in: matching libc* before accepting it as base
+ * win/Makefile.in: directory. This can happen on weirdly installed
+ 32bit systems which have an empty or partially filled /lib64 without
+ an actual libc. Bumped to version 1.0.6.
+
+2010-04-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinPort.h: Fix [Patch 2986105]: conditionally defining
+ * win/tclWinFile.c: strcasecmp/strncasecmp
+ * win/tclWinLoad.c: Fix gcc warning: comparison of unsigned expression
+ >= 0 is always true
+
+2010-04-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmdsSZ.c (TclSubstCompile): If the first token does
+ not result in a *guaranteed* push of a Tcl_Obj on the stack, we must
+ push an empty object. Otherwise it is possible to get to a 'concat1'
+ or 'done' without enough values on the stack, resulting in a crash.
+ Thanks to Joe Mistachkin for identifying a script that could trigger
+ this case.
+
+2010-04-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/catch.n, doc/info.n, doc/return.n: Formatting.
+
+2010-04-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/Load.3: Minor corrections of formatting and cross links.
+
+2010-04-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/configure: (regenerate with autoconf-2.59)
+ * unix/configure:
+ * unix/installManPage: [Bug 2982540]: configure and install* script
+ * unix/install-sh: files should always have LF line ending.
+ * doc/Load.3: Fix signature of Tcl_LoadFile in documentation.
+
+2010-04-05 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ TIP #348 IMPLEMENTATION
+
+ * generic/tclBasic.c: [Patch 2868499]: Substituted error stack
+ * generic/tclCmdIL.c:
* generic/tclInt.h:
- * generic/tclIOUtil.c:
+ * generic/tclNamesp.c:
+ * generic/tclResult.c:
+ * doc/catch.n:
+ * doc/info.n:
+ * doc/return.n:
+ * tests/cmdMZ.test:
+ * tests/error.test:
+ * tests/execute.test:
+ * tests/info.test:
+ * tests/init.test:
+ * tests/result.test:
+
+2010-04-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Flip the default for whether to
+ * win/tcl.m4 (SC_ENABLE_THREADS): build in threaded mode. Part of
+ * win/rules.vc: TIP #364.
+
+ * unix/tclLoadDyld.c (FindSymbol): Better human-readable error message
+ generation to match code in tclLoadDl.c.
+
+2010-04-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIOUtil.c, unix/tclLoadDl.c: Minor changes to enforce
+ Engineering Manual style rules.
+
+ * doc/FileSystem.3, doc/Load.3: Documentation for TIP#357.
+
+ * macosx/tclMacOSXBundle.c (OpenResourceMap): [Bug 2981528]: Only
+ define this function when HAVE_COREFOUNDATION is defined.
+
+2010-04-02 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls (Tcl_LoadFile): Add missing "const" in signature,
+ * generic/tclIOUtil.c (Tcl_LoadFile): and some formatting fixes
+ * generic/tclDecls.h: (regenerated)
+
+2010-04-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIOUtil.c (Tcl_LoadFile): Corrections to previous commit
+ * unix/tclLoadDyld.c (TclpDlopen): to make it build on OSX.
+
+2010-04-02 Kevin B. Kenny <kennykb@acm.org>
+
+ TIP #357 IMPLEMENTATION
+ TIP #362 IMPLEMENTATION
+
+ * generic/tclStrToD.c: [Bug 2952904]: Defer creation of the smallest
+ floating point number until it is actually used. (This change avoids a
+ bogus syslog message regarding a 'floating point software assist
+ fault' on SGI systems.)
+
+ * library/reg/pkgIndex.tcl: [TIP #362]: Fixed first round of bugs
+ * tests/registry.test: resulting from the recent commits of
+ * win/tclWinReg.c: changes in support of the referenced
+ TIP.
+
+ * generic/tcl.decls: [TIP #357]: First round of changes
+ * generic/tclDecls.h: to export Tcl_LoadFile,
+ * generic/tclIOUtil.c: Tcl_FindSymbol, and Tcl_FSUnloadFile
+ * generic/tclInt.h: to the public API.
+ * generic/tclLoad.c:
* generic/tclLoadNone.c:
- * unix/tclLoadAout.c:
+ * generic/tclStubInit.c:
+ * tests/fileSystem.test:
+ * tests/load.test:
+ * tests/unload.test:
* unix/tclLoadDl.c:
- * unix/tclLoadDld.c:
* unix/tclLoadDyld.c:
* unix/tclLoadNext.c:
* unix/tclLoadOSF.c:
* unix/tclLoadShl.c:
- * mac/tclMacLoad.c:
- * win/tclWinLoad.c: modified to move more functionality
- to the generic code and avoid duplication. Partial replacement
- of internal uses of clientData with opaque Tcl_LoadHandle. A
- little further work still needed, but significant changes are done.
+ * unix/tclUnixPipe.c:
+ * win/Makefile.in:
+ * win/tclWinLoad.c:
-2002-07-17 D. Richard Hipp <drh@hwaci.com>
+2010-03-31 Donal K. Fellows <dkf@users.sf.net>
- * library/msgcat/msgcat.tcl: fix a comment that was causing
- problems for programs (ex: mktclapp) that embed the initialization
- scripts in strings.
+ * doc/registry.n: Added missing documentation of TIP#362 flags.
-2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+ * doc/package.n: [Bug 2980210]: Document the arguments taken by
+ the [package present] command correctly.
- * generic/tclInt.decls:
- * generic/tclIntDecls.h:
- * generic/tclStubInit.c:
- * generic/tclVar.c: removing the now redundant functions to access
- indexed variables: Tcl(Get|Set|Incr)IndexedScalar() and
- Tcl(Get|Set|Incr)ElementOfIndexedArray().
+ * doc/Thread.3: Added some better documentation of how to create and
+ use a thread using the C-level thread API, based on realization that
+ no such tutorial appeared to exist.
+
+2010-03-31 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * test/cmdMZ.test: [FRQ 2974744]: share exception codes (ObjType?):
+ * test/error.test: Revised test cases, making sure that abbreviated
+ * test/proc-old.test: codes are checked resulting in an error, and
+ checking for the exact error message.
+
+2010-03-30 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (ReflectClose, ReflectInput, ReflectOutput,
+ (ReflectSeekWide, ReflectWatch, ReflectBlock, ReflectSetOption,
+ (ReflectGetOption, ForwardProc): [Bug 2978773]: Preserve
+ ReflectedChannel* structures across handler invokations, to avoid
+ crashes when the handler implementation induces nested callbacks and
+ destruction of the channel deep inside such a nesting.
+
+2010-03-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclObj.c (Tcl_GetCommandFromObj): [Bug 2979402]: Reorder
+ the validity tests on internal rep of a "cmdName" value to avoid
+ invalid reads reported by valgrind.
+
+2010-03-30 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIndexObj: [FRQ 2974744]: share exception codes
+ * generic/tclResult.c: further optimization, making use of indexType.
+ * generic/tclZlib.c: [Bug 2979399]: uninitialized value troubles
-2002-07-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-03-30 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclExecute.c (TclExecuteByteCode): Minor fixes to make
- this file compile with SunPro CC...
+ TIP #362 IMPLEMENTATION
-2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+ * win/tclWinReg.c: [Patch 2960976]: Apply patch from Damon Courtney to
+ * tests/registry.test: allow the registry command to be told to work
+ * win/Makefile.in: with both 32-bit and 64-bit registries. Bump
+ * win/configure.in: version of registry package to 1.3.
+ * win/makefile.bc:
+ * win/makefile.vc:
+ * win/configure: autoconf-2.59
+
+2010-03-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tcl.m4: Only test for -visibility=hidden with gcc
+ (Second remark in [Bug 2976508])
+ * unix/configure: regen
+
+2010-03-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Fix array overrun in test format-1.12
+ caught by valgrind testing.
+
+2010-03-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.h: [FRQ 2974744]: share exception codes
+ * generic/tclResult.c: (ObjType?)
+ * generic/tclCmdMZ.c:
+ * generic/tclCompCmdsSZ.c:
+
+2010-03-26 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclExecute.c: [Bug 2976508]: Tcl HEAD fails on HP-UX
+
+2010-03-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixFCmd.c (TclUnixCopyFile): [Bug 2976504]: Corrected
+ number of arguments to fstatfs() call.
+
+ * macosx/tclMacOSXBundle.c, macosx/tclMacOSXFCmd.c:
+ * macosx/tclMacOSXNotify.c: Reduce the level of ifdeffery in the
+ functions of these files to improve readability. They need to be
+ audited for whether complexity can be removed based on the minimum
+ supported version of OSX, but that requires a real expert.
+
+2010-03-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclResult.c: [Bug 2383005]: Revise [return -errorcode] so
+ * tests/result.test: that it rejects illegal non-list values.
+
+2010-03-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOInfo.c (InfoObjectMethodTypeCmd)
+ (InfoClassMethodTypeCmd): Added introspection of method types so that
+ it is possible to find this info out without using errors.
+ * generic/tclOOMethod.c (procMethodType): Now that introspection can
+ reveal the name of method types, regularize the name of normal methods
+ to be the name of the definition type used to create them.
+
+ * tests/async.test (async-4.*): Reduce obscurity of these tests by
+ putting the bulk of the code for them inside the test body with the
+ help of [apply].
+
+ * generic/tclCmdMZ.c (TryPostBody, TryPostHandler): Make sure that the
+ [try] command does not trap unwinding due to limits.
+
+2010-03-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: [Bug 2973361]: Revised fix for computing
+ indices of script arguments to [try].
+
+2010-03-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclCmdMZ.c: Make error message in "try" implementation
+ * generic/tclCompCmdsSZ.c: exactly the same as the one in "return"
+ * tests/error.test:
+ * libtommath/mtests/mpi.c: Single "const" addition
- * generic/tclExecute.c: modified to do variable lookup explicitly,
- and then either inlining the variable access or else calling the new
- TclPtr(Set|Get|Incr)Var functions in tclVar.c
- * generic/tclInt.h: declare some functions previously local to
- tclVar.c for usage by TEBC.
- * generic/tclVar.c: removed local declarations; moved all special
- accessor functions for indexed variables to the end of the file -
- they are unused and ready for removal, but left there for the time
- being as they are in the internal stubs table.
+2010-03-22 Don Porter <dgp@users.sourceforge.net>
- ** WARNING FOR BYTECODE MAINTAINERS **
- TCL_COMPILE_DEBUG is currently not functional; will be fixed ASAP.
-
-2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tclCmdMZ.c: [Bug 2973361]: Compute the correct integer
+ values to identify the argument indices of the various script
+ arguments to [try]. Passing in -1 led to invalid memory reads.
+2010-03-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/exec.n: Make it a bit clearer that there is an option to run a
+ pipeline in the background.
+
+ * generic/tclIOCmd.c (Tcl_FcopyObjCmd): Lift the restriction
+ * generic/tclIO.c (TclCopyChannel, CopyData): on the [fcopy] command
+ * generic/tclIO.h (CopyState): that forced it to only
+ copy up to 2GB per script-level callback. Now it is anything that can
+ fit in a (signed) 64-bit integer. Problem identified by Frederic
+ Bonnet on comp.lang.tcl. Note that individual low-level reads and
+ writes are still smaller as the optimal buffer size is smaller.
+
+2010-03-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/stub16.c: Don't hide that we use the ASCII API here.
+ (does someone still use that?)
+ * win/tclWinPipe.c: 2 unnecessary type casts.
+
+2010-03-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmdsSZ.c (TclCompileThrowCmd): Added compilation for
+ the [throw] command.
+
+2010-03-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclListObj.c: [Bug 2971669]: Prevent in overflow trouble in
+ * generic/tclTestObj.c: ListObjReplace operations. Thanks to kbk for
+ * tests/listObj.test: fix and test.
+
+2010-03-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmdsSZ.c (IssueTryFinallyInstructions):
+ [Bug 2971921]: Corrected jump so that it doesn't skip into the middle
+ of an instruction! Tightened the instruction issuing. Moved endCatch
+ calls closer to their point that they guard, ensuring correct ordering
+ of result values.
+
+2010-03-17 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORTrans.c (ReflectInput, ReflectOutput)
+ (ReflectSeekWide): [Bug 2921116]: Added missing TclEventuallyFree
+ calls for preserved ReflectedTransform* structures. Reworked
+ ReflectInput to preserve the structure for its whole life, not only in
+ InvokeTclMethod.
+
+ * generic/tclIO.c (Tcl_GetsObj): [Bug 2921116]: Regenerate topChan,
+ may have been changed by a self-modifying transformation.
+
+ * tests/ioTrans/test (iortrans-4.8, iortrans-4.9, iortrans-5.11)
+ (iortrans-7.4, iortrans-8.3): New test cases.
+
+2010-03-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * compat/zlib/*: Upgrade zlib to version 1.2.4.
+ * win/makefile.vc:
* unix/Makefile.in:
- * win/Makefile.in: Add a more descriptive warning
- in the event `make genstubs` needs to be rerun.
-
-2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/Makefile.in: Use dltest.marker file
- to keep track of when the dltest package
- is up to date. This fixes [Tcl bug 575768]
- since tcltest is no longer linked every time.
- * unix/dltest/Makefile.in: Create ../dltest.marker
- after a successful `make all` run in dltest.
-
-2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/configure: Regen.
- * unix/configure.in: Remove useless subst of TCL_BIN_DIR.
-
-2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclVar.c: inaccurate comment fixed
-
-2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclBasic.c (Tcl_AddObjErrorInfo):
- * generic/tclExecute.c (TclUpdateReturnInfo):
- * generic/tclInt.h:
- * generic/tclProc.c:
- Added two Tcl_Obj to the ExecEnv structure to hold the fully
- qualified names "::errorInfo" and "::errorCode" to cache the
- addresses of the corresponding variables. The two most frequent
- setters of these variables now profit from the new variable name
- caching.
-
-2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclVar.c: refactorisation to reuse already looked-up Var
- pointers; definition of three new Tcl_Obj types to cache variable
- name parsing and lookup for later reuse; modification of internal
- functions to profit from the caching.
-
- * generic/tclInt.decls:
- * generic/tclInt.h:
- * generic/tclIntDecls.h:
- * generic/tclNamesp.c: adding CONST qualifiers to variable names
- passed to Tcl_FindNamespaceVar and to variable resolvers; adding
- CONST qualifier to the 'msg' argument to TclLookupVar. Needed to
- avoid code duplication in the new tclVar.c code.
-
- * tests/set-old.test:
- * tests/var.test: slight modification of error messages due to the
- modifications in the tclVar.c code.
-
-2002-07-15 Don Porter <dgp@users.sourceforge.net>
-
- * tests/unixInit.test: Improved constraints to protect /tmp.
- [Bug 581403]
-
-2002-07-15 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * tests/winFCmd.test: renamed 'win2000' and 'notWin2000' to
- more appropriate constraint names.
- * win/tclWinFile.c: updated comments to reflect 07-11 changes.
- * win/tclWinFCmd.c: made ConvertFileNameFormat static again,
- since no longer used in tclWinFile.c
- * mac/tclMacFile.c: completed TclpObjLink implementation which
- was previously lacking.
- * generic/tclIOUtil.c: comment cleanup and code speedup.
-
-2002-07-14 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclInt.h: Removed declarations that duplicated entries
- in the (internal) stub table.
-
- * library/tcltest/tcltest.tcl: Corrected errors in handling of
- configuration options -constraints and -limitconstraints.
-
- * README: Bumped HEAD to version 8.4b2 so we can
- * generic/tcl.h: distinguish it from the 8.4b1 release.
- * tools/tcl.wse.in:
- * unix/configure*:
- * unix/tcl.spec:
- * win/README.binary:
- * win/configure*:
+ * win/tclWinChan.c: Don't cast away "const" without reason.
-2002-07-11 Vince Darley <vincentdarley@users.sourceforge.net>
+2010-03-12 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/file.n:
- * win/tclWinFile.c: on Win 95/98/ME the long form of the path
- is used as a normalized form. This is required because short
- forms are not a robust representation. The file normalization
- function has been sped up, but more performance gains might be
- possible, if speed is still an issue on these platforms.
+ * win/makefile.vc: [Bug 2967340]: Static build was failing.
+ * win/.cvsignore:
-2002-07-11 Don Porter <dgp@users.sourceforge.net>
+2010-03-10 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Remove unnecessary '&' decoration for
+ * generic/tclIOUtil.c: function pointers
+ * win/tclWin32Dll.c: Double declaration of TclNativeDupInternalRep
+ * unix/tclIOUtil.c:
+ * unix/dltest/.cvsignore: Ignore *.so here
+
+2010-03-09 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c: [Bug 2936225]: Thanks to Alexandre Ferrieux
+ * doc/refchan.n: <ferrieux@users.sourceforge.net> for debugging and
+ * tests/ioCmd.test: fixing the problem. It is the write-side
+ equivalent to the bug fixed 2009-08-06.
+
+2010-03-09 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tzdata/America/Matamoros: New locale
+ * library/tzdata/America/Ojinaga: New locale
+ * library/tzdata/America/Santa_Isabel: New locale
+ * library/tzdata/America/Asuncion:
+ * library/tzdata/America/Tijuana:
+ * library/tzdata/Antarctica/Casey:
+ * library/tzdata/Antarctica/Davis:
+ * library/tzdata/Antarctica/Mawson:
+ * library/tzdata/Asia/Dhaka:
+ * library/tzdata/Pacific/Fiji:
+ Olson tzdata2010c.
+
+2010-03-07 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Test that tclOO stubs are present in stub
+ library
+ * generic/tclOOMethod.c: Applied missing part of [Patch 2961556]
+ * win/tclWinInt.h: Change all tclWinProcs signatures to use
+ * win/tclWin32Dll.c: TCHAR* in stead of WCHAR*. This is meant
+ * win/tclWinDde.c: as preparation to make [Enh 2965056]
+ * win/tclWinFCmd.c: possible at all.
+ * win/tclWinFile.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSock.c:
- * library/tcltest/tcltest.tcl: Corrected reaction to existing but
- false ::tcl_interactive.
+2010-03-06 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/Hash.3: Overlooked CONST documentation update.
+ * generic/tclStubLib.c: Remove presence of tclTomMathStubsPtr here.
+ * generic/tclTest.c: Test that tommath stubs are present in stub
+ library.
-2002-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-03-05 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclCkalloc.c: ckalloc() and friends take the block size
- as an unsigned, so we should use %ud when reporting it in fprintf()
- and panic().
+ * generic/tclIORTrans.c (ForwardProc): [Bug 2964425]: When cleaning
+ the stables, it is sometimes necessary to do more than the minimum. In
+ this case, rationalizing the variables for a forwarded limit? method
+ required removing an extra Tcl_DecrRefCount too.
-2002-07-11 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclOO.h, generic/tclOOInt.h: [Patch 2961556]: Change TclOO
+ to use the same style of function typedefs as Tcl, as this is about
+ the last chance to get this right.
- * generic/tclCompile.c: now setting local vars undefined at
- compile time, instead of waiting until the proc is initialized.
- * generic/tclProc.c: use macro TclSetVarUndefined instead of
- directly etting the flag.
+ ***POTENTIAL INCOMPATIBILITY***
+ Source code that uses function typedefs from TclOO will need to update
+ variables and argument definitions so that pointers to the function
+ values are used instead. Binary compatibility is not affected.
-2002-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/*.c, generic/tclInt.h, unix/*.c, macosx/*.c: Applied results
+ of doing a Code Audit. Principal changes:
+ * Use do { ... } while (0) in macros
+ * Avoid shadowing one local variable with another
+ * Use clearer 'foo.bar++;' instead of '++foo.bar;' where result not
+ required (i.e., semantically equivalent); clarity is increased
+ because it is bar that is incremented, not foo.
+ * Follow Engineering Manual rules on spacing and declarations
- * tests/cmdAH.test: [file attr -perm] is Unix-only, so add [catch]
- when not inside a suitably-protected test.
+2010-03-04 Donal K. Fellows <dkf@users.sf.net>
-2002-07-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclOO.c (ObjectRenamedTrace): [Bug 2962664]: Add special
+ handling so that when the class of classes is deleted, so is the class
+ of objects. Immediately.
- * tests/unixFCmd.test, tests/fileName.test:
- * tests/fCmd.test: Removed [exec] of Unix utilities that have
- equivalents in standard Tcl. [Bug 579268] Also simplified some
- of unixFCmd.test while I was at it.
+ * generic/tclOOInt.h (ROOT_CLASS): Add new flag for specially marking
+ the root class. Simpler and more robust than the previous technique.
-2002-07-10 Don Porter <dgp@users.sourceforge.net>
+2010-03-04 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/tcltest.test: Greatly reduced the number of [exec]s, using
- slave interps instead.
- * library/tcltest/tcltest.tcl: Fixed bug uncovered in the conversion
- where a message was written to stdout instead of [outputChannel].
+ * generic/tclGetDate.y: 3 unnecessary MODULE_SCOPE
+ * generic/tclDate.c: symbols
+ * generic/tclStubLib.c: Split tommath stub lib
+ * generic/tclTomMathStubLib.c: in separate file.
+ * win/makefile.bc:
+ * win/Makefile.in:
+ * win/makefile.vc:
+ * win/tcl.dsp:
+ * unix/Makefile.in:
+ * unix/tcl.m4: Cygwin only gives warning
+ * unix/configure: using -fvisibility=hidden
+ * compat/strncasecmp.c: A few more const's
+ * compat/strtod.c:
+ * compat/strtoul.c:
- * tests/basic.test: Cleaned up, constrained, and reduced the
- * tests/compile.test: amount of [exec] usage in the test suite.
- * tests/encoding.test:
- * tests/env.test:
- * tests/event.test:
- * tests/exec.test:
- * tests/io.test:
- * tests/ioCmd.test:
- * tests/regexp.test:
- * tests/regexpComp.test:
- * tests/socket.test:
- * tests/tcltest.test:
- * tests/unixInit.test:
- * tests/winDde.test:
- * tests/winPipe.test:
+2010-03-03 Andreas Kupries <andreask@activestate.com>
-2002-07-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * doc/refchan.n: Followup to ChangeLog entry 2009-10-07
+ (generic/tclIORChan.c). Fixed the documentation to explain that errno
+ numbers are operating system dependent, and reworked the associated
+ example.
- * tests/cmdAH.test: Removed [exec] of Unix utilities. [Bug 579211]
+2010-03-02 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/expr.test: Added tests to make sure that this works.
- * generic/tclExecute.c (ExprCallMathFunc): Functions should also
- be able to return wide-ints. [Bug 579284]
+ * unix/tcl.m4: [FRQ 2959069]: Support for -fvisibility=hidden
+ * unix/configure (regenerated with autoconf-2.59)
-2002-07-08 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2010-03-01 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * tests/socket.test: Fixed bug #578164. The original reason for
- the was a DNS outage while running the testsuite. Changed [info
- hostname] to 127.0.0.1 to bypass DNS, knowing that we operate on
- the local host.
+ * unix/tclUnixSock.c: Refrain from a possibly lengthy reverse-DNS
+ lookup on 0.0.0.0 when calling [fconfigure -sockname] on an
+ universally-bound (default) server socket.
-2002-07-08 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclIndexObj.c: fix [AT 86258]: special-casing of empty
+ tables when generating error messages for [::tcl::prefix match].
- * doc/tcltest.n: Fixed incompatibility in [viewFile].
- * library/tcltest/tcltest.tcl: Corrected docs. Bumped to 2.2.1.
- * library/tcltest/pkgIndex.tcl: [Bug 578163]
+2010-02-28 Donal K. Fellows <dkf@users.sf.net>
-2002-07-08 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclCmdIL.c: More additions of {TCL LOOKUP} error-code
+ generation to various subcommands of [info] as part of long-term
+ project to classify all Tcl's generated errors.
- * tests/cmdAH.test:
- * tests/fCmd.test:
- * tests/fileName.test: tests which rely on 'file link' need a
- constraint so they don't run on older Windows OS. [Bug 578158]
- * generic/tclIOUtil.c:
- * generic/tcl.h:
- * generic/tclInt.h:
+2010-02-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclStubInit.c: [Bug 2959713]: Link error with gcc 4.1
+
+2010-02-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (StringFirstCmd, StringLastCmd): [Bug 2960021]:
+ Only search for the needle in the haystack when the needle isn't
+ larger than the haystack. Prevents an odd crash from sometimes
+ happening when things get mixed up (a common programming error).
+
+ * generic/tclMain.c (Tcl_Main): [Bug 801429]: Factor out the holding
+ of the client-installed main loop function into thread-specific data.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Code that previously tried to set the main loop from another thread
+ will now fail. On the other hand, there is a fairly high probability
+ that such programs would have been failing before due to the lack of
+ any kind of inter-thread memory barriers guarding accesses to this
+ part of Tcl's state.
+
+2010-02-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c: Split this file into two pieces to make it
+ * generic/tclCompCmdsSZ.c: easier to work with. It's still two very
+ long files even after the split.
+
+2010-02-26 Reinhard Max <max@suse.de>
+
+ * doc/safe.n: Name the installed file after the command it documents.
+ Use "Safe Tcl" instead of the "Safe Base", "Safe Tcl" mixture.
+
+2010-02-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/Makefile.in (NATIVE_TCLSH): Added this variable to allow for
+ better control of what tclsh to use for various scripts when doing
+ cross compiling. An imperfect solution, but works.
+
+ * unix/installManPage: Remap non-alphanumeric sequences in filenames
+ to single underscores (especially colons).
+
+2010-02-26 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/zlib.test: Add tests for [Bug 2818131] which was crashing with
+ mismatched zlib algorithms used in combination with gets. This issue
+ has been fixed by Andreas's last commit.
+
+2010-02-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclHash.c: [FRQ 2958832]: Further speed-up of the
+ * generic/tclLiteral.c: ouster-hash function.
+ * generic/tclObj.c:
+ * generic/tclCkalloc.c: Eliminate various unnecessary (ClientData)
+ * generic/tclTest.c: type casts.
+ * generic/tclTestObj.c:
+ * generic/tclTestProcBodyObj.c:
+ * unix/tclUnixTest.c:
+ * unix/tclUnixTime.c:
+ * unix/tclXtTest.c:
+
+2010-02-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (SetDictFromAny): Prevent the list<->dict
+ * generic/tclListObj.c (SetListFromAny): conversion code from taking
+ too many liberties. Stops loss of duplicate keys in some scenarios.
+ Many thanks to Jean-Claude Wippler for finding this.
+
+ * generic/tclExecute.c (TclExecuteByteCode): Reduce ifdef-fery and
+ size of activation record. More variables shared across instructions
+ than before.
+
+ * doc/socket.n: [Bug 2957688]: Clarified that [socket -server] works
+ with a command prefix. Extended example to show this in action.
+
+2010-02-22 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclZlib.c (ZlibTransformInput): [Bug 2762041]: Added a hack
+ to work around the general problem, early EOF recognition based on the
+ base-channel, instead of the data we have ready for reading in the
+ transform. Long-term we need a proper general fix (likely tracking EOF
+ on each level of the channel stack), with attendant complexity.
+ Furthermore, Z_BUF_ERROR can be ignored, and must be when feeding the
+ zlib code with single characters.
+
+2010-02-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclUnixPort.h: Remove unnecessary EXTERN's, which already are
+ in the global stub table.
+ * unix/configure.in: Use @EXEEXT@ in stead of @EXT_SUFFIX@
+ * unix/tcl.m4:
+ * unix/Makefile.in: Use -DBUILD_tcl for CYGWIN
+ * unix/configure: (regenerated)
+ * unix/dltest/pkg*.c: Use EXTERN to control CYGWIN exported symbols
+ * generic/tclCmdMZ.c: Remove some unnecessary type casts.
+ * generic/tclCompCmds.c:
* generic/tclTest.c:
- * mac/tclMacChan.c:
- * unix/tclUnixChan.c:
- * win/tclWinChan.c:
- * doc/FileSystem.3: cleaned up internal handling of
- Tcl_FSOpenFileChannel to remove duplicate code, and make
- writing external vfs's clearer and easier. No
- functionality change. Also clarify that objects with refCount
- zero should not be passed in to the Tcl_FS API, and prevent
- segfaults from occuring on such user errors. [Bug 578617]
-
-2002-07-06 Don Porter <dgp@users.sourceforge.net>
-
- * tests/pkgMkIndex.test: Constrained tests of [load] package indexing
- to those platforms where the testing shared libraries have been built.
- [Bug 578166].
-
-2002-07-05 Don Porter <dgp@users.sourceforge.net>
- * changes: added recent changes
-
-2002-07-05 Reinhard Max <max@suse.de>
-
- * generic/tclClock.c (FormatClock): Convert the format string to
- UTF8 before calling TclpStrftime, so that non-ASCII characters
- don't get mangled when the result string is being converted back.
- * tests/clock.test: Added a test for that.
-
-2002-07-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * unix/Makefile.in (ro-test,ddd,GDB,DDD): Created new targets to
- allow running the test suite with a read-only current directory,
- running under ddd instead of gdb, and factored out some executable
- names for broken sites (like mine) where gdb and ddd are installed
- with non-standard names...
-
- * tests/httpold.test: Altered test names to httpold-* to avoid
- clashes with http.test, and stopped tests from failing when the
- current directory is not writable...
-
- * tests/event.test: Stop these tests from failing
- * tests/ioUtil.test: when the current directory is
- * tests/regexp.test: not writable...
- * tests/regexpComp.test:
- * tests/source.test:
- * tests/unixFile.test:
- * tests/unixNotfy.test:
-
- * tests/unixFCmd.test: Trying to make these test-files
- * tests/macFCmd.test: not bomb out with an error when
- * tests/http.test: the current directory is not
- * tests/fileName.test: writable...
- * tests/env.test:
-
-2002-07-05 Jeff Hobbs <jeffh@ActiveState.com>
-
- *** 8.4b1 TAGGED FOR RELEASE ***
-
-2002-07-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * tests/cmdMZ.test (cmdMZ-1.4):
- * tests/cmdAH.test: More fixing of writable-current-dir
- assumption. [Bug 575824]
-
-2002-07-04 Miguel Sofer <msofer@users.sourceforge.net>
-
- * tests/basic.test: Same issue as below; fixed [Bug 575817]
-
-2002-07-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * tests/socket.test:
- * tests/winPipe.test:
- * tests/pid.test: Fixed SF Bug #575848. See below for a
- description the general problem.
-
- * All the bugs below are instances of the same problem: The
- testsuite assumes [pwd] = [temporaryDirectory] and writable.
-
- * tests/iogt.test: Fixed bug #575860.
- * tests/io.test: Fixed bug #575862.
- * tests/exec.test:
- * tests/ioCmd.test: Fixed bug #575836.
-
-2002-07-03 Don Porter <dgp@users.sourceforge.net>
-
- * tests/pkg1/direct1.tcl: removed
- * tests/pkg1/pkgIndex.tcl: removed
- * tests/pkgMkIndex.test: Imported auxilliary files from tests/pkg1
- into the test file pkgMkIndex.test itself. Formatting fixes.
-
- * unix/Makefile.in: removed tests/pkg/* from `make dist`
-
- * tests/pkg/circ1.tcl: removed
- * tests/pkg/circ2.tcl: removed
- * tests/pkg/circ3.tcl: removed
- * tests/pkg/global.tcl: removed
- * tests/pkg/import.tcl: removed
- * tests/pkg/pkg1.tcl: removed
- * tests/pkg/pkg2_a.tcl: removed
- * tests/pkg/pkg2_b.tcl: removed
- * tests/pkg/pkg3.tcl: removed
- * tests/pkg/pkg4.tcl: removed
- * tests/pkg/pkg5.tcl: removed
- * tests/pkg/pkga.tcl: removed
- * tests/pkg/samename.tcl: removed
- * tests/pkg/simple.tcl: removed
- * tests/pkg/spacename.tcl: removed
- * tests/pkg/std.tcl: removed
- * tests/pkgMkIndex.test: Fixed [Bug 575857] where this test file
- expected to be able to write to [file join [testsDirectory]
- pkg]. Part of the fix was to import several auxilliary files
- into the test file itself.
+ * generic/tclUtil.c:
- * tests/main.test: Cheap fix for [Bugs 575851, 575858]. Avoid
- * tests/tcltest.test: non-writable . by [cd [temporaryDirectory]].
+2010-02-21 Mo DeJong <mdejong@users.sourceforge.net>
- * library/auto.tcl: Fix [tcl_findLibrary] to be sure it sets
- $varName only if a successful library script is found.
- [Bug 577033]
+ * tests/regexp.test: Add test cases back ported from Jacl regexp work.
-2002-07-03 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclCompCmds.c (TclCompileCatchCmd): return
- TCL_OUT_LINE_COMPILE instead of TCL_ERROR: let the failure
- happen at runtime so that it can be caught [Bug 577015].
-
-2002-07-02 Joe English <jenglish@users.sourceforge.net>
+2010-02-21 Jan Nijtmans <nijtmans@users.sf.net>
- * doc/tcltest.n: Markup fixes, spellcheck.
-
-2002-07-02 Don Porter <dgp@users.sourceforge.net>
-
- * doc/tcltest.n: more refinements of the documentation.
-
- * library/tcltest/tcltest.tcl: Added trace to be sure the stdio
- constraint is updated whenever the [interpreter] changes.
-
- * doc/tcltest.n: Reverted [makeFile] and [viewFile] to
- * library/tcltest/tcltest.tcl: their former behavior, and documented
- * tests/cmdAH.test: it. Corrected misspelling of hook
- * tests/event.test: procedure. Restored tests.
- * tests/http.test:
- * tests/io.test:
+ * generic/tclDate.c: Some more const tables.
+ * generic/tclGetDate.y:
+ * generic/regc_lex.c:
+ * generic/regerror.c:
+ * generic/tclStubLib.c:
+ * generic/tclBasic.c: Fix [Bug 2954959] expr abs(0.0) is -0.0
+ * tests/expr.test:
- * library/tcltest/tcltest.tcl: Simplified logic of
- [GetMatchingFiles] and [GetMatchingDirectories], removing
- special case processing.
-
- * doc/tcltest.n: More documentation updates. Reference sections
- are complete. Only examples need adding.
-
-2002-07-02 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * tests/fCmd.test:
- * generic/tclCmdAH.c: clearer error msgs for 'file link',
- as per the man page.
-
-2002-07-01 Joe English <jenglish@users.sourceforge.net>
-
- * doc/Access.3:
- * doc/AddErrInfo.3:
- * doc/Alloc.3:
- * doc/Backslash.3:
- * doc/CrtChannel.3:
- * doc/CrtSlave.3:
- * doc/Encoding.3:
- * doc/Eval.3:
- * doc/FileSystem.3:
- * doc/Notifier.3:
- * doc/OpenFileChnl.3:
- * doc/ParseCmd.3:
- * doc/RegExp.3:
- * doc/Tcl_Main.3:
- * doc/Thread.3:
- * doc/TraceCmd.3:
- * doc/Utf.3:
- * doc/WrongNumArgs.3:
- * doc/binary.n:
- * doc/clock.n:
- * doc/expr.n:
- * doc/fconfigure.n:
- * doc/glob.n:
- * doc/http.n:
- * doc/interp.n:
- * doc/lsearch.n:
- * doc/lset.n:
- * doc/msgcat.n:
- * doc/packagens.n:
- * doc/pkgMkIndex.n:
- * doc/registry.n:
- * doc/resource.n:
- * doc/safe.n:
- * doc/scan.n:
- * doc/tclvars.n: Spell-check, fixed typos (Updates from Larry Virden).
-
-2002-07-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Made Solaris use gcc for linking
- when building with gcc to resolve problems with undefined symbols
- being present when tcl library used with non-gcc linker at later
- stage. Symbols were compiler-generated, so it is the compiler's
- business to define them. [Bug #541181]
-
-2002-07-01 Don Porter <dgp@users.sourceforge.net>
-
- * doc/tcltest.n: more work in progress updating tcltest docs.
-
- * library/tcltest/tcltest.tcl: Change [configure -match] to
- stop treating an empty list as a list of the single pattern "*".
- Changed the default value to [list *] so default operation
- remains the same.
-
- * tests/pkg/samename.tcl: restored. needed by pkgMkIndex.test.
-
- * library/tcltest/tcltest.tcl: restored writeability testing of
- -tmpdir, augmented by a special exception for the deafault value.
-
-2002-07-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/concat.n: Documented the *real* behaviour of [concat]!
-
-2002-06-30 Don Porter <dgp@users.sourceforge.net>
-
- * doc/tcltest.n: more work in progress updating tcltest docs.
-
- * tests/README: Updated the instructions on running and
- * tests/cmdMZ.test: adding to the test suite. Also updated
- * tests/encoding.test: several tests, mostly to correctly create
- * tests/fCmd.test: and destroy any temporary files in the
- * tests/info.test: [temporaryDirectory] of tcltest.
- * tests/interp.test:
+2010-02-20 Donal K. Fellows <dkf@users.sf.net>
- * library/tcltest/tcltest.tcl: Stopped checking for writeability
- of -tmpdir value because no default directory can be guaranteed to
- be writeable.
+ * generic/tclCompCmds.c (TclCompileStringLenCmd): Make [string length]
+ of a constant string be handled better (i.e., handle backslashes too).
- * tests/autoMkindex.tcl: removed.
- * tests/pkg/samename.tcl: removed.
- * tests/pkg/magicchar.tcl: removed.
- * tests/pkg/magicchar2.tcl: removed.
- * tests/autoMkindex.test: Updated auto_mkIndex tests to use
- [makeFile] and [removeFile] so tests are done in [temporaryDirecotry]
- where write access is guaranteed.
+2010-02-19 Stuart Cassoff <stwo@users.sourceforge.net>
- * library/tcltest/tcltest.tcl: Fixed [makeFile] and [viewFile] to
- * tests/cmdAH.test: accurately reflect a file's contents.
- * tests/event.test: Updated tests that depended on buggy
- * tests/http.test: behavior. Also added warning messages
- * tests/io.test: to "-debug 1" operations to debug test
- * tests/iogt.test: calls to (make|remove)(File|Directory).
+ * tcl.m4: Correct compiler/linker flags for threaded builds on
+ OpenBSD.
+ * configure: (regenerated).
- * unix/mkLinks: `make mklinks` on 6-27 commits.
+2010-02-19 Donal K. Fellows <dkf@users.sf.net>
-2002-06-28 Miguel Sofer <msofer@users.sourceforge.net>
+ * unix/installManPage: [Bug 2954638]: Correct behaviour of manual page
+ installer. Also added armouring to check that assumptions about the
+ initial state are actually valid (e.g., look for existing input file).
- * generic/tclCompile.h: modified the macro TclEmitPush to not
- call its first argument repeatedly or pass it to other macros,
- [Bug 575194] reported by Peter Spjuth.
+2010-02-17 Donal K. Fellows <dkf@users.sf.net>
-2002-06-28 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclHash.c (HashStringKey): Restore these hash functions
+ * generic/tclLiteral.c (HashString): to use the classic algorithm.
+ * generic/tclObj.c (TclHashObjKey): Community felt normal case
+ speed to be more important than resistance to malicious cases. For
+ now, hashes that need to deal with the malicious case can use a custom
+ hash table and install their own hash function, though that is not
+ functionality exposed to the script level.
- * docs/tcltest.n: Doc revisions in progress.
- * library/tcltest/tcltest.tcl: Corrected -testdir default value.
- Was not reliable, and disagreed with docs! Thanks to Hemang Lavana.
- [Bug 575150]
+ * generic/tclCompCmds.c (TclCompileDictUpdateCmd): Stack depth must be
+ correctly described when compiling a body to prevent crashes in some
+ debugging modes.
-2002-06-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2010-02-16 Jan Nijtmans <nijtmans@users.sf.net>
- * unix/tclUnixThrd.c: Renamed the Tcl_Platform* #defines to
- * unix/tclUnixPipe.c: TclOS* because they are only used
- * unix/tclUnixFile.c: internally. Also stopped double-#def
- * unix/tclUnixFCmd.c: of TclOSlstat [Bug #566099, post-rename]
- * unix/tclUnixChan.c:
- * unix/tclUnixPort.h:
+ * generic/tclInt.h: Change order of various struct members,
+ fixing potential binary incompatibility with Tcl 8.5
- * doc/string.n: Improved documentation for [string last] along
- lines described in Bug #574799 so it indicates that the supplied
- index marks the end of the search space.
+2010-02-16 Donal K. Fellows <dkf@users.sf.net>
-2002-06-27 Don Porter <dgp@users.sourceforge.net>
+ * unix/configure.in, generic/tclIOUtil.c (Tcl_Stat): Updated so that
+ we do not assume that all unix systems have the POSIX blkcnt_t type,
+ since OpenBSD apparently does not.
- * doc/dde.n: Work in progress updating the documentation
- * doc/http.n: of the packages that come bundled with
- * doc/msgcat.n: the Tcl source distribution, notably tcltest.
- * doc/registry.n:
- * doc/tcltest.n:
+ * generic/tclLiteral.c (HashString): Missed updating to FNV in one
+ place; the literal table (a copy of the hash table code...)
- * library/tcltest/tcltest.tcl: Made sure that the TCLTEST_OPTIONS
- environment variablle configures tcltest at package load time.
+2010-02-15 Jan Nijtmans <nijtmans@users.sf.net>
-2002-06-26 Vince Darley <vincentdarley@users.sourceforge.net>
+ * tools/genStubs.tcl: Reverted earlier rename from tcl*Stubs to
+ * generic/tclBasic.c: tcl*ConstStubs, it's not necessary at all.
+ * generic/tclOO.c:
+ * generic/tclTomMathInterface.c:
+ * generic/tclStubInit.c: (regenerated)
+ * generic/tclOOStubInit.c: (regenerated)
+ * generic/tclEnsemble.c:Fix signed-unsigned mismatch
+ * win/tclWinInt.h: make tclWinProcs "const"
+ * win/tclWin32Dll.c:
+ * win/tclWinFCmd.c: Eliminate all internal Tcl_WinUtfToTChar
+ * win/tclWinFile.c: and Tcl_WinTCharToUtf calls, needed
+ * win/tclWinInit.c: for mslu support.
+ * win/tclWinLoad.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
+ * win/.cvsignore:
+ * compat/unicows/readme.txt: [FRQ 2819611]: Add first part of MSLU
+ * compat/unicows/license.txt: support.
+ * compat/unicows/unicows.lib:
- * tests/fileSystem.test:
- * generic/tclIOUtil.c: fix to handling of empty paths ""
- which are not claimed by any filesystem (Bug #573758).
- Ensure good error messages are given in all cases.
- * tests/cmdAH.test:
- * unix/tclUnixFCmd.c: fix to bug reported as part of
- (Patch #566669). Thanks to Taguchi, Takeshi for the report.
-
-2002-06-26 Reinhard Max <max@suse.de>
+2010-02-15 Donal K. Fellows <dkf@users.sf.net>
- * unix/tclUnixTime.c: Make [clock format] respect locale settings.
- * tests/clock.test: Bug #565880. ***POTENTIAL INCOMPATIBILITY***
+ * generic/tclOO.c (AllocObject, SquelchedNsFirst, ObjectRenamedTrace):
+ * generic/tclNamesp.c (Tcl_DeleteNamespace): [Bug 2950259]: Revised
+ the namespace deletion code to provide an additional internal callback
+ that gets triggered early enough in namespace deletion to allow TclOO
+ destructors to run sanely. Adjusted TclOO to take advantage of this,
+ so making tearing down an object by killing its namespace appear to
+ work seamlessly, which is needed for Itcl. (Note that this is not a
+ feature that will ever be backported to 8.5, and it remains not a
+ recommended way of deleting an object.)
+
+2010-02-13 Donal K. Fellows <dkf@users.sf.net>
-2002-06-26 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Divided the [switch]
+ compiler into three pieces (after the model of [try]): a parser, an
+ instruction-issuer for chained tests, and an instruction-issuer for
+ jump tables.
- * doc/CrtInterp.3:
- * doc/StringObj.3: clarifications by Don Porter, bugs #493995 and
- #500930.
-
-2002-06-24 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclEnsemble.c: Split the ensemble engine out into its own
+ file rather than keeping it mashed together with the namespace code.
- * library/tcltest/tcltest.tcl: Corrected suppression of -verbose skip
- * tests/tcltest.test: and start by [test -output]. Also
- corrected test suite errors exposed by corrected code. [Bug 564656]
+2010-02-12 Jan Nijtmans <nijtmans@users.sf.net>
-2002-06-25 Reinhard Max <max@suse.de>
+ * win/tcl.m4: Use -pipe for gcc on win32
+ * win/configure: (mingw/cygwin) (regenerated)
+ * win/.cvsignore: Add .lib, .exp and .res here
- * unix/tcl.m4: New macro SC_CONFIG_MANPAGES.
- * unix/configure.in: Added support for symlinks and compression
- * unix/Makefile.in: when installing the manpages. [Patch 518052]
- * unix/mkLinks.tcl: Default is still hardlinks and no compression.
+2010-02-11 Mo DeJong <mdejong@users.sourceforge.net>
- * unix/mkLinks: generated
- * unix/configure:
+ * tests/list.test: Add tests for explicit \0 in a string argument to
+ the list command.
- * unix/README: Added documentation for the new features.
-
- * unix/tcl.m4 (SC_PATH_TCLCONFIG): Replaced ${exec_prefix}/lib by
- ${libdir}.
-
-2002-06-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * generic/tclUtil.c (TclGetIntForIndex): Fix of critical bug
- #533364 generated when the index is bad and the result is a shared
- object. The T_ASTO(T_GOR, ...) idiom likely exists elsewhere
- though. Also removed some cruft that just complicated things to
- no advantage.
- (SetEndOffsetFromAny): Same fix, though this wasn't on the path
- excited by the bug.
-
-2002-06-24 Don Porter <dgp@users.sourceforge.net>
-
- * library/tcltest/tcltest.tcl: Implementation of TIP 101. Adds
- * tests/parseOld.test: and exports a [configure] command
- * tests/tcltest.test: from tcltest.
-
-2002-06-22 Don Porter <dgp@users.sourceforge.net>
-
- * changes: updated changes file for 8.4b1 release.
-
- * library/tcltest/tcltest.tcl: Corrections to tcltest and the
- * tests/basic.test: Tcl test suite so that a test
- * tests/cmdInfo.test: with options -constraints knownBug
- * tests/compile.test: -limitConstraints 1 only tests the
- * tests/encoding.test: knownBug tests. Mostly involves
- * tests/env.test: replacing direct access to the
- * tests/event.test: testConstraints array with calls
- * tests/exec.test: to the testConstraint command
- * tests/execute.test: (which requires tcltest version 2)
- * tests/fCmd.test:
- * tests/format.test:
- * tests/http.test:
- * tests/httpold.test:
- * tests/ioUtil.test:
- * tests/link.test:
- * tests/load.test:
+2010-02-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIOCmd.c (Tcl_OpenObjCmd): [Bug 2949740]: Make sure that
+ we do not try to put a NULL pipeline channel into binary mode.
+
+2010-02-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ [Bug 2826551, Patch 2948425]: Assorted regexp bugs related to -all,
+ -line and -start options and newlines.
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): If -offset is given, treat it
+ as the start of the line if the previous character was a newline. Fix
+ nasty edge case where a zero length match would not advance the index.
+ * tests/regexp.test: Add regression tests back ported from Jacl.
+ Checks for a number of issues related to -line and newline handling. A
+ few of tests were broken before the patch and continue to be broken,
+ marked as knownBug.
+
+2010-02-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (ObjectRenamedTrace): [Bug 2949397]: Prevent
+ destructors from running on the two core class objects when the whole
+ interpreter is being destroyed.
+
+2010-02-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileTryCmd, IssueTryInstructions)
+ (IssueTryFinallyInstructions): Added compiler for the [try] command.
+ It is split into three pieces that handle the parsing of the tokens,
+ the issuing of instructions for finally-free [try], and the issuing of
+ instructions for [try] with finally; there are enough differences
+ between the all cases that it was easier to split the code rather than
+ have a single function do the whole thing.
+
+2010-02-09 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tools/genStubs.tcl: Remove dependency on 8.5+ idiom "in" in
+ expressions.
+
+2010-02-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (Tcl_ZlibDeflate, Tcl_ZlibInflate): [Bug 2947783]:
+ Make sure that the result is an unshared object before appending to it
+ so that nothing crashes if it is shared (use in Tcl code was not
+ affected by this, but use from C was an issue).
+
+2010-02-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclHash.c (HashStringKey): Replace Tcl's crusty old hash
+ * generic/tclObj.c (TclHashObjKey): function with the algorithm
+ due to Fowler, Noll and Vo. This is slightly faster (assuming the
+ presence of hardware multiply) and has somewhat better distribution
+ properties of the resulting hash values. Note that we only ever used
+ the 32-bit version of the FNV algorithm; Tcl's core hash engine
+ assumes that hash values are simple unsigned ints.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Code that depends on hash iteration order (especially tests) may well
+ be disrupted by this. Where a definite order is required, the fix is
+ usually to just sort the results after extracting them from the hash.
+ Where this is insufficient, the code that has ceased working was
+ always wrong and was only working by chance.
+
+2010-02-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileErrorCmd): Added compilation of the
+ [error] command. No new bytecodes.
+
+2010-02-05 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: Follow-up to earlier commit today:
+ Eliminate the need for an extra Stubs Pointer for adressing
+ a static stub table: Just change the exported table from
+ static to MODULE_SCOPE.
+ * generic/tclBasic.c
+ * generic/tclOO.c
+ * generic/tclTomMathInterface.c
+ * generic/tcl*Decls.h (regenerated)
+ * generic/tclStubInit.c (regenerated)
+ * generic/tclOOStubInit.c (regenerated)
+ * generic/tclTest.c (minor formatting)
+
+2010-02-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c: More consistency in errorcode generation.
+
+ * generic/tclOOBasic.c (TclOO_Object_Destroy): Rewrote to be NRE-aware
+ when calling destructors. Note that there is no guarantee that
+ destructors will always be called in an NRE context; that's a feature
+ of the 'destroy' method only.
+
+ * generic/tclEncoding.c: Add 'const' to many function-internal vars
+ that are never pointing to things that are written to.
+
+2010-02-05 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * tools/genStubs.tcl: Follow-up to [2010-01-29] commit:
+ prevent space within stub table function parameters if the
+ parameter type is a pointer.
+ * win/tclWinInt.h: Minor Formatting
+ * generic/tcl.h: VOID -> void and other formatting
+ * generic/tclInt.h: Minor formatting
+ * generic/tclInt.decls: Change signature of TclNRInterpProcCore,
+ * generic/tclOO.decls: and TclOONewProc(Instance|)MethodEx,
+ * generic/tclProc.c: indicating that errorProc is a function,
+ * generic/tclOOMethod.c:pointer, and other formatting
+ * generic/tcl*Decls.h: (regenerated)
+ * generic/tclVar.c: gcc warning(line 3703): 'pattern' may be used
+ uninitialized in this function
+ gcc warning(line 3788): 'matched' may be used
+ uninitialized in this function
+
+2010-02-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c: Added more use of error-codes and reduced the
+ stack overhead of older interfaces.
+ (ArrayGetCmd): Stop silly crash when using a trivial pattern due to
+ error in conversion to ensemble.
+ (ArrayNamesCmd): Use the object RE interface for faster matching.
+
+2010-02-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c (ArrayUnsetCmd): More corrections.
+
+2010-02-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c: Turned the [array] command into a true ensemble.
+
+ * generic/tclOO.c (AllocObject, MyDeleted): A slightly faster way to
+ handle the deletion of [my] is with a standard delete callback. This
+ is because it doesn't require an additional memory allocation during
+ object creation. Also reduced the amount of string manipulation
+ performed during object creation to further streamline memory
+ handling; this is not backported to the 8.5 package as it breaks a
+ number of abstractions.
+
+ * generic/tclOOBasic.c (TclOO_Object_Destroy): [Bug 2944404]: Do not
+ crash when a destructor deletes the object that is executing that
+ destructor.
+
+2010-02-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c (Tcl_ArrayObjCmd): [Bug 2939073]: Stop the [array
+ unset] command from having dangling pointer problems when an unset
+ trace deletes the element that is going to be processed next. Many
+ thanks to Alexandre Ferrieux for the bulk of this fix.
+
+ * generic/regexec.c (ccondissect, crevdissect): [Bug 2942697]: Rework
+ these functions so that certain pathological patterns are matched much
+ more rapidly. Many thanks to Tom Lane for dianosing this issue and
+ providing an initial patch.
+
+2010-01-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompile.c (tclInstructionTable): Bytecode instructions
+ * generic/tclCompCmds.c (TclCompileUnsetCmd): to allow the [unset]
+ * generic/tclExecute.c (TclExecuteByteCode): command to be compiled
+ with the compiler being a complete compilation for all compile-time
+ decidable uses.
+
+ * generic/tclVar.c (TclPtrUnsetVar): Var reference version of the code
+ to unset a variable. Required for INST_UNSET bytecodes.
+
+2010-01-29 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: [Bug 2942081]: Reverted Tcl_ThreadDataKey type change
+ Changed some Tcl_CallFrame fields from "char *"
+ to "void *". This saves unnecessary space on
+ Cray's (and it's simply more correct).
+
+ * tools/genStubs.tcl: No longer generate a space after "*" and
+ immediately after a function name, so the
+ format of function definitions in tcl*Decls.h
+ match all other tcl*.h header files.
+ * doc/ParseArgs.3: Change Tcl_ArgvFuncProc, Tcl_ArgvGenFuncProc
+ * generic/tcl.h: and GetFrameInfoValueProc to be function
+ * generic/tclInt.h: definitions, not pointers, for consistency
+ * generic/tclOOInt.h: with all other Tcl function definitions.
+ * generic/tclIndexObj.c:
+ * generic/regguts.h: CONST -> const
+ * generic/tcl.decls: Formatting
+ * generic/tclTomMath.decls: Formatting
+ * generic/tclDecls.h: (regenerated)
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclOODecls.h:
+ * generic/tclOOIntDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclTomMathDecls.h:
+
+2010-01-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOBasic.c (TclOO_Object_Destroy): Move the execution of
+ destructors to a point where they can produce an error. This will not
+ work for all destructors, but it does mean that more failing calls of
+ them will be caught.
+ * generic/tclOO.c (AllocObject, MyDeletedTrace, ObjectRenamedTrace):
+ (ObjectNamespaceDeleted): Stop various ways of getting at commands
+ with dangling pointers to the object. Also increases the reliability
+ of calling of destructors (though most destructors won't benefit; when
+ an object is deleted namespace-first, its destructors are not run in a
+ nice state as the namespace is partially gone).
+
+2010-01-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclOOStubInit.c: Remove double includes (which causes a
+ * generic/tclOOStubLib.c: warning in CYGWIN compiles)
+ * unix/.cvsignore: add confdefs.h
+
+2010-01-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/proc.n: [Bug 1970629]: Define a bit better what the current
+ namespace of a procedure is.
+
+2010-01-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: Don't use DWORD and HANDLE here.
+ * generic/tclIntPlatDecls.h:
+ * generic/tcl.h: Revert [2009-12-21] change, instead
+ * generic/tclPort.h: resolve the CYGWIN inclusion problems by
+ * win/tclWinPort.h: re-arranging the inclusions at other
+ places.
+ * win/tclWinError.c
+ * win/tclWinPipe.c
+ * win/tcl.m4: Make cygwin configuration error into
+ * win/configure.in: a warning: CYGWIN compilation works
+ * win/configure: although there still are test failures.
+
+2010-01-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Improve error code
+ generation from some of the tailcall-related bits of TEBC.
+
+2010-01-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.h: [Bug 2910748]: NRE-enable direct eval on BC
+ * generic/tclExecute.c: spoilage.
+ * tests/nre.test:
+
+2010-01-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n: [Bug 2929546]: Clarify just what [dict with] and [dict
+ update] are doing with variables.
+
+2010-01-18 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CreateScriptRecord): [Bug 2918110]: Initialize
+ the EventScriptRecord (esPtr) fully before handing it to
+ Tcl_CreateChannelHandler for registration. Otherwise a reflected
+ channel calling 'chan postevent' (== Tcl_NotifyChannel) in its
+ 'watchProc' will cause the function 'TclChannelEventScriptInvoker'
+ to be run on an uninitialized structure.
+
+2010-01-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclStringObj.c (Tcl_AppendFormatToObj): [Bug 2932421]: Stop
+ the [format] command from causing argument objects to change their
+ internal representation when not needed. Thanks to Alexandre Ferrieux
+ for this fix.
+
+2010-01-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl: More factoring out of special cases
+ * tools/tcltk-man2html-utils.tcl: so that they are described outside
+ the engine file. Now there is only one real set of special cases in
+ there, to handle the .SO/.OP/.SE directives.
+
+2010-01-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: Fix TCL_LL_MODIFIER for Cygwin
+ * generic/tclEnv.c: Fix CYGWIN compilation problems,
+ * generic/tclInt.h: and remove some unnecessary
+ * generic/tclPort.h: double includes.
+ * generic/tclPlatDecls.h:
+ * win/cat.c:
+ * win/tclWinConsole.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
+ * win/tclWinThrd.c:
+ * win/tclWinPort.h: Put win32 includes first
+ * unix/tclUnixChan.c: Forgot one CONST change
+
+2010-01-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl: Make the generation of the list of things
+ to process the docs from simpler and more flexible. Also factored out
+ the lists of special cases.
+
+2010-01-10 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tclWinDde.c: VC++ 6.0 doesn't have
+ * win/tclWinReg.c: PDWORD_PTR
+ * win/tclWinThrd.c: Fix various minor gcc warnings.
+ * win/tclWinTime.c:
+ * win/tclWinConsole.c: Put channel type definitions
+ * win/tclWinChan.c: in static const memory
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
+ * win/tclWinSock.c:
+ * generic/tclIOGT.c:
+ * generic/tclIORChan.c:
+ * generic/tclIORTrans.c:
+ * unix/tclUnixChan.c:
+ * unix/tclUnixPipe.c:
+ * unix/tclUnixSock.c:
+ * unix/configure: (regenerated with autoconf 2.59)
+ * tests/info.test: Make test independant from
+ tcltest implementation.
+
+2010-01-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/namespace.test (namespace-51.17): [Bug 2898722]: Demonstrate
+ that there are still bugs in the handling of resolution epochs. This
+ bug is not yet fixed.
+
+ * tools/tcltk-man2html.tcl: Split the man->html converter into
+ * tools/tcltk-man2html-utils.tcl: two pieces for easier maintenance.
+ Also made it much less verbose in its printed messages by default.
+
+2010-01-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl: Added basic support for building the docs
+ for contributed packages into the HTML versions. Prompted by question
+ on Tcler's Chat by Tom Krehbiel. Note that there remain problems in
+ the documentation generated due to errors in the contributed docs.
+
+2010-01-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c (TclPathPart): [Bug 2918610]: Correct
+ * tests/fileName.test (filename-14.31): inconsistency between the
+ string rep and the intrep of a path value created by [file rootname].
+ Thanks to Vitaly Magerya for reporting.
+
+2010-01-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): [Bug 1636685]: Use the configuration
+ for modern FreeBSD suggested by the FreeBSD porter.
+
+2010-01-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Bug 2724403]: Fix leak of coroutines on
+ * generic/tclCompile.h: namespace deletion. Added a test for this
+ * generic/tclNamesp.c: leak, and also a test for leaks on namespace
+ * tests/coroutine.test: deletion.
* tests/namespace.test:
- * tests/pkgMkIndex.test:
- * tests/reg.test:
- * tests/result.test:
- * tests/scan.test:
- * tests/stack.test:
-2002-06-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-12-30 Donal K. Fellows <dkf@users.sf.net>
- * tools/tcl.wse.in (Disk Label), unix/tcl.spec (version):
- * win/README.binary, README, win/configure.in, unix/configure.in:
- * generic/tcl.h (TCL_RELEASE_*, TCL_PATCH_LEVEL): Bump to beta1.
+ * library/safe.tcl (AliasSource): [Bug 2923613]: Make the safer
+ * tests/safe.test (safe-8.9): [source] handle a [return] at the
+ end of the file correctly.
-2002-06-21 Joe English <jenglish@users.sourceforge.net>
+2009-12-30 Miguel Sofer <msofer@users.sf.net>
- * generic/tclCompExpr.c:
- * generic/tclParseExpr.c: LogSyntaxError() should reset
- the interpreter result [Bug 550142 "Tcl_ExprObj -> abort"]
-
-2002-06-21 Don Porter <dgp@users.sourceforge.net>
-
- * unix/Makefile.in: Updated all package install directories
- * win/Makefile.in: to match current Major.minor versions
- * win/makefile.bc: of the packages. Added tcltest package
- * win/makefile.vc: to installation on Windows.
-
- * library/init.tcl: Corrected comments and namespace style
- issues. Thanks to Bruce Stephens. [Bug 572025]
-
-2002-06-21 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * tests/cmdAH.test: Added TIP#99 implementation
- * tests/fCmd.test: of 'file link'. Supports creation
- * tests/fileName.test: of symbolic and hard links in the
- * tests/fileSystem.test: native filesystems and in vfs's,
- * generic/tclTest.c: when the individual filesystem
- * generic/tclCmdAH.c: supports the concept.
- * generic/tclIOUtil.c:
- * generic/tcl.h:
- * generic/tcl.decls:
- * doc/FileSystem.3:
- * doc/file.n:
- * mac/tclMacFile.c:
- * unix/tclUnixFile.c:
- * win/tclWinFile.c: Also enhanced speed of 'file normalize' on
- Windows.
+ * library/init.tcl (unknown): [Bug 2824981]: Fix infinite recursion of
+ ::unknown when [set] is undefined.
-2002-06-20 Miguel Sofer <msofer@users.sourceforge.net>
+2009-12-29 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclBasic.c (TclEvalObjvInternal): fix for [Bug 571385]
- in the implementation of TIP#62 (command tracing). Vince Darley,
- Hemang Lavana & Don Porter: thanks.
+ * generic/tclHistory.c (Tcl_RecordAndEvalObj): Reduce the amount of
+ allocation and deallocation of memory by caching objects in the
+ interpreter assocData table.
-2002-06-20 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclObj.c (Tcl_GetCommandFromObj): Rewrite the logic so that
+ it does not require making assignments part way through an 'if'
+ condition, which was deeply unclear.
- * generic/tclExecute.c (TclCompEvalObj): clarified and simplified
- the logic for compilation/recompilation.
+ * generic/tclInterp.c (Tcl_MakeSafe): [Bug 2895741]: Make sure that
+ the min() and max() functions are supported in safe interpreters.
-2002-06-19 Joe English <jenglish@users.sourceforge.net>
- * doc/file.n: Fixed indentation. No substantive changes.
+2009-12-29 Pat Thoyts <patthoyts@users.sourceforge.net>
-2002-06-19 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclBinary.c: [Bug 2922555]: Handle completely invalid input
+ * tests/binary.test: to the decode methods.
- * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): get the resultPtr again
- as the Tcl_ObjSetVar2 may cause the result to change.
- [Patch #558324] (watson)
+2009-12-28 Donal K. Fellows <dkf@users.sf.net>
-2002-06-19 Miguel Sofer <msofer@users.sourceforge.net>
+ * unix/Makefile.in (trace-shell, trace-test): [FRQ 1083288]: Added
+ targets to allow easier tracing of shell and test invokations.
- * generic/tclExecute.c (TEBC): removing unused "for(;;)" loop;
- improved comments; re-indentation.
+ * unix/configure.in: [Bug 942170]: Detect the st_blocks field of
+ * generic/tclCmdAH.c (StoreStatData): 'struct stat' correctly.
+ * generic/tclFileName.c (Tcl_GetBlocksFromStat):
+ * generic/tclIOUtil.c (Tcl_Stat):
-2002-06-18 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclInterp.c (TimeLimitCallback): [Bug 2891362]: Ensure that
+ * tests/interp.test (interp-34.13): the granularity ticker is
+ reset when we check limits because of the time limit event firing.
- * generic/tclExecute.c (TEBC):
- - elimination of duplicated code in the non-immediate INST_INCR
- instructions.
- - elimination of 103 (!) TclDecrRefCount macros. The different
- instructions now jump back to a common "DecrRefCount zone" at
- the top of the loop. The macro "ADJUST_PC" was replaced by two
- macros "NEXT_INST_F" and "NEXT_INST_V" that take three params
- (pcAdjustment, # of stack objects to discard, resultObjPtr
- handling flag). The only instructions that retain a
- TclDecrRefCount are INST_POP (for speed), the common code for
- the non-immediate INST_INCR, INST_FOREACH_STEP and the two
- INST_LSET.
+2009-12-27 Donal K. Fellows <dkf@users.sf.net>
- The object size of tclExecute.o was reduced by approx 20% since
- the start of the consolidation drive, while making room for some
- peep-hole optimisation at runtime.
+ * doc/namespace.n (SCOPED SCRIPTS): [Bug 2921538]: Updated example to
+ not be quite so ancient.
-2002-06-18 Miguel Sofer <msofer@users.sourceforge.net>
+2009-12-25 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclExecute.c (TEBC, INST_DONE): small bug in the panic
- code for tcl-stack corruption.
+ * generic/tclCmdMZ.c: CONST -> const
+ * generic/tclParse.c
-2002-06-17 David Gravereaux <davygrvy@pobox.com>
+2009-12-23 Donal K. Fellows <dkf@users.sf.net>
- Trims to support the removal of RESOURCE_INCLUDED from rc
- scripts from FR #565088.
+ * library/safe.tcl (AliasSource, AliasExeName): [Bug 2913625]: Stop
+ information about paths from leaking through [info script] and [info
+ nameofexecutable].
- * generic/tcl.h: moved the #ifndef RC_INVOKED start block up in
- the file. rc scripts don't need to know thread mutexes.
+2009-12-23 Jan Nijtmans <nijtmans@users.sf.net>
- * win/tcl.rc:
- * win/tclsh.rc: removed the #define RESOURCE_INCLUDED to let the
- built-in -DRC_INVOKED to the work.
+ * unix/tcl.m4: Install libtcl8.6.dll in bin directory
+ * unix/Makefile.in:
+ * unix/configure: (regenerated)
+
+2009-12-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): [Bug 2918962]: Stop crash when
+ -index and -stride are used together.
+
+2009-12-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclThreadStorage.c: Fix gcc warning, using gcc-4.3.4 on
+ cygwin: missing initializer
+ * generic/tclOOInt.h: Prevent conflict with DUPLICATE
+ definition in WINAPI's nb30.h
+ * generic/rege_dfa.c: Fix macro conflict on CYGWIN: don't use
+ "small".
+ * generic/tcl.h: Include <winsock2.h> before <stdio.h> on
+ CYGWIN
+ * generic/tclPathObj.c
+ * generic/tclPort.h
+ * tests/env.test: Don't unset WINDIR and TERM, it has a
+ special meaning on CYGWIN (both in UNIX
+ and WIN32 mode!)
+ * generic/tclPlatDecls.h: Include <tchar.h> through tclPlatDecls.h
+ * win/tclWinPort.h: stricmp -> strcasecmp
+ * win/tclWinDde.c: _wcsicmp -> wcscasecmp
+ * win/tclWinFile.c
+ * win/tclWinPipe.c
+ * win/tclWinSock.c
+ * unix/tcl.m4: Add dynamic loading support to CYGWIN
+ * unix/configure (regenerated)
+ * unix/Makefile.in
+
+2009-12-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Bug 2917627]: Fix for bad cmd resolution by
+ * tests/coroutine.test: coroutines. Thanks to schelte for finding it.
+
+2009-12-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/safe.tcl (::safe::AliasGlob): Upgrade to correctly support a
+ larger fraction of [glob] functionality, while being stricter about
+ directory management.
+
+2009-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Fix gcc warning: ignoring return value of
+ * unix/tclUnixNotify.c: "write", declared with attribute
+ * unix/tclUnixPipe.c: warn_unused_result.
+ * generic/tclInt.decls: CONSTify functions TclpGetUserHome and
+ * generic/tclIntDecls.h:TclSetPreInitScript (TIP #27)
+ * generic/tclInterp.c:
+ * win/tclWinFile.c:
+ * unix/tclUnixFile.c:
-2002-06-17 Jeff Hobbs <jeffh@ActiveState.com>
+2009-12-16 Donal K. Fellows <dkf@users.sf.net>
- * doc/CrtTrace.3: Added TIP#62 implementation of command
- * doc/trace.n: execution tracing [FR #462580] (lavana).
- * generic/tcl.h: This includes enter/leave tracing as well
- * generic/tclBasic.c: as inter-procedure stepping.
- * generic/tclCmdMZ.c:
- * generic/tclCompile.c:
+ * doc/tm.n: [Bug 1911342]: Formatting rewrite to avoid bogus crosslink
+ to the list manpage when generating HTML.
+
+ * library/msgcat/msgcat.tcl (Init): [Bug 2913616]: Do not use platform
+ tests that are not needed and which don't work in safe interpreters.
+
+2009-12-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/file.n (file tempfile): [Bug 2388866]: Note that this only ever
+ creates files on the native filesystem. This is a design feature.
+
+2009-12-13 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Release TclPopCallFrame() from its
+ * generic/tclExecute.c: tailcall-management duties
+ * generic/tclNamesp.c:
+
+ * generic/tclBasic.c: Moving TclBCArgumentRelease call from
+ * generic/tclExecute.c: TclNRTailcallObjCmd to TEBC, so that the
+ pairing of the Enter and Release calls is clearer.
+
+2009-12-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclTest.c (TestconcatobjCmd): [Bug 2895367]: Stop memory
+ leak when testing. We don't need extra noise of this sort when
+ tracking down real problems!
+
+2009-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclBinary.c: Fix gcc warning, using gcc-4.3.4 on cygwin
+ * generic/tclCompExpr.c:warning: array subscript has type 'char'
+ * generic/tclPkg.c:
+ * libtommath/bn_mp_read_radix.c:
+ * win/makefile.vc: [Bug 2912773]: Revert to version 1.203
+ * unix/tclUnixCompat.c: Fix gcc warning: signed and unsigned type
+ in conditional expression.
+
+2009-12-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (long-toc, cross-reference): [FRQ 2897296]:
+ Added cross links to sections within manual pages.
+
+2009-12-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Bug 2806407]: Full nre-enabling of coroutines
* generic/tclExecute.c:
- * generic/tclInt.decls:
- * generic/tclInt.h:
- * generic/tclIntDecls.h:
- * generic/tclStubInit.c:
- * generic/tclVar.c:
- * tests/trace.test:
-2002-06-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ * generic/tclBasic.c: Small cleanup
- * win/tclWinPipe.c (BuildCommandLine): Fixed bug #554068 ([exec]
- on windows did not treat { in filenames well.). Bug reported by
- Vince Darley <vincentdarley@users.sourceforge.net>, patch
- provided by Vince too.
+ * generic/tclExecute.c: Fix panic in http11.test caused by buggy
+ earlier commits in coroutine management.
-2002-06-17 Joe English <jenglish@users.sourceforge.net>
+2009-12-10 Andreas Kupries <andreask@activestate.com>
- * generic/tcl.h: #ifdef logic for K&R C backwards compatibility
- changed to assume modern C by default. See SF FR #565088 for
- full details.
+ * generic/tclObj.c (TclContinuationsEnter): [Bug 2895323]: Updated
+ comments to describe when the function can be entered for the same
+ Tcl_Obj* multiple times. This is a continuation of the 2009-11-10
+ entry where a memory leak was plugged, but where not sure if that was
+ just a band-aid to paper over some other error. It isn't, this is a
+ legal situation.
-2002-06-17 Don Porter <dgp@users.sourceforge.net>
+2009-12-10 Miguel Sofer <msofer@users.sf.net>
- * doc/msgcat.n: Corrected en_UK references to en_GB. UK is not
- a country designation recognized in ISO 3166.
+ * generic/tclBasic.c: Reducing the # of moving parts for coroutines
+ * generic/tclExecute.c: by delegating more to tebc; eliminate the
+ special coroutine CallFrame.
- * library/msgcat/msgcat.tcl: More Windows Registry locale codes
- from Bruno Haible.
+2009-12-09 Andreas Kupries <andreask@activestate.com>
- * doc/msgcat.n:
- * library/msgcat/msgcat.tcl:
- * library/msgcat/pkgIndex.tcl:
- * tests/msgcat.test: Revised locale initialization to interpret
- environment variable locale values according to XPG4, and to
- recognize the LC_ALL and LC_MESSAGES values over that of LANG.
- Also added many Windows Registry locale values to those
- recognized by msgcat. Revised tests and docs. Bumped to
- version 1.3. Thanks to Bruno Haible for the report and
- assistance crafting the solution. [Bug 525522, 525525]
+ * generic/tclIO.c: [Bug 2901998]: Applied Alexandre Ferrieux's patch
+ fixing the inconsistent buffered I/O. Tcl's I/O now flushes buffered
+ output before reading, discards buffered input before writing, etc.
-2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+2009-12-09 Miguel Sofer <msofer@users.sf.net>
- * generic/tclCompile.c (TclCompileTokens): a better algorithm for
- the previous bug fix.
+ * generic/tclBasic.c: Ensure right lifetime of varFrame's (objc,objv)
+ for coroutines.
-2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclExecute.c: Code regrouping
- * generic/tclCompile.c (TclCompileTokens):
- * tests/compile.test: [Bug 569438] in the processing of dollar
- variables; report by Georgios Petasis.
-
-2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+2009-12-09 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclExecute.c: bug in the consolidation of the
- INCR_..._STK instructions; the bug could not be exercised as the
- (faulty) instruction INST_INCR_ARRAY_STK was never compiled-in
- (related to [Bug 569438]).
+ * generic/tclBasic.c: Added some of the missing setting of errorcode
+ values.
-2002-06-14 Miguel Sofer <msofer@users.sourceforge.net>
+2009-12-08 Miguel Sofer <msofer@users.sf.net>
- * generic/tclExecute.c (TclExecuteByteCode): runtime peep-hole
- optimisation of variables (INST_STORE, INST_INCR) and commands
- (INST_INVOKE); faster check for the existence of a catch.
- (TclExecuteByteCode): runtime peep-hole optimisation of
- comparisons.
- (TclExecuteByteCode): runtime peep-hole optimisation of
- INST_FOREACH - relies on peculiarities of the code produced by the
- bytecode compiler.
+ * generic/tclExecute.c (TclStackFree): Improved panic msg.
-2002-06-14 David Gravereaux <davygrvy@pobox.com>
+2009-12-08 Miguel Sofer <msofer@users.sf.net>
- * win/rules.vc: The test for compiler optimizations was in error.
- Thanks goes to Roy Terry <royterry@earthlink.net> for his
- assistance with this.
+ * generic/tclBasic.c: Partial nre-enabling of coroutines. The
+ * generic/tclExecute.c: initial call still requires its own
+ * generic/tclInt.h: instance of tebc, but on resume coros can
+ execute in the caller's tebc.
-2002-06-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * generic/tclExecute.c (TEBC): Silence warning about pcAdjustment.
- * doc/trace.n, tests/trace.test:
- * generic/tclCmdMZ.c (Tcl_TraceObjCmd,TclTraceCommandObjCmd)
- (TclTraceVariableObjCmd): Changed references to "trace list" to
- "trace info" as mandated by TIP#102.
+2009-12-08 Donal K. Fellows <dkf@users.sf.net>
-2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclExecute.c (TclExecuteByteCode): Make the dict opcodes
+ more sparing in their use of C variables, to reduce size of TEBC
+ activiation record a little bit.
- * generic/tclExecute.c (TclExecuteByteCode): consolidated code for
- the conditional branch instructions.
+2009-12-07 Miguel Sofer <msofer@users.sf.net>
-2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclExecute.c (TEBC): Grouping "slow" variables into structs,
+ to reduce register pressure and help the compiler with variable
+ allocation.
- * generic/tclExecute.c (TclExecuteByteCode): fixed the previous
- patch - wouldn't compile with TCL_COMPILE_DEBUG set.
+2009-12-07 Miguel Sofer <msofer@users.sf.net>
-2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclExecute.c: Start cleaning the TEBC stables
+ * generic/tclInt.h:
- * generic/tclExecute.c (TclExecuteByteCode): consolidated the
- handling of exception returns to INST_INVOKE and INST_EVAL, as
- well as most of the code for INST_CONTINUE and INST_BREAK, in the
- new jump target "processExceptionReturn".
+ * generic/tclCmdIL.c: [Bug 2910094]: Fix by aku
+ * tests/coroutine.test:
-2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclBasic.c: Arrange for [tailcall] to be created with the
+ other builtins: was being created in a separate call, leftover from
+ pre-tip days.
- * generic/tclExecute.c (TclExecuteByteCode): consolidated variable
- handling opcodes, replaced redundant code with some 'goto'. All
- store/append/lappend opcodes on the same data type now share the
- main code; same with incr opcodes.
- * generic/tclVar.c: added the bit TCL_TRACE_READS to the possible
- flags to Tcl_SetVar2Ex - it causes read traces to be fired prior
- to setting the variable. This is used in the core for [lappend].
+2009-12-07 Don Porter <dgp@users.sourceforge.net>
- ***NOTE*** the usage of TCL_TRACE_READS in Tcl_(Obj)?GetVar.* is
- not documented; there, it causes the call to create the variable
- if it does not exist. The new usage in Tcl_(Obj)?SetVar.* remains
- undocumented too ...
-
-2002-06-13 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclStrToD.c: [Bug 2902010]: Correct conditional compile
+ directives to better detect the toolchain that needs extra work for
+ proper underflow treatment instead of merely detecting the MIPS
+ platform.
- * tests/fCmd.test:
- * tests/winFile.test:
- * tests/fileSystem.test:
- * generic/tclTest.c:
- * generic/tclCmdAH.c:
- * generic/tclIOUtil.c:
- * doc/FileSystem.3:
- * mac/tclMacFile.c:
- * unix/tclUnixFile.c:
- * win/tclWinFile.c: fixed up further so both compiles and
- actually works with VC++ 5 or 6.
- * win/tclWinInt.h:
- * win/tclWin32Dll.c: cleaned up code and vfs tests and
- added tests for the internal changes of 2002-06-12, to see
- whether WinTcl on NTFS can coexist peacefully with links
- in the filesystem. Added new test command 'testfilelink'
- to enable the newer code to be tested.
- * tests/fCmd.test: (made certain tests of 'testfilelink' not
- run on unix).
-
-2002-06-12 Miguel Sofer <msofer@users.sourceforge.net>
-
- * tclBasic.c (Tcl_DeleteTrace): fixed [Bug 568123] (thanks to
- Hemang Lavana)
-
-2002-06-12 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinFile.c: corrected the symbolic link handling code to
- allow it to compile. Added real definition of REPARSE_DATA_BUFFER
- (found in winnt.h). Most of the added definitions appear to have
- correct, cross-Win-version equivalents in winnt.h and should be
- removed, but just making things "work" for now.
-
-2002-06-12 Vince Darley <vincentdarley@users.sourceforge.net>
+2009-12-07 Miguel Sofer <msofer@users.sf.net>
- * generic/tclIOUtil.c:
- * generic/tcl.decls:
- * generic/tclDecls.h: made code for Tcl_FSNewNativePath
- agree with man pages.
-
- * doc/FileSystem.3: clarified the circumstances under which
- certain functions are called in the presence of symlinks.
-
- * win/tclWinFile.c:
- * win/tclWinPort.h:
- * win/tclWinInt.h:
- * win/tclWinFCmd.c: Fix for Windows to allow 'file lstat',
- 'file type', 'glob -type l', 'file copy', 'file delete',
- 'file normalize', and all VFS code to work correctly in the
- presence of symlinks (previously Tcl's behaviour was not very
- well defined). This also fixes possible serious problems in
- all versions of WinTcl where 'file delete' on a NTFS symlink
- could delete the original, not the symlink.
- Note: symlinks cannot yet be created in pure Tcl.
-
-2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclBasic.c:
- * generic/tclCompCmds.c:
- * generic/tclInt.h: reverted the new compilation functions;
- replaced by a more general approach described below.
+ * generic/tclBasic.c: [Patch 2910056]: Add ::tcl::unsupported::yieldTo
+ * generic/tclInt.h:
- * generic/tclCompCmds.c:
- * generic/tclCompile.c: made *all* compiled variable access
- attempts create an indexed variable - even get or incr without
- previous set. This allows indexed access to local variables that
- are created and set at runtime, for example by [global], [upvar],
- [variable], [regexp], [regsub].
+2009-12-07 Donal K. Fellows <dkf@users.sf.net>
-2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclCmdMZ.c (TryPostBody): [Bug 2910044]: Close off memory
+ leak in [try] when a variable-free handler clause is present.
- * doc/global.n:
- * doc/info.n:
- * test/info.test:
- * generic/tclCmdIL.c: fix for [Bug 567386], [info locals] was
- reporting some linked variables.
-
- * generic/tclBasic.c:
- * generic/tclCompCmds.c:
- * generic/tclInt.h: added compile functions for [global],
- [variable] and [upvar]. They just declare the new local variables,
- the commands themselves are not compiled-in. This gives a notably
- faster read access to these linked variables.
+2009-12-05 Miguel Sofer <msofer@users.sf.net>
-2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclBasic.c: Small changes for clarity in tailcall
+ * generic/tclExecute.c: and coroutine code.
+ * tests/coroutine.test:
- * generic/tclExecute.c: optimised algorithm for exception range
- lookup; part of [Patch 453709].
+ * tests/tailcall.test: Remove some old unused crud; improved the
+ stack depth tests.
-2002-06-10 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclBasic.c: Fixed things so that you can tailcall
+ * generic/tclNamesp.c: properly out of a coroutine.
+ * tests/tailcall.test:
- * unix/tclUnixFCmd.c: fixed [Bug #566669]
- * generic/tclIOUtil.c: improved and sped up handling of
- native paths (duplication and conversion to normalized paths),
- particularly on Windows.
- * modified part of above commit, due to problems on Linux.
- Will re-examine bug report and evaluate more closely.
+ * generic/tclInterp.c: Fixed tailcalls for same-interp aliases (no
+ test)
-2002-06-07 Don Porter <dgp@users.sourceforge.net>
+2009-12-03 Donal K. Fellows <dkf@users.sf.net>
- * tests/tcltest.test: More corrections to test suite so that tests
- of failing [test]s don't show up themselves as failing tests.
+ * library/safe.tcl (::safe::AliasEncoding): Make the safe encoding
+ command behave more closely like the unsafe one (for safe ops).
+ (::safe::AliasGlob): [Bug 2906841]: Clamp down on evil use of [glob]
+ in safe interpreters.
+ * tests/safe.test: Rewrite to use tcltest2 better.
-2002-06-07 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-12-02 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclExecute.c: Tidied up headers in relation to float.h
- to cut the cruft and ensure DBL_MAX is defined since doubles seem
- to be the same size everywhere; if the assumption isn't true, the
- variant platforms had better have run configure...
+ * tools/genStubs.tcl: Add support for win32 CALLBACK functions and
+ remove obsolete "emitStubs" and "genStubs" functions.
+ * win/Makefile.in: Use tcltest86.dll for all tests, and add
+ .PHONY rules to preemptively stop trouble that plagued Tk from hitting
+ Tcl too.
- * unix/tclUnixPort.h (EOVERFLOW): Added code to define it if it
- wasn't previously defined. Also some other general tidying and
- adding of comments. [Tcl bugs 563122, 564595]
- * compat/tclErrno.h: Added definition for EOVERFLOW copied from
- Solaris headers; I've been unable to find any uses of EFTYPE,
- which was the error code previously occupying the slot, in Tcl, or
- any definition of it in the Solaris headers.
+2009-11-30 Jan Nijtmans <nijtmans@users.sf.net>
-2002-06-06 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tcl.h: Don't use EXPORT for Tcl_InitStubs
+ * win/Makefile.in: Better dependancies in case of static build.
- * unix/dltest/Makefile.in: Remove hard coded CFLAGS=-g
- and add CFLAGS_DEBUG, CFLAGS_OPTIMIZE, and
- CFLAGS_DEFAULT varaibles. [Tcl bug 565488]
+2009-11-30 Donal K. Fellows <dkf@users.sf.net>
-2002-06-06 Don Porter <dgp@users.sourceforge.net>
+ * doc/Tcl.n: [Bug 2901433]: Improved description of expansion to
+ mention that it is using list syntax.
- * tests/tcltest.test: Corrections to test suite so that tests
- of failing [test]s don't show up themselves as failing tests.
+2009-11-27 Kevin B. Kenny <kennykb@acm.org>
- * tests/io.test: Fixed up namespace variable resolution issues
- revealed by running test suite with "-singleproc 1".
+ * win/tclAppInit.c (Tcl_AppInit): [Bug 2902965]: Reverted Jan's change
+ that added a call to Tcl_InitStubs. The 'tclsh' and 'tcltest' programs
+ are providers, not consumers of the Stubs table, and should not link
+ with the Stubs library, but only with the main Tcl library. (In any
+ case, the presence of Tcl_InitStubs broke the build.)
- * doc/tcltest.n:
- * library/tcltest/tcltest.tcl:
- * tests/tcltest.test: Several updates to tcltest.
- 1) changed to lazy initialization of test constraints
- 2) deprecated [initConstraintsHook]
- 3) repaired badly broken [limitConstraints].
- 4) deprecated [threadReap] and [mainThread]
- [Patch 512214, Bug 558742, Bug 461000, Bug 534903]
+2009-11-27 Donal K. Fellows <dkf@users.sf.net>
-2002-06-06 Daniel Steffen <das@users.sourceforge.net>
+ * doc/BoolObj.3, doc/Class.3, doc/CrtChannel.3, doc/DictObj.3:
+ * doc/DoubleObj.3, doc/Ensemble.3, doc/Environment.3:
+ * doc/FileSystem.3, doc/Hash.3, doc/IntObj.3, doc/Limit.3:
+ * doc/Method.3, doc/NRE.3, doc/ObjectType.3, doc/PkgRequire.3:
+ * doc/SetChanErr.3, doc/SetResult.3: [Patch 2903921]: Many small
+ spelling fixes from Larry Virden.
- * unix/tclUnixThrd.c (TclpReaddir, TclpLocaltime, TclpGmtime):
- added mutex wrapped calls to readdir, localtime & gmtime in
- case their thread-safe *_r counterparts are not available.
- * unix/tcl.m4: added configure check for readdir_r
- * unix/tcl.m4 (Darwin): set TCL_DEFAULT_ENCODING to utf-8 on
- MacOSX (where posix file apis expect utf-8, not iso8859-1).
- * unix/configure: regen
- * unix/Makefile.in: set DYLD_LIBRARY_PATH in parallel
- to LD_LIBRARY_PATH for MacOSX dynamic linker.
- * generic/tclEnv.c (TclSetEnv): fix env var setting on
- MacOSX (adapted from patch #524352 by jkbonfield).
+ BUMP VERSION OF TCLOO TO 0.6.2. Too many people need accumulated small
+ versions and bugfixes, so the version-bump removes confusion.
-2002-06-05 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclOOBasic.c (TclOO_Object_LinkVar): [Bug 2903811]: Remove
+ unneeded restrictions on who can usefully call this method.
- * doc/Tcl_Main.3: Documented $tcl_rcFileName and added more
- clarifications about the intended use of Tcl_Main(). [Bug 505651]
+2009-11-26 Donal K. Fellows <dkf@users.sf.net>
-2002-06-05 Daniel Steffen <das@users.sourceforge.net>
+ * unix/Makefile.in: Add .PHONY rules and documentation to preemptively
+ stop trouble that plagued Tk from hitting Tcl too, and to make the
+ overall makefile easier to understand. Some reorganization too to move
+ related rules closer together.
- * generic/tclFileName.c (TclGlob): mac specific fix to
- recent changes in 'glob -tails' handling.
- * mac/tclMacPort.h:
- * mac/tclMacChan.c: fixed TIP#91 bustage.
- * mac/tclMacResource.c (Tcl_MacConvertTextResource): added utf
- conversion of text resource contents.
- * tests/macFCmd.test (macFCmd-1.2): allow CWIE creator.
+2009-11-26 Jan Nijtmans <nijtmans@users.sf.net>
-2002-06-04 Don Porter <dgp@users.sourceforge.net>
+ * win/Makefile.in: [Bug 2902965]: Fix stub related changes that
+ * win/makefile.vc: caused tclkit build to break.
+ * win/tclAppInit.c
+ * unix/tcl.m4
+ * unix/Makefile.in
+ * unix/tclAppInit.c
+ * unix/configure: (regenerated)
- * library/tcltest/tcltest.tcl:
- * tests/init.test:
- * tests/tcltest.test: Added more TIP 85 tests from Arjen Markus.
- Converted tcltest.test to use a private namespace. Fixed bugs in
- [tcltest::Eval] revealed by calling [tcltest::test] from a non-global
- namespace, and namespace errors in init.test.
+2009-11-25 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/Makefile.in: Added a 'test-tcl' rule that is identical to
+ 'test' except that it does not go spelunking in 'pkgs/'. (This rule
+ has existed in unix/Makefile.in for some time.)
+
+2009-11-25 Stuart Cassoff <stwo@users.sf.net>
+
+ * unix/configure.in: [Patch 2892871]: Remove unneeded
+ * unix/tcl.m4: AC_STRUCT_TIMEZONE and use
+ * unix/tclConfig.h.in: AC_CHECK_MEMBERS([struct stat.st_blksize])
+ * unix/tclUnixFCmd.c: instead of AC_STRUCT_ST_BLKSIZE.
+ * unix/configure: Regenerated with autoconf-2.59.
+
+2009-11-24 Andreas Kupries <andreask@activestate.com>
-2002-06-04 Mo DeJong <mdejong@users.sourceforge.net>
+ * library/tclIndex: Manually redone the part of tclIndex dealing with
+ safe.tcl and tm.tcl. This part passes the testsuite. Note that
+ automatic regeneration of this part is not possible because it wrongly
+ puts 'safe::Setup' on the list, and wrongly leaves out 'safe::Log'
+ which is more dynamically created than the generator expects.
- * win/README: Update msys+mingw URL.
+ Further note that the file "clock.tcl" is explicitly loaded by
+ "init.tcl", the first time the clock command is invoked. The relevant
+ code can be found at line 172ff, roughly, the definition of the
+ procedure 'clock'. This means none of the procedures of this file
+ belong in the tclIndex. Another indicator that automatic regeneration
+ of tclIndex is ill-advised.
-2002-06-03 Don Porter <dgp@users.sourceforge.net>
+2009-11-24 Donal K. Fellows <dkf@users.sf.net>
- * doc/tcltest.n:
- * library/tcltest/tcltest.tcl:
- * library/tcltest/pkgIndex.tcl:
- * tests/tcltest.test: Implementation of TIP 85. Allows tcltest
- users to add new legal values of the -match option to [test],
- associating each with a Tcl command that does the matching of
- expected results with actual results of tests. Thanks to
- Arjen Markus. => tcltest 2.1 [Patch 521362]
+ * generic/tclOO.c (FinalizeAlloc, Tcl_NewObjectInstance):
+ [Bug 2903011]: Make it an error to destroy an object in a constructor,
+ and also make sure that an object is not deleted twice in the error
+ case.
-2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+2009-11-24 Pat Thoyts <patthoyts@users.sourceforge.net>
- * doc/namespace.n: added description of [namepace forget]
- behaviour for unqualified patterns [Bug 559268]
+ * tests/fCmd.test: [Bug 2893771]: Teach [file stat] to handle locked
+ * win/tclWinFile.c: files so that [file exists] no longer lies.
-2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+2009-11-23 Kevin Kenny <kennykb@acm.org>
- * generic/tclExecute.c: reverting an accidental modification in
- the last commit.
-
-2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+ * tests/fCmd.test (fCmd-30.1): Changed registry location of the 'My
+ Documents' folder to the one that's correct for Windows 2000, XP,
+ Server 2003, Vista, Server 2008, and Windows 7. (See
+ http://support.microsoft.com/kb/310746)
- * doc/Tcl.n: clarify the empty variable name issue ([Bug 549285]
- reported by Tom Krehbiel, patch by Don Porter).
+2009-11-23 Jan Nijtmans <nijtmans@users.sf.net>
-2002-05-31 Don Porter <dgp@users.sourceforge.net>
+ * win/tclWinDde.c: #undef STATIC_BUILD, in order to make sure
+ * win/tclWinReg.c: that Xxxxx_Init is always exported even when
+ * generic/tclTest.c: Tcl is built static (otherwise we cannot
+ create a DLL).
+ * generic/tclThreadTest.c: Make all functions static, except
+ TclThread_Init.
+ * tests/fCmd.test: Enable fCmd-30.1 when registry is available.
+ * win/tcl.m4: Fix ${SHLIB_LD_LIBS} definition, fix conflicts
+ * win/Makefile.in: Simplifications related to tcl.m4 changes.
+ * win/configure.in: Between static libraries and import library on
+ windows.
+ * win/configure: (regenerated)
+ * win/makefile.vc: Add stub library to necessary link lines.
- * library/package.tcl: Fixed leak of slave interp in [pkg_mkIndex].
- Thanks to Helmut for report. [Bug 550534]
+2009-11-23 Kevin B. Kenny <kennykb@acm.org>
+ * generic/tclThreadTest.c (NewTestThread): [Bug 2901803]: Further
+ machinations to get NewTestThread actually to launch the thread, not
+ just compile.
+
+2009-11-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclThreadTest.c (NewTestThread): [Bug 2901803]: Fix small
+ error in function naming which blocked a threaded test build.
+
+2009-11-19 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: Create tcltest86.dll as dynamic Tcltest
+ package.
+ * generic/tclTest.c: Remove extraneous prototypes, follow-up to
+ * generic/tclTestObj.c: [Bug 2883850]
+ * tests/chanio.test: Test-cases for fixed [Bug 2849797]
* tests/io.test:
- * tests/main.test: Use the "stdio" constraint to control whether
- an [open "|[interpreter]"] is attempted.
-
- * generic/tclExecute.c (TclMathInProgress,TclExecuteByteCode
- ExprCallMathFunc):
- * generic/tclInt.h (TclMathInProgress):
- * unix/Makefile.in (tclMtherr.*):
- * unix/configure.in (NEED_MATHERR):
- * unix/tclAppInit.c (matherr):
- * unix/tclMtherr.c (removed file):
- * win/tclWinMtherr.c (_matherr): Removed internal routine
- TclMathInProgress and Unix implementation of matherr(). These
- are now obsolete, dealing with very old versions of the C math
- library. Windows version is retained in case Borland compilers
- require it, but it is inactive. Thanks to Joe English.
- [Bug 474335, Patch 555635].
- * unix/configure: regen
-
-2002-05-30 Miguel Sofer <msofer@users.sourceforge.net>
+ * tests/safe.test: Fix safe-10.1 and safe-10.4 test cases, making
+ the wrong assumption that Tcltest is a static
+ package.
+ * generic/tclEncoding.c:[Bug 2857044]: Updated freeIntRepProc routines
+ * generic/tclVar.c: so that they set the typePtr field to NULL so
+ that the Tcl_Obj is not left in an
+ inconsistent state.
+ * unix/tcl.m4: [Patch 2883533]: tcl.m4 support for Haiku OS
+ * unix/configure: autoconf-2.59
- * generic/tclCompExpr.c:
- * generic/tclCompile.c:
- * generic/tclCompile.h: removed exprIsJustVarRef and
- exprIsComparison from the ExprInfo and CompileEnv structs. These
- were set, but not used since dec 1999 [Bug 562383].
-
-2002-05-30 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclFileName.c (TclGlob): fix to longstanding
- 'knownBug' in fileName tests 15.2-15.4, and fix to a new
- Tcl 8.4 bug in certain uses of 'glob -tails'.
- * tests/fileName.test: removed 'knownBug' flag from some tests,
- added some new tests for above bugs.
-
-2002-05-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * unix/configure: regen'ed
- * unix/configure.in: replaced bigendian check with autoconf
- standard AC_C_BIG_ENDIAN, which defined WORDS_BIGENDIAN on
- bigendian systems.
- * generic/tclUtf.c (Tcl_UniCharNcmp):
- * generic/tclInt.h (TclUniCharNcmp): use WORDS_BIGENDIAN instead of
- TCL_OPTIMIZE_UNICODE_COMPARE to enable memcmp alternative.
-
- * generic/tclExecute.c (TclExecuteByteCode INST_STR_CMP):
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): changed the case for
- choosing the Tcl_UniCharNcmp compare to when both objs are of
- StringType, as benchmarks show that is the optimal check (both
- bigendian and littleendian systems).
-
-2002-05-29 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclMain.c: Removed "dummy" reference to Tcl_LinkVar.
- It is no longer needed since Tcl_Main() now actually calls
- Tcl_LinkVar(). Thanks to Joe English for pointing that out.
-
-2002-05-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * generic/tclExecute.c (TclExecuteByteCode):
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): Use the macro version.
- * generic/tclInt.h (TclUniCharNcmp): Optimised still further with
- a macro for use in sensitive places like tclExecute.c
-
- * generic/tclUtf.c (Tcl_UniCharNcmp): Use new flag to figure out
- when we can use an optimal comparison scheme, and default to the
- old scheme in other cases which is at least safe.
- * unix/configure.in (TCL_OPTIMIZE_UNICODE_COMPARE): New optional
- flag that indicates when we can use memcmp() to compare Unicode
- strings (i.e. when the high-byte of a Tcl_UniChar precedes the
- low-byte.)
-
-2002-05-29 Jeff Hobbs <jeffh@ActiveState.com>
+2009-11-19 Don Porter <dgp@users.sourceforge.net>
- * generic/tclInt.decls:
- * generic/tclIntDecls.h:
- * generic/tclStubInit.c:
- * generic/tclUtf.c: added TclpUtfNcmp2 private command that
- mirrors Tcl_UtfNcmp, but takes n in bytes, not utf-8 chars. This
- provides a faster alternative for comparing utf strings internally.
- (Tcl_UniCharNcmp, Tcl_UniCharNcasecmp): removed the explicit end
- of string check as it wasn't correct for the function (by doc and
- logic).
+ * unix/tclAppInit.c: [Bug 2883850, 2900542]: Repair broken build of
+ * win/tclAppInit.c: the tcltest executable.
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): reworked the string equal
- comparison code to use TclpUtfNcmp2 as well as short-circuit for
- equal objects or unequal length strings in the equal case.
- Removed the use of goto and streamlined the other parts.
+2009-11-19 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclExecute.c (TclExecuteByteCode): added check for
- object equality in the comparison instructions. Added
- short-circuit for != length strings in INST_EQ, INST_NEQ and
- INST_STR_CMP. Reworked INST_STR_CMP to use TclpUtfNcmp2 where
- appropriate, and only use Tcl_UniCharNcmp when at least one of the
- objects is a Unicode obj with no utf bytes.
+ * library/auto.tcl (tcl_findLibrary):
+ * library/clock.tcl (MakeUniquePrefixRegexp, MakeParseCodeFromFields)
+ (SetupTimeZone, ProcessPosixTimeZone): Restored the use of a literal
+ * library/history.tcl (HistAdd): 'then' when following a multi-
+ * library/safe.tcl (interpConfigure): line test expresssion. It's an
+ * library/tm.tcl (UnknownHandler): aid to readability then.
- * generic/tclCompCmds.c (TclCompileStringCmd): removed error
- creation in code that no longer throws an error.
+2009-11-19 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/string.test:
- * tests/stringComp.test: added more string comparison checks.
+ * generic/tclInt.h: Make all internal initialization
+ * generic/tclTest.c: routines MODULE_SCOPE
+ * generic/tclTestObj.c:
+ * generic/tclTestProcBodyObj.c:
+ * generic/tclThreadTest.c:
+ * unix/Makefile.in: Fix [Bug 2883850]: pkgIndex.tcl doesn't
+ * unix/tclAppInit.c: get created with static Tcl build
+ * unix/tclXtTest.c:
+ * unix/tclXtNotify.c:
+ * unix/tclUnixTest.c:
+ * win/Makefile.in:
+ * win/tcl.m4:
+ * win/configure: (regenerated)
+ * win/tclAppInit.c:
+ * win/tclWinDde.c: Always compile with Stubs.
+ * win/tclWinReg.c:
+ * win/tclWinTest.c:
+
+2009-11-18 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/CrtChannel.3: [Bug 2849797]: Fix channel name inconsistences
+ * generic/tclIORChan.c: as suggested by DKF.
+ * generic/tclIO.c: Minor *** POTENTIAL INCOMPATIBILITY ***
+ because Tcl_CreateChannel() and derivatives
+ now sometimes ignore their "chanName"
+ argument.
+
+ * generic/tclAsync.c: Eliminate various gcc warnings (with -Wextra)
+ * generic/tclBasic.c
+ * generic/tclBinary.c
+ * generic/tclCmdAH.c
+ * generic/tclCmdIL.c
+ * generic/tclCmdMZ.c
+ * generic/tclCompile.c
+ * generic/tclDate.c
+ * generic/tclExecute.c
+ * generic/tclDictObj.c
+ * generic/tclIndexObj.c
+ * generic/tclIOCmd.c
+ * generic/tclIOUtil.c
+ * generic/tclIORTrans.c
+ * generic/tclOO.c
+ * generic/tclZlib.c
+ * generic/tclGetDate.y
+ * win/tclWinInit.c
+ * win/tclWinChan.c
+ * win/tclWinConsole.c
+ * win/tclWinNotify.c
+ * win/tclWinReg.c
+ * library/auto.tcl: Eliminate "then" keyword
+ * library/clock.tcl
+ * library/history.tcl
+ * library/safe.tcl
+ * library/tm.tcl
+ * library/http/http.tcl: Eliminate unnecessary spaces
+ * library/http1.0/http.tcl
+ * library/msgcat/msgcat.tcl
+ * library/opt/optparse.tcl
+ * library/platform/platform.tcl
+ * tools/tcltk-man2html.tcl
+ * tools/tclZIC.tcl
+ * tools/tsdPerf.c
+
+2009-11-17 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixChan.c (TtyParseMode): Partial undo of Donal's tidy-up
+ from a few days ago (2009-11-9, not in ChangeLog). It seems that
+ strchr is apparently a macro on AIX and reacts badly to pre-processor
+ directives in its arguments.
+
+2009-11-16 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclEncoding.c: [Bug 2891556]: Fix and improve test to
+ * generic/tclTest.c: detect similar manifestations in the future.
+ * tests/encoding.test: Add tcltest support for finalization.
+
+2009-11-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinDde.c: Avoid gcc compiler warning by explicitly casting
+ DdeCreateStringHandle argument.
+
+2009-11-12 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CopyData): [Bug 2895565]: Dropped bogosity which
+ * tests/io.test: used the number of _written_ bytes or character to
+ update the counters for the read bytes/characters. New test io-53.11.
+ This is a forward port from the 8.5 branch.
+
+2009-11-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclClock.c (TclClockInit): Do not create [clock] support
+ commands in safe interps.
+
+2009-11-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * library/http/http.tcl (http::geturl): [Bug 2891171]: URL checking
+ too strict when using multiple question marks.
+ * tests/http.test
+ * library/http/pkgIndex.tcl: Bump to http 2.8.2
+ * unix/Makefile.in:
+ * win/Makefile.in:
- * tests/clock.test: better qualified 9.1 constraint check for %s.
+2009-11-11 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclIO.c: Fix [Bug 2888099] (close discards ENOSPC error) by
+ saving the errno from the first of two FlushChannel()s. Uneasy to
+ test; might need specific channel drivers. Four-hands with aku.
+
+2009-11-10 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/winFCmd.test: Cleanup directories that have been set chmod
+ 000. On Windows7 and Vista we really have no access and these were
+ getting left behind.
+ A few tests were changed to reflect the intent of the test where
+ setting a directory chmod 000 should prevent any modification. This
+ restriction was ignored on XP but is honoured on Vista
+
+2009-11-10 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c: Plug another leak in TCL_EVAL_DIRECT evaluation.
+ Forward port from Tcl 8.5 branch, change by Don Porter.
+
+ * generic/tclObj.c: [Bug 2895323]: Plug memory leak in
+ TclContinuationsEnter(). Forward port from Tcl 8.5 branch, change by
+ Don Porter.
+
+2009-11-09 Stuart Cassoff <stwo@users.sf.net>
+
+ * win/README: [bug 2459744]: Removed outdated Msys + Mingw info.
+
+2009-11-09 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c (TclEvalObjEx): Moved the #280 decrement of
+ refCount for the file path out of the branch after the whole
+ conditional, closing a memory leak. Added clause on structure type to
+ prevent seg.faulting. Forward port from valgrinding the Tcl 8.5
+ branch.
+
+ * tests/info.test: Resolve ambiguous resolution of variable "res".
+ Forward port from 8.5
+
+2009-11-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/string.n (bytelength): Noted that this command is not a good
+ thing to use, and suggested a better alternatve. Also factored out the
+ description of the indices into its own section.
+
+2009-11-07 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/fCmd.test: [Bug 2891026]: Exclude tests using chmod 555
+ directories on vista and win7. The current user has access denied and
+ so cannot rename the directory without admin privileges.
+
+2009-11-06 Andreas Kupries <andreask@activestate.com>
+
+ * library/safe.tcl (::safe::Setup): Added documentation of the
+ contents of the state array. Also killed the 'InterpState' procedure
+ with its upleveled variable/upvar combination, and replaced all uses
+ with 'namespace upvar'.
+
+2009-11-05 Andreas Kupries <andreask@activestate.com>
+
+ * library/safe.tcl: A series of patches which bring the SafeBase up to
+ date with code guidelines, Tcl's features, also eliminating a number
+ of inefficiencies along the way.
+ (1) Changed all procedure names to be fully qualified.
+ (2) Moved the procedures out of the namespace eval. Kept their
+ locations. IOW, broke the namespace eval apart into small sections not
+ covering the procedure definitions.
+ (3) Reindented the code. Just lots of whitespace changes.
+ Functionality unchanged.
+ (4) Moved the multiple namespace eval's around. Command export at the
+ top, everything else (var decls, argument parsing setup) at the
+ bottom.
+ (5) Moved the argument parsing setup into a procedure called when the
+ code is loaded. Easier management of temporary data.
+ (6) Replaced several uses of 'Set' with calls to the new procedure
+ 'InterpState' and direct access to the per-slave state array.
+ (7) Replaced the remaining uses of 'Set' and others outside of the
+ path/token handling, and deleted a number of procedures related to
+ state array access which are not used any longer.
+ (8) Converted the path token system to cache normalized paths and path
+ <-> token conversions. Removed more procedures not used any longer.
+ Removed the test cases 4.3 and 4.4 from safe.test. They were testing
+ the now deleted command "InterpStateName".
+ (9) Changed the log command setup so that logging is compiled out
+ completely when disabled (default).
+ (10) Misc. cleanup. Inlined IsInterp into CheckInterp, its only user.
+ Consistent 'return -code error' for error reporting. Updated to use
+ modern features (lassign, in/ni, dicts). The latter are used to keep a
+ reverse path -> token map and quicker check of existence.
+ (11) Fixed [Bug 2854929]: Recurse into all subdirs under all TM root
+ dirs and put them on the access path.
+
+2009-11-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Asia/Novokuznetsk: New tzdata locale for Kemerovo
+ oblast', which now keeps Novosibirsk time and not Kranoyarsk time.
+ * library/tzdata/Asia/Damascus: Syrian DST changes.
+ * library/tzdata/Asia/Hong_Kong: Hong Kong historic DST corrections.
+ Olson tzdata2009q.
+
+2009-11-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/object.n (DESCRIPTION): Substantive revision to make it clearer
+ what the fundamental semantics of an object actually are.
+
+2009-11-01 Joe Mistachkin <joe@mistachkin.com>
+
+ * doc/Cancel.3: Minor cosmetic fixes.
+ * win/makefile.vc: Make htmlhelp target work again. An extra set of
+ double quotes around the definition of the HTML help compiler tool
+ appears to be required. Previously, there was one set of double
+ quotes around the definition of the tool and one around the actual
+ invocation. This led to confusion because it was the only such tool
+ path to include double quotes around its invocation. Also, it was
+ somewhat inflexible in the event that somebody needed to override the
+ tool command to include arguments. Therefore, even though it may look
+ "wrong", there are now two double quotes on either side of the tool
+ path definition. This fixes the problem that currently prevents the
+ htmlhelp target from building and maintains flexibility in case
+ somebody needs to override it via the command line or an environment
+ variable.
+
+2009-11-01 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/Eval.3, doc/Cancel.3: Move TIP#285 routines out of Eval.3 into
+ their own manpage.
+
+2009-10-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (ExprRoundFunc): [Bug 2889593]: Correctly report
+ the expected number of arguments when generating an error for round().
+
+2009-10-30 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/tcltest.test: When creating the notwritabledir we deny the
+ current user access to delete the file. We must grant this right when
+ we cleanup. Required on Windows 7 when the user does not automatically
+ have administrator rights.
+
+2009-10-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Changed the typedef for the mp_digit type
+ from:
+ typedef unsigned long mp_digit;
+ to:
+ typedef unsigned int mp_digit;
+ For 32-bit builds where "long" and "int" are two names for the same
+ thing, this is no change at all. For 64-bit builds, though, this
+ causes the dp[] array of an mp_int to be made up of 32-bit elements
+ instead of 64-bit elements. This is a huge improvement because
+ details elsewhere in the mp_int implementation cause only 28 bits of
+ each element to be actually used storing number data. Without this
+ change bignums are over 50% wasted space on 64-bit systems. [Bug
+ 2800740].
+
+ ***POTENTIAL INCOMPATIBILITY***
+ For 64-bit builds, callers of routines with (mp_digit) or (mp_digit *)
+ arguments *will*, and callers of routines with (mp_int *) arguments
+ *may* suffer both binary and stubs incompatibilities with Tcl releases
+ 8.5.0 - 8.5.7. Such possibilities should be checked, and if such
+ incompatibilities are present, suitable [package require] requirements
+ on the Tcl release should be put in place to keep such built code
+ [load]-ing only in Tcl interps that are compatible.
+
+2009-10-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/dict.test: Make variable-clean and simplify tests by utilizing
+ the fact that dictionaries have defined orders.
+
+ * generic/tclZlib.c (TclZlibCmd): Remove accidental C99-ism which
+ reportedly makes the AIX native compiler choke.
+
+2009-10-29 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (LocalizeFormat):
+ * tests/clock.test (clock-67.1):
+ [Bug 2819334]: Corrected a problem where '%%' followed by a letter in
+ a format group could expand recursively: %%R would turn into %%H:%M:%S
+
+2009-10-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclLiteral.c: [Bug 2888044]: Fixed 2 bugs.
+ * tests/info.test: First, as noted in the comments of the
+ TclCleanupLiteralTable routine, since the teardown of the intrep of
+ one Tcl_Obj can cause the teardown of others in the same table, the
+ full table cleanup must be done with care, but the code did not
+ contain the same care demanded in the comment. Second, recent
+ additions to the info.test file had poor hygiene, leaving an array
+ variable ::a lying around, which breaks later interp.test tests during
+ a -singleproc 1 run of the test suite.
+
+2009-10-28 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/fileName.test (fileName-20.[78]): Corrected poor test
+ hygiene (failure to save and restore the working directory) that
+ caused these two tests to fail on Windows (and [Bug 2806250] to be
+ reopened).
-2002-05-28 Jeff Hobbs <jeffh@ActiveState.com>
+2009-10-27 Don Porter <dgp@users.sourceforge.net>
- * generic/tclThreadAlloc.c (TclpRealloc, TclpFree): protect
- against the case when NULL is based.
+ * generic/tclPathObj.c: [Bug 2884203]: Missing refcount on cached
+ normalized path caused crashes.
+
+2009-10-27 Kevin B. Kenny <kennykb@acm.org>
- * tests/clock.test: added clock-9.1
- * compat/strftime.c:
- * generic/tclClock.c:
- * generic/tclInt.decls:
- * generic/tclIntDecls.h:
- * unix/tclUnixTime.c: fix for Windows msvcrt mem leak caused by
- using an env(TZ) setting trick for in clock format -gmt 1. This
- also makes %s seem to work correctly with -gmt 1 as well as
- making it a lot faster by avoid the env(TZ) hack. TclpStrftime
- now takes useGMT as an arg. [Bug #559376]
-
-2002-05-28 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclIOUtil.c: fixes to Tcl_FSLoadFile when called on
- a file inside a vfs. This should avoid leaving temporary
- files sitting around on exit. [Bug #545579]
-
-2002-05-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * win/tclWinError.c: Added comment on conversion of
- ERROR_NEGATIVE_SEEK because that is a mapping that really belongs,
- and not a catch-all case.
- * win/tclWinPort.h (EOVERFLOW): Should be either EFBIG or EINVAL
- * generic/tclPosixStr.c (Tcl_ErrnoId, Tcl_ErrnoMsg): EOVERFLOW can
- potentially be a synonym for EINVAL.
-
-2002-05-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- === Changes due to TIP#91 ===
-
- * win/tclWinPort.h: Added declaration of EOVERFLOW.
- * doc/CrtChannel.3: Added documentation of wideSeekProc.
- * generic/tclIOGT.c (TransformSeekProc, TransformWideSeekProc):
- Adapted to use the new channel mechanism.
- * unix/tclUnixChan.c (FileSeekProc, FileWideSeekProc): Renamed
- FileSeekProc to FileWideSeekProc and created new FileSeekProc
- which has the old-style interface and which errors out with
- EOVERFLOW when the returned file position can't fit into the
- return type (int for historical reasons.)
- * win/tclWinChan.c (FileSeekProc, FileWideSeekProc): Renamed
- FileSeekProc to FileWideSeekProc and created new FileSeekProc
- which has the old-style interface and which errors out with
- EOVERFLOW when the returned file position can't fit into the
- return type (int for historical reasons.)
- * mac/tclMacChan.c (FileSeek): Reverted to old interface; Macs
- lack large-file support because I can't see how to add it.
- * generic/tclIO.c (Tcl_Seek, Tcl_Tell): Given these functions
- knowledge of the new arrangement of channel types.
- (Tcl_ChannelVersion): Added recognition of new version code.
- (HaveVersion): New function to do version checking.
- (Tcl_ChannelBlockModeProc, Tcl_ChannelFlushProc)
- (Tcl_ChannelHandlerProc): Made these functions use HaveVersion for
- ease of future maintainability.
- (Tcl_ChannelBlockModeProc): Obvious lookup function.
- * generic/tcl.h (Tcl_ChannelType): New wideSeekProc field, and
- seekProc type restored to old interpretation.
- (TCL_CHANNEL_VERSION_3): New channel version.
-
-2002-05-24 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * tests/winPipe.test: Applied patch for SF Tcl Bug #549617. Patch
- and bug report by Kevin Kenny <kennykb@users.sourceforge.net>.
-
- * win/tclWinSock.c (TcpWatchProc): Fixed SF Tcl Bug #557878. We
- are not allowed to mess with the watch mask if the socket is a
- server socket. I believe that the original reporter is George
- Peter Staplin.
-
-2002-05-21 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/configure: Regen.
- * unix/configure.in: Invoke SC_ENABLE_SHARED before
- calling SC_CONFIG_CFLAGS so that the SHARED_BUILD
- variable can be checked inside SC_CONFIG_CFLAGS.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Pass -non_shared
- instead of -shared to ld when configured with
- --disable-shared under OSF. [Tcl bug 540390]
-
-2002-05-20 Daniel Steffen <das@users.sourceforge.net>
-
- * generic/tclInt.h: added prototype for TclpFilesystemPathType().
- * mac/tclMacChan.c: use MSL provided creator type if available
- instead of the default 'MPW '.
-
-2002-05-16 Joe English <jenglish@users.sf.net>
-
- * doc/CrtObjCmd.3:
- Added Tcl_GetCommandFromObj, Tcl_GetCommandFullName
- (Tcl Bug #547987, #414921)
-
-2002-05-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * unix/tclUnixChan.c (TtyOutputProc): #if/#endif-ed this function
- out to stop compiler warnings. Also much general tidying of
- comments in this file and removal of whitespace from blank lines.
-
-2002-05-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * unix/tclUnixChan.c (SETBREAK): Solaris thinks ioctl() takes a
- signed second argument, and Linux thinks ioctl() takes an unsigned
- second argument. So need a longer definition of this macro to get
- neither to spew warnings...
-
-2002-05-13 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclEvent.c:
- * generic/tclIOUtil.c:
- * generic/tclInt.h: clean up all memory allocated by the
- filesystem, via introduction of 'TclFinalizeFilesystem'.
- Move TclFinalizeLoad into TclFinalizeFilesystem so we can
- be sure it is called at just the right time.
- Fix bad comment also. [Bug #555078 and 'fs' part of #543549]
- * win/tclWinChan.c: fix comment referring to wrong function.
-
-2002-05-10 Don Porter <dgp@users.sourceforge.net>
+ * library/clock.tcl (ParseClockScanFormat): [Bug 2886852]: Corrected a
+ problem where [clock scan] didn't load the timezone soon enough when
+ processing a time format that lacked a complete date.
+ * tests/clock.test (clock-66.1):
+ Added a test case for the above bug.
+ * library/tzdata/America/Argentina/Buenos_Aires:
+ * library/tzdata/America/Argentina/Cordoba:
+ * library/tzdata/America/Argentina/San_Luis:
+ * library/tzdata/America/Argentina/Tucuman:
+ New DST rules for Argentina. (Olson's tzdata2009p.)
- * tests/load.test:
- * tests/safe.test:
- * tests/tcltest.test: Corrected some list-quoting issues and
- other matters that cause tests to fail when the patch includes
- special characters. Report from Vince Darley. [Bug 554068].
+2009-10-26 Don Porter <dgp@users.sourceforge.net>
-2002-05-08 David Gravereaux <davygrvy@pobox.com>
+ * unix/Makefile.in: Remove $(PACKAGE).* and prototype from the
+ `make distclean` target. Completes 2009-10-20 commit.
- * doc/file.n:
- * tools/man2tcl.c:
- * tools/man2help2.tcl: Thanks to Peter Spjuth
- <peter.spjuth@space.se>, again. My prior fix for
- single-quote macro mis-understanding was wrong. Reverted to
- reimpliment the 'macro2' proc which handles single-quote macros
- and restored file.n text arrangement to avoid single-quotes on
- the first line. Sorry for all the confusion.
+2009-10-24 Kevin B. Kenny <kennykb@acm.org>
-2002-05-08 David Gravereaux <davygrvy@pobox.com>
+ * library/clock.tcl (ProcessPosixTimeZone):
+ Corrected a regression in the fix to [Bug 2207436] that caused
+ [clock] to apply EU daylight saving time rules in the US.
+ Thanks to Karl Lehenbauer for reporting this regression.
+ * tests/clock.test (clock-52.4):
+ Added a regression test for the above bug.
+ * library/tzdata/Asia/Dhaka:
+ * library/tzdata/Asia/Karachi:
+ New DST rules for Bangladesh and Pakistan. (Olson's tzdata2009o.)
- * tools/man2tcl.c:
- * tools/man2help2.tcl: Proper source of macro error mis-
- understanding single-quote as the leading macro command found
- and repaired.
+2009-10-23 Andreas Kupries <andreask@activestate.com>
- * doc/file.n: Reverted to prior state before I messed with
- it.
+ * generic/tclIO.c (FlushChannel): Skip OutputProc for low-level
+ 0-length writes. When closing pipes which have already been closed
+ not skipping leads to spurious SIG_PIPE signals. Reported by
+ Mikhail Teterin <mi+thun@aldan.algebra.com>.
-2002-05-08 Don Porter <dgp@users.sourceforge.net>
+2009-10-22 Donal K. Fellows <dkf@users.sf.net>
- * library/tcltest/tcltest.tcl: Corrected [uplevel] quoting when
- [source]-ing test script in subdirectories.
- * tests/fileName.test:
- * tests/load.test:
- * tests/main.test:
- * tests/tcltest.test:
- * tests/unixInit.test: Fixes to test suite when there's a space
- in the working path. Thanks to Kevin Kenny.
-
-2002-05-07 David Gravereaux <davygrvy@pobox.com>
-
- -- Changes from Peter Spjuth <peter.spjuth@space.se>
- * tools/man2tcl.c: Increased line buffer size and a bail-out if
- that should ever be over-run.
- * tools/man2help.tcl: Include Courier New font in rtf header.
- * tools/man2help2.tcl: Improved handling of CS/CE fields. Use
- Courier New for code samples and indent better.
-
- * doc/file.n:
- * doc/TraceCmd.3: winhelp conversion tools where understanding
- a ' as the first character on a line to be an unknown macro.
- Not knowing how to repair tools/man2tcl.c, I decided to rearrange
- the text in the docs instead.
-
-2002-05-07 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclFileName.c: fix to similar segfault when using
- 'glob -types nonsense -dir dirname -join * *'. [Bug 553320]
-
- * doc/FileSystem.3: further documentation on vfs.
- * tests/cmdAH.test:
- * tests/fileSystem.test:
- * tests/pkgMkindex.test: Fix to testsuite bugs when running out
- of directory whose name contains '{' or '['.
+ * generic/tclOOBasic.c (TclOO_Object_VarName): [Bug 2883857]: Allow
+ the passing of array element names through this method.
-2002-05-07 Miguel Sofer <msofer@users.sourceforge.net>
+2009-10-21 Donal K. Fellows <dkf@users.sf.net>
- * tests/basic.test: Fix for [Bug 549607]
- * tests/encoding.test: Fix for [Bug 549610]
- These are testsuite bugs that caused failures when the filename
- contained spaces. Report & fix by Kevin Kenny.
+ * generic/tclPosixStr.c: [Bug 2882561]: Work around oddity on Haiku OS
+ where SIGSEGV and SIGBUS are the same value.
-2002-05-02 Vince Darley <vincentdarley@users.sourceforge.net>
+ * generic/tclTrace.c (StringTraceProc): [Bug 2881259]: Added back cast
+ to work around silly bug in MSVC's handling of auto-casting.
- * generic/tclFileName.c: fix to freeing a bad object
- (i.e. segfault) when using 'glob -types nonsense -dir dirname'.
- * generic/tclWinFile.c: fix to [Bug 551306], also wrapped some
- long lines.
- * tests/fileName.test: added several tests for the above bugs.
- * doc/FileSystem.3: clarified documentation on refCount
- requirements of the object returned by the path type function.
- * generic/tclIOUtil.c:
- * win/tclWinFile.c:
- * unix/tclUnixFile.c:
- * mac/tclMacFile.c: moved TclpFilesystemPathType to the
- platform specific directories, so we can add missing platform-
- specific implementations. On Windows, 'file system' now returns
- useful results like "native NTFS", "native FAT" for that system.
- Unix and MacOS still only return "native".
- * doc/file.n: clarified documentation.
- * tests/winFile.test: test for 'file system' returning correct
- values.
- * tests/fileSystem.test: test for 'file system' returning correct
- values. Clean up after failed previous test run.
-
-2002-04-26 Jeff Hobbs <jeffh@ActiveState.com>
+2009-10-20 Don Porter <dgp@users.sourceforge.net>
- * unix/configure:
- * unix/tcl.m4: change HP-11 SHLIB_LD_LIBS from "" to ${LIBS} so
- that the .sl knows its dependent libs.
+ * unix/Makefile.in: Removed the long outdated and broken targets
+ package-* that were for building Solaris packages. Appears that the
+ pieces needed for these targets to function have never been present in
+ the current era of Tcl development and belong completely to Tcl
+ pre-history.
+
+2009-10-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIO.c: [Patch 2107634]: Revised ReadChars and
+ FilterInputBytes routines to permit reads to continue up to the string
+ limits of Tcl values. Before revisions, large read attempts could
+ panic when as little as half the limiting value length was reached.
+ Thanks to Sean Morrison and Bob Parker for their roles in the fix.
+
+2009-10-18 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclObj.c (TclDbDumpActiveObjects, TclDbInitNewObj)
+ (Tcl_DbIncrRefCount, Tcl_DbDecrRefCount, Tcl_DbIsShared):
+ [Bug 2871908]: Enforce separation of concerns between the lineCLPtr
+ and objThreadMap thread specific data members.
+
+2009-10-18 Joe Mistachkin <joe@mistachkin.com>
+
+ * tests/thread.test (thread-4.[345]): [Bug 1565466]: Correct tests to
+ save their error state before the final call to threadReap just in
+ case it triggers an "invalid thread id" error. This error can occur
+ if one or more of the target threads has exited prior to the attempt
+ to send it an asynchronous exit command.
+
+2009-10-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c (UnsetVarStruct, TclDeleteNamespaceVars)
+ (TclDeleteCompiledLocalVars, DeleteArray):
+ * generic/tclTrace.c (Tcl_UntraceVar2): [Bug 2629338]: Stop traces
+ that are deleted part way through (a feature used by tdom) from
+ causing freed memory to be accessed.
+
+2009-10-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictIncrCmd): [Bug 2874678]: Don't leak any
+ bignums when doing [dict incr] with a value.
+ * tests/dict.test (dict-19.3): Memory leak detection code.
+
+2009-10-07 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclObj.c: [Bug 2871908]: Plug memory leaks of objThreadMap
+ and lineCLPtr hashtables. Also make the names of the continuation
+ line information initialization and finalization functions more
+ consistent. Patch supplied by Joe Mistachkin <joe@mistachkin.com>.
+
+ * generic/tclIORChan.c (ErrnoReturn): Replace hardwired constant 11
+ with proper errno #define, EAGAIN. What was I thinking? The BSD's have
+ a different errno assignment and break with the hardwired number.
+ Reported by emiliano on the chat.
+
+2009-10-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInterp.c (SlaveEval): Agressive stomping of internal reps
+ was added as part of the NRE patch of 2008-07-13. This doesn't appear
+ to actually be needed, and it hurts quite a bit when large lists lose
+ their intreps and require reparsing. Thanks to Ashok Nadkarni for
+ reporting the problem.
+
+ * generic/tclTomMathInt.h (new): Public header tclTomMath.h had
+ * generic/tclTomMath.h: dependence on private headers, breaking use
+ * generic/tommath.h: by extensions [Bug 1941434].
+
+2009-10-05 Andreas Kupries <andreask@activestate.com>
+
+ * library/safe.tcl (AliasGlob): Fixed conversion of catch to
+ try/finally, it had an 'on ok msg' branch missing, causing a silent
+ error immediately, and bogus glob results, breaking search for Tcl
+ modules.
+
+2009-10-04 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXBundle.c: [Bug 2569449]: Workaround CF memory
+ * unix/tclUnixInit.c: managment bug in Mac OS X 10.4 &
+ earlier.
+
+2009-10-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Karachi:
+ * library/tzdata/Pacific/Apia: Olson's tzdata2009n.
+
+2009-09-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclDictObj.c: [Bug 2857044]: Updated freeIntRepProc
+ * generic/tclExecute.c: routines so that they set the typePtr
+ * generic/tclIO.c: field to NULL so that the Tcl_Obj is
+ * generic/tclIndexObj.c: not left in an inconsistent state.
+ * generic/tclInt.h:
+ * generic/tclListObj.c:
+ * generic/tclNamesp.c:
+ * generic/tclOOCall.c:
+ * generic/tclObj.c:
+ * generic/tclPathObj.c:
+ * generic/tclProc.c:
+ * generic/tclRegexp.c:
+ * generic/tclStringObj.c:
+
+ * generic/tclAlloc.c: Cleaned up various routines in the
+ * generic/tclCkalloc.c: call stacks for memory allocation to
+ * generic/tclInt.h: guarantee that any size values computed
+ * generic/tclThreadAlloc.c: are within the domains of the routines
+ they get passed to. [Bugs 2557696 and 2557796].
+
+2009-09-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: Replaced TclProcessReturn() calls with
+ * tests/error.test: Tcl_SetReturnOptions() calls as a simple fix
+ for [Bug 2855247]. Thanks to Anton Kovalenko for the report and fix.
+ Additional fixes for other failures demonstrated by new tests.
+
+2009-09-27 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/error.test (error-15.8.*): Coverage tests illustrating
+ flaws in the propagation of return options by [try].
+
+2009-09-26 Donal K. Fellows <dkf@users.sf.net>
-2002-04-26 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/tclooConfig.sh, win/tclooConfig.sh: [Bug 2026844]: Added dummy
+ versions of tclooConfig.sh that make it easier to build extensions
+ against both Tcl8.5+TclOO-standalone and Tcl8.6.
- * tests/obj.test (obj-11.[56]): Test conversion to boolean more
- thoroughly.
- * generic/tclObj.c (SetBooleanFromAny): Was not calling an integer
- parsing function on native 64-bit platforms! [Bug 548686]
+2009-09-24 Don Porter <dgp@users.sourceforge.net>
-2002-04-24 Jeff Hobbs <jeffh@ActiveState.com>
+ TIP #356 IMPLEMENTATION
- * generic/tclInt.h: corrected TclRememberJoinableThread decl to
- use VOID instead of void.
- * generic/tclThreadJoin.c: noted that this code isn't needed on Unix.
+ * generic/tcl.decls: Promote internal routine TclNRSubstObj()
+ * generic/tclCmdMZ.c: to public Tcl_NRSubstObj(). Still needs docs.
+ * generic/tclCompile.c:
+ * generic/tclInt.h:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2009-09-23 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/namespace.n: the description of [namespace unknown] failed
+ to mention [namespace path]: fixed. Thx emiliano.
-2002-04-23 Jeff Hobbs <jeffh@ActiveState.com>
+2009-09-21 Mo DeJong <mdejong@users.sourceforge.net>
- * doc/exec.n:
- * doc/tclvars.n: doc updates [Patch #509426] (gravereaux)
+ * tests/regexp.test: Added check for error message from
+ unbalanced [] in regexp. Added additional simple test cases
+ of basic regsub command.
-2002-04-24 Daniel Steffen <das@users.sourceforge.net>
+2009-09-21 Don Porter <dgp@users.sourceforge.net>
- * mac/tclMacResource.r: added check of
- TCLTK_NO_LIBRARY_TEXT_RESOURCES #define to allow disabling the
- inclusion of the tcl library code in the resource fork of Tcl
- executables and shared libraries.
+ * generic/tclCompile.c: Correct botch in the conversion of
+ Tcl_SubstObj(). Thanks to Kevin Kenny for detection and report.
-2002-04-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-09-17 Don Porter <dgp@users.sourceforge.net>
- * doc/TraceCmd.3: New file that documents Tcl_CommandTraceInfo,
- Tcl_TraceCommand and Tcl_UntraceCommand [Bug 414927]
+ * generic/tclCompile.c: Re-implement Tcl_SubstObj() as a simple
+ * generic/tclParse.c: wrapper around TclNRSubstObj(). This has
+ * tests/basic.test: the effect of caching compiled bytecode in
+ * tests/parse.test: the value to be substituted. Note that
+ Tcl_SubstObj() now exists only for extensions. Tcl itself no longer
+ makes any use of it. Note also that TclSubstTokens() is now reachable
+ only by Tcl_EvalEx() and Tcl_ParseVar() so tests aiming to test its
+ functioning needed adjustment to still have the intended effect.
-2002-04-22 Jeff Hobbs <jeffh@ActiveState.com>
+2009-09-16 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tclAlloc.c:
+ * generic/tclObj.c: Extended ::tcl::unsupported::representation.
+
+2009-09-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Completed the NR-enabling of [subst].
+ * generic/tclCmdMZ.c: [Bug 2314561].
+ * generic/tclCompCmds.c:
+ * generic/tclCompile.c:
* generic/tclInt.h:
- * generic/tclThreadAlloc.c (new):
+ * tests/coroutine.test:
+ * tests/parse.test:
+
+2009-09-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/http.test: Added in cleaning up of http tokens for each test
+ to reduce amount of global-variable pollution.
+
+2009-09-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * library/http/http.tcl (http::Event): [Bug 2849860]: Handle charset
+ names in double quotes; some servers like generating them like that.
+
+2009-09-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c: [Bug 2850901]: Corrected line counting error
+ * tests/into.test: in multi-command script substitutions.
+
+2009-09-07 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclExecute.c: Fix potential uninitialized variable use and
+ * generic/tclFCmd.c: null dereference flagged by clang static
+ * generic/tclProc.c: analyzer.
+ * generic/tclTimer.c:
+ * generic/tclUtf.c:
+
+ * generic/tclExecute.c: Silence false positives from clang static
+ * generic/tclIO.c: analyzer about potential null dereference.
+ * generic/tclScan.c:
+ * generic/tclCompExpr.c:
+
+2009-09-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileSubstCmd): [Bug 2314561]:
+ * generic/tclBasic.c: Added a bytecode compiler routine for the
+ * generic/tclCmdMZ.c: [subst] command. This is a partial solution to
+ * generic/tclCompile.c: the need to NR-enable [subst] since bytecode
+ * generic/tclCompile.h: execution is already NR-enabled. Two new
+ * generic/tclExecute.c: bytecode instructions, INST_NOP and
+ * generic/tclInt.h: INST_RETURN_CODE_BRANCH were added to support
+ * generic/tclParse.c: the new routine. INST_RETURN_CODE_BRANCH is
+ * tests/basic.test: likely to be useful in any future effort to
+ * tests/info.test: add a bytecode compiler routine for [try].
+ * tests/parse.test:
+
+2009-09-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/LinkVar.3: [Bug 2844962]: Added documentation of issues relating
+ to use of this API in a multi-threaded environment.
+
+2009-09-01 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORTrans.c (ReflectInput): Remove error response to
+ 0-result from method 'limit?' of transformations. Return the number of
+ copied bytes instead, which is possibly nothing. The latter then
+ triggers EOF handling in the higher layers, making the 0-result of
+ limit? the way to inject artificial EOF's into the data stream.
+
+2009-09-01 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Bump to tcltest 2.3.2 after revision
+ * library/tcltest/pkgIndex.tcl: to verbose error message.
* unix/Makefile.in:
- * unix/tclUnixThrd.c:
* win/Makefile.in:
- * win/tclWinInt.h:
- * win/tclWinThrd.c: added new threaded allocator contributed by
- AOL that significantly reduces lock contention when multiple
- threads are in use. Only Windows and Unix implementations are
- ready, and the Windows one may need work. It is only used by
- default on Unix for now, and requires that USE_THREAD_ALLOC be
- defined (--enable-threads on Unix will define this).
- * generic/tclIOUtil.c (Tcl_FSRegister, Tcl_FSUnregister):
- corrected calling of Tcl_ConditionWait to ensure that there would
- be a condition to wait upon.
+2009-08-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: [Bug 2845535]: A few more string
+ overflow cases in [format].
+
+2009-08-25 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c (Tcl_CreateInterp, Tcl_EvalTokensStandard)
+ (Tcl_EvalEx, TclEvalEx, TclAdvanceContinuations, TclNREvalObjEx):
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd, TclListLines):
+ * generic/tclCompCmds.c (*):
+ * generic/tclCompile.c (TclSetByteCodeFromAny, TclInitCompileEnv)
+ (TclFreeCompileEnv, TclCompileScript, TclCompileTokens):
+ * generic/tclCompile.h (CompileEnv):
+ * generic/tclInt.h (ContLineLoc, Interp):
+ * generic/tclObj.c (ThreadSpecificData, ContLineLocFree)
+ (TclThreadFinalizeObjects, TclInitObjSubsystem, TclContinuationsEnter,
+ (TclContinuationsEnterDerived, TclContinuationsCopy, TclFreeObj)
+ (TclContinuationsGet):
+ * generic/tclParse.c (TclSubstTokens, Tcl_SubstObj):
+ * generic/tclProc.c (TclCreateProc):
+ * generic/tclVar.c (TclPtrSetVar):
+ * tests/info.test (info-30.0-24):
+
+ Extended the parser, compiler, and execution engine with code and
+ attendant data structures tracking the position of continuation lines
+ which are not visible in the resulting script Tcl_Obj*'s, to properly
+ account for them while counting lines for #280.
- * generic/tclCmdAH.c (Tcl_FileObjCmd): added cast in FILE_SIZE.
+2009-08-24 Daniel Steffen <das@users.sourceforge.net>
- * win/tclWinFCmd.c (DoDeleteFile): check return of setattr API
- calls in file deletion for correct Win32 API handling.
+ * generic/tclInt.h: Annotate Tcl_Panic as noreturn for clang static
+ analyzer in PURIFY builds, replacing preprocessor/assert technique.
- * win/Makefile.in: correct dependencies for shell, gdb, runtest
- targets.
+ * macosx/tclMacOSXNotify.c: Fix multiple issues with nested event loops
+ when CoreFoundation notifier is running in embedded mode. (Fixes
+ problems in TkAqua Cocoa reported by Youness Alaoui on tcl-mac)
- * doc/clock.n:
- * compat/strftime.c (_fmt): change strftime to correctly handle
- localized %c, %x and %X on Windows. Added some notes about how
- the other values could be further localized.
+2009-08-21 Don Porter <dgp@users.sourceforge.net>
-2002-04-19 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclFileName.c: Correct regression in [Bug 2837800] fix.
+ * tests/fileName.test:
- * generic/tclMain.c (Tcl_Main): Free the memory allocated for the
- startup script path. [Bug 543549]
+2009-08-20 Don Porter <dgp@users.sourceforge.net>
- * library/msgcat/msgcat.tcl: [mcmax] wasn't using the caller's
- namespace when determining the max translated length. Also
- made revisions for better use of namespace variables and more
- efficient [uplevel]s.
+ * generic/tclFileName.c: [Bug 2837800]: Correct the result produced by
+ [glob */test] when * matches something like ~foo.
- * doc/msgcat.n:
- * library/msgcat/msgcat.tcl:
- * library/msgcat/pkgIndex.tcl: Added [mcload] to the export list
- of msgcat; bumped to 1.2.3. [Bug 544727]
+ * generic/tclPathObj.c: [Bug 2806250]: Prevent the storage of strings
+ starting with ~ in the "tail" part (normPathPtr field) of the path
+ intrep when PATHFLAGS != 0. This establishes the assumptions relied
+ on elsewhere that the name stored there is a relative path. Also
+ refactored to make an AppendPath() routine instead of the cut/paste
+ stanzas that were littered throughout.
-2002-04-20 Daniel Steffen <das@users.sourceforge.net>
+2009-08-20 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclInt.decls:
- * generic/tclIntPlatDecls.h:
+ * generic/tclCmdIL.c (TclNRIfObjCmd): [Bug 2823276]: Make [if]
+ NRE-safe on all arguments when interpreted.
+ (Tcl_LsortObjCmd): Close off memory leak.
+
+2009-08-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdAH.c (TclNRForObjCmd, etc.): [Bug 2823276]: Make [for]
+ and [while] into NRE-safe commands, even when interpreted.
+
+2009-08-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: [Bug 2837800]: Added NULL check to prevent
+ * tests/fileName.test: crashes during [glob].
+
+2009-08-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/dltest/pkge.c: const addition
+ * unix/tclUnixThrd.c: Use <pthread.h> in stead of "pthread.h"
+ * win/tclWinDde.c: Eliminate some more gcc warnings
+ * win/tclWinReg.c:
+ * generic/tclInt.h: Change ForIterData, make it const-safe.
+ * generic/tclCmdAH.c:
+
+2009-08-12 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #353 IMPLEMENTATION
+
+ * doc/NRE.3: New public routine Tcl_NRExprObj() permits
+ * generic/tcl.decls: extension commands to evaluate Tcl expressions
+ * generic/tclBasic.c: in NR-enabled command procedures.
+ * generic/tclCmdAH.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclObj.c:
+ * tests/expr.test:
+
+ * generic/tclDecls.h: make genstubs
* generic/tclStubInit.c:
- * mac/tclMacFCmd.c:
- * mac/tclMacFile.c:
- * mac/tclMacUtil.c: Modified TclpObjNormalizePath to be alias
- file aware, and replaced various calls to FSpLocationFrom*Path
- by calls to new alias file aware versions FSpLLocationFrom*Path.
- The alias file aware routines don't resolve the last component of
- a path if it is an alias. This allows [file copy/delete] etc. to
- act correctly on alias files. (c.f. discussion in Bug #511666)
-2002-04-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-08-06 Andreas Kupries <andreask@activestate.com>
- * tests/lindex.test (lindex-3.7):
- * generic/tclUtil.c (TclGetIntForIndex): Stopped indexes from
- hitting wide ints. [Bug #526717]
+ * doc/refchan.n [Bug 2827000]: Extended the implementation of
+ * generic/tclIORChan.c: reflective channels (TIP 219, method
+ * tests/ioCmd.test: 'read'), enabling handlers to signal EAGAIN to
+ indicate 'no data, but not at EOF either', and other system
+ errors. Updated documentation, extended testsuite (New test cases
+ iocmd*-23.{9,10}).
-2002-04-18 Miguel Sofer <msofer@users.sourceforge.net>
+2009-08-02 Miguel Sofer <msofer@users.sf.net>
- * generic/tclNamesp.c:
- * tests/info.test: [Bug 545325] info level didn't report
- namespace eval, bug report by Richard Suchenwirth.
+ * tests/coroutine.test: fix testfile cleanup
-2002-04-18 Don Porter <dgp@users.sourceforge.net>
+2009-08-02 Donal K. Fellows <dkf@users.sf.net>
- * doc/subst.n: Clarified documentation on handling unusual return
- codes during substitution, and on variable substitutions implied
- by command substitution, and vice versa. [Bug 536838]
+ * generic/tclObj.c (Tcl_RepresentationCmd): Added an unsupported
+ command for reporting the representation of an object. Result string
+ is deliberately a bit obstructive so that people are not encouraged to
+ make code that depends on it; it's a debugging tool only!
-2002-04-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/tclUnixFCmd.c (GetOwnerAttribute, SetOwnerAttribute)
+ (GetGroupAttribute, SetGroupAttribute): [Bug 1942222]: Stop calling
+ * unix/tclUnixFile.c (TclpGetUserHome): endpwent() and endgrent();
+ they've been unnecessary for ages.
- * generic/tclCmdIL.c (InfoBodyCmd):
- * tests/info.test (info-2.6): Proc bodies without string reps
- would report as empty [Bug #545644]
+2009-08-02 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclCmdMZ.c (Tcl_SubstObj): More clarification for
- comment on behaviour when substitutions are not well-formed,
- prompted by [Bug #536831]; alas, removing the ill-defined
- behaviour is a lot of work.
+ * win/tclWin32Dll.c: Eliminate TclWinResetInterfaceEncodings, since it
+ * win/tclWinInit.c: does exactly the same as TclWinEncodingsCleanup,
+ * win/tclWinInt.h: make sure that tclWinProcs and
+ tclWinTCharEncoding are always set and reset
+ concurrently.
+ * win/tclWinFCmd.c: Correct check for win95
-2002-04-18 Miguel Sofer <msofer@users.sourceforge.net>
+2009-07-31 Don Porter <dgp@users.sourceforge.net>
- * generic/tclExecute.c:
- * tests/expr-old.test: fix for [Bug #542588] (Phil Ehrens), where
- "too large integers" were reported as "floating-point value" in
- [expr] error messages.
+ * generic/tclStringObj.c: [Bug 2830354]: Corrected failure to
+ * tests/format.test: grow buffer when format spec request
+ large width floating point values. Thanks to Clemens Misch.
-2002-04-17 Jeff Hobbs <jeffh@ActiveState.com>
+2009-07-26 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclEncoding.c (EscapeFromUtfProc):
- * generic/tclIO.c (WriteChars, Tcl_Close): corrected the handling
- of outputting end escapes for escape-based encodings.
- [Bug #526524] (yamamoto)
+ * library/auto.tcl (tcl_findLibrary, auto_mkindex):
+ * library/package.tcl (pkg_mkIndex, tclPkgUnknown, MacOSXPkgUnknown):
+ * library/safe.tcl (interpAddToAccessPath, interpDelete, AliasGlob):
+ (AliasSource, AliasLoad, AliasEncoding):
+ * library/tm.tcl (UnknownHandler): Simplify by swapping some [catch]
+ gymnastics for use of [try].
-2002-04-17 Don Porter <dgp@users.sourceforge.net>
+2009-07-26 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * doc/tcltest.n: Removed [saveState] and [restoreState] from
- tcltest 2 documentation, effectively deprecating them. [Bug 495660]
- * library/tcltest/tcltest.tcl: Made separate export for commands
- kept only for tcltest 1 compatibility.
+ * tools/genStubs.tcl: Forced LF translation when generating .h's to
+ avoid spurious diffs when regenerating on a Windows box.
- * tests/iogt.test: Revised to run tests in a namespace, rather than
- use the useless and buggy [saveState] and [restoreState] commands
- of tcltest. Updated to use tcltest 2 as well. [Patch 544911]
+2009-07-26 Jan Nijtmans <nijtmans@users.sf.net>
-2002-04-16 Don Porter <dgp@users.sourceforge.net>
+ * win/Makefile.in: [Bug 2827066]: msys build --enable-symbols broken
+ * win/tcl.m4: And modified the same for unicows.dll, as a
+ * win/configure: preparation for [Enh 2819611].
- * tests/io.test: Revised to run tests in a namespace, rather than
- use the useless and buggy [saveState] and [restoreState] commands
- of tcltest. Updated to use tcltest 2 as well. [Patch 544546]
+2009-07-25 Donal K. Fellows <dkf@users.sf.net>
-2002-04-15 Miguel Sofer <msofer@users.sourceforge.net>
+ * library/history.tcl (history): Reworked the history mechanism in
+ terms of ensembles, rather than the ad hoc ensemble-lite mechanism
+ used previously.
- * generic/tclProc.c:
- * tests/proc-old.test: Improved stack trace for TCL_BREAK and
- TCL_CONTINUE returns from procs. Patch by Don Porter
- [Bug 536955].
-
+2009-07-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/self.n (self class): [Bug 2704302]: Add some text to make it
+ clearer how to get the name of the current object's class.
+
+2009-07-23 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (Tcl_GetChannelHandle): [Bug 2826248]: Do not crash
+ * generic/tclPipe.c (FileForRedirect): for getHandleProc == NULL, this
+ is allowed. Provide a nice error message in the bypass area. Updated
+ caller to check the bypass for a mesage. Bug reported by Andy
+ Sonnenburg <andy22286@users.sourceforge.net>
+
+2009-07-23 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclNotify.c: [Bug 2820349]: Ensure that queued events are
+ freed once processed.
+
+2009-07-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * macosx/tclMacOSXFCmd.c: CONST -> const
+ * generic/tclGetDate.y:
+ * generic/tclDate.c:
+ * generic/tclLiteral.c: (char *) cast in ckfree call
+ * generic/tclPanic.c: [Feature Request 2814786]: remove TclpPanic
+ * generic/tclInt.h
+ * unix/tclUnixPort.h
+ * win/tclWinPort.h
+
+2009-07-22 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclEvent.c: [Bug 2001201 again]: Refined the 20090617 patch
+ on [exit] streamlining, so that it now correctly calls thread exit
+ handlers for the calling thread, including <Destroy> bindings in Tk.
+
+2009-07-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/Asia/Dhaka:
+ * library/tzdata/Indian/Mauritius: Olson's tzdata2009k.
+
+2009-07-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (StringIsCmd): Reorganize so that [string is] is
+ more efficient when parsing things that are correct, at a cost of
+ making the empty string test slightly more costly. With this, the cost
+ of doing [string is integer -strict $x] matches [catch {expr {$x+0}}]
+ in the successful case, and greatly outstrips it in the failing case.
+
+2009-07-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.decls, generic/tclOO.c (Tcl_GetObjectName): Expose a
+ function for efficiently returning the current name of an object.
+
+2009-07-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: Define NDEBUG in optimized (non-symbols) build to
+ disable NRE assert()s and threaded allocator range checks.
+
+2009-07-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBinary.c: Removed unused variables.
+ * generic/tclCmdIL.c:
+ * generic/tclCompile.c:
* generic/tclExecute.c:
- * tests/compile.test: made bytecodes check for a catch before
- returning; the compiled [return] is otherwise non-catchable.
- [Bug 542142] reported by Andreas Kupries.
-
-2002-04-15 Don Porter <dgp@users.sourceforge.net>
-
- * tests/socket.test: Increased timeout values so that tests have
- time to successfully complete even on slow/busy machines. [Bug 523470]
-
- * doc/tcltest.n:
- * library/tcltest/tcltest.tcl:
- * tests/tcltest.test: Revised [tcltest::test] to return errors
- when called with invalid syntax and to accept exactly two arguments
- as documented. Improved error messages. [Bug 497446, Patch 513983]
- ***POTENTIAL INCOMPATIBILITY***: Incompatible with previous
- tcltest 2.* releases, found only in alpha releases of Tcl 8.4.
-
-2002-04-11 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclNotify.c (TclFinalizeNotifier): remove remaining
- unserviced events on finalization.
-
- * win/tcl.m4: Enabled COFF as well as CV style debug info with
- --enable-symbols to allow Dr. Watson users to see function info.
- More info on debugging levels can be obtained at:
- http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
-
- * tests/ioCmd.test: fixed iocmd-8.15 to have mac and unixPc variants.
-
- * generic/tclParse.c (Tcl_ParseVar): conditionally incr obj
- refcount to prevent possible mem leak.
-
-2002-04-08 Daniel Steffen <das@users.sourceforge.net>
-
- * generic/tcl.h: no <sys/types.h> on mac.
- * mac/tclMacFile.c: minor fixes to Vince's changes from 03-24.
- * mac/tclMacOSA.c:
- * mac/tclMacResource.c: added missing Tcl_UtfToExternalDString
- conversions of resource file names.
- * mac/tclMacSock.c (TcpGetOptionProc): fixed bug introduced
- by Andreas on 02-25; changed strcmp's to strncmp's so that
- option comparison behaves like on other platforms.
- * mac/tcltkMacBuildSupport.sea.hqx (CW Pro6 changes): added
- support to allow Tk to hookup C library stderr/stdout to TkConsole.
- * tests/basic.test:
- * tests/cmdAH.test:
- * tests/encoding.test:
- * tests/fileSystem.test:
- * tests/ioCmd.test: fixed tests failing on mac: check for
- existence of [exec], changed some result strings.
-
-2002-04-06 Jeff Hobbs <jeffh@ActiveState.com>
-
- * unix/tclUnixFCmd.c (Realpath): added a little extra code to
- initialize a realpath arg when compiling in PURIFY mode in order
- to prevent spurious purify warnings. We should really create our
- own realpath implementation, but this will at least quiet purify
- for now.
-
-2002-04-05 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclCmdMZ.c (Tcl_SubstObj):
- * tests/subst.test: Corrected [subst] so that return codes
- TCL_BREAK and TCL_CONTINUE returned by variable substitution
- have the same effect as when those codes are returned by command
- substitution. [Bug 536879]
-
-2002-04-03 Jeff Hobbs <jeffh@ActiveState.com>
-
- * library/tcltest/tcltest.tcl: added getMatchingFiles back (alias
- to GetMatchingFiles), which was a public function in tcltest 1.0.
-
-2002-04-01 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * generic/tclEnv.c:
- * generic/tclIOUtil.c: invalidate filesystem cache when the
- user changes env(HOME). Fixes [Bug #535621]. Also cleaned up
- some of the documentation.
- * tests/fileSystem.test: added test for bug just fixed.
-
-2002-04-01 Kevin Kenny <kennykb@acm.org>
-
- * win/tclWinTime.c (Tcl_GetTime): made the checks of clock
- frequency more permissive to cope with the fact that Win98SE
- is observed to return 1.19318 in place of 1.193182 for the
- performance counter frequency.
-
-2002-03-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * generic/tclCmdMZ.c (Tcl_TraceObjCmd, TraceVarProc)
- (TraceCommandProc, TclTraceCommandObjCmd): corrected
- potential double-free of traces on variables by flagging in
- Trace*Proc that it will free the var in case the eval wants to
- delete the var trace as well. [Bug #536937]
- Also converted Tcl_UntraceVar -> Tcl_UntraceVar2 and Tcl_Eval to
- Tcl_EvalEx in Trace*Proc for slight efficiency improvement.
-
-2002-03-29 Don Porter <dgp@users.sourceforge.net>
-
- * doc/AllowExc.3:
- * generic/tclBasic.c (Tcl_EvalObjv,Tcl_EvalEx,Tcl_EvalObjEx):
- * generic/tclCompile.h (TclCompEvalObj):
- * generic/tclExecute.c (TclCompEvalObj,TclExecuteByteCode):
- * tests/basic.test: Corrected problems with Tcl_AllowExceptions
- having influence over the wrong scope of Tcl_*Eval* calls. Patch
- from Miguel Sofer. Report from Jean-Claude Wippler. [Bug 219181]
-
-2002-03-28 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclVar.c: Refactored CallTraces to collect repeated
- handling of its returned value into CallTraces itself.
-
-2002-03-28 David Gravereaux <davygrvy@pobox.com>
-
- * tools/feather.bmp:
- * tools/man2help.tcl:
- * tools/man2help2.tcl:
- * win/makefile.vc: More winhelp target fixups. Added a feather
- bitmap to the non-scrollable area and changed the color to be
- yellow from a plain white. The colors can be whatever we want
- them to be, but thought I would start with something bold.
- [Bug 527941]
+ * generic/tclHash.c:
+ * generic/tclIOUtil.c:
+ * generic/tclVar.c:
- * doc/SetVar.3:
- * doc/TraceVar.3:
- * doc/UpVar.3: .AP macro syntax repair.
+ * generic/tclBasic.c: Silence compiler warnings about ClientData.
+ * generic/tclProc.c:
-2002-03-27 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclScan.c: Typo in ACCEPT_NAN configuration.
+
+ * generic/tclStrToD.c: [Bug 2819200]: Set floating point control
+ register on MIPS systems so that the gradual underflow expected by Tcl
+ is in effect.
+
+2009-07-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h (Namespace): Added machinery to allow
+ * generic/tclNamesp.c (many functions): reduction of memory used
+ * generic/tclResolve.c (BumpCmdRefEpochs): by namespaces. Currently
+ #ifdef'ed out because of compatibility concerns.
- * tools/man2help.tcl:
- * win/makefile.vc: winhelp target now copies all needed files
- from tools/ to a workarea under $(OUT_DIR) and builds it from
- there. No build cruft is left in tools/ anymore. All paths
- used in man2help.tcl are now relative to where the script is.
- [Bug 527941]
+ * generic/tclInt.decls: Added four functions for better integration
+ with itcl-ng.
-2002-03-27 David Gravereaux <davygrvy@pobox.com>
+2009-07-14 Kevin B. Kenny <kennykb@acm.org>
- * win/.cvsignore:
- * win/buildall.vc.bat:
- * win/coffbase.txt:
- * win/makefile.vc:
- * win/nmakehlp.c (new):
- * win/rules.vc: First draft fix for [Bug 527941]. More changes
- need to done to the makehelp target to get to stop leaving build
- files in the tools/ directory. This does not address the syntax
- errors in the man files. Having the contents of tcl.hpj(.in)
- inside makefile.vc allows for version numbers to be replaced with
- macros.
-
- The new nmakehlp.c is built by rules.vc in preprocessing and removes
- the need to use tricky shell syntax that wasn't compatible on Win9x
- systems. Clean targets made Win9x complient. This is a first draft
- repair for [Bug 533862].
+ * generic/tclInt.h (TclNRSwitchObjCmd):
+ * generic/tclBasic.c (builtInCmds):
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd):
+ * tests/switch.test (switch-15.1):
+ [Bug 2821401]: Make non-bytecoded [switch] command aware of NRE.
-2002-03-28 Miguel Sofer <msofer@users.sourceforge.net>
+2009-07-13 Andreas Kupries <andreask@activestate.com>
- * generic/tclBasic.c (Tcl_EvalEx): passing the correct commandSize
- to TclEvalObjvInternal. [Bug 219362], fix by David Knoll.
+ * generic/tclCompile.c (TclInitCompileEnv, EnterCmdWordIndex)
+ (TclCleanupByteCode, TclCompileScript):
+ * generic/tclExecute.c (TclCompileObj, TclExecuteByteCode):
+ * tclCompile.h (ExtCmdLoc):
+ * tclInt.h (ExtIndex, CFWordBC, CmdFrame):
+ * tclBasic.c (DeleteInterpProc, TclArgumentBCEnter)
+ (TclArgumentBCRelease, TclArgumentGet, SAVE_CONTEXT)
+ (RESTORE_CONTEXT, NRCoroutineExitCallback, TclNRCoroutineObjCmd):
+ * generic/tclCmdAH.c (TclNRForObjCmd, TclNRForIterCallback,
+ (ForNextCallback):
+ * generic/tclCmdMZ.c (TclNRWhileObjCmd):
-2002-03-28 Miguel Sofer <msofer@users.sourceforge.net>
+ Extended the bytecode compiler initialization to recognize the
+ compilation of whole files (NRE enabled 'source' command) and switch
+ to the counting of absolute lines in that case.
- * generic/tclBasic.c (Tcl_EvalEx):
- * tests/basic.test: avoid exceptional returns at level 0
- [Bug 219181]
+ Further extended the bytecode compiler to track the start line in the
+ generated information, and modified the bytecode execution to
+ recompile an object if the location as per the calling context doesn't
+ match the location saved in the bytecode. This part could be optimized
+ more by using more memory to keep all possibilities which occur
+ around, or by just adjusting the location information instead of a
+ total recompile.
-2002-03-27 Don Porter <dgp@users.sourceforge.net>
+ Reworked the handling of literal command arguments in bytecode to be
+ saved (compiler) and used (execution) per command (See the
+ TCL_INVOKE_STK* instructions), and not per the whole bytecode. This,
+ and the previous change remove the problems with location data caused
+ by literal sharing (across whole files, but also proc bodies).
+ Simplified the associated datastructures (ExtIndex is gone, as is the
+ function EnterCmdWordIndex).
- * doc/tcltest.n ([mainThread]):
- * library/tcltest/tcltest.tcl:
- * tests/tcltest.test: Major code cleanup to deal with whitespace,
- coding conventions, and namespace issues, with several minor bugs
- fixed in the process.
+ The last change causes the hashtable 'lineLABCPtr' to be state which
+ has to be kept per coroutine, like the CmdFrame stack. Reworked the
+ coroutine support code to create, delete and switch the information as
+ needed. Further reworked the tailcall command as well, it has to pop
+ its own arguments when run in a bytecode context to keep a proper
+ stack in 'lineLABCPtr'.
- * tests/main.test: Added missing [after cancel]s.
+ Fixed the mishandling of line information in the NRE-enabled 'for' and
+ 'while' commands introduced when both were made to share their
+ iteration callbacks without taking into account that the loop body is
+ found in different words of the command. Introduced a separate data
+ structure to hold all the callback information, as we went over the
+ limit of 4 direct client-data values for NRE callbacks.
-2002-03-25 Don Porter <dgp@users.sourceforge.net>
+ The above fixes [Bug 1605269].
- * tests/main.test: Removed workarounds for Bug 495977.
+2009-07-12 Donal K. Fellows <dkf@users.sf.net>
- * library/tcltest/tcltest.tcl: Keep the value of $::auto_path
- unchanged, so that the tcltest package can test code that depends
- on auto-loading. If a testing application needs $::auto_path pruned,
- it should do that itself. [Bug 495726]
- Improve the processing of the -constraints option to [test] so that
- constraint lists can have arbitrary whitespace, and non-lists don't
- blow things up. [Bug 495977]
- Corrected faulty variable initialization. [Bug 534845]
+ * generic/tclCmdMZ.c (StringIndexCmd, StringEqualCmd, StringCmpCmd):
+ * generic/tclExecute.c (TclExecuteByteCode): [Bug 2637173]: Factor out
+ * generic/tclInt.h (TclIsPureByteArray): the code to determine if
+ * generic/tclUtil.c (TclStringMatchObj): it is safe to work with
+ byte arrays directly, so that we get the check correct _once_.
-2002-03-25 Miguel Sofer <msofer@users.sourceforge.net>
+ * generic/tclOOCall.c (TclOOGetCallContext): [Bug 1895546]: Changed
+ * generic/tclOO.c (TclOOObjectCmdCore): the way that the cache is
+ managed so that when itcl does cunning things, those cunning things
+ can be cached properly.
- * doc/CrtTrace.3: small doc correction
- * generic/tclBasic.c (Tcl_DeleteTrace): Allow NULL callback on
- trace deletions [Bug 534728] (Hemang Lavana).
+2009-07-11 Donal K. Fellows <dkf@users.sf.net>
-2002-03-24 Miguel Sofer <msofer@users.sourceforge.net>
+ * doc/vwait.n: Substantially increased the discussion of issues and
+ work-arounds relating to nested vwaits, following discussion on the
+ tcl-core mailing list on the topic.
- * generic/tclBasic.c (Tcl_EvalObjv): replaced obscure, incorrect
- code as described in [Bug 533907] (Don Porter).
+2009-07-10 Pat Thoyts <patthoyts@users.sourceforge.net>
-2002-03-24 Don Porter <dgp@users.sourceforge.net>
+ * tests/zlib.test: ZlibTransformClose may be called with a NULL
+ * generic/tclZlib.c: interpreter during finalization and
+ Tcl_SetChannelError requires a list. Added some tests to ensure error
+ propagation from the zlib library to the interp.
- * library/tcltest/tcltest.tcl: Use [interpreter] to set/query the
- executable currently running the tcltest package. [Bug 454050]
+2009-07-09 Pat Thoyts <patthoyts@users.sourceforge.net>
- * library/tcltest/tcltest.tcl: Allow non-proc commands to be used
- as the customization hooks. [Bug 495662]
+ * tests/zlib.test: [Bug 2818131]: Added tests and fixed a typo that
+ broke [zlib push] for deflate format.
-2002-03-24 Vince Darley <vincentdarley@users.sourceforge.net>
+2009-07-09 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclFilename.c:
- * generic/tclFCmd.c:
- * generic/tclTest.c:
- * generic/tcl.h:
- * generic/tclIOUtil.c:
- * win/tclWinFile.c:
- * win/tclWinFCmd.c:
- * win/tclWinPipe.c:
- * unix/tclUnixFile.c:
- * unix/tclUnixFCmd.c:
- * mac/tclMacFile.c:
- * doc/FileSystem.3:
- * doc/file.n:
- * tests/cmdAH.test:
- * tests/fileName.test:
- * tests/fileSystem.test: (new file)
- * tests/winFCmd.test: fix [Bug 511666] and [Bug 511658],
- and improved documentation of some aspects of the filesystem,
- particularly 'Tcl_FSMatchInDirectory' which now might match
- a single file/directory only, and 'file normalize' which
- wasn't very clear before. Removed inconsistency betweens
- docs and the Tcl_Filesystem structure. Also fixed
- [Bug 523217] and corrected file normalization on Unix so that
- it expands symbolic links. Added some new tests of the
- filesystem code (in the new file 'fileSystem.test'), and
- some extra tests for correct handling of symbolic links.
- Fix to [Bug 530960] which shows up on Win98. Made comparison
- with ".com" case insensitive in tclWinPipe.c
-
- ***POTENTIAL INCOMPATIBILITY***: But only between alpha
- releases (users of the new Tcl_Filesystem lookup table in Tcl
- 8.4a4 need to handle the new way in which Tcl may call
- Tcl_FSMatchInDirectory, and 'file normalize' on unix now
- behaves correctly). Only known impact is with the 'tclvfs'
- extension.
-
-2002-03-22 Miguel Sofer <msofer@users.sourceforge.net>
-
- * tests/basic.test (basic-46.1): adding test for [Bug 533758],
- fixed earlier today.
-
-2002-03-22 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinInt.h: moved undef of TCL_STORAGE_CLASS. [Bug #478579]
-
-2002-03-22 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclBasic.c (Tcl_EvalObjEx):
- * generic/tclExecute.c (TclCompEvalObj): fixed the errorInfo for
- return codes other than (TCL_OK, TCL_ERROR) to runLevel 0
- [Bug 533758]. Removed the static RecordTracebackInfo(), as its
- functionality is easily replicated by Tcl_LogCommandInfo. Bug
- and redundancy noted by Don Porter.
-
-2002-03-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * doc/expr.n: Improved documentation for ceil and floor [Bug 530535]
-
-2002-03-20 Don Porter <dgp@users.sourceforge.net>
-
- * doc/SetVar.3:
- * doc/TraceVar.3:
- * doc/UpVar.3:
- * generic/tcl.h (Tcl_VarTraceProc):
- * generic/tcl.decls (Tcl_GetVar2, Tcl_SetVar2, Tcl_TraceVar2,
- Tcl_UnsetVar2, Tcl_UntraceVar2, Tcl_UpVar2, Tcl_VarTraceInfo2,
- Tcl_GetVar2Ex, TclSetVar2Ex):
- * generic/tclCmdMZ.c (TraceVarProc):
- * generic/tclEnv.c (EnvTraceProc):
- * generic/tclEvent.c (VwaitVarProc):
- * generic/tclInt.decls (TclLookupVar,TclPrecTraceProc):
- * generic/tclLink.c (LinkTraceProc):
- * generic/tclUtil.c (TclPrecTraceProc):
- * generic/tclVar.c (CallTraces, MakeUpvar, VarErrMsg, TclLookupVar,
- Tcl_GetVar2, Tcl_SetVar2, Tcl_TraceVar2, Tcl_UnsetVar2,
- Tcl_UntraceVar2, Tcl_UpVar2, Tcl_VarTraceInfo2, Tcl_GetVar2Ex,
- TclSetVar2Ex): Updated interfaces of generic/tclVar.c according
- to TIP 27. In particular, the "part2" arguments were CONSTified.
- [Patch 532642]
- * generic/tclDecls.h:
- * generic/tclIntDecls.h: make genstubs
-
-2002-03-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- * tests/compile.test (compile-12.3): Test to detect bug 530320.
- * generic/tclCompile.c (TclCompileTokens): Fixed buffer overrun
- reported in bug 530320.
-
-2002-03-14 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/configure: Regen.
- * win/configure.in: Add configure time test for SEH
- support in the compiler.
- * win/tclWin32Dll.c (ESP, EBP, TclpCheckStackSpace,
- _except_checkstackspace_handler):
- * win/tclWinChan.c (ESP, EBP, Tcl_MakeFileChannel,
- _except_makefilechannel_handler):
- * win/tclWinFCmd.c (ESP, EBP, DoRenameFile,
- _except_dorenamefile_handler,
- DoCopyFile, _except_docopyfile_handler):
- Implement SEH support under gcc using inline asm.
- Tcl and Tk should now compile with Mingw 1.1. [Patch 525746]
-
-2002-03-14 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWinFCmd.c (DoRenameFile, DoCopyFile): Handle
- an SEH exception with EXCEPTION_EXECUTE_HANDLER instead
- of restarting the faulting instruction with
- EXCEPTION_CONTINUE_EXECUTION. Bug 466102 provides an
- example of how restarting could send Tcl into an
- infinite loop. [Patch 525746]
-
-2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWinFCmd.c (DoRenameFile, DoCopyFile, DoDeleteFile,
- DoRemoveJustDirectory): Make sure we don't pass NULL or ""
- as a path name to Win32 API functions since this was
- crashing under Windows 98.
-
-2002-03-11 Don Porter <dgp@users.sourceforge.net>
-
- * library/tcltest/tcltest.tcl:
- * library/tcltest/pkgIndex.tcl: Bumped tcltest package to 2.0.2.
-
-2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
-
- * library/tcltest/tcltest.tcl (getMatchingFiles): Pass
- a proper list to foreach to avoid munging a Windows
- patch like D:\Foo\Bar into D:FooBar before the glob.
-
-2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
-
- * generic/tclEncoding.c: Fix typo in comment.
- * generic/tclIO.c (DoReadChars, ReadBytes, ReadChars):
- Use NULL value instead of pointer set to NULL to make
- things more clear. Reorder arguments so that they
- match the function signatures. Cleanup little typos
- and add more descriptive comment.
-
-2002-03-08 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/README: Update to indicate that Mingw 1.1 is
- required to build Tcl. Add section describing new
- msys based build process. Update Cygwin build
- instructions so users know where to find Mingw 1.1.
-
-2002-03-08 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinFCmd.c (DoCopyFile): correctly set retval to TCL_OK.
-
-2002-03-07 Mo DeJong <mdejong@users.sourceforge.net>
-
- * win/tclWin32Dll.c (TclpCheckStackSpace):
- * win/tclWinFCmd.c (DoRenameFile, DoCopyFile): Replace
- hard coded constants with Win32 symbolic names.
- Move control flow statements out of __try blocks
- since the documentation indicates it is frowned upon.
-
-2002-03-07 Don Porter <dgp@users.sourceforge.net>
-
- * doc/interp.n:
- * generic/tclInterp.c(Tcl_InterpObjCmd,SlaveObjCmd,SlaveRecursionLimit):
- * generic/tclTest.c:
- * tests/interp.test: Added the [interp recursionlimit] command to
- set/query the recursion limit of an interpreter. Proposal and
- implementation from Stephen Trier. [TIP 87, Patch 522849]
+ * compat/mkstemp.c (mkstemp): [Bug 2819227]: Use rand() for random
+ numbers as it is more portable.
-2002-03-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-07-05 Donal K. Fellows <dkf@users.sf.net>
- * generic/tcl.h, tools/tcl.wse.in, unix/configure.in,
- * unix/tcl.spec, win/README.binary, win/configure.in, README:
- Bumped patchlevel; this might need to change in the future, but it
- will help us distinguish between the CVS version and the most
- recent released version.
+ * generic/tclZlib.c (ZlibTransformWatch): Correct the handling of
+ events so that channel transforms work with things like an asynch
+ [chan copy]. Problem reported by Pat Thoyts.
-2002-03-06 Miguel Sofer <msofer@users.sourceforge.net>
+2009-07-01 Pat Thoyts <patthoyts@users.sourceforge.net>
- * generic/tclInt.h: for unshared objects, TclDecrRefCount now
- frees the internal rep before the string rep - just like the
- non-macro Tcl_DecrRefCount/TclFreeObj [Bug 524802].
+ * win/tclWinInt.h: [Bug 2806622]: Handle the GetUserName API call
+ * win/tclWin32Dll.c: via the tclWinProcs indirection structure. This
+ * win/tclWinInit.c: fixes a problem obtaining the username when the
+ USERNAME environment variable is unset.
-2002-03-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-06-30 Daniel Steffen <das@users.sourceforge.net>
- * doc/lsearch.n: Documentation of new features, plus examples.
- * tests/lsearch.test: Tests of new features.
- * generic/tclCmdIL.c (Tcl_LsearchObjCmd): TIP#80 support. See
- http://purl.org/tcl/tip/80 for details.
+ * generic/tclInt.h: Add assert macros for clang static
+ * generic/tclPanic.c: analyzer and redefine Tcl_Panic to
+ * generic/tclStubInit.c: assert after panic in clang PURIFY
+ builds.
-2002-03-05 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclCmdIL.c: Add clang assert for false positive
+ from static analyzer.
- *** 8.4a4 TAGGED FOR RELEASE ***
+2009-06-26 Daniel Steffen <das@users.sourceforge.net>
- * unix/tclUnixChan.c: initial remedy for [Bug #525783] flush
- problem introduced by TIP #35. This may not satisfy true serial
- channels, but it restores the correct flushing of std* channels on
- exit.
+ * macosx/Tcl-Common.xcconfig: Update projects for Xcode 3.1 and
+ * macosx/Tcl.xcode/*: 3.2, standardize on gcc 4.2, remove
+ * macosx/Tcl.xcodeproj/*: obsolete configurations and pre-Xcode
+ * macosx/Tcl.pbproj/* (removed): project.
- * unix/README: added --enable-langinfo doc.
+ * macosx/README: Update project docs, cleanup.
- * unix/tcl.spec:
- * tools/tcl.wse.in: fixed URL refs to use www.tcl.tk or SF.
+ * unix/Makefile.in: Update dist target for project
+ changes.
-2002-03-04 Jeff Hobbs <jeffh@ActiveState.com>
+2009-06-24 Donal K. Fellows <dkf@users.sf.net>
- * README:
- * mac/README:
- * unix/Makefile.in:
- * unix/README:
- * win/README:
- * win/README.binary: updated to use www.tcl.tk URL.
+ * tests/oo.test (oo-19.1): [Bug 2811598]: Make more resilient.
- * unix/Makefile.in: added older ChangeLogs to dist target.
+2009-06-24 Pat Thoyts <patthoyts@users.sourceforge.net>
- * tests/io.test:
- * tests/encoding.test: corrected iso2022 encoding results.
- added encoding-24.*
- * generic/tclEncoding.c (EscapeFromUtfProc): corrected output of
- escape codes as per RFC 1468. [Patch #474358] (taguchi)
- (TclFinalizeEncodingSubsystem): corrected potential double-free
- when encodings were finalized on exit. [Bug #219314, #524674]
+ * tests/http11.test: [Bug 2811492]: Clean up procs after testing.
-2002-03-01 Jeff Hobbs <jeffh@ActiveState.com>
+2009-06-18 Donal K. Fellows <dkf@users.sf.net>
- * library/encoding/iso2022-jp.enc:
- * library/encoding/iso2022.enc:
- * tools/encoding/iso2022-jp.esc:
- * tools/encoding/iso2022.esc: gave <ESC>$B precedence over <ESC>$@,
- based on comments (point 1) in [Bug #219283] (rfc 1468)
+ * generic/tclCkalloc.c (MemoryCmd): [Bug 988703]:
+ * generic/tclObj.c (ObjData, TclFinalizeThreadObjects): Add mechanism
+ for discovering what Tcl_Objs are allocated when built for memory
+ debugging. Developed by Joe Mistachkin.
- * tests/encoding.test: added encoding-23.* tests
- * generic/tclIO.c (FilterInputBytes): reset the TCL_ENCODING_START
- flags in the ChannelState when using 'gets'. [Bug #523988]
- Also reduced the value of ENCODING_LINESIZE from 30 to 20 as this
- seems to improve the performance of 'gets' according to tclbench.
+2009-06-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
-2002-02-28 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclEvent.c: Applied a patch by George Peter Staplin
+ drastically reducing the ambition of [exit] wrt finalization, and
+ thus solving many multi-thread teardown issues. [Bugs 2001201,
+ 486399, and possibly 597575, 990457, 1437595, 2750491]
- * generic/tclCmdMZ.c (TraceCommandProc): ensure that TraceCommandInfo
- structure was also deleted when a command was deleted to prevent a
- mem leak.
+2009-06-15 Don Porter <dgp@users.sourceforge.net>
- * generic/tclBasic.c (Tcl_CreateObjTrace): set tracePtr->flags
- correctly.
+ * generic/tclStringObj.c: sprintf() -> Tcl_ObjPrintf() conversion.
- * generic/tclTimer.c (TimerExitProc): remove remaining events in
- tls on thread exit.
+2009-06-15 Reinhard Max <max@suse.de>
-2002-02-28 Miguel Sofer <msofer@users.sourceforge.net>
+ * unix/tclUnixPort.h: Move all socket-related code from tclUnixChan.c
+ * unix/tclUnixChan.c: to tclUnixSock.c.
+ * unix/tclUnixSock.c:
- * generic/tclNamesp.c: allow cached fully-qualified namespace
- names to be usable from different namespaces within the same
- interpreter without forcing a new lookup [Patch 458872].
+2009-06-15 Donal K. Fellows <dkf@users.sf.net>
-2002-02-28 Miguel Sofer <msofer@users.sourceforge.net>
+ * tools/tcltk-man2html.tcl (make-man-pages): [Patch 557486]: Apply
+ last remaining meaningful part of this patch, a clean up of some
+ closing tags.
- * generic/tclExecute.c: Replaced a few direct stack accesses
- with the POP_OBJECT() macro [Bug 507181] (Don Porter).
+2009-06-13 Don Porter <dgp@users.sourceforge.net>
-2002-02-27 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCompile.c: [Bug 2802881]: The value stashed in
+ * generic/tclProc.c: iPtr->compiledProcPtr when compiling a proc
+ * tests/execute.test: survives too long. We only need it there long
+ enough for the right TclInitCompileEnv() call to re-stash it into
+ envPtr->procPtr. Once that is done, the CompileEnv controls. If we
+ let the value of iPtr->compiledProcPtr linger, though, then any other
+ bytecode compile operation that takes place will also have its
+ CompileEnv initialized with it, and that's not correct. The value is
+ meant to control the compile of the proc body only, not other compile
+ tasks that happen along. Thanks to Carlos Tasada for discovering and
+ reporting the problem.
- * doc/GetIndex.3:
- * generic/tcl.decls (Tcl_GetIndexFromObjStruct):
- * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Revised the
- prototype of the Tcl_GetIndexFromObjStruct to take its struct
- table as a (CONST VOID *) argument, better describing what it is,
- maintaining source compatibility, and adding CONST correctness
- according to TIP 27. Thanks to Joe English for an elegant
- solution. [Bug 520304]
+2009-06-10 Don Porter <dgp@users.sourceforge.net>
- * generic/tclDecls.h: make genstubs
+ * generic/tclStringObj.c: [Bug 2801413]: Revised [format] to not
+ overflow the integer calculations computing the length of the %ll
+ formats of really big integers. Also added protections so that
+ [format]s that would produce results overflowing the maximum string
+ length of Tcl values throw a normal Tcl error instead of a panic.
- * generic/tclMain.c (Tcl_Main,StdinProc): Corrected some reference
- count management errors on the interactive command Tcl_Obj found by
- Purify. Thanks to Jeff Hobbs for the report and assistance.
+ * generic/tclStringObj.c: [Bug 2803109]: Corrected failures to
+ deal with the "pure unicode" representation of an empty string.
+ Thanks to Julian Noble for reporting the problem.
-2002-02-27 Jeff Hobbs <jeffh@ActiveState.com>
+2006-06-09 Kevin B. Kenny <kennykb@acm.org>
- * generic/tclBasic.c (Tcl_EvalTokensStandard): corrected mem leak
- in error case.
+ * generic/tclGetDate.y: Fixed a thread safety bug in the generated
+ * library/clock.tcl: Bison parser (needed a %pure-parser
+ * tests/clock.test: declaration to avoid static variables).
+ Discovered that the %pure-parser declaration
+ allowed for returning the Bison error message
+ to the Tcl caller in the event of a syntax
+ error, so did so.
+ * generic/tclDate.c: bison 2.3
- * generic/tclTest.c (TestStatProc[123]): correct harmless UMRs.
+2006-06-08 Kevin B. Kenny <kennykb@acm.org>
- * generic/tclLink.c (Tcl_LinkVar): correct mem leak in error case.
+ * library/tzdata/Asia/Dhaka: New DST rule for Bangladesh. (Olson's
+ tzdata2009i.)
-2002-02-27 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2009-06-08 Donal K. Fellows <dkf@users.sf.net>
- * tests/socket.test (2.7): Accepted and applied patch for Tcl SF
- bug #523470 provided by Don Porter <dgp@users.sourceforge.net>
- to avoid timing problems in that test.
+ * doc/copy.n: Fix error in example spotted by Venkat Iyer.
- * unix/tclUnixChan.c (TclpOpenFileChannel): Added code to regonize
- "/dev/tty" (by name) and to not handle it as tty / serial
- line. This is the controlling terminal and is special. Setting
- it into raw mode as is done for other tty's is a bad idea. This
- is a hackish fix for expect SGF Bug #520624. The fix has
- limitation: Tcl_MakeFileChannel handles tty's specially too, but
- is unable to recognize /dev/tty as it only gets a file
- descriptor, and no name for it.
+2009-06-02 Don Porter <dgp@users.sourceforge.net>
-2002-02-26 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclExecute.c: Replace dynamically-initialized table with a
+ table of static constants in the lookup table for exponent operator
+ computations that fit in a 64 bit integer result.
- * generic/tclCmdAH.c (StoreStatData): corrected mem leak.
+ * generic/tclExecute.c: [Bug 2798543]: Corrected implementations and
+ selection logic of the INST_EXPON instruction.
- * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): prevent obj leak in
- remedial regsub case.
+2009-06-01 Don Porter <dgp@users.sourceforge.net>
- * generic/tclFileName.c (Tcl_TranslateFileName): decr refcount for
- error case to prevent mem leak.
+ * tests/expr.test: [Bug 2798543]: Added many tests demonstrating
+ the broken cases.
- * generic/tclVar.c (Tcl_ArrayObjCmd): removed extra obj allocation.
+009-05-30 Kevin B. Kenny <kennykb@acm.org>
- * unix/tclUnixSock.c (Tcl_GetHostName): added an extra
- gethostbyname check to guard against failure with truncated
- names returned by uname.
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/Asia/Amman: Olson's tzdata2009h.
- * unix/configure:
- * unix/tcl.m4 (SC_SERIAL_PORT): added sys/modem.h check and defined
- _XOPEN_SOURCE_EXTENDED for HP-11 to get updated header decls.
+2009-05-29 Andreas Kupries <andreask@activestate.com>
- * unix/tclUnixChan.c: added Unix implementation of TIP #35, serial
- port support. [Patch #438509] (schroedter)
+ * library/platform/platform.tcl: Fixed handling of cpu ia64,
+ * library/platform/pkgIndex.tcl: taking ia64_32 into account
+ * unix/Makefile.in: now. Bumped version to 1.0.5. Updated the
+ * win/Makefile.in: installation commands.
-2002-02-26 Miguel Sofer <msofer@users.sourceforge.net>
+2009-05-26 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
- * generic/tclCmpCmds.c: (bugfix to the bugfix, hopefully the last)
- Bugfix to the new [for] compiling code: was setting a
- exceptArray parameter using another param which wasn't yet
- initialised, thus filling it with noise.
+ * doc/expr.n: Fixed documentation of the right-associativity of
+ the ** operator. (spotted by kbk)
-2002-02-25 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2009-05-14 Donal K. Fellows <dkf@users.sf.net>
- * mac/tclMacSock.c (TcpGetOptionProc): Changed to recognize the
- option "-error". Essentially ignores the option, always
- returning an empty string.
+ * generic/tclOOInfo.c (InfoObjectNsCmd): Added introspection mechanism
+ for finding out what an object's namespace is. Experience suggests
+ that it is just too useful to be able to do without it.
-2002-02-25 Jeff Hobbs <jeffh@ActiveState.com>
+2009-05-12 Donal K. Fellows <dkf@users.sf.net>
- * doc/Alloc.3:
- * doc/LinkVar.3:
- * doc/ObjectType.3:
- * doc/PkgRequire.3:
- * doc/Preserve.3:
- * doc/TCL_MEM_DEBUG.3: Updated documentation to describe the ckalloc,
- ckfree, ckrealloc, attemptckalloc, and attemptckrealloc macros, and
- to accurately describe when and how they are used. [Bug #497459] (dgp)
+ * doc/vwait.n: Added more words to make it clear just how bad it is to
+ nest [vwait]s.
- * generic/tclHash.c (AllocArrayEntry, AllocStringEntry):
- Before invoking ckalloc when creating a Tcl_HashEntry,
- check that the amount of memory being allocated is
- at least as large as sizeof(Tcl_HashEntry). The previous
- code was allocating memory regions that were one
- or two bytes short. [Bug #521950] (dejong)
+ * compat/mkstemp.c: Add more headers to make this file build on IRIX
+ 6.5. Thanks to Larry McVoy for this.
-2002-02-25 Miguel Sofer <msofer@users.sourceforge.net>
+2009-05-08 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclBasic.c (Tcl_EvalEx): avoiding a buffer overrun
- reported by Joe English, and restoring tcl7.6 behaviour for
- [subst]: badly terminated nested scripts will raise an error
- and not be evaluated. [Bug #495207]
+ * generic/tclOO.c (TclNRNewObjectInstance): [Bug 2414858]: Add a
+ * generic/tclBasic.c (TclPushTailcallPoint): marker to the stack of
+ NRE callbacks at the right point so that tailcall works correctly in a
+ constructor.
-2002-02-25 Don Porter <dgp@users.sourceforge.net>
+ * tests/exec.test (cat): [Bug 2788468]: Adjust the scripted version of
+ cat so that it does not perform transformations on the data it is
+ working with, making it more like the standard Unix 'cat' program.
- * unix/tclUnixPort.h: corrected strtoll prototype mismatch on Tru64.
- * compat/strtod.c (strtod): simplified #includes
- * compat/strtol.c (strtol): gather result in a long before returning
- as a long: necessary on platforms where sizeof(int) != sizeof(long).
+2009-05-07 Miguel Sofer <msofer@users.sf.net>
-2002-02-25 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclObj.c (Tcl_GetCommandFromObj): [Bug 2785893]: Ensure that
+ a command in a deleted namespace can't be found through a cached name.
- * unix/tclLoadDyld.c: updated to use Mac OS X 10.1 dyld APIs that
- have more libdl-like semantics. (bug #514392)
+ * generic/tclBasic.c: Let coroutines start with a much smaller
+ * generic/tclCompile.h: stack: 200 words (previously was 2000, the
+ * generic/tclExecute.c: same as interps).
-2002-02-25 Miguel Sofer <msofer@users.sourceforge.net>
+2009-05-07 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclCompCmds: fixing a bug in patch dated 2002-02-22, in
- the code for [for] and [while]. Under certain conditions, for long
- bodies, the exception range parameters were badly computed. Tests
- forthcoming: I still can't reproduce the conditions in the
- testsuite (!), although the bug (with assorted segfault or panic!)
- can be triggered from the console or with the new parse.bench in
- tclbench.
-
-2002-02-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * tests/env.test (printenvScript, env-4.3, env-4.5): [Bug 1513659]:
+ * tests/exec.test (exec-2.6): These tests had subtle dependencies on
+ being on platforms that were either ISO 8859-1 or UTF-8. Stabilized
+ the results by forcing the encoding.
- * compat/strtoul.c, compat/strtol.c, compat/strtod.c: Added UCHAR,
- CONST and #includes to clean up GCC output.
+2009-05-06 Don Porter <dgp@users.sourceforge.net>
-2002-02-23 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclCmdMZ.c: [Bug 2582327]: Improve overflow error message
+ from [string repeat].
- * compat/strtoull.c (strtoull):
- * compat/strtoll.c (strtoll):
- * compat/strtoul.c (strtoul): Fixed failure to handle leading
- sign symbols '+' and '-' and '0X' and raise overflow errors.
- [Bug 440916] Also corrects prototype and errno problems.
+ * tests/interp.test: interp-20.50 test for Bug 2486550.
-2002-02-23 Mo DeJong <mdejong@users.sourceforge.net>
+2009-05-04 Donal K. Fellows <dkf@users.sf.net>
- * configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Link with -n32
- instead of -32 when building on IRIX64-6.* system.
- [Tcl bug 521707]
+ * generic/tclOO.c (InitFoundation, AllocObject, AllocClass):
+ * generic/tclOODefineCmds.c (InitDefineContext): Make sure that when
+ support namespaces are deleted, nothing bad can subsequently happen.
+ Issue spotted by Don Porter.
-2002-02-22 Don Porter <dgp@users.sourceforge.net>
+2009-05-03 Donal K. Fellows <dkf@users.sf.net>
- * generic/tclInt.h:
- * generic/tclObj.c: renamed global variable emptyString ->
- tclEmptyString because it is no longer static.
- * generic/tclPkg.c: Fix for panic when library is loaded on a
- platform without backlinking without proper use of stubs. [Bug 476537]
+ * doc/Tcl.n: [Bug 2538432]: Clarified exact treatment of ${arr(idx)}
+ form of variable substitution. This is not a change of behavior, just
+ an improved description of the current situation.
-2002-02-22 Jeff Hobbs <jeffh@ActiveState.com>
+2009-04-30 Miguel Sofer <msofer@users.sf.net>
- * tests/regexpComp.test: updated regexp-11.[1-4] to match changes
- in regexp.test for new regsub syntax
+ * generic/tclBasic.c (TclObjInvoke): [Bug 2486550]: Make sure that a
+ null objProc is not used, use Tcl_NRCallObjProc instead.
- * unix/configure:
- * unix/tcl.m4: added --enable-64bit support for AIX-4 (using -q64
- flag) when using IBM's xlc compiler.
+2009-05-01 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/safe.test: updated safe-8.5 and safe-8.7
- * library/safe.tcl (CheckFileName): removed the limit on
- sourceable file names (was only *.tcl or tclIndex files with no
- more than one dot and 14 chars). There is enough internal
- protection in a safe interpreter already. Fixes [Tk Bug #521560].
+ * win/configure.in Fix 64-bit detection for zlib on Win64
+ * win/configure (regenerated)
-2002-02-22 Miguel Sofer <msofer@users.sourceforge.net>
+2009-04-28 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclCompCmds: [FR 465811]. Optimising [if], [for] and
- [while] for constant conditions; in addition, [for] and [while]
- are now compiled with the "loop rotation" optimisation (thanks to
- Kevin Kenny).
+ * unix/tcl.m4, unix/configure (SC_CONFIG_CFLAGS): harden the check to
+ add _r to CC on AIX with threads.
-2002-02-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-04-27 Donal K. Fellows <dkf@users.sf.net>
- --- TIP#76 CHANGES ---
- * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): Final-argument-less
- [regsub] returns the modified string.
- * doc/regsub.n: Updated docs.
- * tests/regexp.test: Updated and added tests.
+ * doc/concat.n (EXAMPLES): [Bug 2780680]: Rewrote so that the spacing
+ of result messages is correct. (The exact way they were wrong was
+ different when rendered through groff or as HTML, but it was still
+ wrong both ways.)
- * compat/strtoll.c (strtoll):
- * compat/strtoull.c (strtoull):
- * unix/tclUnixPort.h:
- * win/tclWinPort.h: Const-ing 64-bit compatability 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.
+2009-04-27 Jan Nijtmans <nijtmans@users.sf.net>
-2002-02-21 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclIndexObj.c: Reset internal INTERP_ALTERNATE_WRONG_ARGS
+ * generic/tclIOCmd.c: flag inside the Tcl_WrongNumArgs function,
+ so the caller no longer has to do the reset.
- * win/mkd.bat (removed):
- * win/coffbase.txt (new):
- * win/makefile.bc:
- * win/makefile.vc: Changed the 'setup' target to stop using
- the mkd.bat file and just make the directory right in the rule.
- Same change to makefile.bc. configure.in nor Makefile.in use
- it.
+2009-04-24 Stuart Cassoff <stwo@users.sf.net>
- coffbase.txt will be the master list for our "prefered base
- addresses" set by the linker. This should improve load-time
- (NT only) by avoiding relocations. Submissions to the list
- by extension authors are encouraged.
+ * unix/Makefile.in: [Patch 2769530]: Don't chmod/exec installManPage.
- Added a 'tidy' target to compliment 'clean' and 'hose' to remove
- just the outputs. Also removed the $(winlibs) macro as it wasn't
- being used.
+2009-04-19 Pat Thoyts <patthoyts@users.sourceforge.net>
- Stuff left to do:
- 1) get the winhelp target to stop building in the tools/
- directory.
- 2) stop using rmd.bat
- 3) add more dependacy rules.
+ * library/http/http.tcl: [Bug 2715421]: Removed spurious newline added
+ * tests/http11.test: after POST and added tests to detect excess
+ * tests/httpd11.tcl: bytes being POSTed.
+ * library/http/pkgIndex.tcl:
+ * makefiles: package version now 2.8.1
- * win/tclAppInit.c: Reverted back to -r1.6, as the header file
- change to tclPort.h won't allow for easy embedded support
- outside of the source dist. Thanks to Don Porter for pointing
- this out to me.
+2009-04-15 Donal K. Fellows <dkf@users.sf.net>
-2002-02-21 David Gravereaux <davygrvy@pobox.com>
+ * doc/chan.n, doc/close.n: Tidy up documentation of TIP #332.
- * win/makefile.vc:
- * win/rules.vc: Added a new "loimpact" option that sets the
- -ws:aggressive linker option. Off by default. It's said to
- keep the heap use low at the expense of alloc speed.
+2009-04-14 Kevin B. Kenny <kennykb@acm.org>
- * win/tclAppInit.c: Changed #include "tcl.h" to be tclPort.h to
- remove the raw windows.h include. tclPort.h brings in windows.h
- already and lessens the pre-compiled-header mush and the randomly
- useless #pragma comment (lib,...) references throughout the big
- windows.h tree (as observed at high linker warning levels).
+ * library/tzdata/Asia/Karachi: Updated rules for Pakistan Summer
+ Time (Olson's tzdata2009f)
-2002-02-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-04-11 Donal K. Fellows <dkf@users.sf.net>
- * generic/tcl.h: Better guessing of LP64/ILP32 architecture, but
- now sensitive to presence of (suitable) <limits.h>
+ * generic/tclOOMethod.c (InvokeForwardMethod): Clarify the resolution
+ behaviour of the name of the command that is forwarded to: it's now
+ resolved using the object's namespace as context, which is much more
+ useful than the previous (somewhat random) behaviour of using the
+ caller's current namespace.
-2002-02-20 Don Porter <dgp@users.sourceforge.net>
+2009-04-10 Pat Thoyts <patthoyts@users.sourceforge.net>
- * generic/tcl.decls (Tcl_RegExpRange,Tcl_GetIndexFromObjStruct):
- Overlooked a few source incompatibilities. Now using CONST84.
- * generic/tclDecls.h: make genstubs
- * generic/tcl.h (Tcl_CmdObjTraceProc): silence warning from Sun
- Workshop compiler.
+ * library/http/http.tcl: Improved HTTP/1.1 support and added
+ * library/http/pkgIndex.tcl: specific HTTP/1.1 testing to ensure
+ * tests/http11.test: we handle chunked+gzip for the various
+ * tests/httpd11.test: modes (normal, -channel and -handler)
+ * makefiles: package version set to 2.8.0
-2002-02-20 David Gravereaux <davygrvy@pobox.com>
+2009-04-10 Daniel Steffen <das@users.sourceforge.net>
- * win/buildall.vc.bat:
- * win/makefile.vc:
- * win/rules.vc: General clean-ups. Added compiler and linker tests
- for a) the pentium 0x0F errata, b) optimizing (not all have this),
- and c) linker v6 section alignment confusion. All these are tested
- first to make sure any D4002 or LNK1117 warnings aren't displayed.
- The pentium 0x0F errata is a recommended switch. The v5 linker's
- section alignment default is 512, but the v6 linker was changed
- to 4096 in an attempt to speed loading on Win98. I changed the
- default to always be 512 across both linkers, unless linking
- statically, then 4096 is used for the claimed speed effect. Using
- a 512 alignment saves 12k bytes of dead space in the DLL.
+ * unix/tclUnixChan.c: TclUnixWaitForFile(): use FD_* macros
+ * macosx/tclMacOSXNotify.c: to manipulate select masks (Cassoff).
+ [FRQ 1960647] [Bug 3486554]
- Added IA64 B-stepping errata switch when the compiler supports it.
+ * unix/tclLoadDyld.c: Use RTLD_GLOBAL instead of RTLD_LOCAL.
+ [Bug 1961211]
- Added profiling to $(lflags) when requested and also removed the
- explict -entry option as the default works fine as is.
+ * macosx/tclMacOSXNotify.c: revise CoreFoundation notifier to allow
+ embedding into applications that
+ already have a CFRunLoop running and
+ want to run the tcl event loop via
+ Tcl_ServiceModeHook(TCL_SERVICE_ALL).
- Removed win/tclWinInit.c from the special case section to let it
- use the common implicit rule as the $(EXTFLAGS) macro it had was
- never referenced anywhere.
+ * macosx/tclMacOSXNotify.c: add CFRunLoop based Tcl_Sleep() and
+ * unix/tclUnixChan.c: TclUnixWaitForFile() implementations
+ * unix/tclUnixEvent.c: and disable select() based ones in
+ CoreFoundation builds.
-2002-02-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/tclUnixNotify.c: simplify, sync with tclMacOSXNotify.c.
- * generic/tcl.h: Added code to guess the correct settings for
- TCL_WIDE_INT_IS_LONG and TCL_WIDE_INT_TYPE when configure doesn't
- tell us them, as can happen with extensions.
+ * generic/tclInt.decls: add TclMacOSXNotifierAddRunLoopMode()
+ * generic/tclIntPlatDecls.h: internal API, regen.
+ * generic/tclStubInit.c:
-2002-02-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * unix/configure.in (Darwin): use Darwin SUSv3 extensions if
+ available; remove /Network locations
+ from default tcl package search path
+ (NFS mounted locations and thus slow).
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
- * doc/format.n: Updated docs to list the specification.
- * generic/tclCmdAH.c (Tcl_FormatObjCmd): Made behaviour on 64-bit
- platforms correctly meet the specification, that %d works with the
- native word-sized integer, instead of trying to guess (wrongly)
- from the value being passed.
+ * macosx/tclMacOSXBundle.c: on Mac OS X 10.4 and later, replace
+ deprecated NSModule API by dlfcn API.
-2002-02-19 Don Porter <dgp@users.sourceforge.net>
+2009-04-10 Donal K. Fellows <dkf@users.sf.net>
- * changes: First draft of updated changes for 8.4a4 release.
+ * doc/StringObj.3: [Bug 2089279]: Corrected example so that it works
+ on 64-bit machines as well.
-2002-02-15 Jeff Hobbs <jeffh@ActiveState.com>
+2009-04-10 Pat Thoyts <patthoyts@users.sourceforge.net>
- * unix/tclUnixPort.h: add strtoll/strtoull declarations for
- platforms that do not define them.
+ * tests/http.test: [Bug 26245326]: Added specific check for problem
+ * tests/httpd: (return incomplete HTTP response header).
- * generic/tclIndexObj.c (STRING_AT): removed ptrdiff_t cast and
- use of VOID* in default case (GNU-ism).
+2009-04-08 Kevin B. Kenny <kennykb@acm.org>
-2002-02-15 Kevin Kenny <kennykb@acm.org>
+ * tools/tclZIC.tcl: Always emit files with Unix line termination.
+ * library/tzdata: Olson's tzdata2009e
- * compat/strtoll.c:
- * compat/strtoul.c:
- * compat/strtoull.c:
- * generic/tclIOUtil.c:
- * generic/tclPosixStr.c:
- * generic/tclTest.c:
- * generic/tclTestObj.c:
- * tests/get.test:
- * win/Makefile.vc: Further tweaks to the TIP 72 patch to make it
- compile under VC++.
-
-2002-02-15 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * tclExecute.c:
- * tclIOGT.c:
- * tclIndexObj.c: Touchups to the TIP 72 patch to make it
- compileable under Windows again. The changes are not complete,
- there is one nasty regarding _stati64
-
-2002-02-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
-
- +----------------------+
- | TIP #72 IMPLEMENTED. |
- +----------------------+
-
- 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:
-
- * generic/tcl.h: New types.
- * generic/tcl.decls: New public functions.
- * generic/tclExecute.c: 64-bit aware bytecode engine.
- * generic/tclBinary.c: 64-bit handling in [binary] command.
- * generic/tclScan.c: 64-bit handling in [scan] command.
- * generic/tclCmdAH.c: 64-bit handling in [file] and [format]
+2009-04-09 Don Porter <dgp@users.sourceforge.net>
+
+ * library/http/http.tcl: [Bug 26245326]: Handle incomplete
+ lines in the "connecting" state. Thanks to Sergei Golovan.
+
+2009-04-08 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Extended the darwin sections to add
+ * library/platform/pkgIndex.tcl: a kernel version number to the
+ * unix/Makefile.in: identifier for anything from Leopard (10.5) on up.
+ * win/Makefile.in: Extended patterns for same. Extended cpu
+ * doc/platform.n: recognition for 64bit Tcl running on a 32bit kernel
+ on a 64bit processor (By Daniel Steffen). Bumped version to 1.0.4.
+ Updated Makefiles.
+
+2009-04-08 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: [Bug 2570363]: Converted [eval]s (some
+ * library/tcltest/pkgIndex.tcl: unsafe!) to {*} in tcltest package.
+ * unix/Makefile.in: => tcltest 2.3.1
+ * win/Makefile.in:
+
+2009-04-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Correction so that value of
+ TCL_GROWTH_MIN_ALLOC is everywhere expressed in bytes as comment
+ claims.
+
+2009-04-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/vwait.n: [Bug 1910136]: Extend description and examples to make
+ it clearer just how this command interprets variable names.
+
+2009-03-30 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Alloc.3: [Bug 2556263]: Size argument is "unsigned int".
+
+2009-03-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c (TclPathPart): [Bug 2710920]: TclPathPart()
+ * tests/fileName.test: was computing the wrong results for both [file
+ dirname] and [file tail] on "path" arguments with the PATHFLAGS != 0
+ intrep and with an empty string for the "joined-on" part.
+
+2009-03-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/tclsh.1: Bring doc and tools in line with
+ * tools/installData.tcl: http://wiki.tcl.tk/812
+ * tools/str2c
+ * tools/tcltk-man2html.tcl
+
+2009-03-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/coroutine.n: [Bug 2152285]: Added basic documentation for the
+ coroutine and yield commands.
+
+2009-03-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOBasic.c (TclOOSelfObjCmd): [Bug 2704302]: Make 'self
+ class' better defined in the context of objects that change class.
+
+ * generic/tclVar.c (Tcl_UpvarObjCmd): [Bug 2673163] (ferrieux)
+ * generic/tclProc.c (TclObjGetFrame): Make the upvar command more able
+ to handle its officially documented syntax.
+
+2009-03-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: [Bug 2502037]: NR-enable the handling of unknown
commands.
- * generic/tclBasic.c: New "wordSize" entry in ::tcl_platform.
- * generic/tclFCmd.c: Large-file support (with many consequences.)
- * generic/tclIO.c: Large-file support (with many consequences.)
- * compat/strtoll.c, compat/strtoull.c: New support functions.
- * unix/tcl.m4, unix/configure: 64-bit support and greatly enhanced
- cacheing.
-
- Most other changes, including all those in doc/* and test/* as
- well as the majority in the platform directories, follow on from
- these.
-
- Also coming out of the woodwork:
- * generic/tclIndex.c: Better support for Cray PVP.
- * win/tclWinMtherr.c: Better Borland support.
-
- Note that, in a number of places through the Unix part of the
- platform support, there are Tcl_Platform* references. These are
- expanded into the correct way to call that particular underlying
- function, i.e. with or without a '64' suffix, and should be used
- by people working on the core in preference to the API functions
- they overlay so that the code remains portable depending on the
- presence or absence of 64-bit support on the underlying platform.
-
- ***POTENTIAL INCOMPATIBILITY***: Extracted from the TIP
-
- SUMMARY OF INCOMPATIBILITIES AND FIXES
- ======================================
-
- The behaviour of expressions containing constants that appear
- positive but which have a negative internal representation will
- change, as these will now usually be interpreted as wide
- integers. This is always fixable by replacing the constant with
- int(constant).
-
- Extensions creating new channel types will need to be altered as
- different types are now in use in those areas. The change to the
- declaration of Tcl_FSStat and Tcl_FSLstat (which are the new
- preferred API in any case) are less serious as no non-alpha
- releases have been made yet with those API functions.
-
- Scripts that are lax about the use of the l modifier in format and
- scan will probably need to be rewritten. This should be very
- uncommon though as previously it had absolutely no effect.
-
- Extensions that create new math functions that take more than one
- argument will need to be recompiled (the size of Tcl_Value
- changes), and functions that accept arguments of any type
- (TCL_EITHER) will need to be rewritten to handle wide integer
- values. (I do not expect this to affect many extensions at all.)
-
-2002-02-14 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * generic/tclIOCmd.c (Tcl_GetsObjCmd): Trivial fix for bug
- #517503, a memory leak reported by Miguel Sofer
- <msofer@users.sourceforge.net>. The leak happens if an error
- occurs for "set var [gets $chan]" and leak one empty object.
-
-2002-02-12 David Gravereaux <davygrvy@pobox.com>
-
- * djgpp/ (new directory)
- * djgpp/Makefile (new):
- * unix/tclAppInit.c:
- * unix/tclMtherr.c:
- * unix/tclUnixFCmd.c:
- * unix/tclUnixFile.c:
- * unix/tclUnixInit.c:
- * unix/tclUnixPort.h: Early stage of DJGPP support for building
- Tcl on DOS. Dynamic loading isn't working, yet. Requires watt32
- for the TCP/IP stack. No autoconf, yet. Barely tested, but
- makes a working exe that runs Tcl in protected-mode, flat memory.
- [exec] and pipes will need the most work as multi-tasking on DOS
- has to be carefully.
-
-2002-02-10 Kevin Kenny <kennykb@acm.org>
-
- * doc/CrtObjCmd.3:
- * doc/CrtTrace.3:
- * generic/tcl.decls:
+
+2009-03-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Fixed "leaks" in aliases, imports and
+ * generic/tclInt.h: ensembles. Only remaining known leak is in
+ * generic/tclInterp.c: ensemble unknown dispatch (as it not
+ * generic/tclNamesp.c: NR-enabled)
+ * tests/tailcall.test:
+
+ * tclInt.h: comments
+
+ * tests/tailcall.test: Added tests to show that [tailcall] does not
+ currently always execute in constant space: interp-alias, ns-imports
+ and ensembles "leak" as of this commit.
+
+ * tests/nre.test: [foreach] has been NR-enabled for a while, the test
+ was marked 'knownBug': unmark it.
+
+ * generic/tclBasic.c: Fix for (among others) [Bug 2699087]
+ * generic/tclCmdAH.c: Tailcalls now perform properly even from
+ * generic/tclExecute.c: within [eval]ed scripts.
+ * generic/tclInt.h: More tests missing, as well as proper
+ exploration and testing of the interaction with "redirectors" like
+ interp-alias (suspect that it does not happen in constant space)
+ and pure-eval commands.
+
+ * generic/tclExecute.c: Proper fix for [Bug 2415422]. Reenabled
+ * tests/nre.test: the failing assertion that was disabled on
+ 2008-12-18: the assertion is correct, the fault was in the
+ management of expansions.
+
+ * generic/tclExecute.c: Fix both test and code for tailcall
+ * tests/tailcall.test: from within a compiled [eval] body.
+
+ * tests/tailcall.test: Slightly improved tests
+
+2009-03-20 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/stringObj.test: [Bug 2597185]: Test stringObj-6.9
+ checks that Tcl_AppendStringsToObj() no longer crashes when operating
+ on a pure unicode value.
+
+ * generic/tclExecute.c (INST_CONCAT1): [Bug 2669109]: Panic when
+ appends overflow the max length of a Tcl value.
+
+2009-03-19 Miguel Sofer <msofer@users.sf.net>
+
* generic/tcl.h:
- * generic/tclBasic.c:
* generic/tclInt.h:
- * generic/tclTest.c:
- * tests/basic.test: Added Tcl_CreateObjTrace,
- Tcl_GetCommandInfoFromToken and Tcl_SetCommandInfoFromToken.
- (TIPs #32 and #79.)
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclNamesp.c (Tcl_PopCallFrame): Rewritten tailcall
+ implementation, ::unsupported::atProcExit is (temporarily?) gone. The
+ new approach is much simpler, and also closer to being correct. This
+ commit fixes [Bug 2649975] and [Bug 2695587].
- * generic/tclDecls.h:
- * generic/tclStubInit.c: Regenerated Stubs tables.
-
-2002-02-08 Jeff Hobbs <jeffh@ActiveState.com>
+ * tests/coroutine.test: Moved the tests to their own files,
+ * tests/tailcall.test: removed the unsupported.test. Added
+ * tests/unsupported.test: tests for the fixed bugs.
- * unix/configure:
- * unix/tcl.m4: added -pthread for FreeBSD to EXTRA_CFLAGS and
- LDFLAGS. Also triggered nodots only for FreeBSD-3.
- Added AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) for Solaris.
+2009-03-19 Donal K. Fellows <dkf@users.sf.net>
- * unix/tclUnixPort.h:
- * unix/tclUnixThrd.c: added thread-safe versions of readdir,
- localtime, gmtime and inet_ntoa for threaded build. (jgdavidson)
+ * doc/tailcall.n: Added documentation for tailcall command.
- * generic/tclScan.c (Tcl_ScanObjCmd): prevented ckfree being
- called on a pointer to NULL.
+2009-03-18 Don Porter <dgp@users.sourceforge.net>
-2002-02-07 Don Porter <dgp@users.sourceforge.net>
+ * win/tclWinFile.c (TclpObjNormalizePath): [Bug 2688184]:
+ Corrected Tcl_Obj leak. Thanks to Joe Mistachkin for detection and
+ patch.
- * doc/DString.3:
- * doc/Encoding.3:
- * doc/GetCwd.3:
- * doc/SplitPath.3:
- * doc/Translate.3:
- * doc/Utf.3:
- * generic/tcl.decls:
- * generic/tcl.h:
- * generic/tclEncoding.c:
- * generic/tclEnv.c:
- * generic/tclFileName.c:
+ * generic/tclVar.c (TclLookupSimpleVar): [Bug 2689307]: Shift
+ all calls to Tcl_SetErrorCode() out of TclLookupSimpleVar and onto its
+ callers, where control with TCL_LEAVE_ERR_MSG flag is more easily
+ handled.
+
+2009-03-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (TryPostBody): [Bug 2688063]: Extract information
+ from list before getting rid of last reference to it.
+
+2009-03-15 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclThread.c: [Bug 2687952]: Modify fix for TSD leak to match
+ * generic/tclThreadStorage.c: Tcl 8.5 (and prior) allocation semantics
+
+2009-03-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclThreadStorage.c (TSDTableDelete): [Bug 2687952]: Ensure
+ * generic/tclThread.c (Tcl_GetThreadData): that structures in
+ Tcl's TSD system are all freed. Use the correct matching allocator.
+
+ * generic/tclPosixStr.c (Tcl_SignalId,Tcl_SignalMsg): [Patch 1513655]:
+ Added support for SIGINFO, which is present on BSD platforms.
+
+2009-03-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tcl.pc.in (new file): [Patch 2243948] (hat0)
+ * unix/configure.in, unix/Makefile.in: Added support for reporting
+ Tcl's public build configuration via the pkg-config system. TEA is
+ still the official mechanism though, in part because pkg-config is not
+ universally supported across all Tcl's supported platforms.
+
+2009-03-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TclNRCoroutineObjCmd): fix Tcl_Obj leak.
+ Diagnosis and fix thanks to GPS.
+
+2009-03-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (Tcl_TryObjCmd, TclNRTryObjCmd): Moved the
+ implementation of [try] from Tcl code into C. Still lacks a bytecode
+ version, but should be better than what was before.
+
+2009-03-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (TclZlibCmd): Checksums are defined to be unsigned
+ 32-bit integers, use Tcl_WideInt to pass to scripts. [Bug 2662434]
+ (ZlibStreamCmd, ChanGetOption): A few other related corrections.
+
+2009-02-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls: [Bug 218977]: Tcl_DbCkfree needs return value
+ * generic/tclCkalloc.c
+ * generic/tclDecls.h: (regenerated)
+ * generic/tclInt.decls: don't use CONST84/CONST86 here
+ * generic/tclCompile.h: don't use CONST86 here, comment fixing.
+ * generic/tclIO.h: don't use CONST86 here, comment fixing.
+ * generic/tclIntDecls.h (regenerated)
+
+2009-02-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c (TclStringMatchObj): [Bug 2637173]: Revised
+ the branching on the strObj->typePtr so that untyped values get
+ converted to the "string" type and pass through the Unicode matcher.
+ [Bug 2613766]: Also added checks to only perform "bytearray"
+ optimization on pure bytearray values.
+
+ * generic/tclCmdMZ.c: Since Tcl_GetCharLength() has its own
+ * generic/tclExecute.c: optimizations for the tclByteArrayType, stop
+ having the callers do them.
+
+2009-02-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/clock.n, doc/fblocked.n, doc/format.n, doc/lsort.n,
+ * doc/pkgMkIndex.n, doc/regsub.n, doc/scan.n, doc/tclvars.n:
+ General minor documentation improvements.
+
+ * library/http/http.tcl (geturl, Eof): Added support for 8.6's built
+ in zlib routines.
+
+2009-02-22 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tests/lrange.test: Revert commits of 2008-07-23. Those were speed
+ * tests/binary.test: tests, that are inherently brittle.
+
+2009-02-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Several revisions to the shimmering
+ patterns between Unicode and UTF string reps. Most notably the
+ call: objPtr = Tcl_NewUnicodeObj(...,0); followed by a loop of calls:
+ Tcl_AppendUnicodeToObj(objPtr, u, n); will now grow and append to
+ the Unicode representation. Before this commit, the sequence would
+ convert each append to UTF and perform the append to the UTF rep.
+ This is puzzling and likely a bug. The performance of [string map]
+ is significantly improved by this change (according to the MAP
+ collection of benchmarks in tclbench). Just in case there was some
+ wisdom in the old ways that I missed, I left in the ability to restore
+ the old patterns with a #define COMPAT 1 at the top of the file.
+
+2009-02-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: [Bug 2571597]: Fixed mistaken logic in
+ * tests/fileName.test: TclFSGetPathType() that assumed (not
+ "absolute") => "relative". This is a false assumption on Windows,
+ where "volumerelative" is another possibility.
+
+2009-02-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Simplify the logic of the
+ Tcl_*SetObjLength() routines.
+
+ * generic/tclStringObj.c: Rewrite GrowStringBuffer() so that it
+ has parallel structure with GrowUnicodeBuffer(). The revision permits
+ allocation attempts to continue all the way up to failure, with no
+ gap. It also directly manipulates the String and Tcl_Obj internals
+ instead of inefficiently operating via Tcl_*SetObjLength() with all of
+ its extra protections and underdocumented special cases.
+
+ * generic/tclStringObj.c: Another round of simplification on
+ the allocation macros.
+
+2009-02-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tcl.m4, win/configure: Check if cl groks _WIN64 already to
+ avoid CC manipulation that can screw up later configure checks.
+ Use 'd'ebug runtime in 64-bit builds.
+
+2009-02-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Pare back the length of the unicode
+ array in a non-extended String struct to one Tcl_UniChar, meant to
+ hold the terminating NUL character. Non-empty unicode strings are
+ then stored by extending the String struct by stringPtr->maxChars
+ additional slots in that array with sizeof(Tcl_UniChar) bytes per
+ slot. This revision makes the allocation macros much simpler.
+
+ * generic/tclStringObj.c: Factor out common GrowUnicodeBuffer()
+ and solve overflow and growth algorithm fallbacks in it.
+
+ * generic/tclStringObj.c: Factor out common GrowStringBuffer().
+
+ * generic/tclStringObj.c: Convert Tcl_AppendStringsToObj into
+ * tests/stringObj.test: a radically simpler implementation
+ where we just loop over calls to Tcl_AppendToObj. This fixes [Bug
+ 2597185]. It also creates a *** POTENTIAL INCOMPATIBILITY *** in
+ that T_ASTO can now allocate more space than is strictly required,
+ like all the other Tcl_Append* routines. The incompatibility was
+ detected by test stringObj-6.5, which I've updated to reflect the
+ new behavior.
+
+ * generic/tclStringObj.c: Revise buffer growth implementation
+ in ExtendStringRepWithUnicode. Use cheap checks to determine that
+ no reallocation is necessary without cost of computing the precise
+ number of bytes needed. Also make use of the string growth algortihm
+ in the case of repeated appends.
+
+2009-02-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclZlib.c: Hack needed for official zlib1.dll build.
+ * win/configure.in: fix [Feature Request 2605263] use official
+ * win/Makefile.in: zlib build.
+ * win/configure: (regenerated)
+ * compat/zlib/zdll.lib: new files
+ * compat/zlib/zlib1.dll:
+
+ * win/Makefile.in: [Bug 2605232]: tdbc doesn't build when Tcl is
+ compiled with --disable-shared.
+
+2009-02-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: [Bug 2603158]: Added protections from
+ * generic/tclTestObj.c: invalid memory accesses when we append
+ * tests/stringObj.test: (some part of) a Tcl_Obj to itself.
+ Added the appendself and appendself2 subcommands to the
+ [teststringobj] testing command and added tests to the test suite.
+
+ * generic/tclStringObj.c: Factor out duplicate code from
+ Tcl_AppendObjToObj.
+
+ * generic/tclStringObj.c: Replace the 'size_t uallocated' field
+ of the String struct, storing the number of bytes allocated to store
+ the Tcl_UniChar array, with an 'int maxChars' field, storing the
+ number of Tcl_UniChars that may be stored in the allocated space.
+ This reduces memory requirement a small bit, and makes some range
+ checks simpler to code.
+ * generic/tclTestObj.c: Replace the [teststringobj ualloc] testing
+ * tests/stringObj.test: command with [teststringobj maxchars] and
+ update the tests.
+
+ * generic/tclStringObj.c: Removed limitation in
+ Tcl_AppendObjToObj where the char length of the result was only
+ computed if the appended string was all single byte characters.
+ This limitation was in place to dodge a bug in Tcl_GetUniChar.
+ With that bug gone, we can take advantage of always recording the
+ length of append results when we know it.
+
+2009-02-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Revisions so that we avoid creating
+ the strange representation of an empty string with
+ objPtr->bytes == NULL and stringPtr->hasUnicode == 0. Instead in
+ the situations where that was being created, create a traditional
+ two-legged stork representation (objPtr->bytes = tclEmptyStringRep
+ and stringPtr->hasUnicode = 1). In the situations where the strange
+ rep was treated differently, continue to do so by testing
+ stringPtr->numChars == 0 to detect it. These changes make the code
+ more conventional so easier for new maintainers to pick up. Also
+ sets up further simplifications.
+
+ * generic/tclTestObj.c: Revise updates to [teststringobj] so we don't
+ get blocked by MODULE_SCOPE limits.
+
+2009-02-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Rewrites of the routines
+ Tcl_GetCharLength, Tcl_GetUniChar, Tcl_GetUnicodeFromObj,
+ Tcl_GetRange, and TclStringObjReverse to use the new macro, and
+ to more simply and clearly split the cases depending on whether
+ a valid unicode rep is present or needs to be created.
+ New utility routine UnicodeLength(), to compute the length of unicode
+ buffer arguments when no length is passed in, with built-in
+ overflow protection included. Update three callers to use it.
+
+ * generic/tclInt.h: New macro TclNumUtfChars meant to be a faster
+ replacement for a full Tcl_NumUtfChars() call when the string has all
+ single-byte characters.
+
+ * generic/tclStringObj.c: Simplified Tcl_GetCharLength by
+ * generic/tclTestObj.c: removing code that did nothing.
+ Added early returns from Tcl_*SetObjLength when the desired length
+ is already present; adapted test command to the change.
+
+ * generic/tclStringObj.c: Re-implemented AppendUtfToUnicodeRep
+ so that we no longer pass through Tcl_DStrings which have their own
+ sets of problems when lengths overflow the int range. Now AUTUR and
+ FillUnicodeRep share a common core routine.
+
+2009-02-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOODefineCmds.c (TclOOGetDefineCmdContext): Use the
+ correct field in the Interp structure for retrieving the frame to get
+ the context object so that people can extend [oo::define] without deep
+ shenanigans. Bug found by Federico Ferri.
+
+2009-02-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Re-implemented AppendUnicodeToUtfRep
+ so that we no longer pass through Tcl_DStrings which have their own
+ sets of problems when lengths overflow the int range. Now AUTUR and
+ UpdateStringOfString share a common core routine.
+
+ * generic/tclStringObj.c: Changed type of the 'allocated' field
+ * generic/tclTestObj.c: of the String struct (and the
+ TestString counterpart) from size_t to int since only int values are
+ ever stored in it.
+
+2009-02-10 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclEncoding.c: Eliminate some unnessary type casts
+ * generic/tclEvent.c: some internal const decorations
+ * generic/tclExecute.c: spacing
+ * generic/tclIndexObj.c:
+ * generic/tclInterp.c:
+ * generic/tclIO.c:
+ * generic/tclIOCmd.c:
+ * generic/tclIORChan.c:
* generic/tclIOUtil.c:
- * generic/tclUtf.c:
+ * generic/tclListObj.c:
+ * generic/tclLiteral.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclOOBasic.c:
+ * generic/tclPathObj.c:
+ * generic/tclPkg.c:
+ * generic/tclProc.c:
+ * generic/tclRegexp.c:
+ * generic/tclScan.c:
+ * generic/tclStringObj.c:
+ * generic/tclTest.c:
+ * generic/tclTestProcBodyObj.c:
+ * generic/tclThread.c:
+ * generic/tclThreadTest.c:
+ * generic/tclTimer.c:
+ * generic/tclTrace.c:
* generic/tclUtil.c:
- * mac/tclMacInit.c:
- * unix/tclUnixFile.c:
- * unix/tclUnixInit.c:
- * unix/tclUnixPipe.c:
- * win/tclWin32Dll.c:
- * win/tclWinFCmd.c:
- * win/tclWinFile.c:
- * win/tclWinInit.c: Partial TIP 27 rollback. Following routines
- restored to return (char *): Tcl_DStringAppend,
- Tcl_DStringAppendElement, Tcl_JoinPath, Tcl_TranslateFileName,
- Tcl_ExternalToUtfDString, Tcl_UtfToExternalDString,
- Tcl_UniCharToUtfDString, Tcl_GetCwd, Tcl_WinTCharToUtf. Also
- restored Tcl_WinUtfToTChar to return (TCHAR *) and
- Tcl_UtfToUniCharDString to return (Tcl_UniChar *). Modified
- some callers. This change recognizes that Tcl_DStrings are
- de-facto white-box objects.
+ * generic/tclVar.c:
+ * generic/tclStubInit.c: (regenerated)
- * generic/tclDecls.h:
- * generic/tclPlatDecls.h: make genstubs
+2009-02-10 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclCmdMZ.c: corrected use of C++-style comment.
+ * unix/tcl.m4: [Bug 2502365]: Building of head on HPUX is broken when
+ using the native CC.
+ * unix/configure: (autoconf-2.59)
-2002-02-06 Jeff Hobbs <jeffh@ActiveState.com>
+2009-02-10 Don Porter <dgp@users.sourceforge.net>
- * tests/scan.test:
- * generic/tclScan.c (Tcl_ScanObjCmd): corrected scan 0x... %x
- handling that didn't accept the 0x as a prelude to a base 16
- number. [Bug #495213]
+ * generic/tclObj.c (Tcl_GetString): Added comments and validity
+ checks following the call to an UpdateStringProc.
- * generic/tclCompCmds.c (TclCompileRegexpCmd): made early check
- for bad RE to stop checking further.
+ * generic/tclStringObj.c: Reduce code duplication in Tcl_GetUnicode*.
+ Restrict AppendUtfToUtfRep to non-negative length appends.
+ Convert all Tcl_InvalidateStringRep() calls into macros.
+ Simplify Tcl_AttemptSetObjLength by removing unreachable code.
+ Simplify SetStringFromAny() by removing unreachable and duplicate code.
+ Simplify Tcl_SetObjLength by removing unreachable code.
+ Removed handling of (objPtr->bytes != NULL) from UpdateStringOfString,
+ which is only called when objPtr->bytes is NULL.
- * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): added special case to
- search for simple 'string map' style regsub calls.
- Delayed creation of resultPtr object until an initial match is
- made, as the input string object can then be reused for no matches.
- (Tcl_StringObjCmd): optimization improvements to the STR_MAP
- algorithm for zero-length and nocase cases.
+2009-02-09 Jan Nijtmans <nijtmans@users.sf.net>
- * tests/regexp.test:
- * tests/regexpComp.test: extra code coverage tests.
+ * generic/tclCompile.c: [Bug 2555129]: const compiler warning (as
+ error) in tclCompile.c
- * tests/string.test: added 10.18 and 10.19 extra tests.
+2009-02-07 Donal K. Fellows <dkf@users.sf.net>
- * generic/regc_locale.c (casecmp): slight performance improvement.
+ * generic/tclZlib.c (TclZlibCmd): [Bug 2573172]: Ensure that when
+ invalid subcommand name is given, the list of valid subcommands is
+ produced. This gives a better experience when using the command
+ interactively.
-2002-02-05 Don Porter <dgp@users.sourceforge.net>
+2009-02-05 Joe Mistachkin <joe@mistachkin.com>
- * library/http/http.tcl:
- * library/http/pkgIndex.tcl: Corrected use of http::error when
- ::error was intended. Bump to http 2.4.2.
+ * generic/tclInterp.c: [Bug 2544618]: Fix argument checking for
+ [interp cancel].
+ * unix/Makefile.in: Fix build issue with zlib on FreeBSD (and possibly
+ other platforms).
-2002-02-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2009-02-05 Donal K. Fellows <dkf@users.sf.net>
- * unix/tclUnixChan.c (FileOutputProc): Fixed [bug 465765] reported
- by Dale Talcott <daletalcott@users.sourceforge.net>. Avoid
- writing nothing into a file as STREAM based implementations will
- consider this a EOF (if the file is a pipe). Not done in the
- generic layer as this type of writing is actually useful to
- check the state of a socket.
+ * generic/tclCmdMZ.c (StringIndexCmd, StringRangeCmd, StringLenCmd):
+ Simplify the implementation of some commands now that the underlying
+ string API knows more about bytearrays.
- * doc/open.n: Fixed [Bug 511540], added cross-reference to 'pid'
- as the command to use to retrieve the pid of a command pipeline
- created via 'open'.
+ * generic/tclExecute.c (TclExecuteByteCode): [Bug 2568434]: Make sure
+ that INST_CONCAT1 will not lose string reps wrongly.
-2002-02-01 Jeff Hobbs <jeffh@ActiveState.com>
+ * generic/tclStringObj.c (Tcl_AppendObjToObj): Special-case the
+ appending of one bytearray to another, which can be extremely rapid.
+ Part of scheme to address [Bug 1665628] by making the basic string
+ operations more efficient on byte arrays.
+ (Tcl_GetCharLength, Tcl_GetUniChar, Tcl_GetRange): More special casing
+ work for bytearrays.
- * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): handle quirky about case
- earlier to avoid shimmering problem.
+2009-02-04 Don Porter <dgp@users.sourceforge.net>
-2002-02-01 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ * generic/tclStringObj.c: [Bug 2561794]: Added overflow protections to
+ the AppendUtfToUtfRep routine to either avoid invalid arguments and
+ crashes, or to replace them with controlled panics.
- * tests/io.test: io-39.22 split into two tests, one platform
- dependent, the other not. -eofchar is not empty on the windows
- platform.
+ * generic/tclCmdMZ.c: [Bug 2561746]: Prevent crashes due to int
+ overflow of the length of the result of [string repeat].
-2002-02-01 Vince Darley <vincentdarley@users.sourceforge.net>
+2009-02-03 Jan Nijtmans <nijtmans@users.sf.net>
- * generic/tclTest.c: fix to picky windows compiler problem
- with the 'MainLoop' function declaration.
+ * macosx/tclMacOSXFCmd.c: Eliminate some unnessary type casts
+ * unix/tclLoadDyld.c: some internal const decorations
+ * unix/tclUnixCompat.c: spacing
+ * unix/tclUnixFCmd.c
+ * unix/tclUnixFile.c
+ * win/tclWinDde.c
+ * win/tclWinFCmd.c
+ * win/tclWinInit.c
+ * win/tclWinLoad.c
+ * win/tclWinPipe.c
+ * win/tclWinReg.c
+ * win/tclWinTest.c
+ * generic/tclBasic.c
+ * generic/tclBinary.c
+ * generic/tclCmdAH.c
+ * generic/tclCmdIL.c
+ * generic/tclCmdMZ.c
+ * generic/tclCompCmds.c
+ * generic/tclDictObj.c
-2002-01-31 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2009-02-03 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinFCmd.c: TIP 27: Applied patch fixing CONST warnings on
- behalf of Don Porter <dgp@users.sourceforge.net>.
+ * generic/tclObj.c (tclCmdNameType): [Bug 2558422]: Corrected the type
+ of this structure so that extensions that write it (yuk!) will still
+ be able to function correctly.
-2002-01-30 Don Porter <dgp@users.sourceforge.net>
+2009-02-03 Don Porter <dgp@users.sourceforge.net>
- * generic/tcl.decls:
- * generic/tcl.h:
- * generic/tclInt.h: For each interface identified in the TIP 27
- changes below as a POTENTIAL INCOMPATIBILITY, the source of the
- incompatibility has been parameterized so that it can be
- removed. When compiling extension code against the Tcl header
- files, use the compiler flag -DUSE_NON_CONST to remove the
- irresolvable source incompatibilities introduced by the TIP 27
- changes. Resolvable changes are left for extension authors to
- resolve.
- * generic/tclDecls.h: make genstubs
-
-2002-01-30 Vince Darley <vincentdarley@users.sourceforge.net>
-
- * doc/FileSystem.3: added documentation for 3 public
- functions which had been overlooked. Fixes [Bug 507701].
- * unix/mkLinks: make mklinks
-
-2002-01-29 Jeff Hobbs <jeffh@ActiveState.com>
-
- * tests/regexpComp.test:
- * generic/tclCompCmds.c (TclCompileRegexpCmd): enhanced to support
- -nocase and -- options.
-
-2002-01-28 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/tcl.m4 (SC_LOAD_TCLCONFIG):
- * win/tcl.m4 (SC_LOAD_TCLCONFIG): Set TCL_LIB_SPEC,
- TCL_STUB_LIB_SPEC, and TCL_STUB_LIB_PATH to the
- values of TCL_BUILD_LIB_SPEC, TCL_BUILD_STUB_LIB_SPEC,
- and TCL_BUILD_STUB_LIB_PATH when tclConfig.sh is loaded
- from the build directory. A Tcl extension should
- make use of the non-build versions of these variables
- since they will work in both cases. This modification
- was described in TIP 34.
-
-2002-01-28 Jeff Hobbs <jeffh@ActiveState.com>
-
- * win/tclWinReg.c (regConnectRegistryProc,RecursiveDeleteKey)
- (DeleteKey,GetKeyNames,GetType,GetValue,OpenSubKey,SetValue):
- redid the CONSTification as previous changes caused failing tests.
-
- * tests/regexpComp.test (new):
- * generic/tclInt.h:
- * generic/tclBasic.c: added TclCompileRegexpCmd entry
- * generic/tclCompCmds.c (TclCompileStringCmd): corrected to return
- TCL_OUT_LINE_COMPILE instead of TCL_ERROR for parsing errors, so
- it only throws the error for runtime compile, in case the user
- modifies 'string'.
- (TclCompileRegexpCmd): first try at a byte-compiled regexp
- command. It handles static strings and ^$ bounded static strings.
- (TclCompileAppendCmd): made TclPushVarName call always use
- TCL_CREATE_VAR as numWords is always > 2 at that point.
+ * generic/tclStringObj.c (SetUnicodeObj): [Bug 2561488]:
+ Corrected failure of Tcl_SetUnicodeObj() to panic on a shared object.
+ Also factored out common code to reduce duplication.
- * generic/tclExecute.c (TclExecuteByteCode:INST_LIST): correct
- possibly dangerous decr in macro call.
+ * generic/tclObj.c (Tcl_GetStringFromObj): Reduce code duplication.
- * win/tclWinInit.c (TclpFindVariable): CONSTification touch-up
+2009-02-02 Don Porter <dgp@users.sourceforge.net>
- * win/tclWinReg.c (OpenSubKey): corrected bug introduced in
- CONSTification that dropped pointer reference.
+ * generic/tclInterp.c: Reverted the conversion of [interp] into an
+ * tests/interp.test: ensemble. Such conversion is not necessary
+ * tests/nre.test: (or even all that helpful) in the NRE-enabling
+ of [interp invokehidden], and it has other implications -- including
+ significant forkage of the 8.5 and 8.6 implementations -- that are
+ better off avoided if there's no gain.
- * ChangeLog.2000 (new file):
- * ChangeLog: broke changes from 2000 into ChangeLog.2000 to reduce
- size of the main ChangeLog.
+ * generic/tclStringObj.c (STRING_NOMEM): [Bug 2494093]: Add missing
+ cast of NULL to (char *) that upsets some compilers.
-2002-01-28 David Gravereaux <davygrvy@pobox.com>
+ * generic/tclStringObj.c (Tcl_(Attempt)SetObjLength): [Bug 2553906]:
+ Added protections against callers asking for negative lengths. It is
+ likely when this happens that an integer overflow is to blame.
- * generic/tclPlatDecls.h: Added preprocessor logic to force a
- typedef of TCHAR when __STDC__ is defined when using the uncommon
- -Za compiler switch with the microsoft compiler.
+2009-02-01 David Gravereaux <davygrvy@pobox.com>
-2002-01-27 Don Porter <dgp@users.sourceforge.net>
+ * win/makefile.vc: Allow nmake flags such as -a (rebuild all) to pass
+ down to the pkgs targets, too.
- * doc/package.n: Documented global namespace context for script
- evaluation by [package require].
+2009-01-30 Donal K. Fellows <dkf@users.sf.net>
-2002-01-27 Daniel Steffen <das@users.sourceforge.net>
+ * doc/chan.n: [Bug 1216074]: Added another extended example.
- * generic/tclInt.decls:
- * generic/tclIntPlatDecls.h:
- * mac/tclMacChan.c:
- * mac/tclMacFCmd.c:
- * mac/tclMacFile.c:
- * mac/tclMacInit.c:
- * mac/tclMacLoad.c:
- * mac/tclMacResource.c:
- * mac/tclMacSock.c: TIP 27 CONSTification induced changes
-
- * tests/event.test:
- * tests/main.test: added catches/constraints to test that
- use features that don't exist on the mac.
-
-2002-01-25 Mo DeJong <mdejong@users.sourceforge.net>
-
- Make -eofchar and -translation options read only for
- server sockets. [Bug 496733]
-
- * generic/tclIO.c (Tcl_GetChannelOption, Tcl_SetChannelOption):
- Instead of returning nothing for the -translation option
- on a server socket, always return "auto". Return the empty
- string enclosed in quotes for the -eofchar option on
- a server socket. Fixup -eofchar usage message so that
- it matches the implementation.
- * tests/io.test: Add -eofchar tests and -translation tests
- to ensure options are read only on server sockets.
- * tests/socket.test: Update tests to account for -eofchar
- and -translation option changes.
-
-2002-01-25 Don Porter <dgp@users.sourceforge.net>
-
- * compat/strstr.c (strstr):
- * generic/tclCmdAH.c (Tcl_FormatObjCmd):
- * generic/tclCmdIL.c (InfoNameOfExecutableCmd):
- * generic/tclEnv.c (ReplaceString):
- * generic/tclFileName.c (ExtractWinRoot):
- * generic/tclIO.c (FlushChannel,Tcl_BadChannelOption):
- * generic/tclStringObj.c (AppendUnicodeToUtfRep):
- * generic/tclThreadTest.c (TclCreateThread):
- * generic/tclUtf.c (Tcl_UtfPrev):
- * mac/tclMacFCmd.c (TclpObjListVolumes):
- * mac/tclMacResource.c (TclMacRegisterResourceFork,
- BuildResourceForkList):
- * win/tclWinInit.c (AppendEnvironment): Sought out and eliminated
- instances of CONST-casting that are no longer needed after the
- TIP 27 effort.
-
- * Following is [Patch 501006]
- * generic/tclInt.decls (Tcl_AddInterpResolvers, Tcl_Export,
- Tcl_FindNamespace, Tcl_GetInterpResolvers, Tcl_ForgetImport,
- Tcl_Import, Tcl_RemoveInterpResolvers):
- * generic/tclNamesp.c (Tcl_Export, Tcl_Import, Tcl_ForgetImport,
- Tcl_FindNamespace):
- * generic/tclResolve.c (Tcl_AddInterpResolvers,Tcl_GetInterpResolvers,
- Tcl_RemoveInterpResolvers): Updated APIs in generic/tclResolve.c
- and generic/tclNamesp.c according to the guidelines of TIP 27.
- * generic/tclIntDecls.h: make genstubs
-
- * Following is [Patch 505630]
- * doc/AddErrorInfo.3:
- * generic/tcl.decls (Tcl_LogCommandInfo):
- * generic/tclBasic.c (Tcl_LogCommandInfo): Updated interfaces
- of generic/tclBasic.cc according to TIP 27.
- * generic/tclDecls.h: make genstubs
-
- * Following is [Patch 506818]
- * doc/Hash.3:
- * generic/tcl.decls (Tcl_HashStats):
- * generic/tclHash.c (Tcl_HashStats): Updated APIs of generic/tclHash.c
- according to guidelines of TIP 27.
- * generic/tclDecls.h: make genstubs
- * generic/tclVar.c (Tcl_ArrayObjCmd): Updated callers.
-
- * Following is [Patch 506807]
- * doc/ObjectType.3:
- * generic/tcl.decls (Tcl_GetObjType):
- * generic/tclObj.c (Tcl_GetObjType): Updated APIs of generic/tclObj.c
- according to guidelines of TIP 27.
- * generic/tclDecls.h: make genstubs
-
- * Following is [Patch 507304]
- * doc/Encoding.3:
- * generic/tcl.decls (Tcl_WinUtfToTChar,Tcl_WinTCharToUtf):
- * win/tclWin32Dll.c (Tcl_WinUtfToTChar,Tcl_WinTCharToUtf):
- Updated interfaces in win/tclWin32Dll.c according to TIP 27.
- * generic/tclPlatDecls.h: make genstubs
- * generic/tclIOUtil.c (TclpNativeToNormalized):
- * win/tclWinFCmd.c (TclpObjNormalizePath):
- * win/tclWinFile.c (TclpFindExecutable,TclpMatchInDirectory,
- NativeIsExec,NativeStat):
- * win/tclWinLoad.c (TclpLoadFile):
- * win/tclWinPipe.c (TclpOpenFile,ApplicationType):
- * win/tclWinReg.c (regConnectRegistryProc,RecursiveDeleteKey,DeleteKey,
- GetKeyNames,GetType,GetValue,OpenSubKey,SetValue):
- * win/tclWinSerial.c (SerialSetOptionProc): Update callers.
-
- * Following is [Patch 505072]
- * doc/Concat.3:
- * doc/Encoding.3:
- * doc/Filesystem.3:
- * doc/Macintosh.3:
- * doc/OpenFileChnl.3
- * doc/SetResult.3:
- * doc/SetVar.3:
- * doc/SplitList.3:
- * doc/SplitPath.3:
- * doc/Translate.3:
- * generic/tcl.h (Tcl_FSMatchInDirectoryProc):
- * generic/tclInt.h (TclpMatchInDirectory):
- * generic/tcl.decls (Tcl_Concat,Tcl_GetStringResult,Tcl_GetVar,
- Tcl_GetVar2,Tcl_JoinPath,Tcl_Merge,Tcl_OpenCommandChannel,Tcl_SetVar,
- Tcl_SetVar2,Tcl_SplitList,Tcl_SplitPath,Tcl_TranslateFileName,
- Tcl_ExternalToUtfDString,Tcl_GetEncodingName,Tcl_UtfToExternalDString,
- Tcl_GetDefaultEncodingDir,Tcl_SetDefaultEncodingDir,
- Tcl_FSMatchInDirectory,Tcl_MacEvalResource,Tcl_MacFindResource):
- * generic/tclInt.decls (TclCreatePipeline,TclGetEnv,TclpGetCwd,
- TclpCreateProcess):
- * mac/tclMacFile.c (TclpGetCwd):
- * generic/tclEncoding.c (Tcl_GetDefaultEncodingDir,
- Tcl_SetDefaultEncodingDir,Tcl_GetEncodingName,
- Tcl_ExternalToUtfDString,Tcl_UtfToExternalDString, OpenEncodingFile,
- LoadEscapeEncoding):
- * generic/tclFileName.c (DoTildeSubst,Tcl_JoinPath,Tcl_SplitPath,
- Tcl_TranslateFileName):
- * generic/tclIOUtil.c (Tcl_FSMatchInDirectory):
- * generic/tclPipe.c (FileForRedirect,TclCreatePipeline,
- Tcl_OpenCommandChannel):
- * generic/tclResult.c (Tcl_GetStringResult):
- * generic/tclUtil.c (Tcl_Concat,Tcl_SplitList,Tcl_Merge):
- * generic/tclVar.c (Tcl_GetVar,Tcl_GetVar2,Tcl_SetVar,Tcl_SetVar2):
- * mac/tclMacResource.c (Tcl_MacEvalResource,Tcl_MacFindResource):
- Updated interfaces of generic/tclEncoding, generic/tclFilename.c,
- generic/tclIOUtil.c, generic/tclPipe.c, generic/tclResult.c,
- generic/tclUtil.c, generic/tclVar.c and mac/tclMacResource.c according
- to TIP 27. Tcl_TranslateFileName rewritten as wrapper around
- VFS-aware version.
- ***POTENTIAL INCOMPATIBILITY***
- Includes source incompatibilities: argv arguments of Tcl_Concat,
- Tcl_JoinPath, Tcl_OpenCommandChannel, Tcl_Merge; argvPtr arguments of
- Tcl_SplitList and Tcl_SplitPath.
- * generic/tclDecls.h:
- * generic/tclIntDecls.h: make genstubs
-
- * generic/tclCkalloc.c (MemoryCmd):
- * generic/tclClock.c (FormatClock):
- * generic/tclCmdAH.c (Tcl_CaseObjCmd,Tcl_EncodingObjCmd,Tcl_FileObjCmd):
- * generic/tclCmdIL.c (InfoLibraryCmd,InfoPatchLevelCmd,
- InfoTclVersionCmd):
- * generic/tclCompCmds.c (TclCompileForeachCmd):
- * generic/tclCompCmds.h (TclCompileForeachCmd):
- * generic/tclCompile.c (TclFindCompiledLocal):
- * generic/tclEnv.c (TclSetupEnv,TclSetEnv,Tcl_PutEnv,TclGetEnv,
- EnvTraceProc):
- * generic/tclEvent.c (Tcl_BackgroundError):
- * generic/tclIO.c (Tcl_BadChannelOption,Tcl_SetChannelOption):
- * generic/tclIOCmd.c (Tcl_ExecObjCmd,Tcl_OpenObjCmd):
- * generic/tclIOSock.c (TclSockGetPort):
- * generic/tclIOUtil.c (SetFsPathFromAny):
- * generic/tclLink.c (LinkTraceProc):
- * generic/tclMain.c (Tcl_Main):
- * generic/tclNamesp.c (TclTeardownNamespace):
- * generic/tclProc.c (TclCreateProc):
- * generic/tclTest.c (TestregexpObjCmd,TesttranslatefilenameCmd,
- TestchmodCmd,GetTimesCmd,TestsetCmd,TestOpenFileChannelProc1,
- TestOpenFileChannelProc2,TestOpenFileChannelProc3,AsyncHandlerProc,
- TestpanicCmd):
- * generic/tclThreadTest.c (ThreadErrorProc,ThreadEventProc):
- * generic/tclUtil.c (TclPrecTraceProc):
- * mac/tclMacFCmd.c (GetFileSpecs):
- * mac/tclMacFile.c (TclpMatchInDirectory):
- * mac/tclMacInit.c (TclpInitLibraryPath,Tcl_SourceRCFile):
- * mac/tclMacOSA.c (tclOSAStore,tclOSALoad):
- * mac/tclMacResource.c (Tcl_MacEvalResource):
- * unix/tclUnixFCmd.c (TclpObjNormalizePath):
- * unix/tclUnixFile.c (TclpMatchInDirectory,TclpGetUserHome,TclpGetCwd,
- TclpReadLink):
- * unix/tclUnixInit.c (TclpInitLibraryPath,TclpSetVariables,
- Tcl_SourceRCFile):
- * unix/tclUnixPipe.c (TclpOpenFile,TclpCreateTempFile,
- TclpCreateProcess):
- * win/tclWinFile.c (TclpGetCwd,TclpMatchInDirectory):
- * win/tclWinInit.c (TclpInitLibraryPath,Tcl_SourceRCFile,
- TclpSetVariables):
- * win/tclWinPipe.c (TclpCreateProcess): Updated callers.
-
-2002-01-24 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclIOUtil.c (SetFsPathFromAny): Corrected tilde-substitution
- of pathnames where > 1 separator follows the ~. [Bug 504950]
-
-2002-01-24 Jeff Hobbs <jeffh@ActiveState.com>
+ * doc/refchan.n: Added an example of how to build a scripted channel.
- * library/http/pkgIndex.tcl:
- * library/http/http.tcl: don't add port in default case to handle
- broken servers. http bumped to 2.4.1 [Bug #504508]
-
-2002-01-23 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * unix/mkLinks: Regenerated.
- * doc/CrtChannel.3:
- * doc/ChnlStack.3: Moved documentation for 'Tcl_GetTopChannel'
- from 'CrtChannel' to 'ChnlStack'. Added documentation of
- 'Tcl_GetStackedChannel'. Bug #506147 reported by Mark Patton
- <msp@users.sourceforge.net>.
-
-2002-01-23 Don Porter <dgp@users.sourceforge.net>
-
- * win/tclWinFile.c (NativeAccess,NativeStat,NativeIsExec,
- TclpGetUserHome):
- * win/tclWinPort.h (TclWinSerialReopen):
- * win/tclWinSerial.c (TclWinSerialReopen):
- * win/tclWinSock.c (Tcl_OpenTcpServer): Corrections to earlier
- TIP 27 changes. Thanks to Andreas Kupries for the feedback.
- * generic/tclPlatDecls.h: make genstubs
-
- * doc/GetHostName.3:
- * doc/GetOpnFl.3:
- * doc/OpenTcp.3:
- * tcl.decls (Tcl_GetHostName,Tcl_GetOpenFile,Tcl_OpenTcpClient,
- Tcl_OpenTclServer):
- * mac/tclMacSock.c (CreateSocket,Tcl_OpenTcpClient,Tcl_OpenTcpServer,
- Tcl_GetHostName,GetHostFromString):
- * unix/tclUnixChan.c (CreateSocket,CreateSocketAddress,
- Tcl_OpenTcpClient,Tcl_OpenTcpServer,Tcl_GetOpenFile):
- * unix/tclUnixSock.c (Tcl_GetHostName):
- * win/tclWinSock.c (CreateSocket,CreateSocketAddress,
- Tcl_OpenTcpClient,Tcl_OpenTcpServer,Tcl_GetHostName):
- Updated socket interfaces according to TIP 27.
- * generic/tclCmdIL.c (InfoHostnameCmd): Updated callers.
- * generic/tclDecls.h: make genstubs
-
-2002-01-21 David Gravereaux <davygrvy@pobox.com>
-
- * generic/tclLoadNone.c: TclpLoadFile() didn't match proto of
- typedef Tcl_FSLoadFileProc. OK'd by vincentdarley.
- [Patch #502488]
-
-2002-01-21 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * generic/tclIO.c (WriteChars): Fix for SF #506297, reported by
- Martin Forssen <ruric@users.sourceforge.net>. The encoding
- chosen in the script exposing the bug writes out three intro
- characters when TCL_ENCODING_START is set, but does not consume
- any input as TCL_ENCODING_END is cleared. As some output was
- generated the enclosing loop calls UtfToExternal again, again
- with START set. Three more characters in the out and still no
- use of input ... To break this infinite loop we remove
- TCL_ENCODING_START from the set of flags after the first call
- (no condition is required, the later calls remove an unset flag,
- which is a no-op). This causes the subsequent calls to
- UtfToExternal to consume and convert the actual input.
-
-2002-01-21 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclTest.c: Converted declarations of TestReport file system
- to more portable form. [Bug 501417].
-
- * generic/tcl.decls (Tcl_TraceCommand,Tcl_UntraceCommand,
- Tcl_CommandTraceInfo):
- * generic/tclCmdMZ.c (Tcl_TraceCommand,Tcl_UntraceCommand,
- Tcl_CommandTraceInfo): Updated APIs in generic/tclCmdMZ.c
- according to the guidelines of TIP 27.
- * generic/tclDecls.h: make genstubs
-
-2002-01-18 Don Porter <dgp@users.sourceforge.net>
+2009-01-29 Donal K. Fellows <dkf@users.sf.net>
- * win/tclWinChan.c:
- * win/tclWinFCmd.c:
- * win/tclWinFile.c: Overlooked callers of Tcl_FSGetNativePath
+ * tests/stringObj.test: [Bug 2006888]: Remove non-ASCII chars from
+ non-comment locations in the file, making it work more reliably in
+ locales with a non-Latin-1 default encoding.
- * win/tclWinDde.c:
- * win/tclWinReg.c: Overlooked callers of Tcl_GetIndexFromObj
+ * generic/tclNamesp.c (Tcl_FindCommand): [Bug 2519474]: Ensure that
+ the path is not searched when the TCL_NAMESPACE_ONLY flag is given.
-2002-01-18 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclOODecls.h (Tcl_OOInitStubs): [Bug 2537839]: Make the
+ declaration of this macro work correctly in the non-stub case.
- * generic/tclThreadTest.c:
- * mac/tclMacChan.c:
- * mac/tclMacFCmd.c:
- * mac/tclMacFile.c:
- * mac/tclMacLoad.c:
- * mac/tclMacResource.c: TIP 27 CONSTification broke the mac
- build in a number of places.
-
-2002-01-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * generic/tclIOCmd.c (Tcl_GetsObjCmd): Fixed bug #504642 as
- reported by Brian Griffin <bgriffin@users.sourceforge.net>,
- using his patch. Before the patch the generic I/O layer held an
- unannounced reference to the interp result to store the read
- line into. This unfortunately has disastrous results if the
- channel driver executes a tcl script to perform its operation,
- this freeing the interp result. In that case we are
- dereferencing essentially a dangling reference. It is not truly
- dangling because the object is in the free list, but this only
- causes us to smash the free list and have the error occur later
- somewhere else. The patch simply creates a new object for the
- line and later sets it into the interp result when we are done
- with reading.
-
-2002-01-16 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/tcl.m4 (SC_LOAD_TCLCONFIG):
- * win/tcl.m4 (SC_LOAD_TCLCONFIG): Subst TCL_DBGX
- into TCL_STUB_LIB_FILE and TCL_STUB_LIB_FLAG
- variables so that an extension does not need
- to subst TCL_DBGX into its makefile. [Tk Bug 504356]
-
-2002-01-16 Don Porter <dgp@users.sourceforge.net>
-
- * doc/FileSystem.3:
- * doc/GetCwd.3:
- * doc/GetIndex.3:
- * generic/tcl.decls (Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct,
- Tcl_GetCwd, Tcl_FSFileAttrStrings, Tcl_FSGetNativePath,
- Tcl_FSGetTranslatedStringPath):
- * generic/tcl.h (Tcl_FSFileAttrStringsProc):
- * generic/tclFCmd.c (TclFileAttrsCmd):
- * generic/tclIOUtil.c (Tcl_GetCwd,NativeFileAttrStrings,
- Tcl_FSFileAttrStrings,Tcl_FSGetTranslatedStringPath,
- Tcl_FSGetNativePath):
- * generic/tclIndexObj.c (Tcl_GetIndexFromObj,Tcl_GetIndexFromObjStruct):
- More TIP 27 updates in tclIOUtil.c and tclIndexObj.c that were
- overlooked before. [Patch 504671]
- ***POTENTIAL INCOMPATIBILITY***
- Includes a source incompatibility in the tablePtr arguments of
- the Tcl_GetIndexFromObj* routines.
- * generic/tclDecls.h: make genstubs
-
- * generic/tclBinary.c (Tcl_BinaryObjCmd):
- * generic/tclClock.c (Tcl_ClockObjCmd):
- * generic/tclCmdAH.c (Tcl_EncodingObjCmd, Tcl_FileObjCmd):
- * generic/tclCmdIL.c (Tcl_InfoObjCmd,Tcl_LsearchObjCmd,Tcl_LsortObjCmd):
- * generic/tclCmdMZ.c (Tcl_TraceObjCmd,Tcl_RegexpObjCmd,Tcl_RegsubObjCmd,
- Tcl_StringObjCmd,Tcl_SubstObjCmd,Tcl_SwitchObjCmd,
- TclTraceCommandObjCmd,TclTraceVariableObjCmd):
- * generic/tclCompCmds.c (TclCompileStringCmd):
- * generic/tclEvent.c (Tcl_UpdateObjCmd):
- * generic/tclFileName.c (Tcl_GlobObjCmd):
- * generic/tclIO.c (Tcl_FileEventObjCmd):
- * generic/tclIOCmd.c (Tcl_SeekObjCmd,Tcl_ExecObjCmd,Tcl_SocketObjCmd,
- Tcl_FcopyObjCmd):
- * generic/tclInterp.c (Tcl_InterpObjCmd,SlaveObjCmd):
- * generic/tclNamesp.c (Tcl_NamespaceObjCmd):
- * generic/tclPkg.c (Tcl_PackageObjCmd):
- * generic/tclTest.c (Tcltest_Init,TestencodingObjCmd,TestgetplatformCmd,
- TestlocaleCmd,TestregexpObjCmd,TestsaveresultCmd,
- TestGetIndexFromObjStructObjCmd,TestReportFileAttrStrings):
- * generic/tclTestObj.c (TestindexObjCmd,TeststringObjCmd):
- * generic/tclTimer.c (Tcl_AfterObjCmd):
- * generic/tclVar.c (Tcl_ArrayObjCmd):
- * mac/tclMacFCmd.c (SetFileFinderAttributes):
- * unix/tclUnixChan.c (TclpOpenFileChannel):
- * unix/tclUnixFCmd.c (tclpFileAttrStrings):
- * unix/tclUnixFile.c (TclpObjAccess,TclpObjChdir,TclpObjStat,
- TclpObjLstat):
- * win/tclWinFCmd.c (tclpFileAttrStrings): Updated callers.
-
- * doc/RegExp.3:
- * doc/Utf.3:
- * generic/tcl.decls:
- * generic/tclInt.decls:
- * generic/tclRegexp.c:
- * generic/tclUtf.c: Updated APIs in generic/tclUtf.c and
- generic/tclRegexp.c according to the guidelines of TIP 27.
- [Patch 471509]
-
- * generic/regc_locale.c (element,cclass):
- * generic/tclCmdMZ.c (Tcl_StringObjCmd):
- * generic/tclFileName.c (TclpGetNativePathType,SplitMacPath):
- * generic/tclIO.c (ReadChars):
- * mac/tclMacLoad.c (TclpLoadFile):
- * win/tclWinFile.c (TclpGetUserHome): Updated callers.
-
- * generic/tclDecls.h:
- * generic/tclIntDecls.h: make genstubs
-
- * doc/ParseCmd.3 (Tcl_ParseVar):
- * generic/tcl.decls (Tcl_ParseVar):
- * generic/tclParse.c (Tcl_ParseVar):
- * generic/tclTest.c (TestparsevarObjCmd): Updated APIs in
- generic/tclParse.c according to the guidelines of TIP 27. Updated
- callers. [Patch 501046]
- * generic/tclDecls.h: make genstubs
-
- * generic/tcl.decls (Tcl_RecordAndEval):
- * generic/tclDecls.h: make genstubs
- * generic/tclHistory.c (Tcl_RecordAndEval): Updated APIs in
- generic/tclHistory.c according to the guidelines of TIP 27.
- [Patch 504091]
-
- * doc/CrtSlave.3:
- * generic/tcl.decls (Tcl_CreateAlias, Tcl_CreateAliasObj,
- Tcl_CreateSlave, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_GetSlave):
- * generic/tclInterp.c (Tcl_CreateAlias, Tcl_CreateAliasObj,
- Tcl_CreateSlave, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_GetSlave):
- Updated APIs in the file generic/tclInterp.c according to the
- guidelines of TIP 27. [Patch 501371]
- ***POTENTIAL INCOMPATIBILITY***
- Includes a source incompatibility in the targetCmdPtr arguments of
- the Tcl_GetAlias* routines.
-
- * generic/tclDecls.h: make genstubs
-
-2002-01-15 Don Porter <dgp@users.sourceforge.net>
-
- * doc/SetErrno.3 (Tcl_ErrnoMsg): Corrected documentation for
- Tcl_ErrnoMsg; it takes an integer argument. Thanks to Georgios
- Petasis. [Bug 468183]
-
- * doc/AddErrInfo.3 (Tcl_PosixError):
- * doc/Eval.3 (Tcl_EvalFile):
- * doc/FileSystem.c (Tcl_FSOpenFileChannel,Tcl_FSOpenFileChannelProc):
- * doc/OpenFileChnl.3 (Tcl_OpenFileChannel):
- * doc/SetErrno.3 (Tcl_ErrnoId,Tcl_ErrnoMsg):
- * doc/Signal.3 (Tcl_SignalId,Tcl_SignalMsg):
- * generic/tcl.decls (Tcl_ErrnoId,TclErrnoMsg,Tcl_EvalFile,
- Tcl_OpenFileChannel,Tcl_PosixError,Tcl_SignalId,Tcl_SignalMsg,
- Tcl_FSOpenFileChannel):
- * generic/tcl.h (Tcl_FSOpenFileChannelProc):
- * generic/tclIO.c (FlushChannel):
- * generic/tclIOUtil.c (Tcl_OpenFileChannel,Tcl_EvalFile,TclGetOpenMode,
- Tcl_PosixError,Tcl_FSOpenFileChannel):
- * generic/tclInt.decls (TclGetOpenMode):
- * generic/tclInt.h (TclOpenFileChannelProc_,TclGetOpenMode,
- TclpOpenFileChannel):
- * generic/tclPipe.c (TclCleanupChildren):
- * generic/tclPosixStr.c (Tcl_ErrnoId,Tcl_ErrnoMsg,Tcl_SignalId,
- Tcl_SignalMsg):
- * generic.tclTest.c (PretendTclpOpenFileChannel,
- TestOpenFileChannelProc1,TestOpenFileChannelProc2,
- TestOpenFileChannelProc3,TestReportOpenFileChannel):
- * mac/tclMacChan.c (TclpOpenFileChannel):
- * unix/tclUnixChan.c (TclpOpenFileChannel):
- * win/tclWinChan.c (TclpOpenFileChannel): Updated APIs in
- generic/tclIOUtil.c and generic/tclPosixStr.c according to the
- guidelines of TIP 27. Updated callers. [Patch 499196]
+2009-01-29 Don Porter <dgp@users.sourceforge.net>
- * generic/tclDecls.h:
- * generic/tclIntDecls.h: make genstubs
+ * generic/tclInterp.c: Convert the [interp] command into a
+ * tests/interp.test: [namespace ensemble]. Work in progress
+ * tests/nre.test: to NRE-enable the [interp invokehidden]
+ subcommand.
- * doc/CrtChannel.3:
- * doc/OpenFileChnl.3:
- * generic/tcl.decls:
- * generic/tclIO.h:
- * generic/tclIO.c (DoWrite, Tcl_RegisterChannel, Tcl_GetChannel,
- Tcl_CreateChannel, Tcl_GetChannelName, CloseChannel, Tcl_Write,
- Tcl_WriteRaw, Tcl_Ungets, Tcl_BadChannelOption, Tcl_GetChannelOption,
- Tcl_SetChannelOption, Tcl_GetChannelNamesEx, Tcl_ChannelName):
- Updated APIs in the file generic/tclIO.c according to the guidelines
- of TIP 27. Several minor documentation corrections as well.
- [Patch 503565]
- * generic/tclDecls.h: make genstubs
-
- * generic/tcl.h (Tcl_DriverOutputProc, Tcl_DriverGetOptionProc,
- Tcl_DriverSetOptionProc):
- * generic/tclIOGT.c (TransformOutputProc, TransformGetOptionProc,
- TransformSetOptionProc):
- * mac/tclMacChan.c (FileOutput, StdIOOutput):
- * man/tclMacSock.c (TcpGetOptionProc, TcpOutput):
- * unix/tclUnixChan.c (FileOutputProc, TcpGetOptionProc, TcpOutputProc,
- TtyGetOptionProc, TtySetOptionProc):
- * unix/tclUnixPipe.c (PipeOuputProc):
- * win/tclWinChan.c (FileOutputProc):
- * win/tclWinConsole.c (ConsleOutputProc):
- * win/tclWinPipe.c (PipeOuputProc):
- * win/tclWinSerial.c (SerialOutputProc, SerialGetOptionProc,
- SerialSetOptionProc):
- * win/tclWinSock.c (TcpGetOptionProc, TcpOutput): Updated channel
- driver interface according to the guidelines of TIP 27. See also
- [Bug 500348].
-
- * doc/CrtChannel.3:
- * generic/tcl.h:
- * generic/tclIO.c:
- * generic/tclIO.h:
- * generic/tclInt.h:
- * tools/checkLibraryDoc.tcl:
- Moved Tcl_EolTranslation enum declaration from generic/tcl.h to
- generic/tclInt.h (renamed to TclEolTranslation). It is not used
- anywhere in Tcl's public interface.
+2009-01-29 Donal K. Fellows <dkf@users.sf.net>
-2002-01-14 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclNamesp.c (TclMakeEnsemble): [Bug 2529117]: Make this
+ function behave more sensibly when presented with a fully-qualified
+ name, rather than doing strange stuff.
- * doc/GetIndex.3:
- * doc/WrongNumArgs.3:
- * generic/tcl.decls (Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct,
- Tcl_WrongNumArgs):
- * generic/tclIndexObj.c (Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct,
- Tcl_WrongNumArgs): Updated APIs in the file generic/tclIndexObj.c
- according to the guidelines of TIP 27. [Patch 501491]
- * generic/tclDecls.h: make genstubs
+2009-01-28 Donal K. Fellows <dkf@users.sf.net>
-2002-01-11 Mo DeJong <mdejong@users.sourceforge.net>
+ * generic/tclBasic.c (TclInvokeObjectCommand): Made this understand
+ what to do if it ends up being used on a command with no objProc; that
+ shouldn't happen, but...
- * unix/configure: Regen.
- * unix/configure.in:
- * win/configure: Regen.
- * win/configure.in: Use ${libdir} instead of ${exec_prefix}/lib
- to properly support the --libdir option to configure. [Bug 489370]
-
-2002-01-11 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * win/tclWinSerial.c (SerialSetOptionProc): Applied patch for SF
- bug #500348 supplied by Rolf Schroedter
- <schroedter@users.sourceforge.net>. The function modified the
- contents of the the 'value' string and now does not do this
- anymore. This is a followup to the change made on 2001-12-17.
-
-2002-01-11 David Gravereaux <davygrvy@pobox.com>
-
- * win/makefile.vc: Removed -GD compiler option. It was intended
- for future use, but MS is again changing the future at their whim.
- The D4002 warning was harmless though, but someone using VC .NET
- logged it as a concern. [Bug #501565]
-
-2002-01-11 Mo DeJong <mdejong@users.sourceforge.net>
-
- * unix/Makefile.in: Burn Tcl build directory
- into tcltest executable to avoid crashes caused
- by ld loading a previously installed version
- of the tcl shared library. [Bug 218110]
-
-2002-01-10 Don Porter <dgp@users.sourceforge.net>,
- Kevin Kenny <kennykb@users.sourceforge.net>
-
- * unix/tclLoadDld.c (TclpLoadFile): syntax error: unbalanced
- parens. Kevin notes that it's far from clear that this file is
- ever included in an actual build; Linux without dlopen appears to
- be a nonexistent configuration.
-
-2002-01-08 Don Porter <dgp@users.sourceforge.net>,
- Kevin Kenny <kennykb@users.sourceforge.net>
-
- * doc/StaticPkg.3 (Tcl_StaticPackage):
- * generic/tcl.decls (Tcl_StaticPackage):
- * generic/tclDecls.h (Tcl_StaticPackage):
- * generic/tclInt.decls (TclGuessPackageName):
- * generic/tclInt.h (TclGuessPackageName):
- * generic/tclLoad.c (Tcl_StaticPackage):
- * generic/tclLoadNone.c (TclGuessPackageName):
- * mac/tclMacLoad.c (TclGuessPackageName):
- * unix/tclLoadAout.c (TclGuessPackageName):
- * unix/tclLoadDl.c (TclGuessPackageName):
- * unix/tclLoadDld.c (TclGuessPackageName):
- * unix/tclLoadDyld.c (TclGuessPackageName):
- * unix/tclLoadNext.c (TclGuessPackageName):
- * unix/tclLoadOSF.c (TclGuessPackageName):
- * unix/tclLoadShl.c (TclGuessPackageName):
- * win/tclWinLoad.c (TclGuessPackageName): Updated APIs in
- the files */tcl*Load*.c according to the guidelines of TIP 27.
- [Patch 501096]
-
-2002-01-09 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclTest.c (MainLoop):
- * tests/main.test (Tcl_Main-1.{3,4,5,6}): Corrected some non-portable
- tests from the new Tcl_Main changes. Thanks to Kevin Kenny.
-
-2002-01-07 Don Porter <dgp@users.sourceforge.net>
-
- * generic/tclEvent.c (TclInExit):
- * generic/tclIOUtil.c (SetFsPathFromAbsoluteNormalized,
- SetFsPathFromAny,Tcl_FSNewNativePath,DupFsPathInternalRep):
- * generic/tclListObj.c (TclLsetList,TclLsetFlat): Added some type
- casts to satisfy picky compilers.
-
- * generic/tclMain.c: Bug fix: neglected the NULL case in
- TclGetStartupScriptFileName(). Broke Tk/wish.
-
-2002-01-05 Don Porter <dgp@users.sourceforge.net>
+ * generic/tclNamesp.c (TclMakeEnsemble): [Bug 2529157]: Made this
+ understand NRE command implementations better.
+ * generic/tclDictObj.c (DictForCmd): Eliminate unnecessary command
+ implementation.
- * doc/Tcl_Main.3:
- * generic/tclMain.c: Substantial rewrite and expanded documentation
- of Tcl_Main to correct a number of bugs and flaws:
-
- * Interactive Tcl_Main can now enter a main loop, exit
- that loop and continue interactive operations. The loop
- may even exit in the midst of interactive command typing
- without loss of the partial command. [Bugs 486453, 474131]
- * Tcl_Main now gracefully handles deletion of its master
- interpreter.
- * Interactive Tcl_Main can now operate with non-blocking stdin
- * Interactive Tcl_Main can now detect EOF on stdin even in
- mid-command. [Bug 491341]
- * Added VFS-aware internal routines for managing the
- startup script selection.
- * Tcl variable 'tcl_interactive' is now linked to C variable
- 'tty' so that one can disable/enable interactive prompts
- at the script level when there is no startup script. This
- is meant for use by the test suite.
- * Consistent use of the Tcl libraries standard channels as
- returned by Tcl_GetStdChannel(); as opposed to the channels
- named 'stdin', 'stdout', and 'stderr' in the master interp,
- which can be different or unavailable.
- * Tcl_Main now calls Tcl_Exit() if evaluation of [exit] in the
- master interpreter returns, assuring Tcl_Main does not return.
- * Documented Tcl_Main's absence from public stub table
- * Documented that Tcl_Main does not return.
- * Documented Tcl variables set by Tcl_Main.
- * All prompts are done from a single procedure, Prompt.
- * Use of Tcl_Obj-enabled interfaces everywhere.
-
- * generic/tclInt.decls (TclGetStartupScriptPath,
- TclSetStartupScriptPath): New internal VFS-aware routines for
- managing the startup script of Tcl_Main.
- * generic/tclIntDecls.h:
- * generic/tclStubInit.c: make genstubs
-
- * generic/tclTest.c (TestsetmainloopCmd,TestexitmainloopCmd,
- Tcltest_Init,TestinterpdeleteCmd):
- * tests/main.test (new): Added new file to test suite that
- thoroughly tests generic/tclMain.c; added some new test commands
- for testing Tcl_SetMainLoop().
-
-2002-01-04 Don Porter <dgp@users.sourceforge.net>
-
- * doc/Alloc.3:
- * doc/Concat.3:
- * doc/CrtMathFnc.3:
- * doc/Hash.3:
- * doc/Interp.3:
- * doc/LinkVar.3:
- * doc/ObjectType.3:
- * doc/PkgRequire.3:
- * doc/Preserve.3:
- * doc/SetResult.3:
- * doc/SplitList.3:
- * doc/SplitPath.3:
- * doc/TCL_MEM_DEBUG.3: Updated documentation to describe the ckalloc,
- ckfree, ckrealloc, attemptckalloc, and attemptckrealloc macros, and
- to accurately describe when and how they are used. [Bug 497459]
+2009-01-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOODefineCmds.c (Tcl_ClassSetConstructor):
+ [Bug 2531577]: Ensure that caches of constructor chains are cleared
+ when the constructor is changed.
+
+2009-01-26 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclInt.h: [Bug 1028264]: WSACleanup() too early.
+ * generic/tclEvent.c: The fix introduces "late exit handlers" for
+ * win/tclWinSock.c: similar late process-wide cleanups.
+
+2009-01-26 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * win/tclWinSock.c: [Bug 2446662]: Resync Win behavior on RST with
+ that of unix (EOF).
+
+2009-01-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (ChanClose): [Bug 2536400]: Only generate error
+ messages in the interpreter when the thread is not being closed down.
+
+2009-01-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/zlib.n: Added a note that 'zlib push' is reversed by 'chan pop'.
+
+2009-01-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclCompile.h: CONSTify TclPrintInstruction (TIP #27)
+ * generic/tclCompile.c
+ * generic/tclInt.h: CONSTify TclpNativeJoinPath (TIP #27)
+ * generic/tclFileName.c
+ * generic/tcl.decls: {unix win} is equivalent to {generic}
+ * generic/tclInt.decls
+ * generic/tclDecls.h: (regenerated)
+ * generic/tclIntDecls.h
+ * generic/tclGetDate.y: Single internal const decoration.
+ * generic/tclDate.c:
+
+2009-01-22 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/tcl.m4: Corrected a typo ($(SHLIB_VERSION) should be
+ ${SHLIB_VERSION}).
+ * unix/configure: Autoconf 2.59
+
+2009-01-21 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (ReflectClose): [Bug 2458202]:
+ * generic/tclIORTrans.c (ReflectClose): Closing a channel may supply
+ NULL for the 'interp'. Test for finalization needs to be different,
+ and one place has to pull the interp out of the channel instead.
+
+2009-01-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: New fix for [Bug 2494093] replaces the
+ flawed attempt committed 2009-01-09.
+
+2009-01-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/Makefile.in: [Patch 907924]:Added a CONFIG_INSTALL_DIR
+ * unix/tcl.m4: parameter so that distributors can control where
+ tclConfig.sh goes. Made the installation of 'ldAix' conditional upon
+ actually being on an AIX system. Allowed for downstream packagers to
+ customize SHLIB_VERSION on BSD-derived systems. Thanks to Stuart
+ Cassoff for his help.
+ * unix/configure: Autoconf 2.59
+
+2009-01-19 David Gravereaux <davygrvy@pobox.com>
+
+ * win/build.vc.bat: Improved tools detection and error message
+ * win/makefile.vc: Reorganized the $(TCLOBJ) file list into seperate
+ parts for easier maintenance. Matched all sources built using -GL to
+ both $(lib) and $(link) to use -LTCG and avoid a warning message.
+ Addressed the over-building nature of the htmlhelp target by moving
+ from a pseudo target to a real target dependent on the entire docs/
+ directory contents.
+ * win/nmakehlp.c: Removed -g option and GrepForDefine() func as it
+ isn't being used anymore. The -V option method is much better.
+
+2009-01-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump patchlevel to 8.6b1.1 to distinguish
+ * library/init.tcl: CVS snapshots from the 8.6b1 and 8.6b2 releases
+ * unix/configure.in: and to deal with the fact that the 8.6b1
+ * win/configure.in: version of init.tcl will not [source] in the
+ HEAD version of Tcl.
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2009-01-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_DeleteCommandFromToken): Reverted most
+ of the substance of my 2009-01-12 commit. NULLing the objProc field of
+ a Command when deleting it is important so that tests for certain
+ classes of commands don't return false positives when applied to
+ deleted command tokens. Overall change is now just replacement of a
+ false comment with a true one.
+
+2009-01-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tcl.m4: [Bug 2502365]: Building of head on HPUX is broken when
+ using the native CC.
+ * unix/configure (autoconf-2.59)
+
+2009-01-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (Tcl_ThrowObjCmd): Move implementation of [throw]
+ * library/init.tcl (throw): to C from Tcl.
+
+2009-01-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_DeleteCommandFromToken): One consequence of
+ the NRE rewrite is that there are now situations where a NULL objProc
+ field in a Command struct is perfectly normal. Removed an outdated
+ comment in Tcl_DeleteCommandFromToken that claimed we use
+ cmdPtr->objPtr==NULL as a test of command validity. In fact we use
+ cmdPtr->flags&CMD_IS_DELETED to perform that test. Also removed the
+ setting to NULL, since any extension following the advice of the old
+ comment is going to be broken by NRE anyway, and needs to shift to
+ flag-based testing (or stop intruding into such internal matters).
+ Part of [Bug 2486550].
+
+2009-01-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c (STRING_SIZE): [Bug 2494093]: Corrected
+ failure to limit memory allocation requests to the sizes that can be
+ supported by Tcl's memory allocation routines.
+
+2009-01-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclNamesp.c (NamespaceEnsembleCmd): [Bug 1558654]: Error out
+ when someone gives wrong # of args to [namespace ensemble create].
+
+2009-01-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c (STRING_UALLOC): [Bug 2494093]: Added missing
+ parens required to get correct results out of things like
+ STRING_UALLOC(num + append).
+
+2009-01-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c, generic/tclIndexObj.c, generic/tclListObj.c,
+ * generic/tclObj.c, generic/tclStrToD.c, generic/tclUtil.c,
+ * generic/tclVar.c: Generate errorcodes for the error cases which
+ approximate to "I can't interpret that string as one of those" and
+ "You gave me the wrong number of arguments".
+
+2009-01-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n: [Tk Bug 2491235]: Added more examples.
+
+ * tests/oo.test (oo-22.1): Adjusted test to be less dependent on the
+ specifics of how [info frame] reports general frame information, and
+ instead to focus on what methods add to it; that's really what the
+ test is about anyway.
+
+2009-01-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/stringObj.test: Revise tests that demand a NULL Tcl_ObjType
+ in certain values to construct those values with [testdstring] so
+ there's no lack of robustness depending on the shimmer history of
+ shared literals.
+
+2009-01-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictIncrCmd): Corrected twiddling in internals
+ of dictionaries so that literals can't get destroyed.
- * generic/tclThreadJoin.c (TclRememberJoinableThread,TclJoinThread):
- Replaced Tcl_Alloc and Tcl_Free calls with ckalloc and ckfree so that
- memory debugging is supported.
+ * tests/expr.test: [Bug 2006879]: Eliminate non-ASCII char.
-2002-01-04 Daniel Steffen <das@users.sourceforge.net>
+ * generic/tclOOInfo.c (InfoObjectMethodsCmd,InfoClassMethodsCmd):
+ [Bug 2489836]: Only delete pointers that were actually allocated!
- * mac/tclMacTime.c (TclpGetTZName): fix for daylight savings TZName bug
+ * generic/tclOO.c (TclNRNewObjectInstance, Tcl_NewObjectInstance):
+ [Bug 2481109]: Perform search for existing commands in right context.
-2002-01-03 Don Porter <dgp@users.sourceforge.net>
+2009-01-05 Donal K. Fellows <dkf@users.sf.net>
- * doc/FileSystem.3:
- * generic/tclIOUtil.c: Updated some old uses of "fileName" to
- new VFS terminology, "pathPtr".
+ * generic/tclCmdMZ.c (TclNRSourceObjCmd): [Bug 2412068]: Make
+ * generic/tclIOUtil.c (TclNREvalFile): implementation of the
+ [source] command be NRE enabled so that [yield] inside a script
+ sourced in a coroutine can work.
-2002-01-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+2009-01-04 Donal K. Fellows <dkf@users.sf.net>
- * tests/basic.test (basic-39.4): Greatly simplified test while
- still leaving it so that it crashes when run without the fix to
- the [foreach] implementation.
- * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Stopped Bug #494348 from
- happening by not trying to be so clever with cacheing; if nothing
- untoward is happening anyway, the less efficient technique will
- only add a few instruction cycles (one function call and a few
- derefs/assigns per list per iteration, with no change in the
- number of tests) and if something odd *is* going on, the code is
- now far more robust.
+ * generic/tclCmdAH.c: Tidy up spacing and code style.
- * tests/basic.test (basic-39.4): Reproducable script from Bug #494348
+2009-01-03 Kevin B. Kenny <kennykb@acm.org>
-2002-01-02 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+ * library/clock.tcl (tcl::clock::add): Fixed error message formatting
+ in the case where [clock add] is presented with a bad switch.
+ * tests/clock.test (clock-65.1) Added a test case for the above
+ problem [Bug 2481670].
- * tests/util.test (Wrapper_Tcl_StringMatch,util-5.*): Rewrote so
- the test is performed with the right internal function since
- [string match] no longer uses Tcl_StringCaseMatch internally.
+2009-01-02 Donal K. Fellows <dkf@users.sf.net>
- * tests/string.test (string-11.51):
- * generic/tclUtf.c (Tcl_UniCharCaseMatch):
- * generic/tclUtil.c (Tcl_StringCaseMatch): Fault with matching
- case-insensitive non-ASCII patterns containing upper case
- characters. [Bug #233257]
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): [Bug 878333]: Force the use of the
+ compatibility version of mkstemp() on IRIX.
+ * unix/configure.in, unix/Makefile.in (mkstemp.o):
+ * compat/mkstemp.c (new file): [Bug 741967]: Added a compatibility
+ implementation of the mkstemp() function, which is apparently needed
+ on some platforms.
******************************************************************
+ *** CHANGELOG ENTRIES FOR 2008 IN "ChangeLog.2008" ***
+ *** CHANGELOG ENTRIES FOR 2006-2007 IN "ChangeLog.2007" ***
+ *** 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" ***
diff --git a/ChangeLog.1999 b/ChangeLog.1999
index a7483a0..3bf4e9a 100644
--- a/ChangeLog.1999
+++ b/ChangeLog.1999
@@ -15,7 +15,7 @@
* unix/Makefile.in: added -srcdir=... for 'make html'
- * doc/Hash.3: fixed reference to ckfree [Bug: 3912]
+ * doc/Hash.3: fixed reference to ckfree [Bug 3912]
* doc/RegExp.3: fixed calling params for Tcl_RegExecFromObj
* doc/open.n: fixed minor formatting errors
* doc/string.n: fixed minor formatting errors
@@ -24,12 +24,12 @@
* tests/cmdIL.test:
* generic/tclCmdIL.c: added -unique option to lsort
- * generic/tclThreadTest.c: changed thread ids to longs [Bug: 3902]
+ * generic/tclThreadTest.c: changed thread ids to longs [Bug 3902]
- * mac/tclMacOSA.c: fixed applescript for I18N [Bug: 3644]
+ * mac/tclMacOSA.c: fixed applescript for I18N [Bug 3644]
* win/mkd.bat:
- * win/rmd.bat: removed necessity of tag.txt [Bug: 3874]
+ * win/rmd.bat: removed necessity of tag.txt [Bug 3874]
* win/tclWinThrd.c: changed CreateThread to _beginthreadex and
ExitThread to _endthreadex
@@ -47,43 +47,43 @@
* mac/tclMacFile.c:
* unix/tclUnixFile.c:
* win/tclWinFile.c: enhanced the glob command with the new options
- -types -path -directory and -join. Deprecated TclpMatchFiles with
+ -types -path -directory and -join. Deprecated TclpMatchFiles with
TclpMatchFilesTypes, extended TclGlob and TclDoGlob and added
- GlobTypeData structure. [Bug: 2363]
+ GlobTypeData structure. [Bug 2363]
1999-12-10 Jeff Hobbs <hobbs@scriptics.com>
* tests/var.test:
- * generic/tclCompile.c: fixed problem where setting to {} array
- would intermittently not work. (Fontaine) [Bug: 3339]
+ * generic/tclCompile.c: fixed problem where setting to {} array would
+ intermittently not work. [Bug 3339] (Fontaine)
* generic/tclCmdMZ.c:
- * generic/tclExecute.c: optimized INST_TRY_CVT_TO_NUMERIC to
- recognize boolean objects. (Spjuth) [Bug: 2815]
+ * generic/tclExecute.c: optimized INST_TRY_CVT_TO_NUMERIC to recognize
+ boolean objects. [Bug 2815] (Spjuth)
* tests/info.test:
* tests/parseOld.test:
* generic/tclCmdAH.c:
* generic/tclProc.c: changed Tcl_UplevelObjCmd (uplevel) and
- Tcl_EvalObjCmd (eval) to use TCL_EVAL_DIRECT in the single arg
- case as well, to take advantage of potential pure list input
- optimization. This means that it won't get byte compiled though,
- which should be acceptable.
- * generic/tclBasic.c: made Tcl_EvalObjEx pure list object aware in
- the TCL_EVAL_DIRECT case for efficiency.
- * generic/tclUtil.c: made Tcl_ConcatObj pure list object aware,
- and return a list object in that case [Bug: 2098 2257]
+ Tcl_EvalObjCmd (eval) to use TCL_EVAL_DIRECT in the single arg case as
+ well, to take advantage of potential pure list input optimization.
+ This means that it won't get byte compiled though, which should be
+ acceptable.
+ * generic/tclBasic.c: made Tcl_EvalObjEx pure list object aware in the
+ TCL_EVAL_DIRECT case for efficiency.
+ * generic/tclUtil.c: made Tcl_ConcatObj pure list object aware, and
+ return a list object in that case [Bug 2098 2257]
* generic/tclMain.c: changed Tcl_Main to not constantly reuse the
commandPtr object (interactive case) as it could be shared. (Fellows)
* unix/configure.in:
* unix/tcl.m4:
- * unix/tclUnixPipe.c: removed checking for compatible vfork
- function and use of the vfork function. Modern VM systems rarely
- suffer any performance degradation when fork is used, and it
- solves multiple problems with vfork. Users that still want vfork
- can add -Dfork=vfork to the compile flags. [Bug: 942 2228 1312]
+ * unix/tclUnixPipe.c: removed checking for compatible vfork function
+ and use of the vfork function. Modern VM systems rarely suffer any
+ performance degradation when fork is used, and it solves multiple
+ problems with vfork. Users that still want vfork can add -Dfork=vfork
+ to the compile flags. [Bug 942 2228 1312]
1999-12-09 Jeff Hobbs <hobbs@scriptics.com>
@@ -96,44 +96,44 @@
* win/tclWinFCmd.c:
* win/tclWinInit.c:
* win/tclWinPipe.c:
- * win/tclWinSock.c: removed all code that supported Win32s. It
- was no longer officially supported, and likely didn't work anyway.
+ * win/tclWinSock.c: removed all code that supported Win32s. It was no
+ longer officially supported, and likely didn't work anyway.
* win/makefile.vc: removed 16 bit stuff, cleaned up.
* win/tcl16.rc:
* win/tclWin16.c:
- * win/winDumpExts.c: these files have been removed from the
- source tree (no longer necessary to build)
+ * win/winDumpExts.c: these files have been removed from the source
+ tree (no longer necessary to build)
1999-12-07 Jeff Hobbs <hobbs@scriptics.com>
- * tests/io.test: removed 'knownBug' tests that were for
- unsupported0, which is now fcopy (that already has tests)
+ * tests/io.test: removed 'knownBug' tests that were for unsupported0,
+ which is now fcopy (that already has tests)
* mac/tclMacPort.h: added utime.h include
* generic/tclDate.c:
- * unix/Makefile.in: fixed make gendate to swap const with CONST
- so it uses the Tcl defined CONST type [Bug: 3521]
+ * unix/Makefile.in: fixed make gendate to swap const with CONST so it
+ uses the Tcl defined CONST type [Bug 3521]
- * generic/tclIO.c: removed panic that could occur in FlushChannel
- when a "blocking" channel would receive EAGAIN, instead treating
- it the same as non-blocking. [Bug: 3773]
+ * generic/tclIO.c: removed panic that could occur in FlushChannel when
+ a "blocking" channel would receive EAGAIN, instead treating it the
+ same as non-blocking. [Bug 3773]
- * generic/tclUtil.c: fixed Tcl_ScanCountedElement to not step
- beyond the end of the counted string [Bug: 3336]
+ * generic/tclUtil.c: fixed Tcl_ScanCountedElement to not step beyond
+ the end of the counted string. [Bug 3336]
1999-12-03 Jeff Hobbs <hobbs@scriptics.com>
* doc/load.n: added note about NT's buggy handling of './' with
LoadLibrary
- * library/http2.1/http.tcl: fixed error handling in http::Event
- [Bug: 3752]
+ * library/http2.1/http.tcl: fixed error handling in http::Event. [Bug
+ 3752]
* tests/env.test: removed knownBug limitation from working test
- * tests/all.tcl: ensured that ::tcltest::testsDirectory would be
- set to an absolute path
+ * tests/all.tcl: ensured that ::tcltest::testsDirectory would be set
+ to an absolute path
* tests/expr-old.test:
* tests/parseExpr.test:
@@ -144,86 +144,82 @@
* generic/tclParseExpr.c:
* generic/tclUtil.c:
* generic/tclExecute.c: added TclCheckBadOctal routine to enhance
- error message checking for when users use invalid octal numbers
- (like 08), as well as replumbed the Expr*Funcs with a new
- VerifyExprObjType to simplify type handling. [Bug: 2467]
+ error message checking for when users use invalid octal numbers (like
+ 08), as well as replumbed the Expr*Funcs with a new VerifyExprObjType
+ to simplify type handling. [Bug 2467]
* tests/expr.test:
- * generic/tclCompile.c: fixed 'bad code length' error for
- 'expr + {[incr]}' case, with new test case [Bug: 3736]
- and seg fault on 'expr + {[error]}' (different cause) that
- was caused by a correct optimization that didn't correctly
- track how it was modifying the source string in the opt.
- The optimization was removed, which means that:
+ * generic/tclCompile.c: fixed 'bad code length' error for 'expr +
+ {[incr]}' case, with new test case [Bug 3736] and seg fault on 'expr
+ + {[error]}' (different cause) that was caused by a correct
+ optimization that didn't correctly track how it was modifying the
+ source string in the opt. The optimization was removed, which means
+ that:
expr 1 + {[string length abc]}
- will be not be compiled inline as before, but this should be
- written:
+ will be not be compiled inline as before, but this should be written:
expr {1 + [string length abc]}
- which will be compiled inline for speed. This prevents
+ which will be compiled inline for speed. This prevents:
expr 1 + {[mindless error]}
- from seg faulting, and only affects optimizations for
- degenerate cases [Bug: 3737]
+ from seg faulting, and only affects optimizations for degenerate cases
+ [Bug 3737]
1999-12-01 Scott Redman <redman@scriptics.com>
- * generic/tcl.decls :
- * generic/tclMain.c :
- * unix/tclAppInit.c:
+ * generic/tcl.decls:
+ * generic/tclMain.c:
+ * unix/tclAppInit.c:
* win/tclAppInit.c: Added two new internal functions,
- TclSetStartupScriptFileName() and TclGetStartupScriptFileName()
- and added hooks into the main() code for supporting TclPro and
- other "big" shells more easily without requiring a copy of the
- main() code.
-
+ TclSetStartupScriptFileName() and TclGetStartupScriptFileName() and
+ added hooks into the main() code for supporting TclPro and other "big"
+ shells more easily without requiring a copy of the main() code.
+
* generic/tclEncoding.c:
- * generic/tclEvent.c: Moved encoding-related startup code from
+ * generic/tclEvent.c: Moved encoding-related startup code from
tclEvent.c into the more appropriate tclEncoding.c.
-
+
1999-11-30 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIO.c: fix from Kupries for Tcl_UnstackChannel that
correctly handles resetting translation and encoding.
- * generic/tclLoad.c: #def'd out the unloading of DLLs at finalize
- time for Unix in TclFinalizeLoad. [Bug: 2560 3373] Should be
- parametrized to allow for user to specify unload or not.
+ * generic/tclLoad.c: #def'd out the unloading of DLLs at finalize time
+ for Unix in TclFinalizeLoad. [Bug 2560 3373] Should be parametrized
+ to allow for user to specify unload or not.
- * win/tclWinTime.c: fixed handling of %Z on NT for time zones
- that don't have DST.
+ * win/tclWinTime.c: fixed handling of %Z on NT for time zones that
+ don't have DST.
1999-11-29 Jeff Hobbs <hobbs@scriptics.com>
* library/dde1.1/pkgIndex.tcl:
- * library/reg1.0/pkgIndex.tcl: added supported for debugged
- versions of the libraries
+ * library/reg1.0/pkgIndex.tcl: added supported for debugged versions
+ of the libraries
* unix/tclUnixPipe.c: fixed PipeBlockModeProc to properly set
- isNonBlocking flag on pipe. [Bug: 1356 710]
+ isNonBlocking flag on pipe. [Bug 1356 710]
removed spurious fcntl call from PipeBlockModeProc
* tests/scan.test:
- * generic/tclScan.c: fixed scan where %[..] didn't match anything
- and added test case [Bug: 3700]
+ * generic/tclScan.c: fixed scan where %[..] didn't match anything and
+ added test case. [Bug 3700]
1999-11-24 Jeff Hobbs <hobbs@scriptics.com>
* doc/open.n:
* win/tclWinSerial.c: adopted patch from Schroedter to handle
- fconfigure $sock -lasterror on Windows. [RFE: 3368]
+ fconfigure $sock -lasterror on Windows. [RFE 3368]
- * generic/tclCmdIL.c: made SORTMODE_INTEGER work with Longs
- [Bug: 3652]
+ * generic/tclCmdIL.c: made SORTMODE_INTEGER work with Longs [Bug 3652]
1999-11-23 Scott Stanton <stanton@scriptics.com>
- * library/tcltest1.0/tcltest.tcl: Fixed bug where tcltest output
- went to stdout instead of the specified output file in some
- cases.
+ * library/tcltest1.0/tcltest.tcl: Fixed bug where tcltest output went
+ to stdout instead of the specified output file in some cases.
1999-11-19 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclProc.c: backed out change from 1999-11-18 as it
- could affect return string from upvar as well.
+ * generic/tclProc.c: backed out change from 1999-11-18 as it could
+ affect return string from upvar as well.
* tools/tcl.wse.in: added tcltest1.0 library to distribution list
@@ -234,49 +230,49 @@
1999-11-18 Jeff Hobbs <hobbs@scriptics.com>
* unix/tcl.m4: added defined for _THREAD_SAFE in --enable-threads
- case; added check for pthread_mutex_init in libc; in AIX case,
- with --enable-threads ${CC}_r is used; fixed flags when using gcc
- on SCO
+ case; added check for pthread_mutex_init in libc; in AIX case, with
+ --enable-threads ${CC}_r is used; fixed flags when using gcc on SCO
- * generic/tclProc.c: corrected error reporting for default case
- at the global level for uplevel command.
+ * generic/tclProc.c: corrected error reporting for default case at the
+ global level for uplevel command.
- * generic/tclIOSock.c: changed int to size_t type for len
- in TclSockMinimumBuffers.
+ * generic/tclIOSock.c: changed int to size_t type for len in
+ TclSockMinimumBuffers.
- * generic/tclCkalloc.c: fixed Tcl_DbCkfree to return a value
- on NULL input. [Bug: 3400]
+ * generic/tclCkalloc.c: fixed Tcl_DbCkfree to return a value on NULL
+ input. [Bug 3400]
- * generic/tclStringObj.c: fixed support for passing in negative
- length to Tcl_SetUnicodeObj, et al handling routines. [Bug: 3380]
+ * generic/tclStringObj.c: fixed support for passing in negative length
+ to Tcl_SetUnicodeObj, et al handling routines. [Bug 3380]
* doc/scan.n:
* tests/scan.test:
- * generic/tclScan.c: finished support for inline scan by
- supporting XPG identifiers.
+ * generic/tclScan.c: finished support for inline scan by supporting
+ XPG identifiers.
* doc/http.n:
- * library/http2.1/http.tcl: added register and unregister
- commands to http:: package (better support for tls/SSL),
- as well as -type argument to http::geturl. [RFE: 2617]
+ * library/http2.1/http.tcl: added register and unregister commands to
+ http:: package (better support for tls/SSL), as well as -type argument
+ to http::geturl. [RFE 2617]
- * generic/tclBasic.c: removed extra decr of numLevels in
- Tcl_EvalObjEx that could cause seg fault. (mjansen@wendt.de)
+ * generic/tclBasic.c: removed extra decr of numLevels in Tcl_EvalObjEx
+ that could cause seg fault. (mjansen@wendt.de)
* generic/tclEvent.c: fixed possible lack of MutexUnlock in
- Tcl_DeleteExitHandler [Bug: 3545]
+ Tcl_DeleteExitHandler. [Bug 3545]
- * unix/tcl.m4: Added better pthreads library check and inclusion
- of _THREAD_SAFE in --enable-threads case
+ * unix/tcl.m4: Added better pthreads library check and inclusion of
+ _THREAD_SAFE in --enable-threads case
Added support for gcc config on SCO
* doc/glob.n: added note about ..../ glob behavior on Win9*
- * doc/tcltest.n: fixed minor example errors [Bug: 3551]
+ * doc/tcltest.n: fixed minor example errors. [Bug 3551]
1999-11-17 Brent Welch <welch@scriptics.com>
- * library/http2.1/http.tcl: Correctly fixed the -timeout
- problem mentioned in the 10-29 change. Also added error
- handling for failed writes on the socket during the protocol.
+
+ * library/http2.1/http.tcl: Correctly fixed the -timeout problem
+ mentioned in the 10-29 change. Also added error handling for failed
+ writes on the socket during the protocol.
1999-11-09 Jeff Hobbs <hobbs@scriptics.com>
@@ -291,54 +287,53 @@
* generic/tclParse.c: added code in Tcl_ParseBraces to test for
possible unbalanced open brace in a comment
- * library/init.tcl: removed the installed binary directory from
- the auto_path variable
+ * library/init.tcl: removed the installed binary directory from the
+ auto_path variable
- * tools/tcl.wse.in: updated to 8.3a1, fixed install of twind.tcl
- and koi8-r.enc files
+ * tools/tcl.wse.in: updated to 8.3a1, fixed install of twind.tcl and
+ koi8-r.enc files
* unix/tcl.m4: added recognition of pthreads library for AIX
1999-10-29 Brent Welch <welch@scriptics.com>
- * generic/tclInt.h: Modified the TclNewObj and TclDecrRefCount
- in two ways. First, in the case of TCL_THREADS, we do not use
- the special Tcl_Obj allocator because that is a source of
- lock contention. Second, general code cleanup to eliminate
- duplicated code. In particular, TclDecrRefCount now uses
- TclFreeObj instead of duplicating that code, so it is now
- identical to Tcl_DecrRefCount.
-
- * generic/tclObj.c: Changed Tcl_NewObj so it uses the
- TclNewObj macro instead of duplicating the code. Adjusted
- TclFreeObj so it understands the TCL_THREADS case described
- above.
-
- * library/http2.1/http.tcl: Fixed a bug in the handling of
- the state(status) variable when the -timeout flag is specified.
- Previously it was possible to leave the status undefined
- instead of empty, which caused errors in http::status
+
+ * generic/tclInt.h: Modified the TclNewObj and TclDecrRefCount in two
+ ways. First, in the case of TCL_THREADS, we do not use the special
+ Tcl_Obj allocator because that is a source of lock contention. Second,
+ general code cleanup to eliminate duplicated code. In particular,
+ TclDecrRefCount now uses TclFreeObj instead of duplicating that code,
+ so it is now identical to Tcl_DecrRefCount.
+
+ * generic/tclObj.c: Changed Tcl_NewObj so it uses the TclNewObj macro
+ instead of duplicating the code. Adjusted TclFreeObj so it understands
+ the TCL_THREADS case described above.
+
+ * library/http2.1/http.tcl: Fixed a bug in the handling of the
+ state(status) variable when the -timeout flag is specified. Previously
+ it was possible to leave the status undefined instead of empty, which
+ caused errors in http::status
1999-10-28 Jeff Hobbs <hobbs@scriptics.com>
* unix/aclocal.m4: made it just include tcl.m4
- * library/tcltest1.0/tcltest.tcl: updated makeFile to return
- full pathname of file created
+ * library/tcltest1.0/tcltest.tcl: updated makeFile to return full
+ pathname of file created
* generic/tclStringObj.c: fixed Tcl_AppendStringsToObjVA so it only
- iterates once over the va_list (avoiding a memcpy of it,
- which is not portable).
+ iterates once over the va_list (avoiding a memcpy of it, which is not
+ portable).
* generic/tclEnv.c: fixed possible ABR error in environ array
* tests/scan.test:
- * generic/tclScan.c: added support for use of inline scan,
- XPG3 currently not included
+ * generic/tclScan.c: added support for use of inline scan, XPG3
+ currently not included
* tests/incr.test:
* tests/set.test:
- * generic/tclCompCmds.c: fixed improper bytecode handling of
- 'eval {set array($unknownvar) 5}' (also for incr) [Bug: 3184]
+ * generic/tclCompCmds.c: fixed improper bytecode handling of 'eval
+ {set array($unknownvar) 5}' (also for incr). [Bug 3184]
* win/tclWinTest.c: added testvolumetype command, as atime is
completely ignored for Windows FAT file systems
@@ -346,67 +341,67 @@
* unix/tclUnixPort.h: added utime.h to includes
* doc/file.n:
* tests/cmdAH.test:
- * generic/tclCmdAH.c: added time arguments to atime and mtime
- file command methods (support 'touch' functionality)
+ * generic/tclCmdAH.c: added time arguments to atime and mtime file
+ command methods (support 'touch' functionality)
1999-10-20 Jeff Hobbs <hobbs@scriptics.com>
- * unix/tclUnixNotfy.c: fixed event/io threading problems by
- making triggerPipe non-blocking [Bug: 2792]
+ * unix/tclUnixNotfy.c: fixed event/io threading problems by making
+ triggerPipe non-blocking. [Bug 2792]
* library/tcltest1.0/tcltest.tcl:
* generic/tclThreadTest.c: fixed mem leaks in threads
- * generic/tclResult.c: fixed Tcl_AppendResultVA so it only
- iterates once over the va_list (avoiding a memcpy of it,
- which is not portable).
+ * generic/tclResult.c: fixed Tcl_AppendResultVA so it only iterates
+ once over the va_list (avoiding a memcpy of it, which is not
+ portable).
* generic/regc_color.c: fixed mem leak and assertion, from HS
- * generic/tclCompile.c: removed savedChar trick that appeared to
- be causing a segv when the literal table was released
+ * generic/tclCompile.c: removed savedChar trick that appeared to be
+ causing a segv when the literal table was released
* tests/string.test:
- * generic/tclCmdMZ.c: fixed [string index] to return ByteArrayObj
- when indexing into one (test case string-5.16) [Bug: 2871]
+ * generic/tclCmdMZ.c: fixed [string index] to return ByteArrayObj when
+ indexing into one (test case string-5.16). [Bug 2871]
- * library/http2.1/http.tcl: protected gets with catch [Bug: 2665]
+ * library/http2.1/http.tcl: protected gets with catch. [Bug 2665]
1999-10-19 Jennifer Hom <jenn@scriptics.com>
* tests/tcltest.test:
* doc/tcltest.n:
- * library/tcltest1.0/tcltest.tcl: Removed the extra return at the
- end of the tcltest.tcl file, added version information about tcl.
+ * library/tcltest1.0/tcltest.tcl: Removed the extra return at the end
+ of the tcltest.tcl file, added version information about tcl.
Applied patches sent in by Andreas Kupries to add helper procs for
debug output, add 3 new flags (-testsdir, -load, -loadfile), and
- internally refactors common code for dealing with paths into
- separate procedures. [Bug: 2838, 2842]
+ internally refactors common code for dealing with paths into separate
+ procedures. [Bug 2838, 2842]
Merged code from core-8-2-1 branch that changes the checks for the
- value of tcl_interactive to also incorporate a check for the
- existence of the variable.
+ value of tcl_interactive to also incorporate a check for the existence
+ of the variable.
* tests/autoMkindex.test:
- * tests/pkgMkIndex.test: Explicitly cd to
- ::tcltest::testsDirectory at the beginning of the test run
+ * tests/pkgMkIndex.test: Explicitly cd to ::tcltest::testsDirectory at
+ the beginning of the test run
- * tests/basic.test: Use version information defined in tcltest
- instead of hardcoded version number
+ * tests/basic.test: Use version information defined in tcltest instead
+ of hardcoded version number
- * tests/socket.test: package require tcltest before attempting to
- use variable defined in tcltest namespace
+ * tests/socket.test: package require tcltest before attempting to use
+ variable defined in tcltest namespace
+
+ * tests/unixInit.test:
+ * tests/unixNotfy.test: Added explicit exits needed to avoid problems
+ when the tests area run in wish.
- * tests/unixInit.test:
- * tests/unixNotfy.test: Added explicit exits needed to avoid
- problems when the tests area run in wish.
-
1999-10-12 Jim Ingham <jingham@scriptics.com>
* mac/tclMacLoad.c: Stupid bug - we converted the filename to
external, but used the unconverted version.
- * mac/tclMacFCmd.c: Fix a merge error in the bug fix for [Bug: 2869]
+ * mac/tclMacFCmd.c: Fix a merge error in the bug fix for [Bug 2869]
1999-10-12 Jeff Hobbs <hobbs@scriptics.com>
@@ -423,21 +418,20 @@
* generic/tclRegexp.c:
* generic/tclTest.c:
* tests/reg.test: updated to Henry Spencer's new regexp engine
- (mid-Sept 99). Should greatly reduce stack space reqs.
+ (mid-Sept 99). Should greatly reduce stack space reqs.
* library/tcltest1.0/pkgIndex.tcl: fixed procs in pkgIndex.tcl file
* generic/tclEnv.c: fixed mem leak with putenv and DStrings
* doc/Encoding.3: corrected docs
* tests/basic.test: updated test cases for 8.3
- * tests/encoding.test: fixed test case that change system
- encoding to a double-byte one (this causes a bogus mem read
- error for purify)
+ * tests/encoding.test: fixed test case that change system encoding to
+ a double-byte one (this causes a bogus mem read error for purify)
* unix/Makefile.in: purify has to use -best-effort to instrument
* unix/tclAppInit.c: identified potential mem leak when compiling
tcltest (not critical)
- * unix/tclUnixPipe.c: fixed mem leak in TclpCreateProcess when
- doing alloc between vfork and execvp.
+ * unix/tclUnixPipe.c: fixed mem leak in TclpCreateProcess when doing
+ alloc between vfork and execvp.
* unix/tclUnixTest.c: fixed mem leak in findexecutable test command
1999-10-05 Jeff Hobbs <hobbs@scriptics.com>
@@ -452,127 +446,126 @@
* library/http2.1/http.tcl: fixed possible use of global c var.
* win/tclWinReg.c: fixed registry command to properly 'get'
- HKEY_PERFORMANCE_DATA root key data. Needs more work.
-
+ HKEY_PERFORMANCE_DATA root key data. Needs more work.
+
* generic/tclNamesp.c:
* generic/tclVar.c:
* generic/tclCmdIL.c: fixed comment typos
- * mac/tclMacFCmd.c: fixed filename stuff to support UTF-8 [Bug: 2869]
+ * mac/tclMacFCmd.c: fixed filename stuff to support UTF-8. [Bug 2869]
- * win/tclWinSerial.c: changed SerialSetOptionProc to return
- TCL_OK by default. (patch from Rolf Schroedter)
+ * win/tclWinSerial.c: changed SerialSetOptionProc to return TCL_OK by
+ default. (patch from Rolf Schroedter)
1999-09-21 Jennifer Hom <jenn@scriptics.com>
- * library/tcltest1.0/tcltest.tcl: Applied patches sent in by
- Andreas Kupries to fix typos in comments and ::tcltest::grep,
- fix hook redefinition problems, and change "string compare" to
- "string equal." [Bug: 2836, 2837, 2839, 2840]
+ * library/tcltest1.0/tcltest.tcl: Applied patches sent in by Andreas
+ Kupries to fix typos in comments and ::tcltest::grep, fix hook
+ redefinition problems, and change "string compare" to "string equal".
+ [Bug 2836, 2837, 2839, 2840]
1999-09-20 Jeff Hobbs <hobbs@scriptics.com>
* tests/env.test:
- * unix/Makefile.in: added support for AIX LIBPATH env var [Bug: 2793]
+ * unix/Makefile.in: added support for AIX LIBPATH env var. [Bug 2793]
removed second definition of INCLUDE_INSTALL_DIR (the one that
- referenced @includedir@) [Bug: 2805]
- * unix/dltest/Makefile.in: added -lc to LIBS [Bug: 2794]
+ referenced @includedir@) [Bug 2805]
+ * unix/dltest/Makefile.in: added -lc to LIBS. [Bug 2794]
1999-09-16 Jeff Hobbs <hobbs@scriptics.com>
- * tests/timer.test: changed after delay in timer test 6.29 from
- 1 to 10. [Bug: 2796]
+ * tests/timer.test: changed after delay in timer test 6.29 from 1 to
+ 10. [Bug 2796]
* tests/pkg.test:
* generic/tclPkg.c: fixed package version check to disallow 1.2..3
- [Bug: 2539]
-
- * unix/Makefile.in: fixed gendate target - this never worked
- since RCS was intro'd.
- * generic/tclGetDate.y: updated to reflect previous changes
- to tclDate.c (leap year calc) and added CEST and UCT time zone
- recognition. Fixed 4 missing UCHAR() casts. [Bug: 2717, 954,
- 1245, 1249]
-
- * generic/tclCkalloc.c: changed Tcl_DumpActiveMemory to really
- dump to stderr and close it [Bug: 725] and changed Tcl_Ckrealloc
- and Tcl_Ckfree to not bomb when NULL was passed in [Bug: 1719]
- and changed Tcl_Alloc, et al to not panic when a alloc request
- for zero came through and NULL was returned (valid on AIX, Tru64)
- [Bug: 2795, etc]
+ [Bug 2539]
+
+ * unix/Makefile.in: fixed gendate target - this never worked since RCS
+ was intro'd.
+ * generic/tclGetDate.y: updated to reflect previous changes to
+ tclDate.c (leap year calc) and added CEST and UCT time zone
+ recognition. Fixed 4 missing UCHAR() casts. [Bug 2717, 954, 1245,
+ 1249]
+
+ * generic/tclCkalloc.c: changed Tcl_DumpActiveMemory to really dump to
+ stderr and close it [Bug 725] and changed Tcl_Ckrealloc and
+ Tcl_Ckfree to not bomb when NULL was passed in [Bug 1719] and changed
+ Tcl_Alloc, et al to not panic when a alloc request for zero came
+ through and NULL was returned (valid on AIX, Tru64) [Bug 2795, etc]
* tests/clock.test:
* doc/clock.n:
- * generic/tclClock.c: added -milliseconds switch to clock clicks
- to guarantee that the return value of clicks is in the millisecs
- granularity [Bug: 2682, 1332]
+ * generic/tclClock.c: added -milliseconds switch to clock clicks to
+ guarantee that the return value of clicks is in the millisecs
+ granularity. [Bug 2682, 1332]
1999-09-15 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclIOCmd.c: fixed potential core dump in conjunction
- with stacked channels with result obj manipulation in
- Tcl_ReadChars [Bug: 2623]
+ * generic/tclIOCmd.c: fixed potential core dump in conjunction with
+ stacked channels with result obj manipulation in Tcl_ReadChars. [Bug
+ 2623]
* tests/format.test:
- * generic/tclCmdAH.c: fixed translation of %0#s in format [Bug: 2605]
+ * generic/tclCmdAH.c: fixed translation of %0#s in format. [Bug 2605]
- * doc/msgcat.n: fixed \\ bug in example [Bug: 2548]
+ * doc/msgcat.n: fixed \\ bug in example. [Bug 2548]
* unix/tcl.m4:
- * unix/aclocal.m4: added fix for FreeBSD-[1-2] recognition
- [Bug: 2070] and fix for IRIX SHLIB_LB_LIBS. [Bug: 2610]
+ * unix/aclocal.m4: added fix for FreeBSD-[1-2] recognition [Bug 2070]
+ and fix for IRIX SHLIB_LB_LIBS. [Bug 2610]
* doc/array.n:
* tests/var.test:
* tests/set.test:
- * generic/tclVar.c: added an array unset operation, with docs
- and tests. Variation of [Bug: 1775]. Added fix in TclArraySet
- to check when trying to set in a non-existent namespace. [Bug: 2613]
+ * generic/tclVar.c: added an array unset operation, with docs and
+ tests. Variation of [Bug 1775]. Added fix in TclArraySet to check
+ when trying to set in a non-existent namespace. [Bug 2613]
1999-09-14 Jeff Hobbs <hobbs@scriptics.com>
* tests/linsert.test:
* doc/linsert.n:
- * generic/tclCmdIL.c: fixed end-int interpretation of linsert
- to correctly calculate value for end, added test and docs [Bug: 2693]
+ * generic/tclCmdIL.c: fixed end-int interpretation of linsert to
+ correctly calculate value for end, added test and docs. [Bug 2693]
* doc/regexp.n:
* doc/regsub.n:
* tests/regexp.test:
- * generic/tclCmdMZ.c: add -start switch to regexp and regsub
- with docs and tests
+ * generic/tclCmdMZ.c: add -start switch to regexp and regsub with docs
+ and tests
* doc/switch.n: added proper use of comments to example.
- * generic/tclCmdMZ.c: changed switch to complain when an error
- occurs that seems to be due to a misplaced comment.
+ * generic/tclCmdMZ.c: changed switch to complain when an error occurs
+ that seems to be due to a misplaced comment.
- * generic/tclCmdMZ.c: fixed illegal ref for \[0-9] substitutions
- in regsub [Bug: 2723]
+ * generic/tclCmdMZ.c: fixed illegal ref for \[0-9] substitutions in
+ regsub. [Bug 2723]
- * generic/tclCmdMZ.c: changed [string equal] to return an Int
- type object (was a Boolean)
+ * generic/tclCmdMZ.c: changed [string equal] to return an Int type
+ object (was a Boolean)
1999-09-01 Jennifer Hom <jenn@scriptics.com>
- * library/tcltest1.0/tcltest.tcl: Process command-line arguments
- only ::tcltest doesn't have a child namespace (requires that
- command-line args are processed in that namespace)
+ * library/tcltest1.0/tcltest.tcl: Process command-line arguments only
+ ::tcltest doesn't have a child namespace (requires that command-line
+ args are processed in that namespace)
1999-09-01 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclParseExpr.c: changed '"' to '\"' to make FreeBSD
- happy [Bug: 2625]
- * generic/tclProc.c: moved static buf to better location and
- changed static msg that would overflow in ProcessProcResultCode
- [Bug: 2483] and added Tcl_DStringFree to Tcl_ProcObjCmd.
- Also reworked size of static buffers.
+ * generic/tclParseExpr.c: changed '"' to '\"' to make FreeBSD happy.
+ [Bug 2625]
+ * generic/tclProc.c: moved static buf to better location and changed
+ static msg that would overflow in ProcessProcResultCode [Bug 2483]
+ and added Tcl_DStringFree to Tcl_ProcObjCmd. Also reworked size of
+ static buffers.
* tests/stringObj.test: added test 9.11
- * generic/tclStringObj.c: changed Tcl_AppendObjToObj to
- properly handle the 1-byte dest and mixed src case where
- both had had Unicode string len checks made on them. [Bug: 2678]
+ * generic/tclStringObj.c: changed Tcl_AppendObjToObj to properly
+ handle the 1-byte dest and mixed src case where both had had Unicode
+ string len checks made on them. [Bug 2678]
* unix/aclocal.m4:
- * unix/tcl.m4: adjusted fix from 8-21 to add -bnoentry to the
- AIX-* case and readjusted the range
+ * unix/tcl.m4: adjusted fix from 8-21 to add -bnoentry to the AIX-*
+ case and readjusted the range
1999-08-31 Jennifer Hom <jenn@scriptics.com>
@@ -588,79 +581,76 @@
* tests/exec.test:
* tests/io.test:
* tests/event.test:
- * tests/tcltest.test: Added 'exit' calls to scripts that the tests
+ * tests/tcltest.test: Added 'exit' calls to scripts that the tests
themselves write, and removed accidental checkin of knownBugThreaded
constraints for Solaris and Linux.
-
- * library/tcltest1.0/tcltest.tcl: Modified tcltest so that
- variables are only initialized to their default values if they did
- not previously exist.
+
+ * library/tcltest1.0/tcltest.tcl: Modified tcltest so that variables
+ are only initialized to their default values if they did not
+ previously exist.
1999-08-26 Jennifer Hom <jenn@scriptics.com>
* tests/tcltest.test:
- * library/tcltest1.0/tcltest.tcl: Added a -args flag that sets a
- variable named ::tcltest::parameters based on whatever's being
- sent in as the argument to the -args flag.
+ * library/tcltest1.0/tcltest.tcl: Added a -args flag that sets a
+ variable named ::tcltest::parameters based on whatever's being sent in
+ as the argument to the -args flag.
1999-08-23 Jennifer Hom <jenn@scriptics.com>
- * tests/tcltest.test: Added additional tests for -tmpdir, marked
- all tests that use exec as unixOrPc.
+ * tests/tcltest.test: Added additional tests for -tmpdir, marked all
+ tests that use exec as unixOrPc.
* tests/encoding.test:
- * tests/interp.test:
+ * tests/interp.test:
* tests/macFCmd.test:
* tests/parseOld.test:
- * tests/regexp.test: Applied patches from Jim Ingham to add
- encoding to a Mac only interp test, change an error message in
- macFCmd.tet, put a comment in parseOld.test, fix tests using the
- testencoding path command, and put unixOrPc constraints on tests
- that use exec.
+ * tests/regexp.test: Applied patches from Jim Ingham to add encoding
+ to a Mac only interp test, change an error message in macFCmd.tet, put
+ a comment in parseOld.test, fix tests using the testencoding path
+ command, and put unixOrPc constraints on tests that use exec.
1999-08-21 Jeff Hobbs <hobbs@scriptics.com>
- * unix/aclocal.m4: Changed AIX-4.[2-9] check to AIX-4.[1-9]
- [Bug: 1909]
+ * unix/aclocal.m4: Changed AIX-4.[2-9] check to AIX-4.[1-9] [Bug 1909]
1999-08-20 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclPosixStr.c: fixed typo [Bug: 2592]
+ * generic/tclPosixStr.c: fixed typo. [Bug 2592]
- * doc/*: fixed various nroff bugs in man pages [Bug: 2503 2588]
+ * doc/*: fixed various nroff bugs in man pages. [Bug 2503 2588]
1999-08-19 Jeff Hobbs <hobbs@scriptics.com>
- * win/README.binary: fixed version info and some typos [Bug: 2561]
-
+ * win/README.binary: fixed version info and some typos. [Bug 2561]
+
* doc/interp.n: updated list of commands available in a safe
- interpreter [Bug: 2526]
+ interpreter. [Bug 2526]
* generic/tclIO.c: changed Tcl_GetChannelNames* to use style guide
headers (pleases HP cc)
1999-08-18 Jeff Hobbs <hobbs@scriptics.com>
- * doc/Eval.3: fixed doc on input args [Bug: 2114]
+ * doc/Eval.3: fixed doc on input args. [Bug 2114]
* doc/OpenFileChnl.3:
* doc/file.n:
* tests/cmdAH.test:
* tclIO.c:
* tclCmdAH.c: added "file channels ?pattern?" tcl command, with
- associated Tcl_GetChannelNames and Tcl_GetChannelNamesEx public
- C APIs (added to tcl.decls as well), with docs and tests.
+ associated Tcl_GetChannelNames and Tcl_GetChannelNamesEx public C APIs
+ (added to tcl.decls as well), with docs and tests.
* tests/expr.test:
- * generic/tclCompile.c: add TCL_TOKEN_VARIABLE to the part types
- that cause differed compilation for exprs, to correct the expr
- double-evaluation problem for vars. Added test cases.
- Related to [Bug: 732]
-
- * unix/Makefile.in: changed the dependency structure so that
- install-* is dependent on * (ie - install-binaries is dependent
- on binaries).
-
+ * generic/tclCompile.c: add TCL_TOKEN_VARIABLE to the part types that
+ cause differed compilation for exprs, to correct the expr
+ double-evaluation problem for vars. Added test cases. Related to [Bug
+ 732]
+
+ * unix/Makefile.in: changed the dependency structure so that install-*
+ is dependent on * (ie - install-binaries is dependent on binaries).
+
* library/auto.tcl:
* library/init.tcl:
* library/ldAout.tcl:
@@ -668,14 +658,13 @@
* library/safe.tcl:
* library/word.tcl:
* library/http2.1/http.tcl:
- * library/msgcat1.0/msgcat.tcl: updated libraries to better
- Tcl style guide (no more string comparisons with == or !=, spacing
- changes).
+ * library/msgcat1.0/msgcat.tcl: updated libraries to better Tcl style
+ guide (no more string comparisons with == or !=, spacing changes).
1999-08-05 Jim Ingham <jingham@cygnus.com>
* mac/tclMacProjects.sea.hqx: Rearrange the projects so that the build
- directory is separate from the sources. Much more convenient!
+ directory is separate from the sources. Much more convenient!
1999-08-13 Scott Redman <redman@scriptics.com>
@@ -683,18 +672,18 @@
1999-08-12 Scott Stanton <stanton@scriptics.com>
- * win/Makefile.in: Added COMPILE_DEBUG_FLAGS macro to make it
- easier to turn on compiler tracing.
+ * win/Makefile.in: Added COMPILE_DEBUG_FLAGS macro to make it easier
+ to turn on compiler tracing.
- * tests/parse.test:
- * generic/tclParse.c: Fixed bug in Tcl_EvalEx where the termOffset
- was not being updated in cases where the evaluation returned a non
- TCL_OK error code. [Bug: 2535]
+ * tests/parse.test:
+ * generic/tclParse.c: Fixed bug in Tcl_EvalEx where the termOffset was
+ not being updated in cases where the evaluation returned a non TCL_OK
+ error code. [Bug 2535]
1999-08-12 Scott Redman <redman@scriptics.com>
- * win/tclWinSerial.c: Applied patch from Petteri Kettunen to
- remove compiler warning.
+ * win/tclWinSerial.c: Applied patch from Petteri Kettunen to remove
+ compiler warning.
1999-08-10 Scott Redman <redman@scriptics.com>
@@ -707,12 +696,12 @@
Windows (and he fixed the bug in the Unix thread implementation).
1999-08-09 Brent Welch <welch@scriptics.com>
-
+
* generic/tcl.decls:
* generic/tclAlloc.c:
* generic/tclCkalloc.c:
* generic/tclCmdIL.c:
- * generic/tclDecls.h:
+ * generic/tclDecls.h:
* generic/tclIO.c:
* generic/tclInt.decls:
* generic/tclIntDecls.h:
@@ -720,12 +709,11 @@
* generic/tclVar.c:
* mac/tclMacThrd.c:
* unix/tclUnixThrd.c:
- * win/tclWinThrd.c: Added use of Tcl_GetAllocMutex to tclAlloc.c
- and tclCkalloc.c so they can be linked against alternate thread
- packages. Added Tcl_GetChannelNames to tclIO.c. Added
- TclVarTraceExists hook so "info exists" triggers read traces
- exactly like it did in Tcl 7.6. Stubs table changes to reflect new
- internal and external APIs.
+ * win/tclWinThrd.c: Added use of Tcl_GetAllocMutex to tclAlloc.c and
+ tclCkalloc.c so they can be linked against alternate thread packages.
+ Added Tcl_GetChannelNames to tclIO.c. Added TclVarTraceExists hook so
+ "info exists" triggers read traces exactly like it did in Tcl 7.6.
+ Stubs table changes to reflect new internal and external APIs.
1999-08-09 Jeff Hobbs <hobbs@scriptics.com>
@@ -733,36 +721,36 @@
machines and int overflow testing.
* tests/tcltest.test: fixed minor error in 8.2 result (from dgp)
- * doc/Object.3: clarified Tcl_DecrRefCount docs [Bug: 1952]
- * doc/array.n: clarified array pattern docs [Bug: 1330]
- * doc/clock.n: fixed clock docs [Bug: 693]
+ * doc/Object.3: clarified Tcl_DecrRefCount docs. [Bug 1952]
+ * doc/array.n: clarified array pattern docs. [Bug 1330]
+ * doc/clock.n: fixed clock docs. [Bug 693]
* doc/lindex.n: clarified to account for new end-int behavior.
- * doc/string.n: fixed formatting errors [Bug: 2188 2189]
- * doc/tclvars.n: fixed doc error [Bug: 2042]
- * library/init.tcl: fixed path handling in auto_execok (it could
- miss including the normal path on some Windows machines) [Bug: 1276]
+ * doc/string.n: fixed formatting errors. [Bug 2188 2189]
+ * doc/tclvars.n: fixed doc error. [Bug 2042]
+ * library/init.tcl: fixed path handling in auto_execok (it could miss
+ including the normal path on some Windows machines). [Bug 1276]
1999-08-05 Jeff Hobbs <hobbs@scriptics.com>
- * doc/tclvars.n: Made it clear that tcl_pkgPath was not set
- for Windows (already mentioned in init.tcl) [Bug: 2455]
- * generic/tclLiteral.c: fixed reference to bytes that might
- not be null terminated (using objPtr->bytes, which is) [Bug: 2496]
- * library/http2.1/http.tcl: Made use of "i" in init section use
- local var and start at 0 (was 1). [Bug: 2502]
+ * doc/tclvars.n: Made it clear that tcl_pkgPath was not set for
+ Windows (already mentioned in init.tcl). [Bug 2455]
+ * generic/tclLiteral.c: fixed reference to bytes that might not be
+ null terminated (using objPtr->bytes, which is). [Bug 2496]
+ * library/http2.1/http.tcl: Made use of "i" in init section use local
+ var and start at 0 (was 1). [Bug 2502]
1999-08-04 Scott Stanton <stanton@scriptics.com>
* tests/reg.test: Added test for REG_EXPECT bug fixed by Henry's
patch.
- * generic/regc_nfa.c:
- * generic/regcomp.c:
+ * generic/regc_nfa.c:
+ * generic/regcomp.c:
* generic/rege_dfa.c:
- * generic/regexec.c:
+ * generic/regexec.c:
* generic/regguts.h: Applied patches supplied by Henry Spencer to
greatly enhance the performance of certain classes of regular
- expressions. [Bug: 2440, 2447]
+ expressions. [Bug 2440, 2447]
1999-08-03 Scott Redman <redman@scriptics.com>
@@ -773,7 +761,7 @@
* unix/configure.in:
* win/configure.in: Change beta level to b2.
-
+
* generic/tcl.h:
* generic/tcl.decls:
* generic/tclDecls.h:
@@ -782,104 +770,101 @@
* generic/tclIntDecls.h:
* generic/tclRegexp.h:
* generic/tclStubInit.c: Move some exported public and internal
- functions to the stub tables. Removed functions that are in the
- stub tables (from this and previous changes) from the original
- header files.
+ functions to the stub tables. Removed functions that are in the stub
+ tables (from this and previous changes) from the original header
+ files.
1999-08-01 Scott Redman <redman@scriptics.com>
- * win/tclWinSock.c: Added comment block to SocketThread()
- function. Added code to avoid calling TerminateThread(), but
- instead to send a message to the socket event window to tell it to
- terminate its thread.
+ * win/tclWinSock.c: Added comment block to SocketThread() function.
+ Added code to avoid calling TerminateThread(), but instead to send a
+ message to the socket event window to tell it to terminate its thread.
1999-07-30 Jennifer Hom <jenn@scriptics.com>
* tests/tcltest.test:
- * library/tcltest1.0/tcltest.tcl: Exit with non-zero status if
- there were problems with the way the test suite was started
- (e.g. wrong # arguments).
+ * library/tcltest1.0/tcltest.tcl: Exit with non-zero status if there
+ were problems with the way the test suite was started (e.g. wrong #
+ arguments).
1999-07-30 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclInt.decls: added declaractions necessary for the
- Tcl test code to work wth stubs [Bug: 2445]
+ * generic/tclInt.decls: added declaractions necessary for the Tcl test
+ code to work wth stubs. [Bug 2445]
-1999-07-30 <redman@scriptics.com>
+1999-07-30 Scott Redman <redman@scriptics.com>
* win/tclWinPipe.c:
- * win/Makefile.in: Fixing launching of 16-bit apps on Win9x from
- wish. The command line was primed with tclpip82.dll, but it was
- ignored. Fixed that, then fixed the gmake makefile to build
- tclpip82.dll as an executable.
+ * win/Makefile.in: Fixing launching of 16-bit apps on Win9x from wish.
+ The command line was primed with tclpip82.dll, but it was ignored.
+ Fixed that, then fixed the gmake makefile to build tclpip82.dll as an
+ executable.
- * win/tclWinSock.c: Applied small patch to get thread-specific
- data after initializing the socket driver.
+ * win/tclWinSock.c: Applied small patch to get thread-specific data
+ after initializing the socket driver.
- * unix/tclUnixThrd.c: Applied patch to fix threads on Irix 6.5.
- Patch from James Dennett. [Bug: 2450]
+ * unix/tclUnixThrd.c: Applied patch to fix threads on Irix 6.5. Patch
+ from James Dennett. [Bug 2450]
- * tests/info.test: Enable test for tclParse.c change (info
- complete).
-
-1999-07-30 <hobbs@scriptics.com>
+ * tests/info.test: Enable test for tclParse.c change (info complete).
+
+1999-07-30 Jeff Hobbs <hobbs@scriptics.com>
- * tclIO.c: added fix for Kupries' trf patch [Bug: 2386]
+ * tclIO.c: added fix for Kupries' trf patch. [Bug 2386]
* tclParse.c: fixed bug in info complete regarding nested square
- brackets [Bug: 2382, 2466]
-
-1999-07-29 <redman@scriptics.com>
+ brackets. [Bug 2382, 2466]
+
+1999-07-29 Scott Redman <redman@scriptics.com>
* win/tclWinChan.c: Allow tcl to open CON and NUL, even for std
- channels. Checking for bad/unusable std channels was moved to Tk
- since its only purpose was to check whether to use the Tk Console
- Window for the std channels. [Bug: 2393 2392 2209 2458]
+ channels. Checking for bad/unusable std channels was moved to Tk since
+ its only purpose was to check whether to use the Tk Console Window for
+ the std channels. [Bug 2393 2392 2209 2458]
* unix/mkLinks.tcl: Applied patch to avoid linking pack.n to
- pack-old.n. Patch from Don Porter. [Bug: 2469]
+ pack-old.n. Patch from Don Porter. [Bug 2469]
+
+ * doc/Encoding.n: Applied patch to fix typo in .SH NAME line. Patch
+ from Don Porter. [Bug 2451]
- * doc/Encoding.n: Applied patch to fix typo in .SH NAME line.
- Patch from Don Porter. [Bug: 2451]
-
- * win/tclWinSock.c: Free Win32 Event handles when destroying
- the socket helper thread.
+ * win/tclWinSock.c: Free Win32 Event handles when destroying the
+ socket helper thread.
-1999-07-28 <jenn@scriptics.com>
+1999-07-28 Jennifer Hom <jenn@scriptics.com>
* tests/tcltest.test:
* library/tcltest1.0/tcltest.tcl: Fixed the condition under which
- ::tcltest::PrintError had an infinite loop problem and added a
- test case for it. Added an optional argument to
- ::tcltest::getMatchingFiles telling it where to search for test
- files.
+ ::tcltest::PrintError had an infinite loop problem and added a test
+ case for it. Added an optional argument to ::tcltest::getMatchingFiles
+ telling it where to search for test files.
-1999-07-27 <redman@scriptics.com>
+1999-07-27 Scott Redman <redman@scriptics.com>
- * tools/tclSplash.bmp: Updated Windows installer bitmap
- to ready Tcl/Tk Version 8.2.
+ * tools/tclSplash.bmp: Updated Windows installer bitmap to ready
+ Tcl/Tk Version 8.2.
-1999-07-26 <redman@scriptics.com>
+1999-07-26 Scott Redman <redman@scriptics.com>
- * tests/tcltest.test: Need to close the new core file, there
- seems to be a hang in threaded WinNT if the file isn't closed.
- Open issue, need to fix that hang.
+ * tests/tcltest.test: Need to close the new core file, there seems to
+ be a hang in threaded WinNT if the file isn't closed. Open issue, need
+ to fix that hang.
- * tests/httpold.test: Add time delay in response from Http server
- so that test cases can properly detect timeout conditions with
- threads enabled on multi-CPU WinNT.
+ * tests/httpold.test: Add time delay in response from Http server so
+ that test cases can properly detect timeout conditions with threads
+ enabled on multi-CPU WinNT.
- * tests/winFCmd.test: Test case winFcmd-1.33 was looking for
- c:\windows, which may not exist. Instead, create a new directory
- on c:\ and use it for the test.
+ * tests/winFCmd.test: Test case winFcmd-1.33 was looking for
+ c:\windows, which may not exist. Instead, create a new directory on
+ c:\ and use it for the test.
* win/tclWinConsole.c:
* win/tclWinPipe.c:
- * win/tclWinSock.c: Fix terminating helper threads by holding any
- mutexes from the primary thread while waiting for the helper
- thread to terminate. Without these changes, the test suite hangs
- on WinNT with 2 CPUs and threads enabled. Open issue, seems to be
- a sporadic hang on dual CPU systems still (very rare).
+ * win/tclWinSock.c: Fix terminating helper threads by holding any
+ mutexes from the primary thread while waiting for the helper thread to
+ terminate. Without these changes, the test suite hangs on WinNT with 2
+ CPUs and threads enabled. Open issue, seems to be a sporadic hang on
+ dual CPU systems still (very rare).
1999-07-26 Jennifer Hom <jenn@scriptics.com>
@@ -888,92 +873,91 @@
* doc/tcltest.n: Cleaned up code in ::tcltest::PrintError, revised
documentation, and added tests for the tcltest package.
-1999-07-23 <redman@scriptics.com>
+1999-07-23 Scott Redman <redman@scriptics.com>
* tests/info.test:
- * generic/tclParse.c: Removed patch for info command, breaks test
- cases on Unix. Patch was bad and needs to be redone
- properly. [Bug: 2382]
+ * generic/tclParse.c: Removed patch for info command, breaks test
+ cases on Unix. Patch was bad and needs to be redone properly. [Bug
+ 2382]
-1999-07-22 <redman@scriptics.com>
+1999-07-22 Scott Redman <redman@scriptics.com>
* Changed version to 8.2b2.
- * win/tclWinSock.c: Fixed hang with threads enabled, fixed
- semaphores with threads disabled.
+ * win/tclWinSock.c: Fixed hang with threads enabled, fixed semaphores
+ with threads disabled.
* win/safe.test: Fixed safe-6.3 with threads enabled.
-
- * win/Makefile.in: Fixed calling of tcltest to fix safe.test
- failures due to path TCL_LIBRARY path.
- * win/tclWinPort.h: Block out include of sys/*.h in order to
- build extensions with MetroWerks compiler for Win32. [Bug: 2385]
-
+ * win/Makefile.in: Fixed calling of tcltest to fix safe.test failures
+ due to path TCL_LIBRARY path.
+
+ * win/tclWinPort.h: Block out include of sys/*.h in order to build
+ extensions with MetroWerks compiler for Win32. [Bug 2385]
+
* generic/tclCmdMZ.c:
* generic/tclIO.c: Fix ANSI-style prototypes based on patch from
- Ulrich Ring. [Bug: 2391]
-
- * unix/Makefile.in: Need to make install-sh executable before
- calling (with chmod +x). [Bug: 2413]
-
+ Ulrich Ring. [Bug 2391]
+
+ * unix/Makefile.in: Need to make install-sh executable before calling
+ (with chmod +x). [Bug 2413]
+
* tests/var.test:
- * generic/tclVar.c: Fixed bug that caused a seg. fault when using
- "array set a(b) {}", which is a bad array name anyway. Now the
- "array set" command will return an error in this case. Added test
- case and fixed existing test. [Bug: 2427]
+ * generic/tclVar.c: Fixed bug that caused a seg. fault when using
+ "array set a(b) {}", which is a bad array name anyway. Now the "array
+ set" command will return an error in this case. Added test case and
+ fixed existing test. [Bug 2427]
-1999-07-21 <redman@scriptics.com>
+1999-07-21 Scott Redman <redman@scriptics.com>
* tests/info.test:
- * generic/tclParse.c: Applied patch to fix "info complete"
- for the string {[a [b]}. Patch from Peter Spjuth. [Bug: 2382]
+ * generic/tclParse.c: Applied patch to fix "info complete" for the
+ string {[a [b]}. Patch from Peter Spjuth. [Bug 2382]
* doc/Utf.3:
* generic/tcl.decls:
* generic/tclDecls.h:
* generic/tclUtf.c: Changed function declarations in
non-platform-specific public APIs to use "unsigned long" instead of
- "size_t", which may not be defined on certain compilers (rather
- than include sys/types.h, which may not exist).
-
+ "size_t", which may not be defined on certain compilers (rather than
+ include sys/types.h, which may not exist).
+
* unix/Makefile.in: Added the Windows configure script to the
distribution file list, already shipping configure.in and the .m4
files, but needed the configure script itself.
-
+
* win/makefile.vc: Changed version number of DDE package in VC++
makefile to use 1.1 instead of 1.0.
* doc/open.n: Added documentation of \\.\comX notation for opening
serial ports on Windows (alternative to comX:).
-
+
* tests/ioCmd.test:
* doc/open.n:
* win/tclWinSerial.c: Applied patch from Rolf Schroedter to add
- -pollinterval option to fconfigure to modify the maxblocktime used
- in the fileevent polling. Added documentation and fixed the test
- case as well.
-
- * win/tclWinSock.c: Modified 8.1.0 version of the Win32 socket
- driver to move the handling of the socket event window in a
- separate thread. It also turned out that Win95 & Win98 were, in
- some cases, getting multiple FD_ACCEPTs but only handling one.
- Added a count for the FD_ACCEPT to take care of this. Tested on
- NT4 SP3, NT4 SP4, Win95, and Win98.
- [Bug: 2178 2256 2259 2329 2323 2355]
-
-1999-07-21 <jpeek@scriptics.com>
+ -pollinterval option to fconfigure to modify the maxblocktime used in
+ the fileevent polling. Added documentation and fixed the test case as
+ well.
+
+ * win/tclWinSock.c: Modified 8.1.0 version of the Win32 socket driver
+ to move the handling of the socket event window in a separate thread.
+ It also turned out that Win95 & Win98 were, in some cases, getting
+ multiple FD_ACCEPTs but only handling one. Added a count for the
+ FD_ACCEPT to take care of this. Tested on NT4 SP3, NT4 SP4, Win95, and
+ Win98. [Bug 2178 2256 2259 2329 2323 2355]
+
+1999-07-21 Jerry Peek <jpeek@scriptics.com>
* README: Small tweaks to clean up typos and wording.
1999-07-20 Melissa Hirschl <hershey@matisse.scriptics.com>
- * generic/tclInitScript.h:
- * unix/tclUnixInit.c: merged code with 8.0.5. We now use an
+ * generic/tclInitScript.h:
+ * unix/tclUnixInit.c: merged code with 8.0.5. We now use an
intermediate global tcl var "tclDefaultLibrary" to keep the
- "tcl_library" var from being set by the default value in the
- Makefile. Also fixed a bug in which caused the value of
- TCL_LIBRARY env var to be ignored.
+ "tcl_library" var from being set by the default value in the Makefile.
+ Also fixed a bug in which caused the value of TCL_LIBRARY env var to
+ be ignored.
* unix/tclWinInit.c: just updated some comments.
1999-07-19 Melissa Hirschl <hershey@matisse.scriptics.com>
@@ -981,119 +965,115 @@
* library/http2.1/http.tcl: updated -useragent text to say version
2.1.
-1999-07-16 <redman@scriptics.com>
+1999-07-16 Scott Redman <redman@scriptics.com>
* generic/tcl.decls:
* generic/tclDecls.h:
- * generic/tclStubInit.c: Add Tcl_SetNotifier to stub table.
- [Bug: 2364]
-
+ * generic/tclStubInit.c: Add Tcl_SetNotifier to stub table. [Bug 2364]
+
* unix/aclocal.m4:
- * unix/tcl.m4: Add check for Alpha/Linux to correct the IEEE
- floating flag to the compiler, should be -mieee. Patch from Don
- Porter.
-
- * tools/tcl.hpj.in: Change version number of .cnt file referenced
- in .HPJ file.
-
-1999-07-15 <redman@scriptics.com>
-
+ * unix/tcl.m4: Add check for Alpha/Linux to correct the IEEE floating
+ flag to the compiler, should be -mieee. Patch from Don Porter.
+
+ * tools/tcl.hpj.in: Change version number of .cnt file referenced in
+ .HPJ file.
+
+1999-07-15 Scott Redman <redman@scriptics.com>
+
* tools/tcl.wse.in: Fixed naming of target files for Windows.
-1999-07-14 <jpeek@scriptics.com>
+1999-07-14 Jerry Peek <jpeek@scriptics.com>
* doc/re_syntax.n: Deleted sentence as suggested by Scott S.
-1999-07-12 <jpeek@scriptics.com>
+1999-07-12 Jerry Peek <jpeek@scriptics.com>
- * doc/re_syntax.n: Removed two notes to myself (oops), cleaned
- up wording, fixed changebars, made two examples easier to read.
+ * doc/re_syntax.n: Removed two notes to myself (oops), cleaned up
+ wording, fixed changebars, made two examples easier to read.
-1999-07-11 <redman@scriptics.com>
+1999-07-11 Scott Redman <redman@scriptics.com>
- * win/makefile.vc: Since the makefile.vc should continue to work
- while we're working out bugs/issues in the new TEA-style
+ * win/makefile.vc: Since the makefile.vc should continue to work while
+ we're working out bugs/issues in the new TEA-style
autoconf/configure/gmake build mechanism for Windows, the version
- numbers of the Tcl libraries need to remain in sync. Modified the
+ numbers of the Tcl libraries need to remain in sync. Modified the
version numbers in the makefile to reflect the change to 8.2b1.
-1999-07-09 <redman@scriptics.com>
+1999-07-09 Scott Redman <redman@scriptics.com>
- * win/configure.in: Eval DLLSUFFIX, LIBSUFFIX, and EXESUFFIX in
- the configure script so that substitutions get expanded before
- being placed in the Makefile. The "d" portion for debug libraries
- and DLLs was not being set properly.
-
-1999-07-08 <stanton@scriptics.com>
+ * win/configure.in: Eval DLLSUFFIX, LIBSUFFIX, and EXESUFFIX in the
+ configure script so that substitutions get expanded before being
+ placed in the Makefile. The "d" portion for debug libraries and DLLs
+ was not being set properly.
- * tests/string.test:
- * generic/tclCmdMZ.c: Fixed bug in string range bounds checking
- code.
+1999-07-08 Scott Stanton <stanton@scriptics.com>
+
+ * tests/string.test:
+ * generic/tclCmdMZ.c: Fixed bug in string range bounds checking code.
1999-07-08 Jennifer Hom <jenn@scriptics.com>
* doc/tcltest.n:
* library/tcltest1.0/tcltest.tcl: Removed -asidefromdir and
- -relateddir flags, removed unused ::tcltest::dotests proc, cleaned
- up implementation of core file checking, and fixed the code that
- checks for 1-letter flag abbreviations.
+ -relateddir flags, removed unused ::tcltest::dotests proc, cleaned up
+ implementation of core file checking, and fixed the code that checks
+ for 1-letter flag abbreviations.
-1999-07-08 <stanton@scriptics.com>
+1999-07-08 Scott Stanton <stanton@scriptics.com>
- * win/Makefile.in: Added tcltest target so runtest works
- properly. Added missing names to the clean/distclean targets.
+ * win/Makefile.in: Added tcltest target so runtest works properly.
+ Added missing names to the clean/distclean targets.
- * tests/reg.test:
- * generic/rege_dfa.c: Applied fix supplied by Henry Spencer for
- bug in DFA state caching under lookahead conditions. [Bug: 2318]
+ * tests/reg.test:
+ * generic/rege_dfa.c: Applied fix supplied by Henry Spencer for bug in
+ DFA state caching under lookahead conditions. [Bug 2318]
-1999-07-07 <stanton@scriptics.com>
+1999-07-07 Scott Stanton <stanton@scriptics.com>
* doc/fconfigure.n: Clarified default buffering behavior for the
- standard channels. [Bug: 2335]
+ standard channels. [Bug 2335]
-1999-07-06 <redman@scriptics.com>
+1999-07-06 Scott Redman <redman@scriptics.com>
- * win/tclWinSerial.c: New implementation of serial port driver
- from Rolf Shroedter (Rolf.Schroedter@dlr.de) that allows more than
- one byte to be read from the port. Implemented using polling
- instead of threads, there is a max. 10ms latency between checking the
- port for file events. [Bug: 1980 2217]
+ * win/tclWinSerial.c: New implementation of serial port driver from
+ Rolf Shroedter (Rolf.Schroedter@dlr.de) that allows more than one byte
+ to be read from the port. Implemented using polling instead of
+ threads, there is a max. 10ms latency between checking the port for
+ file events. [Bug 1980 2217]
-1999-07-06 <welch@scriptics.com>
+1999-07-06 Brent Welch <welch@scriptics.com>
- * library/http2.0/http.tcl: Fixed the -timeout option so it
- handles timeouts that occur during connection attempts to
- hosts that are down (the only case that really matters!)
+ * library/http2.0/http.tcl: Fixed the -timeout option so it handles
+ timeouts that occur during connection attempts to hosts that are down
+ (the only case that really matters!)
-1999-07-03 <welch@scriptics.com>
+1999-07-03 Brent Welch <welch@scriptics.com>
* doc/ChnlStack.3:
* generic/tcl.decls:
- * generic/tclIO.c: Added a new variant of the "Trf patch"
- from Andreas Kupres that adds new C APIs Tcl_StackChannel,
- Tcl_UnstackChannel, and Tcl_GetStackedChannel.
+ * generic/tclIO.c: Added a new variant of the "Trf patch" from Andreas
+ Kupres that adds new C APIs Tcl_StackChannel, Tcl_UnstackChannel, and
+ Tcl_GetStackedChannel.
-1999-07-03 <welch@scriptics.com>
+1999-07-03 Brent Welch <welch@scriptics.com>
* generic/tclNotify.c:
* unix/tclUnixNotfy.c:
* unix/tclXtTest.c:
* unix/tclXtNotify.c:
* win/tclWinNotify.c:
- * mac/tclMacNotify.c: Added Tcl_SetNotifier and the associated
- hook points in the notifiers to be able to replace the notifier
- calls at runtime The Xt notifier and test program use this hook.
+ * mac/tclMacNotify.c: Added Tcl_SetNotifier and the associated hook
+ points in the notifiers to be able to replace the notifier calls at
+ runtime. The Xt notifier and test program use this hook.
-1999-07-03 <welch@scriptics.com>
+1999-07-03 Brent Welch <welch@scriptics.com>
- * generic/tclParse.c: Changed parsing of variable names to
- allow empty array names. Now "$(foo)" is a variable reference!
- Previous you had to use something like $::(foo), which is slower.
- This change is requested by Jean-Luc Fontaine for his STOOOP
- package.
+ * generic/tclParse.c: Changed parsing of variable names to allow empty
+ array names. Now "$(foo)" is a variable reference! Previous you had to
+ use something like $::(foo), which is slower. This change is requested
+ by Jean-Luc Fontaine for his STOOOP package.
-1999-07-01 <redman@scriptics.com>
+1999-07-01 Scott Redman <redman@scriptics.com>
* generic/tclCmdAH.c:
* generic/tclFCmd.c: Call TclStat instead of TclpStat in order to
@@ -1104,30 +1084,27 @@
* library/tcltest1.0/pkgIndex.tcl:
* library/tcltest1.0/tcltest.tcl:
* doc/tcltest.n:
- * tests/all.tcl: Added -preservecore, -limitconstraints, -help,
- -file, -notfile, -relateddir and -asidefromdir flags to the
- tcltest package along with exported proc
- ::tcltest::getMatchingFiles. The documentation was modified to
- match and all.tcl was modified to use the new functionality
- instead of implementing -file itself.
+ * tests/all.tcl: Added -preservecore, -limitconstraints, -help, -file,
+ -notfile, -relateddir and -asidefromdir flags to the tcltest package
+ along with exported proc ::tcltest::getMatchingFiles. The
+ documentation was modified to match and all.tcl was modified to use
+ the new functionality instead of implementing -file itself.
-1999-06-28 <redman@scriptics.com>
+1999-06-28 Scott Redman <redman@scriptics.com>
* generic/tclIndexObj.c:
* doc/GetIndex.3:
* tests/binary.test:
- * tests/winDde.test: Applied patch from Peter Hardie (with
- changes) to fix problem with Tcl_GetIndexFromObj() when the key
- being passed is the empty string. It used to match "" and return
- TCL_OK, but it should have returned TCL_ERROR instead. Added test
- case to "binary" and "dde" commands to check the behavior. Added
- documentation note as well.
+ * tests/winDde.test: Applied patch from Peter Hardie (with changes) to
+ fix problem with Tcl_GetIndexFromObj() when the key being passed is
+ the empty string. It used to match "" and return TCL_OK, but it should
+ have returned TCL_ERROR instead. Added test case to "binary" and "dde"
+ commands to check the behavior. Added documentation note as well.
-1999-06-26 <redman@scriptics.com>
+1999-06-26 Scott Redman <redman@scriptics.com>
- * win/tclWinDde.c: Applied patch from Peter Hardie to add poke
- command to dde. Also rev'd version of dde package to 1.1.
- [Bug: 1738]
+ * win/tclWinDde.c: Applied patch from Peter Hardie to add poke command
+ to dde. Also rev'd version of dde package to 1.1. [Bug 1738]
1999-06-25 Jennifer Hom <jenn@scriptics.com>
@@ -1136,25 +1113,24 @@
* library/tcltest1.0/pkgIndex.tcl:
* library/tcltest1.0/tcltest.tcl:
* library/tcltest1.0: Added initial implementation of the Tcl test
- harness package. This package was based on the defs.tcl file that
- was part of the tests directory. Reversed the way that tests were
+ harness package. This package was based on the defs.tcl file that was
+ part of the tests directory. Reversed the way that tests were
evaluated to fix a problem with false passes.
* doc/tcltest.n: Added documentation for the tcltest package.
* tests/README:
* tests/defs.tcl:
- * tests/all.tcl: Modified all test files (tests/*.test) and
- all.tcl to use the new tcltest package and removed references to
- the defs.tcl file. Modified the README file to point to the man
- page for tcltest.
-
-1999-06-25 <stanton@scriptics.com>
-
- * tests/reg.test:
+ * tests/all.tcl: Modified all test files (tests/*.test) and all.tcl to
+ use the new tcltest package and removed references to the defs.tcl
+ file. Modified the README file to point to the man page for tcltest.
+
+1999-06-25 Scott Stanton <stanton@scriptics.com>
+
+ * tests/reg.test:
* generic/regexec.c: Fixed bugs in non-greedy quantifiers.
-1999-06-23 <jpeek@scriptics.com>
+1999-06-23 Jerry Peek <jpeek@scriptics.com>
* doc/re_syntax.n:
* doc/switch.n:
@@ -1162,59 +1138,59 @@
* doc/RegExp.3:
* doc/regexp.n:
* doc/regsub.n: Moved information about syntax of 8.1 regular
- expressions from regexp(n) manpage into new re_syntax(n) page.
- Added pointers from other manpages to new re_syntax(n) page.
+ expressions from regexp(n) manpage into new re_syntax(n) page. Added
+ pointers from other manpages to new re_syntax(n) page.
-1999-06-23 <stanton@scriptics.com>
+1999-06-23 Scott Stanton <stanton@scriptics.com>
* unix/Makefile.in: Changed install-doc to install-man.
- * tools/uniParse.tcl:
- * tools/uniClass.tcl:
- * tools/README:
- * tests/string.test:
- * generic/regc_locale.c:
- * generic/tclUniData.c:
- * generic/tclUtf.c:
+ * tools/uniParse.tcl:
+ * tools/uniClass.tcl:
+ * tools/README:
+ * tests/string.test:
+ * generic/regc_locale.c:
+ * generic/tclUniData.c:
+ * generic/tclUtf.c:
* doc/string.n: Updated Unicode character tables to reflect latest
- Unicode 2.1 data. Also rationalized "regexp" and "string is"
+ Unicode 2.1 data. Also rationalized "regexp" and "string is"
definitions of character classes.
-1999-06-21 <stanton@scriptics.com>
+1999-06-21 Scott Stanton <stanton@scriptics.com>
* unix/tclUnixThrd.c (TclpThreadCreate): Fixed memory leak where
- thread attributes were not being released. [Bug: 2254]
+ thread attributes were not being released. [Bug 2254]
-1999-06-17 <stanton@scriptics.com>
+1999-06-17 Scott Stanton <stanton@scriptics.com>
- * tests/regexp.test:
- * generic/tclCmdMZ.c:
- * generic/tclCmdIL.c: Changed to use new regexp interfaces. Added
+ * tests/regexp.test:
+ * generic/tclCmdMZ.c:
+ * generic/tclCmdIL.c: Changed to use new regexp interfaces. Added
-expanded, -line, -linestop, and -lineanchor switches to regsub.
- * doc/RegExp.3: Documented the new regexp interfaces and
- the compile/execute flags.
-
- * generic/tclTest.c:
+ * doc/RegExp.3: Documented the new regexp interfaces and the
+ compile/execute flags.
+
+ * generic/tclTest.c:
* generic/tclRegexp.h:
- * generic/tclRegexp.c:
- * generic/tcl.h:
- * generic/tcl.decls: Renamed Tcl_RegExpMatchObj to
- Tcl_RegExpExecObj and added a new Tcl_RegExpMatchObj that is
- equivalent to Tcl_RegExpMatch. Added public macros for the regexp
- compile/execute flags. Changed to store either an object pointer
- or a string pointer in the TclRegexp structure. Changed to avoid
- adding a reference to the object or copying the string.
+ * generic/tclRegexp.c:
+ * generic/tcl.h:
+ * generic/tcl.decls: Renamed Tcl_RegExpMatchObj to Tcl_RegExpExecObj
+ and added a new Tcl_RegExpMatchObj that is equivalent to
+ Tcl_RegExpMatch. Added public macros for the regexp compile/execute
+ flags. Changed to store either an object pointer or a string pointer
+ in the TclRegexp structure. Changed to avoid adding a reference to the
+ object or copying the string.
* generic/regcomp.c: lint
- * tests/reg.test:
- * generic/regex.h:
+ * tests/reg.test:
+ * generic/regex.h:
* generic/regc_lex.c: Added REG_BOSONLY flag to allow Expect to
iterate through a string an only find matches that start at the
current position within the string.
-1999-06-16 <wart@scriptics.com>
+1999-06-16 Michael Thomas <wart@scriptics.com>
* unix/configure.in:
* unix/Makefile.in:
@@ -1224,15 +1200,15 @@
1999-06-16 Melissa Hirschl <hershey@matisse.scriptics.com>
- * generic/tclVar.c (Tcl_VariableObjCmd): fixed premature increment
- in loop that was causing out-of-bounds reads on array "varName".
+ * generic/tclVar.c (Tcl_VariableObjCmd): fixed premature increment in
+ loop that was causing out-of-bounds reads on array "varName".
-1999-06-16 <stanton@scriptics.com>
+1999-06-16 Scott Stanton <stanton@scriptics.com>
* tests/execute.test:
- * generic/tclExecute.c (TclExecuteByteCode): Fixed crash caused by
- a bug in INST_LOAD_SCALAR1 where the scalar index was read as
- a signed 1 byte value instead of unsigned. [Bug: 2243]
+ * generic/tclExecute.c (TclExecuteByteCode): Fixed crash caused by a
+ bug in INST_LOAD_SCALAR1 where the scalar index was read as a signed 1
+ byte value instead of unsigned. [Bug 2243]
1999-06-14 Melissa Hirschl <hershey@matisse.scriptics.com>
@@ -1242,118 +1218,116 @@
* win/Makefile.in
* win/makefile.vc
* generic/tclStringObj.c:
- Merged String and Unicode object types. Added new functions to
- the puplic API: Tcl_NewUnicodeObj, Tcl_SetUnicodeObj,
- Tcl_GetUnicode, Tcl_GetUniChar, Tcl_GetCharLength, Tcl_GetRange,
+ Merged String and Unicode object types. Added new functions to the
+ puplic API: Tcl_NewUnicodeObj, Tcl_SetUnicodeObj, Tcl_GetUnicode,
+ Tcl_GetUniChar, Tcl_GetCharLength, Tcl_GetRange,
Tcl_AppendUnicodeToObj.
-1999-06-09 <stanton@scriptics.com>
+1999-06-09 Scott Stanton <stanton@scriptics.com>
- * generic/tclUnicodeObj.c: Lots of cleanup and simplification.
- Fixed several memory bugs. Added TclAppendUnicodeToObj.
+ * generic/tclUnicodeObj.c: Lots of cleanup and simplification. Fixed
+ several memory bugs. Added TclAppendUnicodeToObj.
* generic/tclInt.h: Added declarations for various Unicode string
- functions.
-
- * generic/tclRegexp.c:
- * generic/tclCmdMZ.c: Changed to use new Unicode string interfaces
- for better performance.
-
- * generic/tclRegexp.h:
- * generic/tclRegexp.c:
- * generic/tcl.h:
- * generic/tcl.decls: Added Tcl_RegExpMatchObj and
- Tcl_RegExpGetInfo calls to access lower level regexp API. These
- features are needed by Expect. This is a preliminary
- implementation pending final review and cleanup.
+ functions.
+
+ * generic/tclRegexp.c:
+ * generic/tclCmdMZ.c: Changed to use new Unicode string interfaces for
+ better performance.
+
+ * generic/tclRegexp.h:
+ * generic/tclRegexp.c:
+ * generic/tcl.h:
+ * generic/tcl.decls: Added Tcl_RegExpMatchObj and Tcl_RegExpGetInfo
+ calls to access lower level regexp API. These features are needed by
+ Expect. This is a preliminary implementation pending final review and
+ cleanup.
* generic/tclCmdMZ.c:
- * tests/string.test: Fixed bug where string map failed on null
- strings.
+ * tests/string.test: Fixed bug where string map failed on null strings
- * generic/regexec.c:
+ * generic/regexec.c:
* unix/tclUnixNotfy.c: lint
* tools/genStubs.tcl: Changed to always write output in LF mode.
-1999-06-08 <stanton@scriptics.com>
+1999-06-08 Scott Stanton <stanton@scriptics.com>
- * win/tclWinSock.c: Rolled back to the 8.1.0 implementation
- because of serious problems with the new driver. Basically no
- incoming socket connections would be reported to a server port.
- The 8.1.1 code needs to be redesigned and fixed correctly.
+ * win/tclWinSock.c: Rolled back to the 8.1.0 implementation because of
+ serious problems with the new driver. Basically no incoming socket
+ connections would be reported to a server port. The 8.1.1 code needs
+ to be redesigned and fixed correctly.
1999-06-07 Melissa Hirschl <hershey@matisse.scriptics.com>
- * tests/string.test:
+ * tests/string.test:
* generic/tclVar.c (Tcl_SetVar2Ex):
* generic/tclStringObj.c (Tcl_AppendObjToObj):
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): optimized the string
- index, string length, string range, and append command in cases
- where the object's internal rep is a bytearray. Objects with
- other internal reps are converted to have the new unicode internal
- rep.
-
- * unix/Makefile.in:
- * win/Makefile.in:
- * win/Makefile.vc:
- * tests/unicode.test:
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): optimized the string index,
+ string length, string range, and append command in cases where the
+ object's internal rep is a bytearray. Objects with other internal reps
+ are converted to have the new unicode internal rep.
+
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/Makefile.vc:
+ * tests/unicode.test:
* generic/tclInt.h:
* generic/tclObj.c:
* generic/tclUnicodeObj.c: added a new object type to store the
unicode representation of a string.
* generic/tclTestObj.c: added the objtype option to the testobj
- command. This option returns the name of the type of internal rep
- an object has.
+ command. This option returns the name of the type of internal rep an
+ object has.
-1999-06-04 <stanton@scriptics.com>
+1999-06-04 Scott Stanton <stanton@scriptics.com>
- * win/configure.in:
+ * win/configure.in:
* win/Makefile.in: Windows build now handles static/dynamic
- debug/nodebug builds and supports the standard targets using
- Cygwin user tools plus GNU make and autoconf.
+ debug/nodebug builds and supports the standard targets using Cygwin
+ user tools plus GNU make and autoconf.
-1999-06-03 <stanton@scriptics.com>
+1999-06-03 Scott Stanton <stanton@scriptics.com>
- * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
* tests/string.test: Fixed bug where string equal/compare -nocase
- reported wrong result on null strings. [Bug: 2138]
+ reported wrong result on null strings. [Bug 2138]
-1999-06-02 <stanton@scriptics.com>
+1999-06-02 Scott Stanton <stanton@scriptics.com>
- * generic/tclUtf.c (Tcl_UtfNcasecmp): Fixed incorrect computation
- of relative ordering. [Bug: 2135]
+ * generic/tclUtf.c (Tcl_UtfNcasecmp): Fixed incorrect computation of
+ relative ordering. [Bug 2135]
-1999-06-01 <stanton@scriptics.com>
+1999-06-01 Scott Stanton <stanton@scriptics.com>
* unix/configure.in: Fixed various small configure.in patches
- submitted by Jan Nijtmans. [Bug: 2121]
-
- * tests/reg.test:
- * generic/regc_color.c:
- * generic/regc_cvec.c:
- * generic/regc_lex.c:
- * generic/regc_locale.c:
- * generic/regc_nfa.c:
- * generic/regcomp.c:
- * generic/regcustom.h:
- * generic/rege_dfa.c:
- * generic/regerror.c:
- * generic/regerrs.h:
- * generic/regex.h:
- * generic/regexec.c:
- * generic/regfree.c:
- * generic/regfronts.c:
- * generic/regguts.h:
- * generic/tclCmdMZ.c:
- * generic/tclRegexp.c:
- * generic/tclRegexp.h:
+ submitted by Jan Nijtmans. [Bug 2121]
+
+ * tests/reg.test:
+ * generic/regc_color.c:
+ * generic/regc_cvec.c:
+ * generic/regc_lex.c:
+ * generic/regc_locale.c:
+ * generic/regc_nfa.c:
+ * generic/regcomp.c:
+ * generic/regcustom.h:
+ * generic/rege_dfa.c:
+ * generic/regerror.c:
+ * generic/regerrs.h:
+ * generic/regex.h:
+ * generic/regexec.c:
+ * generic/regfree.c:
+ * generic/regfronts.c:
+ * generic/regguts.h:
+ * generic/tclCmdMZ.c:
+ * generic/tclRegexp.c:
+ * generic/tclRegexp.h:
* generic/tclTest.c: Applied Henry Spencer's latest regexp patches
- that fix an infinite loop bug and add support for testing whether
- a string could match with additional input. [Bug: 2117]
+ that fix an infinite loop bug and add support for testing whether a
+ string could match with additional input. [Bug 2117]
-1999-05-28 <stanton@scriptics.com>
+1999-05-28 Scott Stanton <stanton@scriptics.com>
* generic/tclObj.c: Changed to eliminate use of isupper/tolower in
favor of the Unicode versions.
@@ -1362,427 +1336,409 @@
* win/configure.in: Added preliminary TEA implementation.
* win/tclWinDde.c: Fixed bug where dde calls were being passed an
- invalid dde handle because Initialize had not been called.
- [Bug: 2124]
+ invalid dde handle because Initialize had not been called. [Bug 2124]
-1999-05-26 <redman@scriptic.com>
+1999-05-26 Scott Redman <redman@scriptic.com>
- * generic/tclThreadTest.c: Fixed race condition in testthread
- code that showed up in the WinNT test suite intermittently.
+ * generic/tclThreadTest.c: Fixed race condition in testthread code
+ that showed up in the WinNT test suite intermittently.
- * win/tclWinSock.c: Fixed a hang in the WinNT socket driver, wake
- up the socket thread every 100ms to check for events on the
- sockets that did not wake up the thread (race condition).
+ * win/tclWinSock.c: Fixed a hang in the WinNT socket driver, wake up
+ the socket thread every 100ms to check for events on the sockets that
+ did not wake up the thread (race condition).
-1999-05-24 <stanton@scriptics.com>
+1999-05-24 Scott Stanton <stanton@scriptics.com>
- * tools/genStubs.tcl: Changed to allow a list of platforms instead
- of just one at a time.
+ * tools/genStubs.tcl: Changed to allow a list of platforms instead of
+ just one at a time.
- * generic/tcl.decls:
- * generic/tclCmdMZ.c:
- * generic/tclDecls.h:
- * generic/tclInt.decls:
- * generic/tclIntDecls.h:
- * generic/tclPort.h:
- * generic/tclStubInit.c:
+ * generic/tcl.decls:
+ * generic/tclCmdMZ.c:
+ * generic/tclDecls.h:
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclPort.h:
+ * generic/tclStubInit.c:
* generic/tclStubLib.c: Various header file related changes and other
lint to try to get the Mac builds working.
-1999-05-21 <redman@scriptics.com>
+1999-05-21 Scott Redman <redman@scriptics.com>
- * win/tclWinPipe.c: Fix bug when launching command.com on
- Win95/98. Need to wait for the procInfo.hProcess of the process that
- was created, not the hProcess of the current process. [Bug: 2105]
+ * win/tclWinPipe.c: Fix bug when launching command.com on Win95/98.
+ Need to wait for the procInfo.hProcess of the process that was
+ created, not the hProcess of the current process. [Bug 2105]
-1999-05-20 <redman@scriptics.com>
+1999-05-20 Scott Redman <redman@scriptics.com>
- * library/init.tcl: Add the directory where the executable is, and
- the ../lib directory relative to that, to the auto_path variable.
-
-1999-05-19 <stanton@scriptics.com>
+ * library/init.tcl: Add the directory where the executable is, and the
+ ../lib directory relative to that, to the auto_path variable.
+
+1999-05-19 Scott Stanton <stanton@scriptics.com>
Merged in various changes submitted by Jeff Hobbs:
-
- * generic/tcl.decls:
- * generic/tclUtf.c: Added Tcl_UniCharIs* functions for control,
- graph, print, and punct classes.
+
+ * generic/tcl.decls:
+ * generic/tclUtf.c: Added Tcl_UniCharIs* functions for control, graph,
+ print, and punct classes.
* generic/tclUtil.c:
* doc/StrMatch.3: Added Tcl_StringCaseMatch() implementation to
support case-insensitive globbing.
-
- * doc/string.n:
- * unix/mkLinks:
- * tests/string.test:
- * generic/tclCmdMZ.c: Added additional character class tests,
- added -nocase switch to "string match", changed string first/last
- to use offsets.
-1999-05-19 <redman@scriptics.com>
+ * doc/string.n:
+ * unix/mkLinks:
+ * tests/string.test:
+ * generic/tclCmdMZ.c: Added additional character class tests, added
+ -nocase switch to "string match", changed string first/last to use
+ offsets.
+
+1999-05-19 Scott Redman <redman@scriptics.com>
* generic/tcl.h: Add extern "C" block around entire header file for
- C++ compilers to fix linkage issues. Submitted by Don Porter and
- Paul Duffin.
+ C++ compilers to fix linkage issues. Submitted by Don Porter and Paul
+ Duffin.
- * generic/tclRegexp.c: Fix bug when the regexp cache is empty
- and an empty pattern is used in regexp ( such as {} or "" ).
+ * generic/tclRegexp.c: Fix bug when the regexp cache is empty and an
+ empty pattern is used in regexp ( such as {} or "" ).
-1999-05-18 <stanton@scriptics.com>
+1999-05-18 Scott Stanton <stanton@scriptics.com>
- * win/tclWinChan.c: Modified initialization code to avoid
- inherenting closed or invalid channels. If the standard input is
- anything other than a console, file, serial port, or pipe, then we
- fall back to the standard Tk window console.
+ * win/tclWinChan.c: Modified initialization code to avoid inherenting
+ closed or invalid channels. If the standard input is anything other
+ than a console, file, serial port, or pipe, then we fall back to the
+ standard Tk window console.
-1999-05-14 <stanton@scriptics.com>
+1999-05-14 Scott Stanton <stanton@scriptics.com>
- * generic/tclCmdAH.c (Tcl_ForObjCmd): Fixed crash caused by
- failure to reset the result before evaluating the test
- expression.
+ * generic/tclCmdAH.c (Tcl_ForObjCmd): Fixed crash caused by failure to
+ reset the result before evaluating the test expression.
-1999-05-14 <surles@scriptics.com>
+1999-05-14 Bryan Surles <surles@scriptics.com>
- * generic/tclBasic.c (Tcl_CreateInterp): Added introspection
- variable for threaded interps. If the interp was compiled with
- threads enabled, the tcl_platform(threaded) variable will exist.
+ * generic/tclBasic.c (Tcl_CreateInterp): Added introspection variable
+ for threaded interps. If the interp was compiled with threads enabled,
+ the tcl_platform(threaded) variable will exist.
-1999-05-14 <redman@scriptics.com>
+1999-05-14 Scott Redman <redman@scriptics.com>
* generic/tclDate.c: Applied patch to fix 100-year and 400-year
- boundaries in leap year code, from Isaac Hollander. [Bug: 2066]
+ boundaries in leap year code, from Isaac Hollander. [Bug 2066]
-1999-05-13 <stanton@scriptics.com>
+1999-05-13 Scott Stanton <stanton@scriptics.com>
* unix/Makefile.in:
* unix/tclAppInit.c: Minor cleanup related to Xt notifier.
-
- * unix/tclUnixInit.c (TclpSetInitialEncodings): Tcl now looks for
- an encoding subfield in the LANG/LC_ALL variables in cases where
- the locale is not found in the locale table. Ensure that
- setlocale() is called at least once so X11 will initialize
- properly. Also, forces the LC_NUMERIC locale to be "C" so numeric
- processing in scripts is not affected by the current locale
- setting. [Bug: 1989]
- * generic/tclRegexp.c: Increased per-thread regexp cache to 30
- slots. This seems to be about the right number for larger
- applications like exmh. [Bug: 1063]
+ * unix/tclUnixInit.c (TclpSetInitialEncodings): Tcl now looks for an
+ encoding subfield in the LANG/LC_ALL variables in cases where the
+ locale is not found in the locale table. Ensure that setlocale() is
+ called at least once so X11 will initialize properly. Also, forces the
+ LC_NUMERIC locale to be "C" so numeric processing in scripts is not
+ affected by the current locale setting. [Bug 1989]
+
+ * generic/tclRegexp.c: Increased per-thread regexp cache to 30 slots.
+ This seems to be about the right number for larger applications like
+ exmh. [Bug 1063]
-1999-05-12 <stanton@scriptics.com>
+1999-05-12 Scott Stanton <stanton@scriptics.com>
* doc/tclsh.1: Updated references to rc script names to accurately
reflect the platform differences on Windows.
- * tests/regexp.test:
- * generic/tclInt.h:
- * generic/tclBasic.c:
+ * tests/regexp.test:
+ * generic/tclInt.h:
+ * generic/tclBasic.c:
* generic/tclRegexp.h:
- * generic/tclRegexp.c: Replaced the per-interpreter regexp cache
- with a per-thread cache. Changed the Regexp object to take
- advantage of this extra cache. Added a reference count to the
- TclRegexp type so regexps can be shared by multiple objects.
- Removed the per-interp regexp cache from the interpreter. Now
- regexps can be used with no need for an interpreter. [Bug: 1063]
-
- * win/tclWinInit.c (TclpSetVariables): Avoid calling GetUserName
- if the value can be determined from the USERNAME environment
- variable. GetUserName is very slow.
-
-1999-05-07 <stanton@scriptics.com>
-
- * win/winDumpExts.c:
- * win/makefile.vc: Removed incorrect patch. [Bug: 1998]
-
+ * generic/tclRegexp.c: Replaced the per-interpreter regexp cache with
+ a per-thread cache. Changed the Regexp object to take advantage of
+ this extra cache. Added a reference count to the TclRegexp type so
+ regexps can be shared by multiple objects. Removed the per-interp
+ regexp cache from the interpreter. Now regexps can be used with no
+ need for an interpreter. [Bug 1063]
+
+ * win/tclWinInit.c (TclpSetVariables): Avoid calling GetUserName if
+ the value can be determined from the USERNAME environment variable.
+ GetUserName is very slow.
+
+1999-05-07 Scott Stanton <stanton@scriptics.com>
+
+ * win/winDumpExts.c:
+ * win/makefile.vc: Removed incorrect patch. [Bug 1998]
+
* generic/tcl.decls: Replaced const with CONST.
- * generic/tclResult.c (Tcl_AppendResultVA):
+ * generic/tclResult.c (Tcl_AppendResultVA):
* generic/tclStringObj.c (Tcl_AppendStringsToObjVA): Fixed to copy
arglist using memcpy instead of assignment so it works properly on
- OS/390. [Bug: 1997]
+ OS/390. [Bug 1997]
* generic/tclLoadNone.c: Updated to use current interfaces, added
- TclpUnloadFile. [Bug: 2003]
+ TclpUnloadFile. [Bug 2003]
- * win/winDumpExts.c:
- * win/makefile.vc: Changed to emit library name in defs
- file. [Bug: 1998]
+ * win/winDumpExts.c:
+ * win/makefile.vc: Changed to emit library name in defs file. [Bug
+ 1998]
- * unix/configure.in: Added fix for OS/390. [Bug: 1976]
+ * unix/configure.in: Added fix for OS/390. [Bug 1976]
-1999-05-06 <stanton@scriptics.com>
+1999-05-06 Scott Stanton <stanton@scriptics.com>
- * tests/string.test:
- * generic/tclCmdMZ.c:
+ * tests/string.test:
+ * generic/tclCmdMZ.c:
* doc/string.n: Fixed bug in string equal/compare code when using
- -length option. Cleaned up docs a bit more.
-
- * tests/http.test: Unset "data" array before running tests to
- avoid failures due to previous tests.
-
- * doc/string.n:
- * tests/cmdIL.test:
- * tests/cmdMZ.test:
- * tests/error.test:
- * tests/ioCmd.test:
- * tests/lindex.test:
- * tests/linsert.test:
- * tests/lrange.test:
- * tests/lreplace.test:
- * tests/string.test:
- * tests/cmdIL.test:
- * generic/tclUtil.c:
- * generic/tclCmdMZ.c: Replaced "string icompare/iequal" with
- -nocase and -length switches to "string compare/equal". Added a
- -nocase option to "string map". Changed index syntax to allow
- integer or end?-integer? instead of a full expression. This is
- much simpler with safeTcl scripts since it avoids double
- substitution issues.
-
- * doc/Utf.3:
- * generic/tclStubInit.c:
- * generic/tclDecls.h:
+ -length option. Cleaned up docs a bit more.
+
+ * tests/http.test: Unset "data" array before running tests to avoid
+ failures due to previous tests.
+
+ * doc/string.n:
+ * tests/cmdIL.test:
+ * tests/cmdMZ.test:
+ * tests/error.test:
+ * tests/ioCmd.test:
+ * tests/lindex.test:
+ * tests/linsert.test:
+ * tests/lrange.test:
+ * tests/lreplace.test:
+ * tests/string.test:
+ * tests/cmdIL.test:
+ * generic/tclUtil.c:
+ * generic/tclCmdMZ.c: Replaced "string icompare/iequal" with -nocase
+ and -length switches to "string compare/equal". Added a -nocase option
+ to "string map". Changed index syntax to allow integer or
+ end?-integer? instead of a full expression. This is much simpler with
+ safeTcl scripts since it avoids double substitution issues.
+
+ * doc/Utf.3:
+ * generic/tclStubInit.c:
+ * generic/tclDecls.h:
* generic/tclUtf.c:
* generic/tcl.decls: Added Tcl_UtfNcmp and Tcl_UtfNcasecmp.
-1999-05-05 <stanton@scriptics.com>
+1999-05-05 Scott Stanton <stanton@scriptics.com>
* win/makefile.vc: Added encoding directory to install-libraries
target.
-1999-05-03 <stanton@scriptics.com>
-
- * doc/string.n:
- * tests/cmdMZ.test:
- * tests/string.test:
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): Changed "string length"
- to avoid regenerating the string rep of a ByteArray object.
-
- * tests/cmdIL.test:
- * tests/cmdMZ.test:
- * tests/error.test:
+1999-05-03 Scott Stanton <stanton@scriptics.com>
+
+ * doc/string.n:
+ * tests/cmdMZ.test:
+ * tests/string.test:
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Changed "string length" to
+ avoid regenerating the string rep of a ByteArray object.
+
+ * tests/cmdIL.test:
+ * tests/cmdMZ.test:
+ * tests/error.test:
* tests/lindex.test:
- * tests/linsert.test:
- * tests/lrange.test:
- * tests/lreplace.test:
- * tests/string.test:
- * generic/tclCmdMZ.c (Tcl_StringObjCmd):
- * generic/tclUtil.c (TclGetIntForIndex): Applied Jeff Hobbs's
- string patch which includes the following changes [Bug: 1845]:
-
- - string compare now takes optional length arg (for strncmp
- behavior)
-
- - added string equal (just a few lines of code blended
- in with string compare)
-
- - added string icompare/iequal for case-insensitive comparisons
-
- - string index's index can now be ?end[+-]?expression
- I made this change in the private TclGetIntForIndex,
- which means that the list commands also benefit, as
- well as string range, et al.
-
- - added [string repeat string count]
- Repeats given string number of times
-
- - added string replace, string equiv to lreplace
- (quasi opposite of string range):
- string replace first last ?string?
- Example of use, replacing end of string with ...
- should the string be more than 16 chars long:
- string replace $string 16 end "..."
- This just returns the string len < 16, so it
- will only affect the long strings.
-
- - added optional first and last args to string to*
- This allows you to just affect certain regions of
- a string with the command (like just capping the
- first letter). I found the original totitle to
- be too draconian to be useful.
-
- - added [string map charMap string]
- where charMap is a {from to from to} list that equates to
- what one might get from [array get]. Each and
- can be multiple chars (or none at all). For Tcl/CGI users,
- this is a MAJOR speed booster.
-
- * generic/tclParse.c (Tcl_ParseCommand): Changed to avoid
- modifying eval'ed strings that are already null terminated.
- [Bug: 1793]
-
- * tests/binary.test:
- * generic/tclBinary.c (DupByteArrayInternalRep): Fixed bug where
- type was not being set in duplicated object. [Bug: 1975, 2047]
-
-1999-04-30 <stanton@scriptics.com>
-
+ * tests/linsert.test:
+ * tests/lrange.test:
+ * tests/lreplace.test:
+ * tests/string.test:
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * generic/tclUtil.c (TclGetIntForIndex): Applied Jeff Hobbs's string
+ patch which includes the following changes [Bug 1845]:
+ - string compare now takes optional length arg (for strncmp behavior)
+ - added string equal (just a few lines of code blended in with string
+ compare)
+ - added string icompare/iequal for case-insensitive comparisons
+ - string index's index can now be ?end[+-]?expression
+ I made this change in the private TclGetIntForIndex, which means
+ that the list commands also benefit, as well as string range, et al.
+ - added [string repeat string count]
+ Repeats given string number of times
+ - added string replace, string equiv to lreplace
+ (quasi opposite of string range):
+ string replace first last ?string?
+ Example of use, replacing end of string with ... should the string
+ be more than 16 chars long:
+ string replace $string 16 end "..."
+ This just returns the string len < 16, so it will only affect the
+ long strings.
+ - added optional first and last args to string to*
+ This allows you to just affect certain regions of a string with the
+ command (like just capping the first letter). I found the original
+ totitle to be too draconian to be useful.
+ - added [string map charMap string]
+ where charMap is a {from to from to} list that equates to what one
+ might get from [array get]. Each and can be multiple chars (or none
+ at all). For Tcl/CGI users, this is a MAJOR speed booster.
+
+ * generic/tclParse.c (Tcl_ParseCommand): Changed to avoid modifying
+ eval'ed strings that are already null terminated. [Bug 1793]
+
+ * tests/binary.test:
+ * generic/tclBinary.c (DupByteArrayInternalRep): Fixed bug where type
+ was not being set in duplicated object. [Bug 1975, 2047]
+
+1999-04-30 Scott Stanton <stanton@scriptics.com>
+
* Changed version to 8.1.1.
-
-1999-04-30 <stanton@scriptics.com>
+
+1999-04-30 Scott Stanton <stanton@scriptics.com>
* Merged changes from 8.1.0 branch:
* generic/tclParse.c: Fixed memory leak in CommandComplete.
- * generic/tclPlatDecls.h:
- * generic/tclIntPlatDecls.h:
- * generic/tclIntDecls.h:
- * generic/tclDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclIntDecls.h:
+ * generic/tclDecls.h:
* tools/genStubs.tcl: Added 'extern "C" {}' block around the stub
- table pointer declaration so the stub library can be used from
- C++. [Bug: 1934]
+ table pointer declaration so the stub library can be used from C++.
+ [Bug 1934]
* Lots of documentation and other release engineering fixes.
-1999-04-28 <stanton@scriptics.com>
+1999-04-28 Scott Stanton <stanton@scriptics.com>
- * mac/tclMacResource.c:
- * generic/tclListObj.c:
- * generic/tclObj.c:
+ * mac/tclMacResource.c:
+ * generic/tclListObj.c:
+ * generic/tclObj.c:
* generic/tclStringObj.c: Changed to avoid freeing the string
- representation before freeing the internal rep. This helps with
- debugging since the string rep will still be valid when the free
- proc is invoked.
+ representation before freeing the internal rep. This helps with
+ debugging since the string rep will still be valid when the free proc
+ is invoked.
-1999-04-27 <stanton@scriptics.com>
+1999-04-27 Scott Stanton <stanton@scriptics.com>
- * generic/tclLiteral.c (TclHideLiteral): Fixed so hidden literals
- get duplicated to avoid accidental sharing in the global object
- table.
+ * generic/tclLiteral.c (TclHideLiteral): Fixed so hidden literals get
+ duplicated to avoid accidental sharing in the global object table.
-1999-04-23 <stanton@scriptics.com>
+1999-04-23 Scott Stanton <stanton@scriptics.com>
- * generic/tclStubInit.c:
+ * generic/tclStubInit.c:
* tools/genStubs.tcl: Changed to avoid the need for forward
declarations in stub initializers.
-1999-04-23 <stanton@scriptics.com>
+1999-04-23 Scott Stanton <stanton@scriptics.com>
* library/encoding/koi8-r.enc:
* tools/encoding/koi8-r.txt: Added support for the koi8-r Cyrillic
- encoding. [Bug: 1771]
+ encoding. [Bug 1771]
-1999-04-22 <stanton@scriptics.com>
+1999-04-22 Scott Stanton <stanton@scriptics.com>
* win/tclWinFCmd.c:
- * win/tclWin32Dll.c: Changed uses of "try" to "__try", since that
- is the actual keyword. This eliminates the need for some -D flags
- from the makefile.
+ * win/tclWin32Dll.c: Changed uses of "try" to "__try", since that is
+ the actual keyword. This eliminates the need for some -D flags from
+ the makefile.
- * generic/tclPort.h: Added include of tcl.h since it defines
- various Windows macros that are needed before deciding which
- platform porting file to use.
+ * generic/tclPort.h: Added include of tcl.h since it defines various
+ Windows macros that are needed before deciding which platform porting
+ file to use.
* generic/tclEvent.c: lint
- * win/tclWinInit.c (TclpInitPlatform): Added call to TclWinInit
- when building a static library since DllMain will not be invoked.
- This could break old code that explicitly called TclWinInit, but
- should be simpler in the long run.
+ * win/tclWinInit.c (TclpInitPlatform): Added call to TclWinInit when
+ building a static library since DllMain will not be invoked. This
+ could break old code that explicitly called TclWinInit, but should be
+ simpler in the long run.
1999-04-22 Scott Stanton <stanton@scriptics.com>
- * generic/tclInt.h:
- * generic/tclInt.decls:
- * generic/tclCompile.c: Added TclSetByteCodeFromAny that takes a
- hook procedure to invoke after compilation but before the byte
- codes are emitted. This makes it possible to do postprocessing on
- the compiled byte codes before the ByteCode is generated.
+ * generic/tclInt.h:
+ * generic/tclInt.decls:
+ * generic/tclCompile.c: Added TclSetByteCodeFromAny that takes a hook
+ procedure to invoke after compilation but before the byte codes are
+ emitted. This makes it possible to do postprocessing on the compiled
+ byte codes before the ByteCode is generated.
+
+ * generic/tclLiteral.c: Added TclHideLiteral and TclAddLiteralObj to
+ make it possible to create local unshared literal objects.
- * generic/tclLiteral.c: Added TclHideLiteral and TclAddLiteralObj
- to make it possible to create local unshared literal objects.
-
* win/tclWinInit.c:
* unix/tclUnixInit.c: Changed initial search path to match that
found used by tcl_findLibrary.
-1999-04-22 <redman@scriptics.com>
+1999-04-22 Scott Redman <redman@scriptics.com>
* win/tclWinPort.h:
- * win/tclWinSock.c: Added code to use WinSock 2.0 API on NT to
- avoid creating a window to handle sockets. API not available on
- Win95 and needs to be fixed on Win98, until then continue to use
- the older (window-based) scheme on those two OSes.
-
-1999-04-15 <stanton@scriptics.com>
+ * win/tclWinSock.c: Added code to use WinSock 2.0 API on NT to avoid
+ creating a window to handle sockets. API not available on Win95 and
+ needs to be fixed on Win98, until then continue to use the older
+ (window-based) scheme on those two OSes.
+
+1999-04-15 Scott Stanton <stanton@scriptics.com>
* Merged 8.1 back into the main trunk
-1999-04-13 <stanton@scriptics.com>
+1999-04-13 Scott Stanton <stanton@scriptics.com>
* library/encoding/gb2312.enc:
* library/encoding/euc-cn.enc:
* tools/encoding/gb2312.txt:
* tools/encoding/cp950.txt:
* tools/encoding/Makefile: Restored the double byte definition of
- GB2312 and added the EUC-CN encoding. EUC-CN is a variant of
- GB2312 that shifts the characters into bytes with the high bit set
- and includes ASCII as a subset. [Bug: 632]
+ GB2312 and added the EUC-CN encoding. EUC-CN is a variant of GB2312
+ that shifts the characters into bytes with the high bit set and
+ includes ASCII as a subset. [Bug 632]
-1999-04-13 <redman@scriptics.com>
+1999-04-13 Scott Redman <redman@scriptics.com>
- * win/tclWinSock.c: Apply patch to allow write access to a socket
- if FD_WRITE is sent but FD_CONNECT is not. Some strange problem
- with either Win32 or a socket driver. [Bug: 1664 1776]
+ * win/tclWinSock.c: Apply patch to allow write access to a socket if
+ FD_WRITE is sent but FD_CONNECT is not. Some strange problem with
+ either Win32 or a socket driver. [Bug 1664 1776]
-1999-04-09 <redman@scriptics.com>
+1999-04-09 Scott Redman <redman@scriptics.com>
- * unix/tclUnixNotfy.c: Fixed notifier deadlock situation when the
- pipe used to talk back notifier thread is filled with data. When
- calling the write() function to feed data down that pipe, unlock
- the notifierMutex to allow the notifier to wake up again. Found
- as a result of the focus.test for Tk hanging. [Bug: 1700]
+ * unix/tclUnixNotfy.c: Fixed notifier deadlock situation when the pipe
+ used to talk back notifier thread is filled with data. When calling
+ the write() function to feed data down that pipe, unlock the
+ notifierMutex to allow the notifier to wake up again. Found as a
+ result of the focus.test for Tk hanging. [Bug 1700]
-1999-04-06 <stanton@scriptics.com>
+1999-04-06 Scott Stanton <stanton@scriptics.com>
* tests/unixNotfy.test: Fixed hang in tests when built with thread
- support.
+ support.
- * tests/httpold.test: Fixed broken test that didn't wait long
- enough for events to arrive.
+ * tests/httpold.test: Fixed broken test that didn't wait long enough
+ for events to arrive.
* tests/unixInit.test: Fixed race condition in test.
-
- * tests/unixInit.test:
+
+ * tests/unixInit.test:
* tests/fileName.test: Minor test nits.
* unix/tclUnixInit.c (TclpSetInitialEncodings): Fixed bad initial
encoding string.
-1999-04-06 <surles@scriptics.com>
+1999-04-06 Bryan Surles <surles@scriptics.com>
- * generic/tclVar.c:
- * generic/tclEnv.c: Moved the "array set" C level code into a
- common routine (TclArraySet). The TclSetupEnv routine now uses
- this API to create an env array w/ no elements.
+ * generic/tclVar.c:
+ * generic/tclEnv.c: Moved the "array set" C level code into a common
+ routine (TclArraySet). The TclSetupEnv routine now uses this API to
+ create an env array w/ no elements.
* generic/tclEnv.c:
* generic/tclWinInit.h:
* generic/tclUnixInit.h:
- * generic/tclInt.h: Made the Env module I18N compliant. Changed the
+ * generic/tclInt.h: Made the Env module I18N compliant. Changed the
FindVariable routine to TclpFindVariable, that now does a case
- insensitive string comparison on Windows, and not on UNIX. [Bug:
- 1299, 1500]
+ insensitive string comparison on Windows, and not on UNIX. [Bug 1299,
+ 1500]
-1999-04-05 <stanton@scriptics.com>
+1999-04-05 Scott Stanton <stanton@scriptics.com>
* tests/io.test: Minor test cleanup.
- * generic/tclEncoding.c (Tcl_CreateEncoding): Minor lint to make
- it easier to compile on Digital-unix. [Bug: 1659]
+ * generic/tclEncoding.c (Tcl_CreateEncoding): Minor lint to make it
+ easier to compile on Digital-unix. [Bug 1659]
- * unix/configure.in:
+ * unix/configure.in:
* unix/tclUnixPort.h: Applied patch for OS/390 to handle lack of
- sys/param.h. [Bug: 1725]
+ sys/param.h. [Bug 1725]
+
+ * unix/configure.in: Fixed BSD/OS 4.* configuration to support shared
+ libraries properly. [Bug 1730]
- * unix/configure.in: Fixed BSD/OS 4.* configuration to support
- shared libraries properly. [Bug: 1730]
-
-1999-04-05 <redman@scriptics.com>
+1999-04-05 Scott Redman <redman@scriptics.com>
- * win/tclWinDde.c: decrease timeout value for DDE calls to 30k
- [Bug: 1639]
+ * win/tclWinDde.c: decrease timeout value for DDE calls to 30k. [Bug
+ 1639]
* generic/tcl.decls:
* generic/tcl.h:
@@ -1792,109 +1748,106 @@
* generic/tclIntDecls.h:
* generic/tclStubInit.c:
* generic/tclUtil.c: Added more functions to the Tcl stubs table,
- including all Tcl_ functions not already in it (except Cmd
- functions) and Tcl_GetCwd() and Tcl_Chdir() (new functions).
-
+ including all Tcl_ functions not already in it (except Cmd functions)
+ and Tcl_GetCwd() and Tcl_Chdir() (new functions).
+
* tests/safe.test:
* doc/safe.n:
* generic/tclBasic.c:
- * library/safe.tcl: The encoding command is not safe as-is, so
- create a safe alias to mask out the "encoding system <name>" but
- allow all other uses including "encoding system". Added test cases
- and updated the man page for Safe Tcl.
-
-1999-04-05 <stanton@scriptics.com>
-
- * tests/winTime.test:
- * win/tclWinTime.c: Fixed crash in clock command that occurred
- when manipulating negative time values in timezones east of
- GMT. [Bug: 1142, 1458]
-
- * tests/platform.test:
+ * library/safe.tcl: The encoding command is not safe as-is, so create
+ a safe alias to mask out the "encoding system <name>" but allow all
+ other uses including "encoding system". Added test cases and updated
+ the man page for Safe Tcl.
+
+1999-04-05 Scott Stanton <stanton@scriptics.com>
+
+ * tests/winTime.test:
+ * win/tclWinTime.c: Fixed crash in clock command that occurred when
+ manipulating negative time values in timezones east of GMT. [Bug
+ 1142, 1458]
+
+ * tests/platform.test:
* tests/fileName.test: Fixed broken tests.
-
+
* generic/tclFileName.c: Moved global regexps into thread local
storage.
- * tests/socket.test: Changed so tests don't reuse sockets,
- since Windows is slow to release sockets.
+ * tests/socket.test: Changed so tests don't reuse sockets, since
+ Windows is slow to release sockets.
- * win/tclWinConsole.c:
- * win/tclWinPipe.c:
- * win/tclWinSerial.c: Fixed race condition where background
- threads were terminated while they still held a lock in the
- notifier.
+ * win/tclWinConsole.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c: Fixed race condition where background threads
+ were terminated while they still held a lock in the notifier.
-1999-04-02 <stanton@scriptics.com>
+1999-04-02 Scott Stanton <stanton@scriptics.com>
* tests/http.test: Fixed bad test initialization code.
* generic/tclThreadTest.c (ThreadExitProc): Fixed bug where static
- memory was being returned instead of a dynamically allocated
- result in error cases.
+ memory was being returned instead of a dynamically allocated result in
+ error cases.
-1999-04-02 <redman@scriptics.com>
+1999-04-02 Scott Redman <redman@scriptics.com>
* doc/dde.n:
* tools/tcl.wse.in:
* win/makefile.vc:
* win/pkgIndex.tcl:
- * win/tclWinDde.c: Add new DDE package, code removed from Tk now
- separated into its own package. Changed DDE-based send code into
- "dde eval" command. Can be loaded into tclsh (not just wish).
- Windows only.
-
-1999-04-02 <stanton@scriptics.com>
-
- * tests/expr.test:
- * tests/for-old.test:
- * tests/for.test:
- * tests/foreach.test:
- * tests/format.test:
- * tests/httpold.test:
- * tests/if.test:
- * tests/init.test:
- * tests/interp.test:
- * tests/while.test: Added some tests for known bugs (marked with
+ * win/tclWinDde.c: Add new DDE package, code removed from Tk now
+ separated into its own package. Changed DDE-based send code into "dde
+ eval" command. Can be loaded into tclsh (not just wish). Windows only.
+
+1999-04-02 Scott Stanton <stanton@scriptics.com>
+
+ * tests/expr.test:
+ * tests/for-old.test:
+ * tests/for.test:
+ * tests/foreach.test:
+ * tests/format.test:
+ * tests/httpold.test:
+ * tests/if.test:
+ * tests/init.test:
+ * tests/interp.test:
+ * tests/while.test: Added some tests for known bugs (marked with
knownBug constraint), and cleaned up a few bad tests.
- * generic/regc_locale.c:
- * generic/regcustom.h:
- * generic/tcl.decls:
- * generic/tclCmdIL.c:
- * generic/tclCmdMZ.c:
- * generic/tclInt.h:
- * generic/tclRegexp.c:
- * generic/tclScan.c:
+ * generic/regc_locale.c:
+ * generic/regcustom.h:
+ * generic/tcl.decls:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclInt.h:
+ * generic/tclRegexp.c:
+ * generic/tclScan.c:
* generic/tclTest.c:
- * generic/tclUtf.c:
- * win/tclWinFCmd.c:
- * win/tclWinFile.c: Made various Unicode utility functions
- public. The following functions were made public and added to the
- stubs table:
+ * generic/tclUtf.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c: Made various Unicode utility functions public. The
+ following functions were made public and added to the stubs table:
Tcl_UtfToUniCharDString, Tcl_UniCharToUtfDString,
Tcl_UniCharLen, Tcl_UniCharNcmp, Tcl_UniCharIsAlnum,
Tcl_UniCharIsAlpha, Tcl_UniCharIsDigit, Tcl_UniCharIsLower,
Tcl_UniCharIsSpace, Tcl_UniCharIsUpper, Tcl_UniCharIsWordChar
-1999-04-01 <stanton@scriptics.com>
+1999-04-01 Scott Stanton <stanton@scriptics.com>
- * tests/registry.test:
- * win/tclWinReg.c: Internationalized the registry code. It now
- uses Unicode interfaces on NT. [Bug: 1197]
+ * tests/registry.test:
+ * win/tclWinReg.c: Internationalized the registry code. It now uses
+ Unicode interfaces on NT. [Bug 1197]
- * tests/parse.test:
+ * tests/parse.test:
* generic/tclParse.c: Fixed crash due to multiple frees in parser
- during error cleanup when parsing commands with more tokens than
- will fit in the static area of the parse structure. [Bug: 1681]
+ during error cleanup when parsing commands with more tokens than will
+ fit in the static area of the parse structure. [Bug 1681]
* generic/tclInt.h: Removed duplicate declarations.
- * generic/tclInt.decls:
- * generic/tcl.decls: Added Tcl_WinUtfToTChar and Tcl_WinTCharToUtf
- to the tclPlat table.
+ * generic/tclInt.decls:
+ * generic/tcl.decls: Added Tcl_WinUtfToTChar and Tcl_WinTCharToUtf to
+ the tclPlat table.
-1999-04-01 <redman@scriptics.com>
+1999-04-01 Scott Redman <redman@scriptics.com>
* generic/tcl.decls:
* generic/tcl.h:
@@ -1904,44 +1857,44 @@
* tools/genStubs.tcl:
* unix/Makefile.in:
* win/makefile.vc: Applied patch from Jan Nijtmans to fix Ultrix
- multiple symbol definition problem. Now, even Tcl includes a copy
- of the Tcl stub library. Also fixed TCL_MEM_DEBUG mode (for Tk).
+ multiple symbol definition problem. Now, even Tcl includes a copy of
+ the Tcl stub library. Also fixed TCL_MEM_DEBUG mode (for Tk).
-1999-03-31 <redman@scriptics.com>
+1999-03-31 Scott Redman <redman@scriptics.com>
- * win/tclWinConsole.c: WinNT has a bug when reading a single
- character from the console. Rewrote the code for the console to
- read an entire line at a time using the reader thread.
+ * win/tclWinConsole.c: WinNT has a bug when reading a single character
+ from the console. Rewrote the code for the console to read an entire
+ line at a time using the reader thread.
-1999-03-30 <stanton@scriptics.com>
+1999-03-30 Scott Stanton <stanton@scriptics.com>
- * unix/Makefile.in: Removed trailing backslash that broke the
- "depend" target.
+ * unix/Makefile.in: Removed trailing backslash that broke the "depend"
+ target.
* unix/tclUnixInit.c (TclpSetInitialEncodings): Changed to avoid
- calling setlocale(). We now look directly at env(LANG) and
- env(LC_CTYPE) instead. [Bug: 1636]
+ calling setlocale(). We now look directly at env(LANG) and
+ env(LC_CTYPE) instead. [Bug 1636]
- * generic/tclFileName.c:
- * generic/tclDecls.h:
+ * generic/tclFileName.c:
+ * generic/tclDecls.h:
* generic/tcl.decls: Removed CONST from Tcl_JoinPath and
- Tcl_TranslateFileName because it changes the signature of
- Tcl_JoinPath in an incompatible manner.
+ Tcl_TranslateFileName because it changes the signature of Tcl_JoinPath
+ in an incompatible manner.
- * generic/tclInt.h:
- * generic/tclLoad.c (TclFinalizeLoad):
+ * generic/tclInt.h:
+ * generic/tclLoad.c (TclFinalizeLoad):
* generic/tclEvent.c (Tcl_Finalize): Defer unloading of loadable
- modules until all exit handlers have been invoked.
- [Bug: 998, 1273, 1573, 1593]
+ modules until all exit handlers have been invoked. [Bug 998, 1273,
+ 1573, 1593]
-1999-03-29 <stanton@scriptics.com>
+1999-03-29 Scott Stanton <stanton@scriptics.com>
- * generic/tclFileName.c:
- * generic/tclDecls.h:
+ * generic/tclFileName.c:
+ * generic/tclDecls.h:
* generic/tcl.decls: Added CONST to Tcl_JoinPath and
Tcl_TranslateFileName.
-1999-03-29 <redman@scriptics.com>
+1999-03-29 Scott Redman <redman@scriptics.com>
* tools/genStubs.tcl:
* unix/configure.in:
@@ -1952,207 +1905,203 @@
* generic/tclDecls.h:
* generic/tclIntDecls.h:
* generic/tclPlatDecls.h:
- * generic/tclIntPlatDecls.h: Removed the stub functions and
- changed the stub macros to just use the name without params. Pass
- &tclStubs into the interp (don't use tclStubsPtr because of
- collisions with the stubs on Solaris).
-
-1999-03-27 <redman@scriptics.com>
+ * generic/tclIntPlatDecls.h: Removed the stub functions and changed
+ the stub macros to just use the name without params. Pass &tclStubs
+ into the interp (don't use tclStubsPtr because of collisions with the
+ stubs on Solaris).
- * win/makefile.bc: Removed makefile for Borland compiler, no
- longer supported.
+1999-03-27 Scott Redman <redman@scriptics.com>
-1999-03-26 <redman@scriptics.com>
+ * win/makefile.bc: Removed makefile for Borland compiler, no longer
+ supported.
+
+1999-03-26 Scott Redman <redman@scriptics.com>
* win/tclWinSerial.c:
* win/tclWinConsole.c:
- * win/tclWinPipe.c: Don't close the Win32 handle for a channel if
- it's a stdio handle (GetStdHandle()) during shutdown of a thread
- to prevent it from destroying the stdio of other threads.
+ * win/tclWinPipe.c: Don't close the Win32 handle for a channel if it's
+ a stdio handle (GetStdHandle()) during shutdown of a thread to prevent
+ it from destroying the stdio of other threads.
+
+1999-03-26 Suresh Ankolekar <suresh@scriptics.com>
-1999-03-26 <suresh@scriptics.com>
+ * unix/configure.in: --nameble-shared is now the default and build Tcl
+ as a shared library; specify --disable-shared to build a static Tcl
+ library and shell.
- * unix/configure.in
- --nameble-shared is now the default and build Tcl as a shared
- library; specify --disable-shared to build a static Tcl library
- and shell.
+1999-03-25 Scott Stanton <stanton@scriptics.com>
-1999-03-25 <stanton@scriptics.com>
+ * tests/interp.test:
+ * generic/tclInterp.c (AliasObjCmd): Changed so aliases are invoked at
+ current scope in the target interpreter instead of at the global
+ scope. This was an incompatibility introduced in 8.1 that is being
+ removed. [Bug 1153, 1556]
- * tests/interp.test:
- * generic/tclInterp.c (AliasObjCmd): Changed so aliases are
- invoked at current scope in the target interpreter instead of at
- the global scope. This was an incompatibility introduced in 8.1
- that is being removed. [Bug: 1153, 1556]
-
* library/encoding/big5.enc:
* library/encoding/gb2312.enc:
* tools/encoding/big5.enc:
- * tools/encoding/gb2312.enc: Added ASCII to big5 and gb2312
- encodings. [Bug: 632]
-
+ * tools/encoding/gb2312.enc: Added ASCII to big5 and gb2312 encodings.
+ [Bug 632]
+
* generic/tclPkg.c (Tcl_PkgRequireEx): Fixed broken clientData
initialization in package code.
- * unix/Makefile.in (dist): Added tcl.decls and tclInt.decls to
- source distribution. [Bug: 1571]
+ * unix/Makefile.in (dist): Added tcl.decls and tclInt.decls to source
+ distribution. [Bug 1571]
* doc/Thread.3: Updated documentation of Tcl_MutexLock to indicate
- that the recursive locking behavior is undefined. On Windows, it
- does not block, on Unix it deadlocks. [Bug: 1275]
+ that the recursive locking behavior is undefined. On Windows, it does
+ not block, on Unix it deadlocks. [Bug 1275]
-1999-03-24 <stanton@scriptics.com>
+1999-03-24 Scott Stanton <stanton@scriptics.com>
- * tests/execute.test:
+ * tests/execute.test:
* generic/tclExecute.c (TclExecuteByteCode): Fixed expression code
- that incorrectly returned floating point values for integers if
- the internal rep happened to be a double. Now we check to see if
- the object has a string rep that looks like an integer before
- using the double internal rep. [Bug: 1516]
+ that incorrectly returned floating point values for integers if the
+ internal rep happened to be a double. Now we check to see if the
+ object has a string rep that looks like an integer before using the
+ double internal rep. [Bug 1516]
-1999-03-24 <redman@scriptics.com>
+1999-03-24 Scott Redman <redman@scriptics.com>
* generic/tclAlloc.c:
* generic/tclEncoding.c:
* generic/tclProc.c:
* unix/tclUnixTime.c:
- * win/tclWinSerial.c: Fixed compilation warnings/errors for VC++
- 5.0 and 6.0 and HP-UX native compiler without -Aa or -Ae.
- [Bug: 1323 1518 1324 1583 1585 1586]
+ * win/tclWinSerial.c: Fixed compilation warnings/errors for VC++ 5.0
+ and 6.0 and HP-UX native compiler without -Aa or -Ae. [Bug 1323 1518
+ 1324 1583 1585 1586]
- * win/tclWinSock.c: Make sockets thread-safe on Windows. The
- current implementation uses windows to handle events on the
- socket, one for each thread (thread local storage). Previously,
- there was only one window shared between threads, which didn't
- work. [Bug: 1326]
+ * win/tclWinSock.c: Make sockets thread-safe on Windows. The current
+ implementation uses windows to handle events on the socket, one for
+ each thread (thread local storage). Previously, there was only one
+ window shared between threads, which didn't work. [Bug 1326]
-1999-03-23 <stanton@scriptics.com>
+1999-03-23 Scott Stanton <stanton@scriptics.com>
- * tools/tcl.wse: Fixed file association to look in the right place
- for the wish icon. [Bug: 1544]
+ * tools/tcl.wse: Fixed file association to look in the right place for
+ the wish icon. [Bug 1544]
- * tests/winNotify.test:
- * tests/ioCmd.test:
+ * tests/winNotify.test:
+ * tests/ioCmd.test:
* tests/event.test: Changed to use new style conditionals.
* tests/encoding.test: Fixed nonportable test.
- * unix/dltest/configure.in:
- * unix/dltest/Makefile.in: Added missing DBGX macros. [Bug: 1564]
+ * unix/dltest/configure.in:
+ * unix/dltest/Makefile.in: Added missing DBGX macros. [Bug 1564]
- * tests/winNotify.test:
- * mac/tclMacNotify.c:
- * win/tclWinNotify.c:
+ * tests/winNotify.test:
+ * mac/tclMacNotify.c:
+ * win/tclWinNotify.c:
* unix/tclUnixNotfy.c:
- * generic/tclNotify.c: Added a new Tcl_ServiceModeHook interface
- that is invoked whenever the service mode changes. This is needed
- to allow the Windows notifier to create a communication window the
- first time Tcl is about to enter an external modal event loop
- instead of at startup time. This will avoid the various problems
- that people have been seeing where the system hangs when tclsh
- is running outside of the event loop. [Bug: 783]
-
- * generic/tclInt.h:
+ * generic/tclNotify.c: Added a new Tcl_ServiceModeHook interface that
+ is invoked whenever the service mode changes. This is needed to allow
+ the Windows notifier to create a communication window the first time
+ Tcl is about to enter an external modal event loop instead of at
+ startup time. This will avoid the various problems that people have
+ been seeing where the system hangs when tclsh is running outside of
+ the event loop. [Bug 783]
+
+ * generic/tclInt.h:
* generic/tcl.decls: Renamed TclpAlertNotifier back to
- Tcl_AlertNotifier since it is part of the public notifier driver
- API.
+ Tcl_AlertNotifier since it is part of the public notifier driver API.
+
+1999-03-23 Scott Redman <redman@scriptics.com>
-1999-03-23 <redman@scriptics.com>
+ * win/tclWinSerial.c: Fixed problem with fileevent on the serial port
+ and nonblocking mode. Gets no longer hangs, fileevents fire whenever
+ there is any character data on the port.
- * win/tclWinSerial.c: Fixed problem with fileevent on the serial
- port and nonblocking mode. Gets no longer hangs, fileevents fire
- whenever there is any character data on the port.
-
* tests/winConsole.test:
- * win/tclWinConsole.c: Fixed problem with fileevents and gets from
- a console stdin. Previously, fileevents were firing before an
- entire line was available for reading, which meant that when you
- did a gets or read, it blocked (even in nonblocking mode). Now, it
- should work the same as Unix: fileevents fire when an entire line
- is ready, and gets and read do not block in non-blocking mode.
- Added an interactive test case to check for this.
+ * win/tclWinConsole.c: Fixed problem with fileevents and gets from a
+ console stdin. Previously, fileevents were firing before an entire
+ line was available for reading, which meant that when you did a gets
+ or read, it blocked (even in nonblocking mode). Now, it should work
+ the same as Unix: fileevents fire when an entire line is ready, and
+ gets and read do not block in non-blocking mode. Added an interactive
+ test case to check for this.
-1999-03-22 <stanton@scriptics.com>
+1999-03-22 Scott Stanton <stanton@scriptics.com>
- * tests/reg.test:
+ * tests/reg.test:
* generic/regc_color.c: Applied regexp bug fix from Henry Spencer.
-1999-03-19 <redman@scriptics.com>
+1999-03-19 Scott Redman <redman@scriptics.com>
- * generic/tclCmdIL.c: Fixed the initialization of an array so that
- the Sun 5.0 C compiler wouldn't complain.
+ * generic/tclCmdIL.c: Fixed the initialization of an array so that the
+ Sun 5.0 C compiler wouldn't complain.
- * unix/configure.in: Added support for --enable-64bit. For now,
- this is only supported on Solaris 7 64bit (SunOS 5.7) using the Sun
+ * unix/configure.in: Added support for --enable-64bit. For now, this
+ is only supported on Solaris 7 64bit (SunOS 5.7) using the Sun
compiler (not gcc).
-
-1999-03-18 <stanton@scriptics.com>
- * win/tclWinChan.c (TclpOpenFileChannel, Tcl_MakeFileChannel):
- Changed to only test for console or comm handles when the type is
- FILE_TYPE_CHAR to avoid useless tests on simple files. Also
- reordered tests so consoles are tested first as this is more
- common.
+1999-03-18 Scott Stanton <stanton@scriptics.com>
+
+ * win/tclWinChan.c (TclpOpenFileChannel, Tcl_MakeFileChannel): Changed
+ to only test for console or comm handles when the type is
+ FILE_TYPE_CHAR to avoid useless tests on simple files. Also reordered
+ tests so consoles are tested first as this is more common.
* win/makefile.vc: Regularized usage of mkd and rmd and rm.
- * library/encoding/shiftjis.enc:
+ * library/encoding/shiftjis.enc:
* tools/encoding/shiftjis.txt: Missing/incorrect characters in
- shift-jis table. [Bug: 1008, 1526]
+ shift-jis table. [Bug 1008, 1526]
* generic/tclInt.decls:
* generic/tcl.decls: Eliminated use of "string" and "list" from
- argument lists to avoid conflicts with C++ STL. [Bug: 1181]
+ argument lists to avoid conflicts with C++ STL. [Bug 1181]
* win/tclWinFile.c (TclpMatchFiles): Changed to ignore the
- FS_CASE_IS_PRESERVED bit and always return exactly what we get
- from the system.
+ FS_CASE_IS_PRESERVED bit and always return exactly what we get from
+ the system.
-1999-03-17 <stanton@GASPODE>
+1999-03-17 Scott Stanton <stanton@GASPODE>
- * win/README.binary:
- * win/README:
- * unix/configure.in:
- * generic/tcl.h:
+ * win/README.binary:
+ * win/README:
+ * unix/configure.in:
+ * generic/tcl.h:
* README: Updated version to 8.1b3.
-1999-03-14 <stanton@GASPODE>
+1999-03-14 Scott Stanton <stanton@GASPODE>
- * win/tclWinConsole.c:
- * win/tclWinPipe.c:
+ * win/tclWinConsole.c:
+ * win/tclWinPipe.c:
* win/tclWinSerial.c: Changed so channel drivers wait for the
reader/writer threads to exit before returning during a close
- operation. This ensures that the main thread is the last thread
- to exit, so the process return value is set properly.
-
- * generic/tclIntDecls.h:
- * generic/tclIntPlatDecls.h:
- * generic/tclIntPlatStubs.c:
- * generic/tclIntStubs.c:
- * generic/tclPlatDecls.h:
- * generic/tclPlatStubs.c:
- * generic/tclStubInit.c:
+ operation. This ensures that the main thread is the last thread to
+ exit, so the process return value is set properly.
+
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclIntPlatStubs.c:
+ * generic/tclIntStubs.c:
+ * generic/tclPlatDecls.h:
+ * generic/tclPlatStubs.c:
+ * generic/tclStubInit.c:
* generic/tclStubs.c: Fixed bad eol characters.
-
- * generic/tclInt.decls: Changed "const" to "CONST" in
- declarations for better portability.
+
+ * generic/tclInt.decls: Changed "const" to "CONST" in declarations for
+ better portability.
* generic/tcl.decls: Renamed panic and panicVA to Tcl_Panic and
Tcl_PanicVA in the stub files.
- * generic/tclInterp.c (Tcl_MakeSafe): Remove tcl_platform(user)
- from safe interps.
+ * generic/tclInterp.c (Tcl_MakeSafe): Remove tcl_platform(user) from
+ safe interps.
-1999-03-11 <stanton@GASPODE>
+1999-03-11 Scott Stanton <stanton@GASPODE>
* unix/Makefile.in:
* unix/configure.in: Include compat files in the stub library in
- addition to the main library. Compat files are now built for
- dynamic use in all cases.
-
+ addition to the main library. Compat files are now built for dynamic
+ use in all cases.
+
* generic/tcl.h: Changed magic number so it doesn't match the plus
patch, at Jan's request.
-
+
* unix/tclConfig.sh.in:
* unix/dltest/Makefile.in:
* unix/dltest/configure.in:
@@ -2161,65 +2110,62 @@
* unix/dltest/pkgc.c:
* unix/dltest/pkgd.c:
* unix/dltest/pkge.c:
- * unix/dltest/pkgf.c: Changed package tests to build against the
- stubs library.
+ * unix/dltest/pkgf.c: Changed package tests to build against the stubs
+ library.
-1999-03-10 <stanton@GASPODE>
+1999-03-10 Scott Stanton <stanton@GASPODE>
- * generic/tcl.h:
- * generic/tcl.decls: Changed Tcl_ReleaseType from an enum to
- macros so it can be used in .rc files.
- Added Tcl_GetString.
+ * generic/tcl.h:
+ * generic/tcl.decls: Changed Tcl_ReleaseType from an enum to macros so
+ it can be used in .rc files. Added Tcl_GetString.
* mac/tclMacNotify.c:
* generic/tclNotify.c:
- * generic/tclInt.h:
- * win/tclWinNotify.c:
+ * generic/tclInt.h:
+ * win/tclWinNotify.c:
* generic/tcl.h: Renamed Tcl_AlertNotifier to TclpAlertNotifier.
- * generic/tclInt.decls: Added TclWinAddProcess to make it possible
- for expect to use Tcl_WaitForPid(). This patch is from Gordon
- Chaffee.
+ * generic/tclInt.decls: Added TclWinAddProcess to make it possible for
+ expect to use Tcl_WaitForPid(). This patch is from Gordon Chaffee.
- * mac/tclMacPort.h:
- * win/tclWinInit.c:
- * unix/tclUnixPort.h:
- * generic/tclAsync.c: Added TclpAsyncMark to fix bug in async
- handling on Windows where async events don't wake up the event
- loop. This patch comes from Gordon Chaffee.
+ * mac/tclMacPort.h:
+ * win/tclWinInit.c:
+ * unix/tclUnixPort.h:
+ * generic/tclAsync.c: Added TclpAsyncMark to fix bug in async handling
+ on Windows where async events don't wake up the event loop. This patch
+ comes from Gordon Chaffee.
* generic/tcl.decls: Fixed declarations of reserved slots.
-
-1999-03-10 <redman@scriptic.com>
+
+1999-03-10 Scott Redman <redman@scriptic.com>
* generic/tclCompile.h: Ensure that the ByteCode struct is binary
compatible with the version in 8.0.6.
* generic/tcl.h:
- * generic/tclBasic.c: Add Tcl_GetVersion() function to the public
- C API to allow programs to check the version number of the Tcl
- library at runtime. Also added an enum to clarify the release
- level (alpha, beta, final).
+ * generic/tclBasic.c: Add Tcl_GetVersion() function to the public C
+ API to allow programs to check the version number of the Tcl library
+ at runtime. Also added an enum to clarify the release level (alpha,
+ beta, final).
-1999-03-09 <stanton@GASPODE>
+1999-03-09 Scott Stanton <stanton@GASPODE>
* Integrated changes from Tcl 8.0 including:
stubs mechanism
configure patches from Jan Nijtmans
rename of panic to Tcl_Panic
-
-1999-03-08 <lfb@scriptics.com>
- * win/tclWin32Dll.c: Removed Dll instance from thread-local
- storage.
+1999-03-08 Lee Bernhard <lfb@scriptics.com>
+
+ * win/tclWin32Dll.c: Removed Dll instance from thread-local storage.
-1999-03-08 <stanton@GASPODE>
-
- * generic/tcl.h: Moved Tcl_Mutex, etc. macros above the inclusion
- of tclDecls.h to avoid macro conflicts.
+1999-03-08 Scott Stanton <stanton@GASPODE>
+
+ * generic/tcl.h: Moved Tcl_Mutex, etc. macros above the inclusion of
+ tclDecls.h to avoid macro conflicts.
* generic/tclInt.h:
- * generic/regc_color.c:
+ * generic/regc_color.c:
* generic/regcomp.c:
* generic/tclCmdIL.c:
* generic/tclCmdAH.c:
@@ -2228,20 +2174,20 @@
* generic/tclStringObj.c:
* unix/tclUnixNotfy.c: Cleaned up various compiler warnings,
eliminated UCHAR bugs.
-
+
* unix/tclUnixNotfy.c:
* unix/tclUnixThrd.c:
* generic/tclThreadTest.c:
* mac/tclMacThrd.c: Changed TclpCondition*() to Tcl_Condition*().
-
+
* INTEGRATED PATCHES FROM 8.0.6:
* generic/tcl.decls:
* generic/tcl.h:
- * generic/tclBasic.c:
+ * generic/tclBasic.c:
* generic/tclDecls.h:
* generic/tclInt.decls:
- * generic/tclInt.h:
+ * generic/tclInt.h:
* generic/tclIntDecls.h:
* generic/tclIntPlatDecls.h:
* generic/tclIntPlatStubs.c:
@@ -2255,199 +2201,194 @@
* unix/configure.in:
* unix/Makefile.in:
* unix/tclConfig.sh.in:
- * win/makefile.vc:
- * win/tclWinPort.h: Added Tcl stubs implementation. There are
- now two new macros USE_TCL_STUBS and USE_TCL_STUB_PROCS that
- enable use of stubs and disable stub macros respectively. All of
- the public and private function declarations from tcl.h and
- tclInt.h have moved into the *.decls files and the *Stubs.c and
- *Decls.h files are generated using the genStubs.tcl script.
+ * win/makefile.vc:
+ * win/tclWinPort.h: Added Tcl stubs implementation. There are now two
+ new macros USE_TCL_STUBS and USE_TCL_STUB_PROCS that enable use of
+ stubs and disable stub macros respectively. All of the public and
+ private function declarations from tcl.h and tclInt.h have moved into
+ the *.decls files and the *Stubs.c and *Decls.h files are generated
+ using the genStubs.tcl script.
* unix/Makefile.in:
- * unix/configure.in:
+ * unix/configure.in:
* unix/ldAix: Enhanced AIX shared library support.
* win/tclWinSock.c: Removed a bunch of extraneous PASCAL FAR
attributes from internal functions.
- * win/tclWinReg.c: Changed registry package to use stubs mechanism
- so it no longer depends on the specific version of Tcl.
+ * win/tclWinReg.c: Changed registry package to use stubs mechanism so
+ it no longer depends on the specific version of Tcl.
- * doc/AddErrInfo.3:
- * doc/Eval.3:
- * doc/PkgRequire.3:
- * doc/SetResult.3:
- * doc/StringObj.3:
+ * doc/AddErrInfo.3:
+ * doc/Eval.3:
+ * doc/PkgRequire.3:
+ * doc/SetResult.3:
+ * doc/StringObj.3:
* generic/tcl.h:
- * generic/tclBasic.c:
+ * generic/tclBasic.c:
* generic/tclPanic.c:
* generic/tclStringObj.c:
* generic/tclUtil.c:
- * unix/mkLinks: Added va_list versions of all VARARGS
- functions so they can be invoked from the stub functions.
+ * unix/mkLinks: Added va_list versions of all VARARGS functions so
+ they can be invoked from the stub functions.
- * doc/package.n:
- * doc/PkgRequire.3:
+ * doc/package.n:
+ * doc/PkgRequire.3:
* generic/tclPkg.c: Added Tcl_PkgProvideEx, Tcl_RequireEx,
- Tcl_PresentEx, and Tcl_PkgPresent. Added "package present"
- command.
+ Tcl_PresentEx, and Tcl_PkgPresent. Added "package present" command.
- * generic/tclFileName.c:
- * mac/tclMacFile.c:
- * mac/tclMacShLib.exp:
- * unix/tclUnixFile.c:
- * win/tclWinFile.c: Changed so TclGetUserHome is defined on
- all platforms, even though it is currently a noop on mac and
- windows, and renamed it to TclpGetUserHome.
+ * generic/tclFileName.c:
+ * mac/tclMacFile.c:
+ * mac/tclMacShLib.exp:
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c: Changed so TclGetUserHome is defined on all
+ platforms, even though it is currently a noop on mac and windows, and
+ renamed it to TclpGetUserHome.
* generic/tclPanic.c:
* generic/panic.c: Renamed panic to Tcl_Panic.
-
-1999-02-25 <redman@scriptics.com>
+
+1999-02-25 Scott Redman <redman@scriptics.com>
* win/makefile.vc: Added tclWinConsole.c and tclWinSerial.c
-
- * win/tclWinConsole.c: New code to properly deal with fileevents
- and nonblocking mode on consoles.
-
- * win/tclWinSerial.c: New code to properly deal with fileevents
- and nonblocking mode on serial ports.
-
- * win/tclWinPipe.c:
+
+ * win/tclWinConsole.c: New code to properly deal with fileevents and
+ nonblocking mode on consoles.
+
+ * win/tclWinSerial.c: New code to properly deal with fileevents and
+ nonblocking mode on serial ports.
+
+ * win/tclWinPipe.c:
* win/tclWinPort.h: Exported functions to allow creation of pipe
channels from tclWinChan.c
* win/tclWinChan.c: Check the type of a channel, including for the
- standard (stdin/stdout/stderr), and use the correct channel type
- to create the channel (file, serial, console, or pipe).
+ standard (stdin/stdout/stderr), and use the correct channel type to
+ create the channel (file, serial, console, or pipe).
-1999-02-11 <stanton@GASPODE>
+1999-02-11 Scott Stanton <stanton@GASPODE>
- * README:
- * generic/tcl.h:
- * win/README.binary:
- * win/README:
- * unix/configure.in:
+ * README:
+ * generic/tcl.h:
+ * win/README.binary:
+ * win/README:
+ * unix/configure.in:
* mac/README: Updated version numbers to 8.1b2.
-1999-02-10 <stanton@GASPODE>
+1999-02-10 Scott Stanton <stanton@GASPODE>
- * library/auto.tcl: Fixed auto_mkindex so it handles .tbc files.
- Did some general cleanup to handle bad eval statements that didn't
- use "list".
+ * library/auto.tcl: Fixed auto_mkindex so it handles .tbc files. Did
+ some general cleanup to handle bad eval statements that didn't use
+ "list".
* unix/mkLinks:
* doc/SetVar.3:
* generic/tcl.h:
- * generic/tclVar.c: Restored Tcl_ObjGetVar2 and Tcl_ObjSetVar2
- from 8.0. Renamed Tcl_Get/SetObjVar2 to Tcl_GetVar2Ex and
- Tcl_SetVar2Ex.
+ * generic/tclVar.c: Restored Tcl_ObjGetVar2 and Tcl_ObjSetVar2 from
+ 8.0. Renamed Tcl_Get/SetObjVar2 to Tcl_GetVar2Ex and Tcl_SetVar2Ex.
-1999-02-10 <stanton@GASPODE>
+1999-02-10 Scott Stanton <stanton@GASPODE>
- INTEGRATED PATCHES FROM 8.0.5b2:
+ INTEGRATED PATCHES FROM 8.0.5b2:
* test/winPipe.test: Changed to remove echoArgs.tcl temporary file
when done.
-
+
* tests/cmdAH.test:
* generic/tclFileName.c (TclGetExtension): Changed behavior so the
split happens at the last period in the name instead of the first
- period of the last run of periods. So, "foo..o" is split into
- "foo." and ".o" now. [Bug: 1126]
-
- * win/makefile.vc: Added better support for paths with spaces in
- the name. Added .lib and support .dlls to the install-binaries
- target. Added generate of a pkgIndex.tcl script to the
- install-libraries target.
-
- * win/tclAppInit.c:
- * unix/tclAppInit.c:
- * mac/tclMacAppInit.c:
- * generic/tclTest.c: Changed some EXTERN declarations to extern
- since they are not defining exported interfaces. This avoids
- generating useless declspec() attributes and makes the windows
- makefile simpler.
-
- * generic/tcl.h: Moved Tcl_AppInit declaration to end and cleared
- out TCL_STORAGE_CLASS so it is not declared with a declspec().
+ period of the last run of periods. So, "foo..o" is split into "foo."
+ and ".o" now. [Bug 1126]
+
+ * win/makefile.vc: Added better support for paths with spaces in the
+ name. Added .lib and support .dlls to the install-binaries target.
+ Added generate of a pkgIndex.tcl script to the install-libraries
+ target.
+
+ * win/tclAppInit.c:
+ * unix/tclAppInit.c:
+ * mac/tclMacAppInit.c:
+ * generic/tclTest.c: Changed some EXTERN declarations to extern since
+ they are not defining exported interfaces. This avoids generating
+ useless declspec() attributes and makes the windows makefile simpler.
+
+ * generic/tcl.h: Moved Tcl_AppInit declaration to end and cleared out
+ TCL_STORAGE_CLASS so it is not declared with a declspec().
* tests/interp.test:
* generic/tclInterp.c (DeleteAlias): Changed to use
- Tcl_DeleteCommandFromToken so we handle renames properly. This
- avoids senseless panic. [Bug: 736]
+ Tcl_DeleteCommandFromToken so we handle renames properly. This avoids
+ senseless panic. [Bug 736]
- * unix/tclUnixChan.c:
- * win/tclWinSock.c:
+ * unix/tclUnixChan.c:
+ * win/tclWinSock.c:
* doc/socket.n: Applied Gordon Chaffee's patch to handle failures
- during asynchronous socket connection operations. This adds a new
- "-error" fconfgure option to socket channels. [Bug: 893]
+ during asynchronous socket connection operations. This adds a new
+ "-error" fconfgure option to socket channels. [Bug 893]
* generic/tclProc.c:
* generic/tclNamesp.c:
- * generic/tclInt.h:
- * generic/tclCmdIL.c:
- * generic/tclBasic.c:
- * generic/tclVar.c: Applied patch from Viktor Dukhovni to
- rationalize TCL_LEAVE_ERR_MSG behavior when creating variables.
-
- * generic/tclVar.c: Fixed bug in namespace tail computation.
- Fixed bug where upvar could resurrect a namespace variable whose
- namespace had been deleted.
+ * generic/tclInt.h:
+ * generic/tclCmdIL.c:
+ * generic/tclBasic.c:
+ * generic/tclVar.c: Applied patch from Viktor Dukhovni to rationalize
+ TCL_LEAVE_ERR_MSG behavior when creating variables.
+
+ * generic/tclVar.c: Fixed bug in namespace tail computation. Fixed bug
+ where upvar could resurrect a namespace variable whose namespace had
+ been deleted.
* generic/tclCompile.c (TclCompileExprCmd): Eliminated yet another
bogus optimization in expression compilation.
- * unix/configure.in: Added branch for BSD/OS-4* to shared library
- case statement. [Bug: 975]
- Fixed to correctly handle IRIX 6.5 n32 library support. [Bug: 1117]
-
- * win/winDumpExts.c: Patched to be pickier about stripping
- @'s. [Bug: 920]
+ * unix/configure.in: Added branch for BSD/OS-4* to shared library case
+ statement. [Bug 975]
+ Fixed to correctly handle IRIX 6.5 n32 library support. [Bug 1117]
- * library/http2.0/http.tcl: Added catch around eof test in
- CopyDone since the user may have already called http::reset.
- [Bug: 1108]
+ * win/winDumpExts.c: Patched to be pickier about stripping @'s. [Bug
+ 920]
- * unix/configure.in: Changed Linux and IRIX to set SHLIB_LIBS to
- LIBS so shared libraries are linked with the system
- libraries. [Bug: 1018]
+ * library/http2.0/http.tcl: Added catch around eof test in CopyDone
+ since the user may have already called http::reset. [Bug 1108]
+
+ * unix/configure.in: Changed Linux and IRIX to set SHLIB_LIBS to LIBS
+ so shared libraries are linked with the system libraries. [Bug 1018]
* generic/tclCompile.c (CompileExprWord): Fixed exception stack
- overflow bug caused by missing statement. [Bug: 928]
+ overflow bug caused by missing statement. [Bug 928]
- * generic/tclIOCmd.c:
- * generic/tclBasic.c: Objectified the "open" command. [Bug: 1113]
+ * generic/tclIOCmd.c:
+ * generic/tclBasic.c: Objectified the "open" command. [Bug 1113]
- * generic/tclPosixStr.c (Tcl_ErrnoId, Tcl_ErrnoMsg): When using
- egcs, ENOTSUP and EOPNOTSUPP are the same, so now we handle that
- case. [Bug: 1137]
+ * generic/tclPosixStr.c (Tcl_ErrnoId, Tcl_ErrnoMsg): When using egcs,
+ ENOTSUP and EOPNOTSUPP are the same, so now we handle that case. [Bug
+ 1137]
* library/init.tcl: Various small changes requested by Jan Nijtmans.
- - If the variable $tcl_library contains the empty string, this
- empty string will be put in $auto_path. This is not useful at all,
- it only slows down later package processing.
- - If the variable tcl_pkgPath is not set, the "unset __dir"
- fails. Thich makes init.tcl totally unusable. Better put a "catch"
- around it.
- - In the function tcl_findLibraries, the "string match" function
- only works correctly if $tcl_patchLevel is in one of the forms
- "?.?a?", "?.?b?" or "?.?.?". Could a "regexp" be used instead,
- then it allows anything to be appended to the patchLevel
- string. And it is more efficient.
- - The tclPkgSetup function assumes that if $type != "load" then
- the type must be "source". This needn't be true. Some users want
- to add their own setup types.
- [RFE: 1138] [Bug: 978]
-
- * win/tclWinReg.c:
+ - If the variable $tcl_library contains the empty string, this empty
+ string will be put in $auto_path. This is not useful at all, it only
+ slows down later package processing.
+ - If the variable tcl_pkgPath is not set, the "unset __dir" fails.
+ Thich makes init.tcl totally unusable. Better put a "catch" around
+ it.
+ - In the function tcl_findLibraries, the "string match" function only
+ works correctly if $tcl_patchLevel is in one of the forms "?.?a?",
+ "?.?b?" or "?.?.?". Could a "regexp" be used instead, then it allows
+ anything to be appended to the patchLevel string. And it is more
+ efficient.
+ - The tclPkgSetup function assumes that if $type != "load" then the
+ type must be "source". This needn't be true. Some users want to add
+ their own setup types.
+ [RFE 1138] [Bug 978]
+
+ * win/tclWinReg.c:
* doc/registry.n: Added support for HKEY_PERFORMANCE_DATA and
- HKEY_DYN_DATA keys. [Bug: 1109]
+ HKEY_DYN_DATA keys. [Bug 1109]
- * win/tclWinInit.c (TclPlatformInit): Added code to ensure
- tcl_pkgPath is set to "" when no registry entry is found. [Bug: 978]
+ * win/tclWinInit.c (TclPlatformInit): Added code to ensure tcl_pkgPath
+ is set to "" when no registry entry is found. [Bug 978]
-1999-02-01 <stanton@GASPODE>
+1999-02-01 Scott Stanton <stanton@GASPODE>
* generic/tclBasic.c:
* generic/tclCmdAH.c:
@@ -2464,208 +2405,204 @@
* generic/tclProc.c:
* generic/tclTest.c:
* generic/tclTimer.c:
- * generic/tcl.h: Made eval interfaces compatible with 8.0 by
- renaming Tcl_EvalObj to Tcl_EvalObjEx, renaming Tcl_Eval2 to
- Tcl_EvalEx and restoring Tcl_EvalObj and Tcl_GlobalEvalObj
- interfaces so they match Tcl 8.0.
+ * generic/tcl.h: Made eval interfaces compatible with 8.0 by renaming
+ Tcl_EvalObj to Tcl_EvalObjEx, renaming Tcl_Eval2 to Tcl_EvalEx and
+ restoring Tcl_EvalObj and Tcl_GlobalEvalObj interfaces so they match
+ Tcl 8.0.
-1999-01-28 <stanton@GASPODE>
+1999-01-28 Scott Stanton <stanton@GASPODE>
* Merged Tcl 8.0.5b1 changes.
-
+
* generic/tclUtil.c (Tcl_DStringSetLength): Changed so the buffer
- overallocates in a manner similar to Tcl_DStringAppend. This
- should improve performance for TclUniCharToUtfDString.
+ overallocates in a manner similar to Tcl_DStringAppend. This should
+ improve performance for TclUniCharToUtfDString.
1998-12-11 === Tcl 8.1b1 Release ===
-
-1998-12-10 <stanton@GASPODE>
+
+1998-12-10 Scott Stanton <stanton@GASPODE>
* Fixed lots of files that used TCL_THREAD instead of TCL_THREADS.
-
+
* generic/tclEncoding.c (Tcl_FreeEncoding): Moved most of the code
into a static FreeEncoding routine that does not grab the
- encodingMutex to avoid deadlocks/races when called from other
- routines that already have the mutex.
+ encodingMutex to avoid deadlocks/races when called from other routines
+ that already have the mutex.
-1998-12-09 <stanton@GASPODE>
+1998-12-09 Scott Stanton <stanton@GASPODE>
- * library/msgcat1.0/msgcat.tcl: Fixed bad export list, fixed so
- all locale strings are converted to lower case, including file
- names.
+ * library/msgcat1.0/msgcat.tcl: Fixed bad export list, fixed so all
+ locale strings are converted to lower case, including file names.
- * generic/regcomp.c (makescan): Fixed bug in longest match case
- that caused anchored patterns to fail. [Bug: 897]
+ * generic/regcomp.c (makescan): Fixed bug in longest match case that
+ caused anchored patterns to fail. [Bug 897]
-1998-12-08 <stanton@GASPODE>
+1998-12-08 Scott Stanton <stanton@GASPODE>
- * library/msgcat1.0/msgcat.tcl: changed mc to invoke mcunknown in
- the calling context, changed locale lookups to be case insensitive
+ * library/msgcat1.0/msgcat.tcl: changed mc to invoke mcunknown in the
+ calling context, changed locale lookups to be case insensitive
-1998-12-07 <stanton@GASPODE>
+1998-12-07 Scott Stanton <stanton@GASPODE>
* generic/tclAlloc.c (TclpRealloc): Fixed a memory allocation bug
- where big blocks that were reallocated into a different heap
- location were not being placed into the bigBlocks list. [Bug: 933]
+ where big blocks that were reallocated into a different heap location
+ were not being placed into the bigBlocks list. [Bug 933]
* tests/msgcat.test: Added message catalog test suite.
* library/msgcat1.0/msgcat.tcl: minor bug fixes, integrated latest
changes from Mark Harrison.
-1998-12-04 <stanton@GASPODE>
+1998-12-04 Scott Stanton <stanton@GASPODE>
- * library/msgcat1.0/msgcat.tcl: Changed code to conform to Tcl
- coding standards. Changed to use file join for portability.
+ * library/msgcat1.0/msgcat.tcl: Changed code to conform to Tcl coding
+ standards. Changed to use file join for portability.
* library/msgcat1.0: Added initial implementaion of Tcl message
catalog package contributed by Mark Harrison.
-1998-12-03 <stanton@GASPODE>
+1998-12-03 Scott Stanton <stanton@GASPODE>
- * win/tclWinPipe.c (BuildCommandLine): Fixed bug that kept
- arguments containing spaces from being properly quoted.
+ * win/tclWinPipe.c (BuildCommandLine): Fixed bug that kept arguments
+ containing spaces from being properly quoted.
* tests/defs: Changed so auto_path is set to only contain the Tcl
- library directory. This keeps the tests from accidentally picking
- up stuff in installed packages.
+ library directory. This keeps the tests from accidentally picking up
+ stuff in installed packages.
- * generic/tclUtil.c (Tcl_StringMatch): Changed to match 8.0
- behavior in corner case where there is no closing bracket.
+ * generic/tclUtil.c (Tcl_StringMatch): Changed to match 8.0 behavior
+ in corner case where there is no closing bracket.
-1998-12-02 <stanton@GASPODE>
+1998-12-02 Scott Stanton <stanton@GASPODE>
- * win/tclWinPipe.c (TclpCreateCommandChannel): Changed
- reader/writer threads to have THREAD_PRIORITY_HIGHEST so they will
- have a chance to run whenever there is something to do.
+ * win/tclWinPipe.c (TclpCreateCommandChannel): Changed reader/writer
+ threads to have THREAD_PRIORITY_HIGHEST so they will have a chance to
+ run whenever there is something to do.
* generic/tclIO.c (WriteBytes, WriteChars): Fixed so extraneous
flushes do not happen in line mode.
- (TranslateOutputEOL): Made translation more efficient in line mode
- and fixed a buffer overflow bug in CRLF translation. [Bug: 887]
+ (TranslateOutputEOL): Made translation more efficient in line mode and
+ fixed a buffer overflow bug in CRLF translation. [Bug 887]
-1998-12-02 <welch@SAGE>
+1998-12-02 Brent Welch <welch@SAGE>
* Updated patchlevel to 8.1b1
-1998-12-02 <stanton@GASPODE>
+1998-12-02 Scott Stanton <stanton@GASPODE>
- * generic/regc_color.c (subcolor): Added check for error case to
- avoid an out of bounds array reference.
+ * generic/regc_color.c (subcolor): Added check for error case to avoid
+ an out of bounds array reference.
* generic/tclCmdAH.c (Tcl_EncodingObjCmd): Changed to avoid using
Tcl_DStringResult because it is not binary clean.
- * generic/tclParse.c (Tcl_ParseCommand): Fixed bug in comment
- parsing where a trailing comment looked like an incomplete
- command.
+ * generic/tclParse.c (Tcl_ParseCommand): Fixed bug in comment parsing
+ where a trailing comment looked like an incomplete command.
-1998-12-02 <welch@SAGE>
+1998-12-02 Brent Welch <welch@SAGE>
* Merged changes from 8.0.4, especially the new pkg_mkIndex
-1998-12-01 <stanton@GASPODE>
+1998-12-01 Scott Stanton <stanton@GASPODE>
- * generic/tclIO.c (Tcl_ReadChars): Added a call to UpdateInterest
- so we don't block when there is data sitting in the buffers.
+ * generic/tclIO.c (Tcl_ReadChars): Added a call to UpdateInterest so
+ we don't block when there is data sitting in the buffers.
- * generic/tclTest.c (TestevalobjvObjCmd): Updated for EvalObjv
- change.
+ * generic/tclTest.c (TestevalobjvObjCmd): Updated for EvalObjv change.
* tests/parse.test: Updated tests for EvalObjv change.
- * generic/tclParse.c (EvalObjv, Tcl_EvalObjv): Changed
- Tcl_EvalObjv interface to remove string and length arguments,
- preserved original interface as EvalObjv for internal use.
+ * generic/tclParse.c (EvalObjv, Tcl_EvalObjv): Changed Tcl_EvalObjv
+ interface to remove string and length arguments, preserved original
+ interface as EvalObjv for internal use.
- * generic/tcl.h: Changed Tcl_EvalObjv interface to remove string
- and length arguments.
+ * generic/tcl.h: Changed Tcl_EvalObjv interface to remove string and
+ length arguments.
- * doc/Eval.3: Updated documentation for Tcl_EvalObjv to remove
- string and length arguments.
+ * doc/Eval.3: Updated documentation for Tcl_EvalObjv to remove string
+ and length arguments.
* generic/tclCompCmds.c (TclCompileForeachCmd): Fixed code that
corrupted the exceptDepth value in the compile environment when
- foreach failed to compile inline. [Bug: 884]
+ foreach failed to compile inline. [Bug 884]
- * library/encoding/euc-kr.enc:
- * library/encoding/ksc5601.enc:
- * tools/encoding/ksc5601.txt:
- * unix/tclUnixInit.c: Added support for Korean EUC.
+ * library/encoding/euc-kr.enc:
+ * library/encoding/ksc5601.enc:
+ * tools/encoding/ksc5601.txt:
+ * unix/tclUnixInit.c: Added support for Korean EUC.
* win/tclWinChan.c (TclpGetDefaultStdChannel): added check for a
failure during Tcl_MakeFileChannel.
-1998-11-30 <stanton@GASPODE>
+1998-11-30 Scott Stanton <stanton@GASPODE>
- * unix/tclUnixNotfy.c (Tcl_WaitForEvent): Fixed hang that occurs
- when trying to close a pipe that is currently being waited on by
- the notifier thread. [Bug: 607]
+ * unix/tclUnixNotfy.c (Tcl_WaitForEvent): Fixed hang that occurs when
+ trying to close a pipe that is currently being waited on by the
+ notifier thread. [Bug 607]
* unix/tclUnixFCmd.c (GetPermissionsAttribute): Increase size of
- returnString buffer to avoid overflow. [Bug: 584]
+ returnString buffer to avoid overflow. [Bug 584]
- * generic/tclThreadTest.c (TclThreadSend): Fixed memory leak due
- to use of TCL_VOLATILE instead of TCL_DYNAMIC.
+ * generic/tclThreadTest.c (TclThreadSend): Fixed memory leak due to
+ use of TCL_VOLATILE instead of TCL_DYNAMIC.
* generic/tclThread.c (TclRememberSyncObject): Fixed memory leak
caused by failure to reuse condition variables.
- * unix/tclUnixNotfy.c: (Tcl_AlertNotifier, Tcl_WaitForEvent,
- NotifierThreadProc, Tcl_InitNotifier): Fixed race condition caused
- by incorrect use of condition variables when sending messages
- between threads.. [Bug: 607]
+ * unix/tclUnixNotfy.c (Tcl_AlertNotifier, Tcl_WaitForEvent,
+ (NotifierThreadProc, Tcl_InitNotifier): Fixed race condition caused by
+ incorrect use of condition variables when sending messages between
+ threads. [Bug 607]
* generic/tclTestObj.c (TeststringobjCmd): MAX_STRINGS was off by one
so the strings array was too small.
* generic/tclCkalloc.c (Tcl_DbCkfree): Moved mutex lock so
- ValidateMemory is done inside the mutex to avoid a race condition
- when validate_memory is enabled. [Bug: 880]
+ ValidateMemory is done inside the mutex to avoid a race condition when
+ validate_memory is enabled. [Bug 880]
-1998-11-23 <stanton@GASPODE>
+1998-11-23 Scott Stanton <stanton@GASPODE>
* regexec.c: more performance tuning from Henry Spencer.
-1998-11-17 <stanton@GASPODE>
+1998-11-17 Scott Stanton <stanton@GASPODE>
- * tclScan.c: moved "scan" implementation out of tclCmdMZ.c and
- added Unicode support. This required a complete reimplementation
- of the command to avoid using scanf(), which isn't Unicode aware.
- Two new features were added in the process: %n to return the
- current number of characters consumed, and XPG3-style %n$ argument
- order specifiers similar to those provided by the "format"
- command. [Bug: 833]
+ * tclScan.c: moved "scan" implementation out of tclCmdMZ.c and added
+ Unicode support. This required a complete reimplementation of the
+ command to avoid using scanf(), which isn't Unicode aware. Two new
+ features were added in the process: %n to return the current number of
+ characters consumed, and XPG3-style %n$ argument order specifiers
+ similar to those provided by the "format" command. [Bug 833]
- * tclAlloc.c: changed so allocated memory is always 8-byte aligned
- to improve memory performance and to ensure that it will work on
- systems that don't like accessing 4-byte aligned values
- (e.g. Solaris and HP-UX). [Bug: 834]
+ * tclAlloc.c: changed so allocated memory is always 8-byte aligned to
+ improve memory performance and to ensure that it will work on systems
+ that don't like accessing 4-byte aligned values (e.g. Solaris and
+ HP-UX). [Bug 834]
-1998-11-06 <stanton@GASPODE>
+1998-11-06 Scott Stanton <stanton@GASPODE>
- * tclVar.c (TclGetIndexedScalar): Fixed bug 796, var name was
- getting lost before being passed to CallTraces.
+ * tclVar.c (TclGetIndexedScalar): Fixed bug 796, var name was getting
+ lost before being passed to CallTraces.
-1998-10-21 <stanton@GASPODE>
+1998-10-21 Scott Stanton <stanton@GASPODE>
* added "encoding" command
-
+
* Moved internal regexp declarations from tclInt.h to tclRegexp.h
* integrated regexp updates from Henry Spencer
-1998-10-15 <stanton@GASPODE>
+1998-10-15 Scott Stanton <stanton@GASPODE>
* tclUtf.c: added Unicode character table support
* tclInt.h: added TclUniCharIsWordChar
- * tclCmdMZ.c (Tcl_StringObjCmd): added "totitle" subcommand,
- changed "wordend" and "wordstart" to properly handle Unicode word
- characters and connector punctuation
+ * tclCmdMZ.c (Tcl_StringObjCmd): added "totitle" subcommand, changed
+ "wordend" and "wordstart" to properly handle Unicode word characters
+ and connector punctuation
-1998-10-05 <stanton@GASPODE>
+1998-10-05 Scott Stanton <stanton@GASPODE>
* auto.tcl, package.tcl: fixed SCCS strings
@@ -2682,17 +2619,16 @@
* tclExecute.c: fixed off-by-one copying error, fixed merge bugs
- * tclEvent.c: changed so USE_TCLALLOC is tested for value instead
- of definition
+ * tclEvent.c: changed so USE_TCLALLOC is tested for value instead of
+ definition
* tclCompCmds.c: replaced SCCS strings, added warnings around code
that modifies strings in place
* interp.test: added test for interp deleting itself
-1998-09-30 <stanton@GASPODE>
+1998-09-30 Scott Stanton <stanton@GASPODE>
* makefile.vc: fixed so TCL_LIBRARY is set before running tcltest
* tclWin32Dll.c: removed TclpFinalize, cleanup of merges
-
diff --git a/ChangeLog.2000 b/ChangeLog.2000
index 70d491f..0d20eaf 100644
--- a/ChangeLog.2000
+++ b/ChangeLog.2000
@@ -1,12 +1,11 @@
2000-12-14 Don Porter <dgp@users.sourceforge.net>
* generic/tclExecute.c:
- * tests/expr-old.test: Re-wrote Tcl's [expr rand()] and
- [expr srand($seed)] implementations, fixing a range error
- on some 64-bit platforms. Added tests that detect the bug.
- The rewrite changes the seed -> sequence map on 64-bit
- platforms, only for seed >= 2^31, a slight incompatibility.
- [Bug 121072, Patch 102781]
+ * tests/expr-old.test: Re-wrote Tcl's [expr rand()] and [expr
+ srand($seed)] implementations, fixing a range error on some 64-bit
+ platforms. Added tests that detect the bug. The rewrite changes the
+ seed -> sequence map on 64-bit platforms, only for seed >= 2^31, a
+ slight incompatibility. [Bug 121072, Patch 102781]
2000-12-10 Don Porter <dgp@users.sourceforge.net>
@@ -14,217 +13,209 @@
* library/msgcat/msgcat.tcl:
* library/msgcat/pkgIndex.tcl:
* library/opt/optparse.tcl:
- * library/opt/pkgIndex.tcl: Where [uplevel] is used in a proc
- to evaluate a Tcl built-in command in the caller's context,
- the built-in commands are now fully namespace-qualified. This
- prevents problems when the caller context is in a namespace where
- the built-in command name has been used by a command in the
- namespace. (For example, [::ns::set] might be called instead
- of the intended [::set]). [Bug #119422, Patch #102545]
+ * library/opt/pkgIndex.tcl: Where [uplevel] is used in a proc to
+ evaluate a Tcl built-in command in the caller's context, the built-in
+ commands are now fully namespace-qualified. This prevents problems
+ when the caller context is in a namespace where the built-in command
+ name has been used by a command in the namespace. (For example,
+ [::ns::set] might be called instead of the intended [::set]). [Bug
+ 119422, Patch 102545]
-2000-12-09 jeff hobbs <jhobbs@interwoven.com>
+2000-12-09 Jeff Hobbs <jhobbs@interwoven.com>
* win/tclWinTime.c (CalibrationThread): added lint return value to
- prevent compiler warning. [Bug #125005]
+ prevent compiler warning. [Bug 125005]
* docs/scan.n:
* tests/scan.test:
- * generic/tclScan.c (Tcl_ScanObjCmd): changed %o and %x to use
- strtoul instead of strtol to correctly preserve scan<>format
- conversion of large integers. [Patch #102663, Bug #124600]
+ * generic/tclScan.c (Tcl_ScanObjCmd): changed %o and %x to use strtoul
+ instead of strtol to correctly preserve scan<>format conversion of
+ large integers. [Patch 102663, Bug 124600]
* generic/tclExecute.c (TclExecuteByteCode): Commited patch fixing
- handling of {!<boolean>} in expressions. [Patch #102702]
+ handling of {!<boolean>} in expressions. [Patch 102702]
-2000-12-08 jeff hobbs <jhobbs@interwoven.com>
+2000-12-08 Jeff Hobbs <jhobbs@interwoven.com>
- * library/init.tcl: Added support for PATHEXT variable in
- auto_execok, recognizing the proper set of executable extensions
- on Windows. [Patch #102719]
+ * library/init.tcl: Added support for PATHEXT variable in auto_execok,
+ recognizing the proper set of executable extensions on Windows. [Patch
+ 102719]
2000-12-08 Andreas Kupries <a.kupries@westend.com>
- * generic/tclEncoding.c (LoadTableEncoding): Changed dangerous
- code to something less critical. This fixes bug 119417, part A
- without affecting the speed when loading encodings.
+ * generic/tclEncoding.c (LoadTableEncoding): Changed dangerous code to
+ something less critical. This fixes [Bug 119417], part A without
+ affecting the speed when loading encodings.
2000-12-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/open.n: Added xref to fconfigure and advice on the opening
- of binary files. Should help prevent a recurrence of bugs like
- #124558
+ * doc/open.n: Added xref to fconfigure and advice on the opening of
+ binary files. Should help prevent a recurrence of bugs like [Bug
+ 124558]
-2000-12-07 jeff hobbs <jhobbs@interwoven.com>
+2000-12-07 Jeff Hobbs <jhobbs@interwoven.com>
* generic/tcl.h: added note about need to updated
library/dde/pkgIndex.tcl with minor version increment.
- * library/dde/pkgIndex.tcl: updated to use 84 version to reflect
- the makefile. Should probably be updated to use its real version
- at some point. [Patch #102560, Bug #119421]
+ * library/dde/pkgIndex.tcl: updated to use 84 version to reflect the
+ makefile. Should probably be updated to use its real version at some
+ point. [Patch 102560, Bug 119421]
-2000-12-06 eric melski <ericm@ajubasolutions.com>
+2000-12-06 Eric Melski <ericm@ajubasolutions.com>
* generic/tcl.h (attemptckalloc): Fixed typo for #define of
- attemptckalloc (was defined to Tcl_AttempDbCkalloc, should have
- been Tcl_AttemptDbCkalloc). [Bug: 124384]
+ attemptckalloc (was defined to Tcl_AttempDbCkalloc, should have been
+ Tcl_AttemptDbCkalloc). [Bug 124384]
- * generic/tclCkalloc.c: Added
- TCL_MEM_DEBUG versions of Tcl_AttemptDbCkrealloc and
- Tcl_AttemptDbCkalloc. [Bug: 124384].
+ * generic/tclCkalloc.c: Added TCL_MEM_DEBUG versions of
+ Tcl_AttemptDbCkrealloc and Tcl_AttemptDbCkalloc. [Bug 124384].
2000-11-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclExecute.c (TclExecuteByteCode): Logical negation "!"
- can now handle string booleans, provided those values are placed
- in variables.
+ * generic/tclExecute.c (TclExecuteByteCode): Logical negation "!" can
+ now handle string booleans, provided those values are placed in
+ variables.
- * tests/expr.test (expr-13.17): Check that [expr {!$var}] can
- negate the string-versions of booleans "yes", "false", etc.
+ * tests/expr.test (expr-13.17): Check that [expr {!$var}] can negate
+ the string-versions of booleans "yes", "false", etc.
* library/tcltest/tcltest.tcl (getMatchingFiles,
- getMatchingDirectories):
- * tools/man2html.tcl (doDir):
- * tools/man2help.tcl (doDir):
- * library/package.tcl (tclPkgUnknown,tclMacPkgSearch):
+ (getMatchingDirectories):
+ * tools/man2html.tcl (doDir):
+ * tools/man2help.tcl (doDir):
+ * library/package.tcl (tclPkgUnknown,tclMacPkgSearch):
* library/safe.tcl (AddSubDirs): [glob] uses -directory instead of
- unsafe [file join] to fix Bug #123313
+ unsafe [file join]. [Bug 123313]
* generic/tclIndexObj.c:
* generic/tclTestObj.c (TestindexobjCmd): Changed internal
- representation of index objects to fix Bug #119082; fix
- shouldn't be visible to outside world...
+ representation of index objects to fix [Bug 119082]; fix shouldn't be
+ visible to outside world...
- * generic/tclTest.c (TestGetIndexFromObjStructObjCmd):
- * tests/indexObj.test: (indexObj-6.*) Added to test for presence
- of Bug #119082.
+ * generic/tclTest.c (TestGetIndexFromObjStructObjCmd):
+ * tests/indexObj.test: (indexObj-6.*) Added to test for presence of
+ [Bug 119082].
2000-11-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclCmdIL.c (Tcl_LsortObjCmd): Fixed memory leak from Bug
- #119398
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Fixed memory leak from [Bug
+ 119398]
* library/init.tcl (unknown): Added specific level parameters to
- all uplevel invokations to boost performance; didn't dare touch
- the "namespace inscope" stuff though, since it looks sensitive
- to me! Should fix Bug #123217, though testing is tricky...
+ all uplevel invokations to boost performance; didn't dare touch
+ the "namespace inscope" stuff though, since it looks sensitive
+ to me! Should fix [Bug 123217], though testing is tricky...
2000-11-21 Andreas Kupries <a.kupries@westend.com>
- * All of the changes below are described in TIP #7 ~ Specification
- and result from the application of the patch contained
- therein. Creator of the patch is Kevin Kenny
- <kennykb@crd.ge.com>. The patch used here is actually a bit
- different. Two MS specific constant values (format FOOui64) were
- replaced with a more portable formatting of the values and an
- additional cast to LONGLONG. My cross-compiling gcc was unable to
- process the original form. The SF Id of the patch is 102459.
-
- * tclWinTime.c: Add to the static data a set of variables that
- manage the phase-locked techniques, including a
- ''CRITICAL_SECTION'' to guard them so that multi-threaded code
- is stable.
-
- * tclWinTime.c: Modify ''TclpGetSeconds'' to call ''TclpGetTime''
- and return the 'seconds' portion of the result. This change is
- necessary to make sure that the two times are consistent near
- the rollover from one second to another.
+ All of the changes below are described in TIP #7 ~ Specification and
+ result from the application of the patch contained therein. Creator of
+ the patch is Kevin Kenny <kennykb@crd.ge.com>. The patch used here is
+ actually a bit different. Two MS specific constant values (format
+ FOOui64) were replaced with a more portable formatting of the values
+ and an additional cast to LONGLONG. My cross-compiling gcc was unable
+ to process the original form. [Patch 102459]
+
+ * tclWinTime.c: Add to the static data a set of variables that manage
+ the phase-locked techniques, including a ''CRITICAL_SECTION'' to guard
+ them so that multi-threaded code is stable.
+
+ * tclWinTime.c: Modify ''TclpGetSeconds'' to call ''TclpGetTime'' and
+ return the 'seconds' portion of the result. This change is necessary
+ to make sure that the two times are consistent near the rollover from
+ one second to another.
* tclWinTime.c: Modify ''TclpGetClicks'' to use TclpGetTime to
- determine the click count as a number of microseconds.
-
- * tclWinTime.c: Modify ''TclpGetTime'' to return the time as
- M*Q+B, where Q is the result of ''QueryPerformanceCounter'', and
- M and B are variables maintained by the phase-locked loop to
- keep the result as close as possible to the system clock. The
- ''TclpGetTime'' call will also launch the phase-lock management
- in a separate thread the first time that it is invoked. If the
- performance counter is unavailable, or if its frequency is not
- one of the two common 8254-compatible rates, then
- ''TclpGetTime'' will return the result of ''ftime'' as it does
- in Tcl 8.3.2.
-
- * tclWinTime.c: Add the clock calibration procedure. The
- calibration is somewhat complex; to save space, the reader is
- referred to the reference implementation for the details of how
- the time base and frequency are maintained.
-
- * tclWinNotify.c: Modify ''Tcl_Sleep'' to test that the process
- has, in fact, slept for the requisite time by calling
- ''TclpGetTime'' and comparing with the desired time. Otherwise,
- roundoff errors may cause the process to awaken early.
-
- * tclWinTest.c: Add a ''testwinclock'' command. This command
- returns a four element list comprising the seconds and
- microseconds portions of the system clock and the seconds and
- microseconds portions of the Tcl clock.
-
- * winTime.test: Add to the test suite a test that makes sure that
- the Tcl clock stays within 1.1 ms of the system clock over the
- duration of the test.
+ determine the click count as a number of microseconds.
+
+ * tclWinTime.c: Modify ''TclpGetTime'' to return the time as M*Q+B,
+ where Q is the result of ''QueryPerformanceCounter'', and M and B are
+ variables maintained by the phase-locked loop to keep the result as
+ close as possible to the system clock. The ''TclpGetTime'' call will
+ also launch the phase-lock management in a separate thread the first
+ time that it is invoked. If the performance counter is unavailable, or
+ if its frequency is not one of the two common 8254-compatible rates,
+ then ''TclpGetTime'' will return the result of ''ftime'' as it does in
+ Tcl 8.3.2.
+
+ * tclWinTime.c: Add the clock calibration procedure. The calibration
+ is somewhat complex; to save space, the reader is referred to the
+ reference implementation for the details of how the time base and
+ frequency are maintained.
+
+ * tclWinNotify.c: Modify ''Tcl_Sleep'' to test that the process has,
+ in fact, slept for the requisite time by calling ''TclpGetTime'' and
+ comparing with the desired time. Otherwise, roundoff errors may cause
+ the process to awaken early.
+
+ * tclWinTest.c: Add a ''testwinclock'' command. This command returns a
+ four element list comprising the seconds and microseconds portions of
+ the system clock and the seconds and microseconds portions of the Tcl
+ clock.
+
+ * winTime.test: Add to the test suite a test that makes sure that the
+ Tcl clock stays within 1.1 ms of the system clock over the duration of
+ the test.
2000-11-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/global.n:
- * doc/upvar.n:
- * doc/variable.n: Improved documentation to mention that variables
- so created are listed in [info locals] and added a few more
- cross-links between these commands. Fixes bug #119387
+ * doc/global.n:
+ * doc/upvar.n:
+ * doc/variable.n: Improved documentation to mention that variables so
+ created are listed in [info locals] and added a few more cross-links
+ between these commands. [Bug 119387]
2000-11-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/safe.test: (safe-4.3):
- * generic/tclVar.c (TclLookupVar): Changed again. Now passes all
- the tests, though one needed modifying since it required the
- wrong answer. (Why on earth do we have inline modification of
- argument strings? This sort of thing is horrendous to debug and
- doesn't work well in a multithreaded environment!) Fixes bug
- 119192.
+ * generic/tclVar.c (TclLookupVar): Changed again. Now passes all the
+ tests, though one needed modifying since it required the wrong answer.
+ (Why on earth do we have inline modification of argument strings? This
+ sort of thing is horrendous to debug and doesn't work well in a
+ multithreaded environment!) [Bug 119192]
- * tests/var.test: (var-1.19) If my attempts to fix the problem
- aren't right yet, my attempts to describe it look pretty good to
- me...
+ * tests/var.test: (var-1.19) If my attempts to fix the problem aren't
+ right yet, my attempts to describe it look pretty good to me...
2000-11-16 Andreas Kupries <a.kupries@westend.com>
* win/tclWinPort.h (line 69): Changed reference to winsock2.h into
- winsock.h. This was a leftover from a foray into using winsock
- version 2 (History lesson from Scott Redman and Jeff
- Hobbs). This code was no problem when compiling Tcl itself, but
- could trip extensions. Fixes bug 122568.
+ winsock.h. This was a leftover from a foray into using winsock version
+ 2 (History lesson from Scott Redman and Jeff Hobbs). This code was no
+ problem when compiling Tcl itself, but could trip extensions. [Bug
+ 122568]
-2000-11-15 jeff hobbs <jeff.hobbs@acm.org>
+2000-11-15 Jeff Hobbs <jeff.hobbs@acm.org>
- * unix/Makefile.in: removed bp.c references (hasn't existed in a
- long time). Corrected 'make dist' to make dist with unversioned
- library directories (same as out of cvs), so make install works
- correctly with either source tree.
+ * unix/Makefile.in: removed bp.c references (hasn't existed in a long
+ time). Corrected 'make dist' to make dist with unversioned library
+ directories (same as out of cvs), so make install works correctly with
+ either source tree.
-2000-11-15 jeff hobbs <jeff.hobbs@acm.org>
+2000-11-15 Jeff Hobbs <jeff.hobbs@acm.org>
- * generic/tclVar.c (TclLookupVar): reverted fix below as it broke
- all other array unset error reporting. Bug-119192 is still
- open.
+ * generic/tclVar.c (TclLookupVar): reverted fix below as it broke all
+ other array unset error reporting. Bug 119192 is still open.
2000-11-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclVar.c (TclLookupVar): Changed references to part2 to
- use elName instead in various error message generating spots, so
- as to fix Bug-119192.
+ * generic/tclVar.c (TclLookupVar): Changed references to part2 to use
+ elName instead in various error message generating spots. [Bug 119192]
2000-11-03 David Gravereaux <davygrvy@ajubasolutions.com>
- * win/.cvsignore: Removed 'configure' from the glob list now
- that it's included.
+ * win/.cvsignore: Removed 'configure' from the glob list now that it's
+ included.
2000-11-03 Jeff Hobbs <hobbs@ajubasolutions.com>
8.4a2 RELEASE
- * unix/Makefile.in (install-libraries, dist):
+ * unix/Makefile.in (install-libraries, dist):
* win/makefile.vc (install-libraries):
- * win/Makefile.in (install-libraries): updated to install
- unversioned library directories into versioned directories.
+ * win/Makefile.in (install-libraries): updated to install unversioned
+ library directories into versioned directories.
* tools/tcl.wse.in: updated for unversioning of library dirs
@@ -234,31 +225,31 @@
* generic/tclStubInit.c:
* generic/tclDecls.h:
- * generic/tcl.decls: added Tcl_SetMainLoop proc that allows people
- to set a main loop that will run for tclsh.
+ * generic/tcl.decls: added Tcl_SetMainLoop proc that allows people to
+ set a main loop that will run for tclsh.
* generic/tcl.h: added Tcl_MainLoopProc typedef
* generic/tclMain.c (Tcl_SetMainLoop, StdinProc, Prompt): new
- StdinProc and Prompt static procs and Tcl_SetMainLoop stubs proc.
- The first two handle a fileevent based prompt (taken from
- tkMain.c). Tcl_SetMainLoop enables the interactive setting of a
- main loop procedure. This enables Tk to be a loadable package.
+ StdinProc and Prompt static procs and Tcl_SetMainLoop stubs proc. The
+ first two handle a fileevent based prompt (taken from tkMain.c).
+ Tcl_SetMainLoop enables the interactive setting of a main loop
+ procedure. This enables Tk to be a loadable package.
2000-11-02 David Gravereaux <davygrvy@ajubasolutions.com>
- * generic/tclEvent.c: tclLibraryPath Tcl_Obj didn't have a way
- to share its data among threads. This caused Tcl_Init() to
- always fail in threads. Added a way to pass the data around
- with a global char*. [BUG: 5301]
+ * generic/tclEvent.c: tclLibraryPath Tcl_Obj didn't have a way to
+ share its data among threads. This caused Tcl_Init() to always fail in
+ threads. Added a way to pass the data around with a global char*.
+ [BUG: 5301]
2000-11-02 Jeff Hobbs <hobbs@ajubasolutions.com>
* unix/configure:
* unix/dltest/configure:
* win/configure:
- * tools/configure: checked in configure scripts so people doing
- CVS checkouts aren't required to have autoconf. Changes to
- configure.in in the future will require the corresponding
- configure script to also be re-autoconf'ed and checked in.
+ * tools/configure: checked in configure scripts so people doing CVS
+ checkouts aren't required to have autoconf. Changes to configure.in in
+ the future will require the corresponding configure script to also be
+ re-autoconf'ed and checked in.
* win/makefile.vc:
* win/tcl.m4: makefile fixes for Win64 support
@@ -270,14 +261,14 @@
* unix/tcl.m4: removed use of -lbsd and -ldl for AIX-5.
- * tests/subst.test: added tests for non-zero return code handling
- by subst.
+ * tests/subst.test: added tests for non-zero return code handling by
+ subst.
* generic/tclParse.c (Tcl_EvalEx): corrected handling of non-zero,
- non-error return code cases for subst. [BUG: 119829]
+ non-error return code cases for subst. [Bug 119829]
- * generic/tclVar.c (TclVarTraceExists): Corrected excessive mem
- use when info exists was called on a non-existent array element.
- [BUG: 119213, 119336]
+ * generic/tclVar.c (TclVarTraceExists): Corrected excessive mem use
+ when info exists was called on a non-existent array element. [Bug
+ 119213, 119336]
2000-10-30 David Gravereaux <davygrvy@ajubasolutions.com>
@@ -290,8 +281,8 @@
2000-10-30 Jeff Hobbs <hobbs@ajubasolutions.com>
- * unix/tclUnixInit.c: added default encoding map from
- "ja_JP.eucJP" to "euc-jp". (takahashi)
+ * unix/tclUnixInit.c: added default encoding map from "ja_JP.eucJP" to
+ "euc-jp". (takahashi)
* tests/clock.test: corrected clock-2.* test numbering
@@ -306,68 +297,67 @@
* unix/configure.in:
* unix/tcl.m4: added support for AIX-5.
- * generic/tclIO.c (Tcl_NotifyChannel): removed #ifdef around code
- for old channel structures, placed preserve/release around statePtr
- * generic/tclIO.c (CloseChannel): the statePtr for a channel was
- not being freed when the last channel in a stack was freed,
- causing a mem leak.
+ * generic/tclIO.c (Tcl_NotifyChannel): removed #ifdef around code for
+ old channel structures, placed preserve/release around statePtr
+ * generic/tclIO.c (CloseChannel): the statePtr for a channel was not
+ being freed when the last channel in a stack was freed, causing a mem
+ leak.
* unix/tclUnixChan.c: updated channel types to strict
- TCL_CHANNEL_VERSION_2 style to avoid compiler warnings. They work
+ TCL_CHANNEL_VERSION_2 style to avoid compiler warnings. They work
either way, but this avoids compiler warnings (that worries people).
2000-10-27 Jennifer Hom <jenn@ajubasolutions.com>
- * library/tcltest1.0/tcltest.tcl: Removed a cd into the test
- directory in runAllTests that screwed up the temporary directory
- setting, effectively preventing users from running tests on
- multiple platforms at the same time.
+ * library/tcltest1.0/tcltest.tcl: Removed a cd into the test directory
+ in runAllTests that screwed up the temporary directory setting,
+ effectively preventing users from running tests on multiple platforms
+ at the same time.
2000-10-26 David Gravereaux <davygrvy@ajubasolutions.com>
- * win/tclWinFile.c (TclpMatchFilesTypes): NULL was being set to
- "attr" which was a DWORD. Changed NULL to zero because a 'void *'
- can't be set to a DWORD to avoid the compiler warning.
+ * win/tclWinFile.c (TclpMatchFilesTypes): NULL was being set to "attr"
+ which was a DWORD. Changed NULL to zero because a 'void *' can't be
+ set to a DWORD to avoid the compiler warning.
2000-10-24 Jennifer Hom <jenn@ajubasolutions.com>
* tests/all.tcl: Removed support for tcltest 1.0.
-
+
* tests/tcltest.test:
* library/tcltest1.0/tcltest.tcl:
* library/tcltest1.0/pkgIndex.tcl:
* docs/tcltest.n: Moved tcltest2 code so that it's the standard
- version of tcltest. Removed all tcltest2 files
- (tests/tcltest2.test, library/tcltest1.0/tcltest2.tcl,
- docs/tcltest2.n).
+ version of tcltest. Removed all tcltest2 files (tests/tcltest2.test,
+ library/tcltest1.0/tcltest2.tcl, docs/tcltest2.n).
2000-10-20 Jeff Hobbs <hobbs@ajubasolutions.com>
* win/tclWinFile.c (TclpMatchFilesTypes): made the stat call only
- occur when necessary (for 'glob' command). Significantly speeds
- up glob command from 8.3. [BUG: 6216]
+ occur when necessary (for 'glob' command). Significantly speeds up
+ glob command from 8.3. [BUG: 6216]
2000-10-19 Jennifer Hom <jenn@ajubasolutions.com>
* library/tcltest1.0/tcltest2.tcl:
* tests/tcltest2
- * doc/tcltest2.n: Code and documentation cleanup. Modified
- -verbose to take list of keywords as well as string of letters.
- Removed Tcl version information from tcltest. Removed
- tcltest::grep from tcltest package. Added optional 3rd directory
- argument to makeFile/makeDirectory and removeFile/removeDirectory.
+ * doc/tcltest2.n: Code and documentation cleanup. Modified -verbose to
+ take list of keywords as well as string of letters. Removed Tcl
+ version information from tcltest. Removed tcltest::grep from tcltest
+ package. Added optional 3rd directory argument to
+ makeFile/makeDirectory and removeFile/removeDirectory.
* tests/basic.test: Changed references to tcltest::tclVersion to
hardcoded numbers.
- * generic/tcl.h: Changed reference to tcltest2.tcl and tcltest.tcl
- in comments to tests/basic.test.
+ * generic/tcl.h: Changed reference to tcltest2.tcl and tcltest.tcl in
+ comments to tests/basic.test.
2000-10-06 David Gravereaux <davygrvy@ajubasolutions.com>
- * win/tclWinChan.c: moved Win2K bug case test with GetStdHandle()
- from TclpGetDefaultStdChannel into Tcl_MakeFileChannel to enable
- a more general method in detecting invalid OS handles rather than
- just a specific known case. [BUG: 5971]
+ * win/tclWinChan.c: moved Win2K bug case test with GetStdHandle() from
+ TclpGetDefaultStdChannel into Tcl_MakeFileChannel to enable a more
+ general method in detecting invalid OS handles rather than just a
+ specific known case. [BUG: 5971]
2000-10-06 Jeff Hobbs <hobbs@ajubasolutions.com>
@@ -383,10 +373,10 @@
* library/tcltest1.0/tcltest2.tcl:
* tests/tcltest2.test:
- * doc/tcltest2.n: Modified the new form of the test command to
- accept both attribute-value pairs and command line options.
- Updated the tests and the documentation for this new format.
- Also changed the option names for the test command.
+ * doc/tcltest2.n: Modified the new form of the test command to accept
+ both attribute-value pairs and command line options. Updated the tests
+ and the documentation for this new format. Also changed the option
+ names for the test command.
2000-09-29 Jeff Hobbs <hobbs@scriptics.com>
@@ -394,24 +384,24 @@
space parity on Windows (Eason) [Bug 6057].
* win/Makefile.in: commented use of TESTFLAGS
- * unix/Makefile.in: added TESTFLAGS to test target to
- conform with Windows makefile and TEA style.
+ * unix/Makefile.in: added TESTFLAGS to test target to conform with
+ Windows makefile and TEA style.
* tests/stack.test: prevented possible crash on systems with low
- default stacksize (Tru64, AIX) in infinite recursion test. A
- solution to check remaining stack space in the core is best, but
- hard to do in a cross-platform manner.
+ default stacksize (Tru64, AIX) in infinite recursion test. A solution
+ to check remaining stack space in the core is best, but hard to do in
+ a cross-platform manner.
- * generic/tclIOGT.c (FLUSH_DELAY): renamed DELAY define to
- FLUSH_DELAY to avoid defn conflict using Tru64's cc.
+ * generic/tclIOGT.c (FLUSH_DELAY): renamed DELAY define to FLUSH_DELAY
+ to avoid defn conflict using Tru64's cc.
2000-09-28 Jeff Hobbs <hobbs@ajubasolutions.com>
* tools/tcl.wse.in: added tclPlatDecls.h and tkPlatDecls.h to the
Windows .exe install.
- * tests/fCmd.test (fCmd-6.20): corrected test to remove
- c:/tcl8975@ after creating it.
+ * tests/fCmd.test (fCmd-6.20): corrected test to remove c:/tcl8975@
+ after creating it.
* tests/fileName.test: cleaned up the testing of glob patterns for
c:/globTest (Windows) to directly create/remove directory.
@@ -421,13 +411,13 @@
* generic/tcl.decls:
* generic/tclIO.c: updated Tcl_IsChannelShared,
Tcl_IsChannelRegistered, Tcl_CutChannel, Tcl_SpliceChannel,
- 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.
+ 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.
(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]
+ write side. [Bug: 6261]
* doc/ChnlStack.3:
* doc/CrtChannel.3:
@@ -451,7 +441,7 @@
* win/tclWinPipe.c:
* win/tclWinSerial.c:
* win/tclWinSock.c: Up-port of changes made in 8.3.2 to 8.4a2 code
- base. Most of these changes relate to the rewrite of the stacked
+ base. Most of these changes relate to the rewrite of the stacked
channel implementation, with a few config related fixes.
Following is an asynchronous include of the applicable ChangeLog
@@ -467,67 +457,66 @@
* doc/CrtChannel.3: updated the docs to be aware of the
TCL_CHANNEL_VERSION_2 style of Tcl channels.
- * generic/tclIO.c (Tcl_CreateChannel): added assertion to verify
- that the new channel versioning will be binary compatible with
- older channel drivers.
+ * generic/tclIO.c (Tcl_CreateChannel): added assertion to verify that
+ the new channel versioning will be binary compatible with older
+ channel drivers.
2000-08-05 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclIOGT.c (TclChannelTransform): fixed segfault that
- would occur when transforming a channel with a proc that did not
- yet exist. (Kupries)
+ * generic/tclIOGT.c (TclChannelTransform): fixed segfault that would
+ occur when transforming a channel with a proc that did not yet exist.
+ (Kupries)
* generic/tclTest.c (TestChannelCmd): added some lint init'ing of
statePtr and chan vars.
2000-07-26 Jeff Hobbs <hobbs@scriptics.com>
- * merged core-8-3-1-io-rewrite back into core-8-3-1-branch.
- The core-8-3-1-io-rewrite branch should now be considered defunct.
+ Merged core-8-3-1-io-rewrite back into core-8-3-1-branch. The
+ core-8-3-1-io-rewrite branch should now be considered defunct.
* generic/tclStubInit.c:
* generic/tclDecls.h:
* generic/tcl.decls:
* generic/tcl.h:
- * generic/tclIO.c: moved the Tcl_Channel* macros from tcl.h to
- tclIO.c and made them proper stubbed functions. These are:
- Tcl_ChannelName, Tcl_ChannelVersion, Tcl_ChannelBlockModeProc,
- Tcl_ChannelCloseProc, Tcl_ChannelClose2Proc, Tcl_ChannelInputProc,
- Tcl_ChannelOutputProc, Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc,
+ * generic/tclIO.c: moved the Tcl_Channel* macros from tcl.h to tclIO.c
+ and made them proper stubbed functions. These are: Tcl_ChannelName,
+ Tcl_ChannelVersion, Tcl_ChannelBlockModeProc, Tcl_ChannelCloseProc,
+ Tcl_ChannelClose2Proc, Tcl_ChannelInputProc, Tcl_ChannelOutputProc,
+ Tcl_ChannelSeekProc, Tcl_ChannelSetOptionProc,
Tcl_ChannelGetOptionProc, Tcl_ChannelWatchProc,
- Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc,
- and Tcl_ChannelHandlerProc. These should be used to access the
+ Tcl_ChannelGetHandleProc, Tcl_ChannelFlushProc, and
+ Tcl_ChannelHandlerProc. These should be used to access the
Tcl_ChannelType structure instead of direct pointer dereferencing.
- * tests/iogt.test: added RCS string, marked tests 2.* to be
- unixOnly due to underlying system differences.
+ * tests/iogt.test: added RCS string, marked tests 2.* to be unixOnly
+ due to underlying system differences.
2000-07-25 Andreas Kupries <a.kupries@westend.com>
* tests/iogt.test: (line 866f) New tests iogt-6.[01], highlighting
- buffering trouble when stacking and unstacking transformations.
- iogt-6.0 is solved, see the changes below. iogt-6.1 remains, for
- now, due to the perceived complexity of solutions.
+ buffering trouble when stacking and unstacking transformations.
+ iogt-6.0 is solved, see the changes below. iogt-6.1 remains, for now,
+ due to the perceived complexity of solutions.
- * generic/tclIO.h: (line 139f) struct Channel, added a buffer
- queue, to hold data pushed back when stacking a transformation.
+ * generic/tclIO.h: (line 139f) struct Channel, added a buffer queue,
+ to hold data pushed back when stacking a transformation.
* generic/tclIO.c:
- (line 91f, line 7434f) New internal function 'CopyBuffer'.
- Derived from 'CopyAndTranslateBuffer', with translation
- removed.
- (line 1025f, line 1212f): Initialization of new queue.
- (line 1164f, Tcl_StackChannel): Pushback of input queue.
- (line 1293f, Tcl_UnstackChannel): Discard input and pushback.
- (line 3748f, Tcl_ReadRaw): Modified to use data in the push back
- area before going to the driver. Uses 'CopyBuffer', s.a.
- (line 4702f, GetInput): Modified to use data in the push back
- area before going to the driver.
- (line 4867f, Tcl_Seek): Modified to take pushback of the topmost
- channel in a stack into account.
- (line 5620f, Tcl_InputBuffered): See above. Added
- 'Tcl_ChannelBuffered'. Analogue to 'Tcl_InputBuffered' but for
- the buffer area in the channel.
+ (line 91f, line 7434f) New internal function 'CopyBuffer'. Derived
+ from 'CopyAndTranslateBuffer', with translation removed.
+ (line 1025f, line 1212f): Initialization of new queue.
+ (line 1164f, Tcl_StackChannel): Pushback of input queue.
+ (line 1293f, Tcl_UnstackChannel): Discard input and pushback.
+ (line 3748f, Tcl_ReadRaw): Modified to use data in the push back area
+ before going to the driver. Uses 'CopyBuffer', s.a.
+ (line 4702f, GetInput): Modified to use data in the push back area
+ before going to the driver.
+ (line 4867f, Tcl_Seek): Modified to take pushback of the topmost
+ channel in a stack into account.
+ (line 5620f, Tcl_InputBuffered): See above. Added
+ 'Tcl_ChannelBuffered'. Analog to 'Tcl_InputBuffered' but for the
+ buffer area in the channel.
* generic/tcl.decls: New public API 'Tcl_ChannelBuffered'. S.a.
@@ -541,21 +530,21 @@
* generic/tclIntDecls.h:
* generic/tclInt.decls: commented out internal decls for
TclTestChannelCmd and TclTestChannelEventCmd as they were moved to
- tclTest.c. Added new decls for TclChannelEventScriptInvoker and
+ tclTest.c. Added new decls for TclChannelEventScriptInvoker and
TclChannelTransform.
* generic/tclIO.c (CloseChannel): stopped masking out of the
- TCL_READABLE|TCL_WRITABLE bits from the state flags in
- CloseChannel, instead adding extra intelligence to
- CheckChannelErrors with a new CHANNEL_RAW_MODE bit for special
- behavior when called from Raw channel APIs.
+ TCL_READABLE|TCL_WRITABLE bits from the state flags in CloseChannel,
+ instead adding extra intelligence to CheckChannelErrors with a new
+ CHANNEL_RAW_MODE bit for special behavior when called from Raw channel
+ APIs.
2000-07-13 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclIO.c (StackSetBlockMode): moved set of chanPtr
- outside of blockModeProc check to avoid infinite loop when
- blockModeProc was NULL (Kupries). updated TransformSeekProc to
- not call Tcl_Seek directly (Kupries).
+ * generic/tclIO.c (StackSetBlockMode): moved set of chanPtr outside of
+ blockModeProc check to avoid infinite loop when blockModeProc was
+ NULL. Updated TransformSeekProc to not call Tcl_Seek directly
+ (Kupries).
* win/tclWinChan.c: updated fileChannelType to v2 channel struct
* win/tclWinConsole.c: updated consoleChannelType to v2 channel struct
@@ -565,85 +554,82 @@
2000-07-11 Brent Welch <welch@ajubasolutions.com>
- * win/tclConfig.sh.in (TCL_LIBS): Cleaned up unix-specific
- autoconf variables.
+ * win/tclConfig.sh.in (TCL_LIBS): Cleaned up unix-specific autoconf
+ variables.
2000-07-11 Jeff Hobbs <hobbs@scriptics.com>
- * tests/iogt.test: made tests [345].0 not run by default as they
- were failing in the new design, but I'm not convinced that the
- returned result isn't correct.
+ * tests/iogt.test: made tests [345].0 not run by default as they were
+ failing in the new design, but I'm not convinced that the returned
+ result isn't correct.
* generic/tclDecls.h:
* generic/tclStubInit.c:
- * generic/tcl.decls: added Tcl_GetTopChannel C API that returns
- the current top channel of a channel stack. Tcl_GetChannel was
- changed earlier to return the bottommost channel of a stack
- because that is the one that is guaranteed to stay around the
- longest, and this was needed to compensate for certain
- operations that want to look at the state of the main channel.
- Most channel APIs already compensate for grabbing the top, so it
- shouldn't be needed often.
+ * generic/tcl.decls: added Tcl_GetTopChannel C API that returns the
+ current top channel of a channel stack. Tcl_GetChannel was changed
+ earlier to return the bottommost channel of a stack because that is
+ the one that is guaranteed to stay around the longest, and this was
+ needed to compensate for certain operations that want to look at the
+ state of the main channel. Most channel APIs already compensate for
+ grabbing the top, so it shouldn't be needed often.
* generic/tclIO.c (Tcl_StackChannel, Tcl_UnstackChannel): Added
- flushing of buffers (Kupries), removed use of DownChannel macro,
- added Tcl_GetTopChannel public API to get to the top channel of
- the channel stack (necessary for TLS). Rewrote Tcl_NotifyChannel
- for new channel design (Kupries). Did some code cleanup in the
- transform code. tclIO.c must still be broken into bits (separate
- out test code and giot code, create tclIO.h).
+ flushing of buffers (Kupries), removed use of DownChannel macro, added
+ Tcl_GetTopChannel public API to get to the top channel of the channel
+ stack (necessary for TLS). Rewrote Tcl_NotifyChannel for new channel
+ design (Kupries). Did some code cleanup in the transform code.
+ tclIO.c must still be broken into bits (separate out test code and
+ giot code, create tclIO.h).
2000-07-10 Andreas Kupries <a.kupries@westend.com>
* tests/iogt.test: Reverted some earlier changes as a fix by Jeff
- revived the original and correct behaviour. IOW, the tests showed
- a genuine error and I didn't see it :(.
+ revived the original and correct behaviour. IOW, the tests showed a
+ genuine error and I didn't see it :(.
- * generic/tclIO.c (Tcl_Read|Write_Raw): Changed to directly use
- the drivers and not DoRead|DoWrite. The latter use the buffering
- system, encoding and eol-translation and this wreaks havoc with
- the data going through the transformations. Both procedures use
- CheckForchannelErrors and let it believe that there is no
- background copy in progress or else stacked channels could not
- be used for that.
+ * generic/tclIO.c (Tcl_Read|Write_Raw): Changed to directly use the
+ drivers and not DoRead|DoWrite. The latter use the buffering system,
+ encoding and eol-translation and this wreaks havoc with the data going
+ through the transformations. Both procedures use CheckForchannelErrors
+ and let it believe that there is no background copy in progress or
+ else stacked channels could not be used for that.
* generic/tclIO.c (TclCopyChannel, CopyData): Moved access to the
- topmost channel from the first to the second procedure to make
- the decision about that at the last possible time (Callbacks can
- change the stacking).
+ topmost channel from the first to the second procedure to make the
+ decision about that at the last possible time (Callbacks can change
+ the stacking).
test suite: failures of iogt-[345].0
-
+
2000-07-06 Jeff Hobbs <hobbs@scriptics.com>
- * tests/iogt.test: new tests for stacked channel stuff based off
- new 'testchannel transform|unstack' code (Kupries IOGT extension).
+ * tests/iogt.test: new tests for stacked channel stuff based off new
+ 'testchannel transform|unstack' code (Kupries IOGT extension).
* generic/tcl.decls:
* generic/tcl.h:
* generic/tclDecls.h:
* generic/tclStubsInit.c:
- * generic/tclIO.c: complete rewrite of Tcl Channel code for
- stacked channels. Channels are now designed to work in a more
- stacked fashion with a shared ChannelState data structure.
+ * generic/tclIO.c: complete rewrite of Tcl Channel code for stacked
+ channels. Channels are now designed to work in a more stacked fashion
+ with a shared ChannelState data structure.
2000-06-02 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclIO.c (CloseChannel): removed the &ing out of
- (TCL_READABLE|TCL_WRITABLE) from the flags, as CloseChannel does
- this on the next pass through for the top channel, and it appeared
- to be causing hangs by not allowing the final flush.
+ (TCL_READABLE|TCL_WRITABLE) from the flags, as CloseChannel does this
+ on the next pass through for the top channel, and it appeared to be
+ causing hangs by not allowing the final flush.
2000-06-01 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclIO.c (CloseChannel): Rewrote CloseChannel code to
- unstack a channel during the close process. Fixed a refcount bug
- in Tcl_UnstackChannel. [Bug: 5623]
- (CloseChannel): further extended CloseChannel in the stacked case
- to effect certain operations on the next channel that would have
- been done in Tcl_Close. Also added CHANNEL_CLOSED and removed
- (TCL_READABLE|TCL_WRITABLE) bits from chanPtr->flags. Changed
- final reset of the WatchProc to check the chanDownPtr's (next)
- interestMask.
+ * generic/tclIO.c (CloseChannel): Rewrote CloseChannel code to unstack
+ a channel during the close process. Fixed a refcount bug in
+ Tcl_UnstackChannel. [Bug: 5623]
+ (CloseChannel): further extended CloseChannel in the stacked case to
+ effect certain operations on the next channel that would have been
+ done in Tcl_Close. Also added CHANNEL_CLOSED and removed
+ (TCL_READABLE|TCL_WRITABLE) bits from chanPtr->flags. Changed final
+ reset of the WatchProc to check the chanDownPtr's (next) interestMask.
******************************************************
** END OF ASYNCHRONOUS UP-PORT LOG (8.3.2 -> 8.4a2) **
@@ -651,49 +637,46 @@
2000-09-20 Jeff Hobbs <hobbs@scriptics.com>
- * tests/socket.test: removed doTestsWithRemoteServer constraint
- from socket-12.*. It requires 'exec', not a remote server.
- Cleaned up some coding errors.
+ * tests/socket.test: removed doTestsWithRemoteServer constraint from
+ socket-12.*. It requires 'exec', not a remote server. Cleaned up some
+ coding errors.
2000-09-20 Jennifer Hom <jenn@ajubasolutions.com>
* library/tcltest1.0/pkgIndex.tcl: Updated to load tcltest 2.0.
- * library/tcltest1.0/tcltest2.tcl: New version of tcltest.
- Cleanup of command line parsing: allows users to specify command
- line arguments through an environment variable named
- TCLTEST_OPTIONS [RFE: 3748], does not respond to incorrect
- arguments, and forces usage of entire flag name when using command
- line arguments. Defines accessor procs for all tcltest
- variables. Allows users to use 'return' in test scripts. Allow
- users to specify whether test files should be sourced or run in a
- separate process. 'all.tcl' code moved to tcltest package.
- 'test' proc modified to use attribute-value pairs. Allow users to
+ * library/tcltest1.0/tcltest2.tcl: New version of tcltest.
+ Cleanup of command line parsing: allows users to specify command line
+ arguments through an environment variable named TCLTEST_OPTIONS [RFE:
+ 3748], does not respond to incorrect arguments, and forces usage of
+ entire flag name when using command line arguments. Defines accessor
+ procs for all tcltest variables. Allows users to use 'return' in test
+ scripts. Allow users to specify whether test files should be sourced
+ or run in a separate process. 'all.tcl' code moved to tcltest package.
+ 'test' proc modified to use attribute-value pairs. Allow users to
specify what return codes, output, and errors can be compared and
- whether these values should be compared using regexp, glob, or
- exact matching. makeDirectory & removeDirectory now operate with
- respect to temporaryDirectory [Bug: 6001]. Test results from
- tests run in slave interpreters are now included in test totals
- [Bug: 1493]. Test files that return error values are now reported.
-
- * tests/all.tcl: Added code to check for the tcltest version
- loaded; modified to figure out which tests to run based on the
- tcltest version loaded.
+ whether these values should be compared using regexp, glob, or exact
+ matching. makeDirectory & removeDirectory now operate with respect to
+ temporaryDirectory [Bug: 6001]. Test results from tests run in slave
+ interpreters are now included in test totals [Bug: 1493]. Test files
+ that return error values are now reported.
+ * tests/all.tcl: Added code to check for the tcltest version loaded;
+ modified to figure out which tests to run based on the tcltest version
+ loaded.
* tests/tcltest.test: Modified to explicitly load version 1.0 of
tcltest.
- * tests/tcltest2.test: New test suite for tcltest; includes all of
- the old tests plus new ones reflecting changes made for version
- 2.0.
- * tests/cmdAH.test: Added singleTestInterp constraint to
- cmdAH-31.2; this test does not run if tests aren't sourced into a
- single interpreter.
- * tests/socket.test: Fixed two tests that were referencing
- variables outside of scope.
-
+ * tests/tcltest2.test: New test suite for tcltest; includes all of the
+ old tests plus new ones reflecting changes made for version 2.0.
+ * tests/cmdAH.test: Added singleTestInterp constraint to cmdAH-31.2;
+ this test does not run if tests aren't sourced into a single
+ interpreter.
+ * tests/socket.test: Fixed two tests that were referencing variables
+ outside of scope.
+
* tools/tcl.wse.in: Added code to install tcltest2.tcl.
- * doc/tcltest2.n: New documentation for tcltest version 2.0.
- Removes documentation for tcltest namespace variables. Adds
- documentation for new tcltest procs.
+ * doc/tcltest2.n: New documentation for tcltest version 2.0. Removes
+ documentation for tcltest namespace variables. Adds documentation for
+ new tcltest procs.
* unix/mkLinks: Added code to link to tcltest2.n.
@@ -702,15 +685,15 @@
2000-09-19 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): When using -all, all
- attempts after the first to match the regexp against the string
- should include the TCL_REG_NOTBOL flag, to avoid erroneously
- matching ^ in the middle of the string. Added code to set this
- flag after the first pass through the matching loop. [Bug: 6284].
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): When using -all, all attempts
+ after the first to match the regexp against the string should include
+ the TCL_REG_NOTBOL flag, to avoid erroneously matching ^ in the middle
+ of the string. Added code to set this flag after the first pass
+ through the matching loop. [Bug: 6284].
2000-09-19 David Gravereaux <davygrvy@ajubasolutions.com>
- * doc/Eval.3: Added a note about the script argument to Tcl_Eval()
+ * doc/Eval.3: Added a note about the script argument to Tcl_Eval()
should be in UTF-8 or risk implied conversion errors when possible
combinations of upper ascii can be valid UTF-8 special codes.
@@ -726,24 +709,24 @@
* doc/Alloc.3: Added entries for Tcl_AttemptAlloc, Tcl_AttempRealloc.
* doc/StringObj.3: Added entry for Tcl_AttemptSetObjLength.
-
+
* generic/tclDecls.h:
* generic/tclStubInit.c: Regen'ed stubs files from new tcl.decls.
* generic/tcl.decls: Added stubs for the Tcl_Attempt* memory
allocators and for Tcl_AttemptSetObjLength.
- * generic/tcl.h: Added #define's for attemptckalloc,
- attemptckrealloc, which map to the Tcl_Attempt* memory allocators.
+ * generic/tcl.h: Added #define's for attemptckalloc, attemptckrealloc,
+ which map to the Tcl_Attempt* memory allocators.
* generic/tclCkalloc.c: Added non-panic'ing versions of Tcl_Alloc,
Tcl_Realloc, etc.; these are called Tcl_AttemptAlloc,
- Tcl_AttemptRealloc, etc. These are used by
- Tcl_AttemptSetObjLength and the string obj append functions.
+ Tcl_AttemptRealloc, etc. These are used by Tcl_AttemptSetObjLength and
+ the string obj append functions.
* generic/tclStringObj.c: Modified string growth algorithm to use
- doubling algorithm as long as possible, and only fall back when
- that fails. Added Tcl_AttemptSetObjLength, and modified
+ doubling algorithm as long as possible, and only fall back when that
+ fails. Added Tcl_AttemptSetObjLength, and modified
AppendUnicodeToUnicodeRep, AppendUtfToUtfRep, and
Tcl_AppendStringsToObjVA to support this.
@@ -753,17 +736,17 @@
project conversion backups.
* win/tclWinPipe.c: Stage-1 bug fix for TR#2460 "exec leaks memory".
- Added more logic around the close-down of the pipe reader thread so
- as to avoid, at all cost, a TerminateThread. Most cases with exec
- are fixed, but I don't consider 2460 done yet. Closing down the
- read side of a pipe before the child process, doesn't really fit
- the windows model. [BUG: 2460]
+ Added more logic around the close-down of the pipe reader thread so as
+ to avoid, at all cost, a TerminateThread. Most cases with exec are
+ fixed, but I don't consider 2460 done yet. Closing down the read side
+ of a pipe before the child process, doesn't really fit the windows
+ model. [BUG: 2460]
2000-09-07 Jeff Hobbs <hobbs@scriptics.com>
* doc/trace.n: minor doc cleanup
-2000-09-06 André Pönitz <poenitz@htwm.de>
+2000-09-06 André Pönitz <poenitz@htwm.de>
* doc/*.n: added or changed "SEE ALSO:" section
@@ -771,14 +754,14 @@
* win/tclWinLoad.c (TclpLoadFile): added special message for
ERROR_PROC_NOT_FOUND exception in loading a dll.
- * win/tclWinError.c: changed ERROR_PROC_NOT_FOUND to map from
- ESRCH (POSIX: no such process) to EINVAL because there is no good
- mapping for "procedure not found".
+ * win/tclWinError.c: changed ERROR_PROC_NOT_FOUND to map from ESRCH
+ (POSIX: no such process) to EINVAL because there is no good mapping
+ for "procedure not found".
* README:
* generic/tcl.h:
* library/tcltest1.0/tcltest.tcl:
- * tools/tcl.wse.in:
+ * tools/tcl.wse.in:
* tools/tcltk-man2html.tcl:
* unix/configure.in:
* unix/tcl.spec:
@@ -795,8 +778,8 @@
appends.
* doc/source.n:
- * doc/Eval.3: added extra note about how to safe use ^Z in code,
- as it is now a cross-platform (was just Windows) EOF char.
+ * doc/Eval.3: added extra note about how to safe use ^Z in code, as it
+ is now a cross-platform (was just Windows) EOF char.
2000-09-05 Jeff Hobbs <hobbs@scriptics.com>
@@ -810,26 +793,26 @@
2000-08-29 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclStringObj.c: Applied patch from Gerhard Hintermayer
- to provide a more conservative string growth algorithm for strings
- larger than one megabyte; this allows more efficient use of memory
- for very large strings.
+ * generic/tclStringObj.c: Applied patch from Gerhard Hintermayer to
+ provide a more conservative string growth algorithm for strings larger
+ than one megabyte; this allows more efficient use of memory for very
+ large strings.
2000-08-25 Eric Melski <ericm@ajubasolutions.com>
* tests/trace.test: Extended array tracing tests.
- * doc/trace.n: Clarified information about when array traces will
- be fired.
+ * doc/trace.n: Clarified information about when array traces will be
+ fired.
* generic/tclVar.c (Tcl_ArrayObjCmd): Corrected call to CallTraces
- (for TCL_TRACE_ARRAY) to only be called when the variable is
- either an array or is undefined, to ensure that array traces do
- not fire for scalar variables.
+ (for TCL_TRACE_ARRAY) to only be called when the variable is either an
+ array or is undefined, to ensure that array traces do not fire for
+ scalar variables.
2000-08-24 Eric Melski <ericm@ajubasolutions.com>
-
- * doc/man.macros: Tweaked tab settings for .SO (Standard Options)
+
+ * doc/man.macros: Tweaked tab settings for .SO (Standard Options)
sections, based on suggestion from Peter Spjuth.
2000-08-24 Mo DeJong <mdejong@redhat.com>
@@ -838,23 +821,22 @@
* unix/configure.in:
* unix/tcl.m4 (SC_ENABLE_GCC): Remove --enable-gcc option.
* win/README: Add note about building with Cygwin.
- * win/configure.in:
- * win/tcl.m4 (SC_ENABLE_GCC): Remove --enable-gcc option.
- Remove quick hack that provided cross compile support for
- windows builds.
+ * win/configure.in:
+ * win/tcl.m4 (SC_ENABLE_GCC): Remove --enable-gcc option. Remove quick
+ hack that provided cross compile support for windows builds.
2000-08-24 Eric Melski <ericm@ajubasolutions.com>
- Overall change: Added support for command rename/delete traces
- and new trace syntax, from patch from Vince Darley. Added support
- for array traces for variables. [RFE: 5048, 5967].
+ Overall change: Added support for command rename/delete traces and new
+ trace syntax, from patch from Vince Darley. Added support for array
+ traces for variables. [RFE: 5048, 5967].
* doc/trace.n: Updated documentation for new syntax; flagged old
- syntax as deprecated; added documentation for command
- rename/delete traces and variable array traces.
+ syntax as deprecated; added documentation for command rename/delete
+ traces and variable array traces.
- * tests/trace.test: Updated tests for new trace syntax; new tests
- for command rename/delete traces; new tests for array traces.
+ * tests/trace.test: Updated tests for new trace syntax; new tests for
+ command rename/delete traces; new tests for array traces.
* generic/tclVar.c: Support for new trace syntax; support for
TCL_TRACE_ARRAY.
@@ -863,17 +845,17 @@
* generic/tclDecls.h:
* generic/tcl.decls: Stub functions for command rename/delete traces.
- * generic/tcl.h:
+ * generic/tcl.h:
* generic/tclInt.h:
* generic/tclBasic.c: Support for command traces.
- * generic/tclCmdMZ.c (TclTraceVariableObjCmd): Patched to support
- new [trace] syntax:
+ * generic/tclCmdMZ.c (TclTraceVariableObjCmd): Patched to support new
+ [trace] syntax:
trace {add|remove|list} {variable|command} name ops command
Added support for command traces (rename, delete operations).
- Added support for TCL_TRACE_ARRAY at Tcl level (array operation
- for variable traces).
-
+ Added support for TCL_TRACE_ARRAY at Tcl level (array operation for
+ variable traces).
+
2000-08-20 Eric Melski <ericm@ajubasolutions.com>
* generic/tclVar.c: Added check for non-arrays for [array statistics]
@@ -885,11 +867,11 @@
tclPlatDecls.h can't be parsed due to a missing definition of TCHAR.
Added a check to include it when not defined.
- ***POSSIBLE OBSCURE BUG*** could be caused when the compile flags
- for the core happen to be different than a project who uses these
- publics regarding -D_MBCS and -D_UNICODE. This added check might
- have to be revisited later with a better understanding of the
- reprocusions. I think TCHAR should be replaced with it's expansion.
+ ***POSSIBLE OBSCURE BUG*** could be caused when the compile flags for
+ the core happen to be different than a project who uses these publics
+ regarding -D_MBCS and -D_UNICODE. This added check might have to be
+ revisited later with a better understanding of the reprocusions. I
+ think TCHAR should be replaced with it's expansion.
2000-08-18 David Gravereaux <davygrvy@ajubasolutions.com>
@@ -899,13 +881,13 @@
2000-08-15 Eric Melski <ericm@ajubasolutions.com>
* library/tcltest1.0/tcltest.tcl: Set debug level in
- tcltest::restoreState to 2, for consistancy with the debug level
- in tcltest::saveState [Bug: 4505].
+ tcltest::restoreState to 2, for consistancy with the debug level in
+ tcltest::saveState [Bug: 4505].
2000-08-14 Eric Melski <ericm@ajubasolutions.com>
- * win/makefile.vc:
- * win/Makefile.in:
+ * win/makefile.vc:
+ * win/Makefile.in:
* unix/Makefile.in: Added tclPlatDecls.h to the list of installed
headers, for more complete stubs support. [Bug: 5241].
@@ -913,47 +895,44 @@
platform-specific stubs declarations (Tcl_WinTCharToUtf, etc)
[Bug: 5241].
- * README: Updated link for instructions on compiling Tcl from
- sources to point to correct location
- (http://dev.scriptics.com/doc/... instead of
- http://dev.scriptics.com/support/...).
+ * README: Updated link for instructions on compiling Tcl from sources
+ to point to correct location (http://dev.scriptics.com/doc/... instead
+ of http://dev.scriptics.com/support/...).
2000-08-11 Eric Melski <ericm@ajubasolutions.com>
* generic/tclEnv.c (TclUnsetEnv): Changed declaration of length
- variable from "unsigned int" to "int", to match usage when passed
- to TclpFindVariable [Bug: 6126].
+ variable from "unsigned int" to "int", to match usage when passed to
+ TclpFindVariable [Bug: 6126].
2000-08-10 Eric Melski <ericm@ajubasolutions.com>
- * library/msgcat1.0/pkgIndex.tcl: Bumped version number to 1.2
- [Bug: 6100].
+ * library/msgcat1.0/pkgIndex.tcl: Bumped version number to 1.2 [Bug:
+ 6100].
- * library/msgcat1.0/msgcat.tcl: Removed erroneous [package forget]
- in msgcat namespace initializer. Bumped version number to 1.2
- [Bug: 6100].
+ * library/msgcat1.0/msgcat.tcl: Removed erroneous [package forget] in
+ msgcat namespace initializer. Bumped version number to 1.2 [Bug: 6100]
2000-08-10 David Gravereaux <davygrvy@ajubasolutions.com>
- * generic/tclObj.c: r1.15 accidentally changed a global mutex
- name tclObjMutex to ObjMutex. Put the correct name back.
+ * generic/tclObj.c: r1.15 accidentally changed a global mutex name
+ tclObjMutex to ObjMutex. Put the correct name back.
2000-08-07 Eric Melski <ericm@ajubasolutions.com>
* tests/indexObj.test: Added tests using the [testwrongnumargs]
command to test Tcl_WrongNumArgs.
- * generic/tclTest.c (TestWrongNumArgsObjCmd): Added test function
- for the Tcl_WrongNumArgs function.
+ * generic/tclTest.c (TestWrongNumArgsObjCmd): Added test function for
+ the Tcl_WrongNumArgs function.
- * generic/tclIndexObj.c (Tcl_WrongNumArgs): Corrected algorithm to
- not insert a space before the message component when objc == 0
- [Bug: 6078].
+ * generic/tclIndexObj.c (Tcl_WrongNumArgs): Corrected algorithm to not
+ insert a space before the message component when objc == 0 [Bug: 6078]
2000-07-27 Mo DeJong <mdejong@redhat.com>
- * win/configure.in: TCL_STUB_LIB_FLAG should not
- include ${TCL_DBGX} in win/tclConfig.sh, fix that.
+ * win/configure.in: TCL_STUB_LIB_FLAG should not include ${TCL_DBGX}
+ in win/tclConfig.sh, fix that.
2000-07-25 David Gravereaux <davygrvy@ajubasolutions.com>
@@ -965,30 +944,30 @@
* generic/tclTest.c:
* mac/tclMacPort.h:
* unix/tclUnixPort.h:
- * win/tclWinInit.c: Thread-safe rewrite for tclAsync.c. Added
- notifier alerting on all platforms as it was only working on Win
- before. Removed older Win hacks that would end-up waking the
- wrong notifier in the presence of a threaded build. All tests
- pass as before. New test cases will be added soon for the new
- behavior. [BUG: 5791]
+ * win/tclWinInit.c: Thread-safe rewrite for tclAsync.c. Added notifier
+ alerting on all platforms as it was only working on Win before.
+ Removed older Win hacks that would end-up waking the wrong notifier in
+ the presence of a threaded build. All tests pass as before. New test
+ cases will be added soon for the new behavior. [BUG: 5791]
2000-07-25 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclVar.c (CallTraces): Added check for VAR_TRACE_ACTIVE
- on the array containing the variable before executing traces on
- that array, to conform with normal variable traces and the
- documentation, which states that while executing a trace, other
- traces on that variable are disabled. [Bug: 6049].
+ * generic/tclVar.c (CallTraces): Added check for VAR_TRACE_ACTIVE on
+ the array containing the variable before executing traces on that
+ array, to conform with normal variable traces and the documentation,
+ which states that while executing a trace, other traces on that
+ variable are disabled. [Bug: 6049].
- * win/tclWinPipe.c (BuildCommandLine): Added Tcl_DStringFree call
- to prevent potential memory leaks [Bug: 6041].
+ * win/tclWinPipe.c (BuildCommandLine): Added Tcl_DStringFree call to
+ prevent potential memory leaks [Bug: 6041].
2000-07-24 Eric Melski <ericm@ajubasolutions.com>
- * doc/msgcat.n: Added documentation about the selection of the
- default locale on Windows.
+ * doc/msgcat.n: Added documentation about the selection of the default
+ locale on Windows.
2000-07-23 Joe English <jenglish@flightlab.com>
+
* doc/AddErrInfo.3:
* doc/ChnlStack.3:
* doc/Exit.3:
@@ -1006,13 +985,13 @@
2000-07-21 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclStubInit.c:
- * generic/tclObj.c:
- * generic/tclInt.h:
- * generic/tclHash.c:
- * generic/tclDecls.h:
- * generic/tcl.h:
- * generic/tcl.decls:
+ * generic/tclStubInit.c:
+ * generic/tclObj.c:
+ * generic/tclInt.h:
+ * generic/tclHash.c:
+ * generic/tclDecls.h:
+ * generic/tcl.h:
+ * generic/tcl.decls:
* doc/Hash.3: Reapplied patch from Paul Duffin to extend hash tables
to allow custom key types, such as Tcl_Obj *'s, and others.
@@ -1022,41 +1001,41 @@
2000-07-21 Mo DeJong <mdejong@redhat.com>
* win/configure.in: Define ${prefix} and ${exec_prefix} like
- unix/configure.in. Fix or add TCL_SRC_DIR, TCL_STUB_LIB_FILE,
+ unix/configure.in. Fix or add TCL_SRC_DIR, TCL_STUB_LIB_FILE,
TCL_STUB_LIB_FLAG, TCL_BUILD_STUB_LIB_SPEC, TCL_STUB_LIB_SPEC,
TCL_BUILD_STUB_LIB_PATH, TCL_STUB_LIB_PATH.
2000-07-20 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclStubInit.c:
- * generic/tclObj.c:
- * generic/tclInt.h:
- * generic/tclHash.c:
- * generic/tclDecls.h:
- * generic/tcl.h:
- * generic/tcl.decls:
- * doc/Hash.3: Reverted patch from Paul Duffin to extend hash tables
- to allow custom key types, such as Tcl_Obj *'s, and others; it
- seems to break Tk.
+ * generic/tclStubInit.c:
+ * generic/tclObj.c:
+ * generic/tclInt.h:
+ * generic/tclHash.c:
+ * generic/tclDecls.h:
+ * generic/tcl.h:
+ * generic/tcl.decls:
+ * doc/Hash.3: Reverted patch from Paul Duffin to extend hash tables to
+ allow custom key types, such as Tcl_Obj *'s, and others; it seems to
+ break Tk.
2000-07-19 Eric Melski <ericm@ajubasolutions.com>
- * generic/tclStubInit.c:
- * generic/tclObj.c:
- * generic/tclInt.h:
- * generic/tclHash.c:
- * generic/tclDecls.h:
- * generic/tcl.h:
- * generic/tcl.decls:
- * doc/Hash.3: Applied patch from Paul Duffin to extend hash tables
- to allow custom key types, such as Tcl_Obj *'s, and others.
+ * generic/tclStubInit.c:
+ * generic/tclObj.c:
+ * generic/tclInt.h:
+ * generic/tclHash.c:
+ * generic/tclDecls.h:
+ * generic/tcl.h:
+ * generic/tcl.decls:
+ * doc/Hash.3: Applied patch from Paul Duffin to extend hash tables to
+ allow custom key types, such as Tcl_Obj *'s, and others.
* tests/pkgMkIndex.test: Added tests for pkg_compareExtension.
- * library/package.tcl: Enhanced pkg_compareExtension to handle
- Unixes which tack the version number on to the end of library
- names (eg, foo.so.1.2); such filenames will be correctly matched.
- (Patch from Vince Darley).
+ * library/package.tcl: Enhanced pkg_compareExtension to handle Unixes
+ which tack the version number on to the end of library names (eg,
+ foo.so.1.2); such filenames will be correctly matched. (Patch from
+ Vince Darley).
* win/makefile.vc: Applied patch from Don Porter to provide better
nmake support for NT/Alpha [RFE: 5938].
@@ -1065,52 +1044,49 @@
* unix/configure.in:
* unix/tcl.m4:
- * win/tcl.m4: Properly quote arguments to m4 macros. This allows
- Tcl to work with the new version of autoconf.
+ * win/tcl.m4: Properly quote arguments to m4 macros. This allows Tcl
+ to work with the new version of autoconf.
2000-07-18 Eric Melski <ericm@ajubasolutions.com>
* tests/opt.test: Removed references to Lfirst, Lrest functions.
- * library/opt0.4/optparse.tcl: Applied patch from Chris Nelson,
- which replaces the [Lfirst] function with an inline [lindex ... 0]
- and [Lrest] with [lrange ... 1 end], for better performance.
- [RFE: 6019]
-
+ * library/opt0.4/optparse.tcl: Applied patch from Chris Nelson, which
+ replaces the [Lfirst] function with an inline [lindex ... 0] and
+ [Lrest] with [lrange ... 1 end], for better performance. [RFE: 6019]
2000-07-18 Eric Melski <ericm@scriptics.com>
- * compat/string.h: Fixed function prototypes for strpbrk and
- strtok [Bug: 6020].
+ * compat/string.h: Fixed function prototypes for strpbrk and strtok
+ [Bug: 6020].
2000-07-17 David Gravereaux <davygrvy@ajubasolutions.com>
- * win/tclWinChan.c: Win2K OS bug with
- GetStdHandle(STD_OUTPUT_HANDLE) giving the wrong answer. This
- made TclpGetDefaultStdChannel grab what it thought was a valid
- native stdout handle. Added a new WriteFile() test to make sure
- it's really valid. This OS bug doesn't affect the shells. Only
- -subsystem:windows (aka WinMain) application that dynamically
- load tclXX.dll [BUG: 5971]
+ * win/tclWinChan.c: Win2K OS bug with GetStdHandle(STD_OUTPUT_HANDLE)
+ giving the wrong answer. This made TclpGetDefaultStdChannel grab what
+ it thought was a valid native stdout handle. Added a new WriteFile()
+ test to make sure it's really valid. This OS bug doesn't affect the
+ shells. Only -subsystem:windows (aka WinMain) application that
+ dynamically load tclXX.dll [BUG: 5971]
2000-07-17 Eric Melski <ericm@scriptics.com>
- * library/msgcat1.0/msgcat.tcl:
- * doc/msgcat.n:
- * tests/msgcat.test: Applied patches from Chris Nelson, to provide
- the mcmset function, which allows the translator to set multiple
- string translations in a single function call, rather than
- requiring many calls to mcset. [RFE: 6000, 5993]. In addition,
- these patches correct mcload to use utf-8 encoding on when reading
- message catalog files, and provides for better default behavior
- for determining the locale on a Windows system.
+ * library/msgcat1.0/msgcat.tcl:
+ * doc/msgcat.n:
+ * tests/msgcat.test: Applied patches from Chris Nelson, to provide the
+ mcmset function, which allows the translator to set multiple string
+ translations in a single function call, rather than requiring many
+ calls to mcset. [RFE: 6000, 5993]. In addition, these patches correct
+ mcload to use utf-8 encoding on when reading message catalog files,
+ and provides for better default behavior for determining the locale on
+ a Windows system.
2000-07-17 Mo DeJong <mdejong@redhat.com>
- * unix/tcl.m4 (SC_ENABLE_GCC): Don't set CC=gcc
- before running AC_PROG_CC if CC is already set.
+ * unix/tcl.m4 (SC_ENABLE_GCC): Don't set CC=gcc before running
+ AC_PROG_CC if CC is already set.
-2000-07-13 André Pönitz <poenitz@mathematik.tu-chemnitz.de>
+2000-07-13 André Pönitz <poenitz@mathematik.tu-chemnitz.de>
* doc/lappend.n:
* doc/lindex.n:
@@ -1124,31 +1100,30 @@
2000-07-07 Mo DeJong <mdejong@redhat.com>
- * win/configure.in: Fix definition of
- TCL_SRC_DIR so that it matches the Unix version.
+ * win/configure.in: Fix definition of TCL_SRC_DIR so that it matches
+ the Unix version.
* win/tclConfig.sh.in: Removed duplicate variables.
2000-07-06 Eric Melski <ericm@scriptics.com>
- * tests/msgcat.test:
- * library/msgcat1.0/msgcat.tcl: Applied patch from Christian
- Krone, to provide extended args support for msgcat::unknown, which
- is used for strings without a known translation in the current
- locale [Bug: 5984].
+ * tests/msgcat.test:
+ * library/msgcat1.0/msgcat.tcl: Applied patch from Christian Krone, to
+ provide extended args support for msgcat::unknown, which is used for
+ strings without a known translation in the current locale [Bug: 5984].
2000-06-29 Eric Melski <ericm@scriptics.com>
* doc/msgcat.n: Doc's for mcmax function.
- * library/msgcat1.0/msgcat.tcl: Applied patches from Laurent
- Duperval, to add mcmax function, which computes the length of the
- longest of several translated strings. Bumped version number to 1.1.
+ * library/msgcat1.0/msgcat.tcl: Applied patches from Laurent Duperval,
+ to add mcmax function, which computes the length of the longest of
+ several translated strings. Bumped version number to 1.1.
2000-06-27 Eric Melski <ericm@scriptics.com>
- * tests/stringObj.test: Tweaked tests to avoid hardcoded
- high-ASCII characters (which will fail in multibyte locales);
- instead used \uXXXX syntax. [Bug: 3842].
+ * tests/stringObj.test: Tweaked tests to avoid hardcoded high-ASCII
+ characters (which will fail in multibyte locales); instead used \uXXXX
+ syntax. [Bug: 3842].
2000-06-26 Eric Melski <ericm@scriptics.com>
@@ -1157,17 +1132,17 @@
2000-06-23 Eric Melski <ericm@scriptics.com>
- * doc/Hash.3: Added documentation patch for Tcl_Obj *'s as keys in
- Tcl hash tables [RFE: 5934].
+ * doc/Hash.3: Added documentation patch for Tcl_Obj *'s as keys in Tcl
+ hash tables [RFE: 5934].
- * generic/tcl.h:
- * generic/tclHash.c: Applied patch from [RFE: 5934], which extends
- Tcl hash tables to allow Tcl_Obj *'s as the key.
+ * generic/tcl.h:
+ * generic/tclHash.c: Applied patch from [RFE: 5934], which extends Tcl
+ hash tables to allow Tcl_Obj *'s as the key.
2000-06-20 Eric Melski <ericm@ajubasolutions.com>
* tests/opt.test:
- * library/opt0.4/optparse.tcl: Applied patch from [Bug: 5922], which
+ * library/opt0.4/optparse.tcl: Applied patch from [Bug: 5922], which
corrected an incorrect use of [string match].
* unix/tclConfig.sh.in:
@@ -1183,23 +1158,23 @@
* win/tcl.m4:
* win/configure.in:
- * win/Makefile.in: Applied patch from [RFE: 5844], to extend
- support for mingw compile environment on Windows.
+ * win/Makefile.in: Applied patch from [RFE: 5844], to extend support
+ for mingw compile environment on Windows.
* win/tclWinDde.c:
* win/tclWinInit.c:
* win/tclWinNotify.c:
* win/tclWinPipe.c:
* win/tclWinReg.c:
- * win/tclWinThrd.c: Applied patch from [Bug: 5794], to fix
- compiler warnings when using mingw on Windows.
+ * win/tclWinThrd.c: Applied patch from [Bug: 5794], to fix compiler
+ warnings when using mingw on Windows.
2000-05-31 Jeff Hobbs <hobbs@scriptics.com>
* tests/set-old.test:
* doc/unset.n:
- * generic/tclVar.c (Tcl_UnsetObjCmd): added -nocomplain and --
- options to unset, to allow for a silent unset operation.
+ * generic/tclVar.c (Tcl_UnsetObjCmd): added -nocomplain and -- options
+ to unset, to allow for a silent unset operation.
2000-05-31 Eric Melski <ericm@scriptics.com>
@@ -1216,68 +1191,66 @@
8.4a1 RELEASE
- * generic/tclExecute.c (TclExecuteByteCode INST_STR_CMP): added
- test of iResult return from memcmp, as memcmp isn't required to
- return only -1,0,1.
+ * generic/tclExecute.c (TclExecuteByteCode INST_STR_CMP): added test
+ of iResult return from memcmp, as memcmp isn't required to return only
+ -1,0,1.
2000-06-03 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Corrected
- caching of the index ptr to account for offsets != sizeof(char *).
- [Bug: 5153]
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Corrected caching
+ of the index ptr to account for offsets != sizeof(char *). [Bug: 5153]
2000-05-29 Sandeep Tamhankar <sandeep@scriptics.com>
* tests/http.test
* doc/http.n
- * library/http2.3/http.tcl: Fixed bug 5741, where unsuccessful
- geturl calls sometimes leaked memory and resources (sockets).
- Also, switched around some of the logic so that http::wait never
- throws an exception. This is because in an asynchronous geturl,
- the command callback will probably end up doing all the error
- handling anyway, and in an asynchronous situation, the user
- expects to check the state when the transaction completes, as
- opposed to being thrown an exception. For the http package, this
- menas the user can check http::status for "error" and http::error
- for the error message after doing the http::wait.
+ * library/http2.3/http.tcl: Fixed bug 5741, where unsuccessful geturl
+ calls sometimes leaked memory and resources (sockets). Also, switched
+ around some of the logic so that http::wait never throws an exception.
+ This is because in an asynchronous geturl, the command callback will
+ probably end up doing all the error handling anyway, and in an
+ asynchronous situation, the user expects to check the state when the
+ transaction completes, as opposed to being thrown an exception. For
+ the http package, this menas the user can check http::status for
+ "error" and http::error for the error message after doing the
+ http::wait.
2000-05-27 Jeff Hobbs <hobbs@scriptics.com>
* tests/info.test:
* doc/info.n:
* generic/tclIOUtil.c (Tcl_EvalFile):
- * generic/tclCmdIL.c (InfoScriptCmd): added ability to set the
- info script return value [info script ?newFileName?]. This will
- be beneficial for virtual file system programs. [Bug: 4225]
+ * generic/tclCmdIL.c (InfoScriptCmd): added ability to set the info
+ script return value [info script ?newFileName?]. This will be
+ beneficial for virtual file system programs. [Bug: 4225]
2000-05-26 Jeff Hobbs <hobbs@scriptics.com>
* generic/tclCmdMZ.c (Tcl_RegsubObjCmd): reworked to operate in
Unicode, tweaked for performance.
(Tcl_StringObjCmd) changed STR_FIRST/STR_LAST error message to
- something more understandable, reworked STR_FIRST, STR_LAST,
- STR_MAP, STR_MATCH, STR_RANGE, STR_REPLACE to operate in Unicode.
- Removed inneffectual STR_RANGE "special" ByteArray support.
- Optimized STR_MAP algorithm, especially optimized for one-pair case.
- Fixed possible mem overrun in STR_INDEX bytearray case.
-
+ something more understandable, reworked STR_FIRST, STR_LAST, STR_MAP,
+ STR_MATCH, STR_RANGE, STR_REPLACE to operate in Unicode. Removed
+ inneffectual STR_RANGE "special" ByteArray support. Optimized STR_MAP
+ algorithm, especially optimized for one-pair case. Fixed possible mem
+ overrun in STR_INDEX bytearray case.
+
* generic/tclCompExpr.c: changed INST_STREQ -> INST_STR_EQ,
INST_STRNEQ -> INST_STR_NEQ
* generic/tclCompile.c: added streq, strneq, strcmp, strlen &
strmatch to the compiled stats instructionTable
* generic/tclCompile.h: added instructions INST_STR_CMP,
INST_STR_INDEX, INST_STR_MATCH
- * generic/tclCompCmds.c: added byte compiler support for
- [string compare|match|index].
- * generic/tclExecute.c:
- Changed INST_STR_(N)EQ to return an Int object and not bother
- trying to reuse the top stack object.
- Added INST_STR_CMP, INST_STR_INDEX, INST_STR_MATCH bytecode ops.
- Extended evalstats output info with Tcl_IsShared stat info.
+ * generic/tclCompCmds.c: added byte compiler support for [string
+ compare|match|index].
+ * generic/tclExecute.c: Changed INST_STR_(N)EQ to return an Int object
+ and not bother trying to reuse the top stack object. Added
+ INST_STR_CMP, INST_STR_INDEX, INST_STR_MATCH bytecode ops. Extended
+ evalstats output info with Tcl_IsShared stat info.
* generic/tclInt.h:
- * generic/tclObj.c (Tcl_DbIsShared): added support for checking
- result of Tcl_IsShared in evalstats (TCL_COMPILE_STATS).
+ * generic/tclObj.c (Tcl_DbIsShared): added support for checking result
+ of Tcl_IsShared in evalstats (TCL_COMPILE_STATS).
* generic/tclStringObj.c (Tcl_AppendUnicodeToObj): removed dead code.
(AppendUnicodeToUnicodeRep) removed overallocation by extra
@@ -1289,31 +1262,30 @@
2000-05-23 Eric Melski <ericm@scriptics.com>
- * generic/tclInt.h: Added function prototypes for
- TclCompileStringCmd and TclCompileReturnCmd.
+ * generic/tclInt.h: Added function prototypes for TclCompileStringCmd
+ and TclCompileReturnCmd.
* generic/tclCompile.h: Added definition of INST_STRLEN opcode and
updated LAST_INST_OPCODE value.
- * generic/tclBasic.c: Added information about TclCompileStringCmd
- and TclCompileReturnCmd to BuiltInCmds table.
+ * generic/tclBasic.c: Added information about TclCompileStringCmd and
+ TclCompileReturnCmd to BuiltInCmds table.
* generic/tclExecute.c (TclExecuteByteCode): Added support for the
INST_STRLEN opcode.
- * generic/tclCompCmds.c
- (TclCompileStringCmd): Basic implementation of byte-compiled
- [string] command. Not all subcommands are implemented; those
- that are not an out-line compiled.
+ * generic/tclCompCmds.c (TclCompileStringCmd): Basic implementation of
+ byte-compiled [string] command. Not all subcommands are implemented;
+ those that are not an out-line compiled.
(TclCompileReturnCmd): Byte-compiled implementation of [return]
- command. Only "simple" returns are byte-compiled; in particular,
- if the -code, -errorinfo or -errorcode flags are used, the command
- is not byte-compiled.
+ command. Only "simple" returns are byte-compiled; in particular, if
+ the -code, -errorinfo or -errorcode flags are used, the command is not
+ byte-compiled.
2000-05-22 Jeff Hobbs <hobbs@scriptics.com>
- * doc/scan.n:
+ * doc/scan.n:
* doc/array.n: minor doc fixes [Bug: 5396]
* generic/tclEnv.c: cast cleanup [Bug: 5624]
@@ -1331,9 +1303,9 @@
* generic/tclStubInit.c:
* generic/tclIntDecls.h:
- * generic/tclInt.decls: removed TclTestChannel*Cmd from internal
- stubs table and added TclChannelEventScriptInvoker to the internal
- stubs table so it can be used from the test code.
+ * generic/tclInt.decls: removed TclTestChannel*Cmd from internal stubs
+ table and added TclChannelEventScriptInvoker to the internal stubs
+ table so it can be used from the test code.
2000-05-18 Eric Melski <ericm@scriptics.com>
@@ -1342,9 +1314,9 @@
* generic/tclDate.c: Regenerated from tclGetDate.y.
- * generic/tclGetDate.y: Tweaked grammar to properly handle the
- "ago" keyword when it follows multiple relative unit specifiers,
- as in "2 days 2 hours ago". [Bug: 5497].
+ * generic/tclGetDate.y: Tweaked grammar to properly handle the "ago"
+ keyword when it follows multiple relative unit specifiers, as in "2
+ days 2 hours ago". [Bug: 5497]
2000-05-18 Jeff Hobbs <hobbs@scriptics.com>
@@ -1354,9 +1326,9 @@
* generic/tclClock.c (FormatClock): correct code to handle locale
specific return values from strftime, if any. [Bug: 3345]
- * unix/tclUnixInit.c (TclpSetInitialEncodings): attempt to
- correct setlocale calls for XIM support and locale issues.
- [BUG: 5422 3345 4236 2522 2521]
+ * unix/tclUnixInit.c (TclpSetInitialEncodings): attempt to correct
+ setlocale calls for XIM support and locale issues. [BUG: 5422 3345
+ 4236 2522 2521]
2000-05-17 Jeff Hobbs <hobbs@scriptics.com>
@@ -1373,32 +1345,32 @@
2000-05-10 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclPosixStr.c (Tcl_SignalMsg): clarified #defines for
- Linux on Sparc to compile correctly. [Bug: 5364]
+ * generic/tclPosixStr.c (Tcl_SignalMsg): clarified #defines for Linux
+ on Sparc to compile correctly. [Bug: 5364]
* doc/namespace.n:
* tests/namespace.test:
- * generic/tclNamesp.c (Tcl_NamespaceObjCmd): added 'namespace
- exists' command. [Bug: 4665]
+ * generic/tclNamesp.c (Tcl_NamespaceObjCmd): added 'namespace exists'
+ command. [Bug: 4665]
* doc/source.n:
* doc/Eval.3:
* tests/source.test:
- * generic/tclIOUtil.c (Tcl_EvalFile): added explicit \32 (^Z)
- eofchar (affects Tcl_EvalFile in C, "source" in Tcl). This was
- implicit on Windows already, and is now cross-platform to allow
- for scripted documents.
+ * generic/tclIOUtil.c (Tcl_EvalFile): added explicit \32 (^Z) eofchar
+ (affects Tcl_EvalFile in C, "source" in Tcl). This was implicit on
+ Windows already, and is now cross-platform to allow for scripted
+ documents.
2000-05-09 Andreas Kupries <a.kupries@westend.com>
operating as proxy for David Gravereaux <davygrvy@pobox.com>
-
+
* win/tclWinThrd.c (TclpInitLock, TclpMasterLock): Added missing
- initialization of joinLock.
+ initialization of joinLock.
2000-05-09 Eric Melski <ericm@scriptics.com>
- * tests/lsearch.test:
- * doc/lsearch.n:
+ * tests/lsearch.test:
+ * doc/lsearch.n:
* generic/tclCmdIL.c (Tcl_LsearchObjCmd): Extended [lsearch] to
support sorted list searching and typed list searching. [RFE: 4098].
@@ -1408,19 +1380,19 @@
* tests/expr.test:
* tests/expr-old.test: added tests for 'eq' and 'ne'
* generic/tclExecute.c:
- * generic/tclCompile.h: added INST_STREQ and INST_STRNEQ opcodes
- that do strict string comparisons.
+ * generic/tclCompile.h: added INST_STREQ and INST_STRNEQ opcodes that
+ do strict string comparisons.
* generic/tclCompExpr.c: added 'eq' and 'ne' string comparison
operators.
- * generic/tclParseExpr.c (GetLexeme): added 'eq' and 'ne' expr
- parse terms (string (in)equality check).
+ * generic/tclParseExpr.c (GetLexeme): added 'eq' and 'ne' expr parse
+ terms (string (in)equality check).
* generic/tclCmdIL.c (Tcl_LinsertObjCmd): made use of
- Tcl_DuplicateObj where code was otherwise duplicated. Made
- special case of inserting one element at the end work again (where
- index == len).
- (Tcl_LreplaceObjCmd): moved Tcl_DuplicateObj call lower and
- cleaned up use of other arguments.
+ Tcl_DuplicateObj where code was otherwise duplicated. Made special
+ case of inserting one element at the end work again (where index ==
+ len).
+ (Tcl_LreplaceObjCmd): moved Tcl_DuplicateObj call lower and cleaned
+ up use of other arguments.
* generic/tclObj.c (Tcl_DuplicateObj): simplified code to call
TclInitStringRep, which the code was just duplicating in part.
@@ -1437,16 +1409,15 @@
2000-05-08 Eric Melski <ericm@scriptics.com>
- * tests/set-old.test:
- * doc/array.n:
+ * tests/set-old.test:
+ * doc/array.n:
* generic/tclVar.c: Added [array statistics] command [RFE: 4557]
2000-05-06 Andreas Kupries <a.kupries@westend.com>
operating as proxy for David Gravereaux <davygrvy@pobox.com>
- * tclThreadJoin.c: Fixed several places with missing a & in
- arguments to calls of Tcl_Mutex(Un)lock and
- Tcl_ConditionNotify functions.
+ * tclThreadJoin.c: Fixed several places with missing a & in arguments
+ to calls of Tcl_Mutex(Un)lock and Tcl_ConditionNotify functions.
2000-05-02 Jeff Hobbs <hobbs@scriptics.com>
@@ -1480,72 +1451,70 @@
2000-05-02 Andreas Kupries <a.kupries@westend.com>
- * Overall changes:
+ Overall changes:
(1) Implementation of joinable threads for all platforms.
- (2) Additional API's for channels. Required to allow the
- thread extension to move channels between threads.
+ (2) Additional API's for channels. Required to allow the thread
+ extension to move channels between threads.
* generic/tcl.decls (lines 1360f): Added Tcl_JoinThread,
- Tcl_IsChannelShared, Tcl_IsChannelRegistered, Tcl_CutChannel,
- Tcl_SpliceChannel, Tcl_IsChannelExisting and
- Tcl_ClearChannelHandlers (slots 394 to 400).
+ Tcl_IsChannelShared, Tcl_IsChannelRegistered, Tcl_CutChannel,
+ Tcl_SpliceChannel, Tcl_IsChannelExisting and Tcl_ClearChannelHandlers
+ (slots 394 to 400).
* generic/tclIO.c: Implemented Tcl_IsChannelRegistered,
- Tcl_IsChannelShared, Tcl_CutChannel, Tcl_SpliceChannel,
- Tcl_IsChannelExisting and Tcl_ClearChannelHandlers.
- Tcl_CutChannel uses code from CloseChannel. Replaced this code
- by a call to Tcl_CutChannel. Replaced several code fragments
- adding channels to the channel list with calls to
- Tcl_SpliceChannel. Removed now unused variables from
- CloseChannel and Tcl_UnstackChannel. Tcl_ClearChannelHandlers
- uses code from Tcl_Close. Replaced this code by a call to
- Tcl_ClearChannelHandlers. Removed now unused variables from
- Tcl_Close. Added the subcommands 'cut', 'forgetch', 'splice' and
- 'isshared' to the test code
- (TclTestChannelCmd).
+ Tcl_IsChannelShared, Tcl_CutChannel, Tcl_SpliceChannel,
+ Tcl_IsChannelExisting and Tcl_ClearChannelHandlers. Tcl_CutChannel
+ uses code from CloseChannel. Replaced this code by a call to
+ Tcl_CutChannel. Replaced several code fragments adding channels to
+ the channel list with calls to Tcl_SpliceChannel. Removed now unused
+ variables from CloseChannel and Tcl_UnstackChannel.
+ Tcl_ClearChannelHandlers uses code from Tcl_Close. Replaced this code
+ by a call to Tcl_ClearChannelHandlers. Removed now unused variables
+ from Tcl_Close. Added the subcommands 'cut', 'forgetch', 'splice' and
+ 'isshared' to the test code (TclTestChannelCmd).
* unix/tclUnixThread.c: Implemented Tcl_JoinThread using the
- pthread-functionality.
+ pthread-functionality.
* win/tclWinThrd.c: Fixed several small typos in comments.
- Implemented Tcl_JoinThread using a platform independent
- emulation layer (see generic/tclThreadJoin.c below). Added
- 'joinLock' to serialize Tcl_CreateThread and TclpExitThread to
- prevent a race for joinable threads.
+ Implemented Tcl_JoinThread using a platform independent emulation
+ layer (see generic/tclThreadJoin.c below). Added 'joinLock' to
+ serialize Tcl_CreateThread and TclpExitThread to prevent a race for
+ joinable threads.
* mac/tclMacThrd.c: Implemented Tcl_JoinThread using a platform
- independent emulation layer (see generic/tclThreadJoin.c
- below). Due to the cooperative nature of threading on this
- platform the race mentioned above is not present.
+ independent emulation layer (see generic/tclThreadJoin.c below). Due
+ to the cooperative nature of threading on this platform the race
+ mentioned above is not present.
- * generic/tclThreadJoin.c: New file. Contains a platform
- independent emulation layer helping in the implementation of
- joinable threads for the win and mac platforms.
+ * generic/tclThreadJoin.c: New file. Contains a platform independent
+ emulation layer helping in the implementation of joinable threads for
+ the win and mac platforms.
* generic/tclInt.h: Added declarations for TclJoinThread,
- TclRememberJoinableThread and TclSignalExitThread. These
- procedures define the API of the emulation layer for joinable
- threads (see generic/tclThreadJoin.c above).
+ TclRememberJoinableThread and TclSignalExitThread. These procedures
+ define the API of the emulation layer for joinable threads (see
+ generic/tclThreadJoin.c above).
* win/Makefile.in:
* win/makefile.vc: Added generic/tclTheadJoin.o to the rules.
- * mac/: I don't know to which file generic/tclTheadJoin.o has to
- be added to so that it compiles. Sorry.
+ * mac/: I don't know to which file generic/tclTheadJoin.o has to be
+ added to so that it compiles. Sorry.
- * unix/tclUnixChan.c: #ifdef'd the thread-local list of file
- channels as it prevents us from transfering channels. To restore
- this we may need an extended interface to drivers in the
- future. Target: 9.0. Found while testing the new transfer of
- channels. The information in this list for a channel was left
- behind and then crashed the system during finalization.
+ * unix/tclUnixChan.c: #ifdef'd the thread-local list of file channels
+ as it prevents us from transfering channels. To restore this we may
+ need an extended interface to drivers in the future. Target:
+ 9.0. Found while testing the new transfer of channels. The information
+ in this list for a channel was left behind and then crashed the system
+ during finalization.
* generic/tclThreadTest.c: Added -joinable flag to 'testthread
- create'. Added subcommand 'testthread join'.
+ create'. Added subcommand 'testthread join'.
* doc/CrtChannel.3: Added documentation for Tcl_IsChannelRegistered,
- Tcl_IsChannelShared, Tcl_CutChannel, Tcl_SpliceChannel,
- Tcl_IsChannelExisting and Tcl_ClearChannelHandlers.
+ Tcl_IsChannelShared, Tcl_CutChannel, Tcl_SpliceChannel,
+ Tcl_IsChannelExisting and Tcl_ClearChannelHandlers.
* doc/Thread.3: Added documentation for Tcl_JoinThread.
@@ -1563,8 +1532,8 @@
2000-04-26 Eric Melski <ericm@scriptics.com>
- * doc/memory.n: Man page for Tcl "memory" command, which is
- created when TCL_MEM_DEBUG is defined at compile time.
+ * doc/memory.n: Man page for Tcl "memory" command, which is created
+ when TCL_MEM_DEBUG is defined at compile time.
* doc/TCL_MEM_DEBUG.3: Man page with overall information about
TCL_MEM_DEBUG usage.
@@ -1577,13 +1546,13 @@
* unix/mkLinks: Regen'd with new mkLinks.tcl.
* unix/mkLinks.tcl: Fixed indentation, made link setup more
- intelligent (only do one existance test per man page, instead of
- one per function).
+ intelligent (only do one existance test per man page, instead of one
+ per function).
* doc/library.n: Fixed .SH NAME macro to include each function
- documented on the page, so that mkLinks will know about the
- functions listed there, and so that the Windows help file index
- will get set up correctly [Bug: 1898, 5273].
+ documented on the page, so that mkLinks will know about the functions
+ listed there, and so that the Windows help file index will get set up
+ correctly [Bug: 1898, 5273].
2000-04-26 Jeff Hobbs <hobbs@scriptics.com>
@@ -1613,42 +1582,41 @@
2000-04-25 Eric Melski <ericm@scriptics.com>
- * unix/mkLinks:
+ * unix/mkLinks:
* doc/AddErrInfo.3: Added information about Tcl_LogCommandInfo
[Bug: 1818].
2000-04-24 Eric Melski <ericm@scriptics.com>
- * unix/mkLinks:
+ * unix/mkLinks:
* doc/OpenFileChnl.3: Added man entry for Tcl_Ungets [Bug: 1834].
- * unix/mkLinks:
+ * unix/mkLinks:
* doc/SourceRCFile.3: Man page for Tcl_SourceRCFile [Bug: 1833].
- * unix/mkLinks:
+ * unix/mkLinks:
* doc/ParseCmd.3: Added documentation for Tcl_ParseVar [Bug: 1828].
2000-04-24 Jeff Hobbs <hobbs@scriptics.com>
* unix/tclUnixNotfy.c (Tcl_FinalizeNotifier, NotifierThreadProc):
- added write of 'q' into triggerPipe for notifier in threaded case,
- so that Tcl doesn't hang when children are still running [Bug: 4139]
+ added write of 'q' into triggerPipe for notifier in threaded case, so
+ that Tcl doesn't hang when children are still running [Bug: 4139]
* unix/tclUnixThrd.c (Tcl_MutexLock): minor comment fixes.
2000-04-23 Jim Ingham <jingham@cygnus.com>
These changes make some error handling marginally better for Mac
- sockets. It is still somewhat flakey, however.
-
- * mac/tclMacSock.c (TcpClose): Add timeouts to the close - these
- don't seem to be honored, however.
- Use a separate PB for the release, since an async connect socket
- will still be using the original buffer.
- Make sure TCPRelease returns noErr before freeing the recvBuff.
- If the call returns an error, then the buffer is not right.
- * mac/tclMacSock.c (CreateSocket): Add timeouts to the async
- create. These don't seem to trigger, however. Sigh...
+ sockets. It is still somewhat flakey, however.
+
+ * mac/tclMacSock.c (TcpClose): Add timeouts to the close - these don't
+ seem to be honored, however. Use a separate PB for the release, since
+ an async connect socket will still be using the original buffer. Make
+ sure TCPRelease returns noErr before freeing the recvBuff. If the call
+ returns an error, then the buffer is not right.
+ * mac/tclMacSock.c (CreateSocket): Add timeouts to the async create.
+ These don't seem to trigger, however. Sigh...
* mac/tclMacSock.c (WaitForSocketEvent): If an TCP_ASYNC_CONNECT
socket errors out, then return EWOULDBLOCK & error out.
* mac/tclMacSock.c (NotifyRoutine): Added a NotifyRoutine for
@@ -1662,20 +1630,20 @@
2000-04-21 Sandeep Tamhankar <sandeep@scriptics.com>
* library/http2.1/http.tcl: Fixed a newly introduced bug where if
- there's a -command callback and something goes wrong, geturl threw
- an exception, called the callback, and unset the token. I changed
- it so that it will not call the callback when throwing an
- exception (so the caller only finds out about a given error from
- one place). Also, fixed http::ncode so that it actually gives you
- back the http return code (i.e. 200, 404, etc.) instead of the
- first digit of the version of HTTP being used (i.e. 1).
+ there's a -command callback and something goes wrong, geturl threw an
+ exception, called the callback, and unset the token. I changed it so
+ that it will not call the callback when throwing an exception (so the
+ caller only finds out about a given error from one place). Also,
+ fixed http::ncode so that it actually gives you back the http return
+ code (i.e. 200, 404, etc.) instead of the first digit of the version
+ of HTTP being used (i.e. 1).
2000-04-21 Brent Welch <welch@scriptics.com>
* library/http2.1/http.tcl: More thrashing with the "server closes
- without reading post data" scenario. Reverted to the previous
- filevent configuratiuon, which seems to work better with small
- amounts of post data.
+ without reading post data" scenario. Reverted to the previous filevent
+ configuratiuon, which seems to work better with small amounts of post
+ data.
2000-04-20 Jeff Hobbs <hobbs@scriptics.com>
@@ -1688,15 +1656,15 @@
* library/dde1.1/pkgIndex.tcl:
* library/reg1.0/pkgIndex.tcl:
* win/tclWinChan.c:
- * win/tclWinThrd.c: converted CRLF to LF the */tcl.hpj.in files
- were not converted, as it confuses hcw locally. [Bug: 5096]
+ * win/tclWinThrd.c: converted CRLF to LF the */tcl.hpj.in files were
+ not converted, as it confuses hcw locally. [Bug: 5096]
* win/Makefile.in: expanded cleanup target for help files
* doc/Thread.3: minor macro cleanup
- * generic/tclFileName.c (SplitUnixPath): added support for QNX
- node ids.
+ * generic/tclFileName.c (SplitUnixPath): added support for QNX node
+ ids.
2000-04-18 Jeff Hobbs <hobbs@scriptics.com>
@@ -1716,9 +1684,8 @@
* unix/Makefile.in: added install-strip target; bindir, libdir,
mandir, includedir vars; tclLoadDyld.c target [Bug: 2527]
- * unix/tclUnixChan.c (CreateSocket): force a socket back into
- blocking mode (default state) after a -async connect succeeds.
- [Bug: 4388]
+ * unix/tclUnixChan.c (CreateSocket): force a socket back into blocking
+ mode (default state) after a -async connect succeeds. [Bug: 4388]
* generic/tclEvent.c (TclInitSubsystems): Moved tclLibraryPath to
thread-local storage to prevent thread-related race condition.
@@ -1732,23 +1699,23 @@
* win/Makefile.in:
* win/tcl.rc:
* win/tclsh.rc:
- * win/tclsh.ico: Modified copyright dates in Windows resource
- files. Added an icon for tclsh.exe.
+ * win/tclsh.ico: Modified copyright dates in Windows resource files.
+ Added an icon for tclsh.exe.
2000-04-17 Brent Welch <welch@scriptics.com>
* generic/tcl.h, generic/tclThreadTest.c, unix/tclUnixThrd.c,
- win/tclWinThread.c, mac/tclMacThread.c:
- Added Tcl_CreateThreadType and TCL_RETURN_THREAD_TYPE
- macros for declaring the NewThread callback proc.
+ * win/tclWinThread.c, mac/tclMacThread.c: Added Tcl_CreateThreadType
+ and TCL_RETURN_THREAD_TYPE macros for declaring the NewThread callback
+ proc.
2000-04-14 Jeff Hobbs <hobbs@scriptics.com>
* unix/tclUnixChan.c (TtyParseMode): Only allow setting mark/space
parity on platforms that support it [Bug: 5089]
- * generic/tclBasic.c (Tcl_GetVersion): adjusted use of major/minor
- to not conflict with global decl on some systems [Bug: 2882]
+ * generic/tclBasic.c (Tcl_GetVersion): adjusted use of major/minor to
+ not conflict with global decl on some systems [Bug: 2882]
* doc/AppInit.3:
* doc/Async.3:
@@ -1798,17 +1765,17 @@
* generic/tcl.h: Fixed Tcl_CreateThread declaration.
* library/tcltest1.0/tcltest.tcl: Fixed the "mainThread"
initialization to work with either testthread or the thread extension
- * unix/tclUnixThrd.c: Fixed compiler warning when compiling
- with -DTCL_THREADS
+ * unix/tclUnixThrd.c: Fixed compiler warning when compiling with
+ -DTCL_THREADS
2000-04-10 Eric Melski <ericm@scriptics.com>
- * win/tclWinPipe.c (TclpCreateTempFile): Added conversion of
- contents string from UTF to native encoding [Bug: 4030].
+ * win/tclWinPipe.c (TclpCreateTempFile): Added conversion of contents
+ string from UTF to native encoding [Bug: 4030].
* tests/regexp.test: Added tests for infinite looping in [regexp
-all].
-
+
* generic/tclCmdMZ.c: Fixed infinite loop bug with [regexp -all]
[Bug: 4981].
@@ -1817,14 +1784,13 @@
2000-04-09 Brent Welch <welch@scriptics.com>
- * lib/httpd2.1/http.tcl: Worked on the "server closes before
- reading post data" case, which unfortunately causes different
- error cases on Solaris, which can read the reply, and Linux
- and Windows, which cannot read anything. This is all in the
- loop-back case - client and server on the same host. Also
- unified the error handling so the "ioerror" status goes away
- and errors are reflected in a more uniform way. Updated the
- man page to document the behavior.
+ * lib/httpd2.1/http.tcl: Worked on the "server closes before reading
+ post data" case, which unfortunately causes different error cases on
+ Solaris, which can read the reply, and Linux and Windows, which cannot
+ read anything. This is all in the loop-back case - client and server
+ on the same host. Also unified the error handling so the "ioerror"
+ status goes away and errors are reflected in a more uniform way.
+ Updated the man page to document the behavior.
2000-04-09 Jeff Hobbs <hobbs@scriptics.com>
@@ -1834,70 +1800,68 @@
* generic/tclBasic.c (Tcl_SetCommandInfo): comment fix
* unix/tclUnixThrd.c (Tcl_CreateThread): moved TCL_THREADS ifdef
- inside of func as it is declared for non-threads builds as well.
- In the non-threads case, it always returns TCL_ERROR (couldn't
- create thread).
+ inside of func as it is declared for non-threads builds as well. In
+ the non-threads case, it always returns TCL_ERROR (couldn't create
+ thread).
2000-04-08 Andreas Kupries <a.kupries@westend.com>
* Overall change: Definition of a public API for the creation of
- new threads.
+ new threads.
* generic/tclInt.h (line 1802f): Removed the definition of
'TclpThreadCreate'. (line 793f) Removed the definition of
'Tcl_ThreadCreateProc'.
* generic/tcl.h (line 388f): Readded the definition of
- 'Tcl_ThreadCreateProc'. Added Win32 stuff send in by David
- Graveraux <davygrvy@bigfoot.com> to that too (__stdcall,
- ...). Added macros for the default stacksize and allowed flags.
+ 'Tcl_ThreadCreateProc'. Added Win32 stuff send in by David Graveraux
+ <davygrvy@bigfoot.com> to that too (__stdcall, ...). Added macros for
+ the default stacksize and allowed flags.
* generic/tcl.decls (line 1356f): Added definition of
- 'Tcl_CreateThread', slot 393 of the stub table. Two new
- arguments in the public API, for stacksize and flags.
+ 'Tcl_CreateThread', slot 393 of the stub table. Two new arguments in
+ the public API, for stacksize and flags.
* win/tclWinThrd.c:
* mac/tclMacThrd.c: Renamed TclpThreadCreate to Tcl_CreateThread,
- added handling of the stacksize. Flags are currently ignored.
+ added handling of the stacksize. Flags are currently ignored.
- * unix/tclUnixThrd.c: See above, but handles joinable
- flag. Ignores the specified stacksize if the macro
- HAVE_PTHREAD_ATTR_SETSTACKSIZE is not defined.
+ * unix/tclUnixThrd.c: See above, but handles joinable flag. Ignores
+ the specified stacksize if the macro HAVE_PTHREAD_ATTR_SETSTACKSIZE is
+ not defined.
* generic/tclThreadTest.c (line 363): See below.
- * unix/tclUnixNotfy.c (line 210): Adapted to the changes
- above. Uses default stacksize and no flags now.
+ * unix/tclUnixNotfy.c (line 210): Adapted to the changes above. Uses
+ default stacksize and no flags now.
* unic/tcl.m4 (line 382f): Added a check for
- 'pthread_attr_setstacksize' to detect platforms not implementing
- this feature of pthreads. If it is implemented, configure will
- define the macro HAVE_PTHREAD_ATTR_SETSTACKSIZE (See
- unix/tclUnixThrd.c too).
+ 'pthread_attr_setstacksize' to detect platforms not implementing this
+ feature of pthreads. If it is implemented, configure will define the
+ macro HAVE_PTHREAD_ATTR_SETSTACKSIZE (See unix/tclUnixThrd.c too).
- * doc/Thread.3: Added Tcl_CreateThread and its arguments to the
- list of described functions. Removed stuff about not providing a
- public C-API for thread-creation.
+ * doc/Thread.3: Added Tcl_CreateThread and its arguments to the list
+ of described functions. Removed stuff about not providing a public
+ C-API for thread-creation.
2000-04-07 Jeff Hobbs <hobbs@scriptics.com>
- * doc/binary.n: clarified docs on sign extension in binary scan
- [Bug: 3466]
+ * doc/binary.n: clarified docs on sign extension in binary scan [Bug:
+ 3466]
* library/tcltest1.0/tcltest.tcl (initConstraints): removed win32s
references (no longer supported)
- * tests/fCmd.test: marked test 8.1 knownBug because it is
- dangerous on poorly configured systems [Bug: 3881]
- and added 8.2 to keep essence of 8.1 tested.
+ * tests/fCmd.test: marked test 8.1 knownBug because it is dangerous on
+ poorly configured systems [Bug: 3881] and added 8.2 to keep essence of
+ 8.1 tested.
2000-04-05 Andreas Kupries <a.kupries@westend.com>
- * generic/tclIO.c (Tcl_UnstackChannel, line 1831): Forcing
- interest mask to the correct value after an unstack and
- re-initialization of the notifier via the watchProc. Without this
- the first fileevent after an unstack will come through and be
- processed, but no more. [Bug: ??].
+ * generic/tclIO.c (Tcl_UnstackChannel, line 1831): Forcing interest
+ mask to the correct value after an unstack and re-initialization of
+ the notifier via the watchProc. Without this the first fileevent after
+ an unstack will come through and be processed, but no more. [Bug: ??].
2000-03-04 Brent Welch <welch@scriptics.com>
@@ -1909,18 +1873,18 @@
2000-03-29 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: For the -querychannel option,
- fconfigure the socket to be binary so that we don't translate
- anything while reading the data. This is because we determine the
- content length of the data on the channel by using seek (to the end
- of the file) and tell on the file handle, and we need the
- content-length to match the amount of data actually sent, and
- translation can affect the number of bytes posted.
+ * library/http2.1/http.tcl: For the -querychannel option, fconfigure
+ the socket to be binary so that we don't translate anything while
+ reading the data. This is because we determine the content length of
+ the data on the channel by using seek (to the end of the file) and
+ tell on the file handle, and we need the content-length to match the
+ amount of data actually sent, and translation can affect the number of
+ bytes posted.
2000-04-03 Andreas Kupries <a.kupries@westend.com>
- * Overall change: Definition of public API's for the finalization
- of conditions and mutexes. [Bug: 4199].
+ * Overall change: Definition of public API's for the finalization of
+ conditions and mutexes. [Bug: 4199].
* generic/tclInt.h: Removed definitions of TclFinalizeMutex and
TclFinalizeCondition.
@@ -1928,27 +1892,26 @@
* generic/tcl.decls: Added declarations of Tcl_MutexFinalize and
Tcl_ConditionFinalize.
- * generic/tclThread.c: Renamed TclFinalizeMutex to
- Tcl_MutexFinalize. Renamed TclFinalizeCondition to
- Tcl_ConditionFinalize.
+ * generic/tclThread.c: Renamed TclFinalizeMutex to Tcl_MutexFinalize.
+ Renamed TclFinalizeCondition to Tcl_ConditionFinalize.
* generic/tclNotify.c: Changed usage of TclFinalizeMutex to
Tcl_MutexFinalize.
- * unix/tclUnixNotfy.c:
+ * unix/tclUnixNotfy.c:
* generic/tclThreadTest.c: Changed usages of TclFinalizeCondition to
Tcl_ConditionFinalize.
* generic/tcl.h: Added empty macros for Tcl_MutexFinalize and
- Tcl_ConditionFinalize, to be used when the core is compiled
- without threads.
+ Tcl_ConditionFinalize, to be used when the core is compiled without
+ threads.
* doc/Thread.3: Added description the new API's.
2000-04-03 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclCmdIL.c (InfoVarsCmd): checked for non-NULL procPtr
- to prevent itcl info override crash [Bug: 4064]
+ * generic/tclCmdIL.c (InfoVarsCmd): checked for non-NULL procPtr to
+ prevent itcl info override crash [Bug: 4064]
* tests/foreach.test:
* tests/namespace.test:
@@ -1967,27 +1930,27 @@
2000-04-03 Eric Melski <ericm@scriptics.com>
- * unix/tclUnixFCmd.c (SetGroupAttribute):
- * unix/tclUnixFCmd.c (SetOwnerAttribute): Added (uid_t) and (gid_t)
+ * unix/tclUnixFCmd.c (SetGroupAttribute):
+ * unix/tclUnixFCmd.c (SetOwnerAttribute): Added (uid_t) and (gid_t)
casts to avoid compiler warnings.
2000-03-31 Eric Melski <ericm@scriptics.com>
* generic/tclGet.c (Tcl_GetDouble): Added additional conditions to
- error test (previously only errno was checked, but the return
- value of strtod() should be checked as well). [Bug: 4118].
+ error test (previously only errno was checked, but the return value of
+ strtod() should be checked as well). [Bug: 4118]
- * tests/exec.test: Added test for proper conversion of UTF data
- when used with "<< $dataWithUTF" on exec's.
+ * tests/exec.test: Added test for proper conversion of UTF data when
+ used with "<< $dataWithUTF" on exec's.
* unix/tclUnixPipe.c (TclpCreateTempFile): Added
- Tcl_UtfToExternalDString call, so that if there is UTF content in
- the string it will be properly converted to the system encoding
- before being written [Bug: 4030].
+ Tcl_UtfToExternalDString call, so that if there is UTF content in the
+ string it will be properly converted to the system encoding before
+ being written [Bug: 4030].
(TclpCreateTempFile): Added a check on the return value of tmpnam;
some systems (Linux, for example) will start to return NULL after
- tmpnam has been called TMP_MAX times; not checking for this can
- have bad results (overwriting temp files, core dumps, etc.)
+ tmpnam has been called TMP_MAX times; not checking for this can have
+ bad results (overwriting temp files, core dumps, etc.)
2000-03-30 Jeff Hobbs <hobbs@scriptics.com>
@@ -2000,8 +1963,8 @@
* win/tclWin32Dll.c: removed TclWinSynchSpawn (vestige of Win32s
support).
- * win/tclWinReg.c: made use of TclWinGetPlatformId instead of
- getting info again
+ * win/tclWinReg.c: made use of TclWinGetPlatformId instead of getting
+ info again
* win/tclWinPort.h:
* win/Makefile.in:
@@ -2019,16 +1982,15 @@
2000-03-29 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: Removed an unnecessary fileevent
- statement from the error processing part of the Write method.
- Also, fixed two potential memory leaks in wait and reset, in which
- the state array wasn't being unset before throwing an exception.
- Prior to this version, Brent checked in a fix to catch a
- fileevent statement that was sometimes causing a stack trace when
- geturl was called with -timeout. I believe Brent's fix is
- necessary because TLS closes bad sockets for secure connections,
- and the fileevent was trying to act on a socket that no longer
- existed.
+ * library/http2.1/http.tcl: Removed an unnecessary fileevent statement
+ from the error processing part of the Write method. Also, fixed two
+ potential memory leaks in wait and reset, in which the state array
+ wasn't being unset before throwing an exception. Prior to this
+ version, Brent checked in a fix to catch a fileevent statement that
+ was sometimes causing a stack trace when geturl was called with
+ -timeout. I believe Brent's fix is necessary because TLS closes bad
+ sockets for secure connections, and the fileevent was trying to act on
+ a socket that no longer existed.
2000-03-27 Jeff Hobbs <hobbs@scriptics.com>
@@ -2036,118 +1998,115 @@
* tests/namespace.test:
* generic/tclNamesp.c (Tcl_Export): added a uniq'ing test to the
- export list so only one instance of each export pattern would
- exist in the list.
+ export list so only one instance of each export pattern would exist in
+ the list.
- * generic/tclExecute.c (TclExecuteByteCode): optimized case for
- the empty string in ==/!= comparisons
+ * generic/tclExecute.c (TclExecuteByteCode): optimized case for the
+ empty string in ==/!= comparisons
2000-03-27 Eric Melski <ericm@scriptics.com>
- * unix/tclUnixChan.c: Added (off_t) type casts in lseek() call
- [Bug: 4409].
+ * unix/tclUnixChan.c: Added (off_t) type casts in lseek() call [Bug:
+ 4409].
- * unix/tclLoadAout.c:
- * unix/tclUnixPipe.c: Added (off_t) type casts in lseek() calls
- [Bug: 4410].
+ * unix/tclLoadAout.c:
+ * unix/tclUnixPipe.c: Added (off_t) type casts in lseek() calls [Bug:
+ 4410].
2000-03-22 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: Fixed a bug where string query data
- that was bigger than queryblocksize would get duplicate characters
- at block boundaries.
+ * library/http2.1/http.tcl: Fixed a bug where string query data that
+ was bigger than queryblocksize would get duplicate characters at block
+ boundaries.
2000-03-22 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: Fixed bug 4463, where we were getting
- a stack trace if we tried to publish a project to a good host but
- a port where there was no server listening. It turned out the
- problem was a stray fileevent that needed to be cleared. Also,
- fixed a bug where http::code could stack trace if called on a bad
- token (one which didn't represent a successful geturl) by adding
- an http element to the state array in geturl.
+ * library/http2.1/http.tcl: Fixed bug 4463, where we were getting a
+ stack trace if we tried to publish a project to a good host but a port
+ where there was no server listening. It turned out the problem was a
+ stray fileevent that needed to be cleared. Also, fixed a bug where
+ http::code could stack trace if called on a bad token (one which
+ didn't represent a successful geturl) by adding an http element to the
+ state array in geturl.
2000-03-21 Eric Melski <ericm@scriptics.com>
* tests/clock.test: Modified some tests that were not robust with
- respect to the time zone in which they were run and were thus
- failing.
+ respect to the time zone in which they were run and were thus failing.
- * doc/clock.n: Clarified meaning of -gmt with respect to -base
- when used with [clock scan] (-gmt does not affect the
- interpretation of -base).
+ * doc/clock.n: Clarified meaning of -gmt with respect to -base when
+ used with [clock scan] (-gmt does not affect the interpretation of
+ -base).
2000-03-19 Sandeep Tamhankar <sandeep@scriptics.com>
- * library/http2.1/http.tcl: geturl used to throw an exception when
- the connection failed; I accidentally returned a token with the
- error info, breaking backwards compatibility. I changed it back
- to throwing an exception, but unsetting the state array first
- (thus still eliminating the original memory leak problem).
+ * library/http2.1/http.tcl: geturl used to throw an exception when the
+ connection failed; I accidentally returned a token with the error
+ info, breaking backwards compatibility. I changed it back to throwing
+ an exception, but unsetting the state array first (thus still
+ eliminating the original memory leak problem).
2000-03-19 Sandeep Tamhankar <sandeep@scriptics.com>
* library/http2.1/http.tcl: Added -querychannel option and altered
some of Brent's modifications to allow asynchronous posts (via
- -command). Also modified -queryprogress so that it calls the
- query callback as <callback> <token> <total size> <current size>
- to be consistent with -progress. Added -queryblocksize option
- with default 8192 bytes for post blocksize. Fixed a bunch of
- potential memory leaks for the case when geturl receives bad args
- or can't open a socket, etc. Overall, the package really rocks
- now.
+ -command). Also modified -queryprogress so that it calls the query
+ callback as <callback> <token> <total size> <current size> to be
+ consistent with -progress. Added -queryblocksize option with default
+ 8192 bytes for post blocksize. Fixed a bunch of potential memory leaks
+ for the case when geturl receives bad args or can't open a socket,
+ etc. Overall, the package really rocks now.
* doc/http.n: Added -queryblocksize, -querychannel, and
- -queryprogress. Also, changed the description of -blocksize,
- which states that the -progress callback will be called for each
- block, to now qualify that with an "if -progress is specified".
+ -queryprogress. Also, changed the description of -blocksize, which
+ states that the -progress callback will be called for each block, to
+ now qualify that with an "if -progress is specified".
* tests/http.test: Added a querychannel test for synchronous and
asynchronous posts, altered the queryprogress test such that the
- callback conforms to the -progress format. Also, had to use the
- -queryblocksize option to do the post 16K at a time to match
- Brent's expected results (and to test that -queryblocksize works).
+ callback conforms to the -progress format. Also, had to use the
+ -queryblocksize option to do the post 16K at a time to match Brent's
+ expected results (and to test that -queryblocksize works).
2000-03-15 Brent Welch <welch@scriptics.com>
* library/http2.1/http.tcl: Added -queryprogress callback to
- http::geturl and also changed it so that writing the post data
- is event driven if the queryprogress callback or a timeout is given.
- This allows a timeout to occur when writing lots of post data.
- The queryprogress callback is called after each block of query
- data is posted. It has the same signature as the -progress callback.
+ http::geturl and also changed it so that writing the post data is
+ event driven if the queryprogress callback or a timeout is given.
+ This allows a timeout to occur when writing lots of post data. The
+ queryprogress callback is called after each block of query data is
+ posted. It has the same signature as the -progress callback.
2000-03-06 Eric Melski <ericm@scriptics.com>
* library/package.tcl: Applied patch from Bug: 2570; rather than
setting geometry of slave interp to 0x0 when Tk was loaded, it now
- does "wm withdraw .". Both remove the main window from the
- display, but the former caused some internal structures to get
- initialized to zero, which caused crashes with some extensions.
+ does "wm withdraw .". Both remove the main window from the display,
+ but the former caused some internal structures to get initialized to
+ zero, which caused crashes with some extensions.
2000-03-02 Jeff Hobbs <hobbs@scriptics.com>
- * library/package.tcl (tclPkgUnknown): extended to allow
- recognizes changes in the auto_path while sourcing in other
- pkgIndex.tcl files
+ * library/package.tcl (tclPkgUnknown): extended to allow recognizes
+ changes in the auto_path while sourcing in other pkgIndex.tcl files
* doc/FindExec.3: fixed doc for declaration of Tcl_FindExecutable
[Bug: 4275]
- * generic/tclFileName.c (Tcl_TranslateFileName): Applied patch
- from Newman to significantly speedup file split/join on Windows
- (replaces regexp with custom parser). [Bug: 2867]
+ * generic/tclFileName.c (Tcl_TranslateFileName): Applied patch from
+ Newman to significantly speedup file split/join on Windows (replaces
+ regexp with custom parser). [Bug: 2867]
- * win/README.binary: change mailing lists from @consortium.org
- to @scriptics.com [Bug: 4173]
+ * win/README.binary: change mailing lists from @consortium.org to
+ @scriptics.com [Bug: 4173]
2000-02-28 Eric Melski <ericm@scriptics.com>
* tests/clock.test: Added test for ISO bases < 100000
* generic/tclDate.c: (generated on Solaris)
- * generic/tclGetDate.y: Changed condition for deciding if a number
- is an ISO 8601 base from number >= 100000 to numberOfDigits >= 6.
+ * generic/tclGetDate.y: Changed condition for deciding if a number is
+ an ISO 8601 base from number >= 100000 to numberOfDigits >= 6.
Previously it would fail to recognize 000000 as an ISO base.
2000-02-14 Eric Melski <ericm@scriptics.com>
@@ -2166,42 +2125,41 @@
* doc/load.n: added notes about dll load errors on Windows
* unix/README:
- * unix/Makefile.in (dist): removed porting.notes and porting.old
- from distribution and CVS. The information was very outdated. Now
- refer to http://dev.scriptics.com/services/support/platforms.html
+ * unix/Makefile.in (dist): removed porting.notes and porting.old from
+ distribution and CVS. The information was very outdated. Now refer to
+ http://dev.scriptics.com/services/support/platforms.html
* tests/unixInit.test: fixed japanese LANG encoding test [Bug: 3549]
* unix/configure.in:
- * unix/tcl.m4: correct CFLAG_WARNING setting,
- fixed gcc config for AIX,
- added -export-dynamic to LDFLAGS for FreeBSD-3+ [Bug: 2998]
+ * unix/tcl.m4: correct CFLAG_WARNING setting, fixed gcc config for
+ AIX, added -export-dynamic to LDFLAGS for FreeBSD-3+ [Bug: 2998]
* win/tclWinLoad.c (TclpLoadFile): improved error message for load
failures, could perhaps be even more intelligent.
2000-02-09 Jim Ingham <jingham@cygnus.com>
- * mac/tclMacSock.c: Don't panic when you get an error closing an async
- socket. This doesn't seem to hurt anything, and we return the error so
+ * mac/tclMacSock.c: Don't panic when you get an error closing an async
+ socket. This doesn't seem to hurt anything, and we return the error so
the caller can do the right thing.
New Files:
* mac/MW_TclHeader.h:
* mac/MW_TclTestHeader.h:
* mac/MW_TclTestHeader.pch:
- * mac/MW_TclAppleScriptHeader.h: More convenient to use .h prefix files
- in the preference panels...
+ * mac/MW_TclAppleScriptHeader.h: More convenient to use .h prefix
+ files in the preference panels...
The above are curtesy of Daniel Steffen (steffen@math.mq.edu.au)
2000-02-08 Eric Melski <ericm@scriptics.com>
* tests/clock.test: Added tests for "next monthname" constructs.
- * generic/tclDate.c:
+ * generic/tclDate.c:
* generic/tclGetDate.y (Message): Added a grammar rule for "next
- monthname" so that we can handle "next january" and similar
- constructs (bug #4146).
+ monthname" so that we can handle "next january" and similar constructs
+ (bug #4146).
2000-02-08 Jeff Hobbs <hobbs@scriptics.com>
@@ -2228,35 +2186,35 @@
* tests/httpold.test: changed test script to source in the httpd
server procs from httpd instead of having its own set.
- * tests/httpd: improved query support in test httpd to handle fix
- in http.tcl. [Bug: 4089 change 2000-02-01]
+ * tests/httpd: improved query support in test httpd to handle fix in
+ http.tcl. [Bug: 4089 change 2000-02-01]
- * unix/README: fixed notes about --enable-shared and add note
- about --disable-shared.
+ * unix/README: fixed notes about --enable-shared and add note about
+ --disable-shared.
2000-02-07 Eric Melski <ericm@scriptics.com>
- * tests/package.test:
- * library/tclIndex:
+ * tests/package.test:
+ * library/tclIndex:
* library/package.tcl: Renamed ::package namespace to ::pkg.
2000-02-03 Eric Melski <ericm@scriptics.com>
* doc/Package.n:
- * doc/packagens.n: Renamed Package.n -> packagens.n because Windows
+ * doc/packagens.n: Renamed Package.n -> packagens.n because Windows
can't deal with case-sensitive names.
2000-02-02 Jeff Hobbs <hobbs@scriptics.com>
* tests/regexp.test: added tests for -all and -inline switches
* doc/regexp.n: added docs for -all and -inline switches
- * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): added extra comments for
- new -all and -inline switches to regexp command
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): added extra comments for new
+ -all and -inline switches to regexp command
2000-02-01 Eric Melski <ericm@scriptics.com>
- * library/init.tcl: Applied patch from rfe 1734 regarding
- auto_load errors not setting error message and errorInfo properly.
+ * library/init.tcl: Applied patch from rfe 1734 regarding auto_load
+ errors not setting error message and errorInfo properly.
2000-02-01 Jeff Hobbs <hobbs@scriptics.com>
@@ -2271,13 +2229,13 @@
2000-01-31 Eric Melski <ericm@scriptics.com>
- * tests/package.test:
- * library/tclIndex:
- * library/package.tcl: Added ::package namespace and
- ::package::create function.
+ * tests/package.test:
+ * library/tclIndex:
+ * library/package.tcl: Added ::package namespace and ::package::create
+ function.
- * library/init.tcl: Fixed problem with auto_load and determining
- if commands were loaded.
+ * library/init.tcl: Fixed problem with auto_load and determining if
+ commands were loaded.
* library/auto.tcl: "Fixed" issues with $ in files to be auto indexed.
@@ -2289,66 +2247,66 @@
2000-01-28 Eric Melski <ericm@scriptics.com>
- * tests/pkg/magicchar2.tcl:
+ * tests/pkg/magicchar2.tcl:
* tests/autoMkindex.test: Test for auto loader fix (bug #2480).
* library/init.tcl: auto_load was using [info commands $name] to
- determine if a given command was available; if the command name
- had * or [] it, this would fail because info commands uses
- glob-style matching. This is fixed. (Bug #2480).
+ determine if a given command was available; if the command name had *
+ or [] it, this would fail because info commands uses glob-style
+ matching. This is fixed. (Bug #2480).
- * tests/pkg/spacename.tcl:
+ * tests/pkg/spacename.tcl:
* tests/pkgMkIndex.test: Tests for fix for bug #2360.
- * library/package.tcl: Fixed to extract only the first element of
- the list returned by auto_qualify (bug #2360).
+ * library/package.tcl: Fixed to extract only the first element of the
+ list returned by auto_qualify (bug #2360).
- * tests/pkg/magicchar.tcl:
+ * tests/pkg/magicchar.tcl:
* tests/autoMkindex.test: Test for fix for bug #2611.
* library/auto.tcl: Fixed the regular expression that performs $
- escaping before sourcing a file to index. It was erroneously
- adding \ escapes even to $'s that were already escaped,
- effectively "un-escaping" those $'s. (bug #2611).
+ escaping before sourcing a file to index. It was erroneously adding \
+ escapes even to $'s that were already escaped, effectively
+ "un-escaping" those $'s. (bug #2611).
2000-01-27 Eric Melski <ericm@scriptics.com>
- * tests/autoMkindex.test:
- * library/auto.tcl: Applied patch (with slight modification) from
- bug #2701: auto_mkIndex uses platform dependent file paths.
- Added test for fix.
+ * tests/autoMkindex.test:
+ * library/auto.tcl: Applied patch (with slight modification) from bug
+ #2701: auto_mkIndex uses platform dependent file paths. Added test for
+ fix.
2000-01-27 Jennifer Hom <jenn@scriptics.com>
* library/tcltest1.0/tcltest.tcl: Changed NormalizePath to
- normalizePath and exported it as a public proc. This proc
- creates an absolute path given the name of the variable containing
- the path to modify. The path is modified in place.
+ normalizePath and exported it as a public proc. This proc creates an
+ absolute path given the name of the variable containing the path to
+ modify. The path is modified in place.
* library/tcltest1.0/pkgIndex.tcl: Added normalizePath.
* tests/all.tcl: Changed code to use normalizePath.
2000-01-27 Eric Melski <ericm@scriptics.com>
* tests/pkg/samename.tcl: test file for bug #1983
-
- * tests/pkgMkIndex.test:
- * doc/pkgMkIndex.n:
+
+ * tests/pkgMkIndex.test:
+ * doc/pkgMkIndex.n:
* library/package.tcl: Per rfe #4097, optimized creation of direct
- load packages to bypass computing the list of commands added by
- the new package. Also made direct loading the default, and added
- a -lazy option.
+ load packages to bypass computing the list of commands added by the
+ new package. Also made direct loading the default, and added a -lazy
+ option.
Fixed bug #1983, dealing with pkg_mkIndex incorrectly handling
- situations with two procs by the same name but in different
- namespaces (ie, foo::baz and bar::baz).
+ situations with two procs by the same name but in different namespaces
+ (ie, foo::baz and bar::baz).
2000-01-26 Eric Melski <ericm@scriptics.com>
* generic/tclNamesp.c: Undid fix for #956, which broke backwards
compatibility.
- * doc/variable.n:
- * doc/trace.n:
- * doc/namespace.n:
+ * doc/variable.n:
+ * doc/trace.n:
+ * doc/namespace.n:
* doc/info.n: Added further information about differences between
"namespace which" and "info exists".
@@ -2357,18 +2315,18 @@
2000-01-25 Jeff Hobbs <hobbs@scriptics.com>
- * unix/tcl.m4: modified EXTRA_CFLAGS to add -DHAVE_TZSET for
- OSF1-V* and ULTRIX-4.* when not using gcc. Also added higher min
- stack size for OSF1-V* when building with threads. [Bug: 4063]
+ * unix/tcl.m4: modified EXTRA_CFLAGS to add -DHAVE_TZSET for OSF1-V*
+ and ULTRIX-4.* when not using gcc. Also added higher min stack size
+ for OSF1-V* when building with threads. [Bug: 4063]
* generic/tclClock.c (FormatClock): inlined resultPtr, as it
conflicted with var creation for HAVE_TZSET #def [Bug: 4063]
- * generic/tclCmdIL.c (Tcl_LsortObjCmd): fixed potential leak
- when calling lsort -command with bad command [Bug: 4067]
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): fixed potential leak when
+ calling lsort -command with bad command [Bug: 4067]
- * generic/tclFileName.c (Tcl_JoinPath): added support for special
- QNX node id prefixes in pathnames [Bug: 4053]
+ * generic/tclFileName.c (Tcl_JoinPath): added support for special QNX
+ node id prefixes in pathnames [Bug: 4053]
* doc/ListObj.3: clarified Tcl_ListObjGetElements docs [Bug: 4080]
@@ -2378,18 +2336,18 @@
2000-01-23 Jeff Hobbs <hobbs@scriptics.com>
- * library/init.tcl (auto_execok): added 'start' to list of
- recognized built-in commands for COMSPEC on NT. [Bug: 2858]
+ * library/init.tcl (auto_execok): added 'start' to list of recognized
+ built-in commands for COMSPEC on NT. [Bug: 2858]
* unix/tclUnixPort.h: moved include of <utime.h> lower since some
systems (UTS) require sys/types.h to be included first [Bug: 4031]
- * unix/tclUnixChan.c (CreateSocketAddress): changed comparison
- with -1 to 0xFFFFFFFF, to ensure 32 bit comparison even on 64 bit
- systems. [Bug: 3878]
+ * unix/tclUnixChan.c (CreateSocketAddress): changed comparison with -1
+ to 0xFFFFFFFF, to ensure 32 bit comparison even on 64 bit systems.
+ [Bug: 3878]
- * generic/tclFileName.c: improved guessing of path separator
- for the Mac. (Darley)
+ * generic/tclFileName.c: improved guessing of path separator for the
+ Mac. (Darley)
* generic/tclInt.h:
* generic/tcl.decls: moved Tcl_ProcObjCmd to stubs table [Bug: 3827]
@@ -2398,7 +2356,7 @@
2000-01-21 Eric Melski <ericm@scriptics.com>
- * unix/mkLinks:
+ * unix/mkLinks:
* doc/GetHostName.3: Man page for Tcl_GetHostName (bug #1817).
* doc/lreplace.n: Corrected man page with respect to treatment of
@@ -2412,24 +2370,24 @@
* generic/tclNamesp.c: Added check for undefined variables in
NamespaceWhichCmd (bug #956).
- * tests/var.test: Added tests for corrected variable behavior
- (bug #981).
+ * tests/var.test: Added tests for corrected variable behavior (bug
+ #981).
* doc/upvar.n: Expanded explanation of upvar behavior with respect to
- variable traces. (bugs 3917 1433 2110).
+ variable traces. (bugs 3917 1433 2110).
* generic/tclVar.c: Changed behavior of variable command when name
refers to an element in an array (ie, "variable foo(x)") to always
- return an error, regardless of existance of that element in the
- array (now behavior is consistant with docs too) (bug #981).
+ return an error, regardless of existance of that element in the array
+ (now behavior is consistant with docs too) (bug #981).
2000-01-20 Jeff Hobbs <hobbs@scriptics.com>
- * generic/tclCmdIL.c (InfoBodyCmd): made [info body] return a
- string if the body has been bytecompiled.
+ * generic/tclCmdIL.c (InfoBodyCmd): made [info body] return a string
+ if the body has been bytecompiled.
* generic/tclBasic.c (Tcl_EvalObjEx): added pedantic check for
- originating proc body of bytecompiled code, #def'd out as the
- change for [info body] should make it unnecessary
+ originating proc body of bytecompiled code, #def'd out as the change
+ for [info body] should make it unnecessary
* unix/tclUnixNotfy.c (Tcl_InitNotifier): added cast for tsdPtr
@@ -2442,20 +2400,19 @@
* doc/vwait.n: added notes about requirement for vwait var being
globally scoped [Bug: 3329]
- * library/word.tcl: changed tcl_(non)wordchars settings to use
- new unicode regexp char class escapes instead of char sequences
+ * library/word.tcl: changed tcl_(non)wordchars settings to use new
+ unicode regexp char class escapes instead of char sequences
2000-01-14 Eric Melski <ericm@scriptics.com>
* tests/var.test: Added a test for the array multiple delete
protection in Tcl_UnsetVar2.
- * generic/tclVar.c: Added protection in Tcl_UnsetVar2 against
- attempts to multiply delete arrays when unsetting them (bug
- #3453). This could happen if there was an unset trace on an array
- element and the trace proc made a global or upvar link to the
- array, and then the array was unset at the global level. See the
- bug reference for more information.
+ * generic/tclVar.c: Added protection in Tcl_UnsetVar2 against attempts
+ to multiply delete arrays when unsetting them (bug #3453). This could
+ happen if there was an unset trace on an array element and the trace
+ proc made a global or upvar link to the array, and then the array was
+ unset at the global level. See the bug reference for more information.
* unix/tclUnixTime.c: New clock format format.
@@ -2480,14 +2437,14 @@
2000-01-13 Eric Melski <ericm@scriptics.com>
- * tests/cmdIL.test: Added tests for lsort -dictionary with
- characters that occur between Z and a in ASCII.
+ * tests/cmdIL.test: Added tests for lsort -dictionary with characters
+ that occur between Z and a in ASCII.
* generic/tclCmdIL.c: Modified DictionaryCompare function (used by
lsort -dictionary) to do upper/lower case equivalency before doing
- character comparisons, instead of after. This fixes bug #1357, in
- which lsort -dictionary [list ` AA c CC] and lsort -dictionary
- [list AA c ` CC] gave different (and both wrong) results.
+ character comparisons, instead of after. This fixes bug #1357, in
+ which lsort -dictionary [list ` AA c CC] and lsort -dictionary [list
+ AA c ` CC] gave different (and both wrong) results.
2000-01-12 Eric Melski <ericm@scriptics.com>
@@ -2497,23 +2454,22 @@
* doc/tests/clock.test: Added numerous tests for clock scan.
- * doc/generic/tclGetDate.y: Fixed some shift/reduce conflicts in
- clock grammar.
+ * doc/generic/tclGetDate.y: Fixed some shift/reduce conflicts in clock
+ grammar.
- * doc/doc/clock.n: Added documentation for new supported clock
- scan formats and additional explanation of daylight savings time
- correction algorithm.
+ * doc/doc/clock.n: Added documentation for new supported clock scan
+ formats and additional explanation of daylight savings time correction
+ algorithm.
2000-01-12 Jeff Hobbs <hobbs@scriptics.com>
* doc/file.n:
* tests/unixFCmd.test:
- * unix/tclUnixFCmd.c: added support for symbolic permissions
- setting in SetPermissionsAttribute (file attr $file -perm ...)
- [Bug: 3970]
+ * unix/tclUnixFCmd.c: added support for symbolic permissions setting
+ in SetPermissionsAttribute (file attr $file -perm ...) [Bug: 3970]
- * generic/tclClock.c: fixed support for 64bit handling of clock
- values [Bug: 1806]
+ * generic/tclClock.c: fixed support for 64bit handling of clock values
+ [Bug: 1806]
* generic/tclThreadTest.c: upped a buffer size to hold double
@@ -2526,20 +2482,20 @@
* tests/expr.test:
* unix/Makefile.in:
* unix/configure.in:
- * unix/tcl.m4: recognize strtod bug on Tru64 v5.0 [Bug: 3378]
- and added tests to prevent unnecessary chmod +x in sources while
+ * unix/tcl.m4: recognize strtod bug on Tru64 v5.0 [Bug: 3378] and
+ added tests to prevent unnecessary chmod +x in sources while
installing, as well as more intelligent setsockopt/gethostbyname
checks [Bug: 3366, 3389]
- * unix/tclUnixThrd.c: added compile time support (through use of
- the TCL_THREAD_STACK_MIN define) for increasing the default stack
- size for a thread. [Bug: 3797, 1966]
+ * unix/tclUnixThrd.c: added compile time support (through use of the
+ TCL_THREAD_STACK_MIN define) for increasing the default stack size for
+ a thread. [Bug: 3797, 1966]
2000-01-11 Eric Melski <ericm@scriptics.com>
- * generic/tclGetDate.y: Added comments for the Convert function.
- Added a fix for daylight savings time handling for relative time
- spans of days, weeks or fortnights. (bug 3441, 3868).
+ * generic/tclGetDate.y: Added comments for the Convert function. Added
+ a fix for daylight savings time handling for relative time spans of
+ days, weeks or fortnights. (bug 3441, 3868).
* generic/tclDate.c: Fixed compiler warning issues.
@@ -2548,8 +2504,8 @@
* compat/waitpid.c: use pid_t type instead of int [Bug: 3999]
* tests/utf.test: fixed test that allowed \8 as octal value
- * generic/tclUtf.c: changed Tcl_UtfBackslash to not allow
- non-octal digits (8,9) in \ooo substs. [Bug: 3975]
+ * generic/tclUtf.c: changed Tcl_UtfBackslash to not allow non-octal
+ digits (8,9) in \ooo substs. [Bug: 3975]
* generic/tcl.h: noted need to change win/tcl.m4 and
tools/tclSplash.bmp for minor version changes
@@ -2579,5 +2535,5 @@
2000-01-07 Eric Melski <ericm@scriptics.com>
* generic/tclClock.c: Changed switch in Tcl_ClockObjCmd to use
- enumerated values instead of constants. (ie, COMMAND_SCAN instead
- of 3).
+ enumerated values instead of constants. (ie, COMMAND_SCAN instead of
+ 3).
diff --git a/ChangeLog.2001 b/ChangeLog.2001
index 2c8b4d7..06e7c36 100644
--- a/ChangeLog.2001
+++ b/ChangeLog.2001
@@ -1,20 +1,20 @@
2001-12-28 Jeff Hobbs <jeffh@ActiveState.com>
- * library/init.tcl: make sure env(COMSPEC) on Windows is executed
- with the right case, as it may otherwise fail inexplicably.
+ * library/init.tcl: make sure env(COMSPEC) on Windows is executed with
+ the right case, as it may otherwise fail inexplicably.
2001-12-28 Don Porter <dgp@users.sourceforge.net>
- * generic/tclCkalloc.c (MemoryCmd, TclFinalizeMemorySubsystem):
- Added the [memory onexit] command, intended to replace [checkmem].
+ * generic/tclCkalloc.c (MemoryCmd, TclFinalizeMemorySubsystem): Added
+ the [memory onexit] command, intended to replace [checkmem].
- * doc/DumpActiveMemory.3:
+ * doc/DumpActiveMemory.3:
* doc/memory.n: Updated documentation for [memory] and related
- matters. [Bug 487677]
+ matters. [Bug 487677]
* mac/tclMacBOAMain.c (Tcl_Main, CheckmemCmd): Removed all the
- machinery for the [checkmem] command that is completely duplicated
- by code in generic/tclCkalloc.c.
+ machinery for the [checkmem] command that is completely duplicated by
+ code in generic/tclCkalloc.c.
* generic/tclBinary.c:
* generic/tclListObj.c:
@@ -27,12 +27,11 @@
* mac/tclMacInit.c:
* mac/tclMacTclCode.r: synced up tclInit features to unix/win:
- implemented TclSetPreInitScript support, use of existing tclInit
- proc if defined, check of default encoding dir if set. Changed
- script library resource names to lowercase (i.e. same as
- corresponding files). Used Tcl_JoinPath instead of string append.
- Check that system encoding could be loaded before utf translating
- the LibraryPath.
+ implemented TclSetPreInitScript support, use of existing tclInit proc
+ if defined, check of default encoding dir if set. Changed script
+ library resource names to lowercase (i.e. same as corresponding
+ files). Used Tcl_JoinPath instead of string append. Check that system
+ encoding could be loaded before utf translating the LibraryPath.
* mac/tclMacApplication.r:
* mac/tclMacLibrary.r:
* mac/tclMacOSA.r:
@@ -41,147 +40,138 @@
2001-12-21 Mo DeJong <mdejong@users.sourceforge.net>
* unix/tcl.m4 (SC_PATH_TCLCONFIG, SC_PATH_TKCONFIG):
- Search for config file using exec_prefix instead of
- prefix when no --with-tcl or --with-tk argument is used. [Bug 492418]
+ Search for config file using exec_prefix instead of prefix when no
+ --with-tcl or --with-tk argument is used. [Bug 492418]
2001-12-21 Daniel Steffen <das@users.sourceforge.net>
- * unix/tcl.m4: fixed incorrect SHLIB_LD_LIBS
- setting for MacOSX / Darwin.
+ * unix/tcl.m4: fixed incorrect SHLIB_LD_LIBS setting for MacOSX /
+ Darwin.
* unix/configure: Regen.
- * unix/mkLinks.tcl: improved case-insensitive
- filesystem support.
+ * unix/mkLinks.tcl: improved case-insensitive filesystem support.
* unix/mkLinks: Regen.
2001-12-19 Don Porter <dgp@users.sourceforge.net>
- * unix/Makefile.in (dist): corrected use of eolFix.tcl on
- working files. It should operate on distributed files. [Bug 495120]
+ * unix/Makefile.in (dist): corrected use of eolFix.tcl on working
+ files. It should operate on distributed files. [Bug 495120]
2001-12-19 David Gravereaux <davygrvy@pobox.com>
- * tools/tcl.wse.in: Fix for #495120. tcl.wse.in was
- stored in cvs with improper <eol>. This resulted in
- corrupted <eol> when checked-out on translating CVS
- clients such as windows (CRCRLF) and mac (CRCR).
+ * tools/tcl.wse.in: Fix for [Bug 495120]. tcl.wse.in was stored in cvs
+ with improper <eol>. This resulted in corrupted <eol> when checked-out
+ on translating CVS clients such as windows (CRCRLF) and mac (CRCR).
2001-12-19 Mo DeJong <mdejong@users.sourceforge.net>
* unix/configure:
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Update
- SunOS 5.[0-6] target so that correct linker
- options are passed to gcc or ld. [Tk Bug 220863]
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Update SunOS 5.[0-6] target so that
+ correct linker options are passed to gcc or ld. [Tk Bug 220863]
2001-12-19 Mo DeJong <mdejong@users.sourceforge.net>
- * unix/README: Update to account for changes
- in the unix/dltest directory, the way autoconf
- is run, and the new "make shell" target.
+ * unix/README: Update to account for changes in the unix/dltest
+ directory, the way autoconf is run, and the new "make shell" target.
2001-12-19 Mo DeJong <mdejong@users.sourceforge.net>
- * unix/Makefile.in: Rename dltest to dlpkgs to
- fix problem where lib files were not getting
- built because dltest/ directory already existed.
+ * unix/Makefile.in: Rename dltest to dlpkgs to fix problem where lib
+ files were not getting built because dltest/ directory already
+ existed.
2001-12-19 Jeff Hobbs <jeffh@ActiveState.com>
- * win/tclWinSerial.c (SerialCheckProc): corrected time
- calculations to be unsigned. (schroedter)
+ * win/tclWinSerial.c (SerialCheckProc): corrected time calculations to
+ be unsigned. (schroedter)
2001-12-18 Mo DeJong <mdejong@users.sourceforge.net>
- * unix/Makefile.in: Define new dltest target that
- simply does a cd to dltest/ before running make.
- There is no need for the separate configure
- script that was previously being used.
+ * unix/Makefile.in: Define new dltest target that simply does a cd to
+ dltest/ before running make. There is no need for the separate
+ configure script that was previously being used.
* unix/configure: Regen.
* unix/configure.in: Subst into dltest/Makefile.
- * unix/dltest/Makefile.in: Define LIBS using
- DL_LIBS, LIBS, and MATH_LIBS variables instead
- of TCL_LIBS variable from tclConfig.sh.
- * unix/dltest/README: Update readme to account for new
- configure free implementation.
+ * unix/dltest/Makefile.in: Define LIBS using DL_LIBS, LIBS, and
+ MATH_LIBS variables instead of TCL_LIBS variable from tclConfig.sh.
+ * unix/dltest/README: Update readme to account for new configure free
+ implementation.
* unix/dltest/configure: Removed.
* unix/dltest/configure.in: Removed.
2001-12-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tcl.h (TCL_STUB_MAGIC): Added cast to force type to be
- an int and get rid of a persistent and pointless warning with
- SunPro compiler.
+ * generic/tcl.h (TCL_STUB_MAGIC): Added cast to force type to be an
+ int and get rid of a persistent and pointless warning with SunPro
+ compiler.
- * generic/tclCkalloc.c (Tcl_AttemptDbCkalloc,Tcl_AttemptDbCkrealloc):
+ * generic/tclCkalloc.c (Tcl_AttemptDbCkalloc,Tcl_AttemptDbCkrealloc):
* generic/tcl.decls (Tcl_AttemptDbCkalloc,Tcl_AttemptDbCkrealloc):
- Made the file parameters to these functions into CONST char *,
- like they always should have been to match the other Tcl*Db* API
- functions.
+ Made the file parameters to these functions into CONST char *, like
+ they always should have been to match the other Tcl*Db* API functions.
-2001-12-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-12-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * Applied #219311 on behalf of Rolf Schroedter
- <schroedter@users.sourceforge.net> to prevent fcopy on serial
- ports from flooding the event queue.
+ * Applied [Bug 219311] on behalf of Rolf Schroedter
+ <schroedter@users.sourceforge.net> to prevent fcopy on serial ports
+ from flooding the event queue.
2001-12-11 Miguel Sofer <msofer@users.sourceforge.net>
* doc/CrtInterp.3:
- * generic/tclBasic.c: docs and comments corrections [Bug 493412]
- Bug & patch by Don Porter.
+ * generic/tclBasic.c: docs and comments corrections. [Bug 493412]
+ Bug & patch by Don Porter.
2001-12-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * win/tclWinNotify.c (Tcl_FinalizeNotifier): Stop Tcl on Windows
- from crashing when shutdown from a non-Tcl thread. Fixes Bug
- #217982 [orig. 5804] reported by Hugh Vu and Gene Leache. I'm
- not convinced that the shutdown process is right even with this,
- but it was definitely wrong without...
+ * win/tclWinNotify.c (Tcl_FinalizeNotifier): Stop Tcl on Windows from
+ crashing when shutdown from a non-Tcl thread. Fixes [Bug 217982]
+ [orig. 5804] reported by Hugh Vu and Gene Leache. I'm not convinced
+ that the shutdown process is right even with this, but it was
+ definitely wrong without...
-2001-12-13 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-12-13 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * win/tclWinSock.c (TcpGetOptionProc): Fix for tcl bug item
- #478565 reported by an unknown person. Bypasses all calls to
- "gethostbyaddr" for address "0.0.0.0" to prevent delays on
- Win/NT.
+ * win/tclWinSock.c (TcpGetOptionProc): Fix for [Bug 478565] reported
+ by an unknown person. Bypasses all calls to "gethostbyaddr" for
+ address "0.0.0.0" to prevent delays on Win/NT.
2001-12-12 Jeff Hobbs <jeffh@ActiveState.com>
- * doc/Preserve.3: doc'd TCL_DYNAMIC use. [Patch #483989] (porter)
+ * doc/Preserve.3: doc'd TCL_DYNAMIC use. [Patch 483989] (porter)
-2001-12-12 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-12-12 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclIO.c (Tcl_GetsObj): Applied patch for bug #491341 as
- provided by Don Porter <dgp@users.sourceforge.net>. Fixes the
- assumption of having an empty Tcl_Obj to work with.
+ * generic/tclIO.c (Tcl_GetsObj): Applied patch for [Bug 491341] as
+ provided by Don Porter <dgp@users.sourceforge.net>. Fixes the
+ assumption of having an empty Tcl_Obj to work with.
2001-12-11 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclCompCmds.c:
* generic/tclCompile.c:
- * generic/tclExecute.c: consistency patch, to make all
- instructions that pop a variable number of Tcl_Obj's off the
- execution stack take the number of popped objects as first
- operand. Modified *only* the new instructions
- INST_LIST_INDEX_MULTI and INST_LSET_FLAT, so this has no effect
- on bytecodes generated up to tcl8.4a3 inclusive.
+ * generic/tclExecute.c: consistency patch, to make all instructions
+ that pop a variable number of Tcl_Obj's off the execution stack take
+ the number of popped objects as first operand. Modified *only* the new
+ instructions INST_LIST_INDEX_MULTI and INST_LSET_FLAT, so this has no
+ effect on bytecodes generated up to tcl8.4a3 inclusive.
- * generic/tclExecute.c: fix debug messages in INST_LSET_LIST.
+ * generic/tclExecute.c: fix debug messages in INST_LSET_LIST.
* generic/tclCompCmds.c (TclCompileLindexCmd):
- * generic/tclCompExpr.c (CompileMathFuncCall): removed the last
- two overestimates of the necessary stack depth for bytecodes in
- the fix of [Bug 483611].
+ * generic/tclCompExpr.c (CompileMathFuncCall): removed the last two
+ overestimates of the necessary stack depth for bytecodes in the fix of
+ [Bug 483611]
-2001-12-10 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-12-10 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * unix/tclUnixPipe.c (TclpCreateProcess): Applied Don Porter's
- patch fixing bug #437489.
+ * unix/tclUnixPipe.c (TclpCreateProcess): Applied Don Porter's patch
+ fixing [Bug 437489].
2001-12-10 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclEvent.c:
- * tests/event.test: fix background error reporting in the absence
- of a bgerror proc [Bug 219142].
+ * tests/event.test: fix background error reporting in the absence of a
+ bgerror proc [Bug 219142].
2001-12-10 Don Porter <dgp@users.sourceforge.net>
@@ -198,7 +188,7 @@
* doc/Utf.3:
* doc/file.n:
* doc/tclsh.1: Several typo and formatting corrections discovered
- during conversion to TMML. Thanks to Joe English. [Patch 490514]
+ during conversion to TMML. Thanks to Joe English. [Patch 490514]
* unix/mkLinks: 'make mklinks'
2001-12-10 Miguel Sofer <msofer@users.sourceforge.net>
@@ -208,14 +198,14 @@
* generic/tclCompile.c:
* generic/tclCompile.h:
* generic/tclExecute.c:
- * generic/tclProc.c: fixed the calculation of the maximal stack
- depth required by bytecodes [Bug 483611].
+ * generic/tclProc.c: fixed the calculation of the maximal stack depth
+ required by bytecodes. [Bug 483611]
2001-12-07 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclVar.c:
+ * generic/tclVar.c:
* tests/trace.test: restored consistency in refCount accounting by
- array traces [Bug #4484339], submitted by Don Porter.
+ array traces [Bug 4484339], submitted by Don Porter.
2001-12-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
@@ -225,19 +215,19 @@
* generic/tclParseExpr.c (ParsePrimaryExpr): Rewrote to give even
better syntax errors in the fairly common case of an identifier
without decorations by guessing based on the currently available
- functions. Also made messages consistent between memdebug and
- ordinary builds.
+ functions. Also made messages consistent between memdebug and ordinary
+ builds.
2001-12-05 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclVar.c:
- * tests/trace.test: new algorithm for [array get], safe when there
- are traces that modify the array [Bug #449893].
+ * generic/tclVar.c:
+ * tests/trace.test: new algorithm for [array get], safe when there are
+ traces that modify the array. [Bug 449893]
2001-12-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/compExpr-old.test, tests/compExpr.test, tests/compile.test:
- * tests/expr-old.test, tests/expr.test, tests/for.test:
+ * tests/compExpr-old.test, tests/compExpr.test, tests/compile.test:
+ * tests/expr-old.test, tests/expr.test, tests/for.test:
* tests/while.test, tests/if.test: Rewrite to handle more specific
syntax errors.
* tests/parseExpr.test: Rewrite to get rid of dup test numbers and
@@ -246,26 +236,25 @@
argument to help explain what the syntax error is.
(Tcl_ParseExpr, ParseCondExpr, ParsePrimaryExpr): Added detail
messages.
- (UNKNOWN_CHAR): New lexeme for characters that are always illegal
- in expressions outside strings.
+ (UNKNOWN_CHAR): New lexeme for characters that are always illegal in
+ expressions outside strings.
2001-12-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/expr.n: Various documentation improvements in relation to
- the function calls. Includes fix for Bug #487704 submitted by
- Devin Eyre.
+ * doc/expr.n: Various documentation improvements in relation to the
+ function calls. Includes fix for [Bug 487704] submitted by Devin Eyre.
2001-12-03 David Gravereaux <davygrvy@pobox.com>
* win/makefile.vc: Some install target bugs repaired along with
$(TCLSTUBLIB) added to the dependencies rather than implicit through
- the dde and reg extensions which don't happen to always require it
- for some build types.
+ the dde and reg extensions which don't happen to always require it for
+ some build types.
2001-11-30 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclVar.c: Tcl_Preserve'ing VarTrace structures to avoid
- memory corruption. Patch for [Bug: 484334] provided by Don Porter
+ * generic/tclVar.c: Tcl_Preserve'ing VarTrace structures to avoid
+ memory corruption. Patch for [Bug 484334] provided by Don Porter
2001-11-29 Miguel Sofer <msofer@users.sourceforge.net>
@@ -275,16 +264,15 @@
2001-11-29 Miguel Sofer <msofer@users.sourceforge.net>
* tests/namespace.test: added namespace-41.2, a simpler test for
- [Bug: 231259]
+ [Bug 231259]
2001-11-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclBinary.c (BINARY_SCAN_MAX_CACHE, Tcl_BinaryObjCmd,
- ScanNumber): Added caching scheme to reduce number of object
- allocations when doing scans of large repetitive binary strings.
- See comments in file for reasoning behind implementation.
- Suggested by Miguel Sofer in Patch #429916, but independently
- implemented.
+ (ScanNumber): Added caching scheme to reduce number of object
+ allocations when doing scans of large repetitive binary strings. See
+ comments in file for reasoning behind implementation. Suggested by
+ Miguel Sofer in [Patch 429916], but independently implemented.
2001-11-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
@@ -293,8 +281,8 @@
2001-11-27 D. Richard Hipp <drh@hwaci.com>
- * win/tclWinFCmd.c: Fix a coredump in the filename normalizer
- code for Win95/98.
+ * win/tclWinFCmd.c: Fix a coredump in the filename normalizer code for
+ Win95/98.
2001-11-27 David Gravereaux <davygrvy@pobox.com>
@@ -305,37 +293,36 @@
2001-11-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/cmdAH.test (cmdAH-24.2): Made test less sensitive to OS
- preemption, but perfection isn't practical [Bug 463189, reported
- by Don Porter.]
+ preemption, but perfection isn't practical. [Bug 463189, reported by
+ Don Porter]
- * tests/switch.test (switch-9.*): Added tests to exercise more of
- the argument checking. (switch-7.2,switch-7.3): Test changed
- behaviour slightly.
- * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Reworked argument parsing
- to be stricter about what it accepts. This should make uses of
- the [switch] command be more maintainable. [Bug 475397, reported
- by Don Porter.]
+ * tests/switch.test (switch-9.*): Added tests to exercise more of the
+ argument checking. (switch-7.2,switch-7.3): Test changed behaviour
+ slightly.
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Reworked argument parsing to
+ be stricter about what it accepts. This should make uses of the
+ [switch] command be more maintainable. [Bug 475397, reported by Don
+ Porter]
2001-11-26 Don Porter <dgp@users.sourceforge.net>
- * generic/tclIntPlatDecls.h: 'make genstubs' after changes
- in 2001-11-23 commit from Daniel Steffen.
+ * generic/tclIntPlatDecls.h: 'make genstubs' after changes in
+ 2001-11-23 commit from Daniel Steffen.
2001-11-24 Mo DeJong <mdejong@users.sourceforge.net>
- * unix/Makefile.in: Add comments to better describe
- TCL_EXE and when it should be available.
- * win/Makefile.in: Add TCL_EXE variable to be used
- by rules like `make genstubs`. Don't set TCL_LIBRARY
- before running `make genstubs` since we will be running
- with a tclsh from the PATH not the one we build.
+ * unix/Makefile.in: Add comments to better describe TCL_EXE and when
+ it should be available.
+ * win/Makefile.in: Add TCL_EXE variable to be used by rules like `make
+ genstubs`. Don't set TCL_LIBRARY before running `make genstubs` since
+ we will be running with a tclsh from the PATH not the one we build.
2001-11-24 Mo DeJong <mdejong@users.sourceforge.net>
* win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Add comctl32.lib
- to wish link libs. This change was originally added
- to Tk on 2001-11-09 but was not committed to Tcl.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Add comctl32.lib to wish link libs.
+ This change was originally added to Tk on 2001-11-09 but was not
+ committed to Tcl.
2001-11-23 Daniel Steffen <das@users.sourceforge.net>
@@ -346,17 +333,17 @@
* unix/mkLinks.tcl:
* unix/tclLoadDyld.c:
* unix/tclMtherr.c: Mac OSX support: build system, dynamic code loading
- and support for case-insensitive filesystems in mkLinks (patch #435258)
+ and support for case-insensitive filesystems in mkLinks. [Patch 435258]
2001-11-23 Daniel Steffen <das@users.sourceforge.net>
- Up-port to 8.4 of mac code changes for 8.3.3 & various new
- changes for 8.4, some already backported to 8.3.4 (patch #435658)
+ Up-port to 8.4 of mac code changes for 8.3.3 & various new changes for
+ 8.4, some already backported to 8.3.4. [Patch 435658]
* generic/tclObj.c: added #include to fix missing prototype errors
* generic/tcl.h: MAC_TCL: addition of ConditionalMacros.h and use of
- DLLIMPORT and DLLEXPORT like on other platforms. ( => no longer need
+ DLLIMPORT and DLLEXPORT like on other platforms. ( => no longer need
the .exp files and can remove use of #pragma export that never worked
well)
removed line continuation in #if clause as this breaks the mac
@@ -364,10 +351,10 @@
* mac/tclMacFile.c: fixed bug in permission checking code
- * mac/tclMacLoad.c: corrected utf8 handling, comparison of
- package names to code fragment names changed to only match on the
- length of package name, this allows for fragment names with version
- numbers appended
+ * mac/tclMacLoad.c: corrected utf8 handling, comparison of package
+ names to code fragment names changed to only match on the length of
+ package name, this allows for fragment names with version numbers
+ appended.
* mac/tclMacInt.h:
* generic/tclInt.h:
@@ -402,7 +389,7 @@
platforms, removed use of #pragma export.
* mac/tcltkMacBuildSupport.sea.hqx: new archive of mac build support
- files & suggested build environment directory hierarchy:
+ files & suggested build environment directory hierarchy:
'Building MacTclTk' & 'CW Pro6 changes' readme's.
projects for MoreFiles 1.5.2 static & shared libraries.
project & sources for 'pseudoCarbonSupport', see below.
@@ -430,13 +417,13 @@
Highly experimental "pseudoCarbon" support for Tcl only on OS 8/9:
binaries in "Build:(Carbon):" link against CarbonLib instead of
InterfaceLib, however the actual code has not been carbonized! i.e. it
- will not run on OSX and may not even run properly with CarbonLib.
+ will not run on OSX and may not even run properly with CarbonLib.
This should in principle allow you to build & test OS9 CFM Carbon
- binaries that need to link with Tcl.shlb. On OSX you can use the
+ binaries that need to link with Tcl.shlb. On OSX you can use the
native Tcl.framework, but you have to build a MachO binary as there
is no CFM glue lib for Tcl.framework.
- the library pseudoCarbonSupport.shlb manually loads the symbols
- from InterfaceLib that are not in CarbonLib but are needed by the
+ the library pseudoCarbonSupport.shlb manually loads the symbols from
+ InterfaceLib that are not in CarbonLib but are needed by the
uncarbonized code in Tcl.shlb and TclShell.
* generic/tclMain.c: MAC_TCL: workaround for broken/non-standard isatty
@@ -461,10 +448,10 @@
strings; updated version strings to standard usage; added support for
'(Support Libraries)' subfolder for shared runtime libraries in
unmerged binaries; commented out demo setting of "Tcl Environment
- Variables"; reorganized resources among these files to avoid
- multiple copies in applications and shared libraries, the script
- libraries are now no longer duplicated in Tclsh but are only included
- in the resources of Tcl.shlb.
+ Variables"; reorganized resources among these files to avoid multiple
+ copies in applications and shared libraries, the script libraries are
+ now no longer duplicated in Tclsh but are only included in the
+ resources of Tcl.shlb.
* mac/tclMacChan.c:
* mac/tclMacSock.c: cast for *BlockMode
@@ -497,52 +484,51 @@
* mac/tclMacUnix.c: added missing (Tcl_Obj ***) cast to
Tcl_ListObjGetElements call
- * mac/tclMacAlloc.c: modernized TclpSysAlloc() to use temporary
- memory instead of system heap memory when available (MacOS
- >= 7.5 and possibly earlier, use of system heap has been
- discouraged for a long time and has many disadvantages, e.g. memory
- isn't paged out, and errors can very easily bring the system down);
- fixed crashing bug in TclpSysRealloc() and CleanUpExitProc() where
- memory was being accessed after having been deallocated; fixed
- memory leak in (de)allocation code (for every block ever allocated
- with TclpSysAlloc, a Ptr was leaked), if temporary memory is
- available, don't track allocated memory, instead use
- RecoverHandle() to get Handle from Ptr, otherwise use doubly linked
- list to correctly track memory and free all allocated memory; added
- new option for ConfigureMemory: MEMORY_DONT_USE_TEMPMEM, disables
- use of temporary memory even when it would be available, only
- necessary when writing e.g. a driver (using tcl??); increased
- fraction of application heap reserved for OS routines to 512K
-
- * compat/strftime.c:
+ * mac/tclMacAlloc.c: modernized TclpSysAlloc() to use temporary memory
+ instead of system heap memory when available (MacOS >= 7.5 and
+ possibly earlier, use of system heap has been discouraged for a long
+ time and has many disadvantages, e.g. memory isn't paged out, and
+ errors can very easily bring the system down); fixed crashing bug in
+ TclpSysRealloc() and CleanUpExitProc() where memory was being accessed
+ after having been deallocated; fixed memory leak in (de)allocation
+ code (for every block ever allocated with TclpSysAlloc, a Ptr was
+ leaked), if temporary memory is available, don't track allocated
+ memory, instead use RecoverHandle() to get Handle from Ptr, otherwise
+ use doubly linked list to correctly track memory and free all
+ allocated memory; added new option for ConfigureMemory:
+ MEMORY_DONT_USE_TEMPMEM, disables use of temporary memory even when it
+ would be available, only necessary when writing e.g. a driver (using
+ tcl??); increased fraction of application heap reserved for OS
+ routines to 512K
+
+ * compat/strftime.c:
* mac/tclMacTime.c:
* mac/tclMacPort.h:
- * generic/tclInt.decls:
+ * generic/tclInt.decls:
* generic/tclIntPlatDecls.h:
- * generic/tclStubInit.c: timezone support for mac via
- TclpGetTZName() like on windows, using an inverse timezone table
- adapted from tclDate.c to map gmtoffset in seconds gotten from
- the MacOS APIs to a timezone string, as there is no good way to get
- this info from MacOS. I had to make up some unusual timezones and
- arbitrarily decide on the most standard of the multiple choices
- available for every timezone.
-
- * generic/tclExecute.c: workaround for a MSL bug/misfeature: for
- very small floats, MSL can return errno ERANGE but a
- non-zero value ( < LDBL_MIN however)
-
- * mac/tclMacAppInit.c: support for WASTE text library using
- temporary memory, setting has no effect if WASTE is not used.
-
+ * generic/tclStubInit.c: timezone support for mac via TclpGetTZName()
+ like on windows, using an inverse timezone table adapted from
+ tclDate.c to map gmtoffset in seconds gotten from the MacOS APIs to a
+ timezone string, as there is no good way to get this info from MacOS.
+ I had to make up some unusual timezones and arbitrarily decide on the
+ most standard of the multiple choices available for every timezone.
+
+ * generic/tclExecute.c: workaround for a MSL bug/misfeature: for very
+ small floats, MSL can return errno ERANGE but a non-zero value (<
+ LDBL_MIN however)
+
+ * mac/tclMacAppInit.c: support for WASTE text library using temporary
+ memory, setting has no effect if WASTE is not used.
+
* mac/tclMacPanic.c: removed duplicate code from generic/tclPanic.c
and added that file to projects instead.
* tests/all.tcl: set tcltest::singleProcess 1 as multiple processes
are not available on the mac.
-
- * tests/cmdAH.test: access time not available on the mac, skip the
+
+ * tests/cmdAH.test: access time not available on the mac, skip the
atime touch test
-
+
* tests/appendComp.test:
* tests/cmdMZ.test:
* tests/compile.test:
@@ -550,20 +536,20 @@
* tests/fileName.test:
* tests/lset.test:
* tests/namespace.test:
- * tests/tcltest.test: added missing cleanups/tests/catches that
- caused tests to fail on the mac.
+ * tests/tcltest.test: added missing cleanups/tests/catches that caused
+ tests to fail on the mac.
* doc/tclvars.n: doc bug, env(PWD) should be env(HOME) [Bug 463834]
-
+
2001-11-21 Don Porter <dgp@users.sourceforge.net>
* tests/trace.test (trace-8.8): Corrected test for Bug 219393.
* generic/tclBasic.c (Tcl_DeleteCommandFromToken,CallCommandTraces):
* generic/tclCmdMZ>c (Tcl_UntraceCommand): Added Tcl_Preserve and
- Tcl_Release calls to prevent deletion of CommandTrace structures
- until all callers are done using them, preventing memory corruption.
- [Bug 453805]
+ Tcl_Release calls to prevent deletion of CommandTrace structures until
+ all callers are done using them, preventing memory corruption. [Bug
+ 453805]
2001-11-20 Kevin B. Kenny <kennykb@users.sourceforge.net>
@@ -575,7 +561,7 @@
* generic/tclUtil.c (TclpGetTime):
* generic/tclTest.c (GetTimesCmd):
* generic/tclTimer.c (Tcl_CreateTimerHandler, TimerSetupProc,
- TimerCheckProc, TimerHandlerEventProc):
+ (TimerCheckProc, TimerHandlerEventProc):
* mac/tclMacNotify.c (Tcl_SetTimer):
* mac/tclMacShLib.exp (Tcl_GetTime):
* mac/tclMacTime.c (Tcl_GetTime):
@@ -586,72 +572,72 @@
* win/tclWinNotify.c (Tcl_Sleep):
* win/tclWinTest.c (TestwinclockCmd):
* win/tclWinTime.c (TclpGetSeconds, TclpGetClicks, Tcl_GetTime):
- Changed all uses of TclpGetTime to Tcl_GetTime. Added Tcl_GetTime
- to the Stubs table and the library documentation. Added a
- TclpGetTime in tclUtil.c for backward compatibility of
- extensions. [Patch #483500, TIP#73]
+ Changed all uses of TclpGetTime to Tcl_GetTime. Added Tcl_GetTime to
+ the Stubs table and the library documentation. Added a TclpGetTime in
+ tclUtil.c for backward compatibility of extensions. [Patch 483500,
+ TIP#73]
* generic/tclCmdMZ.c (Tcl_TimeObjCmd): Corrected an error in the
[time] command that caused incorrect results to be returned if the
- total duration of all iterations exceeded 2**31 microseconds.
- [Bug #478847]
+ total duration of all iterations exceeded 2**31 microseconds. [Bug
+ 478847]
* generic/tclInt.decls:
* generic/tclInt.h:
* generic/tclStubInit.h: Reran 'make genstubs'
-
+
2001-11-20 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclBasic.c
- * generic/tclCompile.h:
+ * generic/tclCompile.h:
* generic/tclExecute.c: moving all code relative to bytecodes from
tclBasic.c to tclExecute.c - the functions RecordTracebackInfo and
Tcl_ExprObj went to tclExecute.c, and new interface function was
defined (TclCompEvalObj).
- The final objective of this sequence of moves is to provide a
- clean, clear-cut interface between Tcl's core and the
- compiler/engine subsystem.
+ The final objective of this sequence of moves is to provide a clean,
+ clear-cut interface between Tcl's core and the compiler/engine
+ subsystem.
2001-11-20 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclBasic.c
- * generic/tclCompile.h:
+ * generic/tclCompile.h:
* generic/tclExecute.c: factoring out of common code in tclBasic.c
- (new function TclInterpReady defined: it resets the interp's
- result, then checks that it hasn't been deleted and that the
- nesting level is acceptable). Passed the responsibility of calling
- it to the *callers* of TclEvalObjvInternal.
+ (new function TclInterpReady defined: it resets the interp's result,
+ then checks that it hasn't been deleted and that the nesting level is
+ acceptable). Passed the responsibility of calling it to the *callers*
+ of TclEvalObjvInternal.
2001-11-20 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclBasic.c
* generic/tclExecute.c: a better variant of the previous-to-last
- commit (restoring numLevels computations). The managing of the
- levels now has to be done by the *callers* of TclEvalObjvInternal
+ commit (restoring numLevels computations). The managing of the levels
+ now has to be done by the *callers* of TclEvalObjvInternal
2001-11-20 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclExecute.c: missing variable declaration under
- TCL_COMPILE_DEBUG.
+ TCL_COMPILE_DEBUG.
2001-11-20 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclExecute.c:
- * generic/tclProc.c: restoring the computations of iPtr->numLevels
- to the original logic (previous to buggy modifs on 2001-11-16).
+ * generic/tclProc.c: restoring the computations of iPtr->numLevels to
+ the original logic (previous to buggy modifs on 2001-11-16).
2001-11-20 Jeff Hobbs <jeffh@ActiveState.com>
* tools/eolFix.tcl (new-file):
* unix/Makefile.in: added EOL correction for Windows bat files to
- dist target. [Bug #219409] (davygrvy)
+ dist target. [Bug 219409] (davygrvy)
- * unix/tclUnixInit.c (TclpSetInitialEncodings): update of patch
- from 2001-11-16 that uses the old Tcl encoding check mechanism as
- a fallback to the original. Also added a TCL_DEFAULT_ENCODING
- #define (defaults to iso8859-1). Tcl will first try setlocale and
- nl_langinfo, and if that fails, guess based on certain LANG|LC_*
- env vars. [Patch #418645]
+ * unix/tclUnixInit.c (TclpSetInitialEncodings): update of patch from
+ 2001-11-16 that uses the old Tcl encoding check mechanism as a
+ fallback to the original. Also added a TCL_DEFAULT_ENCODING #define
+ (defaults to iso8859-1). Tcl will first try setlocale and nl_langinfo,
+ and if that fails, guess based on certain LANG|LC_* env vars. [Patch
+ 418645]
2001-11-19 David Gravereaux <davygrvy@pobox.com>
@@ -667,42 +653,42 @@
* win/tclWinFCmd.c:
* win/tclWin32Dll.c:
* doc/file.n:
- * tests/winFCmd.test: improved speed of file normalization
- for Win95/98, and clarified docs on differences in file
- normalization between NT/2000 and the older operating systems.
- Added test to ensure normalization is correct.
-
+ * tests/winFCmd.test: improved speed of file normalization for
+ Win95/98, and clarified docs on differences in file normalization
+ between NT/2000 and the older operating systems. Added test to ensure
+ normalization is correct.
+
2001-11-19 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclBasic.c:
* generic/tclParse.c: Code reorganisation. Moved all evaluation
- functions from tclParse.c to tclBasic.c, so that now tclParse.c
- deals exclusively with parsing and all evaluations are done by
- code in tclBasic.c. The functions moved are: TclEvalObjvInternal,
+ functions from tclParse.c to tclBasic.c, so that now tclParse.c deals
+ exclusively with parsing and all evaluations are done by code in
+ tclBasic.c. The functions moved are: TclEvalObjvInternal,
Tcl_EvalObjv, Tcl_LogCommandInfo, Tcl_EvalTokensStandard,
Tcl_EvalTokens, Tcl_EvalEx, Tcl_Eval, Tcl_EvalObj and
- Tcl_GlobalEvalObj.
+ Tcl_GlobalEvalObj.
2001-11-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/trace.test (trace-8.8): Added adapted version of Bug
- #219393 as new test; the test won't reliably show up the old
- problem unless it is being run under something like Purify, but
- something is better than nothing...
+ * tests/trace.test (trace-8.8): Added adapted version of [Bug 219393]
+ as new test; the test won't reliably show up the old problem unless it
+ is being run under something like Purify, but something is better than
+ nothing...
* generic/tclVar.c (Tcl_TraceVar2, Tcl_UntraceVar2): Added missing
mask bits for trace result type and a check for a nonsense flag
combination.
- * generic/tclCmdMZ.c (TraceVarProc): Added missing test for NULL
- when deleting a trace that doesn't cause an error.
+ * generic/tclCmdMZ.c (TraceVarProc): Added missing test for NULL when
+ deleting a trace that doesn't cause an error.
* doc/TraceVar.3: Added documentation for change due to TIP#68.
- * generic/tclCmdMZ.c (TraceVarInfo): Removed problematic errMsg
- field from structure.
+ * generic/tclCmdMZ.c (TraceVarInfo): Removed problematic errMsg field
+ from structure.
(TraceVarProc): Removed references to errMsg field and changed
handling of errors so that they returned a Tcl_Obj* containing the
- error string. This minimizes the number of calls to the memory
+ error string. This minimizes the number of calls to the memory
management subsystem.
(TclTraceCommandObjCmd, TraceCommandProc): Removed references to
errMsg field which was never used in command traces in any case.
@@ -710,14 +696,14 @@
errMsg field and made variable traces register with
TCL_TRACE_RESULT_OBJECT bit set.
- * generic/tcl.h (TCL_TRACE_RESULT_DYNAMIC,TCL_TRACE_RESULT_OBJECT):
- New constants to define how to handle the strings returned from
- trace callbacks [TIP#68]
+ * generic/tcl.h (TCL_TRACE_RESULT_DYNAMIC,TCL_TRACE_RESULT_OBJECT):
+ New constants to define how to handle the strings returned from trace
+ callbacks [TIP#68]
* generic/tclVar.c (CallTraces, Tcl_GetVar2Ex, TclGetIndexedScalar,
- TclGetElementOfIndexedArray, Tcl_SetVar2Ex, TclSetIndexedScalar,
- TclSetElementOfIndexedArray, Tcl_UnsetVar2, Tcl_ArrayObjCmd,
- TclDeleteVars, TclDeleteCompiledLocalVars, DeleteArray,
- TclVarTraceExists): Support for those new trace flags.
+ (TclGetElementOfIndexedArray, Tcl_SetVar2Ex, TclSetIndexedScalar,
+ (TclSetElementOfIndexedArray, Tcl_UnsetVar2, Tcl_ArrayObjCmd,
+ (TclDeleteVars, TclDeleteCompiledLocalVars, DeleteArray,
+ (TclVarTraceExists): Support for those new trace flags.
2001-11-19 Miguel Sofer <msofer@users.sourceforge.net>
@@ -725,14 +711,14 @@
2001-11-16 Kevin B. Kenny <kennykb@users.sourceforge.net>
- * generic/tclListObj.c: removed a C++-style comment that
- was inadvertently left in the source code.
+ * generic/tclListObj.c: removed a C++-style comment that was
+ inadvertently left in the source code.
2001-11-16 Jeff Hobbs <jeffh@ActiveState.com>
- * tests/interp.test:
- * generic/tclInterp.c (SlaveObjCmd): Corrected argument checking
- for '$interp alias|aliases|issafe'. [Patch #479560] (thoyts, hobbs)
+ * tests/interp.test:
+ * generic/tclInterp.c (SlaveObjCmd): Corrected argument checking for
+ '$interp alias|aliases|issafe'. [Patch 479560] (thoyts, hobbs)
* unix/tclUnixInit.c: added HAVE_LANGINFO code block.
* unix/configure: regened
@@ -740,17 +726,17 @@
* unix/tcl.m4: made SHLIB_LD_LIBS='${LIBS}' for FreeBSD* (meyer)
Added modified version of Wagner patch to make use of nl_langinfo
where possible to determine Unix platform encoding, instead of the
- inflexible built-in system. This is used by default when
- possible, and can be disabled with --enable-langinfo=no.
- [Patch #418645] (hobbs, wagner)
+ inflexible built-in system. This is used by default when possible, and
+ can be disabled with --enable-langinfo=no. [Patch 418645] (hobbs,
+ wagner)
2001-11-16 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclCompile.h:
* generic/tclExecute.c:
- * generic/tclObj.c: moved Tcl_GetCommandFromObj and all defining
- code for tclCmdNameType objects to tclObj.c (from tclExecute.c).
- This code has nothing to do with bytecodes.
+ * generic/tclObj.c: moved Tcl_GetCommandFromObj and all defining code
+ for tclCmdNameType objects to tclObj.c (from tclExecute.c). This code
+ has nothing to do with bytecodes.
2001-11-16 Miguel Sofer <msofer@users.sourceforge.net>
@@ -760,18 +746,17 @@
* generic/tclParse.c:
* generic/tclProc.c:
* tests/stack.test: consolidation of duplicated code (in
- TclExecuteByteCode and EvalObjv); renaming of EvalObjv to
- TclEvalObjv as it is not static anymore; restored consistency of
- level counts between compiled and directly evaled code.
- [Bug 480896]
+ TclExecuteByteCode and EvalObjv); renaming of EvalObjv to TclEvalObjv
+ as it is not static anymore; restored consistency of level counts
+ between compiled and directly evaled code. [Bug 480896]
2001-11-12 David Gravereaux <davygrvy@pobox.com>
* win/makefile.vc:
* win/rules.vc: Small bug fixes.
- * win/README: added some docs pointing to the docs in makefile.vc
- for it's use.
+ * win/README: added some docs pointing to the docs in makefile.vc for
+ it's use.
2001-10-17 Kevin B. Kenny <kennykb@users.sourceforge.net>
@@ -806,17 +791,17 @@
* tests/obj.test:
* tests/string.test:
* tests/stringComp.test:
- Reference implementation of TIP's #22, #33 and #45. Adds the
- ability of the [lindex] command to have multiple index arguments,
- and adds the [lset] command. Both commands are byte-code compiled.
- [Patch #471874] (work by Kenny, commited by Hobbs)
+ Reference implementation of TIP's #22, #33 and #45. Adds the ability
+ of the [lindex] command to have multiple index arguments, and adds the
+ [lset] command. Both commands are byte-code compiled. [Patch 471874]
+ (work by Kenny, commited by Hobbs)
2001-11-12 David Gravereaux <davygrvy@pobox.com>
* win/buildall.vc.bat(new):
* win/makefile.vc: Small fix with deriving the "OriginalFilename"
- string in the .rc scripts. Added a quick batchfile for building
- the entire thing.
+ string in the .rc scripts. Added a quick batchfile for building the
+ entire thing.
2001-11-12 Jeff Hobbs <jeffh@ActiveState.com>
@@ -827,8 +812,8 @@
2001-11-10 Mo DeJong <mdejong@users.sourceforge.net>
* unix/Makefile.in:
- * win/Makefile.in: Add "make gdb" target. This target
- can run tclsh inside either gdb or insight.
+ * win/Makefile.in: Add "make gdb" target. This target can run tclsh
+ inside either gdb or insight.
2001-11-10 David Gravereaux <davygrvy@pobox.com>
@@ -837,20 +822,19 @@
* win/mkd.bat:
* win/rmd.bat: Changes from Llyod Lim for better stability.
- [Patch #456759]
+ [Patch 456759]
2001-11-09 David Gravereaux <davygrvy@pobox.com>
* win/makefile.vc:
- * win/tcl.dsp: winhelp target fixes for non-NT systems. It
- seems NMAKE under these remembers changed directories during
- commands. A new tcltest feature from Peter Spjuth
- <peter.spjuth@space.se> to specify a pattern file from the
- commandline and redirecting output to a file when not under
- NT with it's scrollback console. Then it replays it, piped
- through more. Added 2 new static "configurations" to tcl.dsp.
- I could keep adding more, but I think we should leave it up to
- the user for customizing it.
+ * win/tcl.dsp: winhelp target fixes for non-NT systems. It seems
+ NMAKE under these remembers changed directories during commands. A new
+ tcltest feature from Peter Spjuth <peter.spjuth@space.se> to specify a
+ pattern file from the commandline and redirecting output to a file
+ when not under NT with it's scrollback console. Then it replays it,
+ piped through more. Added 2 new static "configurations" to tcl.dsp.
+ I could keep adding more, but I think we should leave it up to the
+ user for customizing it.
Sticky-points left: 'profile' option.
@@ -860,9 +844,9 @@
* doc/StdChannels.3:
* doc/file.n:
* doc/tcltest.n:
- * tools/man2help.tcl:
+ * tools/man2help.tcl:
* tools/man2help2.tcl: fixed winhelp generation problems
- [Patch #480268]
+ [Patch 480268]
* unix/configure:
* unix/tcl.m4: added -lc to AIX libs, fixed path to ldAix
@@ -870,68 +854,64 @@
2001-11-09 Don Porter <dgp@users.sourceforge.net>
* tests/var.test:
- * generic/tclVar.c: Corrected bug in [global] when dealing
- with variable names matching :*. [Bug 480176]
+ * generic/tclVar.c: Corrected bug in [global] when dealing with
+ variable names matching :*. [Bug 480176]
2001-11-08 Mo DeJong <mdejong@users.sourceforge.net>
- Fixup stack size under OSF1. [Tcl patch 474790]
+ Fixup stack size under OSF1. [Patch 474790]
* unix/configure: Regen.
- * unix/tcl.m4: Add HAVE_PTHREAD_ATTR_SETSTACKSIZE define
- to EXTRA_CFLAGS to adjust initial stack size.
+ * unix/tcl.m4: Add HAVE_PTHREAD_ATTR_SETSTACKSIZE define to
+ EXTRA_CFLAGS to adjust initial stack size.
2001-11-08 Mo DeJong <mdejong@users.sourceforge.net>
- Enable thread support under FreeBSD. [Tcl bug 473708]
+ Enable thread support under FreeBSD. [Bug 473708]
* unix/configure: Regen.
- * unix/tcl.m4 (SC_ENABLE_THREADS): Check for pthread functions
- in libc_r and enable thread support if found.
- * unix/dltest/Makefile.in: Set SHLIB_LD_LIBS and use it in
- the Makefile to properly link a shared library.
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Check for pthread functions in
+ libc_r and enable thread support if found.
+ * unix/dltest/Makefile.in: Set SHLIB_LD_LIBS and use it in the
+ Makefile to properly link a shared library.
2001-11-08 Mo DeJong <mdejong@users.sourceforge.net>
* unix/Makefile.in:
- * unix/dltest/Makefile.in:
- Avoid adding libc to the LIBS variable since it
- is not needed when linking with CC. If required
- when linking with LD it should be done on a case
- by case basis in tcl.m4.
+ * unix/dltest/Makefile.in: Avoid adding libc to the LIBS variable
+ since it is not needed when linking with CC. If required when linking
+ with LD it should be done on a case by case basis in tcl.m4.
2001-11-08 David Gravereaux <davygrvy@pobox.com>
* win/rules.vc:
- * win/makefile.vc: Fixed install target to adjust for the
- different build types. Added a 'linkexten' option to link the
- win extensions inside the shell when built static. Placed
- win/tclAppInit.c patch in SF patch DB for approval. 'profile'
- option not hooked in yet. Everything else know is done.
+ * win/makefile.vc: Fixed install target to adjust for the different
+ build types. Added a 'linkexten' option to link the win extensions
+ inside the shell when built static. Placed win/tclAppInit.c patch in
+ SF patch DB for approval. 'profile' option not hooked in yet.
+ Everything else know is done.
* win/tcl.dsp(new):
* win/tcl.dsw(new): Simple MsDev stub project files that calls
- makefile.vc. Will help run Tcl in the debugger easier without
+ makefile.vc. Will help run Tcl in the debugger easier without
confusing MsDev for where the .pdb files are.
2001-11-07 Mo DeJong <mdejong@users.sourceforge.net>
* unix/Makefile.in:
- * win/Makefile.in:
- Print a message indicating that the user should
- run "make genstubs" when the generated tclStubInit.c
- file is out of date. We can't regenerate automatically
- since there may be no tclsh on the system and that
- would cause bootstrap problems. [Tcl bug 465874]
+ * win/Makefile.in: Print a message indicating that the user should run
+ "make genstubs" when the generated tclStubInit.c file is out of date.
+ We can't regenerate automatically since there may be no tclsh on the
+ system and that would cause bootstrap problems. [Bug 465874]
2001-11-07 Mo DeJong <mdejong@users.sourceforge.net>
- Define TCL_INCLUDE_SPEC in tclConfig.sh. It should be
- included by extensions that need to find Tcl include
- headers in the install location. The user can override
- the include install dir with --includedir so we need
- to record this information for extensions. [Tcl bug 421835]
-
+ Define TCL_INCLUDE_SPEC in tclConfig.sh. It should be included by
+ extensions that need to find Tcl include headers in the install
+ location. The user can override the include install dir with
+ --includedir so we need to record this information for extensions.
+ [Bug 421835]
+
* unix/configure: Regen.
* unix/configure.in: Define TCL_INCLUDE_SPEC.
* unix/tclConfig.sh.in: Define TCL_INCLUDE_SPEC.
@@ -942,45 +922,41 @@
2001-11-07 David Gravereaux <davygrvy@pobox.com>
* win/rules.vc:
- * win/makefile.vc: Dropped the NOMSVCRT macro and put it on the
- option list instead. It makes more sense to me this way as
- NOMSVCRT=0 would only be the valid setting. Fixed the dde and reg
- extension for building static. Improved, but not perfected, the
- winhelp target.
+ * win/makefile.vc: Dropped the NOMSVCRT macro and put it on the option
+ list instead. It makes more sense to me this way as NOMSVCRT=0 would
+ only be the valid setting. Fixed the dde and reg extension for
+ building static. Improved, but not perfected, the winhelp target.
2001-11-07 Mo DeJong <mdejong@users.sourceforge.net>
- * win/README: Change minimum VC++ version to 5.X since
- 4.X is known not to work.
- Indicate that Mingw is required and building with Cygwin
- gcc is not supported. Include instructions that indicate
- how to install Mingw and what URLs folks should use to
- download the supported version of Mingw.
+ * win/README: Change minimum VC++ version to 5.X since 4.X is known
+ not to work.
+ Indicate that Mingw is required and building with Cygwin gcc is not
+ supported. Include instructions that indicate how to install Mingw and
+ what URLs folks should use to download the supported version of Mingw.
* win/configure: Regen.
- * win/configure.in: Error out if user tries to compile the
- Windows version of Tcl with Cygwin gcc. Users should compile
- with Mingw gcc instead.
+ * win/configure.in: Error out if user tries to compile the Windows
+ version of Tcl with Cygwin gcc. Users should compile with Mingw gcc
+ instead.
-2001-11-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-11-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclIO.c (ReadChars): Fixed bug #478856 reported by
- Stuart Cassoff <stwo@users.sourceforge.net>. The bug caused loss
- of fileevents when [read]ing less data from the channel than
- buffered. Due to an empty input buffer the flag
- CHANNEL_NEED_MORE_DATA was set but never reset, causing the I/O
- system to wait for more data instead of using a timer to
- synthesize fileevents and to flush the pending data out of the
- buffers.
+ * generic/tclIO.c (ReadChars): Fixed [Bug 478856] reported by Stuart
+ Cassoff <stwo@users.sourceforge.net>. The bug caused loss of
+ fileevents when [read]ing less data from the channel than buffered.
+ Due to an empty input buffer the flag CHANNEL_NEED_MORE_DATA was set
+ but never reset, causing the I/O system to wait for more data instead
+ of using a timer to synthesize fileevents and to flush the pending
+ data out of the buffers.
2001-11-06 David Gravereaux <davygrvy@pobox.com>
* win/rules.vc (new):
* win/makefile.vc: Complete over/under rewrite to support numerous
- build options all from the commandline itself without needing to
- edit the makefile. Now requires vcvars32.bat to be run prior to
- running nmake for bootstraping the environment. Fully doc'd usage
- for it is in makefile.vc. Commentary welcome. Sticky points left
- are:
+ build options all from the commandline itself without needing to edit
+ the makefile. Now requires vcvars32.bat to be run prior to running
+ nmake for bootstraping the environment. Fully doc'd usage for it is in
+ makefile.vc. Commentary welcome. Sticky points left are:
1) winhelp target shows errors in the converting script.
2) .rc scripts aren't getting the right #defines to build the correct
@@ -992,158 +968,153 @@
2001-11-04 Vince Darley <vincentdarley@users.sourceforge.net>
- * library/init.tcl: made filesystem fallback proc
- ::tcl::CopyDirectory more robust to vagaries of non-native
- filesystems.
-
+ * library/init.tcl: made filesystem fallback proc ::tcl::CopyDirectory
+ more robust to vagaries of non-native filesystems.
+
2001-11-02 Vince Darley <vincentdarley@users.sourceforge.net>
* doc/file.n:
- * generic/tclIOUtil.c: updated documentation and comments
- to clarify behaviour of 'file copy' wrt soft links.
-
+ * generic/tclIOUtil.c: updated documentation and comments to clarify
+ behaviour of 'file copy' wrt soft links.
+
2001-10-29 Vince Darley <vincentdarley@users.sourceforge.net>
- * win/tclWinFile.c: fix to '-types {f r}' bug in
- TclpMatchInDirectory (which could cause a UMR, as well as
- returning wrong results). Also improved API for 'stat'
- to resolve [Bug#219258].
+ * win/tclWinFile.c: fix to '-types {f r}' bug in TclpMatchInDirectory
+ (which could cause a UMR, as well as returning wrong results). Also
+ improved API for 'stat' to resolve [Bug 219258].
* win/tclWin32Dll.c
- * win/tclWinInt.h: addition of improved stat API to internal
- lookup table.
+ * win/tclWinInt.h: addition of improved stat API to internal lookup
+ table.
* tests/fileName.test: two new tests for the above bug.
* generic/tclIOUtil.c: some cleanup of comments and #ifdefs
-
+
2001-10-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * unix/tclUnixFile.c (TclpMatchInDirectory): Argument to access()
- was entryPtr->d_name instead of nativeEntry which failed when
- trying to check access for files in other than the current
- directory. [Bug 475941, reported by Georgios Petasis]
+ * unix/tclUnixFile.c (TclpMatchInDirectory): Argument to access() was
+ entryPtr->d_name instead of nativeEntry which failed when trying to
+ check access for files in other than the current directory. [Bug
+ 475941, reported by Georgios Petasis]
2001-10-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* unix/tclUnixChan.c: Added stateUpdated member to struct TtyState.
- (TtyCloseProc,TtySetOptionProc,TtyInit): Use stateUpdated member
- of TtyState to decide whether it is necessary to reset a serial
- port when Tcl closes it. Blindly resetting can cause Tcl to be
- sent an unexpected SIGTSTP when it is executing in the background
- [Bug 471374, reported by Chris Nelson]
+ (TtyCloseProc,TtySetOptionProc,TtyInit): Use stateUpdated member of
+ TtyState to decide whether it is necessary to reset a serial port when
+ Tcl closes it. Blindly resetting can cause Tcl to be sent an
+ unexpected SIGTSTP when it is executing in the background [Bug 471374,
+ reported by Chris Nelson]
-2001-10-22 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-10-22 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * doc/ObjectType.3: Minor documentation fix, reported by David
- N. Welton <davidw@users.sourceforge.net> directly to me.
+ * doc/ObjectType.3: Minor documentation fix, reported by David N.
+ Welton <davidw@users.sourceforge.net> directly to me.
2001-10-22 Vince Darley <vincentdarley@users.sourceforge.net>
- * win/tclWinFCmd.c: fix to stop test suite from hanging process
- under some versions of WinNT. [Bug #466102] (Kevin Kenny)
-
+ * win/tclWinFCmd.c: fix to stop test suite from hanging process under
+ some versions of WinNT. [Bug 466102] (Kevin Kenny)
+
2001-10-18 Jeff Hobbs <jeffh@ActiveState.com>
- * tests/clock.test (clock-8.1):
- * generic/tclDate.c (RelativeMonth):
- * generic/tclGetDate.y (RelativeMonth): corrected off-by-one-day
- error in clock scan with relative months and years during swing
- hours. [Bug #413397, Patch #414024] (lavana)
+ * tests/clock.test (clock-8.1):
+ * generic/tclDate.c (RelativeMonth):
+ * generic/tclGetDate.y (RelativeMonth): corrected off-by-one-day error
+ in clock scan with relative months and years during swing hours. [Bug
+ 413397, Patch 414024] (lavana)
2001-10-18 Vince Darley <vincentdarley@users.sourceforge.net>
- * generic/tclIOUtil.c: fix to bug in Tcl_FSChdir shown up
- by recent tclkit builds.
+ * generic/tclIOUtil.c: fix to bug in Tcl_FSChdir shown up by recent
+ tclkit builds.
2001-10-17 Jeff Hobbs <jeffh@ActiveState.com>
* unix/tclUnixPipe.c (PipeInputProc, PipeOutputProc): do immediate
- retry when error is returned with errno == EINTR.
- [Bug #415131] (leger)
+ retry when error is returned with errno == EINTR. [Bug 415131] (leger)
2001-10-16 Jeff Hobbs <jeffh@ActiveState.com>
- * unix/tclLoadAout.c (TclGuessPackageName): removed unused vars
- and fixed warnings. [Bug #446622] (lim)
+ * unix/tclLoadAout.c (TclGuessPackageName): removed unused vars and
+ fixed warnings. [Bug 446622] (lim)
2001-10-15 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclProc.c: changing a memcmp to strncmp to avoid a memory
- error detected by purify (thanks Jeff); modify style to agrre with
- the style guide.
-
-2001-10-15 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+ error detected by purify (thanks Jeff); modify style to agrre with the
+ style guide.
+
+2001-10-15 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclInt.decls (TclExpandCodeArray,TclGetInstructionTable):
- Added to internal stubs table. Tclcompiler (Tclpro project)
- needs them if used as loadable package under Windows. Changed
- signatures. We don't want to describe compiler internal
- structures in "tclInt.h".
+ Added to internal stubs table. Tclcompiler (Tclpro project) needs them
+ if used as loadable package under Windows. Changed signatures. We
+ don't want to describe compiler internal structures in "tclInt.h".
* generic/tclCompile.h: S.a. Removed function declarations.
* generic/tclCompile.c: S.a. Adapted to changed signatures.
2001-10-15 Jeff Hobbs <jeffh@ActiveState.com>
- * unix/configure:
- * unix/configure.in:
- * win/configure:
- * win/configure.in:
- * win/tcl.m4: reworked to be a little cleaner in comparison to
- each other, and to AC_SUBST even empty vars for win/tclConfig.sh
+ * unix/configure:
+ * unix/configure.in:
+ * win/configure:
+ * win/configure.in:
+ * win/tcl.m4: reworked to be a little cleaner in comparison to each
+ other, and to AC_SUBST even empty vars for win/tclConfig.sh
* generic/tclFileName.c: minor code cleanup
- * generic/tcl.h: moved #define of WIN32 to tcl.h where __WIN32__
- is defined and added #ifndef check.
+ * generic/tcl.h: moved #define of WIN32 to tcl.h where __WIN32__ is
+ defined and added #ifndef check.
* doc/open.n: moved all fconfigure option docs to fconfigure.n
* doc/fconfigure.n: added serial config options
* win/tclWinChan.c:
* win/tclWinPort.h:
- * win/tclWinSerial.c: added TIP #35 Windows enhancements for
- serial configuration. [Patch #438509] (schroedter)
+ * win/tclWinSerial.c: added TIP #35 Windows enhancements for serial
+ configuration. [Patch 438509] (schroedter)
2001-10-15 Vince Darley <vincentdarley@users.sourceforge.net>
* generic/tclFCmd.c: fix to memory leak in TclFileDeleteCmd on
certain error conditions.
* doc/FileSystem.3: fix to typo.
-
+
2001-10-12 Jeff Hobbs <jeffh@ActiveState.com>
* library/encoding/ebcdic.enc:
* tools/encoding/ebcdic.txt: EBCDIC charset mapping.
- [Patch #219323] (nijtmans)
+ [Patch 219323] (nijtmans)
* library/encoding/tis-620.enc:
* tools/encoding/tis-620.txt: TIS-620 charset mapping.
- [Patch #467423] (poonlap)
+ [Patch 467423] (poonlap)
* tests/http.test: added removeFile for outdata
- * tests/ioCmd.test: added catch around file removal, as Windows
- file locking throws errors.
+ * tests/ioCmd.test: added catch around file removal, as Windows file
+ locking throws errors.
* tests/socket.test (socket-7.2): corrected to work on Win2K.
2001-10-12 Miguel Sofer <msofer@users.sourceforge.net>
-
+
* tests/compile.test: new tests for [Bug 467523]; they are only
effective if TCL_MEM_DEBUG was set during compilation.
2001-10-11 Miguel Sofer <msofer@users.sourceforge.net>
-
+
* generic/tclLiteral.c (TclReleaseLiteral): insured that
self-referential bytecodes are properly cleaned up on interpreter
deletion [Bug 467523] (Ronnie Brunner)
2001-10-10 David Gravereaux <davygrvy@pobox.com>
- * win/tclWinPort.h: #include <winsock2.h> needed to get moved
- to after #include <windows.h> or wierd misunderstandings took
- place when -D_WIN32_WINNT=0x0400 is set for outside code that
- requires knowledge of Tcl innards. General header macro magic
- applied liberally...
+ * win/tclWinPort.h: #include <winsock2.h> needed to get moved to
+ after #include <windows.h> or wierd misunderstandings took place when
+ -D_WIN32_WINNT=0x0400 is set for outside code that requires knowledge
+ of Tcl innards. General header macro magic applied liberally...
2001-10-10 Don Porter <dgp@users.sourceforge.net>
@@ -1151,20 +1122,20 @@
2001-10-09 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclFileName.c (Tcl_SplitPath): corrected mem leak
- intro'd with VFS code where the result obj from Tcl_FSSplitPath
- was not getting freed.
+ * generic/tclFileName.c (Tcl_SplitPath): corrected mem leak intro'd
+ with VFS code where the result obj from Tcl_FSSplitPath was not
+ getting freed.
2001-10-09 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclLiteral.c: (TclReleaseLiteral) reverted previous
- patch for [Bug 467523] - cure is worse than the illness.
+
+ * generic/tclLiteral.c: (TclReleaseLiteral) reverted previous patch
+ for [Bug 467523] - cure is worse than the illness.
2001-10-05 Miguel Sofer <msofer@users.sourceforge.net>
-
+
* generic/tclLiteral.c: (TclReleaseLiteral) insured that
self-referential bytecodes are properly cleaned up on interpreter
- deletion [Bug 467523] (Ronnie Brunner)
+ deletion. [Bug 467523] (Ronnie Brunner)
2001-10-04 Jeff Hobbs <jeffh@ActiveState.com>
@@ -1217,18 +1188,18 @@
* tools/encoding/macIceland.txt:
* tools/encoding/macRoman.txt:
* tools/encoding/macTurkish.txt:
- Updated encodings with latest mappings from www.unicode.org. This
- did not include some Mac encodings that have special multi-unichar
- translations now (like symbols, dingbats and japanese). Also does
- not include big5, gb or euc* as those have different formats in
- the latest Unicode version that need new conversion tools. Not
- all related .enc files changed as some had been updates separately.
+ Updated encodings with latest mappings from www.unicode.org. This did
+ not include some Mac encodings that have special multi-unichar
+ translations now (like symbols, dingbats and japanese). Also does not
+ include big5, gb or euc* as those have different formats in the latest
+ Unicode version that need new conversion tools. Not all related .enc
+ files changed as some had been updates separately.
2001-10-03 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclEvent.c (Tcl_FinalizeThread): moved freeing of
- tclLibraryPath to before the thread exit handlers are called.
- Slight modification to change on 2001-09-24.
+ tclLibraryPath to before the thread exit handlers are called. Slight
+ modification to change on 2001-09-24.
2001-10-01 Jeff Hobbs <jeffh@ActiveState.com>
@@ -1245,45 +1216,44 @@
* generic/tclCmdIL.c:
* generic/tclCmdMZ.c:
* generic/tclParseExpr.c: removed unnecessary inclusion of
- tclCompile.h and made a small modification in (InfoBodyCmd) to
- improve the isolation of the compiler/engine subsystem.
+ tclCompile.h and made a small modification in (InfoBodyCmd) to improve
+ the isolation of the compiler/engine subsystem.
2001-09-29 Vince Darley <vincentdarley@users.sourceforge.net>
* generic/tclIOUtil.c:
- * doc/FileSystem.3: corrected and clarified documentation
- for 'Tcl_FSListVolumes(Proc)'. No code changes.
-
+ * doc/FileSystem.3: corrected and clarified documentation for
+ 'Tcl_FSListVolumes(Proc)'. No code changes.
+
2001-09-28 Miguel Sofer <msofer@users.sourceforge.net>
- * doc/FindExec.3: added a comment not to change the working
- directory before calling Tcl_GetNameOfExecutable [Bug 219215]
+ * doc/FindExec.3: added a comment not to change the working directory
+ before calling Tcl_GetNameOfExecutable. [Bug 219215]
2001-09-28 Kevin Kenny <kennykb@users.sourceforge.net>
- * generic/tclIO.c: added two more '(ClientData)' casts
- on calls to Tcl_Preserve and Tcl_Release -- ones that
- Vince apparently missed.
-
+ * generic/tclIO.c: added two more '(ClientData)' casts on calls to
+ Tcl_Preserve and Tcl_Release -- ones that Vince apparently missed.
+
2001-09-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* doc/lsort.n: Improved doc...
* generic/tclCmdIL.c (Tcl_LsortObjCmd, SortCompare): Made
- offset-from-end indexing work, and factored out some "magic
- numbers" for easier understanding. [Bug #465674]
+ offset-from-end indexing work, and factored out some "magic numbers"
+ for easier understanding. [Bug 465674]
* tests/cmdIL.test (cmdIL-1.26): Added test for offset-from-end
indexing for lsort.
2001-09-28 Vince Darley <vincentdarley@users.sourceforge.net>
* win/tclWinFCmd.c:
- * unix/tclUnixFCmd.c: fix to performance issue reported
- by jcw in which 'access("")' is called unnecessarily when
- normalizing any absolute path.
+ * unix/tclUnixFCmd.c: fix to performance issue reported by jcw in
+ which 'access("")' is called unnecessarily when normalizing any
+ absolute path.
* generic/tclIO.c: added '(ClientData)' cast to calls to
- Tcl_(Preserve|Release) newly introduced, fixing compile
- error on Windows.
-
+ Tcl_(Preserve|Release) newly introduced, fixing compile error on
+ Windows.
+
2001-09-27 Don Porter <dgp@users.sourceforge.net>
* doc/FileSystem.3 (Tcl_FSLoadFile):
@@ -1305,70 +1275,67 @@
* unix/tclLoadShl.c (TclpLoadFile):
* win/tclWinLoad.c (TclpLoadFile):
* win/tclWinFCmd.c (DoRemoveJustDirectory): More CONST poisoning
- fixes from the 2001-09-24 TIP 27 changes. CONST-ified
- Tcl_FSLoadFile and TclpLoadFile. Report and patch from Kevin
- Kenny. [Bug 465833]
+ fixes from the 2001-09-24 TIP 27 changes. CONST-ified Tcl_FSLoadFile
+ and TclpLoadFile. Report and patch from Kevin Kenny. [Bug 465833]
- * generic/tclIO.c (ChannelTimerProc): Added Tcl_Preserve()
- and Tcl_Release() to fix segfault introduced by the 2001-09-26
- changes. [Bug 465494]
+ * generic/tclIO.c (ChannelTimerProc): Added Tcl_Preserve() and
+ Tcl_Release() to fix segfault introduced by the 2001-09-26 changes.
+ [Bug 465494]
- * doc/TCL_MEM_DEBUG.3: Updated out-of-date reference to
- #define GUARD_SIZE.
+ * doc/TCL_MEM_DEBUG.3: Updated out-of-date reference to #define
+ GUARD_SIZE.
* doc/UpVar.3 (Tcl_UpVar,Tcl_UpVar2):
* generic/tcl.decls (Tcl_UpVar,Tcl_UpVar2):
* generic/tclInt.decls (TclFindProc,TclGetFrame):
* generic/tclInt.h (TclFindProc,TclGetFrame,TclLookupVar,
- TclPrecTraceProc,TclProcInterpProc}):
+ (TclPrecTraceProc,TclProcInterpProc}):
* generic/tclProc.c (TclGetFrame,TclFindProc):
* generic/tclVar.c (Tcl_UpVar,Tcl_UpVar2,MakeUpvar): Updated APIs in
- generic/tclProc.c and generic/tclVar.c according to the guidelines
- of TIP 27. [Patch 465442]
+ generic/tclProc.c and generic/tclVar.c according to the guidelines of
+ TIP 27. [Patch 465442]
* generic/tclDecls.h:
* generic/tclIntDecls.h: make genstubs
-2001-09-26 Andreas Kupries <andreas_kupries@users.sourceforge.net>
-
- * doc/fileevent.n: Accepted [Patch #465279] adding an example to
- the fileevent manpage. Minor modifications to get a better
- formatting. Report and patch by David N. Welton
- <davidw@users.sourceforge.net>.
-
- * The changes below fix [Bug #462317] where Expect tried to read
- more than was in the buffers and then blocked in the OS call as
- its pty channel driver provides no blockmodeproc through which
- the OS could be notified of blocking-behaviour. Because of this
- the general I/O core has to take more care than usual to
- preserve the semantics of non-blocking channels.
-
- The problem was reported by "Kevin O'Gorman"
- <kevin@kosmanor.com>.
-
- * generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if
- the channel is non-blocking and the fileevent causing the read
- was generated by a timer. We do not know if there is data
- available from the OS. Instead of going to the OS for more and
- potentially blocking we simply signal EWOULDBLOCK to the higher
- levels to cause the system to wait for true fileevents.
- (GetInput): Same as before.
- (ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV.
-
- * generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is
- set if a fileevent was generated by a timer, the channel is not
- blocking and the driver did not provide a blockmodeproc. In that
- case the I/O core has to be especially careful about going to
- the driver for more data.
+2001-09-26 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * doc/fileevent.n: Accepted [Patch 465279] adding an example to the
+ fileevent manpage. Minor modifications to get a better formatting.
+ Report and patch by David N. Welton <davidw@users.sourceforge.net>.
+
+ * The changes below fix [Bug 462317] where Expect tried to read more
+ than was in the buffers and then blocked in the OS call as its pty
+ channel driver provides no blockmodeproc through which the OS could be
+ notified of blocking-behaviour. Because of this the general I/O core
+ has to take more care than usual to preserve the semantics of
+ non-blocking channels.
+
+ The problem was reported by "Kevin O'Gorman" <kevin@kosmanor.com>.
+
+ * generic/tclIO.c (Tcl_ReadRaw): Do not read from the driver if the
+ channel is non-blocking and the fileevent causing the read was
+ generated by a timer. We do not know if there is data available from
+ the OS. Instead of going to the OS for more and potentially blocking
+ we simply signal EWOULDBLOCK to the higher levels to cause the system
+ to wait for true fileevents.
+ (GetInput): Same as before.
+ (ChannelTimerProc): Added set and clear of CHANNEL_TIMER_FEV.
+
+ * generic/tclIO.h (CHANNEL_TIMER_FEV): New flag for channels. Is set
+ if a fileevent was generated by a timer, the channel is not blocking
+ and the driver did not provide a blockmodeproc. In that case the I/O
+ core has to be especially careful about going to the driver for more
+ data.
2001-09-26 Don Porter <dgp@users.sourceforge.net>
* doc/SplitPath.3 (Tcl_GetPathType):
* generic/tcl.decls (Tcl_GetPathType):
* generic/tclFileName.c (Tcl_GetPathType):
- * win/tclWinFile.c (TclpMatchInDirectory, NativeStat): Vince
- Darley reports the 2001-09-24 TIP 27 changes left the win
- directory CONST poisoned. These changes should fix that.
+ * win/tclWinFile.c (TclpMatchInDirectory, NativeStat): Vince Darley
+ reports the 2001-09-24 TIP 27 changes left the win directory CONST
+ poisoned. These changes should fix that.
* generic/tclDecls.h: make genstubs
@@ -1378,17 +1345,17 @@
* generic/tclInt.h (TclGetLong deleted):
* generic/tcl.decls:
* generic/tclInt.decls:
- * generic/tclGet.c: Updated APIs in generic/tclGet.c
- according to the guidelines of TIP 27. [Patch 464674]
+ * generic/tclGet.c: Updated APIs in generic/tclGet.c according to the
+ guidelines of TIP 27. [Patch 464674]
- * generic/tclDecls.h:
+ * generic/tclDecls.h:
* generic/tclIntDecls.h: make genstubs
2001-09-25 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclVar.c: removed comments referring to unused flag
- TCL_PARSE_PART1.
-
+ TCL_PARSE_PART1.
+
2001-09-24 Don Porter <dgp@users.sourceforge.net>
* doc/Concat.3:
@@ -1400,37 +1367,34 @@
* generic/tclEncoding.c (OpenEncodingFile):
* generic/tclMain.c (Tcl_Main):
* generic/tclUtil.c:
- * unix/tclLoadDl.c (TclpLoadFile): Updated APIs in
- generic/tclUtil.c according to the guidelines of TIP 27.
- [Patch 464553]
+ * unix/tclLoadDl.c (TclpLoadFile): Updated APIs in generic/tclUtil.c
+ according to the guidelines of TIP 27. [Patch 464553]
- * generic/tclDecls.h:
+ * generic/tclDecls.h:
* generic/tclIntDecls.h: make genstubs
2001-09-24 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * The change below fixes [Bug #464380]. The bug was reported by
- Ronnie Brunner <rbrunner@users.sourceforge.net>. He also
- provided the patch.
-
- * generic/tclEvent.c (Tcl_Finalize): Moved release of
- 'tclLibraryPath' to Tcl_FinalizeThread.
- (Tcl_FinalizeThread): See above, new place for release of
- 'tclLibraryPath'.
+ The change below fixes [Bug 464380]. The bug was reported by Ronnie
+ Brunner <rbrunner@users.sourceforge.net>. He also provided the patch.
+
+ * generic/tclEvent.c (Tcl_Finalize): Moved release of 'tclLibraryPath'
+ to Tcl_FinalizeThread.
+ (Tcl_FinalizeThread): See above, new place for release of
+ 'tclLibraryPath'.
2001-09-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tools/encoding/cp1252.txt: File was missing part of the encoding
- [euro, ZCaron and zcaron].
+ [euro, ZCaron and zcaron].
- * doc/OpenFileChnl.3: Add docs for Tcl_OutputBuffered; remove some
- old changebars.
+ * doc/OpenFileChnl.3: Add docs for Tcl_OutputBuffered; remove some old
+ changebars.
2001-09-21 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclExecute.c (TclExecuteByteCode): corrected
- INST_STR_CMP else case for strings to pass true utf char length
- to Tcl_UtfNCmp.
+ * generic/tclExecute.c (TclExecuteByteCode): corrected INST_STR_CMP
+ else case for strings to pass true utf char length to Tcl_UtfNCmp.
2001-09-20 Jeff Hobbs <jeffh@ActiveState.com>
@@ -1439,30 +1403,30 @@
* win/tclWinSock.c (SocketThread): corrected pointer cast for _WIN64.
* win/tclWinNotify.c: removed unnecessary winsock include (it is
- already in from tclWinPort.h).
+ already in from tclWinPort.h).
- * win/tclWinPort.h: changed winsock.h include to winsock2.h.
- Reverses change from 2000-11-16, but is necessary for WIN64.
- Extensions should comply with defined OS words, or use #ifndef.
+ * win/tclWinPort.h: changed winsock.h include to winsock2.h. Reverses
+ change from 2000-11-16, but is necessary for WIN64. Extensions should
+ comply with defined OS words, or use #ifndef.
2001-09-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/socket.test: removed dependence on being run from same dir
- as remote.tcl, which only now needs to be in the same dir as
- this file. [Bug #219326]
+ * tests/socket.test: removed dependence on being run from same dir as
+ remote.tcl, which only now needs to be in the same dir as this file.
+ [Bug 219326]
2001-09-19 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclTest.c (TestcmdtokenCmd): corrected pointer
- storage/retrieval for 64bit machines.
+ storage/retrieval for 64bit machines.
* generic/tclCmdAH.c (Tcl_FormatObjCmd):
- * generic/tclScan.c (Tcl_ScanObjCmd): corrected handling of format
- and scan on 64-bit machines. [Bug #412696] (rmax)
+ * generic/tclScan.c (Tcl_ScanObjCmd): corrected handling of format and
+ scan on 64-bit machines. [Bug 412696] (rmax)
* unix/configure: regen'ed
- * unix/tcl.m4: added --enable-64bit support for HP-11 with the
- 64-bit kernel.
+ * unix/tcl.m4: added --enable-64bit support for HP-11 with the 64-bit
+ kernel.
* tests/basic.test:
* tests/cmdInfo.test: improved skip reporting of missing commands
@@ -1471,10 +1435,10 @@
* tests/winPipe.test: removed obsolete cat16 tests
- * generic/tclExecute.c (TclExecuteByteCode): fixed invalid usage
- of valuePtr in TRACE_WITH_OBJ in INST_EVAL_STK case. [Bug #462594]
- Changed INST_STR_CMP instruction to promote to Unicode strings
- only when one of the strings is already of Unicode type.
+ * generic/tclExecute.c (TclExecuteByteCode): fixed invalid usage of
+ valuePtr in TRACE_WITH_OBJ in INST_EVAL_STK case. [Bug 462594] Changed
+ INST_STR_CMP instruction to promote to Unicode strings only when one
+ of the strings is already of Unicode type.
* generic/tclExecute.c (TclExecuteByteCode):
* generic/tclCompile.c (instructionTable):
@@ -1486,77 +1450,75 @@
* tests/{for.test,foreach.test,if.test,while.test}:
* generic/tclCompCmds.c (TclCompileForCmd, TclCompileForeachCmd,
TclCompileIfCmd, TclCompileWhileCmd): Corrected the overaggressive
- compiling of loop bodies enclosed in ""s. [Bug #219166] (msofer)
+ compiling of loop bodies enclosed in ""s. [Bug 219166] (msofer)
2001-09-19 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclExecute.c: insured that execution stack errors are
- also detected at abnormal returns.
+
+ * generic/tclExecute.c: insured that execution stack errors are also
+ detected at abnormal returns.
2001-09-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* doc/socket.n: Added documentation to mention what happens when a
- server socket is created with port=0. Removed an old change bar,
- and no new change bar because Tcl has always behaved this way as
- it is really a poorly-documented standards-defined OS feature.
+ server socket is created with port=0. Removed an old change bar, and
+ no new change bar because Tcl has always behaved this way as it is
+ really a poorly-documented standards-defined OS feature.
* tests/util.test (util-8.1): Test derived from code to detect the
- problem, but the test always works in the C locale, so beware if
- you are maintaining the code.
- * generic/tclUtil.c (TclNeedSpace): Rewrote to be UTF-8 aware.
- [Bug 411825, but not that patch which would have added extra
- spaces if there was a real non-ASCII space involved. ]
+ problem, but the test always works in the C locale, so beware if you
+ are maintaining the code.
+ * generic/tclUtil.c (TclNeedSpace): Rewrote to be UTF-8 aware. [Bug
+ 411825, but not that patch which would have added extra spaces if
+ there was a real non-ASCII space involved.]
-2001-09-18 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+2001-09-18 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclIOCmd.c (Tcl_PutsObjCmd): Rewritten to have saner and
- faster argument handling. Fixes bug #123552. Patch provided by
- Donal K. Fellows <fellowsd@cs.man.ac.uk>: #402564.
+ faster argument handling. [Bug 123552], [Patch 402564] (fellows)
2001-09-18 Don Porter <dgp@users.sourceforge.net>
* unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): On Linux, disable inlining when
- one of the compat/*.c routines is to be linked in. [Patch 440891]
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): On Linux, disable inlining when one
+ of the compat/*.c routines is to be linked in. [Patch 440891]
2001-09-17 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tcl.h: removed forced #define USE_TCLALLOC 1 for
- Windows. This means the native system allocator will be used by
- default. This should be binary and source compatible with
- extensions, as Tcl_Alloc is a properly stubbed function.
+ * generic/tcl.h: removed forced #define USE_TCLALLOC 1 for Windows.
+ This means the native system allocator will be used by default. This
+ should be binary and source compatible with extensions, as Tcl_Alloc
+ is a properly stubbed function.
2001-09-17 Miguel Sofer <msofer@users.sourceforge.net>
-
- * generic/tclExecute.c: corrected small bug in [Patch 456668] -
- the varFramePtr was not restored in one possible exit.
+
+ * generic/tclExecute.c: corrected small bug in [Patch 456668] - the
+ varFramePtr was not restored in one possible exit.
2001-09-17 Miguel Sofer <msofer@users.sourceforge.net>
-
+
* doc/tclvars.n:
* generic/tclCompile.c:
* generic/tclCompile.h:
* generic/tclExecute.c:
* generic/tclProc.c: disabled all compile and execution tracing
- functionality in standard builds; TCL_COMPILE_DEBUG is now
- necessary to enable it. [Bug 451858]
+ functionality in standard builds; TCL_COMPILE_DEBUG is now necessary
+ to enable it. [Bug 451858]
2001-09-14 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * doc/gets.n:
- * doc/read.n:
- * doc/puts.n:
- * doc/flush.n:
- * doc/fconfigure.n:
- * doc/flush.n:
- * doc/eof.n:
- * doc/seek.n:
- * doc/tell.n:
- * doc/close.n:
- * doc/fileevent.n: Added references to the Tcl standard
- channels. Item [219250], reported by David LeBlanc
- <whisper@oz.net>. Thanks to Christopher Nelson
- <chris@pinebush.com> for doing editorial work.
+ * doc/gets.n:
+ * doc/read.n:
+ * doc/puts.n:
+ * doc/flush.n:
+ * doc/fconfigure.n:
+ * doc/flush.n:
+ * doc/eof.n:
+ * doc/seek.n:
+ * doc/tell.n:
+ * doc/close.n:
+ * doc/fileevent.n: Added references to the Tcl standard channels. Item
+ [219250], reported by David LeBlanc <whisper@oz.net>. Thanks to
+ Christopher Nelson <chris@pinebush.com> for doing editorial work.
2001-09-13 Andreas Kupries <andreas_kupries@users.sourceforge.net>
@@ -1565,56 +1527,52 @@
* win/makefile.bc:
* win/makefile.vc:
* library/dde/pkgIndex.tcl: Fixed version numbers from bogus tcl
- versions to independent versions for dde and registry packages.
+ versions to independent versions for dde and registry packages.
2001-09-13 Jeff Hobbs <jeffh@ActiveState.com>
* tests/regexp.test (regexp-20.1):
* generic/tclCmdMZ.c (Tcl_RegsubObjCmd): had to adjust fix from
- 2001-08-06 to actually duplicate the objects in certain cases.
- This is really a place where feather would have been essential.
- [Bug #461322]
+ 2001-08-06 to actually duplicate the objects in certain cases. This is
+ really a place where feather would have been essential. [Bug 461322]
* generic/tclUtf.c (Tcl_UtfPrev): corrected to return the proper
- location when the middle of a UTF-8 byte was passed in.
- [Tk Bug #450504]
+ location when the middle of a UTF-8 byte was passed in [Tk Bug 450504]
* ChangeLog.1999:
* ChangeLog: broke changes from 199x into ChangeLog.1999 to reduce
- size of the main ChangeLog.
+ size of the main ChangeLog.
2001-09-13 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* tests/ioCmd.test: Changed the computation of the result for
- iocmd-8.1[123] so that the tests work for single- and
- multi-process execution of the testsuite. Depending on the
- choice of the user stdout is a tty or not and thus reports
- different channel options. Fixes [460993] reported by Don
- Porter.
+ iocmd-8.1[123] so that the tests work for single- and multi-process
+ execution of the testsuite. Depending on the choice of the user stdout
+ is a tty or not and thus reports different channel options. Fixes
+ [460993] reported by Don Porter.
2001-09-13 Miguel Sofer <msofer@users.sourceforge.net>
- * doc/ParseCmd.3:
+ * doc/ParseCmd.3:
* generic/tcl.decls:
* generic/tclCmdMZ.c (Tcl_SubstObjCmd):
* generic/tclDecls.h:
* generic/tclParse.c:
* generic/tclStubInit.c:
- * tests/parse.test: Deprecate the use of Tcl_EvalTokens, replaced
- by the new Tcl_EvalTokensStandard. The new function performs the
- same duties but adheres to the standard return convention for Tcl
+ * tests/parse.test: Deprecate the use of Tcl_EvalTokens, replaced by
+ the new Tcl_EvalTokensStandard. The new function performs the same
+ duties but adheres to the standard return convention for Tcl
evaluations; the deprecated function could only return TCL_OK or
- TCL_ERROR, which caused [Bug 219384] and [Bug 455151].
- This patch implements [TIP 56].
-
+ TCL_ERROR, which caused [Bug 219384] and [Bug 455151]. This patch
+ implements [TIP 56].
+
2001-09-12 Mo DeJong <mdejong@users.sourceforge.net>
* unix/configure: Regen.
- * unix/tcl.m4: Invert the logic that checks for $GCC.
- Instead of checking for "$GCC" = "no" we check for
- "$GCC" != "yes" or simply swap the true and false
- blocks of code in an if statement. That way if
- GCC is set to "" everything will still work. [Bug 460991]
+ * unix/tcl.m4: Invert the logic that checks for $GCC. Instead of
+ checking for "$GCC" = "no" we check for "$GCC" != "yes" or simply swap
+ the true and false blocks of code in an if statement. That way if GCC
+ is set to "" everything will still work. [Bug 460991]
2001-09-12 Don Porter <msofer@users.sourceforge.net>
@@ -1622,8 +1580,8 @@
* tests/lsearch.test:
* tests/namespace.test:
* tests/rename.test:
- * tests/split.test: Corrected tests to better isolate tests in
- one file from influencing tests in other files. [Bug 460591]
+ * tests/split.test: Corrected tests to better isolate tests in one
+ file from influencing tests in other files. [Bug 460591]
2001-09-12 Miguel Sofer <msofer@users.sourceforge.net>
@@ -1633,181 +1591,170 @@
2001-09-11 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* doc/OpenFileChnl.3: Added documentation for Tcl_WriteRaw and
- Tcl_ReadRaw [#414929].
-
- * doc/CrtChannel.3: Added documentation for Tcl_ChannelBuffered
- and Tcl_GetTopChannel [#414929].
+ Tcl_ReadRaw [Bug 414929].
+
+ * doc/CrtChannel.3: Added documentation for Tcl_ChannelBuffered and
+ Tcl_GetTopChannel [Bug 414929].
- * The changes below are a fix for [219253].
+ * The changes below are a fix for [Bug 219253].
* tests/socket.test: Removed _most_ instances of hardwired port
- numbers for listening sockets. Remaining are the ports in all
- tests with constraint 'doTestsWithRemoteServer'. These seem to
- be designed for a more controlled environment and are usually
- skipped when running the testsuite.
+ numbers for listening sockets. Remaining are the ports in all tests
+ with constraint 'doTestsWithRemoteServer'. These seem to be designed
+ for a more controlled environment and are usually skipped when running
+ the testsuite.
- * tests/io.test: Removed all instances of hardwired port numbers
- for listening sockets.
+ * tests/io.test: Removed all instances of hardwired port numbers for
+ listening sockets.
2001-09-10 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclEvent.c (TclInExit): Corrected handling of tsd in
- late stages of finalization. [Bug #419449] (darley)
+ * generic/tclEvent.c (TclInExit): Corrected handling of tsd in late
+ stages of finalization. [Bug 419449] (darley)
* tests/stack.test:
* generic/tclInterp.c (AliasObjCmd): Check the numLevels to ensure
- that we aren't hitting some alias loop condition. [Bug #443184]
+ that we aren't hitting some alias loop condition. [Bug 443184]
2001-09-10 Mo DeJong <mdejong@users.sourceforge.net>
* unix/configure: Regen.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Don't include . characters
- in the Tcl library name when building on FreeBSD 3.X and later
- systems. [Patch 450725]
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Don't include . characters in the
+ Tcl library name when building on FreeBSD 3.X and later systems.
+ [Patch 450725]
2001-09-10 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* doc/tclsh.1:
- * doc/Tcl_Main.3:
- * doc/CrtChannel.3:
- * doc/OpenFileChnl.3:
+ * doc/Tcl_Main.3:
+ * doc/CrtChannel.3:
+ * doc/OpenFileChnl.3:
* doc/GetStdChan.3: Enhanced the manpages with cross-references to
- the new manpage and more explanations how these functions deal
- with the standard channels in various situations.
+ the new manpage and more explanations how these functions deal with
+ the standard channels in various situations.
- * doc/StdChannels.3: New manpage describing handling of the
- standard channels by the Tcl library [402725].
+ * doc/StdChannels.3: New manpage describing handling of the standard
+ channels by the Tcl library. [Bug 402725]
2001-09-10 Don Porter <dgp@users.sourceforge.net>
- * unix/mkLinks (Tcl_FSLink): Updated to reflect 2001-08-23
- file system changes.
+ * unix/mkLinks (Tcl_FSLink): Updated to reflect 2001-08-23 file system
+ changes.
* unix/tclLoadShl.c: Added #include of tclInt.h; access to Tcl
- internals, notably TclpUnloadFile(), is required. Thanks to
- Bob Techentin for report and patch. [Bug 459305]
+ internals, notably TclpUnloadFile(), is required. Thanks to Bob
+ Techentin for report and patch. [Bug 459305]
* generic/tclInitScript.h (initScript):
* win/tclWinInit.c (TCL_REGISTRY_KEY, TclpSetVariables): Removed
- vestiges of Tcl's old initialization from registry variables.
- [Bug 455645]
+ vestiges of Tcl's old initialization from registry variables. [Bug
+ 455645]
2001-09-10 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclInt.decls: Also added 'TclWinFlushDirtyChannels' to
- the internal platform specific stub table.
+ * generic/tclInt.decls: Also added 'TclWinFlushDirtyChannels' to the
+ internal platform specific stub table.
* win/tclWinFile.c (TclpObjStat): Now added the call to
- 'TclWinFlushDirtyChannels' to this function. I don't know where
- my head was last thursday (2001-09-06), but the call was
- actually added to 'TclpObjChdir', i.e. the implementation of
- [cd]. Corrected this now. Thanks to Vince Darley for spotting
- this.
+ 'TclWinFlushDirtyChannels' to this function. I don't know where my
+ head was last thursday (2001-09-06), but the call was actually added
+ to 'TclpObjChdir', i.e. the implementation of [cd]. Corrected this
+ now. Thanks to Vince Darley for spotting this.
2001-09-10 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclProc.c:
- * tests/proc.test: made [proc] bytecompile a no-op for procs
- defined with _args_ as single argument and an empty body.
- [FQ 451441]
-
+ * tests/proc.test: made [proc] bytecompile a no-op for procs defined
+ with _args_ as single argument and an empty body. [FRQ 451441]
+
2001-09-09 Mo DeJong <mdejong@users.sourceforge.net>
* unix/Makefile.in:
- * win/Makefile.in: Use () around variable name
- instead of {}. Use TCLTEST variable directly
- instead of depending on the tcltest alias.
+ * win/Makefile.in: Use () around variable name instead of {}. Use
+ TCLTEST variable directly instead of depending on the tcltest alias.
2001-09-09 David Gravereaux <davygrvy@pobox.com>
* generic/tcl.h:
- * generic/tclPlatDecls.h: Reminder from David Cuthbert <dacut@kanga.org>
- that I hadn't finished the Borland compatibility stuff.
- [Patch: 436116]
+ * generic/tclPlatDecls.h: Reminder from David Cuthbert
+ <dacut@kanga.org> that I hadn't finished the Borland compatibility
+ stuff. [Patch 436116]
2001-09-09 Mo DeJong <mdejong@users.sourceforge.net>
- * tests/cmdAH.test: Modify cmdAH-20.5 and cmdAH-24.8
- to display the file atime or mtime results if
- the test fails.
+ * tests/cmdAH.test: Modify cmdAH-20.5 and cmdAH-24.8 to display the
+ file atime or mtime results if the test fails.
2001-09-08 David Gravereaux <davygrvy@pobox.com>
* win/mkd.bat:
- * win/rmd.bat: made these text files, text files again.
- [Patch: 451333]
+ * win/rmd.bat: made these text files, text files again. [Patch 451333]
2001-09-08 Mo DeJong <mdejong@users.sourceforge.net>
* win/mkd.bat:
- * win/rmd.bat:
- Apply binary property (cvs admin -kb) to files and convert
- to CRLF linefeed format to fix the VC++ build. [Bug #219409]
+ * win/rmd.bat: Apply binary property (cvs admin -kb) to files and
+ convert to CRLF linefeed format to fix the VC++ build. [Bug 219409]
2001-09-08 Vince Darley <vincentdarley@users.sourceforge.net>
- * generic/tclInt.h:
+ * generic/tclInt.h:
* generic/tclFCmd.c:
* doc/FileSystem.3:
- * generic/tclIOUtil.c: removed Tcl_FSCopyFile fallback
- to channel copying, since the channels will not have
- access to interpreters and the channel copying currently
- requires an interp. Code which required cross-platform
- copies always has interpreters, so that solves the problem.
- Fixes bug in TclKit.
-
+ * generic/tclIOUtil.c: removed Tcl_FSCopyFile fallback to channel
+ copying, since the channels will not have access to interpreters and
+ the channel copying currently requires an interp. Code which required
+ cross-platform copies always has interpreters, so that solves the
+ problem. Fixes bug in TclKit.
+
2001-09-07 David Gravereaux <davygrvy@pobox.com>
- * win/tcl.m4: Added -link50compat option so a VC6 linker makes
- a VC5 (pre sp3) compatible import library.
- [Bug: 219257]
+ * win/tcl.m4: Added -link50compat option so a VC6 linker makes a VC5
+ (pre sp3) compatible import library. [Bug 219257]
2001-09-07 Mo DeJong <mdejong@users.sourceforge.net>
* win/tclWinThrd.c (TclpThreadExit): Cast status argument to
- _endthreadex to unsigned instead of DWORD to match the Win32
- function prototype.
+ _endthreadex to unsigned instead of DWORD to match the Win32 function
+ prototype.
2001-09-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * All the changes below serve to fix bug [219148] which reports a
- 80x performance hit for file I/O on Win* systems. On my system
- it was closer to a 120x hit. Problem report by Uwe Traum <no
- email address available>.
+ * All the changes below serve to fix bug [219148] which reports a 80x
+ performance hit for file I/O on Win* systems. On my system it was
+ closer to a 120x hit. Problem report by Uwe Traum <no email address
+ available>.
- The fix goes like this: The obstacle is 'FlushFileBuffers',
- executed whenever Tcl writes data to the OS, as Tcl has to wait
- for the disk to complete I/O, and disks are slow. We remove that
- obstacle. This opens another problem, [file size] reports back
- wrong numbers. So for [file size] we add the call back in. As
- optimization we keep track of the channels which were written to
- and flush only these.
+ The fix goes like this: The obstacle is 'FlushFileBuffers', executed
+ whenever Tcl writes data to the OS, as Tcl has to wait for the disk to
+ complete I/O, and disks are slow. We remove that obstacle. This opens
+ another problem, [file size] reports back wrong numbers. So for [file
+ size] we add the call back in. As optimization we keep track of the
+ channels which were written to and flush only these.
* win/tclWinFile.c (TclpObjStat): Added a call to
- 'TclWinFlushDirtyChannels'. This ensures that [file size] and
- related commands report the correct size of a file even if Tcl
- has recently written to it. Unixoid OS's always report the
- correct size even for files with pending data, but Win*
- syssystem don't. They only report what is actually on disk.
+ 'TclWinFlushDirtyChannels'. This ensures that [file size] and related
+ commands report the correct size of a file even if Tcl has recently
+ written to it. Unixoid OS's always report the correct size even for
+ files with pending data, but Win* syssystem don't. They only report
+ what is actually on disk.
- * win/tclWinInt.h: Added declaration of
- 'TclWinFlushDirtyChannels', making it available to other parts
- of the tcl core.
+ * win/tclWinInt.h: Added declaration of 'TclWinFlushDirtyChannels',
+ making it available to other parts of the tcl core.
* win/tclWinChan.c (TclWinFlushDirtyChannels): New, internal,
- procedure. Goes through the list of open file channels and
- forces the OS to flush its file buffers for all which were
- written to since the last call of this function. This is an
- expensive operation as Tcl has to wait for the OS to complete
- actual writes to the disk.
+ procedure. Goes through the list of open file channels and forces the
+ OS to flush its file buffers for all which were written to since the
+ last call of this function. This is an expensive operation as Tcl has
+ to wait for the OS to complete actual writes to the disk.
- (FileInfo): Added dirty flag required by the procedure above.
+ (FileInfo): Added dirty flag required by the procedure above.
- (FileOutputProc): Removed flushing of file buffers, setting the
- dirty flag instead. This means that the previously incurred
- delays do not happen anymore.
+ (FileOutputProc): Removed flushing of file buffers, setting the dirty
+ flag instead. This means that the previously incurred delays do not
+ happen anymore.
- (TclWinOpenFileChannel): Added initialization of 'dirty' flag.
+ (TclWinOpenFileChannel): Added initialization of 'dirty' flag.
2001-09-06 Jeff Hobbs <jeffh@ActiveState.com>
@@ -1815,48 +1762,48 @@
* tests/http.test:
* library/http/pkgIndex.tcl:
* library/http/http.tcl (geturl): correctly get charset parameter
- and convert text according to specified encoding (if known). RFC
- iso8859-1 is used by default. Also recognize Content-encoding to
- see if we should do binary translation. Added a CYA -binary
- switch for the cases that were missed. [Bug #219211 #219399]
+ and convert text according to specified encoding (if known). RFC
+ iso8859-1 is used by default. Also recognize Content-encoding to see
+ if we should do binary translation. Added a CYA -binary switch for the
+ cases that were missed. [Bugs 219211, 219399]
* tests/ioUtil.test: changed to make better use of constraints and
remove knownBug constraints that weren't valid.
2001-09-06 Don Porter <dgp@users.sourceforge.net>
- * tests/unixInit.test (unixInit-3.2): Updated test to support
- newer HP-UX releases that properly report euc-jp as the system
- encoding for Japanese. Bug report and patch verification by Bob
- Techentin. [Bug 453883]
+ * tests/unixInit.test (unixInit-3.2): Updated test to support newer
+ HP-UX releases that properly report euc-jp as the system encoding for
+ Japanese. Bug report and patch verification by Bob Techentin. [Bug
+ 453883]
* doc/http.n:
* library/http/*.tcl:
* tools/tcl.wse.in:
* tools/tclmin.wse:
* unix/Makefile.in:
- * win/{Mm}akefile.*: Updated http package to version 2.4,
- reflecting the new features just added.
+ * win/{Mm}akefile.*: Updated http package to version 2.4, reflecting
+ the new features just added.
2001-09-06 Vince Darley <vincentdarley@users.sourceforge.net>
- * generic/tclTest.c: tests of old-fs hooks no longer cause problems
- in threaded builds. Also removed unused unload proc.
+ * generic/tclTest.c: tests of old-fs hooks no longer cause problems in
+ threaded builds. Also removed unused unload proc.
* generic/tcl.decls:
- * generic/tclIOUtilc: added Tcl_FSMountsChanged so that a vfs
- can inform the filesystem that the filesystem epoch must be
- changed (since cached filesystems may now be incorrect). Fixes
- problem running tclvfs extension.
- * library/tcltest/tcltest.tcl: if tests aren't in a native
- filesystem, then don't use pipes to run them. [Bug 458741]
-
+ * generic/tclIOUtilc: added Tcl_FSMountsChanged so that a vfs can
+ inform the filesystem that the filesystem epoch must be changed (since
+ cached filesystems may now be incorrect). Fixes problem running tclvfs
+ extension.
+ * library/tcltest/tcltest.tcl: if tests aren't in a native filesystem,
+ then don't use pipes to run them. [Bug 458741]
+
2001-09-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tcl.decls (479 generic):
- * generic/tclIO.c (Tcl_Seek,Tcl_Tell,Tcl_OutputBuffered): Added
- public function to return the size of the output buffer and
- reworked other channel functions to use this shared functionality
- and that of Tcl_InputBuffered() too. [TIP#49, Rolf Schroedter]
+ * generic/tcl.decls (479 generic):
+ * generic/tclIO.c (Tcl_Seek,Tcl_Tell,Tcl_OutputBuffered): Added public
+ function to return the size of the output buffer and reworked other
+ channel functions to use this shared functionality and that of
+ Tcl_InputBuffered() too. [TIP#49, Rolf Schroedter]
2001-09-05 David Gravereaux <davygrvy@pobox.com>
@@ -1864,39 +1811,36 @@
support.
* win/tclWinPipe.c:
- * win/tclWinPort.h: More Borland compatibility fixes. Changed
- EDQUOT #define from 49 to 69. Borland had a clash as it was already
- using this number. Upon advice from Helmut Giese, EDQUOT has been
- found in other header files #defined as 69.
- [Patch: 436116]
+ * win/tclWinPort.h: More Borland compatibility fixes. Changed EDQUOT
+ #define from 49 to 69. Borland had a clash as it was already using
+ this number. Upon advice from Helmut Giese, EDQUOT has been found in
+ other header files #defined as 69. [Patch 436116]
* win/.cvsignore: A few more glob patterns added.
* win/makefile.bc (new): Borland lives once more! rejoice..
* generic/tclAlloc.c: Small Borland compatibility fix.
- * win/tclWinTime.c: More Borland compatibility fixes.
- [Patch: 436116]
+ * win/tclWinTime.c: More Borland compatibility fixes. [Patch 436116]
2001-09-05 Vince Darley <vincentdarley@users.sourceforge.net>
- * tests/winFCmd.test: made notWin2000 constraint false if not
- running on Windows at all.
-
+ * tests/winFCmd.test: made notWin2000 constraint false if not running
+ on Windows at all.
+
2001-09-04 David Gravereaux <davygrvy@pobox.com>
- * win/tclWinThrd.c: Revisited _beginthreadex() stuff. Instead
- of assuming a c-runtime implimentation of _beginthreadex normal,
- I reversed the logic to not assume, and use when is by explicitly
+ * win/tclWinThrd.c: Revisited _beginthreadex() stuff. Instead of
+ assuming a c-runtime implimentation of _beginthreadex normal, I
+ reversed the logic to not assume, and use when is by explicitly
needing to add runtimes that support it such as Borland.
* generic/tcl.h:
- * generic/tclPlatDecls.h: Borland compatibility change so
- ClientData was properly typed as a void* and TCHAR would not be
- defined twice.
+ * generic/tclPlatDecls.h: Borland compatibility change so ClientData
+ was properly typed as a void* and TCHAR would not be defined twice.
- * generic/tcl.h: Removed a small mistake from before. Changes to
- the EXTERN macro for proper Borland compatibility will have to see
- a TIP. What's this with the MS compiler:
+ * generic/tcl.h: Removed a small mistake from before. Changes to the
+ EXTERN macro for proper Borland compatibility will have to see a TIP.
+ What's this with the MS compiler:
__declspec(dllexport) int func (int a, int b);
@@ -1908,115 +1852,110 @@
2001-09-04 Don Porter <dgp@users.sourceforge.net>
- * compat/strtod.c (strtod): Fixed failure to handle expressions
- like 3eq2 and failure to set errno on overflow. [Bug 440894]
+ * compat/strtod.c (strtod): Fixed failure to handle expressions like
+ 3eq2 and failure to set errno on overflow. [Bug 440894]
2001-09-04 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclProc.c:
- * tests/proc.test: made [proc] check that formal args have
- simple names [Bug 458548]
+ * tests/proc.test: made [proc] check that formal args have simple
+ names. [Bug 458548]
2001-09-04 Vince Darley <vincentdarley@users.sourceforge.net>
- Minor bug fixes in filesystem, plus small vfs changes as a
- result of enabling the test filesystem to work properly.
+ Minor bug fixes in filesystem, plus small vfs changes as a result of
+ enabling the test filesystem to work properly.
* tests/fileName.test: ensure new test cleans up after itself
- * doc/filename.n:
- * generic/tclFileName.c: improved Mac path handling and document
- why [Bug: 421842] on Windows handling of UNC paths is not valid.
- Documentation and code now much clearer on what is and is not a
- UNC path.
+ * doc/filename.n:
+ * generic/tclFileName.c: improved Mac path handling and document why
+ [Bug 421842] on Windows handling of UNC paths is not valid.
+ Documentation and code now much clearer on what is and is not a UNC
+ path.
* doc/FileSystem.3:
* unix/tclUnixPipe.c:
* generic/tclFCmd.c:
- * generic/tclIOUtil.c: fixed error message, fixed [Bug: 453512]
- about dangerous use of tmpnam, replaced with mkstemp.
- Documented all the changes.
- * generic/tclTest.c: made test vfs fully functional as a
- 'reporting filesystem'.
+ * generic/tclIOUtil.c: fixed error message, fixed [Bug 453512] about
+ dangerous use of tmpnam, replaced with mkstemp. Documented all the
+ changes.
+ * generic/tclTest.c: made test vfs fully functional as a 'reporting
+ filesystem'.
* generic/tcl.stubs:
* generic/tcl.h:
- * generic/tclInt.h:
+ * generic/tclInt.h:
* generic/tclIOUtil.c:
* doc/file.n:
- * various platform-specific 'TclpLoadFile': fixed comments about
- unload behaviour, and completed objectification of loading.
- Required change to Tcl_Filesystem lookup table, so incompatible
- with 8.4a3, but not older versions of Tcl. The change also
- allows 'link' and 'reporting' filesystems to function correctly
- when loading files. Implementation of 'file delete -force'
- copes with case where cwd is inside the directory. Moved
- overlooked Tcl_FSGetPathType from internal to external API.
- Made sure filesystems which are registered and then unregistered
- are only freed when all references to them are gone.
+ * various platform-specific 'TclpLoadFile': fixed comments about
+ unload behaviour, and completed objectification of loading. Required
+ change to Tcl_Filesystem lookup table, so incompatible with 8.4a3, but
+ not older versions of Tcl. The change also allows 'link' and
+ 'reporting' filesystems to function correctly when loading files.
+ Implementation of 'file delete -force' copes with case where cwd is
+ inside the directory. Moved overlooked Tcl_FSGetPathType from internal
+ to external API. Made sure filesystems which are registered and then
+ unregistered are only freed when all references to them are gone.
Documented changes.
- * unix/tclUnixFCmd.c: when deleting directories recursively,
- make sure permissions are ok. Together with the above, this
- fixes [Bug: 219139]
- * tests/winFCmd.test: differentiated test results for win2k
- versus not. This fixes [Bug: 219239]
- * tests/fCmd.test: added tests for 'file delete -force' where
- the cwd is inside, and when permissions are inadequate.
-
+ * unix/tclUnixFCmd.c: when deleting directories recursively, make sure
+ permissions are ok. Together with the above, this fixes [Bug 219139]
+ * tests/winFCmd.test: differentiated test results for win2k versus
+ not. This fixes [Bug: 219239]
+ * tests/fCmd.test: added tests for 'file delete -force' where the cwd
+ is inside, and when permissions are inadequate.
+
2001-09-04 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclCompile.c: fixed incorrect operands for INST_LIST
- [Bug: 458241] (David Cuthbert, dacut@users.sourceforge.net)
+ * generic/tclCompile.c: fixed incorrect operands for INST_LIST [Bug
+ 458241] (David Cuthbert, dacut@users.sourceforge.net)
2001-09-03 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclExecute.c (TclExecuteByteCode): fixed missing comma
- in debug macro.
+ * generic/tclExecute.c (TclExecuteByteCode): fixed missing comma in
+ debug macro.
2001-09-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/ExprLongObj.3: Fixed error in documentation of argument type
- to Tcl_ExprObj [Bug: 457435]
+ * doc/ExprLongObj.3: Fixed error in documentation of argument type to
+ Tcl_ExprObj [Bug 457435]
2001-09-02 David Gravereaux <davygrvy@pobox.com>
* win/tclWinThrd.c: Portability fix for Cygwin who's c-runtime,
not surprisingly, doesn't have the MSVCRT specific _beginthreadex /
- _endthreadex pair. This might have to be revisited for proper
- Borland, lcc32, Watcom and other support as well.
- [Patch: 444255]
+ _endthreadex pair. This might have to be revisited for proper Borland,
+ lcc32, Watcom and other support as well. [Patch 444255]
* win/tclWinThrd.c: Moved FinalizeConditionEvent() proto to within
the main #ifdef TCL_THREADS block to avoid mingw warning about it
being there but unused.
- * win/makefile.vc: Added -Zl (zee el) to tclStubLib.c compile line
- to make sure the tclstub84.lib static library is built without
- requiring a specific C-runtime library at link-time for the end-use
- developer. It has been noted on c.l.t that this trips many first
- time users trying to make extensions.
- [Patch: 403533]
+ * win/makefile.vc: Added -Zl (zee el) to tclStubLib.c compile line to
+ make sure the tclstub84.lib static library is built without requiring
+ a specific C-runtime library at link-time for the end-use developer.
+ It has been noted on c.l.t that this trips many first time users
+ trying to make extensions. [Patch 403533]
2001-08-31 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclInt.h: added TclCompileListCmd header
* generic/tclBasic.c: added TclCompileListCmd compile proc
- * generic/tclCompCmds.c (TclCompileListCmd): function to compile
- the 'list' command at parse time.
- * generic/tclExecute.c (TclExecuteByteCode): definition of
- INST_LIST bytecode.
+ * generic/tclCompCmds.c (TclCompileListCmd): function to compile the
+ 'list' command at parse time.
+ * generic/tclExecute.c (TclExecuteByteCode): definition of INST_LIST
+ bytecode.
- * doc/StringObj.3: added words of warning to use Tcl_ResetResult
- with the Tcl_Append* functions.
+ * doc/StringObj.3: added words of warning to use Tcl_ResetResult with
+ the Tcl_Append* functions.
* tests/compile.test: added compile-11.* interp result checks
- * generic/tclUtil.c (TclGetIntForIndex): added Tcl_ResetResult
- before Tcl_AppendStringsToObj to prevent shared object crash when
- called from bcc instruction. The Tcl_Append* calls that append to
- the result object that are invoked by bcc insts must remember to
- call Tcl_ResetResult because the bcc doesn't do this for us.
- [Bug #456892]
+ * generic/tclUtil.c (TclGetIntForIndex): added Tcl_ResetResult before
+ Tcl_AppendStringsToObj to prevent shared object crash when called from
+ bcc instruction. The Tcl_Append* calls that append to the result
+ object that are invoked by bcc insts must remember to call
+ Tcl_ResetResult because the bcc doesn't do this for us. [Bug 456892]
2001-08-30 Jeff Hobbs <jeffh@ActiveState.com>
- * generic/tclIndexObj.c: fixed some casting problems that upset
- Crays. [Bug #419528] (andreasen)
+ * generic/tclIndexObj.c: fixed some casting problems that upset Crays.
+ [Bug 419528] (andreasen)
2001-08-30 Don Porter <dgp@users.sourceforge.net>
@@ -2024,120 +1963,116 @@
2001-08-30 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclExecute.c: allow cached fully-qualified command names
- to be usable from different namespaces within the same interpreter
- without forcing a new lookup. This speeds up scripts that pass
- command names in variables ("this" in some OO packages).
- [Patch 456668].
+ * generic/tclExecute.c: allow cached fully-qualified command names to
+ be usable from different namespaces within the same interpreter
+ without forcing a new lookup. This speeds up scripts that pass command
+ names in variables ("this" in some OO packages). [Patch 456668]
2001-08-30 Vince Darley <vincentdarley@users.sourceforge.net>
- Further fs updates. After examining the most common Tcl
- extensions (TclX, BLT, Tk, TclPro, Mktclapp), it has been
- determined that only TclpGetCwd and the Access/Stat/Open
- insert/delete hooks of the internal fs functions are ever used.
- The remaining functions from Tcl's internal interfaces have
- therefore been removed, since Tcl now exports a more suitable
- public API (Tcl_FS...)
-
+ Further fs updates. After examining the most common Tcl extensions
+ (TclX, BLT, Tk, TclPro, Mktclapp), it has been determined that only
+ TclpGetCwd and the Access/Stat/Open insert/delete hooks of the
+ internal fs functions are ever used. The remaining functions from
+ Tcl's internal interfaces have therefore been removed, since Tcl now
+ exports a more suitable public API (Tcl_FS...)
+
* generic/tclInt.stubs:
- * generic/tclInt.h: updated for removed internal functions.
- Some new internal functions have been put in tclInt.h (and
- not exported in the stub table because good public equivalents
- exist).
- * generic/tclTest.c: some test functions used the internal private
- APIs. These tests have been retained, but modified to use
- public APIs. Also objectified the internal filesystem tests.
- * win/tclWinFile.c: removed TclpStat, TclpAccess and refactored
- code to use NativeAccess, NativeStat. This should speed up
- stat, access and glob commands.
- * win/tclWinFCmd.c: removed all TclpCopy/Rename/Delete
- File/Directory string-based procedures which aren't used any more.
- Improved efficiency of some other procedures. Ensure that filename
- conversions with a NULL interp do not crash Tcl.
+ * generic/tclInt.h: updated for removed internal functions. Some new
+ internal functions have been put in tclInt.h (and not exported in the
+ stub table because good public equivalents exist).
+ * generic/tclTest.c: some test functions used the internal private
+ APIs. These tests have been retained, but modified to use public APIs.
+ Also objectified the internal filesystem tests.
+ * win/tclWinFile.c: removed TclpStat, TclpAccess and refactored code
+ to use NativeAccess, NativeStat. This should speed up stat, access and
+ glob commands.
+ * win/tclWinFCmd.c: removed all TclpCopy/Rename/Delete File/Directory
+ string-based procedures which aren't used any more. Improved
+ efficiency of some other procedures. Ensure that filename conversions
+ with a NULL interp do not crash Tcl.
* mac/tclMacFCmd.c: wrapped long lines and cleaned up
- TclpObjNormalizePath, removed all TclpCopy/Rename/Delete
+ TclpObjNormalizePath, removed all TclpCopy/Rename/Delete
File/Directory string-based procedures which aren't used any more.
* mac/tclMacFile.c: removed obsolete TclpStat, TclpAccess, TclpChdir,
etc.
* unix/tclUnixFCmd.c: removed use of TclpAccess, removed all
TclpCopy/Rename/Delete File/Directory string-based procedures which
aren't used any more.
- * unix/tclUnixFile.c: removed obsolete TclpStat, TclpAccess, TclpChdir,
- etc.
+ * unix/tclUnixFile.c: removed obsolete TclpStat, TclpAccess,
+ TclpChdir, etc.
* tcl(Unix|Mac|Win)Chan.c: objectified TclpOpenFileChannel.
* various 'load' implementations all objectified.
* generic/tclFileName.c: removed redundant code.
* generic/tclIOUtil.c: removed TclStat, TclAccess, TclpListVolumes.
- Fix to MatchInDirectory at the root of a volume. Also improved
- some documentation, and improved default path joining behaviour
- for virtual filesystems, especially regarding '~'.
+ Fix to MatchInDirectory at the root of a volume. Also improved some
+ documentation, and improved default path joining behaviour for virtual
+ filesystems, especially regarding '~'.
* tests/fileName.test: added tests to check for bugs fixed above.
* doc/FileName.3: improved documentation
-
+
2001-08-30 David Gravereaux <davygrvy@pobox.com>
* generic/tclAsync.c:
* generic/tclEvent.c:
* generic/tclInt.h: Improper cleanup of asyncMutex in tclAsync.c
- repaired. TclFinalizeSynchronization() was trying to remove a
- registered mutex that was dumped earlier when the TSD it was stored
- in was cleared. This was only surfacing on *nix. Windows was being
- masked by mutexes not actually being returned to the system! That
- was repaired in a previous patch. Needed to add a private
+ repaired. TclFinalizeSynchronization() was trying to remove a
+ registered mutex that was dumped earlier when the TSD it was stored in
+ was cleared. This was only surfacing on *nix. Windows was being masked
+ by mutexes not actually being returned to the system! That was
+ repaired in a previous patch. Needed to add a private
TclFinalizeAsync() to tclAsync.c and called from Tcl_FinalizeThread().
- Pheww.. Is this done yet?
- [Bug: 414419] requested by Rob Ratcliff <rrr6399@futuretek.com>
+ Pheww.. Is this done yet? [Bug 414419] requested by Rob Ratcliff
+ <rrr6399@futuretek.com>
2001-08-28 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclCompCmds.c (TclPushVarName): noted 'static' defn.
- [Bug #453872]
+ [Bug 453872]
2001-08-26 Don Porter <dgp@users.sourceforge.net>
* library/auto.tcl (tcl_findLibrary):
* tests/unixInit.test (unixInit-2.{1,9}):
* unix/tclUnixInit.c (TclpInitLibraryPath):
- * win/tclWinInit.c (TclpInitLibraryPath): Corrected
- inconsistency between the search path for script libraries and
- the directory name $DISTNAME into which distributions built
- by 'make test' unpack. [Bug 455642]
+ * win/tclWinInit.c (TclpInitLibraryPath): Corrected inconsistency
+ between the search path for script libraries and the directory name
+ $DISTNAME into which distributions built by 'make test' unpack. [Bug
+ 455642]
2001-08-24 Jeff Hobbs <jeffh@ActiveState.com>
* tests/stringComp.test: added string-1.3
* generic/tclCompCmds.c (TclCompileStringCmd): changed to return
TCL_OUT_LINE_COMPILE instead of TCL_ERROR when compiling and an
- unknown string method is called. This is necessary as the string
+ unknown string method is called. This is necessary as the string
command may be never called, or not until 'string' is redefined.
2001-08-24 Vince Darley <vincentdarley@users.sourceforge.net>
* doc/glob.n: documented windows-style path issue with glob.
- [Bug: 219392]
+ [Bug 219392]
* doc/filename.n: documented windows path/file length limitation.
- [Bug: 454597]
+ [Bug 454597]
2001-08-24 Don Porter <dgp@users.sourceforge.net>
- * tests/unixInit.test (unixInit-2.9): Corrected expected result
- to match Tcl's quirky construction of its init library path.
+ * tests/unixInit.test (unixInit-2.9): Corrected expected result to
+ match Tcl's quirky construction of its init library path.
2001-08-23 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * win/tclWinPipe.c (BuildCommandLine): Fixed tcl Bug
- [432499]. Part of the code used the non-absolute path to the
- executable to determine quoting. This failed if the absolute
- path contained spaces, but the application name itself not. This
- bug caused no trouble on Win NT 5, but does for other variants
- in the Win* family. Report and fix due to Ken Poole
- <kenpoole@users.sourceforge.net>.
+ * win/tclWinPipe.c (BuildCommandLine): Fixed [Bug 432499]. Part of the
+ code used the non-absolute path to the executable to determine
+ quoting. This failed if the absolute path contained spaces, but the
+ application name itself not. This bug caused no trouble on Win NT 5,
+ but does for other variants in the Win* family. Report and fix due to
+ Ken Poole <kenpoole@users.sourceforge.net>.
2001-08-23 Jeff Hobbs <jeffh@ActiveState.com>
* unix/configure:
- * unix/tcl.m4: added QNX-6 build support. [Bug #219410] (loverso)
+ * unix/tcl.m4: added QNX-6 build support. [Bug 219410] (loverso)
* unix/tclUnixFCmd.c:
* generic/tclIOUtil.c:
@@ -2145,97 +2080,93 @@
2001-08-23 Vince Darley <vincentdarley@users.sourceforge.net>
- Variety of small filesystem and vfs issues fixed or improved.
- The new fs code allows many new opportunities for efficiency
- improvements through the objectified API. The main changes
- integrated here are such efficiency improvements. Some
- limitations of the original implementation have also now been
- lifted. Meanwhile a variety of fs bugs (some old, some new)
- have also been fixed.
-
- * generic/tclFileName.c: Made Tcl_FSSplitPath more efficient,
- and removed some static string-based procedures which are no
- longer used. Much more objectification. Tcl_FSJoinPath
- is now very efficient and more aware of virtual filesystems.
- Clarified where the Mac-specific code attempts to interpret
- Unix-style paths. Modified TclDoGlob to use lstat not
- access to fix [Bug: 434876, L. Virden]
+ Variety of small filesystem and vfs issues fixed or improved. The new
+ fs code allows many new opportunities for efficiency improvements
+ through the objectified API. The main changes integrated here are such
+ efficiency improvements. Some limitations of the original
+ implementation have also now been lifted. Meanwhile a variety of fs
+ bugs (some old, some new) have also been fixed.
+
+ * generic/tclFileName.c: Made Tcl_FSSplitPath more efficient, and
+ removed some static string-based procedures which are no longer used.
+ Much more objectification. Tcl_FSJoinPath is now very efficient and
+ more aware of virtual filesystems. Clarified where the Mac-specific
+ code attempts to interpret Unix-style paths. Modified TclDoGlob to use
+ lstat not access to fix [Bug 434876] (L. Virden)
+
* tcl(Win|Unix|Mac)FCmd.c:
* tcl(Win|Unix|Mac)File.c: replaced TclpListVolumes with
- TclpObjListVolumes with different signature, updated code due
- to more efficient signature of Tcl_FSGetTranslatedPath. Used
- cached native paths where possible to improve efficiency --
- this was completed on MacOS, but on Unix and Win the traversal
- functions make the task much more complex, so there are still
- some improvements possible there. Removed unused
- TclpNormalizePath which had been left in tclWinFCmd.c.
- Objectified all 'file attributes' functions. Fixed the new
- [Bug:451571, Bruce Stephens] which is most obvious on Unix,
- but could occur on MacOS or Windows. This bug actually existed
- in Tcl 8.3.x but was only made obvious by the recent filesystem
- overhaul when the code was exercised more heavily.
- * tests/fileName.test: Three new tests to exercise the above bug,
- and make sure it is fixed correctly.
- * unix/tclUnixFile.c: avoid panic in glob when a link
- doesn't point anywhere. It would probably be good to define
- exactly what Tcl should do in circumstances like these, and
- make sure mac/win/unix all behave accordingly. [Bug: 417111,
- Hemang Lavana]. Also fixed misleading/obsolete comment in the code.
- * generic/tcl.stubs: changed signature of Tcl_FSGetTranslatedPath
- and added Tcl_FSGetTranslatedStringPath.
+ TclpObjListVolumes with different signature, updated code due to more
+ efficient signature of Tcl_FSGetTranslatedPath. Used cached native
+ paths where possible to improve efficiency -- this was completed on
+ MacOS, but on Unix and Win the traversal functions make the task much
+ more complex, so there are still some improvements possible there.
+ Removed unused TclpNormalizePath which had been left in tclWinFCmd.c.
+ Objectified all 'file attributes' functions. Fixed the new [Bug
+ 451571, Bruce Stephens] which is most obvious on Unix, but could occur
+ on MacOS or Windows. This bug actually existed in Tcl 8.3.x but was
+ only made obvious by the recent filesystem overhaul when the code was
+ exercised more heavily.
+ * tests/fileName.test: Three new tests to exercise the above bug, and
+ make sure it is fixed correctly.
+ * unix/tclUnixFile.c: avoid panic in glob when a link doesn't point
+ anywhere. It would probably be good to define exactly what Tcl should
+ do in circumstances like these, and make sure mac/win/unix all behave
+ accordingly. [Bug 417111] (Hemang Lavana). Also fixed
+ misleading/obsolete comment in the code.
+ * generic/tcl.stubs: changed signature of Tcl_FSGetTranslatedPath and
+ added Tcl_FSGetTranslatedStringPath.
These changes allow further optimisations in the FS code.
- * generic/tcl.h: changed signature of Tcl_FSListVolumes so that
- it doesn't require a Tcl interpreter plus result. Renamed
- Tcl_FSReadLink to Tcl_FSLink with additional argument so
- we can support making links in the future. [Patch: 450340]
- * generic/tclInt.h:
- added declaration for TclpObjListVolumes. Objectified
- internal call signatures for 'file attributes' functions, and
- added an internal objectified get path type function.
- * generic/tclIOUtil.c: added the moved function TclpListVolumes
- which calls platform specific code (needed for backwards
- compatibility), and improved efficiency of parts of the FS
- (particularly file normalization). Much less copying and
- memory allocation is required now. added new GetPathType
- so that changes in 'file volumes' can actually affect files'
- types, and objectified more code. Made current code work
- with test suite artificially changing current platform.
+ * generic/tcl.h: changed signature of Tcl_FSListVolumes so that it
+ doesn't require a Tcl interpreter plus result. Renamed Tcl_FSReadLink
+ to Tcl_FSLink with additional argument so we can support making links
+ in the future. [Patch: 450340]
+ * generic/tclInt.h: added declaration for TclpObjListVolumes.
+ Objectified internal call signatures for 'file attributes' functions,
+ and added an internal objectified get path type function.
+ * generic/tclIOUtil.c: added the moved function TclpListVolumes which
+ calls platform specific code (needed for backwards compatibility), and
+ improved efficiency of parts of the FS (particularly file
+ normalization). Much less copying and memory allocation is required
+ now. added new GetPathType so that changes in 'file volumes' can
+ actually affect files' types, and objectified more code. Made current
+ code work with test suite artificially changing current platform.
Added 'static' keywords where required.
* generic/tclIO.c:
- * generic/tclTest.c: Added 'static' keywords, fixing
- [Bug: 453872, Bob Techentin]
- * generic/tclCmdAH.c: file command implementation updated for
- API changes, removed unnecessary special-case SplitPath static
- function, since it no longer helps prevent code duplication.
- Moved setting of interpreter result to each individual location
- that actually required it, to avoid very large code separation
- between reading and setting the result.
- * doc/FileSystem.3: updated documentation for the new or
- changed APIs, and clarified some issues.
+ * generic/tclTest.c: Added 'static' keywords, fixing [Bug 453872] (Bob
+ Techentin)
+ * generic/tclCmdAH.c: file command implementation updated for API
+ changes, removed unnecessary special-case SplitPath static function,
+ since it no longer helps prevent code duplication. Moved setting of
+ interpreter result to each individual location that actually required
+ it, to avoid very large code separation between reading and setting
+ the result.
+ * doc/FileSystem.3: updated documentation for the new or changed APIs,
+ and clarified some issues.
* doc/SplitPath.3: added pointer to newer APIs in FileSystem.3
- * doc/filename.n: clarified current implementation of tilde
- support on Mac/Win. [Bug:453514, Sergey Kuzmin]
- * doc/glob.n: improved documentation for '-directory' and '-path'
+ * doc/filename.n: clarified current implementation of tilde support on
+ Mac/Win. [Bug 453514] (Sergey Kuzmin)
+ * doc/glob.n: improved documentation for '-directory' and '-path'
options.
-
- There are now many private, obsolete, platform-specific 'Tclp'
- string-based filesystem APIs which could be removed. We should
- check whether any of these are used by extensions and, at least
- in Tcl 9, remove them.
-
- The above changes signify a ***POTENTIAL INCOMPATIBILITY***
- with 8.4a3, since signatures of two functions in the new API
- have changed, but not with older versions of Tcl.
+
+ There are now many private, obsolete, platform-specific 'Tclp'
+ string-based filesystem APIs which could be removed. We should check
+ whether any of these are used by extensions and, at least in Tcl 9,
+ remove them.
+
+ The above changes signify a ***POTENTIAL INCOMPATIBILITY*** with
+ 8.4a3, since signatures of two functions in the new API have changed,
+ but not with older versions of Tcl.
2001-08-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclBinary.c (FormatNumber): Extract a long from the
- object and not an int, to stop [binary format] from being unable
- to format some input numbers on architectures where sizeof(int) is
- less than sizeof(long) (particularly Alpha.) [tiprender Bug #441861]
+ * generic/tclBinary.c (FormatNumber): Extract a long from the object
+ and not an int, to stop [binary format] from being unable to format
+ some input numbers on architectures where sizeof(int) is less than
+ sizeof(long) (particularly Alpha). [tiprender Bug 441861]
- * tests/format.test: Converted conditional execution of tests into
- a test constraint.
+ * tests/format.test: Converted conditional execution of tests into a
+ test constraint.
2001-08-22 Jeff Hobbs <jeffh@ActiveState.com>
@@ -2243,90 +2174,88 @@
* win/makefile.vc: updated install target for dde1.2
* doc/dde.n: fixed dde man page (which was totally incorrect).
* tests/winDde.test:
- * win/tclWinDde.c (Tcl_DdeObjCmd): added -binary option to dde
- request command to allow for returning binary data. [Bug #227482]
+ * win/tclWinDde.c (Tcl_DdeObjCmd): added -binary option to dde request
+ command to allow for returning binary data. [Bug 227482]
Updated dde to 1.2
- * tests/tcltest.test: added unixExecs constraint to files that
- used 'grep' in the test. [Bug #453143]
+ * tests/tcltest.test: added unixExecs constraint to files that used
+ 'grep' in the test. [Bug 453143]
+
+ * library/tcltest/tcltest.tcl: fixed stdio constraint test. [Patch
+ 454050] (stanton)
+ Simplified unixExecs constraint test.
- * library/tcltest/tcltest.tcl: fixed stdio constraint test.
- [Patch #454050] (stanton)
- Simplified unixExecs constraint test.
-
2001-08-22 Don Porter <dgp@users.sourceforge.net>
- * tests/ioUtil.test (ioUtil-3.*): Corrected errors in tests
- revealed by fix of overagressive compiler. [Bug 451200]
+ * tests/ioUtil.test (ioUtil-3.*): Corrected errors in tests revealed
+ by fix of overagressive compiler. [Bug 451200]
2001-08-21 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclCompCmds.c:
- * tests/compile.test: Fixed overagressive compilation of [catch]:
- it was catching errors at substitution time. [Bug #219184]
-
+ * tests/compile.test: Fixed overagressive compilation of [catch]: it
+ was catching errors at substitution time. [Bug 219184]
+
2001-08-21 Jeff Hobbs <jeffh@ActiveState.com>
- * tests/tcltest.test (tcltest-12.2): fixed test that would break
- when env vars weren't Tcl list friendly [Patch #454046] (stanton)
+ * tests/tcltest.test (tcltest-12.2): fixed test that would break when
+ env vars weren't Tcl list friendly [Patch 454046] (stanton)
2001-08-20 Jeff Hobbs <jeffh@ActiveState.com>
- * library/http/http.tcl (geturl): added port number to Host:
- header to comply with HTTP/1.1 spec (RFC 2068). [Bug #452217]
+ * library/http/http.tcl (geturl): added port number to Host: header to
+ comply with HTTP/1.1 spec (RFC 2068). [Bug 452217]
2001-08-16 David Gravereaux <davygrvy@pobox.com>
* tools/tcl.wse.in:
* tools/tcl.hpj.in:
* win/tcl.hpj.in: Removed -kb storage in CVS to ensure these text
- files are checked-out in the translation mode CVS is in. Setting
- these as binary as part of an effort to make sure they are always
- in CRLF, no matter what the CVS translation, is bypassing how CVS
- works and is confusing.
+ files are checked-out in the translation mode CVS is in. Setting these
+ as binary as part of an effort to make sure they are always in CRLF,
+ no matter what the CVS translation, is bypassing how CVS works and is
+ confusing.
- * tools/genStubs.tcl: Removed LF-only output. Having to reconvert
- back to CRLF before committing to CVS was giving me a headache.
- [Bug: 451333]
+ * tools/genStubs.tcl: Removed LF-only output. Having to reconvert
+ back to CRLF before committing to CVS was giving me a headache. [Bug
+ 451333]
* win/makefile.vc: replaced $(WINDIR) with $(include32) for the
- .rc.res inference rule. winver.h wasn't getting included.
- [Bug: 445630]
+ .rc.res inference rule. winver.h wasn't getting included. [Bug 445630]
2001-08-14 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclBasic.c: make the intial maxNestingDepth of an
- interpreter be MAX_NESTING_DEPTH instead of a hardwired value
- [Bug: 232564]
+ interpreter be MAX_NESTING_DEPTH instead of a hardwired value. [Bug
+ 232564]
2001-08-13 Miguel Sofer <msofer@users.sourceforge.net>
- * tests/trace.test: Corrected test numbers [Bug: 449794]
+ * tests/trace.test: Corrected test numbers. [Bug 449794]
2001-08-12 Mo DeJong <mdejong@redhat.com>
* unix/configure: Regen.
* unix/configure.in:
- * unix/tcl.m4: Use GCC variable set by AC_PROG_CC instead
- of defining our own using_gcc variable.
+ * unix/tcl.m4: Use GCC variable set by AC_PROG_CC instead of defining
+ our own using_gcc variable.
2001-08-11 Vince Darley <vincentdarley@users.sourceforge.net>
Variety of small issues introduced by the vfs code fixed:
* generic/tclIOUtil.c: uninitialised read.
- * generic/tclFCmd.c: possible memory leak in file delete
- with error condition.
+ * generic/tclFCmd.c: possible memory leak in file delete with error
+ condition.
2001-08-10 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclVar.c:
+ * generic/tclVar.c:
* tests/trace.test: Insure that [array] traces work correctly for
- undefined variables [Bug: 449094]
+ undefined variables. [Bug 449094]
2001-08-09 Mo DeJong <mdejong@redhat.com>
- * unix/Makefile.in: Delete the unused getcwd.o
- target. This fixes bug #440942.
+ * unix/Makefile.in: Delete the unused getcwd.o target. [Bug 440942]
2001-08-08 Don Porter <dgp@users.sourceforge.net>
@@ -2340,8 +2269,8 @@
* library/reg/pkgIndex.tcl:
* library/tcltest/tcltest.tcl:
* library/tcltest/pkgIndex.tcl: Added checks for package dependencies.
- Bumped patchlevels of changed packages: http 2.3.2, msgcat 1.2.2,
- opt 0.4.3, tcltest 2.0.1. [Patch 448931]
+ Bumped patchlevels of changed packages: http 2.3.2, msgcat 1.2.2,
+ opt 0.4.3, tcltest 2.0.1. [Patch 448931]
* README:
* generic/tcl.h:
@@ -2351,9 +2280,9 @@
* unix/tcl.spec:
* win/README.binary:
* win/configure:
- * win/configure.in: Bumped up patchlevel to 8.4a4 to distinguish
- CVS snapshots from the 8.4a3 release. This does not necessarily
- mean there will be an 8.4a4 release. [Bug 448938].
+ * win/configure.in: Bumped up patchlevel to 8.4a4 to distinguish CVS
+ snapshots from the 8.4a3 release. This does not necessarily mean there
+ will be an 8.4a4 release. [Bug 448938]
2001-08-06 Jeff Hobbs <jeffh@ActiveState.com>
@@ -2361,64 +2290,63 @@
* changes:
* README:
- * mac/README:
+ * mac/README:
* unix/README:
* win/README.binary: updated for 8.4a3 release
- * generic/tclFileName.c (Tcl_FSSplitPath): update to Tcl style
- guide.
+ * generic/tclFileName.c (Tcl_FSSplitPath): update to Tcl style guide.
- * generic/tclFCmd.c (FileCopyRename): fixed mem leak in
- introduction of vfs code where a new Tcl_Obj wasn't freed.
+ * generic/tclFCmd.c (FileCopyRename): fixed mem leak in introduction
+ of vfs code where a new Tcl_Obj wasn't freed.
- * generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd):
- reordered the retrieval of arguments to avoid shimmering bug when
- the pattern and string referenced the same object.
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd, Tcl_RegsubObjCmd): reordered
+ the retrieval of arguments to avoid shimmering bug when the pattern
+ and string referenced the same object.
* unix/configure: regenerated
- * unix/tcl.m4: added GNU (HURD) configuration target. (brinkmann)
- [Patch: #442974]
+ * unixE/tcl.m4: added GNU (HURD) configuration target.
+ [Patch 442974] (brinkmann)
* win/README: made note of URL for Windows compilation notes
- * win/tclWinThrd.c (TclpFinalizeMutex, TclpFinalizeCondition):
- added DeleteCriticalSection calls for cleanup [Patch: #419683]
+ * win/tclWinThrd.c (TclpFinalizeMutex, TclpFinalizeCondition): added
+ DeleteCriticalSection calls for cleanup [Patch 419683]
* unix/tclUnixPipe.c (TclpCreateTempFile): fixed use of tmpnam,
- which is dangerous. [Patch: #442636] (lim)
+ which is dangerous. [Patch 442636] (lim)
The use of tmpnam in TclpTempFileName must still be changed.
* tests/http.test (http-4.14): fixed variable error return.
- [Bug: 424252]
+ [Bug 424252]
2001-08-03 Jeff Hobbs <jeffh@ActiveState.com>
* win/configure: regenerated
* win/tcl.m4: fixed DLLSUFFIX definition to always be ${DBGX}.dll.
- This is necessary for TEA compliant builds that build shared
- against a static-built Tcl.
+ This is necessary for TEA compliant builds that build shared against a
+ static-built Tcl.
* win/Makefile.in ($(TCLSH)): added $(TCL_STUB_LIB_FILE) to build
target, otherwise it wouldn't get generated in a static build.
2001-08-06 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclIOCmd.c (Tcl_GetsObjCmd): Applied patch from SF item
- [442665] to fix the bug reported by it. The function can corrupt
- a freed object if it is called with objc == 3. This is because
- it retrieves resultPtr and does not increment its reference
- count, but then calls Tcl_ObjSetVar2, which causes the retrieved
- resultPtr object to be released.
-
+ * generic/tclIOCmd.c (Tcl_GetsObjCmd): Applied patch from [Bug 442665]
+ to fix the bug reported by it. The function can corrupt a freed object
+ if it is called with objc == 3. This is because it retrieves resultPtr
+ and does not increment its reference count, but then calls
+ Tcl_ObjSetVar2, which causes the retrieved resultPtr object to be
+ released.
+
2001-08-06 Don Porter <dgp@users.sourceforge.net>
- * doc/tclsh.1: Added note that the tclsh program is frequently
- installed with the Tcl version numer as part of the name.
- [Patch 402725]
+ * doc/tclsh.1: Added note that the tclsh program is frequently
+ installed with the Tcl version numer as part of the name. [Patch
+ 402725]
* generic/tclPkg.c:
- * tests/pkg.test: [package forget] now forgets all of the
- package arguments it receives, not stopping when a package is
- not found. [Bug 415273]
+ * tests/pkg.test: [package forget] now forgets all of the package
+ arguments it receives, not stopping when a package is not found. [Bug
+ 415273]
2001-08-02 Jeff Hobbs <jeffh@ActiveState.com>
@@ -2428,141 +2356,133 @@
2001-08-02 Mo DeJong <mdejong@redhat.com>
* generic/tclPlatDecls.h:
- * win/tclWinPort.h:
- Revert <tchar.h> related changes made to improve
- Cygwin support on 2001-07-18. This change ended
- up breaking the VC++ build because of conflicts
- between Windows APIs and internal Tk APIs.
+ * win/tclWinPort.h: Revert <tchar.h> related changes made to improve
+ Cygwin support on 2001-07-18. This change ended up breaking the VC++
+ build because of conflicts between Windows APIs and internal Tk APIs.
2001-08-01 Jeff Hobbs <jeffh@ActiveState.com>
* unix/tclUnixFCmd.c: minor casts to eliminate warnings. (lim)
- [Patch: #440218]
+ [Patch 440218]
- * tests/parseOld.test: changed some tests that required
- testwordend to exist to skip in a proper tcltest manner.
- [Bug: #442663]
+ * tests/parseOld.test: changed some tests that required testwordend to
+ exist to skip in a proper tcltest manner. [Bug 442663]
- * library/http/http.tcl (http::mapReply): the regsub'ing of \n and
- \t to escape them was unnecessary.
+ * library/http/http.tcl (http::mapReply): the regsub'ing of \n and \t
+ to escape them was unnecessary.
2001-07-31 Vince Darley <vincentdarley@users.sourceforge.net>
Changes from TIP#17 "Redo Tcl's filesystem"
The following files were impacted:
- * doc/Access.3:
- * doc/FileSystem.3:
- * doc/OpenFileChnl.3:
- * doc/file.n:
- * doc/glob.n:
- * generic/tcl.decls:
- * generic/tcl.h:
- * generic/tclCmdAH.c:
- * generic/tclCmdIL.c:
- * generic/tclCmdMZ.c:
- * generic/tclDate.c:
- * generic/tclDecls.h:
- * generic/tclEncoding.c:
- * generic/tclFCmd.c:
- * generic/tclFileName.c:
- * generic/tclGetDate.y:
- * generic/tclIO.c:
- * generic/tclIOCmd.c:
- * generic/tclIOUtil.c:
- * generic/tclInt.decls:
- * generic/tclInt.h:
- * generic/tclIntDecls.h:
- * generic/tclLoad.c:
- * generic/tclStubInit.c:
- * generic/tclTest.c:
- * generic/tclUtil.c:
- * library/init.tcl:
- * mac/tclMacFCmd.c:
- * mac/tclMacFile.c:
- * mac/tclMacInit.c:
- * mac/tclMacPort.h:
- * mac/tclMacResource.c:
- * mac/tclMacTime.c:
- * tests/cmdAH.test:
- * tests/event.test:
- * tests/fCmd.test:
- * tests/fileName.test:
- * tests/io.test:
- * tests/ioCmd.test:
- * tests/proc-old.test:
- * tests/registry.test:
- * tests/unixFCmd.test:
- * tests/winDde.test:
- * tests/winFCmd.test:
- * unix/mkLinks:
- * unix/tclUnixFCmd.c:
- * unix/tclUnixFile.c:
- * unix/tclUnixInit.c:
- * unix/tclUnixPipe.c:
- * win/tclWinFCmd.c:
- * win/tclWinFile.c:
- * win/tclWinInit.c:
- * win/tclWinPipe.c
+ * doc/Access.3:
+ * doc/FileSystem.3:
+ * doc/OpenFileChnl.3:
+ * doc/file.n:
+ * doc/glob.n:
+ * generic/tcl.decls:
+ * generic/tcl.h:
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclDate.c:
+ * generic/tclDecls.h:
+ * generic/tclEncoding.c:
+ * generic/tclFCmd.c:
+ * generic/tclFileName.c:
+ * generic/tclGetDate.y:
+ * generic/tclIO.c:
+ * generic/tclIOCmd.c:
+ * generic/tclIOUtil.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclLoad.c:
+ * generic/tclStubInit.c:
+ * generic/tclTest.c:
+ * generic/tclUtil.c:
+ * library/init.tcl:
+ * mac/tclMacFCmd.c:
+ * mac/tclMacFile.c:
+ * mac/tclMacInit.c:
+ * mac/tclMacPort.h:
+ * mac/tclMacResource.c:
+ * mac/tclMacTime.c:
+ * tests/cmdAH.test:
+ * tests/event.test:
+ * tests/fCmd.test:
+ * tests/fileName.test:
+ * tests/io.test:
+ * tests/ioCmd.test:
+ * tests/proc-old.test:
+ * tests/registry.test:
+ * tests/unixFCmd.test:
+ * tests/winDde.test:
+ * tests/winFCmd.test:
+ * unix/mkLinks:
+ * unix/tclUnixFCmd.c:
+ * unix/tclUnixFile.c:
+ * unix/tclUnixInit.c:
+ * unix/tclUnixPipe.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclWinInit.c:
+ * win/tclWinPipe.c:
2001-07-24 Mo DeJong <mdejong@redhat.com>
- * win/tclWinThrd.c (Tcl_CreateThread): Close Windows
- HANDLE returned by _beginthreadex. The MS documentation
- states that this handle is not closed by a later call to
- _endthreadex.
+ * win/tclWinThrd.c (Tcl_CreateThread): Close Windows HANDLE returned
+ by _beginthreadex. The MS documentation states that this handle is not
+ closed by a later call to _endthreadex.
2001-07-21 Don Porter <dgp@users.sourceforge.net>
* doc/pkgMkindex.n:
- * library/package.tcl: Corrected documentation and usage
- message of [pkg_mkIndex].
+ * library/package.tcl: Corrected documentation and usage message of
+ [pkg_mkIndex].
2001-07-18 Mo DeJong <mdejong@redhat.com>
- * generic/tclPlatDecls.h: Define TCHAR by including
- windows.h instead of tchar.h since Cygwin does not
- support the tchar.h header. Include CHECK_UNICODE_CALLS
- logic from tclWinPort.h.
- * win/tclWinPort.h: Remove CHECK_UNICODE_CALLS logic.
- Remove include of windows.h since this now done it
- tclPlatDecls.h.
+ * generic/tclPlatDecls.h: Define TCHAR by including windows.h instead
+ of tchar.h since Cygwin does not support the tchar.h header. Include
+ CHECK_UNICODE_CALLS logic from tclWinPort.h.
+ * win/tclWinPort.h: Remove CHECK_UNICODE_CALLS logic. Remove include
+ of windows.h since this now done it tclPlatDecls.h.
* win/tclWinReg.c: Remove duplicate include of windows.h.
2001-07-18 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclIO.c: Aftermath to [SF #427196]. Squash empty buffers
- if they are smaller than the requested buffersize, to prevent
- reusage of old buffers and to honor changes in the requested
- buffersize made by the user.
+ * generic/tclIO.c: Aftermath to [Bug 427196]. Squash empty buffers if
+ they are smaller than the requested buffersize, to prevent reusage of
+ old buffers and to honor changes in the requested buffersize made by
+ the user.
2001-07-17 Mo DeJong <mdejong@redhat.com>
- * win/tclWinFile.c (TclpReadlink): Add Cygwin specific definition
- for the TclpReadlink function. This method implements reading of
- symbolic links when build with Cygwin.
+ * win/tclWinFile.c (TclpReadlink): Add Cygwin specific definition for
+ the TclpReadlink function. This method implements reading of symbolic
+ links when build with Cygwin.
2001-07-17 Mo DeJong <mdejong@redhat.com>
- * win/tclWinPort.h: Add Cygwin specific defines for environ
- and timezone variables.
+ * win/tclWinPort.h: Add Cygwin specific defines for environ and
+ timezone variables.
2001-07-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * generic/tclIO.c (GetInput): Fixed [SF #427196]. Memory was
- overwritten because a buffer was used after a change of the
- requested buffersize together with that requested buffersize and
- not its actual size, which was smaller. Note that the continous
- reuse of the smaller buffer negatively impacts performance. The
- system never allocates a buffer with the newly requested bigger
- buffersize.
+ * generic/tclIO.c (GetInput): Fixed [Bug 427196]. Memory was
+ overwritten because a buffer was used after a change of the requested
+ buffersize together with that requested buffersize and not its actual
+ size, which was smaller. Note that the continous reuse of the smaller
+ buffer negatively impacts performance. The system never allocates a
+ buffer with the newly requested bigger buffersize.
2001-07-16 Mo DeJong <mdejong@redhat.com>
- * generic/tcl.h: Define __WIN32__ when
- __CYGWIN__ or __MINGW32__ is defined.
- * generic/tclAlloc.c: Define caddr_t when
- compiling with VC++ or mingw. This type is
- already defined when compiling with Cygwin.
+ * generic/tcl.h: Define __WIN32__ when __CYGWIN__ or __MINGW32__ is
+ defined.
+ * generic/tclAlloc.c: Define caddr_t when compiling with VC++ or
+ mingw. This type is already defined when compiling with Cygwin.
2001-07-16 Mo DeJong <mdejong@redhat.com>
@@ -2571,9 +2491,9 @@
* win/tclWinPort.h:
* win/tclWinSerial.c:
* win/tclWinThrd.c:
- Remove unnecessary #includes of dos.h, direct.h,
- and tchar.h. This will help the Cygwin porting
- effort since these headers do not exist under Cygwin.
+ Remove unnecessary #includes of dos.h, direct.h, and tchar.h. This
+ will help the Cygwin porting effort since these headers do not exist
+ under Cygwin.
2001-07-16 Jeff Hobbs <jeffh@ActiveState.com>
@@ -2581,74 +2501,70 @@
just the TerminateThread call and waiting for termination. (jsmith)
* generic/tclCmdMZ.c: Removed extra copy of the SCAN_* macros
- #defined in generic/tclScan.c. (porter) [Bug 441230]
+ #defined in generic/tclScan.c. [Bug 441230] (porter)
2001-07-12 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/unixInit.test (unixInit-2.8): Added extra constraint,
- notInstalledInTmp, to stop this test from damaging installations
- in /tmp; not much fun to have to reinstall the Tcl library every
- time you run the test suite!
+ notInstalledInTmp, to stop this test from damaging installations in
+ /tmp; not much fun to have to reinstall the Tcl library every time you
+ run the test suite!
- * tests/subst.test (subst-10.*): Updated tests to check new
- behaviour for 'break' in command substitutions.
+ * tests/subst.test (subst-10.*): Updated tests to check new behaviour
+ for 'break' in command substitutions.
(subst-1.2,subst-7.1): Error messages changed.
* doc/SubstObj.3: New file, to document Tcl_SubstObj.
- * doc/subst.n: Improved and updated documentation for 'subst' to
- help support the changed behaviour.
+ * doc/subst.n: Improved and updated documentation for 'subst' to help
+ support the changed behaviour.
* generic/tcl.decls (generic-437): Declaration for Tcl_SubstObj
* generic/tcl.h (TCL_SUBST_*): Added flags for Tcl_SubstObj.
- * generic/tclCmdMZ.c (Tcl_SubstObj,Tcl_SubstObjCmd): Divided into
- two parts to allow people to access the innards of 'subst' and
- changed the behaviour when command substitutions do a 'break' to
- be different from 'continue'. Also now works with objects, which
- allows for some nifty optimisations with variable substitutions
- and a slight improvement with command substitutions. [TIP#36]
+ * generic/tclCmdMZ.c (Tcl_SubstObj,Tcl_SubstObjCmd): Divided into two
+ parts to allow people to access the innards of 'subst' and changed the
+ behaviour when command substitutions do a 'break' to be different from
+ 'continue'. Also now works with objects, which allows for some nifty
+ optimisations with variable substitutions and a slight improvement
+ with command substitutions. [TIP#36]
2001-07-10 Mo DeJong <mdejong@redhat.com>
* unix/Makefile.in: Add AR variable for use in STLIB_LD.
* unix/configure: Regen.
- * unix/configure.in: Use STLIB_LD when defining MAKE_LIB
- and MAKE_STUB_LIB. Subst RANLIB and AR.
- * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add doc comment about
- STLIB_LD command. Check ${AR} env var when setting
- STLIB_LD and delay evaluation until make time.
+ * unix/configure.in: Use STLIB_LD when defining MAKE_LIB and
+ MAKE_STUB_LIB. Subst RANLIB and AR.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add doc comment about STLIB_LD
+ command. Check ${AR} env var when setting STLIB_LD and delay
+ evaluation until make time.
* win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Delay evaluation of
- ${AR} in STLIB_LD and add flags to better match the
- Unix implementation. Don't bother defining AR when
- using VC++ since it is not used.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Delay evaluation of ${AR} in STLIB_LD
+ and add flags to better match the Unix implementation. Don't bother
+ defining AR when using VC++ since it is not used.
2001-07-06 Mo DeJong <mdejong@redhat.com>
* win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Pass -e _WinMain@16 in
- addition to the -mwindows flag to work around a problem
- with ld when it incorrectly use main() as the executable
- entry point when both WinMain() and main() are available.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Pass -e _WinMain@16 in addition to
+ the -mwindows flag to work around a problem with ld when it
+ incorrectly use main() as the executable entry point when both
+ WinMain() and main() are available.
2001-07-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/cmdAH.test: Added leading zero to file modes to work
- around fault in HPUX strtol() which ignores the base parameter
- [Bug #438808]
+ * tests/cmdAH.test: Added leading zero to file modes to work around
+ fault in HPUX strtol() which ignores the base parameter. [Bug 438808]
2001-07-05 Mo DeJong <mdejong@redhat.com>
- * win/Makefile.in: Subst DEPARG directly instead
- of relying on a variable. This will make Cygwin
- builds faster since an extra exec will be avoided.
+ * win/Makefile.in: Subst DEPARG directly instead of relying on a
+ variable. This will make Cygwin builds faster since an extra exec will
+ be avoided.
* win/configure: Regen.
* win/configure.in: Subst DEPARG.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Move AC_MSG_CHECKING
- after the AC_CHECK_PROG so that status messages do
- not get mixed together. Set DEPARG based on the
- results of the cygpath check so that we avoid using
- an extra exec when it is not needed. Use ac_cv_cygwin
- status flag instead of looking at the output of
- gcc -v, which works in the case where -mno-cygwin is
- set in the CFLAGS.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Move AC_MSG_CHECKING after the
+ AC_CHECK_PROG so that status messages do not get mixed together. Set
+ DEPARG based on the results of the cygpath check so that we avoid
+ using an extra exec when it is not needed. Use ac_cv_cygwin status
+ flag instead of looking at the output of gcc -v, which works in the
+ case where -mno-cygwin is set in the CFLAGS.
2001-07-04 Jeff Hobbs <jeffh@ActiveState.com>
@@ -2663,32 +2579,30 @@
* win/Makefile.in: Remove PATHTYPE variable.
* win/configure: Regen.
* win/configure.in: Don't subst PATHTYPE.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Remove PATHTYPE
- variable. Set CYGPATH to "cygpath -w" if the
- cygpath executable is found on the path. This
- approach works for native Cygwin builds and
- cross compiles.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Remove PATHTYPE variable. Set CYGPATH
+ to "cygpath -w" if the cygpath executable is found on the path. This
+ approach works for native Cygwin builds and cross compiles.
2001-07-03 Jeff Hobbs <jeffh@ActiveState.com>
* tests/var.test:
* generic/tclVar.c (Tcl_VariableObjCmd): added patch to check for
- number of args. [Patch #426038]
+ number of args. [Patch 426038]
* generic/tclVar.c (Tcl_GetVar2Ex): added ability to recognize
- TCL_TRACE_READS flags to cause creation of part1 in TclLookupVar
- to make sure newly created array will get read traces triggered
- appropriately. This is called by Tcl_ObjGetVar2, Tcl_GetVar, and
+ TCL_TRACE_READS flags to cause creation of part1 in TclLookupVar to
+ make sure newly created array will get read traces triggered
+ appropriately. This is called by Tcl_ObjGetVar2, Tcl_GetVar, and
Tcl_GetVar2.
- (TclSetIndexedScalar, TclSetElementOfIndexedArray): added read
- trace triggering for lappend case.
- (Tcl_LappendObjCmd): pass TCL_TRACE_READS to Tcl_ObjGetVar2 to
- trigger possible read traces for new arrays.
+ (TclSetIndexedScalar, TclSetElementOfIndexedArray): added read trace
+ triggering for lappend case.
+ (Tcl_LappendObjCmd): pass TCL_TRACE_READS to Tcl_ObjGetVar2 to trigger
+ possible read traces for new arrays.
* generic/tclExecute.c (TclExecuteByteCode): added TCL_TRACE_READS
- flag to INST_LAPPEND(_ARRAY)_STK case to trigger read traces for
- newly created arrays. Removed unnecessary #ifdef for
- TCL_COMPILE_DEBUG in INST_LOAD_SCALAR1 case.
+ flag to INST_LAPPEND(_ARRAY)_STK case to trigger read traces for newly
+ created arrays. Removed unnecessary #ifdef for TCL_COMPILE_DEBUG in
+ INST_LOAD_SCALAR1 case.
* tests/append.test:
* tests/appendComp.test: added tests for read trace triggering for
@@ -2696,98 +2610,96 @@
2001-07-03 Mo DeJong <mdejong@redhat.com>
- * tests/clock.test (clock-2.5): Adjust test so that it passes
- when the time slice is 60 msecs, now passes under Windows 98.
+ * tests/clock.test (clock-2.5): Adjust test so that it passes when the
+ time slice is 60 msecs, now passes under Windows 98.
2001-07-03 Mo DeJong <mdejong@redhat.com>
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Don't pass the v flag
- to ${AR} when using gcc, verbose output is not needed.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Don't pass the v flag to ${AR} when
+ using gcc, verbose output is not needed.
2001-07-03 Don Porter <dgp@users.sourceforge.net>
* tests/unixInit.test (unixInit-2.8): Changed test back to using
- installation layout, adding comments explaining why the test writes
- to the directories it does, and checks to avoid destroying other
- files in /tmp.
+ installation layout, adding comments explaining why the test writes to
+ the directories it does, and checks to avoid destroying other files in
+ /tmp.
2001-07-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/unixInit.test (unixInit-1.2): Fixed faults reported in
- Bug#438070 - well, at least enough to work on Solaris - and added
+ [Bug 438070] - well, at least enough to work on Solaris - and added
comments that should make what is going on in the test clearer.
2001-07-02 Jeff Hobbs <jeffh@ActiveState.com>
* tests/util.test: added util-4.6
- * generic/tclUtil.c (Tcl_ConcatObj): Corrected walking backwards
- over utf-8 chars. [Bug #227512]
+ * generic/tclUtil.c (Tcl_ConcatObj): Corrected walking backwards over
+ utf-8 chars. [Bug 227512]
2001-07-02 Don Porter <dgp@users.sourceforge.net>
- * tests/unixInit.test (unixInit-2.8): Corrected test for all
- absolute pathnames in library path when executable is installed
- near root directory to use correct development directory layout.
- [Bug 438014]
+ * tests/unixInit.test (unixInit-2.8): Corrected test for all absolute
+ pathnames in library path when executable is installed near root
+ directory to use correct development directory layout. [Bug 438014]
- * tests/unixInit.test (unixInit-2.9):
+ * tests/unixInit.test (unixInit-2.9):
* unix/tclUnixInit.c (TclpInitLibraryPath):
* win/tclWinInit.c (TclpInitLibraryPath): Corrected buggy
- construction of search path entries relative to executable.
- Added test for bad construction. [Bug 438014]
+ construction of search path entries relative to executable. Added test
+ for bad construction. [Bug 438014]
2001-06-28 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclNamesp.c: Correction to faulty patch from [Bug: 231259]
+ * generic/tclNamesp.c: Correction to faulty patch from [Bug 231259]
2001-06-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/unixInit.test (unixInit-1.2): Modified so as not to
- require a local echo service, which fails on many systems which
- have that turned off for security reasons...
+ * tests/unixInit.test (unixInit-1.2): Modified so as not to require a
+ local echo service, which fails on many systems which have that turned
+ off for security reasons...
2001-06-27 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclInt.h:
* generic/tclObj.c:
* unix/Makefile.in: added a -DPURIFY mode that makes Tcl_Obj's
- allocated and free singularly (instead of in alloc in blocks and
- never free) to allow checkers like Purify to operate better.
+ allocated and free singularly (instead of in alloc in blocks and never
+ free) to allow checkers like Purify to operate better.
* library/encoding/koi8-u.enc: added koi8-u (Ukranian variant)
encoding.
* tests/subst.test:
- * generic/tclUtf.c (Tcl_UtfBackslash): Corrected backslash
- handling of multibyte utf-8 chars. [Bug #217987]
+ * generic/tclUtf.c (Tcl_UtfBackslash): Corrected backslash handling of
+ multibyte utf-8 chars. [Bug 217987]
- * generic/tclCmdIL.c (InfoProcsCmd): fixed potential mem leak in
- info procs that created objects without using them.
+ * generic/tclCmdIL.c (InfoProcsCmd): fixed potential mem leak in info
+ procs that created objects without using them.
* generic/tclCompCmds.c (TclCompileStringCmd): fixed mem leak when
string command failed to parse the subcommand.
* doc/interp.n:
- * doc/unknown.n: updated notes about what is in a safe interp.
- [Bug #218605]
+ * doc/unknown.n: updated notes about what is in a safe interp. [Bug
+ 218605]
2001-06-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/event.test (event-11.5): Removed hard-coded port number
- which could fail on some systems. [Bug #436727]
+ * tests/event.test (event-11.5): Removed hard-coded port number which
+ could fail on some systems. [Bug 436727]
2001-06-26 Mo DeJong <mdejong@redhat.com>
* unix/Makefile.in:
- * win/Makefile.in: Add `make shell` target. This target
- will set the proper env vars before invoking tclsh
- from the build directory.
+ * win/Makefile.in: Add `make shell` target. This target will set the
+ proper env vars before invoking tclsh from the build directory.
2001-06-26 Mo DeJong <mdejong@redhat.com>
- * win/Makefile.in: Use : to separate VPATH entries. This
- works for both Cygwin builds and cross builds, the VPSEP
- variable is simply unneeded complexity.
+ * win/Makefile.in: Use : to separate VPATH entries. This works for
+ both Cygwin builds and cross builds, the VPSEP variable is simply
+ unneeded complexity.
* win/configure: Regen.
* win/configure.in: Don't subst VPSEP.
* win/tcl.m4 (SC_CONFIG_CFLAGS): Remove VPSEP variable.
@@ -2795,17 +2707,17 @@
2001-06-26 Mo DeJong <mdejong@redhat.com>
* unix/configure: Regen.
- * unix/configure.in: Fix last checkin by removing
- export since that only works in bash.
+ * unix/configure.in: Fix last checkin by removing export since that
+ only works in bash.
* win/configure: Regen.
* win/configure.in: Ditto.
2001-06-26 Mo DeJong <mdejong@redhat.com>
* unix/configure: Regen.
- * unix/configure.in: Set CFLAGS to "" if the user
- did not set CFLAGS in the env. This keeps AC_PROG_CC
- from adding "-g -O2" to the CFLAGS by default.
+ * unix/configure.in: Set CFLAGS to "" if the user did not set CFLAGS
+ in the env. This keeps AC_PROG_CC from adding "-g -O2" to the CFLAGS
+ by default.
* win/configure: Regen.
* win/configure.in: Ditto.
@@ -2813,28 +2725,27 @@
* win/configure: Regen.
* win/configure.in: Use RC_DEFINE flag from tcl.m4.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Set RC_DEFINE
- flag based on the compiler in use.
-
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Set RC_DEFINE flag based on the
+ compiler in use.
+
2001-06-25 Mo DeJong <mdejong@redhat.com>
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Link to the
- imm32 library when building with mingw gcc.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Link to the imm32 library when
+ building with mingw gcc.
2001-06-25 Mo DeJong <mdejong@redhat.com>
* win/configure: Regen.
- * win/tcl.m4 (SC_CONFIG_CFLAGS): When building with
- gcc, don't attempt to link with LD or support dllwrap.
- Simply require a recent version of Cygwin gcc or Mingw
- gcc that supports -shared. When linking, use gcc instead
- of ld since gcc automatically includes libs like -lmsvcrt.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): When building with gcc, don't attempt
+ to link with LD or support dllwrap. Simply require a recent version of
+ Cygwin gcc or Mingw gcc that supports -shared. When linking, use gcc
+ instead of ld since gcc automatically includes libs like -lmsvcrt.
2001-06-22 Mo DeJong <mdejong@redhat.com>
* win/configure: Regen.
- * win/configure.in: Add resource compiler fix from
- 8.3.3 to fix compiling with mingw.
+ * win/configure.in: Add resource compiler fix from 8.3.3 to fix
+ compiling with mingw.
2001-06-22 Mo DeJong <mdejong@redhat.com>
@@ -2843,63 +2754,61 @@
2001-06-22 Mo DeJong <mdejong@redhat.com>
- * unix/Makefile.in: Set CFLAGS to @CFLAGS@ and @CFLAGS_DEFAULT@.
- Set LDFLAGS to @LDFLAGS@ and @LDFLAGS_DEFAULT@. Add LDFLAGS_DEBUG
- and LDFLAGS_OPTIMIZE to match the way CFLAGS_DEFAULT works.
- This will support user set CFLAGS or LDFLAGS at configure time.
+ * unix/Makefile.in: Set CFLAGS to @CFLAGS@ and @CFLAGS_DEFAULT@. Set
+ LDFLAGS to @LDFLAGS@ and @LDFLAGS_DEFAULT@. Add LDFLAGS_DEBUG and
+ LDFLAGS_OPTIMIZE to match the way CFLAGS_DEFAULT works. This will
+ support user set CFLAGS or LDFLAGS at configure time.
* unix/configure: Regen.
* unix/configure.in: Don't set CFLAGS to CFLAGS_DEFAULT, instead
- subst CFLAGS_DEFAULT into the Makefile. Add AC_SUBST for CFLAGS_DEFAULT,
- LDFLAGS_DEFAULT, LDFLAGS_DEBUG, and LDFLAGS_OPTIMIZE.
- * unix/tcl.m4 (SC_ENABLE_SYMBOLS): Modify LDFLAGS_DEFAULT so that
- it uses a Makefile variable just like CFLAGS_DEFAULT.
- * win/Makefile.in: Set CFLAGS to @CFLAGS@ and @CFLAGS_DEFAULT@.
- Set LDFLAGS to @LDFLAGS@ and @LDFLAGS_DEFAULT@.
- This will support user set CFLAGS or LDFLAGS at configure time.
+ subst CFLAGS_DEFAULT into the Makefile. Add AC_SUBST for
+ CFLAGS_DEFAULT, LDFLAGS_DEFAULT, LDFLAGS_DEBUG, and LDFLAGS_OPTIMIZE.
+ * unix/tcl.m4 (SC_ENABLE_SYMBOLS): Modify LDFLAGS_DEFAULT so that it
+ uses a Makefile variable just like CFLAGS_DEFAULT.
+ * win/Makefile.in: Set CFLAGS to @CFLAGS@ and @CFLAGS_DEFAULT@. Set
+ LDFLAGS to @LDFLAGS@ and @LDFLAGS_DEFAULT@. This will support user set
+ CFLAGS or LDFLAGS at configure time.
* win/configure: Regen.
* win/configure.in: Don't set CFLAGS or LDFLAGS, instead subst
CFLAGS_DEFAULT and LDFLAGS_DEFAULT into the Makefile.
- * win/tcl.m4 (SC_ENABLE_SYMBOLS): Modify LDFLAGS_DEFAULT so that
- it uses a Makefile variable just like CFLAGS_DEFAULT.
+ * win/tcl.m4 (SC_ENABLE_SYMBOLS): Modify LDFLAGS_DEFAULT so that it
+ uses a Makefile variable just like CFLAGS_DEFAULT.
2001-06-22 Mo DeJong <mdejong@redhat.com>
* win/configure:
- * win/tcl.m4 (SC_CONFIG_CFLAGS): Don't set LDFLAGS_DEBUG
- to -g or LDFLAGS_OPTIMIZE to -O when compiling with gcc.
- These flags are not needed and can cause problems with
- the Cygwin version of ld.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Don't set LDFLAGS_DEBUG to -g or
+ LDFLAGS_OPTIMIZE to -O when compiling with gcc. These flags are not
+ needed and can cause problems with the Cygwin version of ld.
2001-06-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/unixInit.test (unixInit-1.2,unixInit-2.8): Added test for
- code described below, and fixed a couple of errors that caused
- problems during testing; the code to determine the installedTcl
- constraint was wrong, and test unixInit-2.8 assumed that /tmp/lib
- was free for use and could be deleted, which clashed nastily with
- my installation and made other tests fail unnecessarily!
+ * tests/unixInit.test (unixInit-1.2,unixInit-2.8): Added test for code
+ described below, and fixed a couple of errors that caused problems
+ during testing; the code to determine the installedTcl constraint was
+ wrong, and test unixInit-2.8 assumed that /tmp/lib was free for use
+ and could be deleted, which clashed nastily with my installation and
+ made other tests fail unnecessarily!
* unix/tclUnixChan.c (TtyInit,TclpOpenFileChannel,
- Tcl_MakeFileChannel,TclpGetDefaultStdChannel): Alterations so that
- the standard channels - stdin, stdout and stderr - have the
- correct type and fconfigure options. This required making the
- initialisation of serial lines a little more sophisticated to
- make the console behave correctly in interactive mode... [Bug
- #219137 and duplicates]
+ (Tcl_MakeFileChannel,TclpGetDefaultStdChannel): Alterations so that
+ the standard channels - stdin, stdout and stderr - have the correct
+ type and fconfigure options. This required making the initialisation
+ of serial lines a little more sophisticated to make the console behave
+ correctly in interactive mode... [Bug 219137 and duplicates]
2001-06-16 Don Porter <dgp@users.sourceforge.net>
* generic/tclInt.decls:
- * generic/tclInt.h:
+ * generic/tclInt.h:
* generic/tclPanic.c (Tcl_PanicVA):
* mac/tclMacAppInit.c (main):
* mac/tclMacPanic.c (TclpPanic):
* unix/tclUnixPort.h:
- * win/tclWinPort.h: Replaced TclMacSetPanic with TclpPanic
- for setting a platform-specific panic handler. TclpPanic
- is NULL on Unix and Windows. Fixes broken wish on Mac due
- to earlier patches. [Patch 415648]
-
+ * win/tclWinPort.h: Replaced TclMacSetPanic with TclpPanic for setting
+ a platform-specific panic handler. TclpPanic is NULL on Unix and
+ Windows. Fixes broken wish on Mac due to earlier patches. [Patch
+ 415648]
+
* generic/tclIntPlatDecls.h:
* generic/tclStubInit.c: `make gentubs` after above changes.
@@ -2912,9 +2821,9 @@
2001-06-12 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/regexp.test (regexp-18.12):
+ * tests/regexp.test (regexp-18.12):
* generic/tclCmdMZ.c (Tcl_RegexpObjCmd): Fixed so that submatches
- that do not match always have index pair {-1 -1} [Bug #219232]
+ that do not match always have index pair {-1 -1} [Bug 219232]
2001-06-08 Don Porter <dgp@users.sourceforge.net>
@@ -2927,11 +2836,10 @@
* mac/tclMacAppInit.c (main):
* mac/tclMacBOAAppInit.c (main):
* mac/tclMacPanic.c: Modified special Mac implementations of
- Tcl_*Panic* to be exact copies of the generic implementations.
- Added TclMacSetPanic. The generic implementations should be
- used directly, rather than copies, but that requires further
- changes by someone familiar with the Mac build systems.
- [Patch 415648]
+ Tcl_*Panic* to be exact copies of the generic implementations. Added
+ TclMacSetPanic. The generic implementations should be used directly,
+ rather than copies, but that requires further changes by someone
+ familiar with the Mac build systems. [Patch 415648]
* generic/tclDecls.h:
* generic/tclIntPlatDecls.h:
@@ -2939,24 +2847,24 @@
* doc/Panic.3:
* unix/mkLinks: New file documenting Tcl_*Panic* public interfaces,
- followed by `make mklinks`. [Patch 415648, Bug 219170, Bug 414936]
+ followed by `make mklinks`. [Patch 415648, Bug 219170, Bug 414936]
2001-06-03 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclUtil.c (Tcl_DStringAppendElement): patch to save an
- extra strlen call. [Bug #428572]
+ extra strlen call. [Bug 428572]
2001-05-30 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclExecute.c (TclExecuteByteCode): Added two casts to
- INST_STR_CMP implementation to get rid of a couple warnings from
- the SUNWspro C compiler.
-
- * generic/tclBasic.c (Tcl_GetMathFuncInfo,Tcl_ListMathFuncs):
- * generic/tclCmdIL.c (Tcl_InfoObjCmd,InfoFunctionsCmd):
- * generic/tcl.decls (generic table, positions 435+436):
- * tests/info.test:
- * doc/CrtMathFnc.3:
+ INST_STR_CMP implementation to get rid of a couple warnings from the
+ SUNWspro C compiler.
+
+ * generic/tclBasic.c (Tcl_GetMathFuncInfo,Tcl_ListMathFuncs):
+ * generic/tclCmdIL.c (Tcl_InfoObjCmd,InfoFunctionsCmd):
+ * generic/tcl.decls (generic table, positions 435+436):
+ * tests/info.test:
+ * doc/CrtMathFnc.3:
* doc/info.n: Changes due to TIP #15 "Functions to List and Detail
Math Functions"
@@ -2968,32 +2876,31 @@
* generic/regc_locale.c: updated character class range data for
Unicode v3.1.0 compliance.
- * generic/tclUniData.c: regenerated from Unicode v3.1.0 data file
- (new as of 2001-05-16). This brings Tcl to current unicode
- compliance.
+ * generic/tclUniData.c: regenerated from Unicode v3.1.0 data file (new
+ as of 2001-05-16). This brings Tcl to current unicode compliance.
* tests/utf.test: added tests to check unicode 3 compliance
* unix/Makefile.in (tclUtf.o): added tclUniData.c dependency.
- * tools/uniClass.tcl: added comments to output format and the
- script for clarification.
+ * tools/uniClass.tcl: added comments to output format and the script
+ for clarification.
- * tools/uniParse.tcl: corrected filename output and GetDelta macro
- to use 'info' as param (was 'infO')
+ * tools/uniParse.tcl: corrected filename output and GetDelta macro to
+ use 'info' as param (was 'infO')
2001-05-26 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclVar.c (tclArraySearchType,SetArraySearchObj,
- ParseSearchId): Added code to speed up array searching by reducing
+ (ParseSearchId): Added code to speed up array searching by reducing
the amount of parsing needed for searchIds.
- * generic/tclObj.c (TclInitObjSubsystem):
- * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct):
- * generic/tclNamesp.c (TclInitNamespaceSubsystem):
+ * generic/tclObj.c (TclInitObjSubsystem):
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct):
+ * generic/tclNamesp.c (TclInitNamespaceSubsystem):
* generic/tclInt.h: Moved some Tcl_ObjType initialisation to
- TclInitObjSubsystem to be with the bulk of the rest.
- [Patch 424851] Committed by Miguel Sofer <mig@utdt.edu>
+ TclInitObjSubsystem to be with the bulk of the rest. [Patch 424851]
+ Committed by Miguel Sofer <mig@utdt.edu>
2001-05-23 Jeff Hobbs <jeffh@ActiveState.com>
@@ -3015,31 +2922,29 @@
* library/encoding/iso8859-8.enc:
* library/encoding/iso8859-10.enc (new):
* library/encoding/iso8859-13.enc (new):
- * library/encoding/iso8859-14.enc (new): updated encoding tables
- based on http://www.unicode.org/Public/MAPPINGS/. (kuhn)
+ * library/encoding/iso8859-14.enc (new): updated encoding tables based
+ on http://www.unicode.org/Public/MAPPINGS/. (kuhn)
2001-05-23 Mo DeJong <mdejong@redhat.com>
- * unix/tcl.m4 (SC_PATH_TCLCONFIG): Fix comments,
- and typo in cached variable name.
+ * unix/tcl.m4 (SC_PATH_TCLCONFIG): Fix comments, and typo in cached
+ variable name.
2001-05-23 Mo DeJong <mdejong@redhat.com>
- * unix/tcl.m4 (SC_LOAD_TKCONFIG):
- Remove use of undefined TCLCONFIG variable and
- call AC_MSG_RESULT to print the checking result.
+ * unix/tcl.m4 (SC_LOAD_TKCONFIG): Remove use of undefined TCLCONFIG
+ variable and call AC_MSG_RESULT to print the checking result.
* win/tcl.m4: Ditto.
2001-05-22 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclObj.c (TclAllocateFreeObjects): simplified
- objSizePlusPadding to use sizeof(Tcl_Obj) (max)
- Corrected use of tclObjsAlloced/Freed/Shared in TCL_MEM_DEBUG
- compile.
+ objSizePlusPadding to use sizeof(Tcl_Obj) (max) Corrected use of
+ tclObjsAlloced/Freed/Shared in TCL_MEM_DEBUG compile.
2001-05-22 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclExecute.c: removed Tcl_DuplicateObj in INST_DUP
+ * generic/tclExecute.c: removed Tcl_DuplicateObj in INST_DUP
2001-05-21 Jeff Hobbs <jeffh@ActiveState.com>
@@ -3047,13 +2952,13 @@
getting affected by Windows env handling of empty valued elements.
* unix/tcl.m4: added more common install directories in which to
- search for *Config.sh [Bug #419812]
+ search for *Config.sh. [Bug 419812]
- * tests/cmdMZ.test (cmdMZ-1.4): added notLinux constraint to test
- to prevent failure message on Linux due to OS caching bug.
+ * tests/cmdMZ.test (cmdMZ-1.4): added notLinux constraint to test to
+ prevent failure message on Linux due to OS caching bug.
- * tests/httpd (httpdRespond): added response to timeout value in
- query string.
+ * tests/httpd (httpdRespond): added response to timeout value in query
+ string.
* tests/http.test: removed unused notLinux constraint setting
@@ -3063,61 +2968,58 @@
2001-05-19 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* Note that "tclbench" (see project "tcllib") was extended with
- performance benchmarks for [fcopy] too.
+ performance benchmarks for [fcopy] too.
* doc/fcopy.n: Updated to reflect the extended behaviour of 'fcopy'.
- * tests/io.test: Added tests 'io-52.9', 'io-52.10' and 'io-52.11'
- to test the handling of encodings by 'fcopy' / 'TclCopychannel'
- [Bug #209210].
+ * tests/io.test: Added tests 'io-52.9', 'io-52.10' and 'io-52.11' to
+ test the handling of encodings by 'fcopy' / 'TclCopychannel'. [Bug
+ 209210]
- * generic/tclIO.c: Split of both 'Tcl_ReadChars' and
- 'Tcl_WriteChars' into a public error checking and an internal
- working part. The public functions now use the new internal
- ones. The new functions are 'DoReadChars' and 'DoWriteChars'.
- Extended 'CopyData' to use the new functions 'DoXChars' when
- required by the encodings on the input and output channels
- [Bug #209210].
+ * generic/tclIO.c: Split of both 'Tcl_ReadChars' and 'Tcl_WriteChars'
+ into a public error checking and an internal working part. The public
+ functions now use the new internal ones. The new functions are
+ 'DoReadChars' and 'DoWriteChars'. Extended 'CopyData' to use the new
+ functions 'DoXChars' when required by the encodings on the input and
+ output channels. [Bug 209210]
2001-05-16 Jeff Hobbs <jeffh@ActiveState.com>
- * library/history.tcl (tcl::HistAdd): prevent empty calls from
- being added to the history (arndt)
+ * library/history.tcl (tcl::HistAdd): prevent empty calls from being
+ added to the history (arndt)
- * tests/error.test: updated error-1.3 message to account for
- string index being compiled at toplevel.
+ * tests/error.test: updated error-1.3 message to account for string
+ index being compiled at toplevel.
* tests/appendComp.test:
* tests/stringComp.test: new files for extended bytecode testing
* generic/tclBasic.c: added new CompileProc invocations to basic
command initialization.
* generic/tclCompCmds.c: added new compile commands for append,
- lappend, lindex and llength. Refactored set and incr compile
- commands to use new TclPushVarName function for handling the
- varname component during compilation (also used by append and
- lappend). Changed string compile command to compile toplevel code
- as well (when possible).
+ lappend, lindex and llength. Refactored set and incr compile commands
+ to use new TclPushVarName function for handling the varname component
+ during compilation (also used by append and lappend). Changed string
+ compile command to compile toplevel code as well (when possible).
* generic/tclCompile.c: added new instruction enums
* generic/tclCompile.h: added debug info for new instructions
- * generic/tclExecute.c (TclExecuteByteCode): moved elemPtr to
- toplevel var (oft-used). Added definitions for new bytecode
- instructions INST_LIST_INDEX, INST_LIST_LENGTH, INST_APPEND_SCALAR1,
+ * generic/tclExecute.c (TclExecuteByteCode): moved elemPtr to toplevel
+ var (oft-used). Added definitions for new bytecode instructions
+ INST_LIST_INDEX, INST_LIST_LENGTH, INST_APPEND_SCALAR1,
INST_APPEND_SCALAR4, INST_APPEND_ARRAY1, INST_APPEND_ARRAY4,
INST_APPEND_ARRAY_STK, INST_APPEND_STK, INST_LAPPEND_SCALAR1,
INST_LAPPEND_SCALAR4, INST_LAPPEND_ARRAY1, INST_LAPPEND_ARRAY4,
INST_LAPPEND_ARRAY_STK, INST_LAPPEND_STK.
Refactored repititious code for reuse with INST_LOAD_STK (same as
- INST_LOAD_SCALAR_STK), INST_STORE_STK (same as
- INST_STORE_SCALAR_STK).
+ INST_LOAD_SCALAR_STK), INST_STORE_STK (same as INST_STORE_SCALAR_STK).
Updated INST_STR_CMP with style of fix of 2001-04-06 Fellows
- [Bug #219201] as that fix only affected the runtime eval'ed
- "string" (string compare is normally byte-compiled now). We
- may want to back these out for speed in the future, noting the
- problems with \x00 comparisons in the docs.
+ [Bug 219201] as that fix only affected the runtime eval'ed "string"
+ (string compare is normally byte-compiled now). We may want to back
+ these out for speed in the future, noting the problems with \x00
+ comparisons in the docs.
* generic/tclInt.h: declarations for new compile commands.
* generic/tclVar.c: change TclGetIndexedScalar,
TclGetElementOfIndexedArray, TclSetElementOfIndexedArray and
- TclSetIndexedScalar to use flags. The Set functions now support
+ TclSetIndexedScalar to use flags. The Set functions now support
TCL_APPEND_ELEMENT and TCL_LIST_ELEMENT as well.
* generic/tclInt.decls:
* generic/tclIntDecls.h: minor signature changes for above.
@@ -3126,7 +3028,7 @@
2001-05-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/console.n: Deleted. Put it in the wrong source tree! D'oh!
+ * doc/console.n: Deleted. Put it in the wrong source tree! D'oh!
2001-05-15 Jeff Hobbs <jeffh@ActiveState.com>
@@ -3136,8 +3038,8 @@
* generic/tclStringObj.c (Tcl_GetUnicodeFromObj): new function to
parallel Tcl_GetStringFromObj (fix of an API oversight).
- * unix/tclUnixPipe.c: updated pipeChannelType to
- TCL_CHANNEL_VERSION_2 type specification.
+ * unix/tclUnixPipe.c: updated pipeChannelType to TCL_CHANNEL_VERSION_2
+ type specification.
* tests/fileName.test: corrected tests not to fail on win when a
C:/test dir exists.
@@ -3146,82 +3048,80 @@
2001-05-15 Miguel Sofer <msofer@users.sourceforge.net>
- * tests/lindex.test: added test for nested braces [Patch: 423617]
+ * tests/lindex.test: added test for nested braces [Patch 423617]
2001-05-15 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclInt.h
- * generic/tclNamesp.c: invalidate all bytecodes in a namespace if
- a new command shadows a bytecoded command.
- * tests/namespace.test
- Patched from [Bug: 231259]
+ * generic/tclInt.h:
+ * generic/tclNamesp.c: invalidate all bytecodes in a namespace if a
+ new command shadows a bytecoded command.
+ * tests/namespace.test:
+ Patched from [Bug 231259]
2001-05-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/console.n: Created. It seems very odd to me that the
- console implementation is part of the Tcl distribution and not
- part of Tk, but given the location of the source, the
- documentation must obviously match up...
+ * doc/console.n: Created. It seems very odd to me that the console
+ implementation is part of the Tcl distribution and not part of Tk, but
+ given the location of the source, the documentation must obviously
+ match up...
2001-05-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclCmdMZ.c (Tcl_StringObjCmd):
- * tests/string.test (string-4.14): Negative string indices should
- not be added as offsets to the result of [string first] but
- instead be treated as referring to the start of the string.
- [Bug: 423581]
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * tests/string.test (string-4.14): Negative string indices should not
+ be added as offsets to the result of [string first] but instead be
+ treated as referring to the start of the string. [Bug 423581]
2001-05-11 Mo DeJong <mdejong@redhat.com>
- * unix/Makefile.in: Add a LDFLAGS variable to the
- Makefile instead of directly substing @LDFLAGS@.
+ * unix/Makefile.in: Add a LDFLAGS variable to the Makefile instead of
+ directly substing @LDFLAGS@.
* unix/configure: Regen.
- * unix/tcl.m4: Fix CFLAGS_DEFAULT so that the name
- of a Makefile variable is passed as @CFLAGS@.
- * win/Makefile.in: Move the setting of CFLAGS
- higher up in the Makefile.
+ * unix/tcl.m4: Fix CFLAGS_DEFAULT so that the name of a Makefile
+ variable is passed as @CFLAGS@.
+ * win/Makefile.in: Move the setting of CFLAGS higher up in the
+ Makefile.
* win/configure: Regen.
- * win/configure.in: Use dnl to comment out macros
- so that they are not accidently expanded.
- * win/tcl.m4: Fix CFLAGS_DEFAULT so that the name
- of a Makefile variable is passed as @CFLAGS@.
+ * win/configure.in: Use dnl to comment out macros so that they are not
+ accidently expanded.
+ * win/tcl.m4: Fix CFLAGS_DEFAULT so that the name of a Makefile
+ variable is passed as @CFLAGS@.
2001-05-07 Miguel Sofer <msofer@users.sourceforge.net>
* generic/tclExecute.c: insure different rand() seeds in different
- threads [Bug 416643]
+ threads. [Bug 416643]
2001-05-03 Jeff Hobbs <jeffh@ActiveState.com>
* tests/tcltest.test: removed extraneous 'c' (doh!) [Bug: 414031]
- * tools/tcltk-man2html.tcl: removed use of 'exec' for portability
- and fixed up code.
+ * tools/tcltk-man2html.tcl: removed use of 'exec' for portability and
+ fixed up code.
2001-05-03 Don Porter <dgp@users.sourceforge.net>
* doc/library.n:
* library/init.tcl:
- * tests/autoMkindex.t*: Modified [auto_import] to apply
- pattern matching in the [namespace import] style. [Bug 420186]
- ***POTENTIAL INCOMPATIBILITY*** for any callers of [auto_import]
- from outside Tcl that expect the pattern matching to be like that
- of [string match].
+ * tests/autoMkindex.t*: Modified [auto_import] to apply pattern
+ matching in the [namespace import] style. [Bug 420186]
+ ***POTENTIAL INCOMPATIBILITY*** for any callers of [auto_import] from
+ outside Tcl that expect the pattern matching to be like that of
+ [string match].
2001-05-03 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclParse.c:
- * tests/namespace.test: Insure consistent behaviour of the
- [unknown] command: when a command is unknown, it is always
- processed by [::unknown], ignoring any namespace proc which
- happens to be called "unknown" [Patch #421166, Bug #420507]
+ * generic/tclParse.c:
+ * tests/namespace.test: Insure consistent behaviour of the [unknown]
+ command: when a command is unknown, it is always processed by
+ [::unknown], ignoring any namespace proc which happens to be called
+ "unknown" [Patch 421166, Bug 420507]
2001-05-02 Don Porter <dgp@users.sourceforge.net>
- * tools/genStubs.tcl: Add a package require of Tcl 8
- at the beginning of the script so that the script
- will print a descriptive error message when run
- in an old Tcl 7 shell.
+ * tools/genStubs.tcl: Add a package require of Tcl 8 at the beginning
+ of the script so that the script will print a descriptive error
+ message when run in an old Tcl 7 shell.
2001-04-27 Kevin Kenny <kennykb@crd.ge.com>
@@ -3229,10 +3129,10 @@
* generic/tclInt.h:
* generic/tclCmdIL.c:
* generic/tclProc.c:
- * generic/tclVar.c: Added another collection of missing CONSTs
- related to TclGetNamespaceForQualName.
+ * generic/tclVar.c: Added another collection of missing CONSTs related
+ to TclGetNamespaceForQualName.
* generic/tclIntDecls.h: Regenerated.
-
+
2001-04-25 Mo DeJong <mdejong@redhat.com>
* unix/configure: Regen.
@@ -3245,9 +3145,9 @@
2001-04-25 Mo DeJong <mdejong@redhat.com>
* unix/configure: Regen.
- * unix/configure.in: Use $@ in MAKE_LIB and MAKE_STUB_LIB
- commands instead of using a delayed subst variable. Replace
- instances of STUB_LIB_FILE with TCL_STUB_LIB_FILE.
+ * unix/configure.in: Use $@ in MAKE_LIB and MAKE_STUB_LIB commands
+ instead of using a delayed subst variable. Replace instances of
+ STUB_LIB_FILE with TCL_STUB_LIB_FILE.
2001-04-25 Mo DeJong <mdejong@redhat.com>
@@ -3259,19 +3159,20 @@
2001-04-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tools/encoding/iso8859-15.txt:
- * library/encoding/iso8859-15.enc: Oops! Got the full encoding
- wrong. Should be fixed now...
+ * library/encoding/iso8859-15.enc: Oops! Got the full encoding wrong.
+ Should be fixed now...
* tools/encoding/iso8859-15.txt:
* library/encoding/iso8859-15.enc:
- * tools/tcl.wse.in: Added ISO 8859-15 (a.k.a. Latin-1 + Euro
- currency symbol) support.
+ * tools/tcl.wse.in: Added ISO 8859-15 (a.k.a. Latin-1 + Euro currency
+ symbol) support.
* generic/tclNamesp.c:
- * generic/tclBasic.c (TclRenameCommand): Missing CONST from
- several declarations relating to use of TclGetNamespaceForQualName
+ * generic/tclBasic.c (TclRenameCommand): Missing CONST from several
+ declarations relating to use of TclGetNamespaceForQualName
2001-04-24 Kevin B. Kenny <kennykb@acm.org>
+
* doc/AssocData.3:
* doc/CrtCommand.3:
* doc/CrtMathFnc.3:
@@ -3285,18 +3186,18 @@
* generic/tcl.h:
* generic/tclInt.decls:
* generic/tclInt.h: (TIP #27) Another round of CONST changes, this
- time adding CONST to the API's exported from tclBasic.c.
- [Patch #415179]
- ***POTENTIAL INCOMPATIBILITY*** from 8.4a2, in which Vince
- Darley's changes to command tracing were added. A const has been
- added to the type signature of one of the parameters to
- Tcl_CommandTraceProc.
+ time adding CONST to the API's exported from tclBasic.c. [Patch
+ 415179]
+ ***POTENTIAL INCOMPATIBILITY*** from 8.4a2, in which Vince Darley's
+ changes to command tracing were added. A const has been added to the
+ type signature of one of the parameters to Tcl_CommandTraceProc.
2001-04-10 Kevin B. Kenny <kennykb@acm.org>
+
* unix/tclUnixTime.c: Altered code to use memcpy instead of
structure assigments in an effort to achieve better K&R
compatibility.
-
+
2001-04-10 Kevin B. Kenny <kennykb@acm.org>
* unix/tclUnixTime.c: Fixed silly typo in calls to 'gmtime' and
@@ -3304,125 +3205,122 @@
2001-04-09 Kevin B. Kenny <kennykb@acm.org>
- * unix/tclLoadShl.c: Added DYNAMIC_PATH to the load flags so that
- the SHLIB_PATH will be searched for other libraries. [Bug #219140]
-
+ * unix/tclLoadShl.c: Added DYNAMIC_PATH to the load flags so that the
+ SHLIB_PATH will be searched for other libraries. [Bug 219140]
+
2001-04-09 Kevin B. Kenny <kennykb@acm.org>
- * unix/tcl.m4: Added _REENTRANT to Solaris build so that thread
- safe library routines are included.
+ * unix/tcl.m4: Added _REENTRANT to Solaris build so that thread safe
+ library routines are included.
* unix/configure: Re-ran 'autoconf' with changed tcl.m4
* tclUnixTime.c: Modified for thread safety of 'gmtime' and
- 'localtime' system calls [Bugs #219136 and #232558]
-
+ 'localtime' system calls. [Bugs 219136 and 232558]
+
2001-04-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/expr.test (expr-21.*): Tests to check below fix.
* generic/tclParseExpr.c (GetLexeme): Now recognises the
non-numeric boolean literals for what they are. It no longer makes
sense for anyone to create functions with the same name as one of
- them, but this was true in 7.* as well [Bug #217777; finally!]
+ them, but this was true in 7.* as well [Bug 217777; finally!]
2001-04-07 Miguel Sofer <msofer@users.sourceforge.net>
- * generic/tclExecute.c: Avoid panic when there are extra items in
- the tcl stack [Bug #406709, Patch #414470]
+ * generic/tclExecute.c: Avoid panic when there are extra items in the
+ tcl stack. [Bug 406709, Patch 414470]
* tests/foreach.test: test to exercise the patch
2001-04-07 Miguel Sofer <msofer@users.sourceforge.net>
* doc/namespace.n: document correct functionality
* generic/tclNamesp.c: corrected behaviour of [namespace code]
- (Bug #219385, Patch #403530)
+ [Bug 219385, Patch 403530]
* library/init.tcl:
* tests/namespace-old.test: test correct functionality
* tests/namespace.test: test correct functionality
2001-04-07 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * unix/Makefile.in (checkdoc): New target, checking the
- definitions as found in the compiled library against the
- manpages to find undocumented public functionality.
+ * unix/Makefile.in (checkdoc): New target, checking the definitions as
+ found in the compiled library against the manpages to find
+ undocumented public functionality.
* unix/mkLinks: Updated to include the new manpage.
* doc/UniCharIsAlpha.3: New manpage documenting the Unicode
- character classification APIs [Bug #218720].
+ character classification APIs. [Bug 218720]
2001-04-07 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* unix/mkLinks: Updated to incorporate the changes below.
* doc/StringObj.3: Added 'Tcl_AttemptSetObjLength' to the NAME
- section. [Bug #414435].
+ section. [Bug 414435]
- * doc/Alloc.3: Added both 'Tcl_AttemptAlloc' and
- 'Tcl_AttemptRealloc' to the NAME section. [Bug #414435].
+ * doc/Alloc.3: Added both 'Tcl_AttemptAlloc' and 'Tcl_AttemptRealloc'
+ to the NAME section. [Bug 414435]
* doc/Utf.3: Added both 'Tcl_UniCharCaseMatch' and
- 'Tcl_UniCharNcasecmp' to the NAME section. [Bug #414435].
+ 'Tcl_UniCharNcasecmp' to the NAME section. [Bug 414435]
2001-04-06 Don Porter <dgp@users.sourceforge.net>
* library/init.tcl:
- * tests/init.test: Modified processing of $::errorInfo by
- [unknown] when the auto-loaded command throws an error to better
- cover the tracks of auto-loading. [Bug 219280, Patch 403551]
+ * tests/init.test: Modified processing of $::errorInfo by [unknown]
+ when the auto-loaded command throws an error to better cover the
+ tracks of auto-loading. [Bug 219280, Patch 403551]
2001-04-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* doc/read.n: Added section on "USE WITH SERIAL PORTS" to resolve
- [Bug #219402]
+ [Bug 219402]
* tests/string.test (string-2.30): Test for this case
* generic/tclCmdMZ.c (Tcl_StringObjCmd, STR_COMPARE branch): Fixed
problem caused by Utf-rep of \x00 being more than Utf-rep of \x01
- fooling memcmp by forcing everything through Utf-based
- comparisons. Added optimizations for case where objects have a
- string/unicode-rep or a bytearray-rep (i.e. where we can perform
- comparisons on fixed-size units.) [Bug #219201]
+ fooling memcmp by forcing everything through Utf-based comparisons.
+ Added optimizations for case where objects have a string/unicode-rep
+ or a bytearray-rep (i.e. where we can perform comparisons on
+ fixed-size units). [Bug 219201]
* generic/tclUtf.c (Tcl_UtfNcmp): Corrected seriously erroneous
comment.
2001-04-05 Andreas Kupries <andreas_kupries@users.sourceforge.net>
- * doc/Macintosh.3: Removed duplicates from .SH line
- [Bug #413983].
+ * doc/Macintosh.3: Removed duplicates from .SH line. [Bug 413983]
2001-04-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdMZ.c (Tcl_StringObjCmd): Fixed so will compile
- with K&R compilers [Patch #413844, Bug #413847]
+ with K&R compilers. [Patch 413844, Bug 413847]
2001-04-04 Don Porter <dgp@users.sourceforge.net>
* generic/tclMain.c: Patch from Kevin Kenny to restore support of
- pre-ANSI compilers. [Bug 413846, Patch 413842]
+ pre-ANSI compilers. [Bug 413846, Patch 413842]
2001-04-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* unix/mkLinks: Updated to contain the new manpage.
- * doc/Environment.3: New manpage, describes Tcl_PutEnv
- [Bug #219171].
+ * doc/Environment.3: New manpage, describes Tcl_PutEnv. [Bug 219171]
- * doc/Macintosh.3: New manpage describing the macintosh specific
- parts of the public API [Bug #219169].
+ * doc/Macintosh.3: New manpage describing the macintosh specific parts
+ of the public API. [Bug 219169]
2001-04-04 Jeff Hobbs <jeffh@ActiveState.com>
* unix/configure:
* unix/tcl.m4: extended test of termios vs. termio vs. sgtty to
better detect result on Linux and when certain configure
- redirections are being used. (max) [Patch #402923; Bug #227412,
- #219194]
+ redirections are being used. [Patch 402923; Bug 227412, 219194] (max)
2001-04-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* generic/tclTest.c:
* tests/io.tests: TIP #10 followup correcting a problem with the
- original patch because of the lack of 'testthread id' for a
- non-threaded compilation.
+ original patch because of the lack of 'testthread id' for a
+ non-threaded compilation.
2001-04-04 Kevin Kenny <kennykb@acm.org>
@@ -3440,24 +3338,24 @@
* generic/tclObj.c:
* generic/tclPkg.c:
* generic/tclStringObj.c:
- * generic/tclStubLib.c:
- (TIP#27) Changed a number of Tcl API's to accept "CONST char*"
- in place of simple "char*". (kennykb) [Patch #404026]
+ * generic/tclStubLib.c: (TIP#27) Changed a number of Tcl API's to
+ accept "CONST char*" in place of simple "char*". (kennykb) [Patch
+ 404026]
2001-04-04 Jeff Hobbs <jeffh@ActiveState.com>
* generic/tclListObj.c (Tcl_SetListObj): set objPtr->length = 0 in
empty object case to maintain sanctity of Tcl_Obj bytes/length
- pairing. (porter) [Patch #405998]
+ pairing. [Patch 405998] (porter)
2001-04-03 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* unix/mkLinks: Added 'Signal.3', 'Tcl_WaitPid'.
- * doc/DetachPids.3: Added description of 'Tcl_WaitPid' [Bug #219173].
+ * doc/DetachPids.3: Added description of 'Tcl_WaitPid' [Bug 219173].
* doc/Signal.3: New man page describing the public API procedures
- 'Tcl_SignalId' and 'Tcl_SignalMsg' [Bug #219172].
+ 'Tcl_SignalId' and 'Tcl_SignalMsg'. [Bug 219172]
2001-04-02 Jeff Hobbs <jeffh@ActiveState.com>
@@ -3466,7 +3364,7 @@
* win/README.binary: further notes corrections.
* win/configure:
- * win/tcl.m4 (SHLIB_LD): added -incremental:no. [Bug #219381]
+ * win/tcl.m4 (SHLIB_LD): added -incremental:no. [Bug 219381]
2001-04-01 Jeff Hobbs <jeffh@ActiveState.com>
@@ -3474,8 +3372,8 @@
* mac/README:
* win/README:
* win/README.binary:
- * unix/README: updated patchlevel information to 8.4a3 and
- updated links and notes.
+ * unix/README: updated patchlevel information to 8.4a3 and updated
+ links and notes.
* generic/tcl.h:
* tools/tcl.wse.in:
@@ -3489,18 +3387,17 @@
* generic/tclCkalloc.c (TclFinalizeMemorySubsystem): set curTagPtr
to NULL to allow for reuse.
- * generic/tclEvent.c (Tcl_Finalize): moved the tsdPtr
- initialization inside the subsystemsInitialized check to prevent
- it potentially getting called twice during finalization. (wu)
- [Patch #403532, Bug #219391]
+ * generic/tclEvent.c (Tcl_Finalize): moved the tsdPtr initialization
+ inside the subsystemsInitialized check to prevent it potentially
+ getting called twice during finalization.
+ [Patch 403532, Bug 219391] (wu)
* generic/tclThreadTest.c (Tcl_ThreadObjCmd): cast fixes
- * generic/tclTest.c (TestChannelCmd): added cast to mollify
- Windows debug build.
+ * generic/tclTest.c (TestChannelCmd): added cast to mollify Windows
+ debug build.
* win/tclWinSock.c (SocketEventProc): Fixed race condition in
- readability of socket on Windows.
- [Patch #410674, Bug #219205 #219333]
+ readability of socket on Windows. [Patch 410674, Bug 219205, 219333]
* win/tcl.m4: added imm32.lib to LIBS_GUI for Tk IME support.
@@ -3512,38 +3409,36 @@
2001-03-30 Andreas Kupries <andreas_kupries@users.sourceforge.net>
* All of the changes below belong to TIP #10 [Tcl I/O Enhancement:
- Thread-Aware Channels]. See also [Patch #403358] at SF.
+ Thread-Aware Channels]. See also [Patch 403358] at SF.
* generic/tclIO.h (struct ChannelState, line 236f): Extended the
- structure with a new field of type 'Tcl_ThreadId' to hold the id
- of the thread currently managing all channels with this state.
+ structure with a new field of type 'Tcl_ThreadId' to hold the id of
+ the thread currently managing all channels with this state.
- Note: This structure is shared by all channels in a stack of
- transformations.
+ Note: This structure is shared by all channels in a stack of
+ transformations.
- * generic/tclIO.c (Tcl_CreateChannel, lines 1058-1065): Modified
- to store the Id of the current thread in the 'ChannelState' of
- the new channel.
+ * generic/tclIO.c (Tcl_CreateChannel, lines 1058-1065): Modified to
+ store the Id of the current thread in the 'ChannelState' of the new
+ channel.
- * generic/tclIO.c (Tcl_SpliceChannel, lines 2265-2270): Modified
- in the same manner as 'Tcl_CreateChannel' as the channel will be
- managed by the current thread afterward.
+ * generic/tclIO.c (Tcl_SpliceChannel, lines 2265-2270): Modified in
+ the same manner as 'Tcl_CreateChannel' as the channel will be managed
+ by the current thread afterward.
* generic/tclIO.c (Tcl_GetChannelThread, lines 1478-1503):
- * generic/tcl.decls (Tcl_GetChannelThread, lines 1504-1506): New
- API function to retrieve the Id of the managing thread from a
- channel. Implementation and declaration.
+ * generic/tcl.decls (Tcl_GetChannelThread, lines 1504-1506): New API
+ function to retrieve the Id of the managing thread from a channel.
+ Implementation and declaration.
* generic/tclTest.c (TestChannelCmd, lines 4520-4532): Added
- subcommand 'mthread' to query a channel about its managing
- thread.
+ subcommand 'mthread' to query a channel about its managing thread.
2001-03-29 Mo DeJong <mdejong@redhat.com>
- * tests/interp.test: Print out warning when
- testinterpdelete command is not defined.
- Add tests that checks to make sure a
- child interp inherits the parent's cwd.
+ * tests/interp.test: Print out warning when testinterpdelete command
+ is not defined. Add tests that checks to make sure a child interp
+ inherits the parent's cwd.
2001-03-29 Jeff Hobbs <jeffh@gimlet.activestate.com>
@@ -3553,35 +3448,34 @@
* unix/tclUnixPipe.c (TclpCreateTempFile): prevent potential race
condition and security leak in tmp filename creation.
- (max) [Patch #402924]
+ [Patch 402924] (max)
* unix/configure:
* unix/tcl.m4: corrected IRIX-5.x config to not use -n32.
- (english) [Patch #403626]
+ [Patch 403626] (english)
- * unix/tclUnixThrd.c (Tcl_ConditionWait): fixed handling of
- timeout for threads (corrects excessive CPU usage issue for Tk on
- Unix in threaded Tcl environment). (ruppert) [Bug #411603]
+ * unix/tclUnixThrd.c (Tcl_ConditionWait): fixed handling of timeout
+ for threads (corrects excessive CPU usage issue for Tk on Unix in
+ threaded Tcl environment). [Bug 411603] (ruppert)
2001-03-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* doc/lsort.n: Added some notes that clarify the behaviour of
- [lsort] as well as a whole bunch of examples. [Bug #219202]
+ [lsort] as well as a whole bunch of examples. [Bug 219202]
2001-03-27 Jeff Hobbs <jeffh@gimlet.activestate.com>
- * doc/Alloc.3: corrected docs to note that Tcl_Attempt* return
- char *'s, not ints. [Bug #411388]
+ * doc/Alloc.3: corrected docs to note that Tcl_Attempt* return char
+ *'s, not ints. [Bug 411388]
* tests/regexp.test (regexp-19.1):
- * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): fixed handling of nulls
- in subspec value.
+ * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): fixed handling of nulls in
+ subspec value.
2001-03-26 Don Porter <dgp@users.sourceforge.net>
- * generic/tclDecls.h (Tcl_InitCustomHashTable): Correction to
- patch from 2001-01-18; tclDecls.h was not generated using
- 'make genstubs'.
+ * generic/tclDecls.h (Tcl_InitCustomHashTable): Correction to patch
+ from 2001-01-18; tclDecls.h was not generated using 'make genstubs'.
2001-03-26 Donal K. Fellows <fellowsd@cs.man.ac.uk>
@@ -3590,11 +3484,11 @@
2001-03-23 Jeff Hobbs <jeffh@activestate.com>
- * generic/tclVar.c (Tcl_ArrayObjCmd): Corrected retrieval of
- resultPtr to prevent possible corruption.
+ * generic/tclVar.c (Tcl_ArrayObjCmd): Corrected retrieval of resultPtr
+ to prevent possible corruption.
* generic/tclNamesp.c (Tcl_Import): Correctly freed a DString.
- (lavana) [Patch #403755]
+ [Patch 403755] (lavana)
2001-03-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
@@ -3603,134 +3497,131 @@
2001-03-14 Don Porter <dgp@users.sourceforge.net>
- * library/package.tcl (pkg_mkIndex): Added patch from Vince
- Darley to make [pkg_mkIndex -verbose] even more verbose.
- [Bug 219349, Patch 403529]
+ * library/package.tcl (pkg_mkIndex): Added patch from Vince Darley to
+ make [pkg_mkIndex -verbose] even more verbose. [Bug 219349, Patch
+ 403529]
2001-03-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * doc/info.n: Improved documentation for [info hostname].
- [Bug #403840]
+ * doc/info.n: Improved documentation for [info hostname]. [Bug 403840]
* generic/tclVar.c (Tcl_UnsetObjCmd): Made command behave as
- documented [issue remaining from bug #405769]
+ documented [issue remaining from Bug 405769]
- * generic/tclCmdMZ.c (Tcl_StringObjCmd): A missing
- {return TCL_OK;} was causing memory corruption. [Bug #408002]
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): A missing {return TCL_OK;}
+ was causing memory corruption. [Bug 408002]
* generic/tclExecute.c (TclDeleteExecEnv, GrowEvaluationStack,
- TclExecuteByteCode): Added some casts to ClientData that are
+ (TclExecuteByteCode): Added some casts to ClientData that are
apparently needed on some architectures.
2001-03-12 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* tests/string.test: Fixed some test numberings and added a test.
- [Patch #403229]
+ [Patch 403229]
2001-03-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclVar.c (Tcl_UnsetObjCmd): Rewrote argument parser to
- avoid a read off the end of the argument array that could occur
- when executing something like [unset -nocomplain] was executed.
- Improved the error message given when too few arguments are given
- (-nocomplain should obviously be *before* --, not after it) and
- also modified the test suite to take account of that and the
- documentation to use the same improvement. [Bug 405769]
+ * generic/tclVar.c (Tcl_UnsetObjCmd): Rewrote argument parser to avoid
+ a read off the end of the argument array that could occur when
+ executing something like [unset -nocomplain] was executed. Improved
+ the error message given when too few arguments are given (-nocomplain
+ should obviously be *before* --, not after it) and also modified the
+ test suite to take account of that and the documentation to use the
+ same improvement. [Bug 405769]
2001-03-02 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * generic/tclExecute.c (TclExecuteByteCode): Fixed bug that could
- pass pointers to freed memory to command implementations, which
- most obviously caused some weird behaviour with [info level], but
- could have caused problems with user code and command traces too.
- [Bug 404865, Patch 405436]
+ * generic/tclExecute.c (TclExecuteByteCode): Fixed bug that could pass
+ pointers to freed memory to command implementations, which most
+ obviously caused some weird behaviour with [info level], but could
+ have caused problems with user code and command traces too. [Bug
+ 404865, Patch 405436]
2001-02-23 msofer <msofer@users.sourceforge.net>
+
* no changes; fixing up the missing comment in the previous one.
Sorry.
2001-02-23 msofer <msofer@ant.utdt>
- * /cvsroot/tcl/tcl/tests/execute.test:
- added test for evaluation of an expression in a variable; evals once
- by compiling, second time using the previous compilation
+ * /cvsroot/tcl/tcl/tests/execute.test: added test for evaluation of an
+ expression in a variable; evals once by compiling, second time using
+ the previous compilation
2001-02-18 Kevin B. Kenny <kennykb@acm.org>
* doc/clock.n: Updated documentation to reflect the addition of
- compat/strftime.c, including the correct formatting of
- ISO-8601:1988 fiscal week number (%V).
-
+ compat/strftime.c, including the correct formatting of ISO-8601:1988
+ fiscal week number (%V).
+
2001-02-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
* generic/tclCmdMZ.c (Tcl_SplitObjCmd): Improved efficiency of
- splitting strings into individual characters by adding hash so
- that only one Tcl_Obj per character is created. Improves
- performance of splitting of short strings and makes a huge
- difference to splitting of long strings, such as is done in the
- mime package in tcllib. [Bug #131523]
+ splitting strings into individual characters by adding hash so that
+ only one Tcl_Obj per character is created. Improves performance of
+ splitting of short strings and makes a huge difference to splitting of
+ long strings, such as is done in the mime package in tcllib. [Bug
+ 131523]
2001-01-31 Don Porter <dgp@users.sourceforge.net>
- * win/makefile.vc (install-libraries): Corrected misdirected
- install directory for the msgcat 1.2 package.
+ * win/makefile.vc (install-libraries): Corrected misdirected install
+ directory for the msgcat 1.2 package.
2001-01-30 Don Porter <dgp@users.sourceforge.net>
- * generic/tclIO.c (CopyData): Moved code that updates the count
- of how many bytes are left to copy. Corrects bug that when
- writing occurs in the background, the copy loop could be
- escaped without updating the count, causing CopyData() to try
- to copy more bytes than the toRead value originally passed to
- TclCopyChannel(), leading to hangs and misreporting of number
- of bytes copied. [Bug 118203, Patch 103432]
+ * generic/tclIO.c (CopyData): Moved code that updates the count of how
+ many bytes are left to copy. Corrects bug that when writing occurs in
+ the background, the copy loop could be escaped without updating the
+ count, causing CopyData() to try to copy more bytes than the toRead
+ value originally passed to TclCopyChannel(), leading to hangs and
+ misreporting of number of bytes copied. [Bug 118203, Patch 103432]
2001-01-18 Andreas Kupries <a.kupries@westend.com>
- * Everything below belongs together, it fixes bug #123153.
+ Everything below belongs together, it fixes [Bug 123153]
- * generic/tcl.h (line 342): A bit more explanation about the
- default value for TCL_PRESERVE_BINARY_COMPATABILITY.
+ * generic/tcl.h (line 342): A bit more explanation about the default
+ value for TCL_PRESERVE_BINARY_COMPATABILITY.
- * generic/tcl.h (line 1208): Define the macro 'Tcl_InitHashTable'
- only when TCL_PRESERVE_BINARY_COMPATIBILITY is not set
- as it kills binary compatibility to 8.3 and earlier
- versions. This is the main part of the patch/change.
+ * generic/tcl.h (line 1208): Define the macro 'Tcl_InitHashTable' only
+ when TCL_PRESERVE_BINARY_COMPATIBILITY is not set as it kills binary
+ compatibility to 8.3 and earlier versions. This is the main part of
+ the patch/change.
* generic/tcl.decls (line 1469):
* generic/tclHash.c (Tcl_InitHashTable):
* generic/tclHash.c (Tcl_InitHashTableEx):
* generic/tclObj.c (Tcl_InitObjHashTable): Changed
- 'Tcl_InitHashTableEx' to 'Tcl_InitCustomHashTable'. This change
- is more of an estethical nature, replacing the ubiquitous 'Ex'
- suffix with a more meaningful name. The introduced binary
- incompatibility is deemed acceptable as it is between alpha
- versions. Updated callers.
+ 'Tcl_InitHashTableEx' to 'Tcl_InitCustomHashTable'. This change is
+ more of an estethical nature, replacing the ubiquitous 'Ex' suffix
+ with a more meaningful name. The introduced binary incompatibility is
+ deemed acceptable as it is between alpha versions. Updated callers.
* doc/Hash.3:
* unix/mkLinks: Changed 'Tcl_InitHashTableEx' to
- 'Tcl_InitCustomHashTable'.
+ 'Tcl_InitCustomHashTable'.
2001-01-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
- * tests/winPipe.test (winpipe-1.20):
- * tests/winDde.test (createChildProcess):
- * tests/pkgMkIndex.test (pkgtest::createIndex): Removed
- assumption that paths contain no spaces which causes problems with
- both [eval] and [open |...] due to the well-known differences
- between lists and strings. Fixes bug #119406
+ * tests/winPipe.test (winpipe-1.20):
+ * tests/winDde.test (createChildProcess):
+ * tests/pkgMkIndex.test (pkgtest::createIndex): Removed assumption
+ that paths contain no spaces which causes problems with both [eval]
+ and [open |...] due to the well-known differences between lists and
+ strings. Fixes [Bug 119406]
2001-01-04 Don Porter <dgp@users.sourceforge.net>
* tests/unixInit.test:
* unix/tclUnixInit.c (TclpInitLibraryPath):
- * win/tclWinInit.c (TclpInitLibraryPath): Several entries in
- the library path ($tcl_libPath) are determined relative to the
- absolute path of the executable. When the executable is
- installed in or near the root directory of the file system,
- relative pathnames were being incorrectly generated, and in
- the worst case, memory access violations were crashing the program.
- [Bug 119416, Patch 102972]
+ * win/tclWinInit.c (TclpInitLibraryPath): Several entries in the
+ library path ($tcl_libPath) are determined relative to the absolute
+ path of the executable. When the executable is installed in or near
+ the root directory of the file system, relative pathnames were being
+ incorrectly generated, and in the worst case, memory access violations
+ were crashing the program. [Bug 119416, Patch 102972]
******************************************************************
*** CHANGELOG ENTRIES FOR 2000 IN "ChangeLog.2000" ***
diff --git a/ChangeLog.2002 b/ChangeLog.2002
new file mode 100644
index 0000000..30b8b17
--- /dev/null
+++ b/ChangeLog.2002
@@ -0,0 +1,4741 @@
+2002-12-18 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: some uses of xcopy swapped to the @$(CPY) macro.
+ Reported by Joe Mistachkin <joe@mistachkin.com>.
+
+2002-12-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclNotify.c (TclFinalizeNotifier, Tcl_SetServiceMode):
+ (Tcl_ThreadAlert): Check that the stub functions are non-NULL before
+ calling them. They could be set to NULL by Tcl_SetNotifier.
+
+2002-12-16 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclPipe.c (TclCleanupChildren):
+ * tests/winPipe.test:
+ * win/tclWinPipe.c (Tcl_WaitPid):
+ * win/tclWinTest.c: Gave Tcl_WaitPid the ability to return a Win32
+ exception code translated into a posix style SIG*. This allows [close]
+ to report "CHILDKILLED" without the meaning getting lost in a
+ truncated exit code. In TclCleanupChildren(), TclpGetPid() had to get
+ moved to before Tcl_WaitPid() as the the handle is removed from the
+ list taking away the ability to get the process id after the wait is
+ done. This shouldn't effect the unix implimentaion unless waitpid is
+ called with a pid of zero, meaning "any". I don't think it is..
+
+2002-12-13 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/configure.in: Updated configure of CVS snapshots to reflect
+ * win/configure.in: the 8.4.1.1 patchlevel.
+
+ * unix/configure: autoconf
+ * win/configure autoconf
+
+2002-12-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclProc.c (ProcessProcResultCode): Fix failure to propagate
+ negative return codes up the call stack. [Bug 647307]
+ * tests/proc.test (proc-6.1): Test for Bug 647307
+
+ * generic/tclParseExpr.c (TclParseInteger): Return 1 for the string
+ "0x" (recognize leading "0" as an integer). [Bug 648441]
+ * tests/parseExpr.test (parseExpr-19.1): Test for Bug 648441.
+
+2002-12-09 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinThrd.c (TclpMasterUnlock):
+ * generic/tclThread.c (TclFinalizeThreadData): TclpMasterUnlock must
+ exist and be called unconditional of TCL_THREADS. [Bug 651139]
+
+2002-12-08 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinSock.c (SocketThreadExitHandler, InitSockets): Check
+ that the tsdPtr is valid before dereferencing as we call it from the
+ exit handler, too [Bug 650353]. Another WSAStartup() loaded version
+ comparison byte swap issue fixed. Although 0x0101 byte swapped is
+ still 0x0101, properly claiming which is major/minor is more correct.
+
+2002-12-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclStubInit.c: regen
+ * generic/tclIntPlatDecls.h: regen
+ * generic/tclInt.decls: added TclWinResetInterface
+
+ * win/tclWin32Dll.c (TclWinResetInterfaces):
+ * win/tclWinInit.c (TclpSetInitialEncodings, WinEncodingsCleanup):
+ add exit handler that resets the encoding information to a state where
+ we can reuse Tcl. Following these changes, it is possible to reuse Tcl
+ (following Tcl_FindExecutable or Tcl_CreateInterp) following a
+ Tcl_Finalize.
+
+ * generic/tclIOUtil.c (TclFinalizeFilesystem): reset statics to their
+ original values on finalize to allow reuse of the library.
+
+2002-12-04 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c: reverted back to -r1.27 due to numerous test
+ failures that need to be resolved first. The idea was good, but the
+ details aren't.
+
+2002-12-04 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c (Tcl_WaitPid): When a process exits with an
+ exception, pass this notice on to the caller with a SIG* code rather
+ than truncating the exit code and missing the meaning. This allows
+ TclCleanupChildren() to report "CHILDKILLED".
+
+ This has a different behavior than unix in that closing the read pipe
+ to a process sends the SIGPIPE signal which is returned as a SIGPIPE
+ exit status. On windows, we send the process a CTRL_BREAK_EVENT and
+ get back a CONTROL_C_EXIT which is documented to mean a SIGINT which
+ seems wrong as a system, but is the correct exit status.
+
+2002-12-04 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to redirected 'load' in virtual filesystem
+ for some Unix systems.
+
+ * generic/tclEvent.c: the filesystem must be cleaned up before the
+ encoding subsystem because it needs access to encodings. Fixes crash
+ on exit observed in embedded applications.
+
+ * generic/tclTestObj.c: patch omitted from previous change of
+ 2002-11-13
+
+2002-12-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclStubLib.c (Tcl_InitStubs): prevent the cached check of
+ tclStubsPtr to allow for repeated load/unload of the Tcl dll by
+ hosting apps. [Bug 615304]
+
+2002-12-03 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c (sigHandler): Protect from trying to close a NULL
+ handle.
+
+ * win/tclWinPipe.c (PipeClose2Proc, TclpCreateProcess): Send a real
+ Win32 signal (CTRL_C_EVENT) when the read channel is brought down to
+ alert the child to close on its side. Start the process with
+ CREATE_NEW_PROCESS_GROUP to allow the ability to send these signals.
+ The following test case now brings down the child without the use of
+ an external [kill] command.
+
+ % set p [open "|[info name]" w+]
+ file8d5380
+ % pid $p
+ 2876
+ % close $p <- now doesn't block in Tcl_WaitPid()
+ %
+
+ * win/tclWinPipe.c (PipeClose2Proc): Changed CTRL_C_EVENT to
+ CTRL_BREAK_EVENT as it can't be ignored by the child and proved to
+ work on [open "|netstat 1" w+] where CTRL_C_EVENT didn't.
+
+2002-11-27 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPort.h: Don't turn off winsock prototypes! TclX didn't
+ like it. Even though the core doesn't use the prototypes, do offer
+ them.
+
+ * win/tclWinSock.c: Removed shutdown() from the function table as it
+ wasn't referenced anywhere and cleaned-up some casting that that
+ wasn't needed.
+
+ * win/tclWinSock.c: WSAStartup() loaded version comparison error which
+ resulted in 2.0 looking less than 1.1.
+
+ * win/tclWinChan.c (Tcl_MakeFileChannel): return of DuplicateHandle()
+ incorrectly used. [Bug 618852]
+
+2002-11-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEncoding.c (TclFinalizeEncodingSubsystem): properly
+ cleanup all encodings by using Tcl_FirstHashEntry in the while loop.
+
+ * unix/Makefile.in (valgrind): add simple valgrind target
+
+ * tests/exec.test: unset path var to allow singleproc testing
+
+ * generic/tclInterp.c (AliasCreate): preserve/release interps to
+ prevent possible FMR error in bad alias cases.
+
+2002-11-26 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPort.h:
+ * win/tclWinSock.c: This patch does two things:
+
+ 1) Cleans-up the winsock typedefs by using the typedefs provided by
+ winsock2.h. This has no effect on how winsock is initialized; just
+ makes the source code easier to read. [Patch 561305 561301]
+
+ 2) Revamps how the socket message handler thread is brought up and
+ down to allow for cleaner exits without the use of TerminateThread().
+ TerminateThread is evil. No attempt has been made to resolve [Bug
+ 593810] which may need a new channel driver version for adding a
+ registering function within the transfered thread to init the handler
+ thread. IOW, initialization of the TSD structure is getting bypassed
+ through the thread extension's [thread::transfer] command.
+
+2002-11-26 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinConsole.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
+ * win/tclWinSock.c:
+ * win/tclWinThrd.c:
+ * win/tclWinTime.c: General cleanup of all worker threads used by the
+ channel drivers. Eliminates the normal case where the worker thread is
+ terminated ('cept the winsock one). Instead, use kernel events to
+ signal a clean exit. Only when the worker thread is blocked on an I/O
+ call is the thread terminated. Essentially, this makes all other
+ channel worker threads behave like the PipeReaderThread() function for
+ it's cleaner exit behavior. This appears to fix [Bug 597924] but needs
+ 3rd party confirmation to close the issue.
+
+2002-11-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update msys build env URL. This release #4 build both
+ tcl and tk without problems.
+
+2002-11-22 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/init.tcl: code cleanup to reduce use of
+ * library/opt/optparse.tcl: string compare
+
+ * tests/interp.test: interp-14.4
+ * generic/tclInterp.c (TclPreventAliasLoop): prevent seg fault when
+ creating an alias command over the interp name. [Bug 641195]
+
+2002-11-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclUtil.c (SetEndOffsetFromAny): handle integer offset
+ after the "end-" prefix.
+
+ * generic/get.test:
+ * generic/string.test:
+ * generic/tclObj.c (SetIntFromAny, SetWideIntFromAny):
+ * generic/tclGet.c (TclGetLong, Tcl_GetInt): simplify sign handling
+ before calling strtoul(l). [Bug 634856]
+
+2002-11-18 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinThrd.c (Tcl_CreateThread/TclpThreadExit): Fixed improper
+ compiler macros that missed the VC++ compiler. This resulted in VC++
+ builds using CreateThread()/ExitThread() in place of the proper
+ _beginthreadex()/_endthreadex(). This was a large error and am
+ surprised I missed seeing it earlier.
+
+2002-11-13 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/regexpComp.test: added tests 22.*
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): add left and right
+ anchoring (^ and $) recognition and check starting or ending .* to
+ extend the number of REs that can be compiled to string match or
+ string equal.
+
+2002-11-13 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c:
+ * tests/trace.test: applied patch from Hemang Levana to fix [Bug
+ 615043] in execution traces with 'return -code error'.
+
+ * generic/tclTestObj.c:
+ * tests/stringObj.test: added 'knownBug' test for [Bug 635200]
+ * generic/tclStringObj.c: corrected typos in comments
+
+ * generic/tclFileName.c:
+ * tests/fileName.test: applied patch for bug reported against tclvfs
+ concerning handling of Windows serial ports like 'com1', 'lpt3' by the
+ virtual filesystem code.
+
+ * doc/RegExp.3: clarification of the 'extendMatch' return values.
+
+2002-11-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclUtil.c (Tcl_Backslash): use TclUtfToUniChar.
+ (Tcl_StringCaseMatch): use TclUtfToUniChar and add further
+ optimizations for the one-byte/char case.
+
+ * generic/tclUtf.c: make use of TclUtfToUniChar macro throughout the
+ functions, and add extra optimization to Tcl_NumUtfChars for
+ one-byte/char case.
+
+ * generic/tclVar.c (DisposeTraceResult, CallVarTraces): add proper
+ static declarations.
+
+ * generic/tclStringObj.c (Tcl_GetCharLength): optimize for the ascii
+ char case.
+ (Tcl_GetUniChar): remove unnecessary use of Tcl_UtfToUniChar.
+ (FillUnicodeRep): Use TclUtfToUniChar.
+
+ * generic/tclHash.c (HashStringKey): move string++ lower to save an
+ instruction.
+
+ * generic/tclExecute.c (TclExecuteByteCode): improve INST_STR_CMP to
+ use memcmp in the one-byte/char case, also use direct index for
+ INST_STR_INDEX in that case.
+
+ * generic/tclEncoding.c (UtfToUtfProc, UtfToUnicodeProc):
+ (TableFromUtfProc, EscapeFromUtfProc): Use TclUtfToUniChar.
+ (UnicodeToUtfProc, TableToUtfProc): add 1-byte char optimizations for
+ Tcl_UniCharToUtf call. These improve encoded channel conversion speeds
+ by up to 20%.
+
+ * tests/split.test: added 1-char string split tests
+ * generic/tclCmdMZ.c (Tcl_SplitObjCmd): Use TclUtfToUniChar. Also
+ added a special case for single-ascii-char splits.
+ (Tcl_StringObjCmd): Use TclUtfToUniChar. For STR_RANGE, support
+ getting ranges of ByteArrays (reverts change from 2000-05-26).
+ (TraceExecutionProc) add proper static declaration.
+
+ * generic/tclInt.h: add macro version of Tcl_UtfToUniChar
+ (TclUtfToUniChar) that does the one-byte utf-char check without
+ calling Tcl_UtfToUniChar, for use by the core. This brings notable
+ speedups for primarily ascii string handling.
+
+ * generic/tcl.h (TCL_PATCH_LEVEL): bump to 8.4.1.1 for patchlevel
+ only. This interim number will only be reflected by [info patchlevel].
+
+2002-11-11 Kevin Kenny <kennykb@acm.org>
+
+ * doc/Tcl.n: Corrected indentation of the new language. Oops.
+
+2002-11-10 Kevin Kenny <kennykb@acm.org>
+
+ * doc/Tcl.n: Added language to the Endekalogue to make it clear that
+ substitutions always take place from left to right. [Bug 635644]
+
+2002-11-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * changes: Note TclInExit TclInThreadExit changes.
+ * generic/tclEvent.c (TclInExit, TclInThreadExit): Split out
+ functionality of TclInExit to make it clear which one should be called
+ in each situation.
+ * generic/tclInt.decls: Declare TclInThreadExit.
+ * generic/tclIntDecls.h: Regen.
+ * generic/tclStubInit.c: Regen.
+ * mac/tclMacChan.c (StdIOClose):
+ * unix/tclUnixChan.c (FileCloseProc):
+ * win/tclWinChan.c (FileCloseProc):
+ * win/tclWinConsole.c (ConsoleCloseProc):
+ * win/tclWinPipe.c (TclpCloseFile):
+ * win/tclWinSerial.c (SerialCloseProc): Invoke the new TclInThreadExit
+ method instead of TclInExit.
+
+2002-11-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Generate a fatal configure error if
+ no ar program can be found on the path. [Bug 582039]
+ * win/configure: Regen.
+ * win/configure.in: Check that AR, RANLIB, and RC are found on the
+ path when building with gcc.
+
+2002-11-03 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c: Calls Registry_Init() and Dde_Init() when
+ STATIC_BUILD and TCL_USE_STATIC_PACKAGES macros are set.
+
+ * win/makefile.vc:
+ * win/rules.vc: linkexten option now sets the TCL_USE_STATIC_PACKAGES
+ macro which also adds the registry and dde object files to the link
+ of the shell. [Patch 479697] Also factored some additional macros that
+ will be helpful for extension authors. Version grepping of tcl.h will
+ need to be added to complete this.
+
+ * win/buildall.vc.bat: Added more descriptive commentary.
+
+2002-11-01 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinReg.c: Changed the Tcl_PkgProvide() line to declare the
+ registry extension at version 1.1 from 1.0.
+
+2002-10-31 Andreas Kupries <andreask@activestate.com>
+
+ * library/word.tcl: Changed $tcl_platform to $::tcl_platform to avoid
+ possible scope trouble.
+
+2002-10-29 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinInt.h:
+ * win/tclWin32Dll.c: added comments about certain NULL function
+ pointers which will be filled in when Tcl_FindExecutable is called, so
+ that users don't report invalid bugs on this topic. (No code changes
+ at all).
+
+2002-10-29 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclLoadDyld.c (TclpFindSymbol): pass all dyld error messages
+ upstream [Bug 627546].
+
+2002-10-28 Andreas Kupries <andreask@activestate.com>
+
+ * library/dde/pkgIndex.tcl:
+ * library/reg/pkgIndex.tcl: Changed the hardwired debug suffix (d) to
+ the correct suffix (g).
+
+2002-10-28 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Converted the Mac-specific [package unknown]
+ * library/init.tcl: behavior to use a chaining mechanism to extend
+ * library/package.tcl: the default [tclPkgUnknown]. [Bug 627660]
+ * library/tclIndex: [Patch 624509] (steffen)
+
+2002-10-26 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: xcopy on NT 4.0 doesn't support the /Y switch
+ (overwrite). Added logic to handle this. [Bug 618019]
+
+2002-10-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclInt.h: Removed definitions of obsolete HistoryEvent and
+ HistoryRev structures (the history mechanism has been written in Tcl
+ for some time now.)
+
+2002-10-22 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.4.1 TAGGED FOR RELEASE ***
+
+ * changes: updated for 8.4.1 release
+
+ * win/Makefile.in: removed @MEM_DEBUG_FLAGS@ subst.
+ * win/configure: regen
+ * win/configure.in: removed SC_ENABLE_MEMDEBUG call
+ * win/tcl.m4: replaced SC_ENABLE_MEMDEBUG with a more intelligent
+ SC_ENABLE_SYMBOLS that takes yes|no|mem|compile|all as options now.
+
+2002-10-22 Daniel Steffen <das@users.sourceforge.net>
+
+ * library/auto.tcl (tcl_findLibrary):
+ * library/package.tcl (tclPkgUnknown): on macosx, search inside the
+ Resources/Scripts subdirectory of any potential package directory.
+ * macosx/Tcl.pbproj/project.pbxproj: add standard Frameworks dirs to
+ TCL_PACKAGE_PATH make argument.
+ * unix/tclUnixInit.c (TclpSetVariables): on macosx, add embedded
+ framework dirs to tcl_pkgPath: @executable_path/../Frameworks and
+ @executable_path/../PrivateFrameworks (if they exist), as well as the
+ dirs in DYLD_FRAMEWORK_PATH (if set). [Patch 624509]
+ use standard MAXPATHLEN instead of literal 1024
+
+2002-10-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/StringObj.3, doc/Object.3: Documented that Tcl_Obj's standard
+ string form is a modified UTF-8; apparently, this was not mentioned
+ anywhere in the main docs, and lead to [Bug 624919].
+
+2002-10-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: bumped version to 8.4.1
+ * generic/tcl.h: Added reminder comment to edit
+ macosx/Tcl.pbproj/project.pbxproj when version number changes.
+
+2002-10-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/reg/pkgIndex.tcl:
+ * win/configure:
+ * win/configure.in:
+ * win/Makefile.in:
+ * win/makefile.vc:
+ * win/makefile.bc: Updated to reg1.1
+
+ * doc/registry.n: Added support for broadcasting changes to the
+ * tests/registry.test: registry Environment. Noted proper code in the
+ * win/tclWinReg.c: docs. [Patch 625453]
+
+ * unix/Makefile.in (dist): add any mac/tcl*.sea.hqx files
+
+2002-10-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclVar.c: Fixed code that check for proper # of args to
+ * tests/var.test: [array names]. Added test. [Bug 624755]
+
+2002-10-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/configure: add workaround for cygwin windres
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): problem. [Patch 624010] (howell)
+
+2002-10-15 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README: added archives.tcl.tk note
+
+ * unix/configure:
+ * unix/tcl.m4: Correct AIX-5 ppc build flags. Correct HP 11 64-bit gcc
+ building. [Patch 601051] (martin)
+
+2002-10-15 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c:
+ * tests/trace.test: applied patch from Hemang Levana to fix [Bug
+ 615043] in execution traces with idle tasks firing.
+
+2002-10-14 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEnv.c (Tcl_PutEnv): correct possible mem leak. [Patch
+ 623269] (brouwers)
+
+2002-10-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tcl.h: Need a different strategy through the maze of
+ #defines to let people building with Cygwin build correctly. Also made
+ some comments less misleading...
+
+2002-10-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README: fixed minor nits [Bug 607776] (virden)
+
+ * win/configure:
+ * win/tcl.m4: enable USE_THREAD_ALLOC (new threaded allocator) by
+ default in cygwin configure on Windows.
+
+2002-10-10 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Tcl.n: Clarified that namespace separators are legal in the
+ variable names during $-subtitution. [Bug 615139]
+
+ * doc/regexp.n: Typo correction. Thanks Ronnie Brunner. [Bug 606826]
+
+2002-10-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * unix/tclLoadAout.c
+ * unix/tclLoadDl.c
+ * unix/tclLoadDld.c
+ * unix/tclLoadDyld.c
+ * unix/tclLoadNext.c
+ * unix/tclLoadOSF.c
+ * unix/tclLoadShl.c
+ * win/tclWinLoad.c: allow either full paths or simply dll names to be
+ specified when loading files (the latter will be looked up by the OS
+ on your PATH/LD_LIBRARY_PATH as appropriate). Fixes [Bug 611108]
+
+2002-10-09 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/README: doc'ed --enable-symbols options.
+ * unix/Makefile.in: removed @MEM_DEBUG_FLAGS@ subst.
+ * unix/configure: regen
+ * unix/configure.in: removed SC_ENABLE_MEMDEBUG call
+ * unix/tcl.m4: replaced SC_ENABLE_MEMDEBUG with a more intelligent
+ SC_ENABLE_SYMBOLS that takes yes|no|mem|compile|all as options now.
+
+2002-10-09 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinTime.c: Added code to set an exit handler that terminates
+ the thread that calibrates the performance counter, so that the thread
+ won't outlive unloading the Tcl DLL. [Bug 620735]
+
+2002-10-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/binary.n: More clarification of [binary scan]'s behaviour.
+
+2002-10-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclIntDecls.h: fixed botched regen.
+
+2002-10-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls: made TclSetPreInitScript() declaration
+ generic as it is used on mac & aqua as well.
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c: regen.
+ * generic/tclCompile.h: added prototype for TclCompileVariableCmd.
+
+ * mac/tclMacPort.h: removed incorrect <fcntl.h> definitions and
+ obsolete <stat.h> definitions.
+ * mac/tclMacChan.c: removed obsolete GetOpenMode() and replaced
+ associated constants with the <fcntl.h> analogues (they existing defs
+ were inconsistent with <fcntl.h> which was causing havoc when
+ Tcl_GetOpenMode was used instead of private GetOpenMode).
+
+ * mac/tclMacFCmd.c: removed GenerateUniqueName(), use equivalent (and
+ identically named) routine from MoreFiles instead.
+
+ * mac/tclMacLoad.c: CONSTification, fixes to Vince's last changes.
+
+ * mac/tclMacFile.c:
+ * mac/tclMacTest.c:
+ * mac/tclMacUnix.c: CONSTification.
+
+ * mac/tclMacOSA.c: CONSTification, sprintf fixes, UH 3.4.x changes;
+ fix for missing autoname token from TclOSACompileCmd. (bdesgraupes)
+ * mac/AppleScript.html(AppleScript delete): doc fix. (bdesgraupes)
+
+ * mac/tcltkMacBuildSupport.sea.hqx: updated MoreFiles to 1.5.3,
+ updated build instructions for 8.4.
+ * mac/tclMacProjects.sea.hqx: rebuilt archive.
+
+2002-10-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/Alloc.3: Added a note to mention that attempting to allocate a
+ zero-length block can return NULL. [Tk Bug 619544]
+
+2002-10-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/binary.n: Doc improvements [Patch 616480]
+
+ * tests/fCmd.test, tests/winFCmd.test:
+ * tools/eolFix.tcl, tools/genStubs.tcl: [file exist] -> [file exists]
+ Thanks to David Welton.
+
+2002-10-03 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: fixed typo [Bug 618018]. Thanks to "JJM".
+
+2002-10-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tools/man2help2.tcl:
+ * tests/http.test, tests/httpd, tests/httpold.test:
+ * tests/env.test, tests/binary.test, tests/autoMkindex.test:
+ * library/init.tcl, library/http/http.tcl: [info exist] should really
+ be [info exists]. [Bug 602566]
+
+ * doc/lsearch.n: Better specification of what happens when -sorted is
+ mixed with other options. [Bug 617816]
+
+2002-10-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclProc.c (TclCreateProc): mask out VAR_UNDEFINED for
+ precompiled locals to support 8.3 precompiled code.
+ (Tcl_ProcObjCmd): correct 2002-09-26 fix to look for tclProcBodyType.
+
+2002-10-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/socket.n: Mentioned that ports may be specified as serivce names
+ as well as integers. [Bug 616843]
+
+2002-09-30 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): correct the checking
+ for bad re's that didn't terminate the re string. Resultant compiles
+ were correct, but much slower than necessary.
+
+2002-09-29 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c: Added proper exiting conditions using Win32
+ console signals. This handles the existing lack of a Ctrl+C exit to
+ call exit handlers when built for thread support. Also, properly
+ handles exits from other conditions such as CTRL_CLOSE_EVENT,
+ CTRL_LOGOFF_EVENT, and CTRL_SHUTDOWN_EVENT signals. In all cases,
+ exit handlers will be called. [Bug 219355]
+
+ * win/makefile.vc: Added missing tclThreadAlloc.c to the build rules
+ and defines USE_THREAD_ALLOC when TCL_THREADS is defined to get the
+ new behavior by default.
+
+2002-09-27 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bumped to version 8.4.1 to avoid confusion of
+ * generic/tcl.h: CVS snapshots with the actual 8.4.0 release.
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf
+ * win/configure:
+
+2002-09-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure: regen.
+ * unix/tcl.m4: improve AIX-4/5 64bit compilation support.
+
+ * generic/tclProc.c (Tcl_ProcObjCmd): correct overeager optimization
+ of noop proc to handle the precompiled case. (sofer)
+
+ * unix/ldAix (nmopts): add -X32_64 to make it work for 32 or 64bit
+ mode compilation.
+
+ * library/encoding/koi8-u.enc: removed extraneous spaces that confused
+ encoding reader. [Bug 615115]
+
+ * unix/Makefile.in: generate source dists with -src designator and do
+ not generate .Z anymore (just .gz and .zip).
+
+2002-09-18 Mumit Khan <khan@nanotech.wisc.edu>
+
+ Added basic Cygwin support.
+
+ * win/tcl.m4 (SC_PATH_TCLCONFIG): Support one-tree build.
+ (SC_PATH_TKCONFIG): Likewise.
+ (SC_PROG_TCLSH): Likewise.
+ (SC_CONFIG_CFLAGS): Assume real Cygwin port and remove -mno-cygwin
+ flags. Add -mwin32 to extra_cflags and extra_ldflags. Remove ``-e
+ _WinMain@16'' from LDFLAGS_WINDOW.
+ * win/configure.in: Allow Cygwin build.
+ (SEH test): Define to be 1 instead of empty value.
+ (EXCEPTION_DISPOSITION): Add test.
+ * win/configure: Regenerate.
+
+ * generic/tcl.h: Don't explicitly define __WIN32__ for Cygwin, let the
+ user decide whether to use Windows or POSIX personality.
+ (TCL_WIDE_INT_TYPE, TCL_LL_MODIFIER, struct Tcl_StatBuf): Define for
+ Cygwin.
+ * generic/tclEnv.c (Tcl_CygwinPutenv): putenv replacement for Cygwin.
+ * generic/tclFileName.c (Tcl_TranslateFileName): Convert POSIX to
+ native format.
+ (TclDoGlob): Likewise.
+ * generic/tclPlatDecls.h (TCHAR): Define for Cygwin.
+ * win/tclWinPort.h (putenv, TclpSysAlloc, TclpSysFree,
+ (TclpSysRealloc): Define for Cygwin.
+
+2002-09-26 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: preserve environment value of INSTALL_ROOT. When
+ embedding only use deployment build. Force relink before embedded
+ build to ensure new linker flags are picked up.
+
+ * macosx/Tcl.pbproj/project.pbxproj: add symbolic links to debug lib,
+ stub libs and tclConfig.sh in framework toplevel. Configure target
+ dependency fix. Fix to 'clean' action. Added private tcl headers to
+ framework. Install tclsh symbolic link. Html doc build works when no
+ installed tclsh available. Made html doc structure in framework more
+ like in Apple frameworks.
+
+2002-09-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tcl.m4 (SC_TCL_64BIT_FLAGS): Yet more robust 64-bit value
+ detection to close [Bug 613117] on more systems.
+
+ * generic/tclCompile.c (TclPrintSource): More CONSTifying.
+ * generic/tclExecute.c (EvalStatsCmd): Object-ify to reduce warnings.
+ Thanks to 'CoderX2' on the chat for bringing this to my attention...
+
+ * unix/tcl.m4: Forgot to define TCL_WIDE_INT_IS_LONG at the
+ appropriate moment. I believe this is the cause of [Bug 613117]
+
+ * doc/lset.n: Changed 'list' to 'varName' for consistency with lappend
+ documentation. Thanks to Glenn Jackman [Bug 611719]
+
+2002-09-22 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected [puts -nonewline] within
+ test bodies. Thanks to Harald Kirsch. [Bug 612786, Patch 612788] Also
+ corrected reporting of body return code. Thanks to David Taback [Bug
+ 611922]
+ * library/tcltest/pkgIndex.tcl: Bump to version 2.2.1.
+ * tests/tcltest.test: added tests for these bugs.
+
+2002-09-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add PEEK_XCLOSEIM define under
+ Linux. This is used by Tk to double check that an X input context is
+ cleaned up before it is closed.
+
+2002-09-12 David Gravereaux <davygrvy@pobox.com>
+
+ * win/coffbase.txt: Added BLT to the virtual base address listings
+ table should BLT's build tools decide to use it.
+
+2002-09-12 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.h:
+ * mac/tclMacApplication.r:
+ * mac/tclMacLibrary.r:
+ * mac/tclMacResource.r: unified use of the two equivalent resource
+ compiler header inclusion defines RC_INVOKED and RESOURCE_INCLUDED,
+ now use RC_INVOKED throughout.
+
+2002-09-10 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/README: Add note about building extensions with the same
+ compiler Tcl was built with. [Tk Bug 592096]
+
+2002-09-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: disabled building html
+ documentation during embedded build.
+
+2002-09-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: added DYLIB_INSTALL_DIR variable for macosx and
+ set it to default value ${LIB_RUNTIME_DIR}
+ * unix/tcl.m4 (Darwin): use DYLIB_INSTALL_DIR instead of
+ LIB_RUNTIME_DIR in the -install_name argument to ld.
+ * unix/configure: regen.
+
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * macosx/Makefile: added support for building Tcl as an embedded
+ framework, i.e. using an dyld install_name containing
+ @executable_path/../Frameworks via the new DYLIB_INSTALL_DIR
+ unix/Makefile variable.
+
+2002-09-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.4.0 TAGGED FOR RELEASE ***
+
+2002-09-06 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/file.n: Format correction, and clarified [file normalize]
+ returns an absolute path.
+
+ * doc/tcltest.n: Added examples section, as long promised.
+
+2002-09-06 Reinhard Max <max@suse.de>
+
+ * tests/tcltest.test: Added nonRoot flag to tests 8.3, 8.4, and 8.12.
+
+2002-09-05 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Clarified phrasing.
+
+ * generic/tclBasic.c (TclRenameCommand,CallCommandTraces):
+ * tests/trace.test (trace-27.1): Corrected memory leak when a rename
+ trace deleted the command being traced. Test added. Thanks to Hemang
+ Lavana for the fix. [Bug 604609]
+
+ * generic/tclVar.c (TclDeleteVars): Corrected logic for setting the
+ TCL_INTERP_DESTROYED flag when calling variable traces. [Tk Bug 605121]
+
+2002-09-04 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c (DeleteArray): leak plug [Bug 604239]. Thanks to
+ dkf and dgp for the long and difficult discussion in the chat.
+
+2002-09-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclVar.c (Tcl_UpVar2): code cleanup to not use goto
+
+ * unix/configure: remove -pthread from LIBS on FreeBSD in thread
+ * unix/tcl.m4: enabled build. [Bug 602849]
+
+2002-09-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInterp.c (AliasCreate): a Tcl_Obj was leaked on error
+ return from TclPreventAliasLoop.
+
+2002-09-03 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: Bumped version number to 8.4.0
+ and updated copyright info.
+
+2002-09-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c (Tcl_UpVar2): a Tcl_Obj was being leaked on error
+ return from TclGetFrame.
+
+2002-09-03 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated changes for 8.4.0 release.
+
+2002-09-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixFile.c (TclpObjLink): removed unnecessary/unfreed extra
+ native char*.
+
+ * unix/tclUnixChan.c (Tcl_MakeTcpClientChannel): make sure to init
+ flags field of TcpState ptr to 0.
+
+ * unix/configure:
+ * unix/tcl.m4: added 64-bit gcc compilation support on HP-11.
+ [Patch 601051] (martin)
+
+ * README: Bumped version number to 8.4.0
+ * generic/tcl.h:
+ * tools/tcl.wse.in:
+ * unix/configure:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure:
+ * win/configure.in:
+
+ * generic/tclInterp.c (SlaveCreate): make sure that the memory and
+ checkmem commands are initialized in non-safe slave interpreters when
+ TCL_MEM_DEBUG is used. [Bug 583445]
+
+ * win/tclWinConsole.c (ConsoleCloseProc): only wait on writable pipe
+ if there was something to write. This may prevent infinite wait on
+ exit.
+
+ * tests/exec.test: marked exec-18.1 unixOnly until the Windows
+ incompatability (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.
+
+ * unix/tclUnixInit.c (Tcl_MacOSXGetLibraryPath): made this static
+ function only appear when HAVE_CFBUNDLE is defined.
+
+2002-08-31 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: added TK_SHLIB_LD_EXTRAS analogue of existing
+ TCL_SHLIB_LD_EXTRAS for linker settings only used when linking Tk.
+
+ * unix/configure: regen
+
+2002-08-31 Daniel Steffen <das@users.sourceforge.net>
+
+ *** macosx-8-4-branch merged into the mainline [Patch 602770] ***
+
+ * generic/tcl.decls: added new macosx specific entry to stubs table.
+
+ * tools/genStubs.tcl: added generation of platform guards for
+ macosx. This is a little more complex than it seems, because MacOS X
+ IS "unix" plus a little bit, for the purposes of Tcl. BUT
+ unfortunately, Tk uses "unix" to mean X11. So added platform keys for
+ macosx (the little added to "unix"), "aqua" and "x11" to distinguish
+ these for Tk.
+
+ * generic/tcl.h: added a #ifnded RESOURCE_INCLUDED so that tcl.h can
+ be passed to the resource compiler.
+
+ * generic/tcl.h:
+ * generic/tclNotify.c: added a few Notifier procs, to be able to
+ modify more bits of the Tcl notifier dynamically. Required to get Mac
+ OS X Tk to live on top of the Tcl Unix threaded notifier. Changes the
+ size of the Tcl_NotifierProcs structure, but doesn't move any elements
+ around.
+
+ * unix/tclUnixNotfy.c: moved the call to Tcl_ConditionNotify till
+ AFTER we are done mucking with the pointer swap. Fixes cases where the
+ thread waiting on the condition wakes & accesses the waitingListPtr
+ before it gets reset, causing a hang.
+
+ * library/auto.tcl (tcl_findLibrary): added checking the directories
+ in the tcl_pkgPath for library files on macosx to enable support of
+ the standard Mac OSX library locations.
+
+ * unix/Makefile.in:
+ * unix/configure.in:
+ * unix/tcl.m4: added MAC_OSX_DIR. Added PLAT_OBJS to the OBJS: there
+ are some MacOS X specific files now for Tcl, and when I get the
+ resource & applescript stuff ported over, and restore support for
+ FindFiles, etc, there will be a few more. Added LD_LIBRARY_PATH_VAR
+ configure variable to avoid having to set all possible LD_LIBRARY_PATH
+ analogues on all platforms. LD_LIBRARY_PATH_VAR is "LD_LIBRARY_PATH"
+ by default, "LIBPATH" on AIX, "SHLIB_PATH" on HPUX and
+ "DYLD_LIBRARY_PATH" on Mac OSX. Added configure option to package Tcl
+ as a framework on Mac OSX.
+
+ * macosx/tclMacOSXBundle.c (new): support for finding Tcl extension
+ packaged as 'bundles' in the standard Mac OSX library locations.
+
+ * unix/tclUnixInit.c: added support for findig the tcl script library
+ inside Tcl packaged as a framework on Mac OSX.
+
+ * macosx/Tcl.pbproj/jingham.pbxuser (new):
+ * macosx/Tcl.pbproj/project.pbxproj (new): project for Apple's
+ ProjectBuilder IDE.
+
+ * macosx/Makefile (new): simple makefile for building the project from
+ the command line via the ProjectBuilder tool 'pbxbuild'.
+
+ * unix/configure:
+ * generic/tclStubInit.c:
+ * generic/tclPlatDecls.h: regen
+
+2002-08-29 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * win/tclWinThrd.c (TclpFinalizeThreadData, TclWinFreeAllocCache):
+ Applied patch for [Bug 599428], provided by Miguel Sofer
+ <msofer@users.sourceforge.net>.
+
+2002-08-28 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclEnv.c:
+ * unix/configure.in:
+ * win/tclWinPort.h: putenv() on some systems copies the buffer rather
+ than taking reference to it. This causes memory leaks and is know to
+ effect mswindows (msvcrt) and NetBSD 1.5.2 . This patch tests for this
+ behavior and turns on -DHAVE_PUTENV_THAT_COPIES=1 when approriate.
+ Thanks to David Welton for assistance. [Bug 414910]
+
+ * unix/configure: regen'd
+
+2002-08-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/eval.n: Added mention of list command and corrected "SEE ALSO".
+
+ * unix/configure.in: Cache handling of ac_cv_type_socklen_t was wrong.
+ [Bug 600931] reported by John Ellson. Fixed by putting the brackets
+ where they belong.
+
+2002-08-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompCmds.c: fix for [Bug 599788] (error in element name
+ causing segfault), reported by Tom Wilkason. Fixed by copying the
+ tokens instead of the source string.
+
+2002-08-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclThreadAlloc.c: small optimisation, reducing the new
+ allocator's overhead.
+
+2002-08-23 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclObj.c (USE_THREAD_ALLOC): fixed leak [Bug 597936]. Thanks
+ to Zoran Vasiljevic.
+
+2002-08-23 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclThreadAlloc.c (USE_THREAD_ALLOC): moving objects between
+ caches as a block, instead of one-by-one.
+
+2002-08-22 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c:
+ * generic/tclCmdMZ.c: fix for freed memory r/w in delete traces [Bug
+ 589863], patch by Hemang Lavana.
+
+2002-08-20 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * win/Makefile.in (CFLAGS):
+ * unix/Makefile.in (MEM_DEBUG_FLAGS): Added usage of @MEM_DEBUG_FLAGS@.
+ * win/configure.in:
+ * unix/configure.in: Added usage of SC_ENABLE_MEMDEBUG.
+ * win/tcl.m4:
+ * unix/tcl.m4: Added macro SC_ENABLE_MEMDEBUG. Allows a user of
+ configure to (de)activate memory validation and debugging
+ (TCL_MEM_DEBUG). No need to modify the makefile anymore.
+
+2002-08-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCkalloc.c: CONSTified MemoryCmd and CheckmemCmd.
+
+ * README: Bumped version number to 8.4b3 to distinguish
+ * generic/tcl.h: HEAD from the 8.4b2 release.
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure.in:
+
+ * unix/configure: autoconf
+ * win/configure:
+
+ * library/http/http.tcl: Corrected installation directory of
+ * library/msgcat/msgcat.tcl: the package tcltest 2.2. Added
+ * library/opt/optparse.tcl: comments in other packages to remind
+ * library/tcltest/tcltest.tcl: that installation directories need
+ * unix/Makefile.in: updates to match increasing version
+ * win/Makefile.in: numbers. [Bug 597450]
+ * win/makefile.bc:
+ * win/makefile.vc:
+
+2002-08-19 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * unix/tclUnixTest.c (TestfilehandlerCmd): Changed readable/writable
+ to the more common readable|writable. Fixes [Bug 596034] reported by
+ Larry Virden <lvirden@users.sourceforge.net>.
+
+2002-08-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/fCmd.test: Added test to make sure that the cause of the
+ problem is detectable with an unpatched Tcl.
+ * doc/ObjectType.3: Added note on the root cause of this problem to
+ the documentation, since it is possible for user code to trigger this
+ sort of behaviour too.
+ * generic/tclIOUtil.c (SetFsPathFromAny): Objects should only have
+ their old representation deleted when we know that we are about to
+ install a new one. This stops a weird TclX bug under Linux with
+ certain kinds of memory debugging enabled which essentally came down
+ to a double-free of a string.
+
+2002-08-14 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInt.h:
+ * generic/tclObj.c: (code cleanup) factored the parts in the macros
+ TclNewObj() / TclDecrRefCount() into a common part for all
+ memory allocators and two new macros TclAllocObjStorage() /
+ TclFreeObjStorage() that are specific to each allocator and fully
+ describe the differences. Removed allocator-specific code from
+ tclObj.c by using the macros.
+
+2002-08-12 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: fixing UMR in delete traces, [Bug 589863].
+
+2002-08-08 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/man2help.tcl: Fixed $argv handling bug where if -bitmap wasn't
+ specified $argc was off by one.
+
+2002-08-08 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * tests/uplevel.test: added 6.1 to test [uplevel] with shadowed
+ commands [Bug 524383]
+
+ * tests/subst.test: added 5.8-10 as further tests for [Bug 495207]
+
+2002-08-08 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/README: Noted removal of defs.tcl.
+
+2002-08-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/lsearch.n: corrected lsearch docs to use -inline in examples.
+
+ *** 8.4b2 TAGGED FOR RELEASE ***
+
+ * tests/fCmd.test:
+ * tests/unixFCmd.test: updated tests for new link copy behavior.
+ * generic/tclFCmd.c (CopyRenameOneFile): changed the behavior to
+ follow links to endpoints and copy that file/directory instead of just
+ copying the surface link. This means that trying to copy a link that
+ has no endpoint (danling link) is an error. [Patch 591647] (darley)
+ (CopyRenameOneFile): this is currently disabled by default until
+ further issues with such behavior (like relative links) can be
+ handled correctly.
+
+ * tests/README: slight wording improvements
+
+2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * docs/BoolObj.3: added description of valid string reps for a
+ boolean object. [Bug 584794]
+ * generic/tclObj.c: optimised Tcl_GetBooleanFromObj and
+ SetBooleanFromAny to avoid parsing the string rep when it can be
+ avoided. [Bugs 584650, 472576]
+
+2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompile.h:
+ * generic/tclObj.c: making tclCmdNameType static ([Bug 584567], Don
+ Porter).
+
+2002-08-07 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclObj.c (Tcl_NewObj): added conditional code for
+ USE_THREAD_ALLOC; objects allocated through Tcl_NewObj() were
+ otherwise being leaked. [Bug 587488] reported by Sven Sass.
+
+2002-08-06 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls:
+ * unix/tclUnixThrd.c: Added stubs and implementations for
+ non-threaded build for the tclUnixThrd.c procs TclpReaddir,
+ TclpLocaltime, TclpGmtime and TclpInetNtoa. Fixes link errors in
+ stubbed & threaded extensions that include tclUnixPort.h and use any
+ of the procs readdir, localtime, gmtime or inet_ntoa (e.g. TclX 8.4)
+ [Bug 589526]
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c: Regen.
+
+2002-08-05 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: The setup and cleanup scripts are now
+ * library/tcltest/pkgIndex.tcl: skipped when a test is skipped, fixing
+ * tests/tcltest.test: [Bug 589859]. Test for bug added, and
+ corrected tcltest package bumped to version 2.2.
+
+ * generic/tcl.decls: Restored Tcl_Concat to return (char *). Like
+ * generic/tclDecls.h: Tcl_Merge, it transfers ownership of a dynamic
+ * generic/tclUtil.c: allocated string to the caller.
+
+2002-08-04 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/CmdCmplt.3: Applied Patch 585105 to fully CONST-ify all
+ * doc/Concat.3: remaining public interfaces of Tcl. Notably,
+ * doc/CrtCommand.3: the parser no longer writes on the string it
+ * doc/CrtSlave.3: is parsing, so it is no longer necessary for
+ * doc/CrtTrace.3: Tcl_Eval() to be given a writable string. Also
+ * doc/Eval.3: the refactoring of the Tcl_*Var* routines by
+ * doc/ExprLong.3: by Miguel Sofer is included, so that the
+ * doc/LinkVar.3: "part1" argument for them no longer needs to
+ * doc/ParseCmd.3: be writable either.
+ * doc/SetVar.3:
+ * doc/TraceVar.3:
+ * doc/UpVar.3: Compatibility support has been enhanced so
+ * generic/tcl.decls: that a #define of USE_NON_CONST will remove
+ * generic/tcl.h: all possible source incompatibilities with the
+ * generic/tclBasic.c: 8.3 version of the header file(s). The new
+ * generic/tclCmdMZ.c: #define of USE_COMPAT_CONST now does what
+ * generic/tclCompCmds.c:USE_NON_CONST used to do -- disable only those
+ * generic/tclCompExpr.c:new CONST's that introduce irreconcilable
+ * generic/tclCompile.c: incompatibilities.
+ * generic/tclCompile.h:
+ * generic/tclDecls.h: Several bugs are also fixed by this patch.
+ * generic/tclEnv.c: [Bugs 584051,580433] [Patches 585105,582429]
+ * generic/tclEvent.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclInterp.c:
+ * generic/tclLink.c:
+ * generic/tclObj.c:
+ * generic/tclParse.c:
+ * generic/tclParseExpr.c:
+ * generic/tclProc.c:
+ * generic/tclTest.c:
+ * generic/tclUtf.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+ * mac/tclMacTest.c:
+ * tests/expr-old.test:
+ * tests/parseExpr.test:
+ * unix/tclUnixTest.c:
+ * unix/tclXtTest.c:
+ * win/tclWinTest.c:
+
+2002-08-01 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: bugfix (reading freed memory). Testsuite
+ passed on linux/i386, compile-13.1 hung on linux/alpha.
+
+2002-08-01 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: added a reference count for the complete
+ execution stack, instead of Tcl_Preserve/Tcl_Release.
+
+2002-08-01 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclCkalloc.c (TclFinalizeMemorySubsystem): Don't lock the
+ ckalloc mutex before invoking the Tcl_DumpActiveMemory function since
+ it also locks the same mutex. This code is only executed when "memory
+ onexit filename" has been executed and Tcl is compiled with
+ -DTCL_MEM_DEBUG.
+
+2002-08-01 Reinhard Max <max@suse.de>
+
+ * win/tclWinPort.h: The windows headers don't provide socklen_t, so we
+ have to do it.
+
+2002-07-31 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInt.h (USE_THREAD_ALLOC): for unshared objects,
+ TclDecrRefCount now frees the internal rep before the string rep -
+ just like the non-macro Tcl_DecrRefCount/TclFreeObj [Bug 524802]. For
+ the other allocators the fix was done on 2002-03-06.
+
+2002-07-31 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInterp.c: signed/unsigned comparison warning fixed
+ (Vince Darley).
+
+2002-07-31 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tcl.m4 (SC_BUGGY_STRTOD): Enabled caching of test results.
+
+ * unix/tcl.m4 (SC_BUGGY_STRTOD): Solaris 2.8 still has a buggy
+ strtod() implementation; make sure we detect it.
+
+ * tests/expr.test (expr-22.*): Marked as non-portable because it seems
+ that these tests have an annoying tendency to fail in unexpected ways.
+ [Bugs 584825, 584950, 585986]
+
+2002-07-30 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/io.test:
+ * generic/tclIO.c (WriteChars): Added flag to break out of loop if
+ nothing of the input is consumed at all, to prevent infinite looping
+ of called with a non-UTF-8 string. Fixes Bug 584603 (partially). Added
+ new test "io-60.1". Might need additional changes to Tcl_Main so that
+ unprintable results are printed as binary data.
+
+2002-07-29 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Use CC_SEARCH_FLAGS instead of LD_SEARCH_FLAGS
+ when linking with ${CC}.
+ * unix/configure: Regen.
+ * unix/configure.in: Don't subst CC_SEARCH_FLAGS or LD_SEARCH_FLAGS
+ since this is now done in tcl.m4.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Document and set CC_SEARCH_FLAGS
+ whenever LD_SEARCH_FLAGS is set. [Patch 588290]
+
+2002-07-29 Reinhard Max <max@suse.de>
+
+ * unix/tcl.m4 (SC_SERIAL_PORT): Fixed detection for cases when
+ configure's stdin is not a tty.
+
+ * unix/tclUnixPort.h:
+ * generic/tclIOSock.c: Changed size_t to socklen_t in
+ socket-related function calls.
+
+ * unix/configure.in: Added test and fallback definition
+ for socklen_t.
+
+ * unix/configure: generated.
+
+2002-07-29 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclObj.c: fixed a comment
+
+ * generic/tcl.h:
+ * generic/tclBasic.c:
+ * generic/tclInterp.c: added the new flag TCL_EVAL_INVOKE to the
+ interface of the Tcl_Eval* functions, removing the
+ TCL_EVAL_NO_TRACEBACK added yesterday: alias invocations not only
+ require no tracebacks, but also look up the command name in the global
+ scope - see new test interp-9.4
+ * tests/interp.test: added 9.3 to test for safety of aliases to hidden
+ commands, 9.4 to test for correct command lookup scope.
+
+2002-07-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/regc_locale.c (cclass): [[:xdigit:]] is only a defined
+ concept on western characters, so should not allow any unicode digit,
+ and hence number of ranges in [[:xdigit:]] is fixed.
+ * tests/reg.test: Added test to detect the bug.
+ * generic/regc_cvec.c (newcvec): Corrected initial size value in
+ character vector structure. [Bug 578363] Many thanks to
+ pvgoran@users.sf.net for tracking this down.
+
+2002-07-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tcl.h:
+ * generic/tclBasic.c: added the new flag TCL_EVAL_NO_TRACEBACK to the
+ interface of the Tcl_Eval* functions. Modified the error message for
+ too many nested evaluations.
+ * generic/tclInterp.h: changed the Alias struct to be of variable
+ length and store the prefix arguments directly (instead of a pointer
+ to a Tcl_Obj list). Made AliasObjCmd call Tcl_EvalObjv instead of
+ TclObjInvoke - thus making aliases trigger execution traces [Bug
+ 582522].
+ * tests/interp.test:
+ * tests/stack.test: adapted to the new error message.
+ * tests/trace.test: added tests for aliases firing the exec traces.
+
+2002-07-27 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Revert fix for Tcl bug 529801 since it was
+ incorrect and broke the build on other systems. Fix [Bug 587299]. Add
+ MAJOR_VERSION, MINOR_VERSION, PATCH_LEVEL, SHLIB_LD_FLAGS,
+ SHLIB_LD_LIBS, CC_SEARCH_FLAGS, LD_SEARCH_FLAGS, and LIB_FILE
+ variables to support more generic library build/install rules.
+ * unix/configure: Regen.
+ * unix/configure.in: Move AC_PROG_RANLIB into tcl.m4. Move shared
+ build test and setting of MAKE_LIB and MAKE_STUB_LIB into tcl.m4. Move
+ subst of a number of variables into tcl.m4 where they are defined.
+ * unix/tcl.m4 (SC_ENABLE_SYMBOLS, SC_CONFIG_CFLAGS): Subst vars where
+ they are defined. Add MAKE_LIB, MAKE_STUB_LIB, INSTALL_LIB, and
+ INSTALL_STUB_LIB rules to deal with the ugly details of running ranlib
+ on static libs at build and install time. Replace TCL_SHLIB_LD_EXTRAS
+ with SHLIB_LD_FLAGS and use it when building a shared library.
+ * unix/tclConfig.sh.in: Add TCL_CC_SEARCH_FLAGS.
+
+2002-07-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: fixed Tcl_Obj leak in code corresponding to
+ the macro NEXT_INST_V(x, 0, 1) [Bug 587495].
+
+2002-07-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c (TclObjLookupVar): leak fix and improved comments.
+
+2002-07-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclVar.c (TclLookupVar): removed early returns that
+ prevented the parens from being restored. Also removed goto label as
+ it was not necessary.
+
+2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c:
+ * tests/expr-old.test: fix for erroneous error messages in [expr],
+ [Bug 587140] reported by Martin Lemburg.
+
+2002-07-25 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclProc.c: fix for [Tk Bug 219218] "error handling with
+ bgerror in Tk"
+
+2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: restoring full TCL_COMPILE_DEBUG
+ functionality.
+
+2002-07-24 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test: relaxed unixInit-3.1 to accept iso8859-15 as a
+ valid C encoding. [Bug 575336]
+
+2002-07-24 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: restoring the tcl_traceCompile functionality
+ while I repair tcl_traceExec. The core now compiles and runs also
+ under TCL_COMPILE_DEBUG, but execution in the bytecode engine can
+ still not be traced.
+
+2002-07-24 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in:
+ * unix/configure.in: corrected fix for [Bug 529801]: ranlib only
+ needed for static builds on Mac OS X.
+ * unix/configure: Regen.
+ * unix/tclLoadDyld.c: fixed small bugs introduced by Vince,
+ implemented library unloading correctly (needs OS X 10.2).
+
+2002-07-23 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/OpenFileChnl.3: (Updates from Larry Virden)
+ * doc/open.n:
+ * doc/tclsh.1: Fix section numbers in Unix man page references.
+ * doc/lset.n: In EXAMPLES section, include command to set the initial
+ value used in subsequent examples.
+ * doc/http.n: Package version updated to 2.4.
+
+2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Enable 64 bit compilation when using
+ the native compiler on a 64 bit version of IRIX. [Bug 219220]
+
+2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Combine ranlib tests and avoid printing unless
+ ranlib is actually run.
+
+2002-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/tcl.m4 (SC_PATH_X): Set XINCLUDES to "" instead of "# no
+ special path needed" or "# no include files found" when x headers
+ cannot be located.
+
+2002-07-22 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: made tclNativeFilesystem static (since 07-19
+ changes removed its usage elsewhere), and added comments about its
+ usage.
+ * generic/tclLoad.c:
+ * generic/tcl.h:
+ * generic/tcl.decls:
+ * doc/FileSystem.3: converted last load-related ClientData parameter
+ to Tcl_LoadHandle opaque structure, removing a couple of casts in the
+ process.
+
+ * generic/tclInt.h: removed tclNativeFilesystem declaration since it
+ is now static again.
+
+2002-07-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/expr.test (expr-22.*): Added tests to help detect the
+ corrected handling.
+ * generic/tclExecute.c (IllegalExprOperandType): Improved error
+ message generated when attempting to manipulate Inf and NaN values.
+ * generic/tclParseExpr.c (GetLexeme): Allowed parser to recognise
+ 'Inf' as a floating-point number. [Bug 218000]
+
+2002-07-21 Don Porter <dgp@users.sourceforge.net>
+
+ * tclIOUtil.c: Silence compiler warning. [Bug 584408].
+
+2002-07-19 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to GetFilesystemRecord
+ * win/tclWinFile.c:
+ * unix/tclUnixFile.c: fix to subtle problem with links shown up by
+ latest tclkit builds.
+
+2002-07-19 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure:
+ * unix/configure.in:
+ * win/configure:
+ * win/configure.in: Add AC_PREREQ(2.13) in an attempt to make it more
+ clear that the configure scripts must be generated with autoconf
+ version 2.13. [Bug 583573]
+
+2002-07-19 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * unix/Makefile.in: fix to build on MacOS X [Bug 529801], bug report
+ and fix from jcw.
+
+2002-07-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * win/tclWinSerial.c (no_timeout): Made this variable static.
+
+ * generic/tclExecute.c, generic/tclCompile.c, generic/tclBasic.c:
+ * generic/tclCompile.h (builtinFuncTable, instructionTable): Added
+ prefix to these symbols because they are visible outside the Tcl
+ library.
+
+ * generic/tclCompExpr.c (operatorTable):
+ * unix/tclUnixTime.c (tmKey):
+ * generic/tclIOUtil.c (theFilesystemEpoch, filesystemWantToModify,
+ filesystemIteratorsInProgress, filesystemOkToModify): Made these
+ variables static.
+
+ * unix/tclUnixFile.c: Renamed nativeFilesystem to
+ * win/tclWinFile.c: tclNativeFilesystem and declared
+ * generic/tclIOUtil.c: it properly in tclInt.h
+ * generic/tclInt.h:
+
+ * generic/tclUtf.c (totalBytes): Made this array static and const.
+
+ * generic/tclParse.c (typeTable): Made this array static and const.
+ (Tcl_ParseBraces): Simplified error handling case so that scans are
+ only performed when needed, and flags are simpler too.
+
+ * license.terms: Added AS to list of copyright holders; it's only
+ fair for the current gatekeepers to be listed here!
+
+ * tests/cmdMZ.test: Renamed constraint for clarity. [Bug 583427]
+ Added tests for the [time] command, which was previously only
+ indirectly tested!
+
+2002-07-18 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclInt.h:
+ * generic/tcl.h:
+ * */*Load*.c: added comments on changes of 07/17 and replaced
+ clientData with Tcl_LoadHandle in all locations.
+
+ * generic/tclFCmd.c:
+ * tests/fileSystem.test: fixed a 'knownBug' with 'file attributes ""'
+ * tests/winFCmd.test:
+ * tests/winPipe.test:
+ * tests/fCmd.test:
+ * tessts/winFile.test: added 'pcOnly' constraint to some tests to make
+ for more useful 'tests skipped' log from running all tests on
+ non-Windows platforms.
+
+2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (CallCommandTraces): delete traces now receive
+ the FQ old name of the command. [Bug 582532] (Don Porter)
+
+2002-07-18 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/ioUtil.test: added constraints to 1.4,2.4 so they don't run
+ outside of tcltest. [Bugs 583276, 583277]
+
+2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c (DupParsedVarName): nasty bug fixed, reported by
+ Vince Darley.
+
+2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c (TclPtrIncrVar): missing CONST in declarations,
+ inconsistent with tclInt.h. Thanks to Vince Darley for reporting, boo
+ to gcc for not complaining.
+
+2002-07-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclInt.h:
+ * generic/tclIOUtil.c:
+ * generic/tclLoadNone.c:
+ * unix/tclLoadAout.c:
+ * unix/tclLoadDl.c:
+ * unix/tclLoadDld.c:
+ * unix/tclLoadDyld.c:
+ * unix/tclLoadNext.c:
+ * unix/tclLoadOSF.c:
+ * unix/tclLoadShl.c:
+ * mac/tclMacLoad.c:
+ * win/tclWinLoad.c: modified to move more functionality to the generic
+ code and avoid duplication. Partial replacement of internal uses of
+ clientData with opaque Tcl_LoadHandle. A little further work still
+ needed, but significant changes are done.
+
+2002-07-17 D. Richard Hipp <drh@hwaci.com>
+
+ * library/msgcat/msgcat.tcl: fix a comment that was causing problems
+ for programs (ex: mktclapp) that embed the initialization scripts in
+ strings.
+
+2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclVar.c: removing the now redundant functions to access
+ indexed variables: Tcl(Get|Set|Incr)IndexedScalar() and
+ Tcl(Get|Set|Incr)ElementOfIndexedArray().
+
+2002-07-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Minor fixes to make this
+ file compile with SunPro CC...
+
+2002-07-17 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: modified to do variable lookup explicitly, and
+ then either inlining the variable access or else calling the new
+ TclPtr(Set|Get|Incr)Var functions in tclVar.c
+ * generic/tclInt.h: declare some functions previously local to
+ tclVar.c for usage by TEBC.
+ * generic/tclVar.c: removed local declarations; moved all special
+ accessor functions for indexed variables to the end of the file -
+ they are unused and ready for removal, but left there for the time
+ being as they are in the internal stubs table.
+
+ ** WARNING FOR BYTECODE MAINTAINERS **
+ TCL_COMPILE_DEBUG is currently not functional; will be fixed ASAP.
+
+2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in:
+ * win/Makefile.in: Add a more descriptive warning in the event `make
+ genstubs` needs to be rerun.
+
+2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Use dltest.marker file to keep track of when the
+ dltest package is up to date. This fixes [Bug 575768] since tcltest is
+ no longer linked every time.
+ * unix/dltest/Makefile.in: Create ../dltest.marker after a successful
+ `make all` run in dltest.
+
+2002-07-16 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/configure.in: Remove useless subst of TCL_BIN_DIR.
+
+2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c: inaccurate comment fixed
+
+2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_AddObjErrorInfo):
+ * generic/tclExecute.c (TclUpdateReturnInfo):
+ * generic/tclInt.h:
+ * generic/tclProc.c:
+ Added two Tcl_Obj to the ExecEnv structure to hold the fully qualified
+ names "::errorInfo" and "::errorCode" to cache the addresses of the
+ corresponding variables. The two most frequent setters of these
+ variables now profit from the new variable name caching.
+
+2002-07-15 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclVar.c: refactorisation to reuse already looked-up Var
+ pointers; definition of three new Tcl_Obj types to cache variable name
+ parsing and lookup for later reuse; modification of internal functions
+ to profit from the caching.
+
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclNamesp.c: adding CONST qualifiers to variable names
+ passed to Tcl_FindNamespaceVar and to variable resolvers; adding CONST
+ qualifier to the 'msg' argument to TclLookupVar. Needed to avoid code
+ duplication in the new tclVar.c code.
+
+ * tests/set-old.test:
+ * tests/var.test: slight modification of error messages due to the
+ modifications in the tclVar.c code.
+
+2002-07-15 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test: Improved constraints to protect /tmp. [Bug
+ 581403]
+
+2002-07-15 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/winFCmd.test: renamed 'win2000' and 'notWin2000' to more
+ appropriate constraint names.
+ * win/tclWinFile.c: updated comments to reflect 07-11 changes.
+ * win/tclWinFCmd.c: made ConvertFileNameFormat static again, since no
+ longer used in tclWinFile.c
+ * mac/tclMacFile.c: completed TclpObjLink implementation which was
+ previously lacking.
+ * generic/tclIOUtil.c: comment cleanup and code speedup.
+
+2002-07-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Removed declarations that duplicated entries
+ in the (internal) stub table.
+
+ * library/tcltest/tcltest.tcl: Corrected errors in handling of
+ configuration options -constraints and -limitconstraints.
+
+ * README: Bumped HEAD to version 8.4b2 so we can
+ * generic/tcl.h: distinguish it from the 8.4b1 release.
+ * tools/tcl.wse.in:
+ * unix/configure*:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure*:
+
+2002-07-11 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n:
+ * win/tclWinFile.c: on Win 95/98/ME the long form of the path is used
+ as a normalized form. This is required because short forms are not a
+ robust representation. The file normalization function has been sped
+ up, but more performance gains might be possible, if speed is still an
+ issue on these platforms.
+
+2002-07-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected reaction to existing but
+ false ::tcl_interactive.
+
+ * doc/Hash.3: Overlooked CONST documentation update.
+
+2002-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCkalloc.c: ckalloc() and friends take the block size as
+ an unsigned, so we should use %ud when reporting it in fprintf() and
+ panic().
+
+2002-07-11 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompile.c: now setting local vars undefined at compile
+ time, instead of waiting until the proc is initialized.
+ * generic/tclProc.c: use macro TclSetVarUndefined instead of directly
+ setting the flag.
+
+2002-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/cmdAH.test: [file attr -perm] is Unix-only, so add [catch]
+ when not inside a suitably-protected test.
+
+2002-07-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/unixFCmd.test, tests/fileName.test:
+ * tests/fCmd.test: Removed [exec] of Unix utilities that have
+ equivalents in standard Tcl. [Bug 579268] Also simplified some of
+ unixFCmd.test while I was at it.
+
+2002-07-10 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/tcltest.test: Greatly reduced the number of [exec]s, using
+ slave interps instead.
+ * library/tcltest/tcltest.tcl: Fixed bug uncovered in the conversion
+ where a message was written to stdout instead of [outputChannel].
+
+ * tests/basic.test: Cleaned up, constrained, and reduced the
+ * tests/compile.test: amount of [exec] usage in the test suite.
+ * tests/encoding.test:
+ * tests/env.test:
+ * tests/event.test:
+ * tests/exec.test:
+ * tests/io.test:
+ * tests/ioCmd.test:
+ * tests/regexp.test:
+ * tests/regexpComp.test:
+ * tests/socket.test:
+ * tests/tcltest.test:
+ * tests/unixInit.test:
+ * tests/winDde.test:
+ * tests/winPipe.test:
+
+2002-07-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/cmdAH.test: Removed [exec] of Unix utilities. [Bug 579211]
+
+ * tests/expr.test: Added tests to make sure that this works.
+ * generic/tclExecute.c (ExprCallMathFunc): Functions should also be
+ able to return wide-ints. [Bug 579284]
+
+2002-07-08 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/socket.test: Fixed [Bug 578164]. The original reason for the
+ was a DNS outage while running the testsuite. Changed [info hostname]
+ to 127.0.0.1 to bypass DNS, knowing that we operate on the local host.
+
+2002-07-08 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Fixed incompatibility in [viewFile].
+ * library/tcltest/tcltest.tcl: Corrected docs. Bumped to 2.2.1.
+ * library/tcltest/pkgIndex.tcl: [Bug 578163]
+
+2002-07-08 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/cmdAH.test:
+ * tests/fCmd.test:
+ * tests/fileName.test: tests which rely on 'file link' need a
+ constraint so they don't run on older Windows OS. [Bug 578158]
+ * generic/tclIOUtil.c:
+ * generic/tcl.h:
+ * generic/tclInt.h:
+ * generic/tclTest.c:
+ * mac/tclMacChan.c:
+ * unix/tclUnixChan.c:
+ * win/tclWinChan.c:
+ * doc/FileSystem.3: cleaned up internal handling of
+ Tcl_FSOpenFileChannel to remove duplicate code, and make writing
+ external vfs's clearer and easier. No functionality change. Also
+ clarify that objects with refCount zero should not be passed in to the
+ Tcl_FS API, and prevent segfaults from occuring on such user errors.
+ [Bug 578617]
+
+2002-07-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/pkgMkIndex.test: Constrained tests of [load] package indexing
+ to those platforms where the testing shared libraries have been built.
+ [Bug 578166]
+
+2002-07-05 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: added recent changes
+
+2002-07-05 Reinhard Max <max@suse.de>
+
+ * generic/tclClock.c (FormatClock): Convert the format string to UTF8
+ before calling TclpStrftime, so that non-ASCII characters don't get
+ mangled when the result string is being converted back.
+ * tests/clock.test: Added a test for that.
+
+2002-07-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/Makefile.in (ro-test,ddd,GDB,DDD): Created new targets to
+ allow running the test suite with a read-only current directory,
+ running under ddd instead of gdb, and factored out some executable
+ names for broken sites (like mine) where gdb and ddd are installed
+ with non-standard names...
+
+ * tests/httpold.test: Altered test names to httpold-* to avoid clashes
+ with http.test, and stopped tests from failing when the current
+ directory is not writable...
+
+ * tests/event.test: Stop these tests from failing when the
+ * tests/ioUtil.test: current directory is not writable...
+ * tests/regexp.test:
+ * tests/regexpComp.test:
+ * tests/source.test:
+ * tests/unixFile.test:
+ * tests/unixNotfy.test:
+
+ * tests/unixFCmd.test: Trying to make these test-files not
+ * tests/macFCmd.test: bomb out with an error when the
+ * tests/http.test: current directory is not writable...
+ * tests/fileName.test:
+ * tests/env.test:
+
+2002-07-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.4b1 TAGGED FOR RELEASE ***
+
+2002-07-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/cmdMZ.test (cmdMZ-1.4):
+ * tests/cmdAH.test: More fixing of writable-current-dir assumption.
+ [Bug 575824]
+
+2002-07-04 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * tests/basic.test: Same issue as below; fixed [Bug 575817]
+
+2002-07-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/socket.test:
+ * tests/winPipe.test:
+ * tests/pid.test: Fixed [Bug 575848]. See below for a description the
+ general problem.
+
+ * All the bugs below are instances of the same problem: The testsuite
+ assumes [pwd] = [temporaryDirectory] and writable.
+
+ * tests/iogt.test: Fixed [Bug 575860].
+ * tests/io.test: Fixed [Bug 575862].
+ * tests/exec.test:
+ * tests/ioCmd.test: Fixed [Bug 575836].
+
+2002-07-03 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/pkg1/direct1.tcl: removed
+ * tests/pkg1/pkgIndex.tcl: removed
+ * tests/pkgMkIndex.test: Imported auxilliary files from tests/pkg1
+ into the test file pkgMkIndex.test itself. Formatting fixes.
+
+ * unix/Makefile.in: removed tests/pkg/* from `make dist`
+
+ * tests/pkg/circ1.tcl: removed
+ * tests/pkg/circ2.tcl: removed
+ * tests/pkg/circ3.tcl: removed
+ * tests/pkg/global.tcl: removed
+ * tests/pkg/import.tcl: removed
+ * tests/pkg/pkg1.tcl: removed
+ * tests/pkg/pkg2_a.tcl: removed
+ * tests/pkg/pkg2_b.tcl: removed
+ * tests/pkg/pkg3.tcl: removed
+ * tests/pkg/pkg4.tcl: removed
+ * tests/pkg/pkg5.tcl: removed
+ * tests/pkg/pkga.tcl: removed
+ * tests/pkg/samename.tcl: removed
+ * tests/pkg/simple.tcl: removed
+ * tests/pkg/spacename.tcl: removed
+ * tests/pkg/std.tcl: removed
+ * tests/pkgMkIndex.test: Fixed [Bug 575857] where this test file
+ expected to be able to write to [file join [testsDirectory] pkg]. Part
+ of the fix was to import several auxilliary files into the test file
+ itself.
+
+ * tests/main.test: Cheap fix for [Bugs 575851, 575858]. Avoid
+ * tests/tcltest.test: non-writable . by [cd [temporaryDirectory]].
+
+ * library/auto.tcl: Fix [tcl_findLibrary] to be sure it sets $varName
+ only if a successful library script is found. [Bug 577033]
+
+2002-07-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileCatchCmd): return
+ TCL_OUT_LINE_COMPILE instead of TCL_ERROR: let the failure happen at
+ runtime so that it can be caught [Bug 577015].
+
+2002-07-02 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/tcltest.n: Markup fixes, spellcheck.
+
+2002-07-02 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: more refinements of the documentation.
+
+ * library/tcltest/tcltest.tcl: Added trace to be sure the stdio
+ constraint is updated whenever the [interpreter] changes.
+
+ * doc/tcltest.n: Reverted [makeFile] and [viewFile] to
+ * library/tcltest/tcltest.tcl: their former behavior, and documented
+ * tests/cmdAH.test: it. Corrected misspelling of hook
+ * tests/event.test: procedure. Restored tests.
+ * tests/http.test:
+ * tests/io.test:
+
+ * library/tcltest/tcltest.tcl: Simplified logic of [GetMatchingFiles]
+ and [GetMatchingDirectories], removing special case processing.
+
+ * doc/tcltest.n: More documentation updates. Reference sections are
+ complete. Only examples need adding.
+
+2002-07-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fCmd.test:
+ * generic/tclCmdAH.c: clearer error msgs for 'file link', as per the
+ man page.
+
+2002-07-01 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/Access.3:
+ * doc/AddErrInfo.3:
+ * doc/Alloc.3:
+ * doc/Backslash.3:
+ * doc/CrtChannel.3:
+ * doc/CrtSlave.3:
+ * doc/Encoding.3:
+ * doc/Eval.3:
+ * doc/FileSystem.3:
+ * doc/Notifier.3:
+ * doc/OpenFileChnl.3:
+ * doc/ParseCmd.3:
+ * doc/RegExp.3:
+ * doc/Tcl_Main.3:
+ * doc/Thread.3:
+ * doc/TraceCmd.3:
+ * doc/Utf.3:
+ * doc/WrongNumArgs.3:
+ * doc/binary.n:
+ * doc/clock.n:
+ * doc/expr.n:
+ * doc/fconfigure.n:
+ * doc/glob.n:
+ * doc/http.n:
+ * doc/interp.n:
+ * doc/lsearch.n:
+ * doc/lset.n:
+ * doc/msgcat.n:
+ * doc/packagens.n:
+ * doc/pkgMkIndex.n:
+ * doc/registry.n:
+ * doc/resource.n:
+ * doc/safe.n:
+ * doc/scan.n:
+ * doc/tclvars.n: Spell-check, fixed typos (Updates from Larry Virden).
+
+2002-07-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Made Solaris use gcc for linking
+ when building with gcc to resolve problems with undefined symbols
+ being present when tcl library used with non-gcc linker at later
+ stage. Symbols were compiler-generated, so it is the compiler's
+ business to define them. [Bug 541181]
+
+2002-07-01 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: more work in progress updating tcltest docs.
+
+ * library/tcltest/tcltest.tcl: Change [configure -match] to stop
+ treating an empty list as a list of the single pattern "*". Changed
+ the default value to [list *] so default operation remains the same.
+
+ * tests/pkg/samename.tcl: restored. needed by pkgMkIndex.test.
+
+ * library/tcltest/tcltest.tcl: restored writeability testing of
+ -tmpdir, augmented by a special exception for the deafault value.
+
+2002-07-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/concat.n: Documented the *real* behaviour of [concat]!
+
+2002-06-30 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: more work in progress updating tcltest docs.
+
+ * tests/README: Updated the instructions on running and
+ * tests/cmdMZ.test: adding to the test suite. Also updated
+ * tests/encoding.test: several tests, mostly to correctly create
+ * tests/fCmd.test: and destroy any temporary files in the
+ * tests/info.test: [temporaryDirectory] of tcltest.
+ * tests/interp.test:
+
+ * library/tcltest/tcltest.tcl: Stopped checking for writeability of
+ -tmpdir value because no default directory can be guaranteed to be
+ writeable.
+
+ * tests/autoMkindex.tcl: removed.
+ * tests/pkg/samename.tcl: removed.
+ * tests/pkg/magicchar.tcl: removed.
+ * tests/pkg/magicchar2.tcl: removed.
+ * tests/autoMkindex.test: Updated auto_mkIndex tests to use [makeFile]
+ and [removeFile] so tests are done in [temporaryDirecotry] where write
+ access is guaranteed.
+
+ * library/tcltest/tcltest.tcl: Fixed [makeFile] and [viewFile] to
+ * tests/cmdAH.test: accurately reflect a file's contents.
+ * tests/event.test: Updated tests that depended on buggy
+ * tests/http.test: behavior. Also added warning messages
+ * tests/io.test: to "-debug 1" operations to debug test
+ * tests/iogt.test: calls to (make|remove)(File|Directory)
+
+ * unix/mkLinks: `make mklinks` on 6-27 commits.
+
+2002-06-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompile.h: modified the macro TclEmitPush to not call its
+ first argument repeatedly or pass it to other macros, [Bug 575194]
+ reported by Peter Spjuth.
+
+2002-06-28 Don Porter <dgp@users.sourceforge.net>
+
+ * docs/tcltest.n: Doc revisions in progress.
+ * library/tcltest/tcltest.tcl: Corrected -testdir default value. Was
+ not reliable, and disagreed with docs! Thanks to Hemang Lavana. [Bug
+ 575150]
+
+2002-06-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tclUnixThrd.c: Renamed the Tcl_Platform* #defines to TclOS*
+ * unix/tclUnixPipe.c: because they are only used internally. Also
+ * unix/tclUnixFile.c: stopped double-#def of TclOSlstat [Bug 566099,
+ * unix/tclUnixFCmd.c: post-rename]
+ * unix/tclUnixChan.c:
+ * unix/tclUnixPort.h:
+
+ * doc/string.n: Improved documentation for [string last] along lines
+ described in [Bug 574799] so it indicates that the supplied index
+ marks the end of the search space.
+
+2002-06-27 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/dde.n: Work in progress updating the documentation
+ * doc/http.n: of the packages that come bundled with
+ * doc/msgcat.n: the Tcl source distribution, notably tcltest.
+ * doc/registry.n:
+ * doc/tcltest.n:
+
+ * library/tcltest/tcltest.tcl: Made sure that the TCLTEST_OPTIONS
+ environment variablle configures tcltest at package load time.
+
+2002-06-26 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fileSystem.test:
+ * generic/tclIOUtil.c: fix to handling of empty paths "" which are not
+ claimed by any filesystem [Bug 573758]. Ensure good error messages
+ are given in all cases.
+ * tests/cmdAH.test:
+ * unix/tclUnixFCmd.c: fix to bug reported as part of [Patch 566669].
+ Thanks to Taguchi, Takeshi for the report.
+
+2002-06-26 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixTime.c: Make [clock format] respect locale settings.
+ * tests/clock.test: [Bug 565880]. ***POTENTIAL INCOMPATIBILITY***
+
+2002-06-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * doc/CrtInterp.3:
+ * doc/StringObj.3: clarifications by Don Porter, [Bug 493995] and [Bug
+ 500930].
+
+2002-06-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected suppression of -verbose skip
+ * tests/tcltest.test: and start by [test -output]. Also
+ corrected test suite errors exposed by corrected code. [Bug 564656]
+
+2002-06-25 Reinhard Max <max@suse.de>
+
+ * unix/tcl.m4: New macro SC_CONFIG_MANPAGES.
+ * unix/configure.in: Added support for symlinks and compression when
+ * unix/Makefile.in: installing the manpages. [Patch 518052]
+ * unix/mkLinks.tcl: Default is still hardlinks and no compression.
+
+ * unix/mkLinks: generated
+ * unix/configure:
+
+ * unix/README: Added documentation for the new features.
+
+ * unix/tcl.m4 (SC_PATH_TCLCONFIG): Replaced ${exec_prefix}/lib by
+ ${libdir}.
+
+2002-06-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclUtil.c (TclGetIntForIndex): Fix of critical [Bug 533364]
+ generated when the index is bad and the result is a shared object. The
+ T_ASTO(T_GOR, ...) idiom likely exists elsewhere though. Also removed
+ some cruft that just complicated things to no advantage.
+ (SetEndOffsetFromAny): Same fix, though this wasn't on the path
+ excited by the bug.
+
+2002-06-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Implementation of TIP 101. Adds abd
+ * tests/parseOld.test: exports a [configure] command from
+ * tests/tcltest.test: tcltest.
+
+2002-06-22 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: updated changes file for 8.4b1 release.
+
+ * library/tcltest/tcltest.tcl: Corrections to tcltest and the Tcl
+ * tests/basic.test: test suite so that a test with options
+ * tests/cmdInfo.test: -constraints knownBug
+ * tests/compile.test: -limitConstraints 1 only tests the
+ * tests/encoding.test: knownBug tests. Mostly involves
+ * tests/env.test: replacing direct access to the
+ * tests/event.test: testConstraints array with calls to
+ * tests/exec.test: the testConstraint command (which
+ * tests/execute.test: requires tcltest version 2)
+ * tests/fCmd.test:
+ * tests/format.test:
+ * tests/http.test:
+ * tests/httpold.test:
+ * tests/ioUtil.test:
+ * tests/link.test:
+ * tests/load.test:
+ * tests/namespace.test:
+ * tests/pkgMkIndex.test:
+ * tests/reg.test:
+ * tests/result.test:
+ * tests/scan.test:
+ * tests/stack.test:
+
+2002-06-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tools/tcl.wse.in (Disk Label), unix/tcl.spec (version):
+ * win/README.binary, README, win/configure.in, unix/configure.in:
+ * generic/tcl.h (TCL_RELEASE_*, TCL_PATCH_LEVEL): Bump to beta1.
+
+2002-06-21 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclCompExpr.c:
+ * generic/tclParseExpr.c: LogSyntaxError() should reset the
+ interpreter result [Bug 550142 "Tcl_ExprObj -> abort"]
+
+2002-06-21 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Updated all package install directories
+ * win/Makefile.in: to match current Major.minor versions
+ * win/makefile.bc: of the packages. Added tcltest package
+ * win/makefile.vc: to installation on Windows.
+
+ * library/init.tcl: Corrected comments and namespace style issues.
+ Thanks to Bruce Stephens. [Bug 572025]
+
+2002-06-21 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/cmdAH.test: Added TIP#99 implementation of 'file
+ * tests/fCmd.test: link'. Supports creation of symbolic and
+ * tests/fileName.test: hard links in the native filesystems and
+ * tests/fileSystem.test: in vfs's, when the individual filesystem
+ * generic/tclTest.c: supports the concept.
+ * generic/tclCmdAH.c:
+ * generic/tclIOUtil.c:
+ * generic/tcl.h:
+ * generic/tcl.decls:
+ * doc/FileSystem.3:
+ * doc/file.n:
+ * mac/tclMacFile.c:
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c: Also enhanced speed of 'file normalize' on
+ Windows.
+
+2002-06-20 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclEvalObjvInternal): fix for [Bug 571385] in
+ the implementation of TIP#62 (command tracing). Vince Darley, Hemang
+ Lavana & Don Porter: thanks.
+
+2002-06-20 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclCompEvalObj): clarified and simplified the
+ logic for compilation/recompilation.
+
+2002-06-19 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/file.n: Fixed indentation. No substantive changes.
+
+2002-06-19 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): get the resultPtr again as
+ the Tcl_ObjSetVar2 may cause the result to change. [Patch 558324]
+ (watson)
+
+2002-06-19 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TEBC): removing unused "for(;;)" loop;
+ improved comments; re-indentation.
+
+2002-06-18 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TEBC):
+ - elimination of duplicated code in the non-immediate INST_INCR
+ instructions.
+ - elimination of 103 (!) TclDecrRefCount macros. The different
+ instructions now jump back to a common "DecrRefCount zone" at the
+ top of the loop. The macro "ADJUST_PC" was replaced by two macros
+ "NEXT_INST_F" and "NEXT_INST_V" that take three params
+ (pcAdjustment, # of stack objects to discard, resultObjPtr handling
+ flag). The only instructions that retain a TclDecrRefCount are
+ INST_POP (for speed), the common code for the non-immediate
+ INST_INCR, INST_FOREACH_STEP and the two INST_LSET.
+
+ The object size of tclExecute.o was reduced by approx 20% since the
+ start of the consolidation drive, while making room for some peep-hole
+ optimisation at runtime.
+
+2002-06-18 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TEBC, INST_DONE): small bug in the panic code
+ for tcl-stack corruption.
+
+2002-06-17 David Gravereaux <davygrvy@pobox.com>
+
+ Trims to support the removal of RESOURCE_INCLUDED from rc scripts from
+ [FRQ 565088].
+
+ * generic/tcl.h: moved the #ifndef RC_INVOKED start block up in the
+ file. rc scripts don't need to know thread mutexes.
+
+ * win/tcl.rc:
+ * win/tclsh.rc: removed the #define RESOURCE_INCLUDED to let the
+ built-in -DRC_INVOKED to the work.
+
+2002-06-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/CrtTrace.3: Added TIP#62 implementation of command
+ * doc/trace.n: execution tracing [FRQ 462580] (lavana).
+ * generic/tcl.h: This includes enter/leave tracing as well
+ * generic/tclBasic.c: as inter-procedure stepping.
+ * generic/tclCmdMZ.c:
+ * generic/tclCompile.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclVar.c:
+ * tests/trace.test:
+
+2002-06-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * win/tclWinPipe.c (BuildCommandLine): Fixed [Bug 554068] ([exec] on
+ windows did not treat { in filenames well.). Bug reported by Vince
+ Darley <vincentdarley@users.sourceforge.net>, patch provided by Vince
+ too.
+
+2002-06-17 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tcl.h: #ifdef logic for K&R C backwards compatibility
+ changed to assume modern C by default. See [FRQ 565088] for full
+ details.
+
+2002-06-17 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/msgcat.n: Corrected en_UK references to en_GB. UK is not a
+ country designation recognized in ISO 3166.
+
+ * library/msgcat/msgcat.tcl: More Windows Registry locale codes from
+ Bruno Haible.
+
+ * doc/msgcat.n:
+ * library/msgcat/msgcat.tcl:
+ * library/msgcat/pkgIndex.tcl:
+ * tests/msgcat.test: Revised locale initialization to interpret
+ environment variable locale values according to XPG4, and to recognize
+ the LC_ALL and LC_MESSAGES values over that of LANG. Also added many
+ Windows Registry locale values to those recognized by msgcat. Revised
+ tests and docs. Bumped to version 1.3. Thanks to Bruno Haible for the
+ report and assistance crafting the solution. [Bug 525522, 525525]
+
+2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompile.c (TclCompileTokens): a better algorithm for the
+ previous bug fix.
+
+2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompile.c (TclCompileTokens):
+ * tests/compile.test: [Bug 569438] in the processing of dollar
+ variables; report by Georgios Petasis.
+
+2002-06-16 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: bug in the consolidation of the INCR_..._STK
+ instructions; the bug could not be exercised as the (faulty)
+ instruction INST_INCR_ARRAY_STK was never compiled-in (related to [Bug
+ 569438]).
+
+2002-06-14 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): runtime peep-hole
+ optimisation of variables (INST_STORE, INST_INCR) and commands
+ (INST_INVOKE); faster check for the existence of a catch.
+ (TclExecuteByteCode): runtime peep-hole optimisation of comparisons.
+ (TclExecuteByteCode): runtime peep-hole optimisation of INST_FOREACH -
+ relies on peculiarities of the code produced by the bytecode compiler.
+
+2002-06-14 David Gravereaux <davygrvy@pobox.com>
+
+ * win/rules.vc: The test for compiler optimizations was in error.
+ Thanks goes to Roy Terry <royterry@earthlink.net> for his assistance
+ with this.
+
+2002-06-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/trace.n, tests/trace.test:
+ * generic/tclCmdMZ.c (Tcl_TraceObjCmd,TclTraceCommandObjCmd)
+ (TclTraceVariableObjCmd): Changed references to "trace list" to
+ "trace info" as mandated by TIP#102.
+
+2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): consolidated code for the
+ conditional branch instructions.
+
+2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): fixed the previous patch;
+ wouldn't compile with TCL_COMPILE_DEBUG set.
+
+2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): consolidated the handling
+ of exception returns to INST_INVOKE and INST_EVAL, as well as most of
+ the code for INST_CONTINUE and INST_BREAK, in the new jump target
+ "processExceptionReturn".
+
+2002-06-13 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): consolidated variable
+ handling opcodes, replaced redundant code with some 'goto'. All
+ store/append/lappend opcodes on the same data type now share the main
+ code; same with incr opcodes.
+ * generic/tclVar.c: added the bit TCL_TRACE_READS to the possible
+ flags to Tcl_SetVar2Ex - it causes read traces to be fired prior to
+ setting the variable. This is used in the core for [lappend].
+
+ ***NOTE*** the usage of TCL_TRACE_READS in Tcl_(Obj)?GetVar.* is not
+ documented; there, it causes the call to create the variable if it
+ does not exist. The new usage in Tcl_(Obj)?SetVar.* remains
+ undocumented too ...
+
+2002-06-13 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fCmd.test:
+ * tests/winFile.test:
+ * tests/fileSystem.test:
+ * generic/tclTest.c:
+ * generic/tclCmdAH.c:
+ * generic/tclIOUtil.c:
+ * doc/FileSystem.3:
+ * mac/tclMacFile.c:
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c: fixed up further so both compiles and actually
+ works with VC++ 5 or 6.
+ * win/tclWinInt.h:
+ * win/tclWin32Dll.c: cleaned up code and vfs tests and added tests for
+ the internal changes of 2002-06-12, to see whether WinTcl on NTFS can
+ coexist peacefully with links in the filesystem. Added new test
+ command 'testfilelink' to enable the newer code to be tested.
+ * tests/fCmd.test: (made certain tests of 'testfilelink' not run on
+ unix).
+
+2002-06-12 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * tclBasic.c (Tcl_DeleteTrace): fixed [Bug 568123] (thanks to Hemang
+ Lavana)
+
+2002-06-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinFile.c: corrected the symbolic link handling code to allow
+ it to compile. Added real definition of REPARSE_DATA_BUFFER (found in
+ winnt.h). Most of the added definitions appear to have correct,
+ cross-Win-version equivalents in winnt.h and should be removed, but
+ just making things "work" for now.
+
+2002-06-12 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c:
+ * generic/tcl.decls:
+ * generic/tclDecls.h: made code for Tcl_FSNewNativePath agree with man
+ pages.
+
+ * doc/FileSystem.3: clarified the circumstances under which certain
+ functions are called in the presence of symlinks.
+
+ * win/tclWinFile.c:
+ * win/tclWinPort.h:
+ * win/tclWinInt.h:
+ * win/tclWinFCmd.c: Fix for Windows to allow 'file lstat', 'file
+ type', 'glob -type l', 'file copy', 'file delete', 'file normalize',
+ and all VFS code to work correctly in the presence of symlinks
+ (previously Tcl's behaviour was not very well defined). This also
+ fixes possible serious problems in all versions of WinTcl where 'file
+ delete' on a NTFS symlink could delete the original, not the symlink.
+ Note: symlinks cannot yet be created in pure Tcl.
+
+2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c:
+ * generic/tclCompCmds.c:
+ * generic/tclInt.h: reverted the new compilation functions; replaced
+ by a more general approach described below.
+
+ * generic/tclCompCmds.c:
+ * generic/tclCompile.c: made *all* compiled variable access attempts
+ create an indexed variable - even get or incr without previous set.
+ This allows indexed access to local variables that are created and set
+ at runtime, for example by [global], [upvar], [variable], [regexp],
+ [regsub].
+
+2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * doc/global.n:
+ * doc/info.n:
+ * test/info.test:
+ * generic/tclCmdIL.c: fix for [Bug 567386], [info locals] was
+ reporting some linked variables.
+
+ * generic/tclBasic.c:
+ * generic/tclCompCmds.c:
+ * generic/tclInt.h: added compile functions for [global], [variable]
+ and [upvar]. They just declare the new local variables, the commands
+ themselves are not compiled-in. This gives a notably faster read
+ access to these linked variables.
+
+2002-06-11 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: optimised algorithm for exception range
+ lookup; part of [Patch 453709].
+
+2002-06-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * unix/tclUnixFCmd.c: fixed [Bug 566669]
+ * generic/tclIOUtil.c: improved and sped up handling of native paths
+ (duplication and conversion to normalized paths), particularly on
+ Windows.
+ * modified part of above commit, due to problems on Linux. Will
+ re-examine bug report and evaluate more closely.
+
+2002-06-07 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/tcltest.test: More corrections to test suite so that tests of
+ failing [test]s don't show up themselves as failing tests.
+
+2002-06-07 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclExecute.c: Tidied up headers in relation to float.h to
+ cut the cruft and ensure DBL_MAX is defined since doubles seem to be
+ the same size everywhere; if the assumption isn't true, the variant
+ platforms had better have run configure...
+
+ * unix/tclUnixPort.h (EOVERFLOW): Added code to define it if it
+ wasn't previously defined. Also some other general tidying and adding
+ of comments. [Bugs 563122, 564595]
+ * compat/tclErrno.h: Added definition for EOVERFLOW copied from
+ Solaris headers; I've been unable to find any uses of EFTYPE, which
+ was the error code previously occupying the slot, in Tcl, or any
+ definition of it in the Solaris headers.
+
+2002-06-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/dltest/Makefile.in: Remove hard coded CFLAGS=-g and add
+ CFLAGS_DEBUG, CFLAGS_OPTIMIZE, and CFLAGS_DEFAULT varaibles. [Bug
+ 565488]
+
+2002-06-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/tcltest.test: Corrections to test suite so that tests of
+ failing [test]s don't show up themselves as failing tests.
+
+ * tests/io.test: Fixed up namespace variable resolution issues
+ revealed by running test suite with "-singleproc 1".
+
+ * doc/tcltest.n:
+ * library/tcltest/tcltest.tcl:
+ * tests/tcltest.test: Several updates to tcltest.
+ 1) changed to lazy initialization of test constraints
+ 2) deprecated [initConstraintsHook]
+ 3) repaired badly broken [limitConstraints].
+ 4) deprecated [threadReap] and [mainThread]
+ [Patch 512214, Bug 558742, Bug 461000, Bug 534903]
+
+2002-06-06 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixThrd.c (TclpReaddir, TclpLocaltime, TclpGmtime): added
+ mutex wrapped calls to readdir, localtime & gmtime in case their
+ thread-safe *_r counterparts are not available.
+ * unix/tcl.m4: added configure check for readdir_r
+ * unix/tcl.m4 (Darwin): set TCL_DEFAULT_ENCODING to utf-8 on MacOSX
+ (where posix file apis expect utf-8, not iso8859-1).
+ * unix/configure: regen
+ * unix/Makefile.in: set DYLD_LIBRARY_PATH in parallel to
+ LD_LIBRARY_PATH for MacOSX dynamic linker.
+ * generic/tclEnv.c (TclSetEnv): fix env var setting on MacOSX (adapted
+ from [Patch 524352] by jkbonfield).
+
+2002-06-05 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Tcl_Main.3: Documented $tcl_rcFileName and added more
+ clarifications about the intended use of Tcl_Main(). [Bug 505651]
+
+2002-06-05 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclFileName.c (TclGlob): mac specific fix to recent changes
+ in 'glob -tails' handling.
+ * mac/tclMacPort.h:
+ * mac/tclMacChan.c: fixed TIP#91 bustage.
+ * mac/tclMacResource.c (Tcl_MacConvertTextResource): added utf
+ conversion of text resource contents.
+ * tests/macFCmd.test (macFCmd-1.2): allow CWIE creator.
+
+2002-06-04 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl:
+ * tests/init.test:
+ * tests/tcltest.test: Added more TIP 85 tests from Arjen Markus.
+ Converted tcltest.test to use a private namespace. Fixed bugs in
+ [tcltest::Eval] revealed by calling [tcltest::test] from a non-global
+ namespace, and namespace errors in init.test.
+
+2002-06-04 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update msys+mingw URL.
+
+2002-06-03 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n:
+ * library/tcltest/tcltest.tcl:
+ * library/tcltest/pkgIndex.tcl:
+ * tests/tcltest.test: Implementation of TIP 85. Allows tcltest users
+ to add new legal values of the -match option to [test], associating
+ each with a Tcl command that does the matching of expected results
+ with actual results of tests. Thanks to Arjen Markus. => tcltest 2.1
+ [Patch 521362]
+
+2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * doc/namespace.n: added description of [namepace forget] behaviour
+ for unqualified patterns. [Bug 559268]
+
+2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: reverting an accidental modification in the
+ last commit.
+
+2002-06-03 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * doc/Tcl.n: clarify the empty variable name issue ([Bug 549285]
+ reported by Tom Krehbiel, patch by Don Porter).
+
+2002-05-31 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl: Fixed leak of slave interp in [pkg_mkIndex].
+ Thanks to Helmut for report. [Bug 550534]
+
+ * tests/io.test:
+ * tests/main.test: Use the "stdio" constraint to control whether an
+ [open "|[interpreter]"] is attempted.
+
+ * generic/tclExecute.c (TclMathInProgress,TclExecuteByteCode
+ (ExprCallMathFunc):
+ * generic/tclInt.h (TclMathInProgress):
+ * unix/Makefile.in (tclMtherr.*):
+ * unix/configure.in (NEED_MATHERR):
+ * unix/tclAppInit.c (matherr):
+ * unix/tclMtherr.c (removed file):
+ * win/tclWinMtherr.c (_matherr): Removed internal routine
+ TclMathInProgress and Unix implementation of matherr(). These are now
+ obsolete, dealing with very old versions of the C math library.
+ Windows version is retained in case Borland compilers require it, but
+ it is inactive. Thanks to Joe English. [Bug 474335, Patch 555635]
+
+ * unix/configure: regen
+
+2002-05-30 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclCompile.h: removed exprIsJustVarRef and
+ exprIsComparison from the ExprInfo and CompileEnv structs. These
+ were set, but not used since dec 1999 [Bug 562383].
+
+2002-05-30 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c (TclGlob): fix to longstanding 'knownBug' in
+ fileName tests 15.2-15.4, and fix to a new Tcl 8.4 bug in certain uses
+ of 'glob -tails'.
+ * tests/fileName.test: removed 'knownBug' flag from some tests, added
+ some new tests for above bugs.
+
+2002-05-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure: regen'ed
+ * unix/configure.in: replaced bigendian check with autoconf standard
+ AC_C_BIG_ENDIAN, which defined WORDS_BIGENDIAN on bigendian systems.
+ * generic/tclUtf.c (Tcl_UniCharNcmp):
+ * generic/tclInt.h (TclUniCharNcmp): use WORDS_BIGENDIAN instead of
+ TCL_OPTIMIZE_UNICODE_COMPARE to enable memcmp alternative.
+
+ * generic/tclExecute.c (TclExecuteByteCode INST_STR_CMP):
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): changed the case for choosing
+ the Tcl_UniCharNcmp compare to when both objs are of StringType, as
+ benchmarks show that is the optimal check (both bigendian and
+ littleendian systems).
+
+2002-05-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c: Removed "dummy" reference to Tcl_LinkVar. It is
+ no longer needed since Tcl_Main() now actually calls Tcl_LinkVar().
+ Thanks to Joe English for pointing that out.
+
+2002-05-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode):
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Use the macro version.
+ * generic/tclInt.h (TclUniCharNcmp): Optimised still further with a
+ macro for use in sensitive places like tclExecute.c
+
+ * generic/tclUtf.c (Tcl_UniCharNcmp): Use new flag to figure out when
+ we can use an optimal comparison scheme, and default to the old scheme
+ in other cases which is at least safe.
+ * unix/configure.in (TCL_OPTIMIZE_UNICODE_COMPARE): New optional flag
+ that indicates when we can use memcmp() to compare Unicode strings
+ (i.e. when the high-byte of a Tcl_UniChar precedes the low-byte.)
+
+2002-05-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclUtf.c: added TclpUtfNcmp2 private command that
+ mirrors Tcl_UtfNcmp, but takes n in bytes, not utf-8 chars. This
+ provides a faster alternative for comparing utf strings internally.
+ (Tcl_UniCharNcmp, Tcl_UniCharNcasecmp): removed the explicit end of
+ string check as it wasn't correct for the function (by doc and logic).
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): reworked the string equal
+ comparison code to use TclpUtfNcmp2 as well as short-circuit for
+ equal objects or unequal length strings in the equal case.
+ Removed the use of goto and streamlined the other parts.
+
+ * generic/tclExecute.c (TclExecuteByteCode): added check for object
+ equality in the comparison instructions. Added short-circuit for !=
+ length strings in INST_EQ, INST_NEQ and INST_STR_CMP. Reworked
+ INST_STR_CMP to use TclpUtfNcmp2 where appropriate, and only use
+ Tcl_UniCharNcmp when at least one of the objects is a Unicode obj with
+ no utf bytes.
+
+ * generic/tclCompCmds.c (TclCompileStringCmd): removed error creation
+ in code that no longer throws an error.
+
+ * tests/string.test:
+ * tests/stringComp.test: added more string comparison checks.
+
+ * tests/clock.test: better qualified 9.1 constraint check for %s.
+
+2002-05-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclThreadAlloc.c (TclpRealloc, TclpFree): protect
+ against the case when NULL is based.
+
+ * tests/clock.test: added clock-9.1
+ * compat/strftime.c:
+ * generic/tclClock.c:
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * unix/tclUnixTime.c: fix for Windows msvcrt mem leak caused by using
+ an env(TZ) setting trick for in clock format -gmt 1. This also makes
+ %s seem to work correctly with -gmt 1 as well as making it a lot
+ faster by avoid the env(TZ) hack. TclpStrftime now takes useGMT as an
+ arg. [Bug 559376]
+
+2002-05-28 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fixes to Tcl_FSLoadFile when called on a file
+ inside a vfs. This should avoid leaving temporary files sitting
+ around on exit. [Bug 545579]
+
+2002-05-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * win/tclWinError.c: Added comment on conversion of
+ ERROR_NEGATIVE_SEEK because that is a mapping that really belongs,
+ and not a catch-all case.
+ * win/tclWinPort.h (EOVERFLOW): Should be either EFBIG or EINVAL
+ * generic/tclPosixStr.c (Tcl_ErrnoId, Tcl_ErrnoMsg): EOVERFLOW can
+ potentially be a synonym for EINVAL.
+
+2002-05-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ === Changes due to TIP#91 ===
+
+ * win/tclWinPort.h: Added declaration of EOVERFLOW.
+ * doc/CrtChannel.3: Added documentation of wideSeekProc.
+ * generic/tclIOGT.c (TransformSeekProc, TransformWideSeekProc):
+ Adapted to use the new channel mechanism.
+ * unix/tclUnixChan.c (FileSeekProc, FileWideSeekProc): Renamed
+ FileSeekProc to FileWideSeekProc and created new FileSeekProc which
+ has the old-style interface and which errors out with EOVERFLOW when
+ the returned file position can't fit into the return type (int for
+ historical reasons).
+ * win/tclWinChan.c (FileSeekProc, FileWideSeekProc): Renamed
+ FileSeekProc to FileWideSeekProc and created new FileSeekProc which
+ has the old-style interface and which errors out with EOVERFLOW when
+ the returned file position can't fit into the return type (int for
+ historical reasons).
+ * mac/tclMacChan.c (FileSeek): Reverted to old interface; Macs lack
+ large-file support because I can't see how to add it.
+ * generic/tclIO.c (Tcl_Seek, Tcl_Tell): Given these functions
+ knowledge of the new arrangement of channel types.
+ (Tcl_ChannelVersion): Added recognition of new version code.
+ (HaveVersion): New function to do version checking.
+ (Tcl_ChannelBlockModeProc, Tcl_ChannelFlushProc)
+ (Tcl_ChannelHandlerProc): Made these functions use HaveVersion for
+ ease of future maintainability.
+ (Tcl_ChannelBlockModeProc): Obvious lookup function.
+ * generic/tcl.h (Tcl_ChannelType): New wideSeekProc field, and
+ seekProc type restored to old interpretation.
+ (TCL_CHANNEL_VERSION_3): New channel version.
+
+2002-05-24 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/winPipe.test: Applied patch for [Bug 549617]. Patch and bug
+ report by Kevin Kenny <kennykb@users.sourceforge.net>.
+
+ * win/tclWinSock.c (TcpWatchProc): Fixed [Bug 557878]. We are not
+ allowed to mess with the watch mask if the socket is a server socket.
+ I believe that the original reporter is George Peter Staplin.
+
+2002-05-21 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/configure.in: Invoke SC_ENABLE_SHARED before calling
+ SC_CONFIG_CFLAGS so that the SHARED_BUILD variable can be checked
+ inside SC_CONFIG_CFLAGS.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Pass -non_shared instead of -shared
+ to ld when configured with --disable-shared under OSF. [Bug 540390]
+
+2002-05-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.h: added prototype for TclpFilesystemPathType().
+ * mac/tclMacChan.c: use MSL provided creator type if available instead
+ of the default 'MPW '.
+
+2002-05-16 Joe English <jenglish@users.sf.net>
+
+ * doc/CrtObjCmd.3: Added Tcl_GetCommandFromObj, Tcl_GetCommandFullName
+ [Bugs 547987, 414921]
+
+2002-05-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tclUnixChan.c (TtyOutputProc): #if/#endif-ed this function out
+ to stop compiler warnings. Also much general tidying of comments in
+ this file and removal of whitespace from blank lines.
+
+2002-05-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * unix/tclUnixChan.c (SETBREAK): Solaris thinks ioctl() takes a signed
+ second argument, and Linux thinks ioctl() takes an unsigned second
+ argument. So need a longer definition of this macro to get neither to
+ spew warnings...
+
+2002-05-13 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclEvent.c:
+ * generic/tclIOUtil.c:
+ * generic/tclInt.h: clean up all memory allocated by the filesystem,
+ via introduction of 'TclFinalizeFilesystem'.
+ Move TclFinalizeLoad into TclFinalizeFilesystem so we can be sure it
+ is called at just the right time.
+ Fix bad comment also. [Bug 555078 and 'fs' part of 543549]
+ * win/tclWinChan.c: fix comment referring to wrong function.
+
+2002-05-10 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/load.test:
+ * tests/safe.test:
+ * tests/tcltest.test: Corrected some list-quoting issues and other
+ matters that cause tests to fail when the patch includes special
+ characters. Report from Vince Darley. [Bug 554068]
+
+2002-05-08 David Gravereaux <davygrvy@pobox.com>
+
+ * doc/file.n:
+ * tools/man2tcl.c:
+ * tools/man2help2.tcl: Thanks to Peter Spjuth
+ <peter.spjuth@space.se>, again. My prior fix for single-quote macro
+ mis-understanding was wrong. Reverted to reimpliment the 'macro2' proc
+ which handles single-quote macros and restored file.n text arrangement
+ to avoid single-quotes on the first line. Sorry for all the confusion.
+
+2002-05-08 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/man2tcl.c:
+ * tools/man2help2.tcl: Proper source of macro error misunderstanding
+ single-quote as the leading macro command found and repaired.
+
+ * doc/file.n: Reverted to prior state before I messed with it.
+
+2002-05-08 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected [uplevel] quoting when
+ [source]-ing test script in subdirectories.
+ * tests/fileName.test:
+ * tests/load.test:
+ * tests/main.test:
+ * tests/tcltest.test:
+ * tests/unixInit.test: Fixes to test suite when there's a space in the
+ working path. Thanks to Kevin Kenny.
+
+2002-05-07 David Gravereaux <davygrvy@pobox.com>
+
+ -- Changes from Peter Spjuth <peter.spjuth@space.se>
+ * tools/man2tcl.c: Increased line buffer size and a bail-out if that
+ should ever be over-run.
+ * tools/man2help.tcl: Include Courier New font in rtf header.
+ * tools/man2help2.tcl: Improved handling of CS/CE fields. Use Courier
+ New for code samples and indent better.
+
+ * doc/file.n:
+ * doc/TraceCmd.3: winhelp conversion tools where understanding
+ a ' as the first character on a line to be an unknown macro.
+ Not knowing how to repair tools/man2tcl.c, I decided to rearrange
+ the text in the docs instead.
+
+2002-05-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: fix to similar segfault when using 'glob
+ -types nonsense -dir dirname -join * *'. [Bug 553320]
+
+ * doc/FileSystem.3: further documentation on vfs.
+ * tests/cmdAH.test:
+ * tests/fileSystem.test:
+ * tests/pkgMkindex.test: Fix to testsuite bugs when running out of
+ directory whose name contains '{' or '['.
+
+2002-05-07 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * tests/basic.test: Fix for [Bug 549607]
+ * tests/encoding.test: Fix for [Bug 549610]
+ These are testsuite bugs that caused failures when the filename
+ contained spaces. Report & fix by Kevin Kenny.
+
+2002-05-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: fix to freeing a bad object (i.e. segfault)
+ when using 'glob -types nonsense -dir dirname'.
+ * generic/tclWinFile.c: fix to [Bug 551306], also wrapped some long
+ lines.
+ * tests/fileName.test: added several tests for the above bugs.
+ * doc/FileSystem.3: clarified documentation on refCount requirements
+ of the object returned by the path type function.
+ * generic/tclIOUtil.c:
+ * win/tclWinFile.c:
+ * unix/tclUnixFile.c:
+ * mac/tclMacFile.c: moved TclpFilesystemPathType to the platform-
+ specific directories, so we can add missing platform-specific
+ implementations. On Windows, 'file system' now returns useful results
+ like "native NTFS", "native FAT" for that system. Unix and MacOS still
+ only return "native".
+ * doc/file.n: clarified documentation.
+ * tests/winFile.test: test for 'file system' returning correct values.
+ * tests/fileSystem.test: test for 'file system' returning correct
+ values. Clean up after failed previous test run.
+
+2002-04-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure:
+ * unix/tcl.m4: change HP-11 SHLIB_LD_LIBS from "" to ${LIBS} so that
+ the .sl knows its dependent libs.
+
+2002-04-26 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/obj.test (obj-11.[56]): Test conversion to boolean more
+ thoroughly.
+ * generic/tclObj.c (SetBooleanFromAny): Was not calling an integer
+ parsing function on native 64-bit platforms! [Bug 548686]
+
+2002-04-24 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclInt.h: corrected TclRememberJoinableThread decl to use
+ VOID instead of void.
+ * generic/tclThreadJoin.c: noted that this code isn't needed on Unix.
+
+2002-04-23 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/exec.n:
+ * doc/tclvars.n: doc updates [Patch 509426] (gravereaux)
+
+2002-04-24 Daniel Steffen <das@users.sourceforge.net>
+
+ * mac/tclMacResource.r: added check of TCLTK_NO_LIBRARY_TEXT_RESOURCES
+ #define to allow disabling the inclusion of the tcl library code in
+ the resource fork of Tcl executables and shared libraries.
+
+2002-04-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/TraceCmd.3: New file that documents Tcl_CommandTraceInfo,
+ Tcl_TraceCommand and Tcl_UntraceCommand [Bug 414927]
+
+2002-04-22 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclAlloc.c:
+ * generic/tclInt.h:
+ * generic/tclThreadAlloc.c (new):
+ * unix/Makefile.in:
+ * unix/tclUnixThrd.c:
+ * win/Makefile.in:
+ * win/tclWinInt.h:
+ * win/tclWinThrd.c: added new threaded allocator contributed by AOL
+ that significantly reduces lock contention when multiple threads are
+ in use. Only Windows and Unix implementations are ready, and the
+ Windows one may need work. It is only used by default on Unix for now,
+ and requires that USE_THREAD_ALLOC be defined (--enable-threads on
+ Unix will define this).
+
+ * generic/tclIOUtil.c (Tcl_FSRegister, Tcl_FSUnregister): corrected
+ calling of Tcl_ConditionWait to ensure that there would be a condition
+ to wait upon.
+
+ * generic/tclCmdAH.c (Tcl_FileObjCmd): added cast in FILE_SIZE.
+
+ * win/tclWinFCmd.c (DoDeleteFile): check return of setattr API calls
+ in file deletion for correct Win32 API handling.
+
+ * win/Makefile.in: correct dependencies for shell, gdb, runtest
+ targets.
+
+ * doc/clock.n:
+ * compat/strftime.c (_fmt): change strftime to correctly handle
+ localized %c, %x and %X on Windows. Added some notes about how the
+ other values could be further localized.
+
+2002-04-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c (Tcl_Main): Free the memory allocated for the
+ startup script path. [Bug 543549]
+
+ * library/msgcat/msgcat.tcl: [mcmax] wasn't using the caller's
+ namespace when determining the max translated length. Also made
+ revisions for better use of namespace variables and more efficient
+ [uplevel]s.
+
+ * doc/msgcat.n:
+ * library/msgcat/msgcat.tcl:
+ * library/msgcat/pkgIndex.tcl: Added [mcload] to the export list of
+ msgcat; bumped to 1.2.3. [Bug 544727]
+
+2002-04-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c:
+ * mac/tclMacFCmd.c:
+ * mac/tclMacFile.c:
+ * mac/tclMacUtil.c: Modified TclpObjNormalizePath to be alias file
+ aware, and replaced various calls to FSpLocationFrom*Path by calls to
+ new alias file aware versions FSpLLocationFrom*Path. The alias file
+ aware routines don't resolve the last component of a path if it is an
+ alias. This allows [file copy/delete] etc. to act correctly on alias
+ files. (c.f. discussion in [Bug 511666])
+
+2002-04-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/lindex.test (lindex-3.7):
+ * generic/tclUtil.c (TclGetIntForIndex): Stopped indexes from hitting
+ wide ints. [Bug 526717]
+
+2002-04-18 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclNamesp.c:
+ * tests/info.test: [Bug 545325] info level didn't report namespace
+ eval, bug report by Richard Suchenwirth.
+
+2002-04-18 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/subst.n: Clarified documentation on handling unusual return
+ codes during substitution, and on variable substitutions implied by
+ command substitution, and vice versa. [Bug 536838]
+
+2002-04-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdIL.c (InfoBodyCmd):
+ * tests/info.test (info-2.6): Proc bodies without string reps would
+ report as empty. [Bug 545644]
+
+ * generic/tclCmdMZ.c (Tcl_SubstObj): More clarification for comment on
+ behaviour when substitutions are not well-formed, prompted by [Bug
+ 536831]; alas, removing the ill-defined behaviour is a lot of work.
+
+2002-04-18 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c:
+ * tests/expr-old.test: fix for [Bug 542588] (Phil Ehrens), where "too
+ large integers" were reported as "floating-point value" in [expr]
+ error messages.
+
+2002-04-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEncoding.c (EscapeFromUtfProc):
+ * generic/tclIO.c (WriteChars, Tcl_Close): corrected the handling of
+ outputting end escapes for escape-based encodings.
+ [Bug 526524] (yamamoto)
+
+2002-04-17 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Removed [saveState] and [restoreState] from tcltest
+ 2 documentation, effectively deprecating them. [Bug 495660]
+ * library/tcltest/tcltest.tcl: Made separate export for commands kept
+ only for tcltest 1 compatibility.
+
+ * tests/iogt.test: Revised to run tests in a namespace, rather than
+ use the useless and buggy [saveState] and [restoreState] commands of
+ tcltest. Updated to use tcltest 2 as well. [Patch 544911]
+
+2002-04-16 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/io.test: Revised to run tests in a namespace, rather than use
+ the useless and buggy [saveState] and [restoreState] commands of
+ tcltest. Updated to use tcltest 2 as well. [Patch 544546]
+
+2002-04-15 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclProc.c:
+ * tests/proc-old.test: Improved stack trace for TCL_BREAK and
+ TCL_CONTINUE returns from procs. Patch by Don Porter [Bug 536955].
+
+ * generic/tclExecute.c:
+ * tests/compile.test: made bytecodes check for a catch before
+ returning; the compiled [return] is otherwise non-catchable. [Bug
+ 542142] reported by Andreas Kupries.
+
+2002-04-15 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/socket.test: Increased timeout values so that tests have
+ time to successfully complete even on slow/busy machines. [Bug 523470]
+
+ * doc/tcltest.n:
+ * library/tcltest/tcltest.tcl:
+ * tests/tcltest.test: Revised [tcltest::test] to return errors when
+ called with invalid syntax and to accept exactly two arguments as
+ documented. Improved error messages. [Bug 497446, Patch 513983]
+ ***POTENTIAL INCOMPATIBILITY***: Incompatible with previous tcltest
+ 2.* releases, found only in alpha releases of Tcl 8.4.
+
+2002-04-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclNotify.c (TclFinalizeNotifier): remove remaining
+ unserviced events on finalization.
+
+ * win/tcl.m4: Enabled COFF as well as CV style debug info with
+ --enable-symbols to allow Dr. Watson users to see function info. More
+ info on debugging levels can be obtained at:
+ http://msdn.microsoft.com/library/en-us/dnvc60/html/gendepdebug.asp
+
+ * tests/ioCmd.test: fixed iocmd-8.15 to have mac and unixPc variants.
+
+ * generic/tclParse.c (Tcl_ParseVar): conditionally incr obj refcount
+ to prevent possible mem leak.
+
+2002-04-08 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.h: no <sys/types.h> on mac.
+ * mac/tclMacFile.c: minor fixes to Vince's changes from 03-24.
+ * mac/tclMacOSA.c:
+ * mac/tclMacResource.c: added missing Tcl_UtfToExternalDString
+ conversions of resource file names.
+ * mac/tclMacSock.c (TcpGetOptionProc): fixed bug introduced by Andreas
+ on 02-25; changed strcmp's to strncmp's so that option comparison
+ behaves like on other platforms.
+ * mac/tcltkMacBuildSupport.sea.hqx (CW Pro6 changes): added support to
+ allow Tk to hookup C library stderr/stdout to TkConsole.
+ * tests/basic.test:
+ * tests/cmdAH.test:
+ * tests/encoding.test:
+ * tests/fileSystem.test:
+ * tests/ioCmd.test: fixed tests failing on mac: check for existence of
+ [exec], changed some result strings.
+
+2002-04-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixFCmd.c (Realpath): added a little extra code to
+ initialize a realpath arg when compiling in PURIFY mode in order to
+ prevent spurious purify warnings. We should really create our own
+ realpath implementation, but this will at least quiet purify for now.
+
+2002-04-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (Tcl_SubstObj):
+ * tests/subst.test: Corrected [subst] so that return codes TCL_BREAK
+ and TCL_CONTINUE returned by variable substitution have the same
+ effect as when those codes are returned by command substitution. [Bug
+ 536879]
+
+2002-04-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/tcltest/tcltest.tcl: added getMatchingFiles back (alias to
+ GetMatchingFiles), which was a public function in tcltest 1.0.
+
+2002-04-01 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclEnv.c:
+ * generic/tclIOUtil.c: invalidate filesystem cache when the user
+ changes env(HOME). Fixes [Bug 535621]. Also cleaned up some of the
+ documentation.
+ * tests/fileSystem.test: added test for bug just fixed.
+
+2002-04-01 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWinTime.c (Tcl_GetTime): made the checks of clock frequency
+ more permissive to cope with the fact that Win98SE is observed to
+ return 1.19318 in place of 1.193182 for the performance counter
+ frequency.
+
+2002-03-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (Tcl_TraceObjCmd, TraceVarProc)
+ (TraceCommandProc, TclTraceCommandObjCmd): corrected potential
+ double-free of traces on variables by flagging in Trace*Proc that it
+ will free the var in case the eval wants to delete the var trace as
+ well. [Bug 536937] Also converted Tcl_UntraceVar -> Tcl_UntraceVar2
+ and Tcl_Eval to Tcl_EvalEx in Trace*Proc for slight efficiency
+ improvement.
+
+2002-03-29 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/AllowExc.3:
+ * generic/tclBasic.c (Tcl_EvalObjv,Tcl_EvalEx,Tcl_EvalObjEx):
+ * generic/tclCompile.h (TclCompEvalObj):
+ * generic/tclExecute.c (TclCompEvalObj,TclExecuteByteCode):
+ * tests/basic.test: Corrected problems with Tcl_AllowExceptions having
+ influence over the wrong scope of Tcl_*Eval* calls. Patch from Miguel
+ Sofer. Report from Jean-Claude Wippler. [Bug 219181]
+
+2002-03-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclVar.c: Refactored CallTraces to collect repeated handling
+ of its returned value into CallTraces itself.
+
+2002-03-28 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/feather.bmp:
+ * tools/man2help.tcl:
+ * tools/man2help2.tcl:
+ * win/makefile.vc: More winhelp target fixups. Added a feather bitmap
+ to the non-scrollable area and changed the color to be yellow from a
+ plain white. The colors can be whatever we want them to be, but
+ thought I would start with something bold. [Bug 527941]
+
+ * doc/SetVar.3:
+ * doc/TraceVar.3:
+ * doc/UpVar.3: .AP macro syntax repair.
+
+2002-03-27 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/man2help.tcl:
+ * win/makefile.vc: winhelp target now copies all needed files from
+ tools/ to a workarea under $(OUT_DIR) and builds it from there. No
+ build cruft is left in tools/ anymore. All paths used in man2help.tcl
+ are now relative to where the script is. [Bug 527941]
+
+2002-03-27 David Gravereaux <davygrvy@pobox.com>
+
+ * win/.cvsignore:
+ * win/buildall.vc.bat:
+ * win/coffbase.txt:
+ * win/makefile.vc:
+ * win/nmakehlp.c (new):
+ * win/rules.vc: First draft fix for [Bug 527941]. More changes need
+ to done to the makehelp target to get to stop leaving build files in
+ the tools/ directory. This does not address the syntax errors in the
+ man files. Having the contents of tcl.hpj(.in) inside makefile.vc
+ allows for version numbers to be replaced with macros.
+
+ The new nmakehlp.c is built by rules.vc in preprocessing and removes
+ the need to use tricky shell syntax that wasn't compatible on Win9x
+ systems. Clean targets made Win9x complient. This is a first draft
+ repair for [Bug 533862].
+
+2002-03-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalEx): passing the correct commandSize to
+ TclEvalObjvInternal. [Bug 219362], fix by David Knoll.
+
+2002-03-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalEx):
+ * tests/basic.test: avoid exceptional returns at level 0. [Bug 219181]
+
+2002-03-27 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n ([mainThread]):
+ * library/tcltest/tcltest.tcl:
+ * tests/tcltest.test: Major code cleanup to deal with whitespace,
+ coding conventions, and namespace issues, with several minor bugs
+ fixed in the process.
+
+ * tests/main.test: Added missing [after cancel]s.
+
+2002-03-25 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/main.test: Removed workarounds for Bug 495977.
+
+ * library/tcltest/tcltest.tcl: Keep the value of $::auto_path
+ unchanged, so that the tcltest package can test code that depends on
+ auto-loading. If a testing application needs $::auto_path pruned, it
+ should do that itself. [Bug 495726]
+ Improve the processing of the -constraints option to [test] so that
+ constraint lists can have arbitrary whitespace, and non-lists don't
+ blow things up. [Bug 495977]
+ Corrected faulty variable initialization. [Bug 534845]
+
+2002-03-25 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * doc/CrtTrace.3: small doc correction
+ * generic/tclBasic.c (Tcl_DeleteTrace): Allow NULL callback on trace
+ deletions. [Bug 534728] (Hemang Lavana)
+
+2002-03-24 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalObjv): replaced obscure, incorrect code
+ as described in [Bug 533907] (Don Porter).
+
+2002-03-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Use [interpreter] to set/query the
+ executable currently running the tcltest package. [Bug 454050]
+
+ * library/tcltest/tcltest.tcl: Allow non-proc commands to be used as
+ the customization hooks. [Bug 495662]
+
+2002-03-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFilename.c:
+ * generic/tclFCmd.c:
+ * generic/tclTest.c:
+ * generic/tcl.h:
+ * generic/tclIOUtil.c:
+ * win/tclWinFile.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinPipe.c:
+ * unix/tclUnixFile.c:
+ * unix/tclUnixFCmd.c:
+ * mac/tclMacFile.c:
+ * doc/FileSystem.3:
+ * doc/file.n:
+ * tests/cmdAH.test:
+ * tests/fileName.test:
+ * tests/fileSystem.test: (new file)
+ * tests/winFCmd.test: fix [Bug 511666] and [Bug 511658], and improved
+ documentation of some aspects of the filesystem, particularly
+ 'Tcl_FSMatchInDirectory' which now might match a single file/directory
+ only, and 'file normalize' which wasn't very clear before. Removed
+ inconsistency betweens docs and the Tcl_Filesystem structure. Also
+ fixed [Bug 523217] and corrected file normalization on Unix so that
+ it expands symbolic links. Added some new tests of the filesystem
+ code (in the new file 'fileSystem.test'), and some extra tests for
+ correct handling of symbolic links. Fix to [Bug 530960] which shows up
+ on Win98. Made comparison with ".com" case insensitive in tclWinPipe.c
+
+ ***POTENTIAL INCOMPATIBILITY***: But only between alpha releases
+ (users of the new Tcl_Filesystem lookup table in Tcl 8.4a4 need to
+ handle the new way in which Tcl may call Tcl_FSMatchInDirectory, and
+ 'file normalize' on unix now behaves correctly). Only known impact is
+ with the 'tclvfs' extension.
+
+2002-03-22 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * tests/basic.test (basic-46.1): adding test for [Bug 533758], fixed
+ earlier today.
+
+2002-03-22 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinInt.h: moved undef of TCL_STORAGE_CLASS. [Bug 478579]
+
+2002-03-22 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalObjEx):
+ * generic/tclExecute.c (TclCompEvalObj): fixed the errorInfo for
+ return codes other than (TCL_OK, TCL_ERROR) to runLevel 0.[Bug 533758]
+ Removed the static RecordTracebackInfo(), as its functionality is
+ easily replicated by Tcl_LogCommandInfo. Bug and redundancy noted by
+ Don Porter.
+
+2002-03-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/expr.n: Improved documentation for ceil and floor. [Bug 530535]
+
+2002-03-20 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/SetVar.3:
+ * doc/TraceVar.3:
+ * doc/UpVar.3:
+ * generic/tcl.h (Tcl_VarTraceProc):
+ * generic/tcl.decls (Tcl_GetVar2, Tcl_SetVar2, Tcl_TraceVar2,
+ (Tcl_UnsetVar2, Tcl_UntraceVar2, Tcl_UpVar2, Tcl_VarTraceInfo2,
+ (Tcl_GetVar2Ex, TclSetVar2Ex):
+ * generic/tclCmdMZ.c (TraceVarProc):
+ * generic/tclEnv.c (EnvTraceProc):
+ * generic/tclEvent.c (VwaitVarProc):
+ * generic/tclInt.decls (TclLookupVar,TclPrecTraceProc):
+ * generic/tclLink.c (LinkTraceProc):
+ * generic/tclUtil.c (TclPrecTraceProc):
+ * generic/tclVar.c (CallTraces, MakeUpvar, VarErrMsg, TclLookupVar,
+ (Tcl_GetVar2, Tcl_SetVar2, Tcl_TraceVar2, Tcl_UnsetVar2,
+ (Tcl_UntraceVar2, Tcl_UpVar2, Tcl_VarTraceInfo2, Tcl_GetVar2Ex,
+ (TclSetVar2Ex): Updated interfaces of generic/tclVar.c according to
+ TIP 27. In particular, the "part2" arguments were CONSTified. [Patch
+ 532642]
+ * generic/tclDecls.h:
+ * generic/tclIntDecls.h: make genstubs
+
+2002-03-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/compile.test (compile-12.3): Test to detect bug 530320.
+ * generic/tclCompile.c (TclCompileTokens): Fixed buffer overrun
+ reported in bug 530320.
+
+2002-03-14 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Add configure time test for SEH support in the
+ compiler.
+ * win/tclWin32Dll.c (ESP, EBP, TclpCheckStackSpace,
+ (_except_checkstackspace_handler):
+ * win/tclWinChan.c (ESP, EBP, Tcl_MakeFileChannel,
+ (_except_makefilechannel_handler):
+ * win/tclWinFCmd.c (ESP, EBP, DoRenameFile, DoCopyFile,
+ (_except_dorenamefile_handler, _except_docopyfile_handler):
+ Implement SEH support under gcc using inline asm. Tcl and Tk should
+ now compile with Mingw 1.1. [Patch 525746]
+
+2002-03-14 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinFCmd.c (DoRenameFile, DoCopyFile): Handle an SEH exception
+ with EXCEPTION_EXECUTE_HANDLER instead of restarting the faulting
+ instruction with EXCEPTION_CONTINUE_EXECUTION. [Bug 466102] provides
+ an example of how restarting could send Tcl into an infinite loop.
+ [Patch 525746]
+
+2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinFCmd.c (DoRenameFile, DoCopyFile, DoDeleteFile,
+ (DoRemoveJustDirectory): Make sure we don't pass NULL or "" as a path
+ name to Win32 API functions since this was crashing under Windows 98.
+
+2002-03-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl:
+ * library/tcltest/pkgIndex.tcl: Bumped tcltest package to 2.0.2.
+
+2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl (getMatchingFiles): Pass a proper list
+ to foreach to avoid munging a Windows patch like D:\Foo\Bar into
+ D:FooBar before the glob.
+
+2002-03-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Fix typo in comment.
+ * generic/tclIO.c (DoReadChars, ReadBytes, ReadChars): Use NULL value
+ instead of pointer set to NULL to make things more clear. Reorder
+ arguments so that they match the function signatures. Cleanup little
+ typos and add more descriptive comment.
+
+2002-03-08 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update to indicate that Mingw 1.1 is required to build
+ Tcl. Add section describing new msys based build process. Update
+ Cygwin build instructions so users know where to find Mingw 1.1.
+
+2002-03-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinFCmd.c (DoCopyFile): correctly set retval to TCL_OK.
+
+2002-03-07 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWin32Dll.c (TclpCheckStackSpace):
+ * win/tclWinFCmd.c (DoRenameFile, DoCopyFile): Replace hard coded
+ constants with Win32 symbolic names. Move control flow statements out
+ of __try blocks since the documentation indicates it is frowned upon.
+
+2002-03-07 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/interp.n:
+ * generic/tclInterp.c (Tcl_InterpObjCmd, SlaveObjCmd,
+ (SlaveRecursionLimit):
+ * generic/tclTest.c:
+ * tests/interp.test: Added the [interp recursionlimit] command to
+ set/query the recursion limit of an interpreter. Proposal and
+ implementation from Stephen Trier. [TIP 87, Patch 522849]
+
+2002-03-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tcl.h, tools/tcl.wse.in, unix/configure.in,
+ * unix/tcl.spec, win/README.binary, win/configure.in, README:
+ Bumped patchlevel; this might need to change in the future, but it
+ will help us distinguish between the CVS version and the most recent
+ released version.
+
+2002-03-06 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclInt.h: for unshared objects, TclDecrRefCount now frees
+ the internal rep before the string rep - just like the non-macro
+ Tcl_DecrRefCount/TclFreeObj. [Bug 524802]
+
+2002-03-06 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/lsearch.n: Documentation of new features, plus examples.
+ * tests/lsearch.test: Tests of new features.
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): TIP#80 support. See
+ http://purl.org/tcl/tip/80 for details.
+
+2002-03-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.4a4 TAGGED FOR RELEASE ***
+
+ * unix/tclUnixChan.c: initial remedy for [Bug 525783] flush problem
+ introduced by TIP #35. This may not satisfy true serial channels, but
+ it restores the correct flushing of std* channels on exit.
+
+ * unix/README: added --enable-langinfo doc.
+
+ * unix/tcl.spec:
+ * tools/tcl.wse.in: fixed URL refs to use www.tcl.tk or SF.
+
+2002-03-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README:
+ * mac/README:
+ * unix/Makefile.in:
+ * unix/README:
+ * win/README:
+ * win/README.binary: updated to use www.tcl.tk URL.
+
+ * unix/Makefile.in: added older ChangeLogs to dist target.
+
+ * tests/io.test:
+ * tests/encoding.test: corrected iso2022 encoding results.
+ added encoding-24.*
+ * generic/tclEncoding.c (EscapeFromUtfProc): corrected output of
+ escape codes as per RFC 1468. [Patch 474358] (taguchi)
+ (TclFinalizeEncodingSubsystem): corrected potential double-free
+ when encodings were finalized on exit. [Bugs 219314, 524674]
+
+2002-03-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/encoding/iso2022-jp.enc:
+ * library/encoding/iso2022.enc:
+ * tools/encoding/iso2022-jp.esc:
+ * tools/encoding/iso2022.esc: gave <ESC>$B precedence over <ESC>$@,
+ based on comments (point 1) in [Bug 219283] (rfc 1468)
+
+ * tests/encoding.test: added encoding-23.* tests
+ * generic/tclIO.c (FilterInputBytes): reset the TCL_ENCODING_START
+ flags in the ChannelState when using 'gets'. [Bug 523988]
+ Also reduced the value of ENCODING_LINESIZE from 30 to 20 as this
+ seems to improve the performance of 'gets' according to tclbench.
+
+2002-02-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (TraceCommandProc): ensure that TraceCommandInfo
+ structure was also deleted when a command was deleted to prevent a
+ mem leak.
+
+ * generic/tclBasic.c (Tcl_CreateObjTrace): set tracePtr->flags
+ correctly.
+
+ * generic/tclTimer.c (TimerExitProc): remove remaining events in
+ tls on thread exit.
+
+2002-02-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclNamesp.c: allow cached fully-qualified namespace names to
+ be usable from different namespaces within the same interpreter
+ without forcing a new lookup [Patch 458872].
+
+2002-02-28 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclExecute.c: Replaced a few direct stack accesses with the
+ POP_OBJECT() macro [Bug 507181] (Don Porter).
+
+2002-02-27 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/GetIndex.3:
+ * generic/tcl.decls (Tcl_GetIndexFromObjStruct):
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Revised the
+ prototype of the Tcl_GetIndexFromObjStruct to take its struct table as
+ a (CONST VOID *) argument, better describing what it is, maintaining
+ source compatibility, and adding CONST correctness according to TIP
+ 27. Thanks to Joe English for an elegant solution. [Bug 520304]
+
+ * generic/tclDecls.h: make genstubs
+
+ * generic/tclMain.c (Tcl_Main,StdinProc): Corrected some reference
+ count management errors on the interactive command Tcl_Obj found by
+ Purify. Thanks to Jeff Hobbs for the report and assistance.
+
+2002-02-27 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclBasic.c (Tcl_EvalTokensStandard): corrected mem leak in
+ error case.
+
+ * generic/tclTest.c (TestStatProc[123]): correct harmless UMRs.
+
+ * generic/tclLink.c (Tcl_LinkVar): correct mem leak in error case.
+
+2002-02-27 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/socket.test (2.7): Accepted and applied patch for [Bug 523470]
+ provided by Don Porter <dgp@users.sourceforge.net> to avoid timing
+ problems in that test.
+
+ * unix/tclUnixChan.c (TclpOpenFileChannel): Added code to regonize
+ "/dev/tty" (by name) and to not handle it as tty / serial line. This
+ is the controlling terminal and is special. Setting it into raw mode
+ as is done for other tty's is a bad idea. This is a hackish fix for
+ expect [Bug 520624]. The fix has limitation: Tcl_MakeFileChannel
+ handles tty's specially too, but is unable to recognize /dev/tty as it
+ only gets a file descriptor, and no name for it.
+
+2002-02-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdAH.c (StoreStatData): corrected mem leak.
+
+ * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): prevent obj leak in
+ remedial regsub case.
+
+ * generic/tclFileName.c (Tcl_TranslateFileName): decr refcount for
+ error case to prevent mem leak.
+
+ * generic/tclVar.c (Tcl_ArrayObjCmd): removed extra obj allocation.
+
+ * unix/tclUnixSock.c (Tcl_GetHostName): added an extra
+ gethostbyname check to guard against failure with truncated
+ names returned by uname.
+
+ * unix/configure:
+ * unix/tcl.m4 (SC_SERIAL_PORT): added sys/modem.h check and defined
+ _XOPEN_SOURCE_EXTENDED for HP-11 to get updated header decls.
+
+ * unix/tclUnixChan.c: added Unix implementation of TIP #35, serial
+ port support. [Patch 438509] (schroedter)
+
+2002-02-26 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCmpCmds.c: (bugfix to the bugfix, hopefully the last)
+ Bugfix to the new [for] compiling code: was setting a exceptArray
+ parameter using another param which wasn't yet initialised, thus
+ filling it with noise.
+
+2002-02-25 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * mac/tclMacSock.c (TcpGetOptionProc): Changed to recognize the option
+ "-error". Essentially ignores the option, always returning an empty
+ string.
+
+2002-02-25 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/Alloc.3:
+ * doc/LinkVar.3:
+ * doc/ObjectType.3:
+ * doc/PkgRequire.3:
+ * doc/Preserve.3:
+ * doc/TCL_MEM_DEBUG.3: Updated documentation to describe the ckalloc,
+ ckfree, ckrealloc, attemptckalloc, and attemptckrealloc macros, and
+ to accurately describe when and how they are used. [Bug 497459] (dgp)
+
+ * generic/tclHash.c (AllocArrayEntry, AllocStringEntry):
+ Before invoking ckalloc when creating a Tcl_HashEntry,
+ check that the amount of memory being allocated is
+ at least as large as sizeof(Tcl_HashEntry). The previous
+ code was allocating memory regions that were one
+ or two bytes short. [Bug 521950] (dejong)
+
+2002-02-25 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalEx): avoiding a buffer overrun
+ reported by Joe English, and restoring tcl7.6 behaviour for
+ [subst]: badly terminated nested scripts will raise an error
+ and not be evaluated. [Bug 495207]
+
+2002-02-25 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixPort.h: corrected strtoll prototype mismatch on Tru64.
+ * compat/strtod.c (strtod): simplified #includes
+ * compat/strtol.c (strtol): gather result in a long before returning
+ as a long: necessary on platforms where sizeof(int) != sizeof(long).
+
+2002-02-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclLoadDyld.c: updated to use Mac OS X 10.1 dyld APIs that
+ have more libdl-like semantics. [Bug 514392]
+
+2002-02-25 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompCmds: fixing a bug in patch dated 2002-02-22, in the
+ code for [for] and [while]. Under certain conditions, for long bodies,
+ the exception range parameters were badly computed. Tests forthcoming:
+ I still can't reproduce the conditions in the testsuite (!), although
+ the bug (with assorted segfault or panic!) can be triggered from the
+ console or with the new parse.bench in tclbench.
+
+2002-02-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * compat/strtoul.c, compat/strtol.c, compat/strtod.c: Added UCHAR,
+ CONST and #includes to clean up GCC output.
+
+2002-02-23 Don Porter <dgp@users.sourceforge.net>
+
+ * compat/strtoull.c (strtoull):
+ * compat/strtoll.c (strtoll):
+ * compat/strtoul.c (strtoul): Fixed failure to handle leading
+ sign symbols '+' and '-' and '0X' and raise overflow errors.
+ [Bug 440916] Also corrects prototype and errno problems.
+
+2002-02-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Link with -n32 instead of -32 when
+ building on IRIX64-6.* system. [Bug 521707]
+
+2002-02-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h:
+ * generic/tclObj.c: renamed global variable emptyString ->
+ tclEmptyString because it is no longer static.
+ * generic/tclPkg.c: Fix for panic when library is loaded on a
+ platform without backlinking without proper use of stubs. [Bug 476537]
+
+2002-02-22 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/regexpComp.test: updated regexp-11.[1-4] to match changes in
+ regexp.test for new regsub syntax
+
+ * unix/configure:
+ * unix/tcl.m4: added --enable-64bit support for AIX-4 (using -q64
+ flag) when using IBM's xlc compiler.
+
+ * tests/safe.test: updated safe-8.5 and safe-8.7
+ * library/safe.tcl (CheckFileName): removed the limit on
+ sourceable file names (was only *.tcl or tclIndex files with no more
+ than one dot and 14 chars). There is enough internal protection in a
+ safe interpreter already. [Tk Bug 521560]
+
+2002-02-22 Miguel Sofer <msofer@users.sourceforge.net>
+
+ * generic/tclCompCmds: [FR 465811]. Optimising [if], [for] and [while]
+ for constant conditions; in addition, [for] and [while] are now
+ compiled with the "loop rotation" optimisation (thanks to Kevin
+ Kenny).
+
+2002-02-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ --- TIP#76 CHANGES ---
+ * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): Final-argument-less
+ [regsub] returns the modified string.
+ * doc/regsub.n: Updated docs.
+ * tests/regexp.test: Updated and added tests.
+
+ * compat/strtoll.c (strtoll):
+ * compat/strtoull.c (strtoull):
+ * unix/tclUnixPort.h:
+ * win/tclWinPort.h: Const-ing 64-bit compatability 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.
+
+2002-02-21 David Gravereaux <davygrvy@pobox.com>
+
+ * win/mkd.bat (removed):
+ * win/coffbase.txt (new):
+ * win/makefile.bc:
+ * win/makefile.vc: Changed the 'setup' target to stop using the
+ mkd.bat file and just make the directory right in the rule. Same
+ change to makefile.bc. Neither configure.in nor Makefile.in use it.
+
+ coffbase.txt will be the master list for our "prefered base addresses"
+ set by the linker. This should improve load-time (NT only) by avoiding
+ relocations. Submissions to the list by extension authors are
+ encouraged.
+
+ Added a 'tidy' target to compliment 'clean' and 'hose' to remove just
+ the outputs. Also removed the $(winlibs) macro as it wasn't being
+ used.
+
+ Stuff left to do:
+ 1) get the winhelp target to stop building in the tools/ directory.
+ 2) stop using rmd.bat
+ 3) add more dependacy rules.
+
+ * win/tclAppInit.c: Reverted back to -r1.6, as the header file change
+ to tclPort.h won't allow for easy embedded support outside of the
+ source dist. Thanks to Don Porter for pointing this out to me.
+
+2002-02-21 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc:
+ * win/rules.vc: Added a new "loimpact" option that sets the
+ -ws:aggressive linker option. Off by default. It's said to keep the
+ heap use low at the expense of alloc speed.
+
+ * win/tclAppInit.c: Changed #include "tcl.h" to be tclPort.h to remove
+ the raw windows.h include. tclPort.h brings in windows.h already and
+ lessens the pre-compiled-header mush and the randomly useless #pragma
+ comment (lib,...) references throughout the big windows.h tree (as
+ observed at high linker warning levels).
+
+2002-02-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tcl.h: Better guessing of LP64/ILP32 architecture, but now
+ sensitive to presence of (suitable) <limits.h>
+
+2002-02-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.decls (Tcl_RegExpRange,Tcl_GetIndexFromObjStruct):
+ Overlooked a few source incompatibilities. Now using CONST84.
+ * generic/tclDecls.h: make genstubs
+ * generic/tcl.h (Tcl_CmdObjTraceProc): silence warning from Sun
+ Workshop compiler.
+
+2002-02-20 David Gravereaux <davygrvy@pobox.com>
+
+ * win/buildall.vc.bat:
+ * win/makefile.vc:
+ * win/rules.vc: General clean-ups. Added compiler and linker tests for
+ a) the pentium 0x0F errata, b) optimizing (not all have this), and c)
+ linker v6 section alignment confusion. All these are tested first to
+ make sure any D4002 or LNK1117 warnings aren't displayed. The pentium
+ 0x0F errata is a recommended switch. The v5 linker's section alignment
+ default is 512, but the v6 linker was changed to 4096 in an attempt to
+ speed loading on Win98. I changed the default to always be 512 across
+ both linkers, unless linking statically, then 4096 is used for the
+ claimed speed effect. Using a 512 alignment saves 12k bytes of dead
+ space in the DLL.
+
+ Added IA64 B-stepping errata switch when the compiler supports it.
+
+ Added profiling to $(lflags) when requested and also removed the
+ explict -entry option as the default works fine as is.
+
+ Removed win/tclWinInit.c from the special case section to let it use
+ the common implicit rule as the $(EXTFLAGS) macro it had was never
+ referenced anywhere.
+
+2002-02-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tcl.h: Added code to guess the correct settings for
+ TCL_WIDE_INT_IS_LONG and TCL_WIDE_INT_TYPE when configure doesn't tell
+ us them, as can happen with extensions.
+
+2002-02-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/format.n: Updated docs to list the specification.
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd): Made behaviour on 64-bit
+ platforms correctly meet the specification, that %d works with the
+ native word-sized integer, instead of trying to guess (wrongly)
+ from the value being passed.
+
+2002-02-19 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: First draft of updated changes for 8.4a4 release.
+
+2002-02-15 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixPort.h: add strtoll/strtoull declarations for
+ platforms that do not define them.
+
+ * generic/tclIndexObj.c (STRING_AT): removed ptrdiff_t cast and
+ use of VOID* in default case (GNU-ism).
+
+2002-02-15 Kevin Kenny <kennykb@acm.org>
+
+ * compat/strtoll.c:
+ * compat/strtoul.c:
+ * compat/strtoull.c:
+ * generic/tclIOUtil.c:
+ * generic/tclPosixStr.c:
+ * generic/tclTest.c:
+ * generic/tclTestObj.c:
+ * tests/get.test:
+ * win/Makefile.vc: Further tweaks to the TIP 72 patch to make it
+ compile under VC++.
+
+2002-02-15 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tclExecute.c:
+ * tclIOGT.c:
+ * tclIndexObj.c: Touchups to the TIP 72 patch to make it compileable
+ under Windows again. The changes are not complete, there is one nasty
+ regarding _stati64
+
+2002-02-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ +----------------------+
+ | TIP #72 IMPLEMENTED. |
+ +----------------------+
+
+ 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:
+
+ * generic/tcl.h: New types.
+ * generic/tcl.decls: New public functions.
+ * generic/tclExecute.c: 64-bit aware bytecode engine.
+ * generic/tclBinary.c: 64-bit handling in [binary] command.
+ * generic/tclScan.c: 64-bit handling in [scan] command.
+ * generic/tclCmdAH.c: 64-bit handling in [file] and [format]
+ commands.
+ * generic/tclBasic.c: New "wordSize" entry in ::tcl_platform.
+ * generic/tclFCmd.c: Large-file support (with many consequences.)
+ * generic/tclIO.c: Large-file support (with many consequences.)
+ * compat/strtoll.c, compat/strtoull.c: New support functions.
+ * unix/tcl.m4, unix/configure: 64-bit support and greatly enhanced
+ cacheing.
+
+ Most other changes, including all those in doc/* and test/* as well as
+ the majority in the platform directories, follow on from these.
+
+ Also coming out of the woodwork:
+ * generic/tclIndex.c: Better support for Cray PVP.
+ * win/tclWinMtherr.c: Better Borland support.
+
+ Note that, in a number of places through the Unix part of the platform
+ support, there are Tcl_Platform* references. These are expanded into
+ the correct way to call that particular underlying function, i.e. with
+ or without a '64' suffix, and should be used by people working on the
+ core in preference to the API functions they overlay so that the code
+ remains portable depending on the presence or absence of 64-bit
+ support on the underlying platform.
+
+ ***POTENTIAL INCOMPATIBILITY***: Extracted from the TIP
+
+ SUMMARY OF INCOMPATIBILITIES AND FIXES
+ ======================================
+
+ The behaviour of expressions containing constants that appear positive
+ but which have a negative internal representation will change, as
+ these will now usually be interpreted as wide integers. This is always
+ fixable by replacing the constant with int(constant).
+
+ Extensions creating new channel types will need to be altered as
+ different types are now in use in those areas. The change to the
+ declaration of Tcl_FSStat and Tcl_FSLstat (which are the new preferred
+ API in any case) are less serious as no non-alpha releases have been
+ made yet with those API functions.
+
+ Scripts that are lax about the use of the l modifier in format and
+ scan will probably need to be rewritten. This should be very uncommon
+ though as previously it had absolutely no effect.
+
+ Extensions that create new math functions that take more than one
+ argument will need to be recompiled (the size of Tcl_Value changes),
+ and functions that accept arguments of any type (TCL_EITHER) will need
+ to be rewritten to handle wide integer values. (I do not expect this
+ to affect many extensions at all.)
+
+2002-02-14 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * generic/tclIOCmd.c (Tcl_GetsObjCmd): Trivial fix for [Bug 517503], a
+ memory leak reported by Miguel Sofer <msofer@users.sf.net>. The leak
+ happens if an error occurs for "set var [gets $chan]" and leak one
+ empty object.
+
+2002-02-12 David Gravereaux <davygrvy@pobox.com>
+
+ * djgpp/ (new directory)
+ * djgpp/Makefile (new):
+ * unix/tclAppInit.c:
+ * unix/tclMtherr.c:
+ * unix/tclUnixFCmd.c:
+ * unix/tclUnixFile.c:
+ * unix/tclUnixInit.c:
+ * unix/tclUnixPort.h: Early stage of DJGPP support for building Tcl
+ on DOS. Dynamic loading isn't working, yet. Requires watt32 for the
+ TCP/IP stack. No autoconf, yet. Barely tested, but makes a working exe
+ that runs Tcl in protected-mode, flat memory. [exec] and pipes will
+ need the most work as multi-tasking on DOS has to be carefully.
+
+2002-02-10 Kevin Kenny <kennykb@acm.org>
+
+ * doc/CrtObjCmd.3:
+ * doc/CrtTrace.3:
+ * generic/tcl.decls:
+ * generic/tcl.h:
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * generic/tclTest.c:
+ * tests/basic.test: Added Tcl_CreateObjTrace,
+ Tcl_GetCommandInfoFromToken and Tcl_SetCommandInfoFromToken.
+ (TIPs #32 and #79.)
+
+ * generic/tclDecls.h:
+ * generic/tclStubInit.c: Regenerated Stubs tables.
+
+2002-02-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure:
+ * unix/tcl.m4: added -pthread for FreeBSD to EXTRA_CFLAGS and
+ LDFLAGS. Also triggered nodots only for FreeBSD-3. Added
+ AC_DEFINE(_POSIX_PTHREAD_SEMANTICS) for Solaris.
+
+ * unix/tclUnixPort.h:
+ * unix/tclUnixThrd.c: added thread-safe versions of readdir,
+ localtime, gmtime and inet_ntoa for threaded build. (jgdavidson)
+
+ * generic/tclScan.c (Tcl_ScanObjCmd): prevented ckfree being called on
+ a pointer to NULL.
+
+2002-02-07 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/DString.3:
+ * doc/Encoding.3:
+ * doc/GetCwd.3:
+ * doc/SplitPath.3:
+ * doc/Translate.3:
+ * doc/Utf.3:
+ * generic/tcl.decls:
+ * generic/tcl.h:
+ * generic/tclEncoding.c:
+ * generic/tclEnv.c:
+ * generic/tclFileName.c:
+ * generic/tclIOUtil.c:
+ * generic/tclUtf.c:
+ * generic/tclUtil.c:
+ * mac/tclMacInit.c:
+ * unix/tclUnixFile.c:
+ * unix/tclUnixInit.c:
+ * unix/tclUnixPipe.c:
+ * win/tclWin32Dll.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclWinInit.c: Partial TIP 27 rollback. Following routines
+ restored to return (char *): Tcl_DStringAppend,
+ Tcl_DStringAppendElement, Tcl_JoinPath, Tcl_TranslateFileName,
+ Tcl_ExternalToUtfDString, Tcl_UtfToExternalDString,
+ Tcl_UniCharToUtfDString, Tcl_GetCwd, Tcl_WinTCharToUtf. Also restored
+ Tcl_WinUtfToTChar to return (TCHAR *) and Tcl_UtfToUniCharDString to
+ return (Tcl_UniChar *). Modified some callers. This change recognizes
+ that Tcl_DStrings are de-facto white-box objects.
+
+ * generic/tclDecls.h:
+ * generic/tclPlatDecls.h: make genstubs
+
+ * generic/tclCmdMZ.c: corrected use of C++-style comment.
+
+2002-02-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/scan.test:
+ * generic/tclScan.c (Tcl_ScanObjCmd): corrected scan 0x... %x handling
+ that didn't accept the 0x as a prelude to a base 16 number. [Bug
+ 495213]
+
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): made early check for
+ bad RE to stop checking further.
+
+ * generic/tclCmdMZ.c (Tcl_RegsubObjCmd): added special case to search
+ for simple 'string map' style regsub calls. Delayed creation of
+ resultPtr object until an initial match is made, as the input string
+ object can then be reused for no matches.
+ (Tcl_StringObjCmd): optimization improvements to the STR_MAP
+ algorithm for zero-length and nocase cases.
+
+ * tests/regexp.test:
+ * tests/regexpComp.test: extra code coverage tests.
+
+ * tests/string.test: added 10.18 and 10.19 extra tests.
+
+ * generic/regc_locale.c (casecmp): slight performance improvement.
+
+2002-02-05 Don Porter <dgp@users.sourceforge.net>
+
+ * library/http/http.tcl:
+ * library/http/pkgIndex.tcl: Corrected use of http::error when
+ ::error was intended. Bump to http 2.4.2.
+
+2002-02-04 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * unix/tclUnixChan.c (FileOutputProc): Fixed [bug 465765] reported by
+ Dale Talcott <daletalcott@users.sourceforge.net>. Avoid writing
+ nothing into a file as STREAM based implementations will consider this
+ a EOF (if the file is a pipe). Not done in the generic layer as this
+ type of writing is actually useful to check the state of a socket.
+
+ * doc/open.n: Fixed [Bug 511540], added cross-reference to 'pid' as
+ the command to use to retrieve the pid of a command pipeline created
+ via 'open'.
+
+2002-02-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (Tcl_RegexpObjCmd): handle quirky about case
+ earlier to avoid shimmering problem.
+
+2002-02-01 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * tests/io.test: io-39.22 split into two tests, one platform
+ dependent, the other not. -eofchar is not empty on the windows
+ platform.
+
+2002-02-01 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclTest.c: fix to picky windows compiler problem with the
+ 'MainLoop' function declaration.
+
+2002-01-31 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * win/tclWinFCmd.c: TIP 27: Applied patch fixing CONST warnings on
+ behalf of Don Porter <dgp@users.sourceforge.net>.
+
+2002-01-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.decls:
+ * generic/tcl.h:
+ * generic/tclInt.h: For each interface identified in the TIP 27
+ changes below as a POTENTIAL INCOMPATIBILITY, the source of the
+ incompatibility has been parameterized so that it can be removed. When
+ compiling extension code against the Tcl header files, use the
+ compiler flag -DUSE_NON_CONST to remove the irresolvable source
+ incompatibilities introduced by the TIP 27 changes. Resolvable changes
+ are left for extension authors to resolve.
+ * generic/tclDecls.h: make genstubs
+
+2002-01-30 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3: added documentation for 3 public functions which
+ had been overlooked. [Bug 507701]
+ * unix/mkLinks: make mklinks
+
+2002-01-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/regexpComp.test:
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): enhanced to support
+ -nocase and -- options.
+
+2002-01-28 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/tcl.m4 (SC_LOAD_TCLCONFIG):
+ * win/tcl.m4 (SC_LOAD_TCLCONFIG): Set TCL_LIB_SPEC, TCL_STUB_LIB_SPEC,
+ and TCL_STUB_LIB_PATH to the values of TCL_BUILD_LIB_SPEC,
+ TCL_BUILD_STUB_LIB_SPEC, and TCL_BUILD_STUB_LIB_PATH when tclConfig.sh
+ is loaded from the build directory. A Tcl extension should make use of
+ the non-build versions of these variables since they will work in both
+ cases. This modification was described in TIP 34.
+
+2002-01-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinReg.c (regConnectRegistryProc,RecursiveDeleteKey)
+ (DeleteKey,GetKeyNames,GetType,GetValue,OpenSubKey,SetValue):
+ redid the CONSTification as previous changes caused failing tests.
+
+ * tests/regexpComp.test (new):
+ * generic/tclInt.h:
+ * generic/tclBasic.c: added TclCompileRegexpCmd entry
+ * generic/tclCompCmds.c (TclCompileStringCmd): corrected to return
+ TCL_OUT_LINE_COMPILE instead of TCL_ERROR for parsing errors, so
+ it only throws the error for runtime compile, in case the user
+ modifies 'string'.
+ (TclCompileRegexpCmd): first try at a byte-compiled regexp command. It
+ handles static strings and ^$ bounded static strings.
+ (TclCompileAppendCmd): made TclPushVarName call always use
+ TCL_CREATE_VAR as numWords is always > 2 at that point.
+
+ * generic/tclExecute.c (TclExecuteByteCode:INST_LIST): correct
+ possibly dangerous decr in macro call.
+
+ * win/tclWinInit.c (TclpFindVariable): CONSTification touch-up
+
+ * win/tclWinReg.c (OpenSubKey): corrected bug introduced in
+ CONSTification that dropped pointer reference.
+
+ * ChangeLog.2000 (new file):
+ * ChangeLog: broke changes from 2000 into ChangeLog.2000 to reduce
+ size of the main ChangeLog.
+
+2002-01-28 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclPlatDecls.h: Added preprocessor logic to force a
+ typedef of TCHAR when __STDC__ is defined when using the uncommon
+ -Za compiler switch with the microsoft compiler.
+
+2002-01-27 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/package.n: Documented global namespace context for script
+ evaluation by [package require].
+
+2002-01-27 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls:
+ * generic/tclIntPlatDecls.h:
+ * mac/tclMacChan.c:
+ * mac/tclMacFCmd.c:
+ * mac/tclMacFile.c:
+ * mac/tclMacInit.c:
+ * mac/tclMacLoad.c:
+ * mac/tclMacResource.c:
+ * mac/tclMacSock.c: TIP 27 CONSTification induced changes
+
+ * tests/event.test:
+ * tests/main.test: added catches/constraints to test that
+ use features that don't exist on the mac.
+
+2002-01-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ Make -eofchar and -translation options read only for server sockets.
+ [Bug 496733]
+
+ * generic/tclIO.c (Tcl_GetChannelOption, Tcl_SetChannelOption):
+ Instead of returning nothing for the -translation option on a server
+ socket, always return "auto". Return the empty string enclosed in
+ quotes for the -eofchar option on a server socket. Fixup -eofchar
+ usage message so that it matches the implementation.
+ * tests/io.test: Add -eofchar tests and -translation tests to ensure
+ options are read only on server sockets.
+ * tests/socket.test: Update tests to account for -eofchar and
+ -translation option changes.
+
+2002-01-25 Don Porter <dgp@users.sourceforge.net>
+
+ * compat/strstr.c (strstr):
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd):
+ * generic/tclCmdIL.c (InfoNameOfExecutableCmd):
+ * generic/tclEnv.c (ReplaceString):
+ * generic/tclFileName.c (ExtractWinRoot):
+ * generic/tclIO.c (FlushChannel,Tcl_BadChannelOption):
+ * generic/tclStringObj.c (AppendUnicodeToUtfRep):
+ * generic/tclThreadTest.c (TclCreateThread):
+ * generic/tclUtf.c (Tcl_UtfPrev):
+ * mac/tclMacFCmd.c (TclpObjListVolumes):
+ * mac/tclMacResource.c (TclMacRegisterResourceFork,
+ (BuildResourceForkList):
+ * win/tclWinInit.c (AppendEnvironment): Sought out and eliminated
+ instances of CONST-casting that are no longer needed after the
+ TIP 27 effort.
+
+ * Following is [Patch 501006]
+ * generic/tclInt.decls (Tcl_AddInterpResolvers, Tcl_Export,
+ (Tcl_FindNamespace, Tcl_GetInterpResolvers, Tcl_ForgetImport,
+ (Tcl_Import, Tcl_RemoveInterpResolvers):
+ * generic/tclNamesp.c (Tcl_Export, Tcl_Import, Tcl_ForgetImport,
+ (Tcl_FindNamespace):
+ * generic/tclResolve.c (Tcl_AddInterpResolvers,Tcl_GetInterpResolvers,
+ (Tcl_RemoveInterpResolvers): Updated APIs in generic/tclResolve.c and
+ generic/tclNamesp.c according to the guidelines of TIP 27.
+ * generic/tclIntDecls.h: make genstubs
+
+ * Following is [Patch 505630]
+ * doc/AddErrorInfo.3:
+ * generic/tcl.decls (Tcl_LogCommandInfo):
+ * generic/tclBasic.c (Tcl_LogCommandInfo): Updated interfaces
+ of generic/tclBasic.cc according to TIP 27.
+ * generic/tclDecls.h: make genstubs
+
+ * Following is [Patch 506818]
+ * doc/Hash.3:
+ * generic/tcl.decls (Tcl_HashStats):
+ * generic/tclHash.c (Tcl_HashStats): Updated APIs of generic/tclHash.c
+ according to guidelines of TIP 27.
+ * generic/tclDecls.h: make genstubs
+ * generic/tclVar.c (Tcl_ArrayObjCmd): Updated callers.
+
+ * Following is [Patch 506807]
+ * doc/ObjectType.3:
+ * generic/tcl.decls (Tcl_GetObjType):
+ * generic/tclObj.c (Tcl_GetObjType): Updated APIs of generic/tclObj.c
+ according to guidelines of TIP 27.
+ * generic/tclDecls.h: make genstubs
+
+ * Following is [Patch 507304]
+ * doc/Encoding.3:
+ * generic/tcl.decls (Tcl_WinUtfToTChar,Tcl_WinTCharToUtf):
+ * win/tclWin32Dll.c (Tcl_WinUtfToTChar,Tcl_WinTCharToUtf):
+ Updated interfaces in win/tclWin32Dll.c according to TIP 27.
+ * generic/tclPlatDecls.h: make genstubs
+ * generic/tclIOUtil.c (TclpNativeToNormalized):
+ * win/tclWinFCmd.c (TclpObjNormalizePath):
+ * win/tclWinFile.c (TclpFindExecutable,TclpMatchInDirectory,
+ (NativeIsExec,NativeStat):
+ * win/tclWinLoad.c (TclpLoadFile):
+ * win/tclWinPipe.c (TclpOpenFile,ApplicationType):
+ * win/tclWinReg.c (regConnectRegistryProc,RecursiveDeleteKey,DeleteKey,
+ (GetKeyNames,GetType,GetValue,OpenSubKey,SetValue):
+ * win/tclWinSerial.c (SerialSetOptionProc): Update callers.
+
+ * Following is [Patch 505072]
+ * doc/Concat.3:
+ * doc/Encoding.3:
+ * doc/Filesystem.3:
+ * doc/Macintosh.3:
+ * doc/OpenFileChnl.3
+ * doc/SetResult.3:
+ * doc/SetVar.3:
+ * doc/SplitList.3:
+ * doc/SplitPath.3:
+ * doc/Translate.3:
+ * generic/tcl.h (Tcl_FSMatchInDirectoryProc):
+ * generic/tclInt.h (TclpMatchInDirectory):
+ * generic/tcl.decls (Tcl_Concat,Tcl_GetStringResult,Tcl_GetVar,
+ (Tcl_GetVar2,Tcl_JoinPath,Tcl_Merge,Tcl_OpenCommandChannel,Tcl_SetVar,
+ (Tcl_SetVar2,Tcl_SplitList,Tcl_SplitPath,Tcl_TranslateFileName,
+ (Tcl_ExternalToUtfDString,Tcl_GetEncodingName,Tcl_UtfToExternalDString,
+ (Tcl_GetDefaultEncodingDir,Tcl_SetDefaultEncodingDir,
+ (Tcl_FSMatchInDirectory,Tcl_MacEvalResource,Tcl_MacFindResource):
+ * generic/tclInt.decls (TclCreatePipeline,TclGetEnv,TclpGetCwd,
+ (TclpCreateProcess):
+ * mac/tclMacFile.c (TclpGetCwd):
+ * generic/tclEncoding.c (Tcl_GetDefaultEncodingDir,
+ (Tcl_SetDefaultEncodingDir,Tcl_GetEncodingName,
+ (Tcl_ExternalToUtfDString,Tcl_UtfToExternalDString, OpenEncodingFile,
+ (LoadEscapeEncoding):
+ * generic/tclFileName.c (DoTildeSubst,Tcl_JoinPath,Tcl_SplitPath,
+ (Tcl_TranslateFileName):
+ * generic/tclIOUtil.c (Tcl_FSMatchInDirectory):
+ * generic/tclPipe.c (FileForRedirect,TclCreatePipeline,
+ (Tcl_OpenCommandChannel):
+ * generic/tclResult.c (Tcl_GetStringResult):
+ * generic/tclUtil.c (Tcl_Concat,Tcl_SplitList,Tcl_Merge):
+ * generic/tclVar.c (Tcl_GetVar,Tcl_GetVar2,Tcl_SetVar,Tcl_SetVar2):
+ * mac/tclMacResource.c (Tcl_MacEvalResource,Tcl_MacFindResource):
+ Updated interfaces of generic/tclEncoding, generic/tclFilename.c,
+ generic/tclIOUtil.c, generic/tclPipe.c, generic/tclResult.c,
+ generic/tclUtil.c, generic/tclVar.c and mac/tclMacResource.c according
+ to TIP 27. Tcl_TranslateFileName rewritten as wrapper around VFS-aware
+ version.
+ ***POTENTIAL INCOMPATIBILITY***
+ Includes source incompatibilities: argv arguments of Tcl_Concat,
+ Tcl_JoinPath, Tcl_OpenCommandChannel, Tcl_Merge; argvPtr arguments of
+ Tcl_SplitList and Tcl_SplitPath.
+ * generic/tclDecls.h:
+ * generic/tclIntDecls.h: make genstubs
+
+ * generic/tclCkalloc.c (MemoryCmd):
+ * generic/tclClock.c (FormatClock):
+ * generic/tclCmdAH.c (Tcl_CaseObjCmd,Tcl_EncodingObjCmd,Tcl_FileObjCmd):
+ * generic/tclCmdIL.c (InfoLibraryCmd,InfoPatchLevelCmd,
+ (InfoTclVersionCmd):
+ * generic/tclCompCmds.c (TclCompileForeachCmd):
+ * generic/tclCompCmds.h (TclCompileForeachCmd):
+ * generic/tclCompile.c (TclFindCompiledLocal):
+ * generic/tclEnv.c (TclSetupEnv,TclSetEnv,Tcl_PutEnv,TclGetEnv,
+ (EnvTraceProc):
+ * generic/tclEvent.c (Tcl_BackgroundError):
+ * generic/tclIO.c (Tcl_BadChannelOption,Tcl_SetChannelOption):
+ * generic/tclIOCmd.c (Tcl_ExecObjCmd,Tcl_OpenObjCmd):
+ * generic/tclIOSock.c (TclSockGetPort):
+ * generic/tclIOUtil.c (SetFsPathFromAny):
+ * generic/tclLink.c (LinkTraceProc):
+ * generic/tclMain.c (Tcl_Main):
+ * generic/tclNamesp.c (TclTeardownNamespace):
+ * generic/tclProc.c (TclCreateProc):
+ * generic/tclTest.c (TestregexpObjCmd,TesttranslatefilenameCmd,
+ (TestchmodCmd,GetTimesCmd,TestsetCmd,TestOpenFileChannelProc1,
+ (TestOpenFileChannelProc2,TestOpenFileChannelProc3,AsyncHandlerProc,
+ (TestpanicCmd):
+ * generic/tclThreadTest.c (ThreadErrorProc,ThreadEventProc):
+ * generic/tclUtil.c (TclPrecTraceProc):
+ * mac/tclMacFCmd.c (GetFileSpecs):
+ * mac/tclMacFile.c (TclpMatchInDirectory):
+ * mac/tclMacInit.c (TclpInitLibraryPath,Tcl_SourceRCFile):
+ * mac/tclMacOSA.c (tclOSAStore,tclOSALoad):
+ * mac/tclMacResource.c (Tcl_MacEvalResource):
+ * unix/tclUnixFCmd.c (TclpObjNormalizePath):
+ * unix/tclUnixFile.c (TclpMatchInDirectory,TclpGetUserHome,TclpGetCwd,
+ (TclpReadLink):
+ * unix/tclUnixInit.c (TclpInitLibraryPath,TclpSetVariables,
+ (Tcl_SourceRCFile):
+ * unix/tclUnixPipe.c (TclpOpenFile,TclpCreateTempFile,
+ (TclpCreateProcess):
+ * win/tclWinFile.c (TclpGetCwd,TclpMatchInDirectory):
+ * win/tclWinInit.c (TclpInitLibraryPath,Tcl_SourceRCFile,
+ (TclpSetVariables):
+ * win/tclWinPipe.c (TclpCreateProcess): Updated callers.
+
+2002-01-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOUtil.c (SetFsPathFromAny): Corrected tilde-substitution
+ of pathnames where > 1 separator follows the ~. [Bug 504950]
+
+2002-01-24 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/http/pkgIndex.tcl:
+ * library/http/http.tcl: don't add port in default case to handle
+ broken servers. http bumped to 2.4.1 [Bug 504508]
+
+2002-01-23 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * unix/mkLinks: Regenerated.
+ * doc/CrtChannel.3:
+ * doc/ChnlStack.3: Moved documentation for 'Tcl_GetTopChannel' from
+ 'CrtChannel' to 'ChnlStack'. Added documentation of
+ 'Tcl_GetStackedChannel'. [Bug 506147] reported by Mark Patton
+ <msp@users.sourceforge.net>.
+
+2002-01-23 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinFile.c (NativeAccess,NativeStat,NativeIsExec,
+ (TclpGetUserHome):
+ * win/tclWinPort.h (TclWinSerialReopen):
+ * win/tclWinSerial.c (TclWinSerialReopen):
+ * win/tclWinSock.c (Tcl_OpenTcpServer): Corrections to earlier TIP 27
+ changes. Thanks to Andreas Kupries for the feedback.
+ * generic/tclPlatDecls.h: make genstubs
+
+ * doc/GetHostName.3:
+ * doc/GetOpnFl.3:
+ * doc/OpenTcp.3:
+ * tcl.decls (Tcl_GetHostName,Tcl_GetOpenFile,Tcl_OpenTcpClient,
+ (Tcl_OpenTclServer):
+ * mac/tclMacSock.c (CreateSocket,Tcl_OpenTcpClient,Tcl_OpenTcpServer,
+ (Tcl_GetHostName,GetHostFromString):
+ * unix/tclUnixChan.c (CreateSocket,CreateSocketAddress,
+ (Tcl_OpenTcpClient,Tcl_OpenTcpServer,Tcl_GetOpenFile):
+ * unix/tclUnixSock.c (Tcl_GetHostName):
+ * win/tclWinSock.c (CreateSocket,CreateSocketAddress,
+ (Tcl_OpenTcpClient,Tcl_OpenTcpServer,Tcl_GetHostName):
+ Updated socket interfaces according to TIP 27.
+ * generic/tclCmdIL.c (InfoHostnameCmd): Updated callers.
+ * generic/tclDecls.h: make genstubs
+
+2002-01-21 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclLoadNone.c: TclpLoadFile() didn't match proto of typedef
+ Tcl_FSLoadFileProc. OK'd by vincentdarley. [Patch 502488]
+
+2002-01-21 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * generic/tclIO.c (WriteChars): Fix for [Bug 506297], reported by
+ Martin Forssen <ruric@users.sourceforge.net>. The encoding chosen in
+ the script exposing the bug writes out three intro characters when
+ TCL_ENCODING_START is set, but does not consume any input as
+ TCL_ENCODING_END is cleared. As some output was generated the
+ enclosing loop calls UtfToExternal again, again with START set. Three
+ more characters in the out and still no use of input ... To break this
+ infinite loop we remove TCL_ENCODING_START from the set of flags after
+ the first call (no condition is required, the later calls remove an
+ unset flag, which is a no-op). This causes the subsequent calls to
+ UtfToExternal to consume and convert the actual input.
+
+2002-01-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTest.c: Converted declarations of TestReport file system
+ to more portable form. [Bug 501417]
+
+ * generic/tcl.decls (Tcl_TraceCommand,Tcl_UntraceCommand,
+ (Tcl_CommandTraceInfo):
+ * generic/tclCmdMZ.c (Tcl_TraceCommand,Tcl_UntraceCommand,
+ (Tcl_CommandTraceInfo): Updated APIs in generic/tclCmdMZ.c according
+ to the guidelines of TIP 27.
+ * generic/tclDecls.h: make genstubs
+
+2002-01-18 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinChan.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c: Overlooked callers of Tcl_FSGetNativePath
+
+ * win/tclWinDde.c:
+ * win/tclWinReg.c: Overlooked callers of Tcl_GetIndexFromObj
+
+2002-01-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclThreadTest.c:
+ * mac/tclMacChan.c:
+ * mac/tclMacFCmd.c:
+ * mac/tclMacFile.c:
+ * mac/tclMacLoad.c:
+ * mac/tclMacResource.c: TIP 27 CONSTification broke the mac build in a
+ number of places.
+
+2002-01-17 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * generic/tclIOCmd.c (Tcl_GetsObjCmd): Fixed [Bug 504642] as reported
+ by Brian Griffin <bgriffin@users.sourceforge.net>, using his
+ patch. Before the patch the generic I/O layer held an unannounced
+ reference to the interp result to store the read line into. This
+ unfortunately has disastrous results if the channel driver executes a
+ tcl script to perform its operation, this freeing the interp
+ result. In that case we are dereferencing essentially a dangling
+ reference. It is not truly dangling because the object is in the free
+ list, but this only causes us to smash the free list and have the
+ error occur later somewhere else. The patch simply creates a new
+ object for the line and later sets it into the interp result when we
+ are done with reading.
+
+2002-01-16 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/tcl.m4 (SC_LOAD_TCLCONFIG):
+ * win/tcl.m4 (SC_LOAD_TCLCONFIG): Subst TCL_DBGX into
+ TCL_STUB_LIB_FILE and TCL_STUB_LIB_FLAG variables so that an extension
+ does not need to subst TCL_DBGX into its makefile. [Tk Bug 504356]
+
+2002-01-16 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * doc/GetCwd.3:
+ * doc/GetIndex.3:
+ * generic/tcl.decls (Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct,
+ (Tcl_GetCwd, Tcl_FSFileAttrStrings, Tcl_FSGetNativePath,
+ (Tcl_FSGetTranslatedStringPath):
+ * generic/tcl.h (Tcl_FSFileAttrStringsProc):
+ * generic/tclFCmd.c (TclFileAttrsCmd):
+ * generic/tclIOUtil.c (Tcl_GetCwd,NativeFileAttrStrings,
+ (Tcl_FSFileAttrStrings,Tcl_FSGetTranslatedStringPath,
+ (Tcl_FSGetNativePath):
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObj,
+ (Tcl_GetIndexFromObjStruct):
+ More TIP 27 updates in tclIOUtil.c and tclIndexObj.c that were
+ overlooked before. [Patch 504671]
+ ***POTENTIAL INCOMPATIBILITY***
+ Includes a source incompatibility in the tablePtr arguments of the
+ Tcl_GetIndexFromObj* routines.
+ * generic/tclDecls.h: make genstubs
+
+ * generic/tclBinary.c (Tcl_BinaryObjCmd):
+ * generic/tclClock.c (Tcl_ClockObjCmd):
+ * generic/tclCmdAH.c (Tcl_EncodingObjCmd, Tcl_FileObjCmd):
+ * generic/tclCmdIL.c (Tcl_InfoObjCmd,Tcl_LsearchObjCmd,Tcl_LsortObjCmd):
+ * generic/tclCmdMZ.c (Tcl_TraceObjCmd,Tcl_RegexpObjCmd,Tcl_RegsubObjCmd,
+ (Tcl_StringObjCmd,Tcl_SubstObjCmd,Tcl_SwitchObjCmd,
+ (TclTraceCommandObjCmd,TclTraceVariableObjCmd):
+ * generic/tclCompCmds.c (TclCompileStringCmd):
+ * generic/tclEvent.c (Tcl_UpdateObjCmd):
+ * generic/tclFileName.c (Tcl_GlobObjCmd):
+ * generic/tclIO.c (Tcl_FileEventObjCmd):
+ * generic/tclIOCmd.c (Tcl_SeekObjCmd,Tcl_ExecObjCmd,Tcl_SocketObjCmd,
+ (Tcl_FcopyObjCmd):
+ * generic/tclInterp.c (Tcl_InterpObjCmd,SlaveObjCmd):
+ * generic/tclNamesp.c (Tcl_NamespaceObjCmd):
+ * generic/tclPkg.c (Tcl_PackageObjCmd):
+ * generic/tclTest.c (Tcltest_Init,TestencodingObjCmd,TestgetplatformCmd,
+ (TestlocaleCmd,TestregexpObjCmd,TestsaveresultCmd,
+ (TestGetIndexFromObjStructObjCmd,TestReportFileAttrStrings):
+ * generic/tclTestObj.c (TestindexObjCmd,TeststringObjCmd):
+ * generic/tclTimer.c (Tcl_AfterObjCmd):
+ * generic/tclVar.c (Tcl_ArrayObjCmd):
+ * mac/tclMacFCmd.c (SetFileFinderAttributes):
+ * unix/tclUnixChan.c (TclpOpenFileChannel):
+ * unix/tclUnixFCmd.c (tclpFileAttrStrings):
+ * unix/tclUnixFile.c (TclpObjAccess,TclpObjChdir,TclpObjStat,
+ (TclpObjLstat):
+ * win/tclWinFCmd.c (tclpFileAttrStrings): Updated callers.
+
+ * doc/RegExp.3:
+ * doc/Utf.3:
+ * generic/tcl.decls:
+ * generic/tclInt.decls:
+ * generic/tclRegexp.c:
+ * generic/tclUtf.c: Updated APIs in generic/tclUtf.c and
+ generic/tclRegexp.c according to the guidelines of TIP 27.
+ [Patch 471509]
+
+ * generic/regc_locale.c (element,cclass):
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * generic/tclFileName.c (TclpGetNativePathType,SplitMacPath):
+ * generic/tclIO.c (ReadChars):
+ * mac/tclMacLoad.c (TclpLoadFile):
+ * win/tclWinFile.c (TclpGetUserHome): Updated callers.
+
+ * generic/tclDecls.h:
+ * generic/tclIntDecls.h: make genstubs
+
+ * doc/ParseCmd.3 (Tcl_ParseVar):
+ * generic/tcl.decls (Tcl_ParseVar):
+ * generic/tclParse.c (Tcl_ParseVar):
+ * generic/tclTest.c (TestparsevarObjCmd): Updated APIs in
+ generic/tclParse.c according to the guidelines of TIP 27. Updated
+ callers. [Patch 501046]
+ * generic/tclDecls.h: make genstubs
+
+ * generic/tcl.decls (Tcl_RecordAndEval):
+ * generic/tclDecls.h: make genstubs
+ * generic/tclHistory.c (Tcl_RecordAndEval): Updated APIs in
+ generic/tclHistory.c according to the guidelines of TIP 27.
+ [Patch 504091]
+
+ * doc/CrtSlave.3:
+ * generic/tcl.decls (Tcl_CreateAlias, Tcl_CreateAliasObj,
+ (Tcl_CreateSlave, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_GetSlave):
+ * generic/tclInterp.c (Tcl_CreateAlias, Tcl_CreateAliasObj,
+ (Tcl_CreateSlave, Tcl_GetAlias, Tcl_GetAliasObj, Tcl_GetSlave):
+ Updated APIs in the file generic/tclInterp.c according to the
+ guidelines of TIP 27. [Patch 501371]
+ ***POTENTIAL INCOMPATIBILITY***
+ Includes a source incompatibility in the targetCmdPtr arguments of the
+ Tcl_GetAlias* routines.
+
+ * generic/tclDecls.h: make genstubs
+
+2002-01-15 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/SetErrno.3 (Tcl_ErrnoMsg): Corrected documentation for
+ Tcl_ErrnoMsg; it takes an integer argument. Thanks to Georgios
+ Petasis. [Bug 468183]
+
+ * doc/AddErrInfo.3 (Tcl_PosixError):
+ * doc/Eval.3 (Tcl_EvalFile):
+ * doc/FileSystem.c (Tcl_FSOpenFileChannel,Tcl_FSOpenFileChannelProc):
+ * doc/OpenFileChnl.3 (Tcl_OpenFileChannel):
+ * doc/SetErrno.3 (Tcl_ErrnoId,Tcl_ErrnoMsg):
+ * doc/Signal.3 (Tcl_SignalId,Tcl_SignalMsg):
+ * generic/tcl.decls (Tcl_ErrnoId,TclErrnoMsg,Tcl_EvalFile,
+ (Tcl_OpenFileChannel,Tcl_PosixError,Tcl_SignalId,Tcl_SignalMsg,
+ (Tcl_FSOpenFileChannel):
+ * generic/tcl.h (Tcl_FSOpenFileChannelProc):
+ * generic/tclIO.c (FlushChannel):
+ * generic/tclIOUtil.c (Tcl_OpenFileChannel,Tcl_EvalFile,TclGetOpenMode,
+ (Tcl_PosixError,Tcl_FSOpenFileChannel):
+ * generic/tclInt.decls (TclGetOpenMode):
+ * generic/tclInt.h (TclOpenFileChannelProc_,TclGetOpenMode,
+ (TclpOpenFileChannel):
+ * generic/tclPipe.c (TclCleanupChildren):
+ * generic/tclPosixStr.c (Tcl_ErrnoId,Tcl_ErrnoMsg,Tcl_SignalId,
+ (Tcl_SignalMsg):
+ * generic.tclTest.c (PretendTclpOpenFileChannel,
+ (TestOpenFileChannelProc1,TestOpenFileChannelProc2,
+ (TestOpenFileChannelProc3,TestReportOpenFileChannel):
+ * mac/tclMacChan.c (TclpOpenFileChannel):
+ * unix/tclUnixChan.c (TclpOpenFileChannel):
+ * win/tclWinChan.c (TclpOpenFileChannel): Updated APIs in
+ generic/tclIOUtil.c and generic/tclPosixStr.c according to the
+ guidelines of TIP 27. Updated callers. [Patch 499196]
+
+ * generic/tclDecls.h:
+ * generic/tclIntDecls.h: make genstubs
+
+ * doc/CrtChannel.3:
+ * doc/OpenFileChnl.3:
+ * generic/tcl.decls:
+ * generic/tclIO.h:
+ * generic/tclIO.c (DoWrite, Tcl_RegisterChannel, Tcl_GetChannel,
+ (Tcl_CreateChannel, Tcl_GetChannelName, CloseChannel, Tcl_Write,
+ (Tcl_WriteRaw, Tcl_Ungets, Tcl_BadChannelOption, Tcl_GetChannelOption,
+ (Tcl_SetChannelOption, Tcl_GetChannelNamesEx, Tcl_ChannelName):
+ Updated APIs in the file generic/tclIO.c according to the guidelines
+ of TIP 27. Several minor documentation corrections as well.
+ [Patch 503565]
+ * generic/tclDecls.h: make genstubs
+
+ * generic/tcl.h (Tcl_DriverOutputProc, Tcl_DriverGetOptionProc,
+ (Tcl_DriverSetOptionProc):
+ * generic/tclIOGT.c (TransformOutputProc, TransformGetOptionProc,
+ (TransformSetOptionProc):
+ * mac/tclMacChan.c (FileOutput, StdIOOutput):
+ * man/tclMacSock.c (TcpGetOptionProc, TcpOutput):
+ * unix/tclUnixChan.c (FileOutputProc, TcpGetOptionProc, TcpOutputProc,
+ (TtyGetOptionProc, TtySetOptionProc):
+ * unix/tclUnixPipe.c (PipeOuputProc):
+ * win/tclWinChan.c (FileOutputProc):
+ * win/tclWinConsole.c (ConsleOutputProc):
+ * win/tclWinPipe.c (PipeOuputProc):
+ * win/tclWinSerial.c (SerialOutputProc, SerialGetOptionProc,
+ (SerialSetOptionProc):
+ * win/tclWinSock.c (TcpGetOptionProc, TcpOutput): Updated channel
+ driver interface according to the guidelines of TIP 27. See also
+ [Bug 500348].
+
+ * doc/CrtChannel.3:
+ * generic/tcl.h:
+ * generic/tclIO.c:
+ * generic/tclIO.h:
+ * generic/tclInt.h:
+ * tools/checkLibraryDoc.tcl:
+ Moved Tcl_EolTranslation enum declaration from generic/tcl.h to
+ generic/tclInt.h (renamed to TclEolTranslation). It is not used
+ anywhere in Tcl's public interface.
+
+2002-01-14 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/GetIndex.3:
+ * doc/WrongNumArgs.3:
+ * generic/tcl.decls (Tcl_GetIndexFromObj, Tcl_GetIndexFromObjStruct,
+ (Tcl_WrongNumArgs):
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObj,Tcl_GetIndexFromObjStruct,
+ (Tcl_WrongNumArgs): Updated APIs in the file generic/tclIndexObj.c
+ according to the guidelines of TIP 27. [Patch 501491]
+ * generic/tclDecls.h: make genstubs
+
+2002-01-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/configure.in:
+ * win/configure: Regen.
+ * win/configure.in: Use ${libdir} instead of ${exec_prefix}/lib
+ to properly support the --libdir option to configure. [Bug 489370]
+
+2002-01-11 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * win/tclWinSerial.c (SerialSetOptionProc): Applied patch for [Bug
+ 500348] supplied by Rolf Schroedter <schroedter@users.sf.net>. The
+ function modified the contents of the the 'value' string and now does
+ not do this anymore. This is a followup to the change made on
+ 2001-12-17.
+
+2002-01-11 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: Removed -GD compiler option. It was intended for
+ future use, but MS is again changing the future at their whim. The
+ D4002 warning was harmless though, but someone using VC .NET logged it
+ as a concern. [Bug 501565]
+
+2002-01-11 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Burn Tcl build directory into tcltest executable
+ to avoid crashes caused by ld loading a previously installed version
+ of the tcl shared library. [Bug 218110]
+
+2002-01-10 Don Porter <dgp@users.sourceforge.net>,
+ Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * unix/tclLoadDld.c (TclpLoadFile): syntax error: unbalanced parens.
+ Kevin notes that it's far from clear that this file is ever included
+ in an actual build; Linux without dlopen appears to be a nonexistent
+ configuration.
+
+2002-01-08 Don Porter <dgp@users.sourceforge.net>,
+ Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * doc/StaticPkg.3 (Tcl_StaticPackage):
+ * generic/tcl.decls (Tcl_StaticPackage):
+ * generic/tclDecls.h (Tcl_StaticPackage):
+ * generic/tclInt.decls (TclGuessPackageName):
+ * generic/tclInt.h (TclGuessPackageName):
+ * generic/tclLoad.c (Tcl_StaticPackage):
+ * generic/tclLoadNone.c (TclGuessPackageName):
+ * mac/tclMacLoad.c (TclGuessPackageName):
+ * unix/tclLoadAout.c (TclGuessPackageName):
+ * unix/tclLoadDl.c (TclGuessPackageName):
+ * unix/tclLoadDld.c (TclGuessPackageName):
+ * unix/tclLoadDyld.c (TclGuessPackageName):
+ * unix/tclLoadNext.c (TclGuessPackageName):
+ * unix/tclLoadOSF.c (TclGuessPackageName):
+ * unix/tclLoadShl.c (TclGuessPackageName):
+ * win/tclWinLoad.c (TclGuessPackageName): Updated APIs in the files
+ */tcl*Load*.c according to the guidelines of TIP 27. [Patch 501096]
+
+2002-01-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTest.c (MainLoop):
+ * tests/main.test (Tcl_Main-1.{3,4,5,6}): Corrected some non-portable
+ tests from the new Tcl_Main changes. Thanks to Kevin Kenny.
+
+2002-01-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEvent.c (TclInExit):
+ * generic/tclIOUtil.c (SetFsPathFromAbsoluteNormalized,
+ (SetFsPathFromAny,Tcl_FSNewNativePath,DupFsPathInternalRep):
+ * generic/tclListObj.c (TclLsetList,TclLsetFlat): Added some type
+ casts to satisfy picky compilers.
+
+ * generic/tclMain.c: Bug fix: neglected the NULL case in
+ TclGetStartupScriptFileName(). Broke Tk/wish.
+
+2002-01-05 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Tcl_Main.3:
+ * generic/tclMain.c: Substantial rewrite and expanded documentation
+ of Tcl_Main to correct a number of bugs and flaws:
+
+ - Interactive Tcl_Main can now enter a main loop, exit that loop and
+ continue interactive operations. The loop may even exit in the
+ midst of interactive command typing without loss of the partial
+ command. [Bugs 486453, 474131]
+ - Tcl_Main now gracefully handles deletion of its master
+ interpreter.
+ - Interactive Tcl_Main can now operate with non-blocking stdin
+ - Interactive Tcl_Main can now detect EOF on stdin even in
+ mid-command. [Bug 491341]
+ - Added VFS-aware internal routines for managing the startup script
+ selection.
+ - Tcl variable 'tcl_interactive' is now linked to C variable 'tty'
+ so that one can disable/enable interactive prompts at the script
+ level when there is no startup script. This is meant for use by
+ the test suite.
+ - Consistent use of the Tcl libraries standard channels as returned
+ by Tcl_GetStdChannel(); as opposed to the channels named 'stdin',
+ 'stdout', and 'stderr' in the master interp, which can be
+ different or unavailable.
+ - Tcl_Main now calls Tcl_Exit() if evaluation of [exit] in the
+ master interpreter returns, assuring Tcl_Main does not return.
+ - Documented Tcl_Main's absence from public stub table
+ - Documented that Tcl_Main does not return.
+ - Documented Tcl variables set by Tcl_Main.
+ - All prompts are done from a single procedure, Prompt.
+ - Use of Tcl_Obj-enabled interfaces everywhere.
+
+ * generic/tclInt.decls (TclGetStartupScriptPath,
+ (TclSetStartupScriptPath): New internal VFS-aware routines for
+ managing the startup script of Tcl_Main.
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c: make genstubs
+
+ * generic/tclTest.c (TestsetmainloopCmd,TestexitmainloopCmd,
+ (Tcltest_Init,TestinterpdeleteCmd):
+ * tests/main.test (new): Added new file to test suite that thoroughly
+ tests generic/tclMain.c; added some new test commands for testing
+ Tcl_SetMainLoop().
+
+2002-01-04 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Alloc.3:
+ * doc/Concat.3:
+ * doc/CrtMathFnc.3:
+ * doc/Hash.3:
+ * doc/Interp.3:
+ * doc/LinkVar.3:
+ * doc/ObjectType.3:
+ * doc/PkgRequire.3:
+ * doc/Preserve.3:
+ * doc/SetResult.3:
+ * doc/SplitList.3:
+ * doc/SplitPath.3:
+ * doc/TCL_MEM_DEBUG.3: Updated documentation to describe the ckalloc,
+ ckfree, ckrealloc, attemptckalloc, and attemptckrealloc macros, and
+ to accurately describe when and how they are used. [Bug 497459]
+
+ * generic/tclThreadJoin.c (TclRememberJoinableThread,TclJoinThread):
+ Replaced Tcl_Alloc and Tcl_Free calls with ckalloc and ckfree so that
+ memory debugging is supported.
+
+2002-01-04 Daniel Steffen <das@users.sourceforge.net>
+
+ * mac/tclMacTime.c (TclpGetTZName): fix for daylight savings TZName bug
+
+2002-01-03 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * generic/tclIOUtil.c: Updated some old uses of "fileName" to
+ new VFS terminology, "pathPtr".
+
+2002-01-03 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/basic.test (basic-39.4): Greatly simplified test while
+ still leaving it so that it crashes when run without the fix to
+ the [foreach] implementation.
+ * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Stopped [Bug 494348] from
+ happening by not trying to be so clever with cacheing; if nothing
+ untoward is happening anyway, the less efficient technique will
+ only add a few instruction cycles (one function call and a few
+ derefs/assigns per list per iteration, with no change in the
+ number of tests) and if something odd *is* going on, the code is
+ now far more robust.
+
+ * tests/basic.test (basic-39.4): Reproducable script from [Bug 494348]
+
+2002-01-02 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/util.test (Wrapper_Tcl_StringMatch,util-5.*): Rewrote so the
+ test is performed with the right internal function since [string
+ match] no longer uses Tcl_StringCaseMatch internally.
+
+ * tests/string.test (string-11.51):
+ * generic/tclUtf.c (Tcl_UniCharCaseMatch):
+ * generic/tclUtil.c (Tcl_StringCaseMatch): Fault with matching
+ case-insensitive non-ASCII patterns containing upper case characters.
+ [Bug 233257]
+
+ ******************************************************************
+ *** CHANGELOG ENTRIES FOR 2001 IN "ChangeLog.2001" ***
+ *** CHANGELOG ENTRIES FOR 2000 IN "ChangeLog.2000" ***
+ *** CHANGELOG ENTRIES FOR 1999 AND EARLIER IN "ChangeLog.1999" ***
+ ******************************************************************
diff --git a/ChangeLog.2003 b/ChangeLog.2003
new file mode 100644
index 0000000..c586ba9
--- /dev/null
+++ b/ChangeLog.2003
@@ -0,0 +1,3349 @@
+2003-12-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWin32Dll.c (DllMain): Add HAVE_NO_SEH blocks in place of
+ __try and __except statements to support gcc builds. This is needed
+ after David's changes on 2003-12-21. [Patch 858493]
+
+2003-12-23 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclAlloc.c: All uses of 'panic' (the macro) changed to
+ * generic/tclBasic.c: 'Tcl_Panic' (the function). The #define of
+ * generic/tclBinary.c: panic in tcl.h clearly states it is deprecated
+ * generic/tclCkalloc.c: in the comments. [Patch 865264]
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclCompCmds.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclConfig.c:
+ * generic/tclDictObj.c:
+ * generic/tclEncoding.c:
+ * generic/tclEvent.c:
+ * generic/tclExecute.c:
+ * generic/tclHash.c:
+ * generic/tclInterp.c:
+ * generic/tclIO.c:
+ * generic/tclIOCmd.c:
+ * generic/tclIOUtil.c:
+ * generic/tclListObj.c:
+ * generic/tclLiteral.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclParse.c:
+ * generic/tclPathObj.c:
+ * generic/tclPkg.c:
+ * generic/tclPreserve.c:
+ * generic/tclProc.c:
+ * generic/tclStringObj.c:
+ * generic/tclTest.c:
+ * generic/tclThreadAlloc.c:
+ * generic/tclTimer.c:
+ * generic/tclTrace.c:
+ * generic/tclVar.c:
+ * mac/tclMacChan.c:
+ * mac/tclMacOSA.c:
+ * mac/tclMacResource.c:
+ * mac/tclMacSock.c
+ * mac/tclMacThrd.c:
+ * unix/tclUnixChan.c:
+ * unix/tclUnixNotfy.c:
+ * unix/tclUnixThrd.c:
+ * unix/tclXtNotify.c:
+ * win/tclWin32Dll.c:
+ * win/tclWinChan.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinNotify.c:
+ * win/tclWinPipe.c:
+ * win/tclWinSock.c:
+ * win/tclWinThrd.c:
+
+ * generic/tclInt.h: Deprecated use of Tcl_Ckalloc changed to
+ Tcl_Alloc in the TclAllocObjStorage macro.
+
+2003-12-22 David Gravereaux <davygrvy@pobox.com>
+
+ * win/nmakehlp.c:
+ * win/rules.vc: New feature for extensions that use rules.vc. Now
+ reads header files for version strings. No more hard coding
+ TCL_VERSION = 8.5 and having to edit it when you swap cores.
+
+ * win/makefile.vc: VERSION macro now set by reading tcl.h for it.
+
+ * generic/tcl.h: Removed note that makefile.vc needs to have a version
+ number changed.
+
+2003-12-21 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWin32Dll.c: Structured Exception Handling added around
+ Tcl_Finalize called from DllMain's DLL_PROCESS_DETACH. We can't be
+ 100% assured that Tcl is being unloaded by the OS in a stable
+ condition and we need to protect the exit handlers should the stack be
+ in a hosed state. AT&T style assembly for SEH under MinGW has not been
+ added yet. This is a first part change for [Patch 858493]
+
+2003-12-17 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclBinary.c (DeleteScanNumberCache): fixed crashing bug when
+ numeric scan-value cache contains NULL value.
+
+2003-12-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdAH.c:
+ * unix/tclUnixFile.c:
+ * win/tclWinFCmd.c:
+ * tests/fCmd.test:
+ * tests/fileSystem.test:
+ * doc/file.n: final fix to support for relative links and its
+ implications on normalization and other parts of the filesystem code.
+ Fixes [Bug 859251] and some Windows problems with recursive file
+ delete/copy and symbolic links.
+
+2003-12-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c:
+ * tests/fileSystem.test: fix and tests for [Bug 860402] in new file
+ normalization code.
+
+2003-12-17 Zoran Vasiljevic <zv@archiware.com>
+
+ * generic/tclIOUtil.c: fixed 2 memory (object) leaks. [Bug 839519]
+
+ * generic/tclPathObj.c: fixed Tcl_FSGetTranslatedPath to always return
+ properly refcounted path object. [Bug 861515]
+
+2003-12-16 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fCmd.test: marking fCmd-9.14.2, as nonPortable, since on
+ Solaris one can change the name of the current directory with 'file
+ rename'.
+ * doc/FileSystem.3: clarified documentation on ownership of return
+ objects/strings of some Tcl_FS* calls.
+
+2003-12-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclThreadAlloc.c (binfo): Made variable file-local.
+
+2003-12-15 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tcl.rc:
+ * win/tclsh.rc: Slight modification to the STRINGIFY macro to support
+ Borland's rc tool.
+
+ * win/tclWinFile.c (TclpUtime) : utimbuf struct not a problem with
+ Borland.
+
+ * win/tclWinTime.c (TclpGetDate) : Borland's localtime() has a slight
+ behavioral difference.
+
+ From Helmut Giese <hgiese@ratiosoft.com> [Patch 758097].
+
+2003-12-14 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclInt.decls: commented-out entry for TclpCheckStackSpace,
+ removing it from the Stubs table. It's already declared in tclInt.h
+ and labeled as a function that is not to be exported. Regened tables.
+
+2003-12-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): TIP#75 Implementation
+ * tests/switch.test: Can now get submatch information when using
+ * doc/switch.n: -regexp matching in [switch].
+
+2003-12-14 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: complete rewrite of generic file normalization
+ code to cope with links followed by '..'. [Bug 849514], and parts of
+ [Bug 859251]
+
+2003-12-12 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinChan.c: Win32's SetFilePointer() takes LONGs not DWORDs (a
+ signed/unsigned mismatch). Redid local vars to avoid all casting
+ except where truly required.
+
+2003-12-12 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdAH.c: fix to normalization of non-existent user name
+ ('file normalize ~nobody') [Bug 858937]
+ * doc/file.n: clarify behaviour of 'file link' when the target is not
+ an absolute path.
+ * doc/filename.n: correct documentation to say that Windows Tcl does
+ handle '~user', for recent Windows releases, and clarified distinction
+ between MacOS 'classic' and MacOS X.
+ * doc/glob.n: clarification of glob's behaviour when returning
+ filenames starting with a '~'.
+
+ * tests/fileSystem.test:
+ * tests/fileName.test: new tests added for the normalization problem
+ above and other recentlt reported issues.
+
+ * win/tclWinFile.c: corrected unclear comments
+
+ * unix/tclUnixFile.c: allow creation of relative links. [Bug 833713]
+
+2003-12-11 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinSock.c (SocketThreadExitHandler) : added a TerminateThread
+ fallback just in case the socket handler thread is really in a paused
+ state. This can happen when Tcl is being unloaded by the OS from an
+ exception handler. See MSDN docs on DllMain, it states this behavior.
+
+2003-12-09 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure:
+ * unix/tcl.m4: updated OpenBSD build configuration based on
+ [Patch #775246] (cassoff)
+
+2003-12-09 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixPort.h: #ifdef'd out declarations of errno which are
+ * tools/man2tcl.c: known to cause problems with recent glibc.
+ [Bug 852369]
+
+2003-12-09 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinFile.c: fix to NT file permissions code [Bug 855923]
+ * tests/winFile.test: added tests for NT file permissions - patch and
+ test scripts supplied by Benny.
+
+ * tests/winFCmd.test: fixed one test for when not running in C:/
+
+2003-12-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclBinary.c (DeleteScanNumberCache, ScanNumber): Made the
+ numeric scan-value cache have proper references to the objects within
+ it so strange patterns of writes won't cause references to freed
+ objects. Thanks to Paul Obermeir for the report. [Bug 851747]
+
+2003-12-01 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/lset.n: fix typo [Bug 852224]
+
+2003-11-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c: Corrected faulty check for trailing white
+ space in {expand} parsing. Thanks Andreas Leitgeb. [Bug 848262]
+ * tests/parse.test: New tests for the bug.
+
+2003-11-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix to [Bug 845778] - Infinite recursion on
+ [cd] (Windows only bug), for which new tests have just been added.
+
+2003-11-21 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/winFCmd.test (winFCmd-16.10,11): Merged new tests from
+ core-8-4-branch.
+
+2003-11-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: fix flag bit collision between LOOKUP_FOR_UPVAR
+ and TCL_PARSE_PART1 (deprecated) [Bug 835020]
+
+2003-11-19 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/compile.test (compile-16.22.0): Improved test for the recent
+ fix for Bug 845412.
+
+2003-11-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompile.c (TclCompileScript): Added a guard for the
+ expansion code so that long non-expanding commands don't get expansion
+ infrastructure inserted in them, especially when that infrastructure
+ isn't initialised. [Bug 845412]
+
+2003-11-18 David Gravereaux <davygrvy@pobox.com>
+
+ * contrib/djgpp/Makefile: Changes from Victor Wagner
+ * contrib/djgpp/langinfo.c (new): <vitus@45.free.net> for better
+ * contrib/djgpp/langinfo.h (new): DJGPP support.
+ * unix/tclUnixInit.c: .
+ * unix/tclUnixChan.c: .
+ * unix/tclUnixFCmd.c: .
+
+2003-11-17 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/reg.test: Added tests for [Bugs 230589, 504785, 505048, 840258]
+ recently fixed by 2003-11-15 commit to regcomp.c by Pavel Goran. His
+ notes on the fix: This bug results from an error in code that splits
+ states into "progress" and "no-progress" ones. This error causes an
+ interesting situation with the pre-collected single-linked list of
+ states to be splitted: many items were added to the list, but only
+ several of them are accessible from the list beginning, since the
+ "tmp" member of struct state (which is used here to hold a pointer to
+ the next list item) gets overwritten, which results in a "looped"
+ chain. As a result, not all of states are splitted, and one state is
+ splitted two times, causing incorrect "no-progress" flag values.
+
+2003-11-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Make sure that
+ Tcl_AsyncInvoke is called regularly when processing bytecodes.
+ * generic/tclTest.c (AsyncThreadProc, TestasyncCmd): Extended testing
+ harness to send an asynchronous marking without relying on UNIX
+ signals.
+ * tests/async.test (async-4.*): Tests to check that async events are
+ handled by the bytecode core. [Bug 746722]
+
+2003-11-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclTest.c (TestHashSystemHashCmd): Removed 'const' modifier
+ from hash type structure; it should be const and the hash code assumes
+ it behaves like const, but that's not how the API is defined. Like
+ this, we are following in the same footsteps as Tcl_RegisterObjType()
+ which has the same conditions on its argument. Stops VC++5.2 warning.
+ [Bug 842511]
+
+2003-11-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclHash.c (Tcl_DeleteHashTable,Tcl_HashStats,RebuildTable):
+ * generic/tclTest.c (TestHashSystemHashCmd): TIP#138 implementation,
+ * tests/misc.test: plus a new chunk of stuff to test the hash
+ functions more thoroughly in the test suite.
+ [Patch 731356, modified]
+
+ * doc/Tcl.n: Updated Tcl version number and changebars.
+
+2003-11-14 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/ParseCmd.3: Implementation of TIP 157. Adds recognition
+ * doc/Tcl.n: of the new leading {expand} syntax on words.
+ * generic/tcl.h: Parses such words as the new Tcl_Token type
+ * generic/tclBasic.c: TCL_TOKEN_EXPAND_WORD. Updated Tcl_EvalEx and
+ * generic/tclCompile.c: the bytecode compiler/execution engine to
+ * generic/tclCompile.h: recognize the new token type. New opcodes
+ * generic/tclExecute.c: INST_LIST_VERIFY and INST_INVOKE_EXP and a new
+ * generic/tclParse.c: operand type OPERAND_ULIST1 are defined. Docs
+ * generic/tclTest.c: and tests are included.
+ * tests/basic.test:
+ * tests/compile.test:
+ * tests/parse.test:
+
+ * library/auto.tcl: Replaced several [eval]s used to perform
+ * library/package.tcl: argument expansion with the new syntax. In the
+ * library/safe.tcl: test files lindex.test and lset.test, replaced
+ * tests/cmdInfo.test: use of [eval] to force direct string
+ * tests/encoding.test: evaluation with use of [testevalex] which more
+ * tests/execute.test: directly and robustly serves the same purpose.
+ * tests/fCmd.test:
+ * tests/http.test:
+ * tests/init.test:
+ * tests/interp.test:
+ * tests/io.test:
+ * tests/ioUtil.test:
+ * tests/iogt.test:
+ * tests/lindex.test:
+ * tests/lset.test:
+ * tests/namespace-old.test:
+ * tests/namespace.test:
+ * tests/pkg.test:
+ * tests/pkgMkIndex.test:
+ * tests/proc.test:
+ * tests/reg.test:
+ * tests/trace.test:
+ * tests/upvar.test:
+ * tests/winConsole.test:
+ * tests/winFCmd.test:
+
+2003-11-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/cmdMZ.test (cmdMZ-1.4): change to nonPortable as more systems
+ are using permissions caching, and this isn't really a Tcl controlled
+ issue.
+
+2003-11-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure:
+ * unix/tcl.m4: improve AIX --enable-64bit handling
+ remove -D__NO_STRING_INLINES -D__NO_MATH_INLINES from CFLAGS_OPTIMIZE
+ on Linux. Make default opt -O2 (was -O).
+
+2003-11-11 David Gravereaux <davygrvy@pobox.com>
+
+ * contrib/djgpp/Makefile: Suggested changes from vitus@45.free.net
+ (Victor Wagner)
+
+ * unix/tclUnixPort.h: added socklen_t typedef for DJGPP
+
+2003-11-10 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixInit.c (TclpInitLibraryPath):
+ * win/tclWinInit.c (TclpInitLibraryPath): Fix for [Bug 832657]
+ that should not run afoul of startup constraints.
+
+ * library/dde/pkgIndex.tcl: Added safeguards so that registry and
+ * library/reg/pkgIndex.tcl: dde packages are not offered on
+ * win/tclWinDde.c: non-Windows platforms. Bumped to
+ * win/tclWinReg.c: registry 1.1.3 and dde 1.3.
+ * win/Makefile.in:
+ * win/configure.in:
+ * win/makefile.bc:
+ * win/makefile.vc:
+
+ * win/configure: autoconf (2.57)
+
+2003-11-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/cmdIL.test: Stopped cmdIL-5.5 from stomping over the test
+ command, and updated the tests to use some tcltest2 features in
+ relation to cleanup. [Bug 838384]
+
+2003-11-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdAH.c:
+ * tests/fCmd.test: fix to misleading error message in 'file link'.
+ [Bug 836208]
+
+2003-11-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to compiler warning/error with some
+ compilers. [Bug 835918]
+
+2003-11-07 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: optimized builds define NDEBUG to turn off
+ ThreadAlloc range checking.
+
+2003-11-05 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test (unixInit-2.10): New test to expose [Bug 832657]
+ failure of TclpInitLibraryPath() to properly handle .. in the path
+ of the executable.
+
+2003-11-04 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: added 'test' target.
+
+2003-11-03 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c
+ * generic/tclInt.h: added comments and re-arranged code to clarify
+ distinction between Tcl_LoadHandle, ClientData for 'load'ed code, and
+ point out limitations of the design introduced with Tcl 8.4.
+
+ * unix/tclUnixFile.c: fix to memory leak
+
+ * generic/tclCmdIL.c: removed warning on Windows.
+
+2003-11-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LrepeatObjCmd): Check for sensible list
+ lengths and allow for soft failure of the memory subsystem in the
+ [lconcat] command [Bug 829027]. Uses direct list creation to avoid
+ extra copies when working near the limit of available memory. Also
+ reorganized to encourage optimizing compilers to optimize heavily.
+ * generic/tclListObj.c (TclNewListObjDirect): New list constructor
+ that does not copy the array of objects. Useful for creating
+ potentially very large lists or where you are about to throw away the
+ array argument which is being used in its entirety.
+
+2003-10-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (NEXT_INST macros): replaced macro variable
+ "result" by "resultHandling" to avoid confusion.
+
+2003-10-23 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixChan.c (Tcl_MakeFileChannel): Applied [Patch 813606]
+ fixing [Bug 813087]. Detection of sockets was off for Mac OS X which
+ implements pipes as local sockets. The new code ensures that only IP
+ sockets are detected as such.
+
+ * win/tclWinSock.c (TcpWatchProc): Watch for FD_CLOSE too when asked
+ for writable events by the generic layer.
+ (SocketEventProc): Generate a writable event too when a close is
+ detected.
+
+ Together the changes fix [Bug 599468].
+
+2003-10-23 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/resource.test:
+ * mac/tclMacResource.c: fix to resource freeing problem in 'resource'
+ command reported by Bernard Desgraupes.
+
+ * doc/FileSystem.3: updated documentation for 'glob' fix on 2003-10-13
+ below
+
+2003-10-22 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_FileObjCmd): Changed FILE_ prefix to FCMD_
+ to stop symbol/#def clashes on Cygwin/Mingw32 on NT. [Bug 822528]
+
+2003-10-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * tools/tcltk-man2html.tcl: fixed incorrect html generated for
+ .IP/.TP lists, now use <DL><DT>...<DD>...<P><DT>...<DD>...</DL>
+ instead of illegal <DL><P><DT>...<DD>...<P><DT>...<DD>...</DL>.
+ Added skipping of directives directly after .TP to avoid them being
+ used as item descriptions, e.g. .TP\n.VS in clock.n.
+
+2003-10-21 Andreas Kupries <andreask@pliers.activestate.com>
+
+ * win/tclWinPipe.c (BuildCommandLine): Applied the patch coming with
+ [Bug 805605] to the code, fixing the incorrect use of ispace noted by
+ Ronald Dauster <ronaldd@users.sourceforge.net>.
+
+2003-10-20 Kevin B. Kenny <kennykb@users.sourceforge.net>
+
+ * doc/msgcat.n:
+ * library/msgcat/msgcat.tcl (mclocale,mcload):
+ * tools/tcl.wse.in:
+ * unix/Makefile.in: Implementation of TIP#156, add a "root locale"
+ * win/makefile.bc: to the 'msgcat' package. Advanced msgcat
+ * win/Makefile.in: version number to 1.4
+ * win/Makefile.vc:
+
+2003-10-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdIL.c (SortInfo,etc): Reorganized so that SortInfo
+ carries an array of integer indices instead of a Tcl list. This nips
+ shimmering problems in the bud and simplifies SelectObjFromSublist at
+ the cost of making setup slightly more complex. [Bug 823768]
+
+2003-10-14 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c (sigHandler): Punt gracefully if exitToken has
+ already been destroyed.
+
+2003-10-14 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c:
+ * tests/regexp.test: fix to [Bug 823524] in regsub; added three new
+ tests.
+
+2003-10-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclAppendObjToErrorInfo): New internal routine
+ that appends a Tcl_Obj to the errorInfo, saving the caller the trouble
+ of extracting the string rep.
+
+ * generic/tclStringObj.c (TclAppendLimitedToObj): New internal
+ routine that supports truncated appends with optional ellipsis marking.
+ This single routine supports UTF-8-safe truncated appends needed in
+ several places throughout the Tcl source code, mostly for error and
+ stack messages. Clean fix for [Bug 760872].
+
+ * generic/tclInt.h: Declarations for new internal routines.
+
+ * generic/tclCmdMZ.c: Updated callers to use the new routines.
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclExecute.c:
+ * generic/tclIOUtil.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclParseExpr.c:
+ * generic/tclProc.c:
+ * generic/tclStringObj.c:
+ * mac/tclMacResource.c:
+
+ * library/init.tcl: Updated ::errorInfo cleanup in [unknown] to
+ reflect slight modifications to Tcl_LogCommandInfo(). Corrects failing
+ init-4.* tests.
+
+2003-10-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ TIP#127 IMPLEMENTATION FROM JOE MICHAEL SCHLENKER
+
+ * generic/tclCmdIL.c (SelectObjFromSublist): Element selection engine.
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd, Tcl_LsortObjCmd):
+ * tests/lsearch.test: Set up and use of element selection engine,
+ * tests/cmdIL.test: plus tests and documentation.
+ * doc/lsearch.n: Based on [Patch 693836]
+ * doc/lsort.n:
+
+2003-10-13 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tcl.h:
+ * generic/tclFileName.c:
+ * generic/tclIOUtil.c:
+ * generic/tclPathObj.c:
+ * generic/tclTest.c:
+ * mac/tclMacFile.c:
+ * tests/fileName.test: better tests for [Bug 813273]
+ * unix/tclUnixFCmd.c:
+ * unix/tclUnixFile.c:
+ * win/tclWin32Dll.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclFileInt.h:
+
+ Fixed [Bug 800106] in which 'glob' was incapable of merging the
+ results of a directory listing (real or virtual) and any virtual
+ filesystem mountpoints in that directory (the latter were ignored).
+ This meant boundaries between different filesystems were not seamless
+ (e.g. 'glob */*' across a filesystem boundary was wrong). Added new
+ entry to Tcl_GlobTypeData in a totally backwards compatible way. To
+ allow listing of mounts, registered filesystems must support the
+ 'TCL_GLOB_TYPE_MOUNT' flag. If this is not supported (e.g. in tclvfs
+ 1.2) then mounts will simply not be listed for that filesystem.
+
+ Fixed [Bug 749876] 'file writable/readable/etc' (NativeAccess) using
+ correct permission checking code for Windows NT/2000/XP where more
+ complex user-based security/access priveleges are available,
+ particularly on shared volumes. The performance impact of this extra
+ checking will need further investigation. Note: Win 95,98,ME have no
+ support for this.
+
+ Also made better use of normalized rather than translated paths in the
+ platform specific code.
+
+2003-10-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixTest.c (TestalarmCmd): don't bother checking return
+ value of alarm. [Bug #664755] (english)
+
+2003-10-09 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Applied patches for bug #801467 by Joe Mistachkin
+ * win/tclAppInit.c: to fix incompatible TCL_MEM_DEBUG handling in
+ * generic/tclObj.c: Win32 VC builds.
+
+2003-10-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Save and restore the iPtr->flag bits that
+ control the state of errorCode and errorInfo management when calling
+ "leave" execution traces, so that all error information of the traced
+ command is still available whether traced or not. [Bug 760947]
+ Thanks to Yahalom Emet.
+
+2003-10-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclTest.c (TestNumUtfCharsCmd): Command to allow finer
+ access to Tcl_NumUtfChars for testing.
+ * generic/tclUtf.c (Tcl_NumUtfChars): Corrected string length
+ determining when the length parameter is negative; the terminator is a
+ zero byte, not (necessarily) a \u0000 character. [Bug 769812]
+
+2003-10-07 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/cmdAH.test:
+ * tests/exec.test: Corrected temporary file management
+ * tests/fileSystem.test: issues uncovered by -debug 1 test
+ * tests/io.test: operations. Also backported some
+ * tests/ioCmd.test: other fixes from the HEAD.
+ * tests/main.test:
+ * tests/pid.test: [Bugs 675605, 675655, 675659]
+ * tests/socket.test:
+ * tests/source.test:
+
+ * tests/fCmd.test: Run tests with the [temporaryDirectory] as the
+ current directory, so that tests can depend on ability to write files.
+ [Bug 575837]
+
+ * doc/OpenFileChnl.3: Updated Tcl_Tell and Tcl_Seek documentation to
+ reflect that they now return Tcl_WideInt (TIP 72). [Bug 787537]
+
+ * tests/io.test: Corrected several tests that failed when paths
+ * tests/ioCmd.test: included regexp-special chars. [Bug 775394]
+
+2003-10-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/configure:
+ * win/tcl.m4: removed incorrect checks for existence of optimization.
+ TCL_CFG_OPTIMIZED is now defined whenever the user does not build with
+ --enable-symbols.
+
+2003-10-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/regexp.test: Matched [makeFile] with [removeFile].
+ * tests/regexpComp.test: [Bug 675652]
+
+ * tests/fCmd.test (fCmd-8.2): Test only that tilde-substitution
+ happens, not for any particular result. [Bug 685991]
+
+ * unix/tcl.m4 (SC_PATH_TCLCONFIG): Corrected search path so that
+ alpha and beta releases of Tcl are not favored. [Bug 608698]
+
+ * tests/reg.test: Corrected duplicate test names.
+ * tests/resource.test: [Bugs 710370, 710358]
+ * tests/dict.test:
+
+ * tests/dict.test: Updated [package require tcltest] lines to
+ * tests/fileSystem.test: indiciate that these test files
+ * tests/lrepeat.test: use features of tcltest 2. [Bug 706114]
+ * tests/notify.test:
+ * tests/parseExpr.test:
+ * tests/unixNotfy.test:
+ * tests/winDde.test:
+
+2003-10-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TEBC):
+ * tests/execute.test (execute-8.2): fix for [Bug 816641] - faulty
+ execution and catch stack management.
+
+2003-10-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Fixed error in ref count management of command
+ * generic/tclCmdMZ.c: and execution traces that caused access to
+ freed memory in trace-32.1. [Bug 811483]
+
+2003-10-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c: Corrected comingling of introspection results of
+ [trace info command] and [trace info execution]. [Bug 807243]
+ Thanks to Mark Saye.
+
+2003-10-01 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: fixed redo prebinding bug when DESTDIR="".
+ * mac/tclMacResource.c: fixed possible NULL dereference (bdesgraupes).
+
+2003-09-29 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c:
+ * tests/fileName.test: fix to inconsistent handling of backslash
+ path separators on Windows in 'file join' [Bug 813273]
+
+2003-09-29 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclPathObj.c (TclNativePathInFilesystem,TclFSGetPathType):
+ * generic/tclIOUtil.c (TclNativeDupInternalRep,TclGetPathType): Rename
+ to make sure function names won't interfere with other non-Tcl code
+ (reported by George Staplin)
+
+ TIP#121 IMPLEMENTATION FROM JOE MISTACHKIN
+
+ * generic/tclEvent.c (Tcl_SetExitProc,Tcl_Exit): Implementation of
+ application exit handler scheme.
+ * generic/tcl.decls (Tcl_SetExitProc): Public declaration.
+ * doc/Exit.3: Documentation of new API function.
+
+ TIP#112 IMPLEMENTATION
+
+ * generic/tclNamesp.c: Core of implementation.
+ * generic/tclInt.h (Namespace,TclInvalidateNsCmdLookup): Add command
+ list epoch counter and list of ensembles to namespace structure, and
+ define a macro to ease update of the epoch counter.
+ * generic/tclBasic.c (Tcl_CreateObjCommand,etc.): Update epoch counter
+ when list of commands in a namespace changes.
+ * generic/tclObj.c (TclInitObjSubsystem): Register ensemble subcommand
+ type.
+ * tests/namespace.test (42.1-47.6): Tests.
+ * doc/namespace.n: Documentation.
+
+ * library/http/http.tcl (geturl): Correctly check the type of
+ boolean-valued options. [Bug 811170]
+
+ * unix/tcl.m4 (SC_ENABLE_FRAMEWORK): Added note to make it clearer
+ that this is an OSX feature, not a general Unix feature. [Bug 619440]
+
+2003-09-28 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c: The windows port of expect can call
+ TclWinAddProcess before any of the other pipe functions. Added a
+ missing PipeInit() call to make sure the initialization happens.
+
+2003-09-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: ensure SYMROOT exists if OBJROOT is overridden on
+ command line. Replaced explict use of /usr/bin by ${BINDIR}.
+
+2003-09-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * library/package.tcl (tcl::MacPkgUnknown, tcl::MacOSXPkgUnknown):
+ Minor performance tweaks to reduce the number of [file] invocations.
+ Meant to improve startup times, at least a little bit. (The generic
+ equivalent patch was applied on 2003-02-21).
+
+2003-09-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * trace.test: removed 'knownBug' from a test which doesn't illustrate
+ a bug, just a bad test.
+
+2003-09-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c:
+ * generic/tclInt.h: changed the evaluation-stack addressing mode, from
+ array-style to pointer-style; the catch stack and evaluation stack are
+ now contiguous in memory. [Patch 457449]
+
+2003-09-23 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/trace.test (trace-31,32-*): Added tests for [Bug 807243] and
+ [Bug 811483].
+
+ * library/init.tcl (auto_load, auto_import): Expanded Eric Melski's
+ 2000-01-28 fix for [Bug 218871] to all potentially troubled uses of
+ [info commands] on input data, where glob-special characters could
+ cause problems.
+
+2003-09-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/expr.test (expr-23.4): Prevented accidental wrapping round of
+ exponential operation; it isn't portable, and not what I intended to
+ test either. [Bug 808244]
+
+2003-09-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: adding (DE)CACHE_STACK_INFO() pairs to protect
+ all calls that may cause traces on ::errorInfo or ::errorCode to
+ corrupt the stack. [Bug 804681]
+
+2003-09-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tclPathObj.c: fix to test-suite problem introduced by the bug fix
+ below. No problem in ordinary code, just test suite code which
+ manually adjusts tclPlatform. [Bug 808247]
+
+2003-09-16 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/filename.n: documentation of Windows-specific feature as
+ discussed in [Bug 541989]
+ * generic/tclPathObj.c: fix for normalization of volume-relative paths
+ [Bug 767834]
+ * tests/winFCmd.test: new tests for both of the above.
+ * tests/cmdAH.test: fix for AFS problem in test suite [Bug 748960]
+
+2003-09-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ TIP#123 IMPLEMENTATION BASED ON WORK BY ARJEN MARKUS
+
+ * generic/tclCompile.h (INST_EXPON): Implementation of
+ * generic/tclCompile.c (tclInstructionTable): exponential operator.
+ * generic/tclCompExpr.c (operatorTable):
+ * generic/tclParseExpr.c (ParseExponentialExpr, GetLexeme):
+ * generic/tclExecute.c (TclExecuteByteCode, ExponWide, ExponLong):
+ (IllegalExprOperandType):
+ * tests/expr.test:
+ * tests/compExpr-old.test:
+ * doc/expr.n:
+
+2003-09-10 Don Porter <dgp@users.sourceforge.net>
+
+ * library/opt/optparse.tcl: Latest revisions caused [OptGuessType]
+ to guess "int" instead of "string" for empty strings. Missed the
+ required "-strict" option to [string is]. Thanks to Revar Desmera.
+ [Bug 803968]
+
+2003-09-08 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinLoad.c (TclpDlopen): Changed the error message for
+ ERROR_PROC_NOT_FOUND to be a bit more helpful in giving us clues.
+ "can't find specified procedure" means a function in the import table,
+ for implicit loading, couldn't be resolved and that's why the load
+ failed.
+
+2003-09-04 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Tcl_Main.3:
+ * doc/FileSystem.3: Implementation of
+ * doc/source.n: TIPs 137/151. Adds a
+ * doc/tclsh.1: -encoding option to
+ * generic/tcl.decls: the [source] command
+ * generic/tclCmdMZ.c (Tcl_SourceObjCmd): and a new C routine,
+ * generic/tclIOUtil.c (Tcl_FSEvalFileEx): Tcl_FSEvalFileEx(),
+ * generic/tclMain.c (Tcl_Main): that provides C access
+ * mac/tclMacResource.c (Tcl_MacSourceObjCmd): to the same function.
+ * tests/cmdMZ.test: Also adds command line
+ * tests/main.test: option handling in Tcl_Main() so that tclsh
+ * tests/source.test: and other apps built on Tcl_Main() respect a
+ -encoding command line option before a script filename. Docs and tests
+ updated as well. [Patch 742683]
+ This is a ***POTENTIAL INCOMPATIBILITY*** only for those C programs
+ that embed Tcl, build on Tcl_Main(), and make use of Tcl_Main's former
+ ability to pass a leading "-encoding" option to interactive shell
+ operations.
+
+ * generic/tclInt.decls: Added internal stub
+ * generic/tclMain.c (Tcl*StartupScript*): table entries for two
+ new functions Tcl_SetStartupScript() and Tcl_GetStartupScript() that
+ set/get the path and encoding for the startup script to be evaluated
+ by either Tcl_Main() or Tk_Main(). Given public names in anticipation
+ of their exposure by a followup TIP.
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+2003-09-04 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/SplitList.3: Implementation of TIP 148. Fixes [Bug 489537].
+ * generic/tcl.h: Updated Tcl_ConvertCountedElement() to quote
+ * generic/tclUtil.c: the leading "#" character of all list elements
+ unless the TCL_DONT_QUOTE_HASH flag is passed in.
+
+ * generic/tclDictObj.c: Updated Tcl_ConvertCountedElement() callers
+ * generic/tclListObj.c: to pass in the TCL_DONT_QUOTE_HASH flags
+ * generic/tclResult.c: when appropriate.
+
+2003-08-31 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/return.n: Updated [return] docs to cover new TIP 90 features.
+
+ * doc/break.n: Added SEE ALSO references to return.n
+ * doc/continue.n:
+
+2003-09-01 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/Namespace.3: Basic documentation for the TIP#139 functions. This
+ will need improving, but the basic bits are there at least.
+
+2003-08-31 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/catch.n: Updated [catch] docs to cover new TIP 90 features.
+
+2003-08-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c: Corrected bug in TIP 90 implementation where
+ * tests/cmdMZ.test: the default -errorcode NONE value was not
+ copied into the return options dictionary. This correction modified
+ one test result.
+
+2003-08-27 David Gravereaux <davygrvy@pobox.com>
+
+ * compat/strftime.c (_fmt): Removed syst array intializer that
+ couldn't take variables within it under the watcom compiler:
+ 'Initializers must be constant'. I believe Borland has this strictness
+ as well. VC++ must be non-standard about this.
+
+ Changed Win32 platform #ifdef from 'WIN32' to '__WIN32__' as this is
+ the correct one to use across the Tcl sources. Even though we do force
+ it in tcl.h, the true parent one is __WIN32__.
+
+ Added missing CONST'ification usage to match prototype listed in
+ tclInt.decls.
+
+ * win/tclWinPort.h: Added a block for OpenWatcom adjustments that
+ fixes 1) the same issue Mo did for MinGW lack of missing LPFN_*
+ typedefs in their WINE derived <winsock2.h> and 2) The need to be
+ strict about how the char type needs to be signed by default.
+
+ * win/tclWinSock.c: Added OpenWatcom to the commentary about the
+ #ifdef HAVE_NO_LPFN_DECLS block.
+
+ * win/tclWinTime.c: Changed use of '_timezone' to 'timezone' as this
+ difference is already adjusted for in tclWinPort.h. Removed
+ unreferenced posixEpoch file-scope global.
+
+ * win/tclWinFile.c (WinReadLinkDirectory): Fix for 'Initializers must
+ be constant' with the driveSpec array using OpenWatcom.
+
+2003-08-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c: Corrected [Bug 411825] and other bugs in
+ TclNeedSpace() where non-breaking space (\u00A0) and backslash-escaped
+ spaces were handled incorrectly.
+ * tests/util.test: Added new tests util-8.[2-6].
+
+2003-08-26 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tcl.h: Added some support for the LCC-Win32 compiler.
+ Unfortunetly, this compiler has a bug in its preprocessor and can't
+ build Tcl even with this minor patch. Also added some support for the
+ OpenWatcom compiler. A new win/makefile.wc to follow soon.
+
+2003-08-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tools/genStubs.tcl (genStubs::makeDecl): A more subtle way of
+ generating stubbed declarations allows us to have declarations of a
+ function in multiple interfaces simultaneously.
+
+ * generic/tcl.decls: Duplicated some namespace declarations from
+ tclInt.decls here, as mandated by TIP #139. This is OK since the
+ 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
+ namespace code.
+
+2003-08-23 Zoran Vasiljevic <zoran@archiwrae.com>
+
+ * generic/tclIOUtil.c: merged fixes for thread-unsafe handling of
+ filesystem records [Bug 753315]. This also fixed the [Bug 788780]
+ * generic/tclPathObj.c: merged fixes for thread-unsafe handling of
+ filesystem records. [Bug 753315]
+
+ * generic/tclFileSystem.h: merged fixes for thread-unsafe handling of
+ filesystem records. [Bug 753315]
+
+2003-08-19 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinSerial.c (SerialErrorStr): Fixed a syntax error created in
+ the previous code cleanup.
+
+2003-08-19 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * win/tclWinSerial.c: Adjusted commenting and spacing usage to follow
+ the principles of the Style Guide better.
+
+2003-08-18 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/tcl.m4 (SC_ENABLE_SYMBOLS): Use test instead of -eq, which does
+ not work. [Bug 781109]
+
+2003-08-13 Chengye Mao <chengye.geo@yahoo.com>
+
+ * win/tclWinPipe.c: fixed a bug in BuildCommandLine. This bug built a
+ command line with a missing space between tclpipe.dll and the
+ following arguments. It caused error in Windows 98 when exec
+ command.com (e.g. dir). [Bug 789040]
+
+2003-08-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ TIP #136 IMPLEMENTATION from Simon Geard <simon.geard@ntlworld.com>
+ * generic/tclCmdIL.c (Tcl_LrepeatObjCmd): Adapted version of Simon's
+ * doc/lrepeat.n: patch, updated to the HEAD
+ * tests/lrepeat.test: and matching the core style.
+ * generic/tclBasic.c (buildIntCmds): Splice into core.
+ * generic/tclInt.h:
+ * doc/list.n: Cross-reference.
+
+2003-08-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinInit.c: recognize amd64 and ia32_on_win64 cpus.
+
+2003-08-06 Don Porter <dgp@users.sourceforge.net>
+
+ * library/msgcat/msgcat.tcl: Added escape so that non-Windows
+ * library/msgcat/pkgIndex.tcl: platforms do not try to use the
+ registry package. This can save a costly and pointless package search.
+ Bumped to 1.3.1. Thanks to Dave Bodenstab. [Bug 781609]
+
+2003-08-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_INVOKE, INST_EVAL, INST_PUSH_RESULT):
+ added a Tcl_ResetResult(interp) at each point where the interp's
+ result is pushed onto the stack, to avoid keeping an extra reference
+ that may cause costly Tcl_Obj duplication. Detected by Franco Violi,
+ analyzed by Peter Spjuth and Donal Fellows. [Bug 781585]
+
+2003-07-28 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * doc/Translate.3: better documentation of Tcl_TranslateFileName and
+ related functions. [Bug 775220]
+
+2003-07-24 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tcl.h: Revert change made on 2003-07-21 since it made the
+ sizeof(Tcl_Obj) different for regular vs mem debug builds.
+ * generic/tclInt.h: Define TclDecrRefCount in terms of
+ Tcl_DbDecrRefCount which removes one layer of inderection.
+ * generic/tclObj.c (TclDbInitNewObj, Tcl_DbIncrRefCount,
+ (Tcl_DbDecrRefCount, Tcl_DbIsShared): Define ThreadSpecificData that
+ contains a hashtable. The table is used to ensure that a Tcl_Obj is
+ only acted upon in the thread that allocated it. This checking code is
+ enabled only when mem debug and threads are enabled.
+
+2003-07-24 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/async.test: Added several tests that demonstrate [Bug
+ * tests/basic.test: 489537], Tcl's longstanding failure to
+ * tests/dict.test: properly quote any leading '#' character when
+ * tests/dstring.test: generating the string rep of a list so that
+ * tests/list.test: the comment-power of that character is hidden
+ * tests/parse.test: from any [eval], in order to satisfy the
+ * tests/util.test: documentation that [list] does [eval]-safe
+ quoting.
+
+2003-07-24 Reinhard Max <max@suse.de>
+
+ * library/package.tcl: Fixed a typo that broke pkg_mkIndex -verbose.
+ * tests/pkgMkIndex.test: Added a test for [pkg_mkIndex -verbose].
+
+ * ChangeLog.2002 (new file):
+ * ChangeLog: broke changes from 2002 into ChangeLog.2002 to reduce
+ size of the main ChangeLog.
+
+2003-07-23 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: changes to html-tcl & html-tk targets for
+ compatibility with non-gnu makes.
+
+ * unix/Makefile.in: added macosx/README to dist target.
+
+2003-07-23 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinReg.c (OpenSubKey): Fixed bug 775976 which causes the
+ registry set command to fail when built with VC7.
+ * library/reg/pkgIndex.tcl: Incremented the version to 1.1.2.
+
+2003-07-21 Mo DeJong <mdejong@users.sourceforge.net>
+
+ Check that the thread incrementing or decrementing the ref count of a
+ Tcl_Obj is the thread that originally allocated the thread. This fail
+ fast behavior will catch programming errors that allow a single
+ Tcl_Obj to be accessed from multiple threads.
+
+ * generic/tcl.h (Tcl_Obj): Add allocThread member to Tcl_Obj. This
+ member records the thread id the Tcl_Obj was allocated. It is used to
+ check that any future ref count incr or decr is done from the same
+ thread that allocated the Tcl_Obj. This member is defined only when
+ threads and mem debug are enabled.
+ * generic/tclInt.h (TclNewObj, TclDbNewObj, TclDecrRefCount):
+ Define TclNewObj and TclDbNewObj using TclDbInitNewObj when mem debug
+ is enabled. This fixes a problem where TclNewObj calls did not work
+ the same as TclDbNewObj when mem debug was enabled.
+ * generic/tclObj.c (TclDbInitNewObj, Tcl_DbIncrRefCount,
+ (Tcl_DbDecrRefCount): Add new helper to init Tcl_Obj members when mem
+ debug is enabled. Init the allocThread member in TclDbInitNewObj and
+ check it in Tcl_DbIncrRefCount and Tcl_DbDecrRefCount to make sure a
+ Tcl_Obj allocated in one thread is not being acted upon in another
+ thread.
+
+2003-07-21 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * test/cmdAH.test: ensure certain tests run in local filesystem. [Bug
+ 748960]
+
+2003-07-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: added option to allow installing manpages in
+ addition to default html help.
+
+2003-07-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/Utf.3: Tightened up documentation of Tcl_UtfNext and Tcl_UtfPrev
+ to better match the behaviour. [Bug 769895]
+
+2003-07-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/http/pkgIndex.tcl: upped to http v2.4.4
+ * library/http/http.tcl: add support for user:pass info in URL.
+ * tests/http.test: [Bug 759888] (shiobara)
+
+2003-07-18 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Restored the [Eval] proc to replace
+ * library/tcltest/tcltest.tcl: the [::puts] command when either the
+ -output or -error option for [test] is in use, in order to capture
+ data written to the output or error channels for comparison against
+ what is expected. This is easier to document and agrees better with
+ most user expectations than the previous attempt to replace [puts]
+ only in the caller's namespace. Documentation made more precise on
+ the subject. [Bug 706359]
+
+ * doc/AddErrInfo.3: Improved consistency of documentation by
+ * doc/CrtTrace.3: using "null" everywhere to refer to the
+ * doc/Encoding.3: character '\0', and using "NULL" everywhere
+ * doc/Eval.3: to refer to the value of a pointer that points
+ * doc/GetIndex.3: to nowhere. Also dropped references to ASCII
+ * doc/Hash.3: that are no longer true, and standardized on
+ * doc/LinkVar.3: the hyphenated spelling of "null-terminated".
+ * doc/Macintosh.3:
+ * doc/OpenFileChnl.3:
+ * doc/SetVar.3:
+ * doc/StringObj.3:
+ * doc/Utf.3:
+
+ * doc/CrtSlave.3 (Tcl_MakeSafe): Removed warning about possible
+ deprecation (no TIP on that).
+
+2003-07-17 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixFCmd.c: fix for compilation errors on platforms where
+ configure detects non-functional chflags(). [Bug 748946]
+
+ * macosx/Makefile: Rewrote buildsystem for Mac OS X framework build
+ to be purely make driven; in order to become independent of Apple's
+ closed-source IDE and build tool. The changes are intended to be
+ transparent to the Makefile user, all existing make targets and cmd
+ line variable overrides should continue to work. Changed build to only
+ include tcl specific html help in Tcl.framework, the tk specific html
+ help is now included in Tk.framework. Added var to allow overriding of
+ tclsh used during html help building (Landon Fuller).
+
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * macosx/Tcl.pbproj/jingham.pbxuser: Changed to purely call through to
+ the make driven buildsystem; Tcl.framework is no longer assembled by
+ ProjectBuilder.
+ Set default SYMROOT in target options to simplify setting up PB
+ (manually setting common build folder for tcl & tk no longer needed).
+
+ * tools/tcltk-man2html.tcl: Added options to allow building only the
+ tcl or tk html help files; the default behaviour with none of the new
+ options is to build both, as before.
+
+ * unix/Makefile.in: Added targets for building only the tcl or tk help
+
+ * macosx/README (new): Tcl specific excerpts of tk/macosx/README.
+
+ * generic/tcl.h: Updated reminder comment about editing
+ macosx/Tcl.pbproj/project.pbxproj when version number changes.
+
+2003-07-16 Mumit Khan <khan@nanotech.wisc.edu>
+
+ * generic/tclPathObj.c (SetFsPathFromAny): Add Cygwin specific code to
+ convert POSIX filename to native format.
+ * generic/tclFileName.c (Tcl_TranslateFileName): And remove from here.
+ (TclDoGlob): Adjust for cygwin and append / for dirs instead of \
+ * win/tclWinFile.c (TclpObjChdir): Use chdir on Cygwin.
+ [Patch 679315]
+
+2003-07-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/safe.tcl (FileInAccessPath): normalize paths before
+ comparison. [Bug 759607] (myers)
+
+ * unix/tclUnixNotfy.c (NotifierThreadProc): correct size of found and
+ word vars from int to long. [Bug 767578] (hgo)
+
+ * generic/tcl.h: Add recognition of -DTCL_UTF_MAX=6 on the make
+ * generic/regcustom.h: line to support UCS-4 mode. No config arg at
+ this time, as it is not the recommended build mode.
+
+ * generic/tclPreserve.c: In Result and Preserve'd routines, do not
+ * generic/tclUtil.c: assume that ckfree == free, as that is not
+ * generic/tclResult.c: always true. [Bug 756791] (fuller)
+
+2003-07-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/CrtSlave.3 (Tcl_MakeSafe): Updated documentation to strongly
+ discourage use. IMHO code outside the core that uses this function is
+ a bug... [Bug 655300]
+
+2003-07-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFileName.c (Tcl_GlobObjCmd): [Bug 771840]
+ * generic/tclPathObj.c (Tcl_FSConvertToPathType):[Bug 771947]
+ * unix/tclUnixFCmd.c (GetModeFromPermString): [Bug 771949]
+ Silence compiler warnings about unreached lines.
+
+ * library/tcltest/tcltest.tcl (ProcessFlags): Corrected broken call
+ * library/tcltest/pkgIndex.tcl: to [lrange]. Bumped to
+ version 2.2.4. [Bug 772333]
+
+2003-07-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/dltest/pkga.c (Pkga_EqObjCmd): Fix typo that was causing a
+ crash in load.test.
+
+2003-07-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/array.n: Make sure docs are synched with the 8.4 release.
+
+2003-07-15 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/http.n: Updated SYNOPSIS to match actual syntax of commands.
+ [Bug 756112]
+
+ * unix/dltest/pkga.c: Updated to not use Tcl_UtfNcmp and counted
+ strings instead of strcmp (not defined in any #include'd header) and
+ presumed NULL-terminated strings.
+
+ * generic/tclCompCmds.c (TclCompileIfCmd): Prior fix of Bug 711371 on
+ 2003-04-07 introduced a buffer overflow. Corrected. [Bug 771613]
+
+2003-07-15 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/rules.vc: Added a missing $(OPTDEFINES) which broke the build if
+ STATS=memdbg was specified.
+
+2003-07-15 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdIL.c (SortCompare): Cleared up confusing error
+ message. [Bug 771539]
+
+2003-07-11 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/binary.test (binary-46.*): Tests to help enforce the current
+ behaviour.
+ * doc/binary.n: Documented that [binary format a] and [binary scan a]
+ do encoding conversion by dropping high bytes, unlike the rest of the
+ core. [Bug 735364]
+
+2003-07-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl: Corrected [pkg_mkIndex] bug reported on
+ comp.lang.tcl. The indexer was searching for newly indexed packages
+ instead of newly provided packages.
+
+2003-07-08 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/winFCmd.test: fix for five tests under win98 [Bug 767679]
+
+2003-07-07 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/array.n: add examples from Welton
+
+2003-06-23 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n: clarification of 'file tail' behaviour [Bug 737977]
+
+2003-07-04 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/expr.n: Tighten up the wording of some operations. [Bug 758488]
+
+ * tests/cmdAH.test: Made tests of [file mtime] work better on FAT
+ filesystems. [Patch 760768] Also a little general cleanup.
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Made [string map] accept
+ dictionaries for maps. This is much trickier than it looks, since map
+ entry ordering is significant. [Bug 759936]
+
+ * 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
+ from feeding a string literal to [array set] since that alters the
+ trace behaviour of "multi-key" sets. [Bug 759935]
+
+2003-06-23 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclTrace.c: fix to Window debug build compilation error.
+
+2003-06-27 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/init.test: Added [cleanupTests] to report results of tests
+ * tests/pkg.test: that run in slave interps. [Bugs 761334,761344]
+
+ * tests/http.test: Used more reliable path to find httpd script.
+
+2003-06-25 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/init.test: Added tests init-4.6.* to illustrate [Bug 760872]
+
+2003-06-25 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclTrace.c: New file, factoring out of virtually all the
+ various trace-related things from tclBasic.c and tclCmdMZ.c with the
+ goal of making this a separate maintenance area.
+
+2003-06-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Add -ieee when compiling with cc and
+ add -mieee when compiling with gcc under OSF1-V5 "Tru64" systems. [Bug
+ 748957]
+
+2003-06-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/encoding.n: Corrected the docs to say that [source] uses the
+ system encoding, which it always did anyway (since 8.1) [Bug 742100]
+
+2003-06-24 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclHash.c (Tcl_HashStats): Prevented occurrence of
+ division-by-zero problems. [Bug 759749]
+
+2003-06-24 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/tclUnixPort.h: #undef inet_ntoa before #define to avoid
+ compiler warning under freebsd. [Bug 745844]
+
+2003-06-23 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * doc/dde.n: Committed TIP #135 which changes the
+ * win/tclWinDde.c: -exact option to -force. Also cleaned a
+ * tests/winDde.test: bug in the tests.
+ * library/dde/pkgIndex.tcl: Incremented version to 1.2.5
+
+ * doc/dde.n: Committed TIP #120 which provides the
+ * win/tclWinDde.c: dde package for safe interpreters.
+ * tests/winDde.test: Incremented package version to 1.2.4
+ * library/dde/pkgIndex.tcl:
+
+2003-06-23 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFCmd.c: fix to bad error message when trying to do 'file
+ copy foo ""'. [Bug 756951]
+ * tests/fCmd.test: added two new tests for the bug.
+
+ * win/tclWinFile.c:
+ * win/tclWin32Dll.c: recommitted some filesystem globbing speed-ups,
+ but disabled some on the older Win 95/98/ME where they don't seem to
+ work.
+
+ * doc/FileSystem.3: documentation fix [Bug 720634]
+
+2003-06-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_Export): removed erroneous comments. [Bug
+ 756744]
+
+2003-06-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/makefile.vc: fixes to check-in below so compilation now works
+ again on Windows.
+
+ * generic/tclCmdMZ.c:
+ * tests/regexp.test: fixing of bugs related to regexp and regsub
+ matching of empty strings. Addition of a number of new tests. [Bug
+ 755335]
+
+2003-06-16 Andreas Kupries <andreask@activestate.com>
+
+ * win/Makefile.in: Haven't heard back from David for a week. Now
+ * win/configure: committing the remaining changes.
+ * win/configure.in: Note: In active contact with Helmut Giese about
+ * win/makefile.vc: the borland relatedchanges. This part will see
+ * win/rules.vc: future updates.
+ * win/tcl.m4:
+ * win/makefile.bc:
+
+2003-06-10 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclConfig.c (ASSOC_KEY): Changed the key to
+ "tclPackageAboutDict" (tcl prefix) to make collisions with the keys of
+ other packages more unlikely.
+
+2003-06-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclExecute.c: let TclExecuteObjvInternal call
+ TclInterpReady instead of relying on its callers to do so; fix for the
+ part of [Bug 495830] that is new in 8.4.
+ * tests/interp.test: Added tests 18.9 (knownbug) and 18.10
+
+2003-06-09 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tcl.decls: Ported the changes from the
+ * generic/tcl.h: 'tip-59-implementation' branch into the CVS
+ * generic/tclBasic.c: head. Regenerated stub table. Regenerated the
+ * generic/tclInt.h: configure's scripts, with help from Joe English.
+ * generic/tclDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclConfig.c:
+ * generic/tclPkgConfig.c:
+ * unix/Makefile.in:
+ * unix/configure.in: The changes in the windows section are not yet
+ * unix/tcl.m4: committed, they await feedback from David
+ * unix/mkLinks: Gravereaux.
+ * doc/RegConfig.3:
+ * mac/tclMacPkgConfig.c:
+ * tests/config.test:
+
+2003-06-09 Don Porter <dgp@users.sourceforge.net>
+
+ * string.test (string-4.15): Added test for [string first] bug
+ reported in Tcl 8.3, where test for all-single-byte-encoded strings
+ was not reliable.
+
+2003-06-04 Joe Mistachkin <joe@mistachkin.com>
+
+ * tools/man2help.tcl: Added duplicate help section checking and
+ * tools/index.tcl: corrected a comment typo for the getTopics proc
+ in index.tcl. [Bug 748700]
+
+2003-06-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinFCmd.c:
+ * tests/fCmd.test: fix to [Bug #747575] in which a bad error message
+ is given when trying to rename a busy directory to one with the same
+ prefix, but not the same name. Added three new tests.
+
+2003-05-23 D. Richard Hipp <drh@hwaci.com>
+
+ * win/tclWinTime.c: Add tests to detect and avoid a division by zero
+ in the windows precision timer calibration logic.
+
+2003-05-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclObj.c (tclCmdNameType): Converted internal rep
+ management of the cmdName Tcl_ObjType the opposite way, to always use
+ the twoPtrValue instead of always using the otherValuePtr. Previous
+ fix on 2003-05-12 broke several extensions that wanted to poke around
+ with the twoPtrValue.ptr2 value of a cmdName Tcl_Obj, like TclBlend
+ and e4graph. [Bug 726018]
+ Thanks to George Petasis for the bug report and Jacob Levy for testing
+ assistance.
+
+2003-05-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/mkLinks: Set the var S to "" at the top of the file to avoid
+ error when user has set S to something. [Tk Bug 739833]
+
+2003-05-22 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: added missing references to new
+ source files tclPathObj.c and tclMacOSXFCmd.c.
+
+ * macosx/tclMacOSXBundle.c: fixed a problem that caused only the first
+ call to Tcl_MacOSXOpenVersionedBundleResources() for a given bundle
+ identifier to succeed. This caused the tcl runtime library not to be
+ found in all interps created after the inital one.
+
+2003-05-19 Kevin B. Kenny <kennykb@hippolyta>
+
+ * unix/tclUnixTime.c: Corrected a bug in conversion of non-ASCII
+ chars in the format string.
+
+2003-05-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: changed tclConfig.sh location in
+ versioned framework subdirectories to be identical to location in
+ framework toplevel; fixed stub library symbolic links to be tcl
+ version specific.
+
+ * unix/tclUnixTime.c: fixed typo.
+
+2003-05-18 Kevin Kenny <kennykb@acm.org>
+
+ * compat/strftime.c: Modified TclpStrftime to return its result in
+ * generic/tclClock.c: UTF-8 encoding, and removed the conversion from
+ * mac/tclMacTime.c: system encoding to UTF-8 from [clock format].
+ * unix/tclUnixTime.c: Needed to avoid double conversion of the
+ * win/tclWinTime.c: timezone name on Windows systems. [Bug 624408]
+
+2003-05-16 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/dde/pkgIndex.tcl: Applied TIP #130 which provides for
+ * tests/winDde.test: unique dde server names. Added some more
+ * win/tclWinDde.c: tests. Fixes [Bug 219293]
+
+ * doc/dde.n: Updated documentation re TIP #130.
+ * tests/winDde.test: Applied patch for [Bug 738929] by KKB and changed
+ to new-style tests.
+
+2003-05-16 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/Makefile.in: Removed one excess source file tclDToA.c
+
+2003-05-16 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.pbproj/project.pbxproj: updated copyright year.
+
+2003-05-15 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclGetDate.y: added further hackery to the yacc
+ * generic/tclDate.c: post-processing to arrange for the code to set
+ * unix/Makefile.in: up exit handlers to free the stacks. [Bug
+ 736425]
+
+2003-05-15 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinFile.c (TclpMatchInDirectory): revert glob code to r1.44
+ as 2003-04-11 optimizations broke Windows98 glob'ing.
+
+ * doc/socket.n: nroff font handling correction
+
+ * library/encoding/gb2312-raw.enc (new): This is the original
+ gb2312.enc renamed to allow for it to still be used. This is needed by
+ Tk (unix) because X fonts with gb2312* charsets really do want the
+ original gb2312 encoding. [Bug 557030]
+
+2003-05-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd): Stop unwarranted demotion of
+ wide values to longs by formatting of int values. [Bug 699060]
+
+2003-05-14 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/encoding/gb2312.enc: copy euc-cn.enc over original
+ gb2312.enc. gb2312.enc appeared to not work as expected, and most uses
+ of gb2312 really mean euc-cn (which may be the cause of the problem).
+ [Bug 557030]
+
+2003-05-14 Daniel Steffen <das@users.sourceforge.net>
+
+ Implementation of TIP 118:
+
+ * generic/tclFCmd.c (TclFileAttrsCmd): return the list of attributes
+ that can be retrieved without error for a given file, instead of
+ aborting the whole command when any error occurs.
+
+ * unix/tclUnixFCmd.c: added support for new file attributes and for
+ copying Mac OS X file attributes & resource fork during [file copy].
+
+ * generic/tclInt.decls: added declarations of new external commands
+ needed by new file attributes support in tclUnixFCmd.c.
+
+ * macosx/tclMacOSXFCmd.c (new): Mac OS X specific implementation of
+ new file attributes and of attribute & resource fork copying.
+
+ * mac/tclMacFCmd.c: added implementation of -rsrclength attribute &
+ fixes to other attributes for consistency with OSX implementation.
+
+ * mac/tclMacResource.c: fixes to OSType handling.
+
+ * doc/file.n: documentation of [file attributes] changes.
+
+ * unix/configure.in: check for APIs needed by new file attributes.
+
+ * unix/Makefile.in:
+ * unix/tcl.m4: added new platform specifc tclMacOSXFCmd.c source.
+
+ * unix/configure:
+ * generic/tclStubInit.c:
+ * generic/tclIntPlatDecls.h: regen.
+
+ * tools/genStubs.tcl: fixes to completely broken code trying to
+ prevent overlap of "aqua", "macosx", "x11" and "unix" stub entries.
+
+ * tests/unixFCmd.test: added tests of -readonly attribute.
+
+ * tests/macOSXFCmd.test (new): tests of macosx file attributes and of
+ preservation of attributes & resource fork during [file copy].
+
+ * tests/macFCmd.test: restore -readonly attribute of test dir, as
+ otherwise its removal can fail on unices supporting -readonly.
+
+2003-05-13 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclEnv.c: Another putenv() copy behavior problem repaired
+ when compiling on windows and using microsoft's runtime. [Bug 736421]
+
+2003-05-13 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIOUtil.c: ensure cd is thread-safe.
+ [Bug 710642] (vasiljevic)
+
+2003-05-13 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclEvent.c (Tcl_Finalize): Removed unused variable to reduce
+ compiler warnings. [Bug 664745]
+
+2003-05-13 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tcl.decls: Changed Tcl_JoinThread parameter name from
+ * generic/tclDecls.h: "id" to "threadId". [Bug 732477]
+ * unix/tclUnixThrd.c:
+ * win/tclWinThrd.c:
+ * mac/tclMacThrd.c:
+
+2003-05-13 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.decls:
+ * macosx/tclMacOSXBundle.c: added extended version of the
+ Tcl_MacOSXOpenBundleResources() API taking an extra version number
+ argument: Tcl_MacOSXOpenVersionedBundleResources(). This is needed to
+ be able to access bundle resources in versioned frameworks such as Tcl
+ and Tk, otherwise if multiple versions were installed, only the latest
+ version's resources could be accessed. [Bug 736774]
+
+ * unix/tclUnixInit.c (Tcl_MacOSXGetLibraryPath): use new versioned
+ bundle resource API to get tcl runtime library for TCL_VERSION. [Bug
+ 736774]
+
+ * generic/tclPlatDecls.h:
+ * generic/tclStubInit.c: regen.
+
+ * unix/tclUnixPort.h: worked around the issue of realpath() not
+ being thread-safe on Mac OS X by defining NO_REALPATH for threaded
+ builds on Mac OS X. [Bug 711232]
+
+2003-05-12 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/cmdAH.test: General clean-up of tests so that all
+ tcltest-specific commands are protected by constraints and all
+ platforms see the same number of tests. [Bug 736431]
+
+2003-05-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInterp.c: (AliasObjCmd): Added refCounting of the words
+ * tests/interp.test (interp-33.1): of the target of an interp
+ alias during its execution. Also added test. [Bug 730244]
+
+ * generic/tclBasic.c (TclInvokeObjectCommand): objv[argc] is no
+ longer set to NULL (Tcl_CreateObjCommand docs already say that it
+ should not be accessed).
+
+ * tests/cmdMZ.test: Forgot to import [temporaryDirectory].
+
+ * generic/tclObj.c (tclCmdNameType): Corrected variable use of the
+ otherValuePtr or the twoPtrValue.ptr1 fields to store a
+ (ResolvedCmdName *) as the internal rep. [Bug 726018]
+
+ * doc/Eval.3: Corrected prototype for Tcl_GlobalEvalObj [Bug 727622].
+
+2003-05-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclObjLookupVar): [Bug 735335] temporary fix,
+ disabling usage of tclNsVarNameType.
+ * tests/var.test (var-15.1): test for [Bug 735335]
+
+2003-05-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinSerial.c (SerialCloseProc): correct mem leak on closing a
+ Windows serial port [Bug 718002] (schroedter)
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): prevent string repeat crash
+ when overflow sizes were given (throws error). [Bug 714106]
+
+2003-05-09 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclThreadAlloc.c (TclFreeAllocCache): Fixed memory leak
+ caused by treating cachePtr as a TLS index. [Bug 731754]
+
+ * win/tclAppInit.c (Tcl_AppInit): Fixed memory leaks caused by not
+ freeing the memory allocated by setargv and the async handler created
+ by Tcl_AppInit. An exit handler has been created that takes care of
+ both leaks. In addition, Tcl_AppInit now uses ckalloc instead of
+ Tcl_Alloc to allow for easier leak tracking and to be more consistent
+ with the rest of the Tcl core. [Bugs 733156, 733221]
+
+ * tools/encoding/txt2enc.c (main): Fixed memory leak caused by failing
+ to free the memory used by the toUnicode array of strings [Bug 733221]
+
+2003-05-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript):
+ * tests/compile.test (compile-3.5): corrected wrong test and
+ behaviour in the earlier fix for [Bug 705406]; Don Porter reported
+ this as [Bug 735055], and provided the solution.
+
+2003-05-09 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdMZ.c (Tcl_ReturnObjCmd): The array of strings passed
+ to Tcl_GetIndexFromObj must be NULL terminated. [Bug 735186]
+ Thanks to Joe Mistachkin for spotting this.
+
+2003-05-07 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/trace.n: Fixed very strange language in the documentation for
+ 'trace add execution'. [Bug 729821]
+
+ * generic/tclCmdMZ.c (Tcl_TraceObjCmd): Made error message for 'trace
+ info' more consistent with documentation. [Bug 706961]
+
+ * generic/tclDictObj.c (DictInfoCmd): Fixed memory leak caused by
+ confusion about string ownership. [Bug 731706]
+
+2003-05-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Implementation of TIP 90, which
+ * generic/tclCmdAH.c: extends the [catch] and [return]
+ * generic/tclCompCmds.c: commands to enable creation of a
+ * generic/tclExecute.c: proc that is a replacement for
+ * generic/tclInt.h: [return]. [Patch 531640]
+ * generic/tclProc.c:
+ * generic/tclResult.c:
+ * tests/cmdAH.test:
+ * tests/cmdMZ.test:
+ * tests/error.test:
+ * tests/proc-old.test:
+
+ * library/tcltest/tcltest.tcl: The -returnCodes option to [test]
+ failed to recognize the symbolic name "ok" for return code 0.
+
+2003-05-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclBasic.c (Tcl_HideCommand): Fixed error message for
+ grammar and spelling.
+
+2003-04-28 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclDictObj.c (DictIncrCmd): Updated to reflect the behaviour
+ with wide increments of the normal [incr] command.
+ * generic/tclInt.decls: Added TclIncrWideVar2 to internal stub table
+ and cleaned up.
+ * tests/incr.test (incr-3.*):
+ * generic/tclVar.c (TclIncrWideVar2, TclPtrIncrWideVar):
+ * generic/tclExecute.c (TclExecuteByteCode):
+ * generic/tclCmdIL.c (Tcl_IncrObjCmd): Make [incr] work when trying to
+ increment by wide values. [Bug 728838]
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Default mode of
+ operation of [switch] is exact matching. [Bug 727563]
+
+2003-04-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Tcl_EvalObjv() failed to honor the
+ TCL_EVAL_GLOBAL flag when resolving command names. Tcl_EvalEx passed a
+ string rep including leading whitespace and comments to
+ TclEvalObjvInternal().
+
+2003-04-25 Andreas Kupries <andreask@activestate.com>
+
+ * win/tclWinThrd.c: Applied SF patch #727271. This patch changes the
+ code to catch any errors returned by the windows functions handling
+ TLS ASAP instead of waiting to get some mysterious crash later on due
+ to bogus pointers. Patch provided by Joe Mistachkin.
+
+ This is a stop-gap measure to deal with the low number of ?TLS slots
+ provided by some of the variants of Windows (60-80).
+
+2003-04-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: fix to bug reported privately by Jeff where,
+ for example, 'glob -path {[tcl]} *' gets confused by the leading
+ special character (which is escaped internally), and instead lists
+ files in '/'. Bug only occurs on Windows where '\' is also a directory
+ separator.
+ * tests/fileName.test: added test for the above bug.
+
+2003-04-22 Andreas Kupries <andreask@activestate.com>
+
+ * The changes below fix SF bugs [593810], and [718045].
+
+ * generic/tclIO.c (Tcl_CutChannel, Tcl_SpliceChannel): Invoke
+ TclpCutSockChannel and TclpSpliceSockChannel.
+
+ * generic/tclInt.h: Declare TclpCutSockChannel and
+ TclpSpliceSockChannel.
+
+ * unix/tclUnixSock.c (TclpCutSockChannel, TclpSpliceSockChannel):
+ Dummy functions, on unix the sockets are _not_ handled specially.
+
+ * mac/tclMacSock.c (TclpCutSockChannel, TclpSpliceSockChannel):
+ * win/tclWinSock.c (TclpCutSockChannel, TclpSpliceSockChannel): New
+ functions to handle socket specific cut/splice operations: auto-init
+ of socket system for thread on splice, management of the module
+ internal per-thread list of sockets, management of association of
+ sockets with HWNDs for event notification.
+
+ * win/tclWinSock.c (NewSocketInfo): Extended initialization
+ assignments to cover all items of the structure. During debugging of
+ the new code mentioned above I found that two fileds could contain
+ bogus data.
+
+ * win/tclWinFile.c: Added #undef HAVE_NO_FINDEX_ENUMS before
+ definition because when compiling in debug mode the compiler complains
+ about a redefinition, and this warning is also treated as an error.
+
+2003-04-21 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: When the return code of a test does
+ not meet expectations, report that as the reason for test failure, and
+ do not attempt to check the test result for correctness. [Bug 725253]
+
+2003-04-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinInt.h (VER_PLATFORM_WIN32_CE): conditionally define.
+ * win/tclWinInit.c: recognize Windows CE as a Win platform. This just
+ recognizes CE - full support will come later.
+
+ * win/configure: regen
+ * win/configure.in (SHELL): force it to /bin/sh as autoconf 2.5x
+ uses /bin/bash, which can fail to find exes in the path (ie: lib).
+
+ * generic/tclExecute.c (ExprCallMathFunc): remove incorrect
+ extraneous cast from Tcl_WideAsDouble.
+
+2003-04-18 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/open.n: Moved serial port options from [fconfigure] to
+ * doc/fconfigure.n: [open] as it is up to the creator of a channel
+ to describe the channel's special config
+ options. [Bug 679010]
+
+2003-04-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Made changes so that the "wideInt" Tcl_ObjType
+ * generic/tclObj.c: is defined on all platforms, even those where
+ * generic/tclPort.h: TCL_WIDE_INT_IS_LONG is defined. Also made the
+ Tcl_Value struct have a wideValue field on all platforms. This is a
+ ***POTENTIAL INCOMPATIBILITY*** for TCL_WIDE_INT_IS_LONG platforms
+ because that struct changes size. This is the same TIP 72
+ incompatibility that was seen on other platforms at the 8.4.0 release,
+ when this change should have happened as well. [Bug 713562]
+
+ * generic/tclInt.h: New internal macros TclGetWide() and
+ TclGetLongFromWide() to deal with both forms of the "wideInt"
+ Tcl_ObjType, so that conditional TCL_WIDE_INT_IS_LONG code is confined
+ to the header file.
+
+ * generic/tclCmdAH.c: Replaced most coding that was conditional
+ * generic/tclCmdIL.c: on TCL_WIDE_INT_IS_LONG with code that
+ * generic/tclExecute.c: works across platforms, sometimes using
+ * generic/tclTest.c: the new macros above to do it.
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+
+2003-04-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/socket.n: Added a paragraph to remind people to specify their
+ encodings when using sockets. [Bug 630621]
+
+2003-04-16 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/CrtMathFnc.3: Functions also have to deal with wide ints, but
+ this was not documented. [Bug 709720]
+
+2003-04-16 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: removed undesired 'static' for function which
+ is now shared (previously it was duplicated).
+
+2003-04-15 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/namespace.n: added example section "SCOPED SCRIPTS", supplied by
+ Kevin Kenny. [Bug 219183]
+
+2003-04-15 Kevin Kenny <kennykb@acm.org>
+
+ * makefile.vc: Updated makefile.vc to conform with Mo DeJong's changes
+ to Makefile.in and tclWinPipe.c on 2003-04-14. Now passes TCL_PIPE_DLL
+ in place of TCL_DBGX.
+ * win/tclWinTime.c: Corrected use of types to make compilation
+ compatible with VC++5.
+
+2003-04-15 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: finished check-in from yesterday, removing
+ duplicate function definition.
+
+2003-04-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclClock.c: Corrected compiler warnings.
+ * generic/tclTest.c:
+
+2003-04-14 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/Makefile.in: Don't define TCL_DBGX symbol for every compile.
+ Instead, define TCL_PIPE_DLL only when compiling tclWinPipe.c. This
+ will break other build systems, so they will need to remove the
+ TCL_DBGX define and replace it with a define for TCL_PIPE_DLL.
+ * win/tclWinPipe.c (TclpCreateProcess): Remove PREFIX_IDENT and
+ DEBUG_IDENT from top of file. Use TCL_PIPE_DLL passed in from build
+ env instead of trying to construct the dll name from already defined
+ symbols. This approach is more flexible and better in the long run.
+
+2003-04-14 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWinFile.c: added conditionals to restore compilation on
+ VC++6, which was broken by recent changes.
+
+2003-04-14 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c:
+ * generic/tclPathObj.c:
+ * generic/tclFileSystem.h: overlooked one function which was
+ duplicated, so this is now shared between modules.
+ * win/tclWinFile.c: allow this file to compile with VC++ 5.2 again
+ since Mingw build fixes broke that.
+
+2003-04-13 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Add check for FINDEX_INFO_LEVELS from winbase.h,
+ known to be a problem in VC++ 5.2. Define HAVE_NO_FINDEX_ENUMS if the
+ define does not exist.
+ * win/tclWinFile.c: Put declarations for FINDEX_INFO_LEVELS and
+ FINDEX_SEARCH_OPS inside a check for HAVE_NO_FINDEX_ENUMS so that
+ these are not declared twice. This fixes the Mingw build.
+ * win/tclWinTime.c: Rework the init of timeInfo so that the number or
+ initializers matches the declaration. This was broken under Mingw. Add
+ cast to avoid compile warning when calling the AccumulateSample
+ function.
+
+2003-04-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/Makefile.in (GENERIC_OBJS): add missing tclPathObj.c
+
+2003-04-12 Kevin Kenny <kennykb@acm.org>
+
+ * doc/clock.n:
+ * generic/tclClock.c (Tcl_ClockObjCmd):
+ * tests/clock.test: Implementation of TIP #124. Also renumbered test
+ cases to avoid duplicates. [Bug 710310]
+ * tests/winTime.test:
+ * win/tclWinTest.c (TestwinclockCmd, TestwinsleepCmd):
+ * win/tclWinTime.c (Tcl_WinTime, UpdateTimeEachSecond,
+ (ResetCounterSamples, AccumulateSample, SAMPLES, TimeInfo): Made
+ substantial changes to the phase-locked loop (replaced an IIR filter
+ with an FIR one) in a quest for improved loop stability (Bug not
+ logged at SF, but cited in private communication from Jeff Hobbs).
+
+2003-04-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd,STR_IS_INT): Corrected
+ inconsistent results of [string is integer] observed on systems where
+ sizeof(long) != sizeof(int). [Bug 718878]
+ * tests/string.test: Added tests for Bug 718878.
+ * doc/string.n: Clarified that [string is integer] accepts 32-bit
+ integers.
+
+2003-04-11 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (UpdateInterest): When dropping interest in
+ TCL_READABLE now dropping interest in TCL_EXCEPTION too. This fixes a
+ bug where Expect detects eof on a file prematurely on solaris 2.6 and
+ higher. A much more complete explanation is in the code itself (40
+ lines of comments for a one-line change :)
+
+2003-04-11 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/cmdAH.test: fix test suite problem if /home is a symlink. [Bug
+ 703264]
+ * generic/tclIOUtil.c: fix bad error message with 'cd ""'. [Bug
+ 704917]
+ * win/tclWinFile.c, win/tclWin32Dll.c:
+ * win/tclWinInt.h: allow Tcl to differentiate between reparse points
+ which are symlinks and mounted volumes, and correctly handle the
+ latter. This involves some elaborate code to find the actual drive
+ letter (if possible) corresponding to a mounted volume. [Bug 697862]
+ * tests/fileSystem.test: add constraints to stop tests running in
+ ordinary tcl interpreter. [Bug 705675]
+
+ * generic/tclIOUtil.c:
+ * generic/tclPathObj.c: (new file)
+ * generic/tclFileSystem.h: (new file)
+ * win/makefile.vc:
+ Split path object handling out of the virtual filesystem layer, into
+ tclPathObj.c. This refactoring cleans up the internal filesystem code,
+ and will make any future optimisations and forthcoming better
+ thread-safety much easier.
+
+ * generic/tclTest.c:
+ * tests/reg.test: added some 'knownBug' tests for problems in Tcl's
+ regexp code with the TCL_REG_CAN_MATCH flag (see Bug 703709). Code too
+ impenetrable to fix right now, but a fix is needed for tip113 to work
+ correctly.
+
+ * tests/fCmd.test
+ * win/tclWinFile.c: added some filesystem optimisation to the 'glob'
+ implementation, and some new tests.
+
+ * generic/tclCmdMZ.c: fix typo in comment
+
+ * tests/winFile.test:
+ * tests/ioUtil.test:
+ * tests/unixFCmd.test: renumbered tests with duplicate numbers. [Bug
+ 710361]
+
+2003-04-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/binary.n: Fixed typo in [binary format w] desc. [Bug 718543]
+
+2003-04-08 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_ErrorObjCmd): Strings are only empty if
+ they have zero length, not if their first byte is zero, so fix test
+ guarding Tcl_AddObjErrorInfo to take this into account. [Bug
+ reported by Don Porter; no bug-id.]
+
+2003-04-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileIfCmd): Corrected string limits of
+ arguments interpolated in error messages. [Bug 711371]
+
+ * generic/tclCmdMZ.c (TraceExecutionProc): Added missing
+ Tcl_DiscardResult() call to avoid memory leak.
+
+2003-04-07 Donal K. Fellows <zzcgudf@ernie.mvc.mcc.ac.uk>
+
+ * generic/tclDictObj.c (Tcl_DictObjCmd): Stopped compilers from
+ moaning about switch fall-through. [Bug 716327]
+ (DictFilterCmd): Yet more warning killing, this time reported by
+ Miguel Sofer by private chat.
+
+2003-04-07 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/dict.test (dict-2.6):
+ * generic/tclDictObj.c (Tcl_NewDictObj, Tcl_DbNewDictObj): Oops!
+ Failed to fully initialise the Dict structure.
+ (DictIncrCmd): Moved valueAlreadyInDictionary label to stop compiler
+ complaints. [Bug 715751]
+
+ * generic/tclDictObj.c (DictIncrCmd): Followed style in the rest of
+ the core by commenting out wide-specific operations on platforms where
+ wides are longs, and used longs more thoroughly than ints through
+ [dict incr] anyway to forestall further bugs.
+ * generic/tclObj.c: Made sure there's always a tclWideIntType
+ implementation available, not that it is always useful. [Bug 713562]
+
+2003-04-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclDictObj.c: Removed commented out notes on declarations to
+ be moved to elsewhere in the Tcl core.
+
+ * generic/tclInt.h: Final stages of plumbing in.
+ * generic/tclBasic.c:
+ * generic/tclObj.c (TclInitObjSubsystem):
+
+ * unix/Makefile.in, win/Makefile.in, win/makefile.[bv]c: Build support.
+ * generic/tcl.decls: Added dict public API to stubs table.
+ * generic/tcl.h (Tcl_DictSearch): Added declaration of structure to
+ allow user code to iterate over dictionaries.
+
+ * doc/DictObj.3: New files containing dictionary implementation
+ * doc/dict.n: documentation and tests as as mandated by TIP
+ * generic/tclDictObj.c: #111.
+ * tests/dict.test:
+
+2003-04-03 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure:
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Don't set TCL_LIBS if it is already
+ set to support use of TCL_LIBS var from tclConfig.sh in the Tk
+ configure script.
+
+2003-04-03 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/Makefile.in: Don't subst MATH_LIBS, LIBS, and DL_LIBS
+ separately. Instead, just subst TCL_LIBS since it includes the
+ others.
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS, SC_TCL_LINK_LIBS): Set and subst
+ TCL_LIBS in SC_CONFIG_CFLAGS instead of SC_TCL_LINK_LIBS. Don't subst
+ MATH_LIBS since it is now covered by TCL_LIBS.
+ * unix/tclConfig.sh.in: Use TCL_LIBS instead of DL_LIBS, LIBS, and
+ MATH_LIBS.
+ * unix/dltest/Makefile.in: Ditto.
+
+2003-04-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): Now that [return]
+ compiles to INST_RETURN, it is safe to compile even outside a proc.
+
+2003-04-02 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Set stub lib flag based on new LIBFLAGSUFFIX
+ variable.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Set new LIBFLAGSUFFIX that works like
+ LIBSUFFIX, it is used when creating library names. The previous
+ implementation would generate -ltclstub85 instead of -ltclstub85s when
+ configured with --disable-shared.
+
+2003-04-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c (TclSubstTokens): Moved declaration of
+ utfCharBytes to beginning of procedure so that it does not go out of
+ scope (get free()d) while append is still pointing to it. [Bugs
+ 703167, 713754]
+
+2003-04-01 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Check for inet_ntoa in -lbind inside
+ the BeOS block since doing it later broke the build under SuSE 7.3.
+ [Bug 713128]
+
+2003-04-01 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/README: Direct [source] of *.test files is no longer
+ recommended. The tests/*.test files should only be evaluated under the
+ control of the [runAllTests] command in tests/all.tcl.
+
+ * generic/tclExecute.c (INST_RETURN): Bytecompiled [return] failed to
+ reset iPtr->returnCode, causing tests parse-18.17 and parse-18.21 to
+ fail strangely.
+ * tests/parse.test (parse-18.21): Corrected now functioning test.
+ Added further coverage tests.
+
+2003-03-31 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/parse.test (parse-18.*): Coverage tests for the new
+ implementation of Tcl_SubstObj(). Note that tests parse-18.17 and
+ parse-18.21 demonstrate some bugs left to fix in the current code.
+
+2003-03-27 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Use -Wl,--export-dynamic instead of
+ -rdynamic for LDFLAGS. The -rdynamic is not documented so it seems
+ better to pass the --export-dynamic flag to the linker. [Patch 573395]
+
+2003-03-27 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/encoding.test:
+ * tests/proc-old.test:
+ * tests/set-old.test: Altered test numers to eliminate duplicates,
+ [Bugs 710313, 710320, 710352]
+
+2003-03-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/parseOld.test: Altered test numers to eliminate duplicates.
+ * tests/parse.test: [Bugs 710365, 710369]
+ * tests/expr-old.test:
+ * tests/expr.test:
+
+ * tests/utf.test: Altered test numers to eliminate duplicates.
+ * tests/trace.test: [Bugs 710322, 710327, 710349, 710363]
+ * tests/lsearch.test:
+ * tests/list.test:
+ * tests/info.test:
+ * tests/incr-old.test:
+ * tests/if-old.test:
+ * tests/format.test:
+ * tests/foreach.test:
+
+2003-03-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS, SC_TCL_LINK_LIBS): Add BeOS system to
+ SC_CONFIG_CFLAGS. Check for inet_ntoa in -lbind, needed for BeOS.
+
+2003-03-26 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n:
+ * library/tcltest/tcltest.tcl: Added reporting during [configure
+ -debug 1] operations to warn about multiple uses of the same test
+ name. [FRQ 576693]
+
+ * tests/msgcat.test (msgcat-2.2.1): changed test name to avoid
+ duplication. [Bug 710356]
+
+ * unix/dltest/pkg?.c: Changed all Tcl_InitStubs calls to pass
+ argument exact = 0, so that rebuilds are not required when Tcl
+ bumps to a new version. [Bug 701926]
+
+2003-03-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c:
+ * tests/var.test: fixing ObjMakeUpvar's lookup algorithm for the
+ created local variable. [Bug 631741] (Chris Darroch) and [Bug 696893]
+ (David Hilker)
+
+2003-03-24 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/dde/pkgIndex.tcl: bumped version to 1.2.2 in tclWinDde.c,
+ now adding here too.
+
+2003-03-22 Kevin Kenny <kennykb@acm.org>
+
+ * library/dde/pkgIndex.tcl:
+ * library/reg/pkgIndex.tcl: Fixed a bug where [package require dde]
+ or [package require registry] attempted to load the release version
+ of the DLL into a debug build. [Bug 708218] Thanks to Joe Mistachkin
+ for the patch.
+ * win/makefile.vc: Added quoting around the script name in the 'test'
+ target; Joe Mistachkin insists that he has a configuration that fails
+ to launch tcltest without it, and it appears harmless otherwise.
+
+2003-03-22 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinDde.c: Make dde services conform the the documentation
+ such that giving only a topic name really returns all services with
+ that topic. [Bug 219155]
+ Prevent hangup caused by dde server applications failing to process
+ messages. [Bug 707822]
+ * tests/winDde.test: Corrected labels and added a test for search by
+ topic name.
+
+2003-03-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h (tclOriginalNotifier):
+ * generic/tclStubInit.c (tclOriginalNotifier):
+ * mac/tclMacNotify.c (Tcl_SetTimer,Tcl_WaitForEvent):
+ * unix/tclUnixNotfy.c (Tcl_SetTimer,Tcl_WaitForEvent,
+ (Tcl_CreateFileHandler,Tcl_DeleteFileHandler):
+ * win/tclWinNotify.c (Tcl_SetTimer,Tcl_WaitForEvent): Some linkers
+ apparently use a different representation for a pointer to a function
+ within the same compilation unit and a pointer to a function in a
+ different compilation unit. This causes checks like those in the
+ original notifier procedures to fall into infinite loops. The fix is
+ to store pointers to the original notifier procedures in a struct
+ defined in the same compilation unit as the stubs tables, and compare
+ against those values. [Bug 707174]
+
+ * generic/tclInt.h: Removed definition of ParseValue struct that is
+ no longer used.
+
+2003-03-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:
+ * tests/compile.test: bad command count on TCL_OUT_LINE_COMPILE.
+ [Bug 705406] (Don Porter)
+
+2003-03-19 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Replaced [regexp] and [regsub] with
+ * library/history.tcl: [string map] where possible. Thanks
+ * library/ldAout.tcl: to David Welton. [Bugs 667456,667558]
+ * library/safe.tcl: Bumped to http 2.4.3, opt 0.4.5, and
+ * library/http/http.tcl: tcltest 2.2.3.
+ * library/http/pkgIndex.tcl:
+ * library/opt/optparse.tcl:
+ * library/opt/pkgIndex.tcl:
+ * library/tcltest/tcltest.tcl:
+ * library/tcltest/pkgIndex.tcl:
+ * tools/genStubs.tcl:
+ * tools/tcltk-man2html.tcl:
+ * unix/mkLinks.tcl:
+
+ * doc/Eval.3 (Tcl_EvalObjEx): Corrected CONST and
+ * doc/ParseCmd.3 (Tcl_EvalTokensStandard): return type errors in
+ documentation. [Bug 683994]
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): Alternative fix for
+ * generic/tclCompile.c (INST_RETURN): [Bug 633204] that uses a new
+ * generic/tclCompile.h (INST_RETURN): bytecode INST_RETURN to
+ * generic/tclExecute.c (INST_RETURN): properly bytecode the [return]
+ command to something that returns TCL_RETURN.
+
+2003-03-18 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Don't run the AC_CYGWIN macro since it uses
+ AC_CANONICAL_HOST under autoconf 2.5X. Just check to see if __CYGWIN__
+ is defined by the compiler and set the ac_cv_cygwin variable based on
+ that. [Bug 705912]
+
+2003-03-18 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * tests/registry.test: Changed the conditionals to avoid an abort if
+ [testlocale] is missing, as when running the test in tclsh rather than
+ tcltest. [Bug 705677]
+
+2003-03-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * tools/tcltk-man2html.tcl: added support for building 'make html'
+ from inside distribution directories named with 8.x.x version numbers.
+ tcltk-man2html now uses the latest tcl8.x.x resp. tk8.x.x directories
+ found inside its --srcdir argument.
+
+2003-03-17 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/format.test: Renumber tests, a bunch of tests all had the same
+ id.
+
+2003-03-17 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/lsearch.n: Altered documentation of -ascii options so
+ * doc/lsort.n: they don't specify that they operate on ASCII
+ strings, which they never did anyway. [Bug
+ 703807]
+
+2003-03-14 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd): Only add the modifier that
+ indicates we've got a wide int when we're formatting in an integer
+ style. Stops some libc's from going mad. [Bug 702622] Also tidied
+ whitespace.
+
+2003-03-13 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tcl.m4 (SC_WITH_TCL): Port version number fix that was made in
+ tk instead of tcl sources.
+
+2003-03-13 Mo DeJong <mdejong@users.sourceforge.net>
+
+ Require autoconf 2.57 or newer, see TIP 34 for a detailed explanation
+ of why this is good. This will no doubt break the build on some
+ platforms, let the flaming begin.
+
+ * tools/configure: Regen with autoconf 2.57.
+ * tools/configure.in: Require autoconf 2.57.
+ * unix/configure: Regen with autoconf 2.57.
+ * unix/configure.in: Require autoconf 2.57.
+ Apply AC_LIBOBJ changes from patch 529884.
+ * unix/tcl.m4: Ditto.
+ * win/configure: Regen with autoconf 2.57.
+ * win/configure.in: Require autoconf 2.57.
+ Don't subst LIBOBJS since this happens by default, this avoids an
+ autoconf error.
+
+2003-03-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_EvalTokensStandard):
+ * generic/tclCmdMZ.c (Tcl_SubstObj):
+ * generic/tclCompCmds.c (TclCompileSwitchCmd):
+ * generic/tclCompExpr.c (CompileSubExpr):
+ * generic/tclCompile.c (TclSetByteCodeFromAny,TclCompileScript,
+ (TclCompileTokens,TclCompileCmdWord):
+ * generic/tclCompile.h (TclCompileScript):
+ * generic/tclExecute.c (TclCompEvalObj):
+ * generic/tclInt.h (Interp,TCL_BRACKET_TERM,TclSubstTokens):
+ * generic/tclParse.c (ParseTokens,Tcl_SubstObj,TclSubstTokens):
+ * tests/subst.test (2.4, 8.7, 8.8, 11.4, 11.5):
+ Substantial refactoring of Tcl_SubstObj to make use of the same
+ parsing and substitution procedures as normal script evaluation.
+ Tcl_SubstObj() moved to tclParse.c. New routine TclSubstTokens()
+ created in tclParse.c which implements all substantial functioning of
+ Tcl_EvalTokensStandard(). TclCompileScript() loses its "nested"
+ argument, the Tcl_Interp struct loses its termOffset field and the
+ TCL_BRACKET_TERM flag in the evalFlags field, all of which were only
+ used (indirectly) by Tcl_SubstObj(). Tests subst-8.7,8.8,11.4,11.5
+ modified to accomodate the only behavior change: reporting of parse
+ errors now takes precedence over [return] and [continue] exceptions.
+ All other behavior should remain compatible. [RFE 536831,684982] [Bug
+ 685106]
+
+ * generic/tcl.h: Removed TCL_PREFIX_IDENT and TCL_DEBUG_IDENT
+ * win/tclWinPipe.c: from tcl.h -- they are not part of Tcl's
+ public interface. Put them in win/tclWinPipe.c where they are used.
+
+ * generic/tclInterp.c (Tcl_InterpObjCmd): Corrected and added
+ * tests/interp.test (interp-2.13): test for option
+ parsing beyond objc for [interp create --]. Thanks to Marco Maggi.
+ [Bug 702383]
+
+2003-03-11 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/makefile.vc: Added two missing uses of $(DBGX) so that
+ tclpip8x.dll loads without panicking on Win9x.
+
+2003-03-09 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclTest.c (TestChannelCmd): Removed an unused local variable
+ that caused compilation problems on some platforms.
+
+2003-03-08 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Added missing "-body" to example. Thanks to Helmut
+ Giese. [Bug 700011]
+
+2003-03-07 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/io.test:
+ * tests/ioCmd.test: Define a fcopy constraint and add it to the
+ constraint list of any test that depends on the fcopy command. This is
+ only useful to Jacl which does not support fcopy.
+
+2003-03-07 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/encoding.test: Name temp files *.tcltestout instead of *.out
+ so that when they are removed later, we don't accidently toast any
+ files named *.out that the user has created in the build directory.
+
+2003-03-07 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_FileObjCmd): Fix the setting of a file's
+ mtime and atime on 64-bit platforms. [Bug 698146]
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/io.test: Doh! Undo accidental commenting out of a couple of
+ tests.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/io.test: Define a fileevent constraint and add it to the
+ constraint list of any test that depends on the fileevent command.
+ This is only useful to Jacl which does not support fileevent.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/io.test: Define an openpipe constraint and add it to the
+ constraint list of any test that creates a pipe using the open
+ command. This is only useful to Jacl which does not support pipes.
+
+2003-03-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/TclUtf.c (Tcl_UniCharNcasecmp): Corrected failure to
+ * tests/utf.test (utf-25.*): properly compare Unicode strings of
+ different case in a case insensitive manner. [Bug 699042]
+
+2003-03-06 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd):
+ Replaced a non-portable 'bzero' with a portable 'memset'. [Bug 698442]
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_Seek, Tcl_OutputBuffered): If there is data
+ buffered in the statePtr->curOutPtr member then set the BUFFER_READY
+ flag in Tcl_Seek. This is needed so that the next call to FlushChannel
+ will write any buffered bytes before doing the seek. The existing code
+ would set the BUFFER_READY flag inside the Tcl_OutputBuffered
+ function. This was a programming error made when Tcl_OutputBuffered
+ was originally created in CVS revision 1.35. The setting of the
+ BUFFER_READY flag should not have been included in the
+ Tcl_OutputBuffered function.
+ * generic/tclTest.c (TestChannelCmd): Use the Tcl_InputBuffered and
+ Tcl_OutputBuffered util methods to query the amount of buffered input
+ and output.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_Flush): Compare the nextAdded member of the
+ ChannelBuffer to the nextRemoved member to determine if any output has
+ been buffered. The previous check against the value 0 seems to have
+ just been a coding error. See other methods like Tcl_OutputBuffered
+ for examples where nextAdded is compared to nextRemoved to find the
+ number of bytes buffered.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_GetsObj): Check that the eol pointer has not
+ gone past the end of the string when in auto translation mode and the
+ INPUT_SAW_CR flag is set. The previous code worked because the end of
+ string value \0 was being compared to \n, this patch just skips that
+ pointless check.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (WriteBytes, WriteChars, Tcl_GetsObj, ReadBytes):
+ Rework calls to TranslateOutputEOL to make it clear that a boolean
+ value is being returned. Add some comments in an effort to make the
+ code more clear. This patch makes no functional changes.
+
+2003-03-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_SetChannelOption): Invoke the
+ Tcl_SetChannelBufferSize method as a result of changing the
+ -buffersize option to fconfigure. The previous implementation used
+ some inlined code that reset the buffer size to the default size
+ instead of ignoring the request as implemented in
+ Tcl_SetChannelBufferSize.
+ * tests/io.test: Update test case so that it actually checks the
+ implementation of Tcl_SetChannelBufferSize.
+
+2003-03-05 David Gravereaux <davygrvy@pobox.com>
+
+ * win/rules.vc: updated default tcl version to 8.5.
+
+2003-03-05 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): First attempt at a
+ bytecode-compiled switch command. It only handles the most common case
+ of switching, but that should be enough for this to speed up a lot of
+ people's code. It is expected that the speed gains come from two
+ things: better handling of the switch itself, and integrated
+ compilation of the arms instead of embedding separate bytecode
+ sequences (i.e. better local variable handling.)
+ * tests/switch.test (switch-10.*): Tests of both uncompiled and
+ compiled switch behaviour. [Patch #644819]
+
+ * generic/tclCompile.h (TclFixupForwardJumpToHere): Additional macro
+ to make the most common kind of jump fixup a bit easier.
+
+2003-03-04 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bumped version number of
+ * generic/tcl.h: Tcl to 8.5a0.
+ * library/init.tcl:
+ * mac/README:
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * tests/basic.test:
+ * tools/configure.in:
+ * tools/tcl.hpj.in:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README:
+ * win/README.binary:
+ * win/configure.in:
+ * win/makefile.bc:
+ * win/makefile.vc:
+ * win/tcl.m4:
+
+ * tools/configure: autoconf
+ * unix/configure:
+ * win/configure:
+
+2003-03-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.4.2 TAGGED FOR RELEASE ***
+
+2003-03-03 Daniel Steffen <das@users.sourceforge.net>
+
+ Mac OS Classic specific fixes:
+ * generic/tclIOUtil.c (TclNewFSPathObj): on TCL_PLATFORM_MAC, skip
+ potential directory separator at the beginning of addStrRep.
+ * mac/tclMacChan.c (OpenFileChannel, CommonWatch): followup fixes to
+ cut and splice implementation for file channels.
+ * mac/tclMacFile.c (TclpUtime): pass native path to utime().
+ * mac/tclMacFile.c (TclpObjLink): correctly implemented creation of
+ alias files via new static proc CreateAliasFile().
+ * mac/tclMacPort.h: define S_ISLNK macro to fix stat'ing of links.
+ * mac/tclMacUtil.c (FSpLocationFromPathAlias): fix to enable stat'ing
+ of broken links.
+
+2003-03-03 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/Makefile.vc: corrected bug introduced by 'g' for debug builds.
+
+2003-03-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/dde/pkgIndex.tcl: dde bumped to version 1.2.1 for
+ * win/tclWinDde.c: bundled release with Tcl 8.4.2
+
+ * library/reg/pkgIndex.tcl: registry bumped to version 1.1.1 for
+ * win/tclWinReg.c: bundled release with Tcl 8.4.2
+
+ * library/opt/pkgIndex.tcl: updated package index to version 0.4.4
+
+2003-02-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/configure:
+ * win/configure.in: check for 'g' for debug build type, not 'd'.
+ * win/rules.vc (DBGX): correct to use 'g' for nmake win makefile to
+ match the cygwin makefile for debug builds. [Bug 635107]
+
+2003-02-28 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n: subcommand is 'file volumes' not 'file volume'
+
+2003-02-27 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIOUtil.c (MakeFsPathFromRelative): removed dead code
+ check of typePtr (darley).
+
+ * tests/winTime.test: added note about PCI hardware dependency issues
+ with high performance clock.
+
+2003-02-27 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/lsearch.test (lsearch-10.7):
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): Stopped -start option from
+ causing an option when used with an empty list. [Bug 694232]
+
+2003-02-26 Chengye Mao <chengye.geo@yahoo.com>
+
+ * win/tclWinInit.c: fixed a bug in TclpSetVariables by initializing
+ dwUserNameLen with the sizeof(szUserName) before calling GetUserName.
+ Don't know if this bug has been recorded: it caused crash in starting
+ Tcl or wish in Windows.
+
+2003-02-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (TraceCommandProc): Fix mem leak when deleting a
+ command that had trace on it. [Bug 693564] (sofer)
+
+2003-02-25 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/pkgMkIndex.n: Modified [pkg_mkIndex] to use -nocase matching
+ * library/package.tcl: of -load patterns, to better accomodate common
+ user errors due to confusion between [package names] names and [info
+ loaded] names.
+
+2003-02-25 Andreas Kupries <andreask@pliers.activestate.com>
+
+ * tests/pid.test: See below [Bug 678412].
+ * tests/io.test: Made more robust against spaces in paths [Bug 678400]
+
+2003-02-25 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/execute.test: cleaning up testobj's at the end, to avoid
+ leak warning by valgrind.
+
+2003-02-22 Zoran Vasiljevic <zoran@archiwrae.com>
+
+ * generic/tclEvent.c (Tcl_FinalizeThread): Fix [Bug 571002]
+
+2003-02-21 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * tests/binary.test (binary-44.[34]):
+ * generic/tclBinary.c (ScanNumber): Fixed problem with unwanted
+ sign-bit propagation when scanning wide ints. [Bug 690774]
+
+2003-02-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * mac/tclMacChan.c (TclpCutFileChannel, TclpSpliceFileChannel):
+ Implemented missing cut and splice procs for file channels.
+
+2003-02-21 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl (tclPkgUnknown): Minor performance tweaks to
+ reduce the number of [file] invocations. Meant to improve startup
+ times, at least a little bit. [Patch 687906]
+
+2003-02-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4:
+ * unix/tclUnixPipe.c: (macosx) use vfork() instead of fork() to create
+ new processes, as recommended by Apple (vfork can be up to 100 times
+ faster thank fork on macosx).
+ * unix/configure: regen.
+
+2003-02-20 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEncoding.c (LoadTableEncoding):
+ * library/encoding/cp932.enc: Correct jis round-trip encoding
+ * library/encoding/euc-jp.enc: by adding 'R' type to .enc files.
+ * library/encoding/iso2022-jp.enc: [Patch 689341] (koboyasi, taguchi)
+ * library/encoding/jis0208.enc:
+ * library/encoding/shiftjis.enc:
+ * tests/encoding.test:
+
+ * unix/tclUnixChan.c (Tcl_MakeTcpClientChannel): add
+ MakeTcpClientChannelMode that takes actual mode flags to avoid hang on
+ OS X (may be OS X bug, but patch works x-plat). [Bug 689835] (steffen)
+
+2003-02-20 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/regsub.n: Typo fix [Bug 688943]
+
+2003-02-19 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixThrd.c (TclpReaddir):
+ * unix/tclUnixPort.h: update to Bug 689100 patch to ensure that there
+ is a defined value of MAXNAMLEN (aka NAME_MAX in POSIX) and that we
+ have some buffer allocated.
+
+2003-02-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclStringObj.c: restored Tcl_SetObjLength() side-effect of
+ always invalidating unicode rep (if the obj has a string rep). Added
+ hasUnicode flag to String struct, allows decoupling of validity of
+ unicode rep from buffer size allocated to it (improves memory
+ allocation efficiency). [Bugs 686782, 671138, 635200]
+
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * macosx/Makefile: reworked embedded build to no longer require
+ relinking but to use install_name_tool instead to change the
+ install_names for embedded frameworks. [Bug 644510]
+
+ * macosx/Tcl.pbproj/project.pbxproj: preserve mod dates when running
+ 'make install' to build framework (avoids bogus rebuilds of dependent
+ frameworks because tcl headers appear changed).
+
+ * tests/ioCmd.test (iocmd-1.8): fix failure when system encoding is
+ utf-8: use iso8859-1 encoding explicitly.
+
+2003-02-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileExprWords): remove unused variable
+ "range" [Bug 664743]
+ * generic/tclExecute.c (ExprSrandFunc): remove unused variable
+ "result" [Bug 664743]
+ * generic/tclStringObj.c (UpdateStringOfString): remove unused
+ variable "length" [Bug 664751]
+ * tests/execute.test (execute-7.30): fix for [Bug 664775]
+
+2003-02-18 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tcl.m4: [Bug #651811] Added definition of _XOPEN_SOURCE and
+ linkage of 'xnet' library to HP 11 branch. This kills a lot of
+ socket-related failures in the testsuite when Tcl was compiled in 64
+ bit mode (both PA-RISC 2.0W, and IA 64).
+
+ * unix/configure: Regenerated.
+
+2003-02-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIO.c (HaveVersion): correctly decl static
+
+ * unix/tclUnixThrd.c (TclpReaddir): reduce size of name string in tsd
+ to NAME_MAX instead of PATH_MAX. [Bug 689100] (waters)
+
+2003-02-18 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Make sure -lpthread gets passed on
+ the link line when checking for the pthread_attr_setstacksize symbol.
+
+2003-02-18 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclTest.c: cleanup of new 'simplefs' test code, and better
+ documentation.
+
+2003-02-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TclRenameCommand): fixing error in previous
+ commit.
+
+2003-02-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclExecute.c (TclExecuteByteCode INST_STR_MATCH):
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd STR_MATCH):
+ * generic/tclUtf.c (TclUniCharMatch):
+ * generic/tclInt.decls: add private TclUniCharMatch function that
+ * generic/tclIntDecls.h: does string match on counted unicode
+ * generic/tclStubInit.c: strings. Tcl_UniCharCaseMatch has the failing
+ * tests/string.test: that it can't handle strings or patterns with
+ * tests/stringComp.test: embedded NULLs. Added tests that actually try
+ strings/pats with NULLs. TclUniCharMatch should be TIPed and made
+ public in the next minor version rev.
+
+2003-02-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TclRenameCommand): 'oldFullName' object was not
+ being freed on all function exits, causing a memory leak. [Bug 684756]
+
+2003-02-17 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_GetsObj): Minor change so that eol is only
+ assigned at the top of the TCL_TRANSLATE_AUTO case block. The other
+ cases assign eol so this does not change any functionality.
+
+2003-02-17 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * tests/notify.test: Removed Windows line terminators. [Bug 687913].
+
+2003-02-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_EvalEx):
+ * generic/tclCompExpr.c (CompileSubExpr):
+ * generic/tclCompile.c (TclCompileScript):
+ * generic/tclParse.c (Tcl_ParseCommand, ParseTokens):
+ * generic/tclParseExpr.c (ParsePrimaryExpr):
+ * tests/basic.test (47.1):
+ * tests/main.test (3.4):
+ * tests/misc.test (1.2):
+ * tests/parse.test (6.18):
+ * tests/parseExpr.test (15.35):
+ * tests/subst.test (8.6): Don Porter's fix for bad parsing of nested
+ scripts. [Bug 681841]
+
+2003-02-15 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * tests/notify.test (new-file):
+ * generic/tclTest.c (TclTest_Init, EventtestObjCmd, EventtestProc,
+ (EventTestDeleteProc):
+ * generic/tclNotify.c (Tcl_DeleteEvents): Fixed Tcl_DeleteEvents not
+ to get a pointer smash when deleting the last event in the queue.
+ Added test code in 'tcltest' and a new file of test cases
+ 'notify.test' to exercise this functionality; several of the new test
+ cases fail for the original code and pass for the corrected code. [Bug
+ 673714]
+
+ * unix/tclUnixTest.c (TestfilehandlerCmd): Corrected a couple of typos
+ in error messages. [Bug 596027]
+
+2003-02-14 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README: Bumped to version 8.4.2.
+ * generic/tcl.h:
+ * tools/tcl.wse.in:
+ * unix/configure:
+ * unix/configure.in:
+ * unix/tcl.m4:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure:
+ * win/configure.in:
+ * macosx/Tcl.pbproj/project.pbxproj:
+
+ * generic/tclStringObj.c (Tcl_GetCharLength): perf tweak
+
+ * unix/tcl.m4: correct HP-UX ia64 --enable-64bit build flags
+
+2003-02-14 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/tclWinTime.c: Added code to test and compensate for forward
+ leaps of the performance counter. See the MSDN Knowledge Base article
+ Q274323 for the hardware problem that makes this necessary on certain
+ machines.
+ * tests/winTime.test: Revised winTime-2.1 - it had a tolerance of
+ thousands of seconds, rather than milliseconds. (What's six orders of
+ magnitude among friends?) Both the above changes are triggered by a
+ problem reported at:
+ http://aspn.activestate.com/ASPN/Mail/Message/ActiveTcl/1536811
+ although the developers find it difficult to believe that it accounts
+ for the observed behavior and suspect a fault in the RTC chip.
+
+2003-02-13 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/tclWinInit.c: Added conversion from the system encoding to
+ tcl_platform(user), so that it works with non-ASCII7 user names. [Bug
+ 685926]
+
+ * doc/tclsh.1: Added language to describe the handling of the
+ end-of-file character \u001a embedded in a script file. [Bug 685485]
+
+2003-02-11 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fileName.test:
+ * unix/tclUnixFile.c: fix for [Bug 685445] when using 'glob -l' on
+ broken symbolic links. Added two new tests for this bug.
+
+2003-02-11 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * tests/http.test: Corrected a problem where http-4.14 would fail when
+ run in an environment with a proxy server. Replaced references to
+ scriptics.com by tcl.tk.
+
+2003-02-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/lsearch.test:
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): protect against the case
+ that lsearch -regepx list and pattern objects are equal.
+
+ * tests/stringObj.test:
+ * generic/tclStringObj.c (Tcl_GetCharLength): correct ascii char opt
+ of 2002-11-11 to not stop early on \x00. [Bug 684699]
+
+ * tests.parse.test: remove excess EOF whitespace
+
+ * generic/tclParse.c (CommandComplete): more paranoid check to break
+ on (p >= end) instead of just (p == end).
+
+2003-02-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c (CommandComplete):
+ * tests/parse.test: fix for [Bug 684744], by Don Porter.
+
+2003-02-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIOUtil.c (Tcl_FSJoinPath, Tcl_FSGetNormalizedPath):
+ (UpdateStringOfFsPath): revert the cwdLen == 0 check and instead
+ follow a different code path in Tcl_FSJoinPath.
+ (Tcl_FSConvertToPathType, Tcl_FSGetNormalizedPath):
+ (Tcl_FSGetFileSystemForPath): Update string rep of path objects before
+ freeing the internal object. (darley)
+
+ * tests/fileSystem.test: added test 8.3
+ * generic/tclIOUtil.c (Tcl_FSGetNormalizedPath):
+ (UpdateStringOfFsPath): handle the cwdLen == 0 case
+
+ * unix/tclUnixFile.c (TclpMatchInDirectory): simplify the hidden file
+ match check.
+
+2003-02-10 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure:
+ * win/configure.in: Generate error when attempting to build under
+ Cygwin. The Cygwin port of Tcl/Tk does not build and people are filing
+ bug reports under the mistaken impression that someone is actually
+ maintaining the Cygwin port. A post to comp.lang.tcl asking someone to
+ volunteer as an area maintainer has generated no results. Closing bugs
+ 680840, 630199, and 634772 and marking as "Won't fix".
+
+2003-02-10 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/append.n: Return value was not documented. [Bug 683188]
+
+2003-02-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * generic/tclIOUtil.c:
+ * generic/tclInt.h:
+ * tests/fileSystem.test:
+ * unix/tclUnixFCmd.c:
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c: further filesystem optimization, applying [Patch
+ 682500]. In particular, these code examples are faster now:
+ foreach f $flist { if {[file exists $f]} {file stat $f arr;...}}
+ foreach f [glob -dir $dir *] { # action and/or recursion on $f }
+ cd $dir
+ foreach f [glob *] { # action and/or recursion on $f }
+ cd ..
+
+ * generic/tclTest.c: Fix for [Bug 683181] where test suite left files
+ in 'tmp'.
+
+2003-02-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/safe.tcl: code cleanup of eval and string comp use.
+
+2003-02-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinFCmd.c: cleanup long lines
+ * win/tclWinFile.c: sped up pure 'glob' by a factor of 2.5
+ ('foreach f [glob *] { file exists $f }' is still slow)
+ * tests/fileSystem.text:
+ * tests/fileName.test: added new tests to ensure correct behaviour in
+ optimized filesystem code.
+
+2003-02-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclTest.c:
+ * tests/fileSystem.text: fixed test 7.2 to avoid a possible crash, and
+ not change the pwd.
+
+ * tests/http.text: added comment to test 4.15, that it may fail if you
+ use a proxy server.
+
+2003-02-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileIncrCmd):
+ * tests/incr.test: Don't include the text "(increment expression)" in
+ the errorInfo generated by the compiled version of the incr command
+ since it does not match the message generated by the non-compiled
+ version of incr. It is also not possible to match this error output
+ under Jacl, which does not support a compiler.
+
+2003-02-06 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): When an error is
+ encountered reading the increment value during a compiled call to
+ incr, add a "(reading increment)" error string to the errorInfo
+ variable. This makes the errorInfo variable set by the compiled incr
+ command match the value set by the non-compiled version.
+ * tests/incr-old.test: Change errorInfo result for the compiled incr
+ command case to match the modified implementation.
+ * tests/incr.test: Add tests to make sure the compiled and
+ non-compiled errorInfo messages are the same.
+
+2003-02-06 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Filename arguments to [outputChannel]
+ and [errorChannel] (also -outfile and -errfile) were [open]ed but
+ never [closed]. Also, [cleanupTests] could remove output or error
+ files. [Bug 676978].
+ * library/tcltest/pkgIndex.tcl: Bumped to version 2.2.2.
+
+2003-02-05 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/interp.test:
+ * tests/set-old.test: Run test cases that depend on hash order through
+ lsort so that the tests also pass under Jacl. Does not change test
+ results under Tcl.
+
+2003-02-04 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c:
+ * generic/tclEvent.c:
+ * generic/tclInt.h:
+ * mac/tclMacFCmd.c:
+ * unix/tclUnixFCmd.c:
+ * win/tclWin32Dll.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinInit.c:
+ * win/tclWinInt.h:
+ * tests/fileSystem.test: fix to finalization/unloading/encoding issues
+ to make filesystem much less dependent on encodings for its cleanup,
+ and therefore allow it to be finalized later in the exit process. This
+ fixes fileSystem.test-7.1. Also fixed one more bug in setting of
+ modification dates of files which have undergone cross-platform
+ copies. [Patch 676271]
+
+ * tests/basic.test:
+ * tests/exec.test:
+ * tests/fileName.test:
+ * tests/io.test: fixed some test failures when tests are run from a
+ directory containing spaces.
+
+ * tests/fileSystem.test:
+ * generic/tclTest.c: added regression test for the modification date
+ setting of cross-platform file copies.
+
+2003-02-03 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclBasic.c: Changed [trace add command] so that 'rename'
+ callbacks get fully qualified names of the command. [Bug 651271].
+ ***POTENTIAL INCOMPATIBILITY***
+ * tests/trace.test: Modified the test cases for [trace add command] to
+ expect fully qualified names on the 'rename' callbacks. Added a case
+ for renaming a proc within a namespace.
+ * doc/trace.n: Added language about use of fully qualified names in
+ trace callbacks.
+
+2003-02-01 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclCompCmds.c: Removed an unused variable that caused
+ compiler warnings on SGI. [Bug 664379]
+
+ * generic/tclLoad.c: Changed the code so that if Tcl_StaticPackage is
+ called to report the same package as being loaded in two interps, it
+ shows up in [info loaded {}] in both of them (previously, it didn't
+ appear in the static package list in the second).
+
+ * tests/load.test Added regression test for the above bug. [Bug
+ 670042]
+
+ * generic/tclClock.c: Fixed a bug that incorrectly allowed [clock
+ clicks {}] and [clock clicks -] to be accepted as if they were [clock
+ clicks -milliseconds].
+
+ * tests/clock.test: Added regression tests for the above bug. [Bug
+ 675356]
+
+ * tests/unixNotfy.test: Added cleanup of working files. [Bug 675609]
+
+ * doc/Tcl.n: Added headings to the eleven paragraphs, to improve
+ formatting in the tools that attempt to extract tables of contents
+ from the manual pages. [Bug 627455]
+
+ * generic/tclClock.c: Expanded mutex protection around the setting of
+ env(TZ) and the thread-unsafe call to tzset(). [Bug 656660]
+
+2003-01-31 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/tcltest.test: Cleaned up management of file/directory
+ creation/deletion to improve "-debug 1" output. [Bug 675614]
+ The utility [slave] command failed to properly [list]-quote a
+ constructed [open] command, causing failure when the pathname
+ contained whitespace. [Bug 678415]
+
+ * tests/main.test: Stopped main.test from deleting existing file. Test
+ suite should not delete files that already exist. [Bug 675660]
+
+2003-01-28 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/main.test: Constrain tests that do not work on Windows. [Bug
+ 674387]
+
+2003-01-28 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to setting modification date in
+ TclCrossFilesystemCopy. Also added 'panic' in
+ Tcl_FSGetFileSystemForPath under illegal calling circumstances which
+ lead to hard-to-track-down bugs.
+
+ * generic/tclTest.c: added test suite code to allow exercising a
+ vfs-crash-on-exit bug in Tcl's finalization caused by the encodings
+ being cleaned up before unloading occurs.
+ * tests/fileSystem.test: added new 'knownBug' test 7.1 to demonstrate
+ the crash on exit.
+
+2003-01-28 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tcl.h: Add TCL_PREFIX_IDENT and TCL_DEBUG_IDENT, used only
+ by TclpCreateProcess.
+ * unix/Makefile.in: Define TCL_DBGX.
+ * win/Makefile.in: Define TCL_DBGX.
+ * win/tclWinPipe.c (TclpCreateProcess): Check that the Tcl pipe dll
+ actually exists in the Tcl bin directory and panic if it is not found.
+ Incorporate TCL_DBGX into the Tcl pipe dll name. This fixes a really
+ mysterious error that would show up when exec'ing a 16 bit application
+ under Win95 or Win98 when Tcl was compiled with symbols. The error
+ seemed to indicate that the executable could not be found, but it was
+ actually the Tcl pipe dll that could not be found.
+
+2003-01-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update msys+mingw URL to release 6. This version bundles
+ gcc 3.
+
+2003-01-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Add test that checks to see if the compiler can
+ cast to a union type.
+ * win/tclWinTime.c: Squelch compiler warning about union initializer
+ by casting to union type when compiling with gcc.
+
+2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_CutChannel, Tcl_SpliceChannel): Invoke
+ TclpCutFileChannel and TclpSpliceFileChannel.
+ * generic/tclInt.h: Declare TclpCutFileChannel and
+ TclpSpliceFileChannel.
+ * unix/tclUnixChan.c (FileCloseProc, TclpOpenFileChannel,
+ (Tcl_MakeFileChannel, TclpCutFileChannel, TclpSpliceFileChannel):
+ Implement thread load data cut and splice for file channels. This
+ avoids an invalid memory ref when compiled with -DDEPRECATED.
+ * win/tclWinChan.c (FileCloseProc, TclpCutFileChannel,
+ (TclpSpliceFileChannel): Implement thread load data cut and splice for
+ file channels. This avoids an invalid memory ref that was showing up
+ in the thread extension.
+
+2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWin32Dll.c (TclpCheckStackSpace, squelch_warnings):
+ * win/tclWinChan.c (Tcl_MakeFileChannel, squelch_warnings):
+ * win/tclWinFCmd.c (DoRenameFile, DoCopyFile, squelch_warnings):
+ Re-implement inline ASM SEH handlers for gcc. The esp and ebp
+ registers are now saved on the stack instead of in global variables so
+ that the code is thread safe. Add additional checks when TCL_MEM_DEBUG
+ is defined to be sure the values were recovered from the stack
+ properly. Remove squelch_warnings functions and add a dummy call in
+ the handler methods to squelch compiler warnings.
+
+2003-01-25 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure:
+ * win/configure.in: Define HAVE_ALLOCA_GCC_INLINE when we detect that
+ no alloca function is found in malloc.h and we are compiling with GCC.
+ Remove HAVE_NO_ALLOC_DECL define.
+ * win/tclWin32Dll.c (TclpCheckStackSpace): Don't define alloca as a
+ cdecl function. Doing this caused a tricky runtime bug because the
+ _alloca function expects the size argument to be passed in a register
+ and not on the stack. To fix this problem, we use inline ASM when
+ compiling with gcc to invoke _alloca with the size argument loaded
+ into a register.
+
+2003-01-24 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinDde.c (Dde_Init): clarified use of tsdPtr.
+ (DdeServerProc): better refcount handling of returnPackagePtr.
+
+ * generic/tclEvent.c (Tcl_Finalize): revert finalize change on
+ 2002-12-04 to correct the issue with extensions that have TSD needing
+ to finalize that before they are unloaded. This issue needs further
+ clarification.
+
+ * tests/unixFCmd.test: only do groups check on unix
+
+2003-01-24 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclStringObj.c: proper fixes for Tcl_SetObjLength and
+ Tcl_AttemptSetObjectLength dealing with string objects with both
+ pure-unicode and normal internal representations. Previous fix didn't
+ handle all cases correctly.
+ * generic/tclIO.c: Add 'Tcl_GetString()' to ensure the object has a
+ valid 'objPtr->bytes' field before manipulating it directly.
+
+ This fixes [Bug 635200] and [Bug 671138], but may reduce performance
+ of Unicode string handling in some cases. A further patch will be
+ applied to address this, once the code is known to be correct.
+
+2003-01-24 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Add test to see if alloca is undefined in
+ malloc.h.
+ * win/tclWin32Dll.c (TclpCheckStackSpace): Rework the SEH exception
+ handler logic to avoid using the stack since alloca will modify the
+ stack. This was causing a nasty bug that would set the exception
+ handler to 0 because it tried to pop the previous exception handler
+ off the top of the stack.
+
+2003-01-23 Donal K. Fellows <fellowsd@cs.man.ac.uk>
+
+ * doc/lset.n: Fixed fault in return values from lset in documentation
+ examples [SF Bug #658463] and tidied up a bit at the same time.
+
+2003-01-21 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/namespace.n (namespace inscope): Clarified documentation
+ [Patch 670110]
+
+2003-01-21 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Set SHLIB_SUFFIX so that
+ TCL_SHLIB_SUFFIX will be set to a useful value in the generated
+ tclConfig.sh. Set SHLIB_LD_LIBS to "" or '${LIBS}' based on the
+ --enable-shared flag. This matches the UNIX implementation.
+
+2003-01-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCkalloc.c: change %ud to %u as appropriate.
+
+2003-01-17 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinDde.c (DdeServerProc): Deallocate the Tcl_Obj returned by
+ ExecuteRemoteObject if it was not saved in a connection object.
+
+2003-01-17 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tcl.h: Revert earlier change that defined TCL_WIDE_INT_TYPE
+ as long long and TCL_LL_MODIFIER as L when compiling with mingw. This
+ change ended up causing some test case failures when compiling with
+ mingw.
+ * generic/tclObj.c (UpdateStringOfWideInt): Describe the warning
+ generated by mingw and why it needs to be ignored so that someone is
+ not tempted to "fix" this problem again in the future.
+
+2003-01-16 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Tcl_SetObjLength fix for when the object has
+ a unicode string rep. [Bug 635200]
+ * tests/stringObj.test: removed 'knownBug' constraint from test 14.1
+ now that this bug is fixed.
+
+ * generic/tclInt.h:
+ * generic/tclBasic.c:
+ * generic/tclCmdMZ.z:
+ * tests/trace.test: execution and command tracing bug fixes and
+ cleanup. In particular fixed [Bug 655645], [Bug 615043], [Bug 571385]
+ - fixed some subtle cleanup problems with tracing. This required
+ replacing Tcl_Preserve/Tcl_Release with a more robust refCount
+ approach. Solves at least one known crash caused by memory
+ corruption.
+ - fixed some confusion in the code between new style traces (Tcl
+ 8.4) and the very limited 'Tcl_CreateTrace' which existed before.
+ - made behaviour consistent with documentation (several tests even
+ contradicted the documentation before).
+ - fixed some minor error message details
+ - added a number of new tests
+
+2003-01-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinSerial.c (SerialOutputProc): add casts for bytesWritten to
+ allow strict compilation (no warnings).
+
+ * tests/winDde.test:
+ * win/tclWinDde.c (Tcl_DdeObjCmd): Prevent crash when empty service
+ name is passed to 'dde eval' and goto errorNoResult in request and
+ poke error cases to free up any allocated data.
+
+2003-01-16 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWin32Dll.c (squelch_warnings): Squelch compiler warnings from
+ SEH ASM code.
+ * win/tclWinChan.c (squelch_warnings): Squelch compiler warnings from
+ SEH ASM code.
+ * win/tclWinDde.c: Add casts to avoid compiler warnings. Pass pointer
+ to DWORD instead of int to avoid compiler warnings.
+ * win/tclWinFCmd.c (squelch_warnings): Add casts and fixup decls to
+ avoid compiler warnings. Squelch compiler warnings from SEH ASM code.
+ * win/tclWinFile.c: Add casts and fixup decls to avoid compiler
+ warnings. Remove unused variable.
+ * win/tclWinNotify.c: Declare as DWORD instead of int to avoid
+ compiler warning.
+ * win/tclWinReg.c: Add casts to avoid compiler warning. Fix assignment
+ in if expression bug.
+ * win/tclWinSerial.c: Add casts to avoid compiler warnings. Remove
+ unused variable.
+ * win/tclWinSock.c: Add casts and fixup decls to avoid compiler
+ warnings.
+
+2003-01-14 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclClock.c (FormatClock): corrected typo that incorrectly
+ conditionally defined savedTZEnv and savedTimeZone.
+
+2003-01-13 Mo DeJong <mdejong@users.sourceforge.net>
+
+ Fix mingw build problems and compiler warnings.
+
+ * generic/tcl.h: Add if defined(__MINGW32__) check to code that sets
+ the TCL_WIDE_INT_TYPE and TCL_LL_MODIFIER.
+ * generic/tclClock.c (FormatClock): Don't define savedTimeZone and
+ savedTZEnv if we are not going to use them.
+ * generic/tclEnv.c: Add cast to avoid warning.
+ * win/tclWinChan.c: Use DWORD instead of int to avoid compiler warning
+ * win/tclWinThrd.c: Only define allocLock, allocLockPtr, and dataKey
+ when TCL_THREADS is defined. This avoid a compiler warning about
+ unused variables.
+
+2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update msys + mingw URL, the new release includes the
+ released 1.0.8 version of msys which includes a number of bug fixes.
+
+2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Pull in addition of shell32.lib to
+ LIBS_GUI that was added to the Tk tcl.m4 but never made it back into
+ the Tcl version.
+
+2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tcl.h: Skip Tcl's define of CHAR, SHORT, and LONG when
+ HAVE_WINNT_IGNORE_VOID is defined. This avoids a bunch of compiler
+ warnings when building with Cygwin or Mingw.
+ * win/configure: Regen.
+ * win/configure.in: Define HAVE_WINNT_IGNORE_VOID when we detect a
+ winnt.h that still defines CHAR, SHORT, and LONG when VOID has already
+ been defined.
+ * win/tcl.m4 (SC_LOAD_TCLCONFIG): Subst the TCL_DEFS loaded from
+ tclConfig.sh so that Tcl defines can make it into the Tk Makefile.
+
+2003-01-12 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Check for typedefs like LPFN_ACCEPT in winsock2.h
+ and define HAVE_NO_LPFN_DECLS if not found.
+ * win/tclWinSock.c: Define LPFN_* typedefs if HAVE_NO_LPFN_DECLS is
+ defined. This fixes the build under Mingw and Cygwin, it was broken by
+ the changes made on 2002-11-26.
+
+2003-01-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c:
+ * win/tclWinInt.h:
+ * win/tclWinInit.c: fix to new WinTcl crash on exit with vfs,
+ introduced on 2002-12-06. Encodings must be cleaned up after the
+ filesystem.
+
+ * win/makefile.vc: fix to minor VC++ 5.2 syntax problem
+
+2003-01-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): Corrected off-by-one
+ problem with recent commit. [Bug 633204]
+
+2003-01-09 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: remove unused variable 'macSpecialCase'
+ [Bug 664749]
+
+ * generic/tclIOUtil.c:
+ * generic/tclInt.h:
+ * unix/tclUnixFile.c:
+ * mac/tclMacFile.c:
+ * win/tclWinFile.c:
+ * win/tclWinInt.h:
+ * win/tclWin32Dll.c:
+ * tests/cmdAH.test: fix to non-ascii chars in paths when setting mtime
+ and atime through 'file (a|m)time $path $time'. [Bug 634151]
+
+2003-01-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExprFloatError): Use the IS_NAN macro for
+ greater clarity of code.
+
+2003-01-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd):
+ * tests/compile.test: Corrects failure of bytecompiled [catch
+ {return}] to have result TCL_RETURN (not TCL_OK) [Bug 633204]. This
+ patch is a workaround for 8.4.X. A new opcode INST_RETURN is a better
+ long term solution for 8.5 and later.
+
+2003-01-04 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc:
+ * win/rules.vc: Fixed INSTALLDIR macro problem that blanked itself by
+ accident causing the install target to put the tree at the root of the
+ drive built on. Whoops..
+
+ Renamed the 'linkexten' option to be 'staticpkg'. Added 'thrdalloc' to
+ allow the switching _on_ of the thread allocator. Under testing, I
+ found it not to be benificial under windows for the purpose of the
+ application I was using it for. It was more important for this app
+ that resources for tcl threads be returned to the system rather than
+ saved/moved to the global recycler. Be extra clean or extra fast for
+ the default threaded build? Let's move to clean and allow it to be
+ switched on for users who find it benificial for their use of threads.
+
+ ******************************************************************
+ *** 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" ***
+ ******************************************************************
diff --git a/ChangeLog.2004 b/ChangeLog.2004
new file mode 100644
index 0000000..82acd5c
--- /dev/null
+++ b/ChangeLog.2004
@@ -0,0 +1,4619 @@
+2004-12-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tcl.m4, win/configure: update MSVC CFLAGS_OPT to -O2, remove -Gs
+ (included in -O2) and -GD (outdated). Use "link -lib" instead of "lib"
+ binary and remove -YX for MSVC7 portability. Add -fomit-frame-pointer
+ for gcc OPT compiles. [Bug 1092952, 1091967] Align LIBS_GUI with Tk
+ head needs.
+
+2004-12-29 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclDate.c: Regen
+ * generic/tclGetDate.y (TclDatelex): Fixed a problem where a
+ four-digit group with >=2 leading zeroes appeared to be a two-digit
+ group, leading to misinterpreting the time 0012 as 1200. [Bug 1090413]
+ * library/clock.tcl: Added code to interpret correctly months outside
+ the range 01-12 as reduced modulo 12 with a corresponding adjustment
+ to the year. [Bug 1092789]
+ * tests/clock.test: Added regression test cases for the above two bugs
+ * unix/Makefile.in: Added --no-lines to the 'bison' command line to
+ * win/Makefile.in: help constrain the number of diffs in a cvs checkin
+
+2004-12-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclLiteral.c:
+ * generic/tclProc.c:
+ Avoid sharing cmdName literals accross namespaces, and generalise
+ usage of the TclRegisterNewLiteral macro. [Patch 1090905]
+
+2004-12-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: moved TclInitCompiledLocals to tclProc.c
+ * generic/tclProc.c: new static InitCompiledLocals to allow for a
+ single pass over the proc's arguments at proc load time (instead of
+ two as previously). TclObjInterpProc() now allocates the
+ compiledLocals on the tcl execution stack, using the new
+ TclStackAlloc/Free functions.
+
+2004-12-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (Tcl_LimitSetTime, TimeLimitCallback):
+ (TclLimitRemoveAllHandlers, TclInitLimitSupport): Set a timer event to
+ trigger when the time limit runs out. All the time limit actually does
+ is check to see if the time limit has been exceeded, but this is
+ enough to fix [Bug 1085023].
+ * generic/tclInt.h (struct Interp): Added a field to hold the token
+ for the timer event handler associated with the current time limit.
+ * generic/tclEvent.c (Tcl_UpdateObjCmd, Tcl_VwaitObjCmd): Add error
+ message when limit exceeded.
+ * tests/interp.test (interp-34.[89]): Check that time limits handle
+ the two cases reported in [Bug 1085023]
+
+ * generic/tclTimer.c (TclCreateAbsoluteTimerHandler): New internal
+ function that allows setting a timer handler that will be triggered at
+ (or after) a specific time instead of at some number of milliseconds
+ in the future. This is a candidate for future exposure via a TIP.
+
+2004-12-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclNamesp.c:
+ * generic/tclProc.c:
+ * generic/tclStubInit.c:
+ * generic/tclTest.c: Added two new functions to allocate memory from
+ the execution stack (TclStackAlloc, TclStackFree). Added functions
+ TclPushStackFrame and TclPopStackFrame that do the work of
+ Tcl_PushCallFrame and Tcl_PopCallFrame, but using frames allocated in
+ the execution stack - i.e., heap instead of C-stack. The core uses
+ these two new functions exclusively; the old ones remain for backwards
+ compat, as at least two popular extensions (itcl, xotcl) are known to
+ use them.
+
+2004-12-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c:
+ * generic/tclInt.h:
+ * generic/tclProc.c:
+ * generic/tclVar.c: changing the isProcCallFrame field of the
+ CallFrame struct from a 0/1 field to flags. Should be perfectly
+ backwards compatible.
+
+2004-12-14 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/configure.in: Added special processing to remove "$U" from
+ libraries in the LIBOBJS value. This is an auto-make-ism we need to
+ avoid. [Bug 1081541]
+
+ * unix/configure: autoconf-2.57
+
+2004-12-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Restored extern "C" guards so that C++ code sees
+ function pointer typedef linkage consistent with earlier Tcl releases.
+ [Bug 1082349]
+
+ * generic/tclEncoding.c: Plugged some memory leaks. Thanks to Rolf Ade
+ * generic/tclUtil.c: for reports and testing [Bug 1083082]
+
+2004-12-13 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n: Clarify that the [clock scan] command does not accept
+ the full range of ISO8601 point-in-time formats. [Bug 1075433]
+
+2004-12-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclArrayObjCmd - ARRAY_NAMES): leaking an object
+ [Bug 1084111] - thanks to Rolf Ade.
+
+2004-12-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclObj.c (TclSetCmdNameObj): special handling for fully
+ qualified command names (as in fix [Patch 456668]).
+
+2004-12-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclNamesp.c: converting the static function
+ GetNamespaceFromObj() to MODULE_SCOPE TclGetNamespaceFromObj().
+
+2004-12-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/tcl.wse.in, unix/tcl.spec, win/README.binary, README:
+ * win/configure.in, unix/configure.in, generic/tcl.h:
+ Bumped version number to 8.5a3 to distinguish HEAD of CVS development
+ from the recent 8.5a2 release.
+
+2004-12-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclInitCompiledLocals):
+ * generic/tclCompile.h:
+ * generic/tclInt.h:
+ * generic/tclProc.c (TclObjInterpProc, TclCreateProc): optimised
+ loops that initialise a proc's arguments and compiled local
+ variables, removing tests from inner loops.
+
+2004-12-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h: Move ensemble API decls here from tclNamesp.c
+
+2004-12-09 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (TclMakeEnsembleCmd, TclSetEnsemble*)
+ (TclSetEnsemble*, TclFindEnsemble): Build an internal API for creating
+ and manipulating ensembles; they can be deleted using the normal
+ command-deletion API.
+
+ * doc/Async.3: Reword for better grammar, better nroff and get the
+ flag name right. (Reported by David Welton.)
+
+2004-12-07 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test (2.1-4): Added constraints so that when a value
+ of TCL_LIBRARY is required for process initialization, we skip the
+ tests that mess with that value.
+
+2004-12-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ *** 8.5a2 TAGGED FOR RELEASE ***
+
+ * unix/Makefile.in: add library/{tzdata,msgs} to dist target (kbk)
+
+ * doc/foreach.n: Adjust tabs to be friendlier to some HTML
+ converters. [Bug 1078760]
+
+2004-12-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixNotfy.c (NotifierThreadProc): init numFdBits
+ [Bug 1079286]
+
+ * doc/error.n, doc/SaveResult.3, doc/Thread.3: minor nroff typos
+
+2004-12-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/safe.test: Trim auto_path to improve performance [1080039]
+
+ * tests/msgcat.test: makeFile/removeFile cleanup [1079117]
+
+2004-12-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Different fix for [Bug 1077005].
+ * generic/tclEvent.c: Broke apart TclpSetInitialEncodings() on
+ * generic/tclInt.h: Windows into TclpSetInterfaces(), that is
+ * unix/tclUnixInit.c: fundamentally essential, and the initialization
+ * win/tclWinInit.c: of the system encoding, which is not. Made
+ the TclpSetInterfaces call part of TclInitSubsystems so it cannot be
+ overlooked.
+
+2004-12-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * changes: updated for 8.5a2 release
+
+2004-12-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c (TclSetProcessGlobalValue): Handle the case where
+ a ProcessGlobalValue might be assigned to itself.
+
+ * generic/tclEncoding.c (MakeFileMap): Correct refcounting errors
+ managing values returned by TclPathPart (with refCount of 1!) that led
+ to a memory leak. [Bug 1077474].
+
+2004-12-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix and new tests for [Bug 1074671] to ensure
+ * tests/fileSystem.test: tilde paths are not returned specially by
+ 'glob'.
+
+2004-12-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/Makefile.in: Added a 'sed' in the setting of ROOT_DIR_NATIVE to
+ compensate for a bug in cygpath (at least version 1.36) that leaves a
+ trailing backslash on the end of the converted path.
+
+2004-12-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (Alias,Target,Master): Rewrote these so that the
+ aliases that refer to an interpreter are stored in a list and not a
+ hashtable (which was only ever a convenience, and forced the use of a
+ global mutex to generate keys!) [FRQ 1077210]
+ * generic/tclNamesp.c (numNsCreated): Moved into thread-local storage
+ to remove a global mutex. [FRQ 1077210]
+
+2004-12-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c (TclGetProcessGlobalValue): Narrowed the scope of
+ mutex locks.
+
+ * generic/tclUtil.c: Updated Tcl_GetNameOfExecutable() to
+ * generic/tclEncoding.c: make use of a ProcessGlobalValue for
+ * generic/tclEvent.c: storing the executable name. Added
+ internal routines Tcl(Get|Set)ObjNameOfExecutable() to access that
+ storage in Tcl_Obj, rather than string format.
+
+ * unix/tclUnixFile.c: Rewrote TclpFindExecutable() to use
+ * win/tclWinFile.c: TclSetObjNameOfExecutable to store the
+ executable name it computes.
+
+ * generic/tclInt.h: Added internal stub entries for
+ * generic/tclInt.decls: TclpFindExecutable and
+ Tcl(Get|Set)ObjNameOfExecutable.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclCmdIL.c: Retrieve executable name in Tcl_Obj form
+ * win/tclWinPipe.c: instead of string form.
+
+ * unix/tclUnixTest.c: Update [testfindexecutable] command to use new
+ internal interfaces.
+
+ * generic/tclEncoding.c: Moved TclpSetInitialEncodings() call
+ from Tcl_FindExecutable() into TclInitEncodingSubsystem(). This is
+ important on Windows where it establishes whether the "ascii" or
+ "unicode" set of system routines will be used, and that needs to be
+ done earlier to support filesystem operations. [Bug 1077005]
+
+2004-12-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/winDde.test: Rewritten to use tcltest2 features more
+ thoroughly (reducing the [catch] count!) and fix the problem with
+ winDde-6.1 being out of synch with the implementation.
+
+2004-11-30 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl ([unknown]): Restored the save/restore of the
+ variables ::errorCode and ::errorInfo. This is needed when the
+ [::bgerror] command is auto-loaded (as it is by Tk).
+
+ Patch 976520 reworks several of the details involved with
+ startup/initialization of the Tcl library, focused on the activities
+ of Tcl_FindExecutable().
+
+ * generic/tclIO.c: Removed bogus claim in comment that encoding
+ "iso8859-1" is "built-in" to Tcl.
+
+ * generic/tclInt.h: Created a new struct ProcessGlobalValue,
+ * generic/tclUtil.c: routines Tcl(Get|Set)ProcessGlobalValue, and
+ function type TclInitProcessGlobalValueProc. Together, these take care
+ of the housekeeping for "values" (things that can be held in a
+ Tcl_Obj) that are global across a whole process. That is, they are
+ shared among multiple threads, and epoch and mutex protection must
+ govern the validity of cached copies maintained in each thread.
+
+ * generic/tclNotify.c: Modified TclInitNotifier() to tolerate being
+ called multiple times in the same thread.
+ * generic/tclEvent.c: Dropped the unused argv0 argument to
+ TclInitSubsystems(). Removed machinery to unsure only one
+ TclInitNotifier() call per thread, now that that is safe. Converted
+ Tcl(Get|Set)LibraryPath to use a ProcessGlobalValue, and moved them to
+ tclEncoding.c.
+ * generic/tclBasic.c: Updated caller.
+
+ * generic/tclInt.h: TclpFindExecutable now returns void.
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c:
+ * win/tclWinPipe.c:
+
+ * generic/tclEncoding.c: Built new encoding search initialization on a
+ foundation of ProcessGlobalValues, exposing new routines
+ Tcl(Get|Set)EncodingSearchPath. A cache of a map from encoding name to
+ directory pathname keeps track of where encodings are available for
+ loading. Tcl_FindExecutable greatly simplified into just three
+ function calls. The "library path" is now misnamed, as its only
+ remaining purpose is as a foundation for the default encoding search
+ path.
+
+ * generic/tclInterp.c: Inlined the initScript that is evaluated by
+ Tcl_Init(). Added verification after initScript evaluation that Tcl
+ can find its installed *.enc files, and that it has initialized
+ [encoding system] in agreement with what the environment expects.
+ [tclInit] no longer driven by the value of $::tcl_libPath; it largely
+ constructs its own search path now, rather than attempt to share one
+ with the encoding system.
+
+ * unix/tclUnixInit.c: TclpSetInitialEncodings factored so that a new
+ * win/tclWinInit.c: routine TclpGetEncodingNameFromEnvironment can
+ reveal that Tcl thinks the [encoding system] should be, even when an
+ incomplete encoding search path, or a missing *.enc file won't allow
+ that initialization to succeed. TclpInitLibraryPath reworked as an
+ initializer of a ProcessGlobalValue.
+
+ * unix/tclUnixTest.c: Update implementations of [testfindexecutable],
+ [testgetdefenc], and [testsetdefenc].
+
+ * tests/unixInit.test: Corrected tests to operate properly even when
+ a value of TCL_LIBRARY is required to find encodings.
+
+ * generic/tclInt.decls: New internal stubs: TclGetEncodingSearchPath,
+ TclSetEncodingSearchPath, TclpGetEncodingNameFromEnvironment. These
+ are candidates for public exposure by future TIPs.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclTest.c: Updated [testencoding] to use
+ * tests/encoding.test: Tcl(Get|Set)EncodingSearchPath. Updated tests.
+
+2004-11-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Corrected the regular expressions that match a
+ time zone to allow for time zones specified as +HH or -HH.
+ * tests/clock.test: Added regression test case for the above issue.
+ Thanks to Rolf Ade for reporting this issue [http://wiki.tcl.tk/13094]
+ * win/tclWinDde.c (Tcl_DdeObjCmd): Corrected a typo that caused a
+ compilation failure on VC++.
+
+2004-11-29 Andreas Kupries <andreask@activestate.com>
+
+ * win/Makefile.in (install-libraries): Brought entry '2004-10-26 Don
+ Porter (Tcl Modules)' into the windows world, actually the
+ win/configure buildsystem. The other windows buildsystems (.vc, .bc)
+ still have to be updated as well.
+
+2004-11-26 Andreas Kupries <andreask@activestate.com>
+
+ * win/tclWinDde.c (ExecuteRemoteObject): Removed bogus semicolon found
+ at the end of the header for the function definition, terminating it
+ early and preventing a compile. This is likely a fix for '2004-11-25
+ Donal'. I have to conclude that it is also unknown if the other
+ changes to this file actually pass the testsuite. Running testsuite
+ ... They don't. winDde-6.1 fails. This is only a message discrepance,
+ i.e. not too bad. Leaving resolution of that to Pat and Donal.
+
+2004-11-26 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl (tcl_findLibrary): Made sure the uniquifying
+ operations on the search path does not also normalize. [Bug 1072136]
+
+2004-11-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/configure.in: Simplify the code to check for correctness of
+ strstr, strtoul and strtod.
+ * unix/tcl.m4 (SC_TCL_CHECK_BROKEN_FUNC): Split a complex stanza out
+ of configure.in into its own function. Also force it to do the right
+ thing with cacheing of results of AC_TRY_RUN to deal with issue raised
+ in [Patch 1073524]
+
+ * doc/foreach.n: Added simple example. [FRQ 1073334]
+
+2004-11-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclProc.c (TclObjInterpProc): Make it so that only
+ * generic/tclIndexObj.c (Tcl_WrongNumArgs): [proc] instances do
+ * tests/indexObj.test (indexObj-5.7): quoting of their first
+ arguments, so keeping [Bug 942757] fixed and making [Bug 1066837] be
+ fixed as well. Done with a load of #ifdef-ery because this hack is so
+ ugly nobody should keep it around once Itcl's fixed.
+
+2004-11-25 Reinhard Max <max@suse.de>
+
+ * tests/tcltest.test: The order in which [glob] returns the file names
+ is undefined, so tests should not depend on it.
+
+2004-11-25 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * doc/Thread.3:
+ * doc/Notifier.3: Added changes from the core-8-4-branch
+
+2004-11-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/dde.n: Synchronized the documentation of the commands with the
+ header of the docs and what the package actually does. Thanks to
+ Andreas Kupries for spotting this.
+ * win/tclWinDde.c (Tcl_DdeObjCmd): Much cleanup of argument parsing
+ code.
+
+2004-11-24 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclPort.h: Relative include of tclWinPort.h returned as it
+ was requiring me set -I$(tcl_root)/win for my extensions that need to
+ include tclInt.h and doesn't appear to serve any purpose for windows
+ builds.
+
+2004-11-24 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Corrected bad check for 3-argument
+ readdir_r [Bug 1001325].
+ * unix/configure: Regenerated.
+ * unix/tclUnixNotfy.c: Corrected all uses of 'select' to manage their
+ masks using the FD_CLR, FD_ISSET, FD_SET, and FD_ZERO macros rather
+ than bit-whacking that failed under Solaris-Sparc-64. [Bug 1071807]
+ * win/tclWinInit.c (TclpInitLibraryPath): Removed unused vars 'pathc'
+ and 'pathv' that caused compilation problems on VC++ with
+ --enable-symbols.
+
+2004-11-24 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Corrected failure to determine the
+ number of arguments for readdir_r on SunOS systems. [Bug 1071701]
+
+ * unix/configure: autoconf-2.57
+
+ * generic/tclCmdIL.c (InfoVarsCmd): Corrected segfault in new
+ * tests/info.test (info-19.6): trivial matching branch [Bug 1072654]
+
+2004-11-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/man2html.tcl, tools/man2html1.tcl: Update to use Tcl 8.4.
+ * tools/man2html2.tcl: Fix broken .SS handling.
+
+2004-11-23 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/Makefile.in: Add (commented-out) code to integrate tclConfig.h
+ into the dependency tree and 'make distclean'. [Bug 1068171]
+
+ * generic/tclResult.c (Tcl_AppendResultVA): Remove call to
+ Tcl_GetStringResult to speed up repeated calls to Tcl_AppendResult
+ with the side effect that code that wants to access interp->result
+ should always call Tcl_GetStringResult first. See [Patch 1041072]
+ discussion for more details.
+
+2004-11-22 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_TCL_64BIT_FLAGS): Define HAVE_TYPE_OFF64_T only when
+ off64_t, open64(), and lseek64() are defined. IRIX 5.3 is known to not
+ include an open64 function. [Bug 1030465]
+
+2004-11-22 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_ENABLE_THREADS): Check for a 2 argument version of
+ readdir_r that is known to exists under IRIX 5.3.
+ * unix/tclUnixThrd.c (TclpReaddir): Use either 2 arg or 3 arg version
+ of readdir_r. [Bug 1001325]
+
+2004-11-22 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixInit.c (TclpInitLibraryPath): Purged dead code that used
+ * win/tclWinInit.c (TclpInitLibraryPath): to extend the "library
+ path". Search path construction for init.tcl is now done within the
+ [tclInit] proc.
+ * generic/tclInterp.c: Restored several directories to the search
+ * tests/unixInit.test: path used to locate init.tcl within [tclInit].
+ This change does not restore any directories to the encoding search
+ path, so should still avoid the price of an unreasonably large number
+ of filesystem accesses during encoding initialization at startup
+ [Bug 976438]
+
+2004-11-22 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix and new test for [Bug 1043129] in the
+ * tests/fileSystem.test: treatment of backslashes in file join on
+ Windows.
+
+2004-11-21 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/AddErrInfo.3: Typo corrections (Thanks Daniel South).
+ * doc/interp.n:
+
+2004-11-19 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/AddErrInfo.3: Docs for Tcl_(Get|Set)ReturnOptions. [TIP 227]
+
+ * doc/AddErrInfo.3:
+ * doc/Async.3: Documentation updates to replace references
+ * doc/BackgdErr.3: to global variable ::errorInfo and ::errorCode
+ * doc/SaveResult.3: and to the ::bgerror command with references
+ * doc/after.n: to their preferred replacements, the
+ * doc/bgerror.n: -errorinfo and -errorcode return options,
+ * doc/error.n: the Tcl_*InterpState routines, and the
+ * doc/exec.n: [interp bgerror] command.
+ * doc/exit.n:
+ * doc/fileevent.n:
+ * doc/interp.n:
+ * doc/return.n:
+ * doc/tclvars.n:
+ * doc/update.n:
+
+ * tests/unixInit.test: Removed "knownBug" constraints to prompt bug
+ fixing before 8.5a2 release.
+
+2004-11-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile:
+ * unix/configure.in:
+ * unix/tclUnixInit.c (MacOSXGetLibraryPath): changed detection of tcl
+ framework build when determining tclLibPath from overloaded
+ TCL_LIBRARY to configuration define TCL_FRAMEWORK. [Bug 1068088]
+
+ * unix/configure: autoconf-2.57
+ * unix/tclConfig.h.in: autoheader-2.57
+
+2004-11-18 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/SaveResult.3: Documentation for Tcl_*InterpState (TIP 226).
+
+ * generic/tclEvent.c (HandleBgErrors): Simplified program flow.
+
+ * tests/basic.test: Updated functional (not testing) uses of
+ * tests/io.test: [bgerror] to make use of [interp bgerror].
+ * tests/socket.test:
+ * tests/timer.test:
+
+ * tests/interp.test (interp-36.*): [interp bgerror] tests.
+
+ * generic/tclInterp.c: Corrected [interp bgerror] error messages.
+
+2004-11-18 Reinhard Max <max@suse.de>
+
+ * unix/tcl.m4 (SC_CONFIG_MANPAGES): Applied an improved version of
+ * unix/configure.in: [Patch 996085], that introduces
+ * unix/Makefile.in: --enable-man-suffix.
+
+ * unix/installManPage: added
+ * unix/mkLinks.tcl: removed
+ * unix/mkLinks: removed
+ * unix/configure: generated
+
+ * unix/Makefile.in: Don't install tclConfig.h .
+
+2004-11-17 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/configure.in: The change below reveals that the public data
+ type Tcl_StatBuf relies on config information. For now, disabled the
+ use of the tclConfig.h file until its full impact on Tcl's interface
+ can be assessed.
+
+ * unix/configure: autoconf-2.57
+
+ * generic/tcl.h: Moved the #include "tclConfig.h" out of
+ * generic/tclInt.h: tcl.h. The config settings are not part of
+ * generic/tclPort.: the public interface, and having it there
+ breaks compiled against uninstalled Tcl and extensions using
+ autoconf-2.5*.
+
+2004-11-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixChan.c (TtySetOptionProc): fixed crash configuring
+ -ttycontrol on a channel. [Bug 1067708]
+
+2004-11-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOUtil.c (TclFSEpochOk): There were two code paths via
+ which the thread copy of filesystemEpoch could be synched with the
+ master copy, but only one kept the filesystem list cache up to date.
+ Fix routes everything through a single code path. [Bug 1035775].
+
+2004-11-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Stop architecture flags to 'ld' from
+ getting lost when [load] is disabled. [Bug 1016796]
+
+2004-11-16 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.h:
+ * unix/configure.in: changed HAVE_CONFIG_H to HAVE_TCL_CONFIG_H.
+
+ * unix/configure: autoconf-2.57
+
+2004-11-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Added comment warning that the old ERR_IN_PROGRESS
+ and ERROR_CODE_SET flag values should not be re-used for the sake of
+ those extensions that have accessed them.
+
+ * generic/tclCmdMZ.c (Tcl_TraceObjCmd): Fixed Bug 1065378 which failed
+ * tests/trace.test (trace-33.1): to permit a variable trace
+ created with [trace variable] to be destroyed with [trace remove].
+ Thanks to Keith Vetter for the report.
+
+2004-11-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/tclvars.n: Added section to documentation on global variables
+ that are specific to tclsh and wish. [Patch 1065732]
+
+2004-11-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEncoding.c (TableFromUtfProc): correct crash condition
+ when TCL_UTF_MAX == 6. [Bug 1004065]
+
+2004-11-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/interp.n: Basic documentation of the TIP#221 API.
+
+2004-11-12 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #221 IMPLEMENTATION
+ * generic/tclBasic.c: Define [::tcl::Bgerror] in new interps.
+ * generic/tclEvent.c: Update Tcl_BackgroundError to make use of the
+ registered [interp bgerror] command.
+ * generic/tclInterp.c: New [interp bgerror] subcommand.
+ * tests/interp.test: syntax tests updated.
+
+ TIP #226 IMPLEMENTATION
+ * generic/tcl.decls: Stubs for Tcl_(Save|Restore|Discard)InterpState
+ * generic/tcl.h: New public opaque type, Tcl_InterpState.
+ * generic/tclInt.h: Drop old private declarations. Add
+ Tcl(Get|Set)BgErrorHandler
+ * generic/tclResult.c: Tcl_*InterpState implementations.
+ * generic/tclDictObj.c: Update callers.
+ * generic/tclIOGT.c:
+ * generic/tclTrace.c:
+
+ TIP #227 IMPLEMENTATION
+ * generic/tcl.decls: Stubs for Tcl_(Get|Set)ReturnOptions.
+ * generic/tclInt.h: Drop old private declarations.
+ * generic/tclResult.c: Tcl_*ReturnOptions implementations.
+ * generic/tclCmdAH.c: Update callers.
+ * generic/tclMain.c:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * unix/tclAppInit.c: Removed tclConfig.h #include, now that tcl.h
+ takes care of it for us.
+
+ * generic/tclInt.h: Moved verification of ptrdiff_t typedef from
+ * generic/tclExecute.c: multiple .c files into one common header where
+ * generic/tclVar.c: it is verifiably after tclConfig.h inclusion.
+
+2004-11-12 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.h:
+ * generic/tclInt.h:
+ * unix/Makefile.in: include tclConfig.h from tcl.h and install it as a
+ public header. Normalized compiler include path order to
+ -I${BUILD_DIR} -I${UNIX_DIR} -I${GENERIC_DIR}.
+
+ * unix/dltest/Makefile.in: add ${BUILD_DIR}/.. to include path to pick
+ up tclConfig.h.
+
+ * unix/tclUnixInit.c: moved check for HAVE_CFBUNDLE define after
+ #include "tclInt.h" to ensure tclConfig.h has been included.
+
+2004-11-12 Reinhard Max <max@suse.de>
+
+ * unix/config.h.in:
+ * unix/tclConfig.h.in: renamed
+
+ * unix/Makefile.in: Completed support for config header,
+ * unix/configure.in: fixed building outside of the unix dir,
+ * unix/tclAppinit.c: and reflected the name change of config.h.
+ * generic/tclInt.h:
+
+ * unix/configure: generated
+
+2004-11-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/config.h.in: Allow configure to put all the C #defs into
+ * unix/configure.in: a file (called config.h) so that Unix builds
+ * unix/tcl.m4: now take far fewer lines of scrollback to
+ * unix/Makefile.in: proceed (making it less likely that any errors
+ * generic/tclInt.h: or warnings will get missed).
+ * unix/tclAppInit.c: Part of the TIP#34 upgrades.
+
+ * unix/tcl.m4, unix/tclUnixPort.h: Check for pthread_attr_get_np in
+ <pthread.h> before forcing the use of <pthread_np.h> to make things
+ work on NetBSD 2.0. [Bug 1064882]
+
+ * doc/binary.n, doc/upvar.n: More minor fixes.
+
+2004-11-12 Daniel Steffen <das@users.sourceforge.net>
+
+ * doc/CrtChannel.3:
+ * doc/Interp.3:
+ * doc/Limit.3:
+ * doc/binary.n:
+ * doc/dict.n:
+ * doc/tm.n:
+ * doc/upvar.n: fixed *roff errors uncovered by running 'make html'.
+
+ * tools/tcltk-man2html.tcl: added faked support for bullet point
+ lists, i.e. *nroff ".IP \(bu" syntax.
+
+2004-11-11 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/fCmd.test:
+ * unix/tclUnixFCmd.c (TraverseUnixTree): added option to rewind() the
+ readdir() loop whenever the source hierarchy has been modified by
+ traverseProc (e.g. by deleting files); this is required to ensure
+ complete traversal of the source hierarchy on certain filesystems like
+ HFS+. Added test for failing recursive delete on Mac OS X that was due
+ to this. [Bug 1034337]
+
+ * generic/tclListObj.c (Tcl_ListObjReplace): use memmove() instead of
+ manual copy loop to shift list elements. Decreases time spent in
+ Tcl_ListObjReplace() from 5.2% to 1.7% of overall runtime of tclbench
+ on a ppc 7455 (i.e. 200% speed increase). [Patch 1064243]
+
+ * generic/tclHash.c: hoisted some constant pointer dereferences out of
+ loops to eliminate redundant loads that the gcc optimizer didn't deal
+ with. Decreases time spend in Tcl_FindHashEntry() by 10% over a full
+ run of the tcl testuite on a ppc 7455. [Patch 1064243]
+
+ * tests/fileName.test:
+ * tests/fileSystem.test:
+ * tests/io.test:
+ * tests/msgcat.test:
+ * tests/tcltest.test:
+ * tests/unixInit.test: fixed bugs causing failures when running tests
+ with -tmpdir arg not set to working dir.
+
+ * macosx/Makefile: corrected path to html help inside framework.
+ Prevent parallel make from building several targets at the same time.
+
+ * macosx/tclMacOSXFCmd.c (struct fileinfobuf): force struct to be
+ packed to prevent failures when builing with -malign=natural.
+
+2004-11-10 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixChan.c: [Bug 727786]. Exterminated the code marked
+ DEPRECATED. This code has not been used in over a year now, and we
+ have no complaints.
+
+2004-11-08 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c: The pipe channel driver now respects the -blocking
+ option when closing is the same way the UNIX side works. This is to
+ avoid a hung shell when exiting due to open pipes that refuse to close
+ in a graceful manner.
+ * doc/open.n: Added a note about -blocking 0 and lack of exit status
+ as it had never been documented. [Bug 947693]
+
+ ***POTENTIAL INCOMPATIBILITY***
+
+ Scripts that use async pipes on windows, must (like the UNIX side) set
+ -blocking to 1 before calling [close] to receive the exit status.
+
+2004-11-07 David Gravereaux <davygrvy@pobox.com>
+
+ * tests/winFile.test: added contraint to winFile-4.0 to prevent it
+ being run on NT4 [Bug 981829]
+
+2004-11-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/reg.test: Major reorganization so that this file is much
+ easier for a normal Tcl maintainer to comprehend. The test flags are
+ still very cryptic, but they appear to have to be that way. The number
+ of skipped tests has increased, but now the skipped tests have much
+ more meaningful content.
+
+ * tests/tm.test (genpaths): Add a [file normalize] so we pick up
+ Windows drive letters, etc. [Bug 1053568]
+
+2004-11-04 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates toward an 8.5a2 release.
+
+2004-11-03 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (FreeScan): Fixed a bug where scanning "Monday"
+ with a base time other than midnight incorrectly carried the base time
+ forward.
+
+ * test/clock.test (clock-33.{5,5a}): Made the test failure more
+ informative.
+
+ * tests/clock.test (clock-34.{28,44,45,46}): Removed 'knownBug'
+ constraints from tests that no longer fail.
+
+ Thanks to Don Porter for reporting these.
+
+2004-11-03 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tcl.h: Moved the preprocessor logic
+ * generic/tclDecls.h: from tclInt.h of setting the
+ * generic/tclInt.h: TCL_STORAGE_CLASS macro to the
+ * generic/tclIntDecls.h: tcl*Decls.h files now that no
+ * generic/tclIntPlatDecls.h: use of EXTERN is left in tclInt.h.
+ * generic/tclPlatDecls.h: Proto for Tcl_Main moved in tcl.h
+ * win/tclWinPort.h: to prior the inclusion of the Stubs
+ headers as they are now resetting TCL_STORAGE_CLASS. Removed
+ extraineous reset from tclWinPort.h. [Patch 1055668]
+
+ * generic/tclCompile.h: Removed extrainious reset of TCL_STORAGE_CLASS
+ missed in my last edit.
+
+2004-11-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl ([unknown]): Corrections to the 2004-10-25 mods to
+ Aunt ??? in [unknown]. Flaws revealed by Itcl test suite, which still
+ apparently relies on this brokenness. Also added comment suggesting
+ the error message that any code using this hack *ought* to receive in
+ reply.
+
+ * generic/tclTrace.c (TclCallVarTraces): Improved ability to debug
+ * tests/incr-old.test (incr-old-2.6): errors during variable
+ * tests/incr.test (incr-{1,2}.28): traces by preserving the
+ * tests/set.test (set-{2,4}.4): -errorinfo data.
+ * tests/trace.test (trace-33.1): [Bug 527164]
+
+2004-11-02 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclInt.h: added a check for #ifdef __cplusplus around the
+ #define of MODULE_SCOPE. About the only time it would be problem is
+ when someone is statically linking to Tcl and accessing internals from
+ a C++ file and has name mangling issues from the lack of "C" after
+ 'extern' [Patch 1055668].
+ * generic/tclCompile.h: Exchanged use of the EXTERN macro to the new
+ MODULE_SCOPE macro. Lowered exported internals count by 35. [Patch
+ 1055668]
+ * win/tclWinInt.h:
+ * win/tclWinPort.h: exported internals dropped by a count of 14.
+ * generic/tclFileSystem.h: Added use of MODULE_SCOPE on protos.
+ * generic/tclRegexp.h: manipulating TCL_STORAGE_CLASS unnecessary.
+
+2004-11-02 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected some misleading
+ * tests/tcltest.test (tcltest-26.1,2): displays of ::errorInfo and
+ ::errorCode information when the -setup, -body, and/or -cleanup scripts
+ return an unexpected return code. Thanks to Robert Seeger for the fix.
+ [RFE 1017151].
+
+2004-11-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Improved version of the
+ NaN fix from Miguel Sofer. [Bug 761471]
+
+2004-11-02 Kevin Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Cuiaba: Change to DST rules for
+ * library/tzdata/America/Havana: autumn of 2004.
+ [ftp://elsie.nci.nih.gov/pub/tzdata2004g.tar.gz]
+
+ * tools/tclZIC.tcl: Updated to be compatible with recent changes in
+ library/clock.tcl.
+
+2004-11-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinFile.c: Simplify TclpUtime to use Tcl_FSGetNativePath, and
+ add comments.
+
+2004-11-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInt.h: Change uses of EXTERN to MODULE_SCOPE (defined in
+ this file too to be 'extern' if not overridden) as nothing declared in
+ tclInt.h is supposed to be visible outside the Tcl core. If there *is*
+ anything that extensions are actually using, we can open this up later
+ on. [Patch 1055668]
+
+ * doc/CrtChannel.3 (Tcl_GetChannelMode): Add synopsis. [Bug 1058446]
+
+2004-11-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinFile.c (FromCTime, TclpUtime): Replaced a call to the
+ Posix 'utime' function with calls to Windows-API equivalents, to avoid
+ a bug where the VC++ versions misconvert times across a Daylight
+ Saving Time boundary. [Bug 926106]
+ * win/tclWinInt.h (TclWinProcs):
+ * win/tclWin32Dll.c (asciiProcs, unicodeProcs): Removed now-unused
+ reference to 'utime'.
+ * tests/cmdAH.test (cmdAH-24.12): Added test case for the above bug.
+
+2004-11-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Make INST_EQ and friends
+ handle NaN correctly in all cases. [Bug 761471]
+
+ * generic/tclNamesp.c (NamespaceInscopeCmd): Make the error message
+ generation the same as in NamespaceEvalCmd().
+ (Tcl_Import): Rationalized to use Tcl_EvalObjv().
+
+2004-10-31 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/io.test (io-40.3): Convert umask2 test constraint into a form
+ that most people will be able to satisfy.
+
+ * tests/cmdAH.test (cmdAH-8.45): Removed broken test constraint. It
+ didn't do what it was intended to do, and it implied the other correct
+ constraint. [Bug 1053908]
+
+ * generic/tclCmdIL.c (InfoGlobalsCmd):
+ * tests/info.test (info-8.4): Strip leading global-namespace
+ specifiers from the pattern argument. [Bug 1057461]
+
+2004-10-30 Kevin Kenny <kennykb@acm.org>
+
+ * generic/clock.c: Replaced WIN32 macro with __WIN32__. [Bug 1054357].
+ Thanks to David Gravereaux for the patch.
+ * win/tclWinFile.c: Removed a long-standing bug that causes incorrect
+ conversion between file time and UTC time if the file time is recorded
+ in a different Daylight Saving Time status than the current one. [Bug
+ 926106]
+
+2004-10-29 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Correct reaction to errors in the
+ obsolete processCmdLineArgsHook. [Bug 1055673]
+ * library/tcltest/pkgIndex.tcl: Bump to tcltest 2.2.7
+ * unix/Makefile.in:
+ * tests/all.tcl: Update to use [tcltest::configure].
+
+2004-10-29 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * library/tm.tcl (::tcl::tm::*): Use the core proc engine to generate
+ the wrong-num-args error messages for the path ensemble.
+
+ Ensembles can now (sometimes) rewrite the error messages of their
+ subcommands so they appear more like the arguments that the user
+ passed to the ensemble. Below is a description of changes involved in
+ doing this.
+
+ * tests/namespace.test (namespace-50.*): Tests of ensemble subcommand
+ error message rewriting.
+ * generic/tclProc.c (TclObjInterpProc): Make procedures implement
+ their wrong-num-args message using Tcl_WrongNumArgs instead of
+ something baked-at-home.
+ * generic/tclNamesp.c (TclIsEnsemble, NsEnsembleImplementationCmd):
+ Added test of ensemble-hood (available to rest of core) and made
+ ensembles set up the rewriting for Tcl_WrongNumArgs to take advantage
+ of.
+ * generic/tclInt.h (Interp.ensembleRewrite): Extra fields.
+ * generic/tclIndexObj.c (Tcl_WrongNumArgs): Add knowledge of what is
+ going on in ensembles' command rewriting so this command can generate
+ the right error message itself.
+ * generic/tclBasic.c (Tcl_CreateInterp, TclEvalObjvInternal): Added
+ code to initialize (as empty) the rewriting fields and reset them when
+ we leak outside an ensemble implementation.
+
+2004-10-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_START_CMD):
+ * tests/execute.test (execute-8.3): fix for execution stack corruption
+ [Bug 1055676]. Credit dgp for detective work and fix.
+
+2004-10-27 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/socket.test (socket-13.1): Balanced [makeFile] and
+ [removeFile] commands.
+
+ * tests/clock.test: Correct duplicate test names.
+ * tests/namespace.test:
+ * tests/string.test:
+ * tests/io.test (io-50.4): Use namespace variables.
+
+2004-10-27 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclInt.decls: The following 9 functions were moved from
+ * generic/tclInt.h: tclInt.h to the private/int Stubs table for
+ * generic/tclIntDecls.h: use by the test suite. As tclTest.obj is
+ * generic/tclStubInit.c: linked to the shell, these functions need
+ "blessed" status so as to always be exported from the library. Being
+ placed in the Stubs table guarantees this [Bug 1054748]:
+ TclpObjRemoveDirectory, TclpObjCopyDirectory,
+ TclpObjCreateDirectory, TclpObjDeleteFile,
+ TclpObjCopyFile, TclpObjRenameFile,
+ TclpObjStat, TclpObjAccess,
+ TclpOpenFileChannel
+
+ * tests/registry.test: Fixed test files to load the correct
+ * tests/winDde.test: registry and dde packages by using the info
+ * win/Makefile.in: from makefiles to tell tcltest where to load
+ * win/makefile.vc: them from. This avoids grabbing the wrong
+ package from $auto_path which might be the install point rather than
+ the dev location. Kudos to Jennifer Hom for adding -load and
+ -loadfile to the tcltest package. [Bug 926088]
+
+ * win/tclWinThrd.c (TclFinalizeLock): release the critical section
+ before deleting it. [Bug 731778]
+
+ * generic/tcl.h: Removed the file level 'extern "C" {' and the
+ coresponding closing block as it serves no purpose given that all the
+ function prototypes have the proper extern usage already.
+
+ * unix/tclAppInit.c: When built as tcltest, TclThread_Init was
+ * win/tclAppInit.c: getting called twice. First by Tcltest_Init,
+ then again in Tcl_AppInit. The call from Tcl_AppInit is now removed.
+
+2004-10-27 Andreas Kupries <andreask@activestate.com>
+
+ * tests/tm.test: Expanded on the testsuite entered by Donal.
+ * library/tm.tcl: Even found bugs, these have been corrected.
+
+2004-10-26 Kevin Kenny <kennykb@acm.org>
+
+ * tests/format.test (format-19.1): Additional regression test for [Bug
+ 868489].
+
+2004-10-27 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/*.n: Many small general documentation fixes.
+
+2004-10-26 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclPipe.c (TclCleanupChildren): bad cast of resolvedPid
+ caused PIDs on win95 to go negative. winpipe-4.2 brought this to the
+ surface. Fixed with sprintf in place of TclFormatInt. Thanks to hgiese
+ [Patch 767676]
+
+2004-10-26 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl (::tcl::tm::Defaults): Added a second [file dirname]
+ around the location of the executable. This fixes [Bug 1038705].
+ Instable of a bogus "foo/bin/lib" we now have the correct "foo/lib" as
+ a base path for modules.
+
+2004-10-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c (Tcl_SubstObj): Fix for failed subst-12.3 test
+ * tests/subst.test (subst-12.3-5): More tests for Bug 1036649.
+
+ * unix/Makefile.in (install-libraries): Updated the installation of
+ the http, msgcat, and tcltest packages to install as Tcl Modules on
+ Unix systems. Other platform Makefiles still need updating. [Patch
+ 1054370]
+
+ * tests/basic.test: Added missing constraints.
+ * tests/compile.test:
+ * tests/fileSystem.test:
+
+ * tests/init.test (init-2.8): Updated to not rely on http package.
+
+2004-10-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclVar.c: removed more direct references to the VAR flags,
+ replaced with access macros.
+
+2004-10-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/expr.n: Clarified that non-num/non-bool literals require
+ quoting. [Bug 1027849]. Also listed booleans as acceptable values.
+
+2004-10-26 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (FreeScan): Fixed a bug that caused relative days
+ of the week in free-form [clock scan] to be evaluated in the wrong
+ time zone.
+ * tests/clock.test (clock-31.[456]): Made sure that there isn't an
+ env(TZ) or env(TCL_TZ) lying around that will override the time zone
+ that we're trying to establish with the simulated registry.
+ Both problems reported as [Bug 1054101].
+
+2004-10-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/string.n (map): Rewrote to clarify that we don't just map single
+ characters. [Bug 1048005]
+ * doc/info.n (procs): Clarified that the pattern argument may have
+ namespace separators in it. [Bug 1047928]
+
+ * tests/cmdAH.test (cmdAH-8.45): Simplify in the hope that the reasons
+ for [Bug 1053908] will become clearer.
+
+2004-10-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (IllegalExprOperandType,TclExecuteByteCode):
+ Removed several DECACHE_INFO/CACHE_INFO pairs that are no longer
+ needed for protection because routines like Tcl_SetErrorCode() and
+ Tcl_AddErrorInfo() can no longer re-enter bytecode execution.
+
+ * generic/tclResult.c (TclProcessReturn): Bug fix. Be sure that a
+ missing -errorinfo option when code == TCL_ERROR causes the errorInfo
+ field to get reset.
+
+ * tests/thread.test (thread-4.4): Test depended on a ::errorInfo value
+ initialized to "". Added code to test to setup that requirement.
+
+ * library/auto.tcl: Purged Tcl's script library of all
+ * library/clock.tcl: remaining references to global vars
+ * library/init.tcl: ::errorInfo and ::errorCode.
+
+ * generic/tclMain.c (Tcl_Main): Updated to make use of
+ TclGetReturnOptions instead of ::errorInfo variable.
+
+ * generic/tclInterp.c (tclInit): Bug fix. Access dict variables with
+ [dict get], not array syntax.
+
+2004-10-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/tm.test: Rewrote the tests to actually perform syntax checks
+ on the public API. Added a new test (currently failing) to indicate
+ that the test suite is not complete yet.
+ * library/tm.tcl (path): Rewrote to turn this command into an ensemble
+ to make it faster and simpler.
+
+2004-10-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclTrace.c: defined new macros to get/set the flags of
+ variables. The only files that still access the flag values directly
+ are tclCompCmds.c, tclCompile.c, tclProc.c and tclVar.c
+
+2004-10-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_LogCommandInfo,Tcl_AddObjErrorInfo): Shift
+ the initialization of errorCode to NONE to more central location.
+
+ * generic/tclEvent.c (BgError,Tcl_BackgroundError,HandleBgErrors):
+ Rewrite to build on the new TclGet/SetReturnOptions routines.
+
+ * generic/tclResult.c (TclGetReturnOptions): Add call to
+ Tcl_AddObjErrorInfo to be sure error fields are initialized.
+
+ * generic/tclResult.c (TclTransferResult): Rewrite to build on the new
+ TclGet/SetReturnOptions routines.
+
+2004-10-22 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/tm.n: Tightened up the documentation.
+ * tests/tm.test: Created (with partially dummy content) so TIP#189 can
+ be marked Final.
+
+ * generic/tclNamesp.c (NsEnsembleImplementationCmd): Make ensembles
+ cut their implementations out of error traces. This is the right thing
+ to do more often than not.
+
+2004-10-22 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Fixed a typo where the fallback time zone became
+ ::localtime instead of :localtime. Fixed a bug where time zone names
+ containing hyphens could not be loaded.
+ * tests/clock.test: Added regression test cases that covers both bugs.
+ Thanks to Todd M. Helfter <tmh@jumpgate.itsp.purdue.edu> for finding
+ these bugs.
+
+2004-10-22 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TclCompEvalObj, Tcl_ExprObj):
+ * generic/tclProc.c (TclProcCompileProc): Always call object
+ freeIntRepProc's in the same way.
+
+2004-10-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: fixed bug in commit of 2004-07-23, which was
+ causing a leak of Proc structures and failure of compile-12.1. Two
+ lines were 'zombies' from the previous way localVarNames worked.
+ Credit dgp for finding this.
+
+2004-10-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h (Interp):
+ * generic/tclBasic.c (Tcl_CreateInterp,Tcl_DeleteInterp):
+ * generic/tclResult.c (GetKeys,ReleaseKeys,etc.): Moved the key values
+ of the return options dictionary out of private fields of the Interp
+ struct and into thread-static values managed in tclResult.c.
+
+ * generic/tclCmdAH.c (Tcl_CatchObjCmd, Tcl_ErrorObjCmd): Updated to
+ call the new TclGet/SetReturnOptions routines to do much of their
+ work.
+
+ * generic/tclInt.h (TclGetReturnOptions,TclSetReturnOptions):
+ * generic/tclResult.c (TclGetReturnOptions,TclSetReturnOptions): New
+ utility routines to get/set the return options of an interp. Intent is
+ that these routines will be converted to public routines after TIP
+ approval.
+
+ * generic/tclCmdMZ.c (TclProcessReturn,TclMergeReturnOptions):
+ * generic/tclResult.c (TclProcessReturn,TclMergeReturnOptions): Move
+ internal utility routines from tclCmdMZ.c to tclResult.c.
+
+ * generic/tclBasic.c (Tcl_CreateInterp, Tcl_DeleteInterp):
+ * generic/tclResult.c (TclTransferResult): Rework so that
+ iPtr->returnOpts can be NULL when there are no special options.
+
+ * generic/tclResult.c (TclRestoreInterpState): Plug potential memory
+ leak.
+
+2004-10-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclBasic.c: Various changes to [clock format] that,
+ * generic/tclClock.c: together, make it roughly twice as fast
+ * generic/tclInt.h: while all tests in the test suite
+ * library/clock.tcl: continue to pass.
+
+2004-10-20 Andreas Kupries <andreask@activestate.com>
+
+ * win/Makefile.in (install-msgs): Fixed a problem with the
+ * win/Makefile.in (install-tzdata): installation of timezone data and
+ message catalogs. They used the installed tcl library directory, not
+ the source library. Before it was installed. Switched to source lib
+ dir. Thanks to Kevin for the help in figuring this out.
+
+2004-10-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclThreadTest.c (ThreadEventProc): Corrected subtle bug
+ where the returned (char *) from Tcl_GetStringResult(interp) continued
+ to be used without copying or refcounting, while activity on the
+ interp continued. That's not safe, and recent changes demonstrated the
+ lack of safety with failing tests thread-4.3 and thread-4.5.
+
+2004-10-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclDictObj.c (DictWithCmd): Make sure all paths (that are
+ not themselves error paths) do not lose the result code.
+
+2004-10-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h (Tcl*InterpState): New internal routines
+ * generic/tclResult.c (Tcl*InterpState): TclSaveInterpState,
+ TclRestoreInterpState, and TclDiscardInterpState are superior
+ replacements for Tcl_(Save|Restore|Discard)Result. Intent is that
+ these routines will be converted to public routines after TIP
+ approval. Interfaces for these routines were shamelessly stolen from
+ Itcl.
+
+ * generic/tclBasic.c (TclEvalObjvInternal):
+ * generic/tclDictObj.c (DictUpdateCmd, DictWithCmd):
+ * generic/tclIOGT.c (ExecuteCallback):
+ * generic/tclTrace.c (Trace*Proc,TclCheck*Traces,TclCallVarTraces):
+ Callers of Tcl_*Result updated to call the new routines. The calls
+ were relocated in several cases to perform save/restore operations
+ only when needed.
+
+ * generic/tclEvent.c (HandleBgErrors):
+ * generic/tclFCmd.c (CopyRenameOneFile): Calls to Tcl_*Result that
+ were eliminated because they appeared to serve no useful purpose,
+ typically saving/restoring an error message, only to throw it away.
+
+2004-10-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_CreateInterp,Tcl_DeleteInterp):
+ * generic/tclCmdAH.c (Tcl_CatchObjCmd):
+ * generic/tclCmdMZ.c (TclMergeReturnOptions,TclProcessReturn):
+ * generic/tclCompCmds.c (TclCompileReturnCmd):
+ * generic/tclExecute.c (TclCompEvalObj):
+ * generic/tclInt.h (Interp):
+ * generic/tclProc.c (TclUpdateReturnInfo): Place primary storage of
+ the -level and -code information in private fields of the Interp
+ struct, rather than in a DictObj. This should significantly improve
+ performance of TclUpdateReturnInfo.
+
+2004-10-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclResult.c: removed unused variable [Bug 1048588]. Thanks
+ to Daniel South.
+
+2004-10-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (TclProcessReturn): Now that primary
+ * generic/tclProc.c (TclUpdateReturnInfo): storage for the
+ errorInfo and errorCode values are internal fields, we can set them at
+ the time of the [return] command, and not have to wait until the
+ specified number of "-level"s have popped.
+
+ * generic/tclBasic.c (Tcl_CreateInterp, Tcl_DeleteInterp)
+ (TclEvalObjvInternal, Tcl_LogCommandInfo, TclAddObjErrorInfo):
+ * generic/tclCmdAH.c (Tcl_CatchObjCmd):
+ * generic/tclEvent.c (BgError, ErrAssocData, Tcl_BackgroundError)
+ (HandleBgErrors, BgErrorDeleteProc):
+ * generic/tclExecute.c (TclCreateExecEnv, TclDeleteExecEnv):
+ * generic/tclIOUtil.c (comments only):
+ * generic/tclInt.h (ExecEnv,Interp, ERR_IN_PROGRESS):
+ * generic/tclInterp.c ([tclInit]):
+ * generic/tclMain.c (comments only):
+ * generic/tclNamesp.c (Tcl_CreateNamespace, Tcl_DeleteNamespace)
+ (TclTeardownNamespace):
+ * generic/tclProc.c (TclUpdateReturnInfo):
+ * generic/tclResult.c (Tcl_ResetResult, TclTransferResult):
+ * generic/tclTrace.c (CallVarTraces):
+ Reworked management of the "errorInfo" data of an interp. That
+ information is now primarily stored in a new private (Tcl_Obj *) field
+ of the Interp struct, rather than using a global variable ::errorInfo
+ as the primary storage. The ERR_IN_PROGRESS flag bit value is no
+ longer required to manage the value in its new location, and is
+ removed. Variable traces are established to support compatibility for
+ any code expecting the ::errorInfo variable to hold the information.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Code that sets traces on the ::errorInfo variable may notice a
+ difference in timing of the firing of those traces. Code that uses the
+ value ERR_IN_PROGRESS.
+
+2004-10-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP#217 IMPLEMENTATION
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Add -indices option from James
+ Salsman. [Patch 1017532]
+
+ * generic/tclUtil.c (TclMatchIsTrivial): Detect degenerate cases of
+ glob matching that let us avoid scanning through hash tables.
+ * generic/tclCmdIL.c (InfoCommandsCmd, InfoGlobalsCmd, InfoProcsCmd):
+ (InfoVarsCmd): Use this to speed up some [info] subcommands.
+
+2004-10-12 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Campo_Grande:
+ * library/tzdata/America/Cuiaba:
+ * library/tzdata/America/Sao_Paulo
+ * library/tzdata/America/Argentina/Mendoza:
+ * library/tzdata/America/Argentina/San_Juan:
+ Synchronized to Olson's 'tzdata2004e'.
+
+2004-10-08 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP#201 AND TIP#212 IMPLEMENTATIONS
+
+ * doc/dict.n, doc/expr.n: Documentation for new functionality.
+ * tests/expr.test: Basic tests of 'in' and 'ni' behaviour.
+ * tests/dict.test (dict-21.*,dict-22.*): Tests for [dict update] and
+ [dict with].
+ * generic/tclExecute.c (TclExecuteByteCode): Implementation of the
+ INST_LIST_IN and INST_LIST_NOT_IN bytecodes.
+ * generic/tclParseExpr.c (GetLexeme): Parse the 'in' and 'ni'
+ operators for TIP#201.
+ * generic/tclDictObj.c (DictUpdateCmd,DictWithCmd): Core of
+ implementation of TIP#212; docs and tests still to do...
+
+2004-10-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTest.c (TestsetobjerrorcodeCmd): Simplified.
+
+2004-10-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c:
+ * generic/tclFileSystem.h:
+ * generic/tclIOUtil.c:
+ * generic/tclPathObj.c:
+ * unix/tclUnixFile.c:
+ * win/tclWinFile.c:
+ * tests/fileName.test:
+ * tests/winFCmd.test: code reorganization for better generic/platform
+ code splitting [Bug 925620] removing the need for several #ifdef's,
+ and tests and fix for an unreported Windows glob problem ('glob -dir
+ C: -tails *').
+
+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
+ that it has to have.
+
+ * doc/man.macros, *.3: Update .AS macro so it can know how wide to
+ make the third column of the argument list. Update documentation for C
+ API (only users) to take advantage of this.
+
+ * doc/FileSystem.3: Formatting fixes for greater documentation
+ clarity.
+
+2004-10-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclFileName.c (DoGlob, TclGlob): Stop messy sharing of
+ interpreter result and instead use a private object for collecting the
+ result of the glob. This simplifies TclGlob quite a lot.
+ * generic/tclIOUtil.c (Tcl_FSMatchInDirectory): Simplify by removing
+ some nesting. Also standardize variable names.
+ (FsAddMountsToGlobResult): Force updates to the list to be done
+ in-place, putting a side-condition of non-shared-ness on the resultPtr
+ argument to Tcl_FSMatchInDirectory, but everything would have broken
+ before if that was shared *anyway*.
+
+ * generic/tclEncoding.c (LoadTableEncoding): Removed reference to Tcl
+ interpreter; it wasn't needed as direct object use is more efficient.
+
+ * generic/tclPathObj.c: Made this file follow the style rules in the
+ Engineering Manual more closely, and also take advantage of the
+ internal object manipulation macros more.
+
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Reorganized to have fewer
+ magic flag variables and to separate the code that scans for a match
+ from the code that processes a match body.
+
+2004-10-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c:
+ * generic/tclBinary.c:
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclCompExpr.c:
+ * generic/tclDictObj.c:
+ * generic/tclEncoding.c:
+ * generic/tclExecute.c:
+ * generic/tclFCmd.c:
+ * generic/tclHistory.c:
+ * generic/tclIndexObj.c:
+ * generic/tclInterp.c:
+ * generic/tclIO.c:
+ * generic/tclIOCmd.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclPkg.c:
+ * generic/tclResult.c:
+ * generic/tclScan.c:
+ * generic/tclTimer.c:
+ * generic/tclTrace.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+ * unix/tclUnixFCmd.c:
+ * unix/tclUnixPipe.c:
+ * win/tclWinDde.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinPipe.c:
+ * win/tclWinReg.c:
+ It is a poor practice to directly set or append to the value of the
+ objResult of an interp, because that value might be shared, and in
+ that circumstance a Tcl_Panic() will be the result. Searched for
+ example of this practice and replaced with safer alternatives, often
+ using the Tcl_AppendResult() routine that dkf just rehabilitated.
+ * library/dde/pkgIndex.tcl: Bump to dde 1.3.1
+ * library/reg/pkgIndex.tcl: Bump to registry 1.1.5
+
+2004-10-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/SetResult.3: Made Tcl_AppendResult non-deprecated; better that
+ people use it than most of the common alternatives!
+ * generic/tclResult.c (Tcl_AppendResultVA): Make this work better with
+ Tcl_Objs. [Patch 1041072]
+ (Tcl_SetResult, Tcl_AppendElement): Change string to stringPtr to
+ avoid C++ keywords.
+
+2004-10-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclObjInvoke): More simplification of the
+ TclObjInvoke routine toward unification with the rest of the
+ evaluation stack.
+
+ * generic/tclBasic.c (Tcl_CreateInterp, Tcl_DeleteInterp)
+ (TclEvalObjvInternal, Tcl_LogCommandInfo):
+ * generic/tclCmdAH.c (Tcl_CatchObjCmd):
+ * generic/tclEvent.c (BgError, Tcl_BackgroundError, HandleBgErrors):
+ * generic/tclInt.h (Interp, ERROR_CODE_SET):
+ * generic/tclNamesp.c (Tcl_CreateNamespace, Tcl_DeleteNamespace)
+ (TclTeardownNamespace):
+ * generic/tclResult.c (Tcl_ResetResult, Tcl_SetObjErrorCode)
+ (TclTransferResult):
+ * generic/tclTrace.c (CallVarTraces):
+ Reworked management of the "errorCode" data of an interp. That
+ information is now primarily stored in a new private (Tcl_Obj *) field
+ of the Interp struct, rather than using a global variable ::errorCode
+ as the primary storage. The ERROR_CODE_SET flag bit value is no longer
+ required to manage the value in its new location, and is removed.
+ Variable traces are established to support compatibility for any code
+ expecting the ::errorCode variable to hold the information.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Code that sets traces on the ::errorCode variable may notice a
+ difference in timing of the firing of those traces.
+
+ * generic/tclNamesp.c (Tcl_PopCallFrame): Removed Bug 1038021
+ workaround. That bug is now fixed.
+
+2004-10-04 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/clock.test (clock-34.*): Removed an antibug that forced
+ comparison of [clock scan] results with the :localtime time zone. Now
+ that [clock scan] uses the current time zone instead, the antibug
+ caused several tests to fail. [Bug 1038554]
+
+2004-10-04 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclParseExpr.c (GetLexeme): Ensure that the 'eq' and 'ne'
+ operators are followed by non-alphabetic characters so lexemes can't
+ run together. [Bug 884830]
+
+ * doc/DictObj.3, doc/dict.n: Clarified that a dictionary is not
+ order-preserving. [Bug 1032243] Also added another example to show off
+ more ways of using a dictionary and a few other formatting
+ improvements.
+
+2004-10-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclDictObj.c (TraceDictPath, Tcl_DictObjPutKeyList): Add
+ support for automatic creation of dictionary paths since that is what
+ everyone seems to actually expect of the API! [Bug 1037235]
+ (Tcl_DictObjNext): Make calling this after Tcl_DictObjDone non-fatal
+ as that simplifies a number of internal APIs. This doesn't break any
+ existing working code as it is a case which previously caused a panic.
+
+2004-10-02 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/namespace.test (namespace-8.7): Another test for save/restore
+ of ::errorInfo and ::errorCode during global namespace teardown.
+
+2004-10-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclProc.c (TclObjGetFrame, Tcl_UplevelObjCmd):
+ * generic/tclVar.c (Tcl_UpvarObjCmd): Cache stackframe level
+ references in the level object for speed.
+
+2004-09-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_CreateInterp):
+ * generic/tclInt.h (Interp): Removed the flag bit value
+ EXPR_INITIALIZED. It was set during interp creation and never tested.
+ Whatever purpose it had is in the past.
+
+ * generic/tclBasic.c (Tcl_EvalObjEx): Removed the flag bit value
+ * generic/tclInt.h (Interp): USE_EVAL_DIRECT. It was used
+ * generic/tcLTest.c (TestevalexObjCmd): only in the testing command
+ * tests/parser.test (parse-9.2): [testevalex] and nothing in
+ the test suite made use of the capability it enabled.
+
+ * generic/tclBasic.c (Tcl_AddObjErrorInfo): More re-organization
+ * generic/tclCmdAH.c (Tcl_ErrorObjCmd): of the management of
+ * generic/tclCmdMZ.c (TclProcessReturn): the errorCode value.
+ * tests/error.test (error-6.4-9):
+
+ * generic/tclNamespace.c (TclTeardownNamespace): Tcl_Obj-ified
+ * tests/namespace.test (namespace-8.5,6): the save/restore of
+ ::errorInfo and ::errorCode during global namespace teardown. Revised
+ the comment to clarify why this is done, and added tests that will
+ fail if this is not done.
+
+ * generic/tclResult.c (TclTransferResult): Added safety checks so that
+ unexpected undefined ::errorInfo or ::errorCode will not lead to a
+ segfault.
+
+ * generic/tclTrace.c (TclCallVarTraces): Save/restore the flag values
+ * tests/var.test (var-16.1): that define part of the
+ interpreter state during variable traces. [Bug 1038021].
+
+2004-09-30 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/subst.test (12.1-2): added tests for [Bug 1036649]
+
+2004-09-29 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/basic.test (49.*): New tests for TCL_EVAL_GLOBAL.
+
+2004-09-29 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclVar.c (TclObjLookupVar, TclObjLookupVar):
+ (TclObjUnsetVar2, SetArraySearchObj):
+ * generic/tclUtil.c (SetEndOffsetFromAny):
+ * generic/tclStringObj.c (Tcl_SetStringObj):
+ (Tcl_SetUnicodeObj, SetStringFromAny):
+ * generic/tclResult.c (ResetObjResult):
+ * generic/tclRegexp.c (Tcl_GetRegExpFromObj):
+ * generic/tclPathObj.c (TclFSMakePathRelative, SetFsPathFromAny):
+ (TclFSMakePathFromNormalized, Tcl_FSNewNativePath):
+ * generic/tclObj.c (TclFreeObj, Tcl_SetBooleanObj, SetBooleanFromAny):
+ (Tcl_SetDoubleObj, SetDoubleFromAny, Tcl_SetIntObj):
+ (SetIntOrWideFromAny, Tcl_SetLongObj, SetWideIntFromAny):
+ (Tcl_SetWideIntObj, TclSetCmdNameObj, SetCmdNameFromAny):
+ * generic/tclNamesp.c (SetNsNameFromAny, MakeCachedEnsembleCommand):
+ * generic/tclListObj.c (Tcl_SetListObj, SetListFromAny):
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct):
+ * generic/tclDictObj.c (SetDictFromAny):
+ * generic/tclCompile.c (TclInitByteCodeObj):
+ * generic/tclBinary.c (Tcl_SetByteArrayObj, SetByteArrayFromAny):
+ * generic/tclInt.h (TclFreeIntRep): Factorize out deletion of object
+ internal representation to a shared macro, so simplifying much code.
+
+2004-09-27 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TclObjInvoke): fix for bogus gcc warning about
+ uninitialised variable.
+
+2004-09-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Removed internal routines TclInvoke,
+ * generic/tclInt.decls: TclGlobalInvoke, TclObjInvokeGlobal and the
+ * tests/basic.test: portion of TclObjInvoke that handles calls
+ without TCL_INVOKE_HIDDEN enabled. None of this code is called any
+ longer within the core, and the superior public interface,
+ Tcl_EvalObjv, is available for any external callers.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclEvent.c (HandleBgErrors): Updated [bgerror] invocations
+ to make use of Tcl_Obj based routines, dropping the calls to
+ TclGlobalInvoke()
+
+2004-09-27 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c:
+ * generic/tclFileSystem.h:
+ * generic/tclIOUtil.c:
+ * generic/tclPathObj.c:
+ * tests/cmdAH.test:
+ * tests/fileSystem.test:
+ * tests/winFCmd.test: fix to bad error message with 'cd' on windows,
+ when permissions are inadequate [Bug 1035462] and to treatment of a
+ volume-relative pwd on Windows [Bug 1018980].
+
+ * doc/FileSystem.3: added missing Tcl_GlobTypeData documentation [Bug
+ 935853]
+
+2004-09-27 Kevin Kenny <kennykb@acm.org>
+
+ * compat/strftime.c (Removed):
+ * generic/tclClock.c (removed TclClockOldscanObjCmd):
+ * generic/tclDate.c (Regenerated):
+ * generic/tclGetDate.y:
+ * generic/tclInt.decls (removed TclGetDate and TclpStrftime):
+ * generic/tclInt.h (removed TclGetDateInfo):
+ * generic/tclIntDecls.h (Regenerated):
+ * generic/tclStubInit.c (Regenerated):
+ * library/clock.tcl:
+ * unix/tclUnixTime.c (removed TclpStrftime):
+ * win/Makefile.in:
+ * win/makefile.bc:
+ * win/makefile.bc:
+ * win/tcl.dsp:
+ Continued refactoring of [clock] for TIP 173 changes. Broke the
+ free-form parser apart so that the Bison parser is responsible for
+ only parsing, while clock.tcl handles relative times like "next
+ Thursday", "next January". This change is needed to make timezones
+ other than :localtime and :Etc/UTC work with free-form scanning. This
+ change closes out the issue identified as being "for another day" in
+ my log message of 2004-09-08. The refactored code also eliminates the
+ last known references to TclpStrftime and TclGetDate, so those
+ routines (including compat/strftime.c) have been removed. The
+ refactoring also has the benefit that all storage in the Bison parser
+ is now on the C stack, eliminating any need for mutex protection
+ around [clock scan]. Also, changed the Makefiles so that 'make
+ gendate' is available on Windows as well as Unix.
+
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd): Removed some grubby
+ * generic/tclObj.c (SetBooleanFromAny): work-around code that was
+ needed only because of Bug 868489.
+
+ * generic/tclBasic.c (TclObjInvoke): Removed three unused variables to
+ silence a compiler warning in VC++.
+
+2004-09-27 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3: fix to small typo.
+
+2004-09-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclCompile.h:
+ * generic/tclInt.h:
+ * generic/tclProc.c:
+ * tests/compExpr-old.test:
+ * tests/compExpr.test:
+ * tests/expr.test:
+ * tests/for.test:
+ * tests/if.test:
+ * tests/incr.test:
+ * tests/while.test:
+ Report compilation errors at runtime, [Patch 1033689] by dgp.
+
+2004-09-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/dltest/Makefile.in (clean): Fixup make clean rule so that it
+ does not delete all files when SHLIB_SUFFIX is set to the empty string
+ in a static build. [Bug 1016726]
+
+2004-09-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Corrections to the 2004-09-21 commit
+ * generic/tclExecute.c: regarding ERR_ALREADY_LOGGED. That commit
+ * generic/tclNamesp.c: caused Tk test send-10.7 to fail. Added
+ * tests/namespace.test (25.7,8): tests in the Tcl test suite
+ * tests/pkg.test (2.25,26): to catch this error without the aid
+ of Tk in the future.
+
+ * generic/tclCmdAH.c (Tcl_ExprObjCmd): Simplified the TclObjCmdProc
+ of [expr] with a call to Tcl_ConcatObj.
+
+2004-09-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (TclProcessReturn): Support the -errorline
+ * generic/tclCompile.c (TclCompileScript): option to [return].
+ * tests/compile.test (16.23.*): Use that capability to defer reporting
+ * tests/misc.test (1.2): of parse errors until runtime. Updated
+ tests to reflect change. [Bug 1032805]
+
+2004-09-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_START_CMD):
+ * tests/proc.test (7.2-3): fix for [Bug 729692] was incorrect whenever
+ a loop exception was returned.
+
+2004-09-22 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Montevideo: Updated to reflect
+ ftp://elsie.nci.nih.gov/pub/tzdata2004d.tar.gz. (Changes to
+ Asia/Jerusalem were in the comments only.) [Routine maintenance - no
+ bug] Spanish-language description of the change at
+ http://www.presidencia.gub.uy/decretos/2004091502.htm
+
+2004-09-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c: Tolerate [append] syntax errors
+ * tests/appendComp.test (8.1): at compile time, and allow runtime to
+ raise the error (or succeed if a redefined [append] allows).
+
+ * generic/tclBasic.c: Reworked management of the interp flag
+ * generic/tclCompile.c: ERR_ALREADY_LOGGED, to reduce its exposure.
+ * generic/tclExecute.c: Still left several referebces that are just
+ * generic/tclNamesp.c: too nice on performace to do away with. These
+ changes also resolve an inconsistency in the ::errorInfo values
+ produced by [namespace eval x error foo bar] and [namespace eval x
+ {error foo bar}].
+
+ * generic/tclExecute.c (TclCompEvalObj): Simplified the
+ TclCompEvalObj routine. Much housekeeping now reliably happens
+ elsewhere. [Patch 1031949]
+
+2004-09-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/interp.n: Tighten up wording on how [interp eval] and [interp
+ invokehidden] operate w.r.t. stack frames. [Bug 926590]
+
+2004-09-20 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/error.test (error-6.2,3): Added more tests to verify
+ ::errorCode setting by/after a [catch].
+
+2004-09-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdAH.c: removed outdated comment [Bug 1029518].
+
+2004-09-18 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c: Dde package can load into a safe interp. Claim
+ this fact for the Tcl_StaticPackage() call when the shell is built
+ with the TCL_USE_STATIC_PACKAGES option.
+
+2004-09-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TEBC-INST_LSHIFT,INST_RSHIFT): Ensure that
+ large shifts end up shifting correctly. [Bug 868467]
+
+ * doc/FileSystem.3, doc/OpenFileChnl.3: More documentation fixes from
+ Mikhail Kolesnitchenko. [Patch 1022527]
+ * doc/*: Standardize highlighting of symbols defined in tcl.h
+
+2004-09-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_AddObjErrorInfo, Tcl_LogCommandInfo):
+ * generic/tclCmdAH.c ([catch], [error]):
+ * generic/tclCmdMZ.c ([return]):
+ * generic/tclProc.c (TclUpdateReturnInfo):
+ * generic/tclResult.c (Tcl_SetErrorCodeVA, Tcl_SetObjErrorCode)
+ (TclTransferResult): Refactored so that all errorCode setting flows
+ through Tcl_SetObjErrorCode(). This greatly reduces the number of
+ different places in the code that need to know details about an
+ internal bitflag field of the Interp struct. Also places errorCode
+ setting in one place for easier future mods.
+
+2004-09-17 Kevin B.Kenny <kennykb@acm.org>
+
+ * generic/tclDate.c: Revised tclGetDate.y to use bison instead of
+ * generic/tclGetDate.y: yacc to build the parser, eliminating all the
+ * generic/tclInt.h: complicated hackery involving 'sed'
+ * unix/Makefile.in: postprocessing. Rebuilt the parser.
+
+2004-09-14 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (ClockOldscanObjCmd): Silenced a compiler warning
+ (long passed as a param where unsigend long was expected). 'Unsigned
+ long' is wrong, but the fix is really to change the signature of
+ TclGetDate to return a structure of its 'yy' variables and then do the
+ remaining work inside clock.tcl. But, as I said on 2004-09-08, that's
+ a job for another day. [Bug 1027993]
+
+2004-09-10 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/interp.n:
+ * generic/tclInterp.c (TclPreventAliasLoop, AliasCreate):
+ * tests/interp.test (17.4-6, 19.3-4): fixing problems with renaming of
+ aliases [Bugs 707104 1026493]. Fix designed by dgp.
+
+2004-09-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (NsEnsembleImplementationCmd): Add token field
+ to internal rep of EnsembleCmdRep structure so that we can check it to
+ see if the subcommand object is really being used with the same
+ ensemble. [Bug 1026903]
+
+2004-09-11 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (TclMktimeObjCmd): Corrected a bad check for
+ error return from 'mktime'.
+ * generic/tclObj.c (Tcl_GetIntFromObj): Corrected a problem where
+ demoting a wide to an int failed on a big-endian machine. [Bug
+ 1026125].
+ * tests/clock.test (clock-43.1): Added regression test for error
+ return from 'mktime'.
+
+2004-09-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_CONCAT1): fix for [Bug 1025834]; avoid
+ unnecessary string copies.
+
+2004-09-10 David Gravereaux <davyrgvy@pobox.com>
+
+ * tests/tcltest.test: tcltest-12.3-4 needed to have
+ ::tcltest::loadScript set to empty in their -setup
+
+2004-09-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclObj.c (SetIntOrWideFromAny): Rewritten integral value
+ parsing code so that values do not flip so easily between numeric
+ representations. Thanks to KBK for this! [Bug 868489]
+
+ * generic/tclIO.c (Tcl_Seek): Make sure wide seeks do not fail to set
+ ::errorCode on error. [Bug 1025359]
+
+2004-09-10 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tcl.h: Micro formatting fixes.
+ * generic/tclIOGT.c: Channel version fixed, must be 3, to have
+ wideseekProc. Thanks to David Graveraux <davygrvy@pobox.com>.
+
+2004-09-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamespace.c (TclGetNamespaceForQualName): Resolved
+ longstanding inconsistency in the treatment of the TCL_NAMESPACE_ONLY
+ flag revealed by testing the 2004-09-09 commits against Itcl.
+ TCL_NAMESPACE_ONLY now acts as specified in the pre-function comment,
+ forcing resolution in the passed in context namespace. It has been
+ incorrectly forcing resolution in the interp's current namespace.
+
+2004-09-10 Kevin Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Fixed a bug where %z always put a plus sign on
+ the time zone in :localtime.
+ * tests/clock.test: Added test case for the above bug.
+
+2004-09-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_CONCAT1): added a peephole optimisation
+ for concatting an empty string. This enables replacing the idiom 'K $x
+ [set x {}]' by '$x[set x {}]' for fastest execution.
+
+2004-09-09 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinConsole.c: Calls to WriteFile and WriteConsoleA changed to
+ WriteConsole for simplicity.
+
+2004-09-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c (Tcl_ForgetImport): Corrected faulty
+
+ * tests/namespace.test: logic that relied exclusively on string
+ matching and failed in the presence of [rename]s. [Bug 560297] Also
+ corrected faulty prevention of [namespace import] cycles. [Bug 1017299]
+
+2004-09-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_CreateInterp): Removed obsolete field
+ for storing the string-based command procedure of built-in commands.
+ We no longer have any string-based built-in commands!
+
+2004-09-08 Kevin B. Kenny <kennykb@acm.org>
+
+ * compat/strftime.c (_conv): Corrected a problem where hour 0 would
+ format as a blank format group with %k.
+ * doc/clock.n: Corrected a buglet in the header information. [Bug
+ 1024058]
+ * generic/tclClock.c (TclClockMktimeObjCmd): Fixed a bug where the
+ month was scanned incorrectly in -timezone :localtime.
+ * tests/clock.test (clock-34.*,clock-40.1, clock-41.1): Adjusted the
+ clock-34.* test cases so that the consistency check is performed in
+ :localtime rather than the current time zone. This change allows
+ dealing with issues where the C library has a different idea of DST
+ conversion than Tcl. (Real fix would be to break TclGetDate into
+ separate parser and time converter, and do the time conversion in
+ clock.tcl. That's for another day.) Added regression test case for the
+ bug where month was scanned incorrectly in -timezone :localtime. [Bug
+ 1023779] Added regression test case for %k at the zero hour.
+
+2004-09-07 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: some quoting needed to be removed as it was
+ breaking with VC7. [Bug 1023150]
+
+2004-09-07 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n: Documented the default -format, and changed references
+ to a (nonexistent) msgcat command to refer to the msgcat package. [Bug
+ 1023870]
+ * generic/tclTimer.c: Removed a premature optimisation that attempted
+ to store the assoc data in the client data; the optimisation caused a
+ bug that [after] would overwrite its imports. [Bug 1016167]
+ * library/clock.tcl (InitTZData, ClearCaches): Changed so that the
+ in-memory time zone :UTC (and its aliases) always gets reinitialised,
+ in case tzdata is absent. [Bug 1019537, 1023779]
+ * library/tzdata/*: Regenerated.
+ * tests/clock.test (clock-31.*, clock-39.1): Corrected a problem where
+ the 'system' locale tests fail on a non-English Windows machine. [Bug
+ 1023761]. Added a test to make sure that alias time zones load
+ correctly. [Bug 1023779].
+ * tests/timer.test (timer-1.1, timer-2.1): Changed to (one hopes!) be
+ more resilient on an overloaded system, if [after 200] sleeps for 300
+ ms or longer.
+ * tools/tclZIC.tcl (writeLinks): Corrected a problem where alias time
+ zone names were written incorrectly, causing them to fail to load at
+ run time. [Bug 1023779].
+ * win/tclWinTime.c (Tcl_GetTime): Eliminated CPUID tests on Win64 -
+ assuming that HAL vendors now do a better job of keeping the
+ performance counters synchronized among CPU's. [Bug 1020445]
+
+2004-09-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/tclvars.n, doc/tcltest.n, doc/tclsh.1, doc/safe.n, doc/expr.n
+ * doc/WrongNumArgs.3, doc/Utf.3, doc/TraceVar.3, doc/Thread.3
+ * doc/TCL_MEM_DEBUG.3, doc/SubstObj.3, doc/StdChannels.3
+ * doc/SetResult.3, doc/RegExp.3, doc/RegConfig.3, doc/RecEvalObj.3
+ * doc/PrintDbl.3, doc/ParseCmd.3, doc/Panic.3, doc/ObjectType.3
+ * doc/Object.3, doc/Namespace.3, doc/Interp.3, doc/IntObj.3
+ * doc/Hash.3, doc/GetOpnFl.3, doc/GetIndex.3, doc/Eval.3
+ * doc/Encoding.3, doc/DoubleObj.3, doc/DictObj.3, doc/CrtTimerHdlr.3
+ * doc/CrtObjCmd.3, doc/CrtMathFnc.3, doc/CrtCommand.3, doc/CrtChannel.3
+ * doc/ChnlStack.3, doc/ByteArrObj.3, doc/AssocData.3, doc/Alloc.3:
+ More documentation fixes from Mikhail Kolesnitchenko. [Patch 1022527]
+
+2004-09-03 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixFCmd.c: Stop NULL interp arguments from triggering a
+ crash when an error happens. [Bug 1020538]
+
+2004-09-02 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n: Clarified meaning of -dictionary. [Bug 759545]
+
+2004-09-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/makefile.vc: clock.tcl needs to be installed.
+
+2004-09-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinReg.c (BroadcastValue): WIN64 cast corrections
+
+ * win/tclWinDde.c (DdeClientWindowProc):
+ (DdeServicesOnAck, DdeEnumWindowsCallback): WIN64 corrections
+
+ * win/tclWin32Dll.c (TclWinCPUID): need _asm for WIN64 (Itanium),
+ until we have it, just return unknown. [Bug 1020445]
+
+2004-09-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/regsub.n, doc/RegConfig.3, doc/Environment.3:
+ * doc/CrtChannel.3, doc/safe.n: Use correct abbreviations.
+
+2004-08-31 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/trace.n, doc/socket.n, doc/registry.n, doc/pid.n:
+ * doc/namespace.n, doc/msgcat.n, doc/lsort.n, doc/lsearch.n:
+ * doc/linsert.n, doc/info.n, doc/http.n, doc/history.n:
+ * doc/format.n, doc/file.n, doc/exec.n, doc/dde.n, doc/clock.n:
+ * doc/catch.n, doc/binary.n: More spelling and grammar fixes from
+ Mikhail Kolesnitchenko. [Patch 1018486]
+
+2004-08-31 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * generic/tclIOUtil.c: Clarified documentation regarding ability of a
+ filesystem to say that it doesn't support a given operation using the
+ EXDEV posix error code (copyFileProc, renameFileProc, etc), and
+ updated one piece of code to ensure correct behaviour when an
+ operation is not supported [Bug 1017072]
+
+ * tests/fCmd.test: fix to test suite problem [Bug 1002884]
+
+2004-08-31 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in (install-libraries): portable sh fix.
+
+2004-08-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Stop [string map] from
+ crashing when its map and input string are the same object.
+
+2004-08-27 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (FindEnsemble): Factor out the code to convert a
+ command name into an ensemble configuration and add support for
+ ignoring [namespace import] link chains. [Bug 1017022]
+ (NamespaceWhichCmd): Rework to use newer option parsing API.
+
+2004-08-27 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: added customization of default module path roots
+ via TCL_MODULE_PATH makefile variable.
+ * macosx/Makefile: add platform standard locations to default module
+ path roots. [Patch 942881]
+
+ * tests/env.test: macosx fixes.
+
+2004-08-25 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/timer.test (timer-10.1): Test for Bug 1016167.
+ * generic/tclTimer.c: Workaround for situation when a [namespace
+ import] causes the objv[0] value to be something other than what
+ Tcl_AfterObjCmd expects. [Bug 1016167].
+
+2004-08-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (NsEnsembleImplementationCmd): Use the ensemble
+ command token to get the name of the ensemble for passing to the
+ -unknown handler instead of relying on objv[0], which may contain
+ useless info in the presence of [namespace import]. Problem found by
+ Don Porter when investigating [Bug 1016167].
+
+2004-08-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclProc.c: The routine TclProcInterpProc was a
+ * generic/tclTestProcBodyObj.c: specific instance of the general
+ service already provided by TclObjInvokeProc. Removed
+ TclProcInterpProc and TclGetInterpProc from the code...
+
+ * generic/tclInt.decls: ...and from the internal stubs table.
+ * generic/tclIntDecls.h
+ * generic/tclStubInit.c
+
+2004-08-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/string.n: Added clarifying note.
+
+2004-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Updated [tcl_findLibrary] search path to
+ include any [<pkg>::pkgconfig get scriptdir,runtime] directory, as
+ well as the $::auto_path. [RFE 695441]
+
+2004-08-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/clock.test (clock-38.1): Changed TZ setting to specify CET in
+ excruciating detail to deal with systems that lack the Posix defaults
+ for DST changes (and to be formally correct with the change dates for
+ CET).
+
+2004-08-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclScan.c (Tcl_ScanObjCmd, ValidateFormat): Ensure that the
+ %ld conversion works correctly on 64-bit platforms. [Bug 1011860]
+
+2004-08-19 Kevin Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (format): Changed default timezone format from
+ alphabetic to numeric to produce scannable times in more locales.
+ * tests/clock.test (clock-37.1): Removed now-unused 'needPST'
+ constraint and the comments that refer to it.
+
+2004-08-18 Andreas Kupries <andreask@activestate.com>
+
+ * library/init.tcl: Integrated TIP #189. We source a separate file
+ (see below), instead of inlining the contents of that file. This
+ should beeasier to maintain, and easier to backport/install in 8.4
+ installations.
+
+ Note: Usage of Tcl Modules is restricted to non-safe interps. It
+ cannot be loaded into a safe interp.
+
+ * library/tm.tcl: New file, the v2 reference implementation for TIP
+ #189, Tcl Modules.
+
+ * doc/tm.n: New file, documentation for Tcl Modules, based on the TIP.
+
+ * unix/mkLinks: Regenerated.
+ * win/makefile.vc: Added tm.tcl to list of files to install.
+
+2004-08-18 Kevin Kenny <kennykb@acm.org>
+
+ * tests/httpd (httpdRespond): Corrected an abuse of the [clock]
+ command that caused test failures for some values of [clock clicks].
+
+ * doc/clock.n
+ * generic/tclBasic.c (Tcl_CreateInterp, Tcl_HideUnsafeCommands):
+ * generic/tclClock.c (all):
+ * generic/tclInt.h:
+ * generic/tclInterp.c (CreateSlave):
+ * library/clock.tcl: (new file)
+ * library/init.tcl (clock):
+ * library/msgs/*.msg:(new files)
+ * library/tzdata/*:
+ * library/tzdata/*/*:
+ * library/tzdata/*/*/*: (new files)
+ * tools/installData.tcl: (new file)
+ * tools/loadICU.tcl: (new file)
+ * tools/makeTestCases.tcl: (new file)
+ * tools/tclZIC.tcl: (new file)
+ * unix/Makefile.in:
+ * unix/configure: (regenerated)
+ * unix/tcl.m4:
+ * tests/clock.test (all):
+ * win/Makefile.in:
+ * win/Makefile.vc:
+ Implementation of TIPs #173 and #209.
+
+ The [clock] command is now a Tcl ensemble, with most of its
+ functionality written in Tcl and callouts to C code only to access
+ low-level functions such as localtime, mktime and tzset.
+
+ In addition to the functionality changes called out in the two TIPs,
+ it is worth noting that the [clock] command in a safe slave
+ interpreter is now an alias to the [clock] command in the master, and
+ that [clock] is otherwise not expected to function entirely correctly
+ in safe interps. C code that simply does Tcl_MakeSafe needs to be
+ aware that [clock] may need special handling. (It appears unlikely
+ that such code actually exists.)
+
+ One incompatibility of note is that if the time zone cannot be
+ determined from the TZ, TCL_TZ environment variables, or from the
+ Windows control panel, so that the C library must be used for date and
+ time conversions, then times outside the range of time_t will fail;
+ they used to return bad data silently.
+
+ Many thanks to all the many people who assisted with testing,
+ debugging, criticism of the specification, and localisation. Deserving
+ of particular mention are Joe English, Clif Flynt, Donal K. Fellows,
+ Jeff Hobbs, Cameron Laird, Arjen Markus, Reinhard Max, Christopher
+ Nelson, Steve Offutt, Donald G. Porter, Pascal Scheffers, Peter da
+ Silva and Richard Suchenwirth-Bauersachs.
+
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2004-08-16 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/SetVar.3:
+ * generic/tclTest.c (TestseterrorcodeCmd):
+ * generic/tclVar.c (TclPtrSetVar):
+ * tests/result.test (result-4.*, result-5.*): [Bug 1008314] detected
+ and fixed by dgp.
+
+2004-08-13 Don Porter <dgp@users.sourceforge.net>
+
+ * library/msgcat/msgcat.tcl: Added checks to prevent [mclocale]
+ * tests/msgcat.test: from registering filesystem paths to possibly
+ malicious code to be evaluated by a later [mcload].
+
+2004-08-10 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * unix/tclUnixThrd.c (TclpThreadCreate): changed handling of the
+ returned thread ID since broken on 64-bit systems (Cray). Thanks to
+ Rob Ratcliff for reporting the bug.
+
+2004-08-03 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (MakeCachedEnsembleCommand): Initialize the
+ epoch field cached in the subcommand. [Bug 989298]
+ (NsEnsembleImplementationCmd): Plug a leak (thanks to Miguel Sofer for
+ spotting it with valgrind) and reduce the number of goto labels to
+ make the code clearer.
+
+2004-08-02 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl (pkg_mkIndex): Updated [pkg_mkIndex] to make
+ use of [glob -directory $dir -tails] and return options.
+
+ TIP#207 IMPLEMENTATION
+
+ * doc/interp.n: Added support for a -namespace option to the
+ * generic/tclBasic.c: [interp invokehidden] command. Also added an
+ * generic/tclInt.h: internal routine TclObjInvokeNamespace() and
+ * generic/tclInterp.c: corrected the flag names TCL_FIND_ONLY_NS and
+ * generic/tclNamesp.c: TCL_CREATE_NS_IF_UNKNOWN that are passed to the
+ * generic/tclTrace.c: internal routine TclGetNamespaceForQualName().
+ * tests/interp.test: [Patch 981841]
+
+ * generic/tclLiteral.c (TclCleanupLiteralTable): Corrected
+ * tests/compile.test (compile-12.4): flawed deletion of literal
+ internal reps that could lead to accessing of freed memory. Thanks to
+ Kevin Kenny for test case and fix [Bug 1001997].
+
+2004-07-30 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/safe.test (safe-2.1): Disabled senseless test. [Bug 999612]
+
+ * library/auto.tcl (auto_reset): Removed "protected" list of commands
+ from [auto_reset]. All entries in the auto_index can be re-loaded.
+ * library/package.tcl: Updated comment to reflect 2004-07-28 commit.
+
+ * generic/tclEvent.c (Tcl_Finalize): Re-organized Tcl_Finalize so
+ that Tcl_ExitProc's that call Tcl_Finalize recursively do not cause
+ deadlock. [Patch 999084 fixes Tk Bug 714956]
+
+2004-07-30 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/configure:
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Darwin: instead of setting PLAT_OBJS
+ to explict object files in tcl.m4, refer to MAC_OSX_OBJS makefile var.
+ * unix/Makefile.in: added MAC_OSX_OBJS variable.
+
+2004-07-29 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl: [::pkg::create] is now an alias. Test safe-2.1
+ will now fail until Bug 999612 is corrected.
+
+2004-07-28 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl: Moved private command
+ * library/tclIndex: [pkg_compareExtension] into ::tcl::Pkg.
+ * tests/pkg_mkIndex.test: Also moved implementation of
+ [::pkg::create] to [::tcl::Pkg::Create].
+
+2004-07-25 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/io.test: Make io-61.1 create file as binary to pass on Win32
+
+2004-07-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: simplify tclLocalVarNameType, removing the
+ reference to the corresponding proc. The reference is now seen as
+ unnecessary, and it may cause leaking circular references under some
+ circumstances (see for example [Bug 994838]).
+
+2004-07-22 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/eofchar.data (removed): Test io-61.1 now generates its own
+ * tests/io.test: file of test data as needed.
+
+2004-07-20 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclEvent.c: Correct threaded obj allocator to
+ * generic/tclInt.h: fully cleanup on exit and allow for
+ * generic/tclThreadAlloc.c: reinitialization. [Bug 736426]
+ * unix/tclUnixThrd.c: (mistachkin, kenny)
+ * win/tclWinThrd.c:
+
+2004-07-21 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclBasic.c (DeleteInterpProc):
+ * generic/tclLiteral.c (TclCleanupLiteralTable):
+ * generic/tclInt.h: added a TclCleanupLiteralTable function, called
+ from DeleteInterpProc, that frees internal representations of shared
+ literals early when an interpreter is being deleted. This change
+ corrects a number of memory mismanagement issues in the cases where
+ the internal representation of one literal contains a reference to
+ another, and avoids conditions such as resolved variable names
+ referring to procedure and namespace contexts that no longer exist.
+ [Bug 994838]
+
+2004-07-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in:
+ * win/Makefile.in: added 'install-private-headers' makefile target to
+ allow optionally installing private tcl headers. [FR 922727]
+
+ * macosx/Makefile: use new 'install-private-headers' target to install
+ private headers into framework. [FR 922727]
+
+ * unix/tclUnixFile.c (NativeMatchType): added support for readonly
+ matching of user immutable files (where available).
+
+ * macosx/tclMacOSXBundle.c: dynamically acquire address for
+ CFBundleOpenBundleResourceMap symbol, since it is only present in full
+ CoreFoundation on Mac OS X and not in CFLite on pure Darwin.
+
+2004-07-19 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * win/tclwinThrd.c: redefined MASTER_LOCK to call TclpMasterLock.
+ Fixes [Bug 987967]
+
+2004-07-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to rare 'cd' infinite loop in normalization
+ with vfs [Bug 991420].
+ * tests/fileSystem.test: added test for above bug.
+
+ * doc/FileSystem.3: clarified documentation of posix error codes in
+ 'remove directory' FS proc - 'EEXIST' is used to signify a non-empty
+ directory error (bug reported against tclvfs).
+
+2004-07-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in, unix/tcl.m4: move (C|LD)FLAGS after their
+ * unix/configure.in, unix/configure: _DEFAULT to allow for env setting
+ to override m4 switches. Move SC_MISSING_POSIX_HEADERS up and
+ consolidate calls to limit redundancy in configure.
+ (CFLAGS_WARNING): Remove -Wconversion
+ (SC_ENABLE_THREADS): Set m4 to force threaded build when built against
+ a threaded Tcl core.
+
+2004-07-16 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIOCmd.c (Tcl_FcopyObjCmd): Corrected a typo in the
+ generation of error messages and simplified by reusing data in a
+ variable instead of retrieving the string again. Fixes [Bug 835289].
+
+ * doc/OpenFileChnl.3: Added description of the behaviour of
+ Tcl_ReadChars when its 'charsToRead' argument is set to -1. Fixes [Bug
+ 934511].
+
+ * doc/CrtCommand.3: Added note that the arguments given to the command
+ proc of a Tcl_CreateCommand are in utf8 since Tcl 8.1. Closing [Patch
+ 414778].
+
+ * doc/ChnlStack.3: Removed the declaration that the interp argument to
+ Tcl_(un)StackChannel can be NULL. This fixes [Bug 881220], reported by
+ Marco Maggi <marcomaggi@users.sourceforge.net>.
+
+ * tests/socket.test: Accepted two new testcases by Stuart Casoff
+ <stwo@users.sourceforge.net> checking that -server and -async don't go
+ together [Bug 796534].
+
+ * unix/tclUnixNotfy.c (NotifierThreadProc): Accepted Joe Mistachkin's
+ patch for [Bug 990500], properly closing the notifier thread when its
+ exits.
+
+2004-07-15 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixThrd.c (TclpFinalizeMutex): Accepted Joe Mistachkin's
+ patch for [Bug 990453], closing leakage of mutexes. They were not
+ destroyed properly upon finalization.
+
+2004-07-15 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.h (CHANNEL_INCLOSE): New flag. Set in
+ * generic/tclIO.c (Tcl_UnregisterChannel): 'Tcl_Close' while the
+ * generic/tclIO.c (Tcl_Close): close callbacks are
+ run. Checked in 'Tcl_Close' and 'Tcl_Unregister' to prevent recursive
+ call of 'close' in the close-callbacks. This is a possible error made
+ by implementors of virtual filesystems based on 'tclvfs', thinking
+ that they have to close the channel in the close handler for the
+ filesystem.
+
+2004-07-14 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c:
+ * generic/tclIO.h:
+ * Not reverting, but #ifdef'ing the changes from May 19, 2004 out of
+ the core. This removes the ***POTENTIAL INCOMPATIBILITY*** for channel
+ drivers it introduced. This has become possible due to Expect gaining
+ a BlockModeProc and now handling blockingg and non-blocking modes
+ correctly. Thus [SF Tcl Bug 943274] is still fixed if a recent enough
+ version of Expect is used.
+
+ * doc/CrtChannel.3: Added warning about usage of a channel without a
+ BlockModeProc.
+
+2004-07-15 Andreas Kupries <andreask@pliers.activestate.com>
+
+ * generic/tclIOCmd.c (Tcl_PutsObjCmd): Added length check to the old
+ depreceated newline syntax, to ensure that only "nonewline" is
+ accepted. [Tcl SF Bug 985869], reported by Joe Mistachkin
+ <mistachkin@users.sourceforge.net>.
+
+2004-07-15 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclEvent.c (Tcl_Finalize): stuffed memory leak incurred by
+ re-initializing of TSD slots after the last call to
+ TclFinalizeThreadData (done from within Tcl_FinalizeThread()). We
+ basically just repeat the TclFinalizeThreadData() once more before
+ tearing down TSD keys in TclFinalizeSynchronization(). There should be
+ more elaborate mechanism in place for handling such issues, based on
+ thread cleanup handlers registered on the OS level. Such change
+ requires much more work and would also require TIP because some
+ visible parts of Tcl API would have to be modified. In the meantime,
+ this will do.
+
+ * generic/tclNotify.c (TclFinalizeNotifier): Added conditional
+ notifier finalization based on the fact that an TclInitNotifier has
+ been called for the current thread. This fixes the [Bug 770053] again.
+ Hopefully this time w/o unwanted side-effects.
+
+2004-07-15 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclLiteral.c (TclReleaseLiteral): Removed unused variable
+ 'codePtr' to silence a message from VC++.
+
+2004-07-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript):
+ * generic/tclLiteral.c (TclReleaseLiteral): fix for [Bug 467523],
+ which resurfaced with the latest changes. The previous strategy was to
+ have special code in TclReleaseLiteral to handle the self-references
+ generated by empty scripts. The new approach avoids the self-reference
+ altogether, by having empty scripts return an unshared literal.
+
+2004-07-15 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclEvent.c (NewThreadProc): Backout of changes to fix the
+ [Bug 770053]. See SF bugreport for more info.
+
+2004-07-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_EvalEx): leak fix by dgp, release
+ objv[objectsUsed] on error.
+
+2004-07-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c (Tcl_SubstObj): leak fix by dgp, release result
+ on error.
+
+2004-07-11 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (BuildEnsembleConfig): Don't forget to clean out
+ references when deleting the hash table.
+ * generic/tclDictObj.c (Tcl_DictObjRemoveKeyList): Oops, forgot to
+ delete value object when removing the hash entry. [Bug 989093 in part]
+
+2004-07-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TEBC): fixed leak of expandNestList objs when
+ there is an error while an expansion is in progress (code added at
+ checkForCatch).
+
+2004-07-11 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to 'cd' bug when vfs is active [tclvfs Bug
+ 986944] - this bug recently introduced by some threading fixes. Need
+ to work out how to add tests for this.
+
+2004-07-10 Kevin Kenny <kennykb@acm.org>
+
+ * tests/clock.test (clock-2.11): Changed the test so that it isn't an
+ infinite loop when run under valgrind on a slow virtual machine.
+ Thanks to Miguel Sofer for the bug report. Also put in code to restore
+ env(LC_TIME) after tests complete, silencing a warning from 'make
+ TESTFLAGS="-debug 1" test'.
+
+2004-07-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (DeleteInterpProc): reverted the modification of
+ 3 days ago, as the leak of [Bug 983660] is now handled by the change
+ in TclCleanupByteCode.
+ * generic/tclCompile.c (TclCleanupByteCode): let each bytecode remove
+ its references to literals at interp deletion, without updating the
+ dying literal table.
+ * generic/tclLiteral.c (TclDeleteLiteralTable): with the above change
+ to TclCleanupByteCode, this function now removes a single reference to
+ the literal object and cleans up its own structures.
+
+2004-07-08 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWinInit.c (AppendEnvironment): Silenced a compilation warning
+ about a type mismatch.
+
+2004-07-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript): fix for [Bug 458361].
+ Single-word scripts are compiled with an unshared cmdName to avoid
+ shimmering between bytecode and cmdName reps.
+
+2004-07-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (TclMergeReturnOptions): Simplified logic and
+ removed potential memory leak. [Bug 986257].
+
+2004-07-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/man2help2.tcl (setTabs, IPmacro): Added support for the more
+ advanced *roff macros used in Tk's doc/bind.n
+
+ * generic/tclObj.c (TclInitObjSubsystem): Declare all current object
+ types.
+
+2004-07-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/cmdMZ.test (cmdMZ-return-2.17): Added a test that a word
+ containing backslash-quoted value is treated correctly.
+
+ * generic/tclCompile.c (TclWordKnownAtCompileTime): [Bug 986196]
+ Corrected flaw above and the flaw that caused TCL_TOKEN_SIMPLE_WORDs
+ to have their original word value copied ( "{a b}" ) rather than the
+ actual value ( "a b" ). Thanks to Kevin Kenny for report and tests.
+
+2004-07-06 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/cmdMZ.test (cmdMZ-return-2.15,cmdMZ-return-2.16): Added a test
+ that a return code containing spaces is correctly returned.
+
+2004-07-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/man2html2.tcl (IPmacro, setTabs): Added support for the more
+ advanced *roff macros used in Tk's doc/bind.n
+
+2004-07-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (DeleteInterpProc): fix for [Bug 983660], found
+ by pspjuth. Tear down the global namespace before freeing the interp
+ handle, to allow the bytecodes to free their non-shared literals.
+ * generic/tclLiteral.c (TclReleaseLiteral): moved special code for
+ self-ref so that it is also used for non-shared literals. Possible bug
+ found by inspection.
+
+2004-07-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (ExprRoundFunc):
+ * tests/expr-old.test (39.1): added support for wide integers to
+ round(); [Bug 908375], reported by Hemang Lavana.
+
+2004-07-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.h:
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c: Moved declaration of TclCompEvalObj() from
+ tclCompile.h to the internal stubs table, for compiler
+ experimentation.
+
+2004-07-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/regcomp.c (stid): correct minor pointer size error
+
+ * generic/tclPipe.c (TclCreatePipeline): applied TIP #202 patch that
+ * doc/exec.n, tests/exec.test: adds 2>@1 as a special case
+ redirection of stderr to the result output.
+
+2004-07-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/io.test: Changed several tests to run the event loop rather
+ than just calling [update] periodically, avoiding intermittent
+ failures (usually in io-29.32) that stemmed from unreaped processes on
+ Windows.
+ * tests/winPipe.test (winpipe-1.11): Fixed a bug that caused test to
+ fail if the path name of the working directory contained whitespace
+ [Bug 678430]
+
+2004-07-01 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fileSystem.test: Added test for [Bug 970529]
+
+2004-07-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * win/README.binary, win/README: Updated references to Tcl and Tk 8.4
+ to point to 8.5 instead. Thanks to Theo Verelst for spotting this.
+ * generic/tcl.h: Added note to help prevent those changes from getting
+ missed in the future.
+
+ * doc/Namespace.3, doc/load.n, doc/Limit.3: Typo fixes and remove
+ duplicate documentation. [Bug 983146]
+
+2004-06-30 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/fileSystem.test: Minor correction to new fileSystem-9.X tests
+ so that they clean up temporary directories correctly.
+
+2004-06-30 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/filename.n: clarified behaviour concerning trailing slashes in
+ filenames [Bug 971976]
+
+ * win/tclWinFile.c:
+ * tests/fileSystem.test: fix and tests for [Bug 979879]
+
+2004-06-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP#188 IMPLEMENTATION
+
+ * doc/string.n, tests/string.test: Add 'wideinteger' to things
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): that can be tested for with
+ the [string is] subcommand. [Patch 940915, by Kevin Kenny]
+
+2004-06-29 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinInit.c: Corrected reference counting flaw in recent
+ changes. Thanks to Pat Thoyts. [Bug 981893].
+
+2004-06-29 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWin32Dll.c: fix to compilation with VC++ 5.2
+
+2004-06-29 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * library/safe.tcl: Make sure that the temporary variable is local to
+ the namespace and not inadvertently global. [Bug 981733]
+
+2004-06-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/unixNotfy.test: Modified constraints so that testing with a
+ threaded tclsh (not tcltest) will not hang.
+
+2004-06-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclThreadStorage.c: Corrected type casting errors that led
+ to calculation of a negative index value, thus accesses outside the
+ threadStorageCache array, thus memory corruption. Crash observed on
+ Mac OS X platform.
+
+2004-06-23 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclThread.c: Implements platform independent thread storage
+ * generic/tclThreadStorage.c: mechanism and fixes associated bugs on
+ platforms where there is limited thread local storage space
+ (Win98/WinNT4). [Patch 976496]
+
+ * generic/tclInt.decls:
+ * generic/tclIntDecls.h: Added thread storage functions to the
+ * generic/tclStubInit.c: internal stubs table.
+
+ * unix/Makefile.in:
+ * unix/configure:
+ * unix/tcl.m4:
+ * win/makefile.vc:
+ * win/rules.vc:
+ * win/Makefile.in: Modified the unix, VC++, and Cygwin build systems
+ * win/configure: to include the new "tclThreadStorage.c" and the new
+ * win/tcl.m4: USE_THREAD_STORAGE define.
+
+2004-06-23 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/io.test: Added -force to 18.1 and 18.2. This was failing on
+ WinXP.
+
+ * tests/winFCmd.test: Added a cleanup to winFCmd-16.11 to avoid a
+ failure in 16.12.
+
+ * tests/eofchar.data: Added -kb option to ensure a binary checkout to
+ win32 systems. This fixes a failure in io-61.1
+
+ * win/makefile.vc: fix for [Bug 977369] about launching tclsh to
+ generate a tclConfig.sh with the nmake build system
+
+2004-06-23 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/winDde.test (createChildProcess): Added a 200-ms delay (with
+ the event loop live) when shutting down the test DDE server process.
+ With the delay in place, nuisance failures of tests winDde-4.2, -6.5,
+ and -6.6 appear to be much less frequent. [Bug 957449]
+
+2004-06-23 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/*.test: Standardize use of platform constraints.
+
+ * unix/tclUnixInit.c (GetStackSize, TclpCheckStackSpace):
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): Added code to check
+ whether the C stack is about to be exceeded, from [Patch 746378] by
+ Joe Mistachkin but with substantial revisions.
+
+2004-06-22 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclEvent.c (NewThreadProc): Fixed broken build on Windows
+ caused by missing TCL_THREAD_CREATE_RETURN.
+
+ * tests/stack.test (stack-3.1): Corrected nuisance error in threaded
+ builds.
+
+2004-06-22 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclEvent.c:
+ * generic/tclInt.h:
+ * unix/tclUnixNotfy.c:
+ * unix/tclUnixThrd.c:
+ * win/tclWinThrd.c: [Bug 770053]. See bug report for more information
+ about what it does.
+
+ * tests/unixNotfy.test: rewritten to use tcltest::threadReap to
+ gracefully wait for the test thread to exit. Otherwise we got a race
+ condition with main thread exiting before the test thread. This
+ exposed the long-standing Tcl lib issue with resource
+ garbage-collection on application exit.
+
+2004-06-21 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWin32Dll.c (DllMain, _except_dllmain_detach_handler)
+ (TclpCheckStackSpace, _except_checkstackspace_handler)
+ (TclWinCPUID, _except_TclWinCPUID_detach_handler):
+ * win/tclWinChan.c (Tcl_MakeFileChannel)
+ (_except_makefilechannel_handler):
+ * win/tclWinFCmd.c (DoRenameFile, _except_dorenamefile_handler)
+ (DoCopyFile, _except_docopyfile_handler):
+ Rework pushing of exception handler function pointer so that compiling
+ with gcc -O3 works. Remove empty function call to avoid compiler
+ warning. Mark the DllMain function as noinline to avoid compiler error
+ from duplicated asm labels in generated code.
+
+2004-06-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclThreadAlloc.c (Ptr2Block): Rewrote so as to maximize the
+ chance of detecting and reporting a memory inconsistency without
+ relying on things being consistent. [Bug 975895]
+
+2004-06-18 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/load.test: Relaxed strictness of error message matching
+ for test load-2.3 so that it will pass on Mac OSX.
+
+ * generic/tclEncoding.c: Static TclFindEncodings -> FindEncodings.
+ * generic/tclInt.h: Updated TclpFindExecutable() so that failed
+ * generic/tclUtil.c: attempts to find the executable are saved
+ * unix/tclUnixFile.c: just as successful finds are. [Patch 966053]
+ * unix/tclUnixTest.c:
+
+2004-06-18 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/winFCmd.test (winFCmd-16.12): Changed test to compute the
+ target directory, so as not to fail if the user's HOME isn't the root.
+
+2004-06-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: autoconf 2.5 fixes in Darwin section.
+ * unix/configure: autoconf-2.57
+
+2004-06-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixInit.c (localeTable): Added some more locale to encoding
+ mapping info from Jim Huang <jserv@kaffe.org>
+
+ * generic/tclInt.h (PendingObjData,TclFreeObjMacro,etc):
+ * generic/tclObj.c (TclFreeObj): Added scheme for making TclFreeObj()
+ avoid blowing up the C stack when freeing up very large object trees.
+ [Bug 886231]
+
+ * win/tclWinInit.c (SetDefaultLibraryDir): Fix logic, simplify and add
+ comments.
+
+2004-06-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclObj.c: Added missing space in panic message.
+
+ * win/tclWinInit.c: Inform [tclInit] about the default library
+ directory via the ::tclDefaultLibrary variable. This should correct a
+ problem with my 2004-06-11 commit. Better solutions still in the
+ works. Thanks to Joe Mistachkin for pointing out the breakage.
+
+2004-06-16 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/library.n: Moved variables ::auto_oldpath and
+ * library/auto.tcl: ::unknown_pending into ::tcl namespace.
+ * library/init.tcl: [Bugs 808319, 948794]
+
+2004-06-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/binary.n: Added some notes to the documentation of the 'a'
+ format to address the point raised in [RFE 768852].
+
+2004-06-15 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclConfig.sh.in (TCL_EXTRA_CFLAGS): set to @CFLAGS@, which is
+ the configure-time CFLAGS. Addendum to m4 change on 2004-05-26.
+
+2004-06-14 Kevin Kenny <kennykb@acm.org>
+
+ * win/Makefile.in: Corrected compilation flags for tclPkgConfig.c so
+ that it doesn't require Stubs.
+ * generic/tclBasic.c (Tcl_CreateInterp): Removed comment stating that
+ TclInitEmbeddedConfigurationInformation needs Stubs; with the change
+ above, the comment is now erroneous.
+
+2004-06-11 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/Encoding.3: Removed bogus claims about tcl_libPath.
+
+ * generic/tclInterp.c (Tcl_Init): Stopped setting the
+ tcl_libPath variable. [tclInit] can get all its directories without it.
+
+ * tests/unixInit.test: Modified test code that made use of
+ tcl_libPath variable.
+
+ * unix/tclUnixInit.c: Stopped setting the tclDefaultLibrary variable,
+ execept on the Mac OS X platform with HAVE_CFBUNDLE. In that
+ configuration we should seek some way to make use of the TIP 59
+ facilities and get rid of that usage of tclDefaultLibrary as well.
+
+ * generic/tclInterp.c: Updated [tclInit] to make $env(TCL_LIBRARY) an
+ absolute path, and to include the scriptdir,runtime configuration value
+ on the search path for init.tcl.
+
+ * unix/tclUnixInit.c: The routines Tcl_Init() and TclSourceRCFile()
+ * win/tclWinInit.c: had identical implementations for both win and
+ * generic/tclInterp.c: unix. Moved to a single generic implementation.
+ * generic/tclMain.c:
+ * library/init.tcl:
+ * generic/tclInitScript.h (removed):
+ * unix/Makefile.in:
+ * win/tcl.dsp:
+
+ * unix/configure.in: Updated TCL_PACKAGE_PATH value to handle
+ * win/configure.in: --libdir configuration.
+
+ * unix/configure.in: autoconf-2.57
+ * win/configure.in:
+
+ * generic/tclBasic.c (Tcl_CreateInterp): Moved call to
+ TclInitEmbeddedConfigurationInformation() earlier in
+ Tcl_CreateInterp() so that other parts of interp creation and
+ initialization may access and use the config values.
+
+2004-06-11 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclAppInit.c: Restored the 'setargv' procedure when compiling
+ with mingw. Apparently, the command line parsing in mingw doesn't work
+ as well as that in vc++, and the result was (1) that winPipe-8.19
+ failed, and (2) that 'make test' would work at all only with
+ TESTFLAGS='-singleproc 1'. [Bug 967195]
+
+2004-06-10 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclIOUtil.c: removed forceful setting of the private cached
+ current working directory rep from within the Tcl_FSChdir(). We
+ delegate this task to the Tcl_FSGetCwd() which does this task anyway.
+ The relevant code is still present but disabled temporarily until the
+ change proves correct. The Tcl test suite passes all test with the
+ given change so I suppose it is good enough.
+
+2004-06-10 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixInit.c (TclpInitLibraryPath): Disabled addition of
+ * win/tclWinInit.c (TclpInitLibraryPath): relative-to-executable
+ directories to the library search path. A first step in reform of
+ Tcl's startup process.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Attempts to directly run ./tclsh or ./tcltest out of a build directory
+ will either fail, or will make use of an installed script library in
+ preference to the one in the source tree. Use `make shell` or `make
+ runtest` instead.
+
+ * tests/unixInit.test: Modified tests to suit above changes.
+
+ * generic/tclPathObj.c: Corrected [file tail] results when operating
+ on a path produced by TclNewFSPathObj(). [Bug 970529]
+
+2004-06-09 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclIOUtil.c: partially corrected [Bug 932314]. Also
+ corrected return values of Tcl_FSChdir() to reflect those of the
+ underlying platform-specific call. Originally, return codes were mixed
+ with those of Tcl.
+
+2004-06-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:
+ * generic/tclExecute.c: handle warning [Bug 969066]
+
+2004-06-08 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclHash.c (RebuildTable): Move declaration of variable so it
+ is only declared when it is used. [Bug 969068]
+
+2004-06-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n: Added correct option to example. [Bug 968219]
+
+2004-06-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tcl.h: Corrected Tcl_WideInt declarations so that the mingw
+ build works again.
+ * generic/tclDecls.h: Changes to the tests for clock
+ * generic/tclInt.decls: frequency in Tcl_WinTime so
+ * generic/tclIntDecls.h: that any clock frequency is
+ * generic/tclIntPlatDecls.h: accepted provided that all
+ * generic/tclPlatDecls.h: CPU's in the system share a
+ * generic/tclStubInit.c: common chip, and hence,
+ * tests/platform.test (platform-1.3): presumably, a common clock.
+ * win/tclWin32Dll.c (TclWinCPUID): This change necessitated a
+ * win/tclWinTest.c (TestwincpuidCmd) small burst of assembly code
+ * win/tclWinTime.c (Tcl_GetTime): to read CPU ID information,
+ which was added as TclWinCPUID in the internal Stubs. To test this
+ code in the common case of a single-processor machine, a
+ 'testwincpuid' command was added to tclWinTest.c, and a test case in
+ platform.test. Thanks to Jeff Godfrey and Richard Suchenwirth for
+ reporting this bug. [Bug 976722]
+
+2004-06-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Restored #include <stdio.h> to tcl.h,
+ rejecting the "fix" for "Bug" 945570. Tcl_FSSeek() needs the values of
+ SEEK_SET, etc. and too many extensions rely on tcl.h providing stdio.h
+ for them.
+
+2004-06-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinFile.c (TclpFindExecutable): when using GetModuleFileNameA
+ (Win9x), convert from CP_ACP to WCHAR then convert back to utf8.
+ Adjunct to 2004-04-07 fix.
+
+2004-06-02 David Gravereaux <davygrvy@pobox.com>
+
+ * tests/winPipe.test (winpipe-6.1): blocking set to 1 before closing
+ to ensure we get an exitcode. The windows pipe channel driver doesn't
+ differentiate between a blocking and non-blocking close just yet, but
+ will soon. Part of [Bug 947693]
+
+2004-06-02 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n: fix to documentation of 'file volumes' (Bug 962435)
+
+2004-06-01 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: check for either MSDEVDIR or MSVCDIR being in the
+ environment, for VC7. [Bug 942214]
+
+ * generic/tclIO.c (Tcl_SetChannelOption): -buffersize wasn't
+ understanding hexidecimal notation nor was reporting number conversion
+ errors. The behavior to silently ignore settings outside the
+ acceptable range of Tcl_SetChannelBufferSize (<10 or >1M) is
+ unchanged. This silent ignoring behavior might be up for review soon.
+
+2004-05-30 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c:
+ * win/tclWinPort.h: Reworked the win implementation of Tcl_WaitPid to
+ support exitcodes in the 'signed short' range. Even though this range
+ is non-portable, it is valid on windows. Detection of exception codes
+ are now more accurate. Previously, an application that exited with
+ ExitProcess((DWORD)-1); was improperly reported as exiting with
+ SIGABRT.
+
+2004-05-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c: Added comments describing the purposes of each
+ function in the limit implementation and rewrote the names of some
+ non-public functions for greater clarity of purpose.
+ * doc/interp.n: Added note about what happens when a limited
+ interpreter creates a slave interpreter.
+ * doc/Limit.3: Added manual page for the resource limit subsystem's C
+ API. [Bug 953903]
+
+2004-05-29 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/global.n, doc/interp.n, doc/lrange.n: Fix minor markup errors.
+
+2004-05-28 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/*.n: Added examples to many (too many to list) more man pages.
+
+2004-05-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c:
+ * generic/tclVar.c: using (ptrdiff_t) instead of (int) casting to
+ correct compiler warnings [Bug 961657], reported by Bob Techentin.
+
+2004-05-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/clock.test: Added a single test for the presence of %G in
+ [clock format], and conditioned out the clock-10.x series if they're
+ all going to fail because of a broken strftime() call. [Bug 961714]
+
+2004-05-27 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclHash.c (CompareStringKeys): Added #ifdef to allow people
+ to instruct this function to use strcmp(). [FRQ 951168]
+
+ * generic/tclVar.c: Moved declarations into #if guards so they only
+ happen when required.
+ * unix/tclUnixPort.h: Guard declaration of strtod() so it is only
+ enabled when we don't have a declaration in stdlib.h
+ * unix/tclUnixThrd.c (Tcl_CreateThread): Added declarations
+ * unix/tclUnixTest.c (AlarmHandler): and casts so that
+ * unix/tclUnixChan.c (TtyModemStatusStr): all functions are
+ * generic/tclScan.c (Tcl_ScanObjCmd): defined before use
+ * generic/tclDictObj.c (InvalidateDictChain): and no cross-type
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): uses are performed.
+
+ The overall effect is to make building with gcc with the additional
+ flags -Wstrict-prototypes -Wmissing-prototypes produce no increase in
+ the total number of warnings (except for main(), which is undeclared
+ for traditional reasons.)
+
+2004-05-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in: Rework configure ordering to TCL_LINK_LIBS,
+ * unix/tcl.m4: ENABLE_SHARED, CONFIG_CFLAGS, & ENABLE_SYMBOLS
+ * unix/configure: before TCL_EARLY_FLAGS and TCL_64BIT_FLAGS
+ * unix/configure.in: (about 400 lines earlier) in configure.in. This
+ forces CFLAGS configuration to be done before many tests, which is
+ needed for 64-bit builds and may affect other builds. Also make
+ CONFIG_CFLAGS append to CFLAGS directly instead of using EXTRA_CFLAGS,
+ and have LDFLAGS append to any existing value. [Bug 874058]
+ * unix/dltest/Makefile.in: change EXTRA_CFLAGS to DEFS
+
+2004-05-26 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Correction to debug prints and testing
+ * library/tcltest/pkgIndex.tcl: if TCLTEST_OPTIONS value. Corrected
+ * tests/tcltest.test: double increment of numTestFiles in
+ -singleproc 1 configurations. Updated tcltest-19.1 to tcltest 2.1
+ behavior. Corrected tcltest-25.3 to not falsely report a failure in
+ tcltest.test. Bumped to tcltest 2.2.6. [Bugs 960560, 960926]
+
+2004-05-25 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/http.n (http::config): add -urlencoding option (default utf-8)
+ * library/http/http.tcl: that specifies encoding conversion of
+ * library/http/pkgIndex.tcl: args for http::formatQuery. Previously
+ * tests/http.test: undefined, RFC 2718 says it should be
+ utf-8. 'http::config -urlencoding {}' returns previous behavior, which
+ will throw errors processing non-latin-1 chars. Bumped http package to
+ 2.5.0.
+
+2004-05-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (DeleteScriptLimitCallback): Move all deletion
+ of script callback hash table entries to happen here so the entries
+ are correctly removed at the right time. [Bug 960410]
+
+2004-05-25 Miguel Sofer <msofer@users.sf.net>
+
+ * docs/global.n: added details for qualified variable names [Bug
+ 959831]
+
+2004-05-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_FindNamespaceVar):
+ * tests/namespace.test (namespace-17.10-12): reverted commit of
+ 2004-05-23 and removed the tests, as it interferes with the varname
+ resolver and there are apps that break (AlphaTk). A fix will have to
+ wait for Tcl9.
+
+ * generic/tclVar.c: Caching of namespace variables disabled: no simple
+ way was found to avoid interfering with the resolver's idea of
+ variable existence. A cached varName may keep a variable's name in the
+ namespace's hash table, which is the resolver's criterion for
+ existence.
+
+ * tests/namespace.c (namespace-17.10): testing for interference
+ between varname caching and name resolver.
+
+2004-05-25 Kevin Kenny <kennykb@acm.org>
+
+ * tests/winFCmd.test: Correct test for the presence of a CD-ROM so
+ that it doesn't misdetect some other sort of filesystem with a
+ write-protected root as being a CD-ROM drive. [Bug 918267]
+
+2004-05-25 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/winPipe.test: Protect against path being set
+ * tests/unixInit.test: Unset path when done.
+ * tests/unload.test (unload-3.1): Verify [pkgb_sub] does not exist.
+ Delete interps when done.
+ * tests/stringComp.test: stop re-use of string.test test names
+ * tests/regexpComp.test: stop re-use of regexp.test test names
+ * tests/namespace.test (namespace-46.3): Verify [p] does not exist.
+ * tests/http.test: Clear away the custom [bgerror] when done.
+ * tests/io.test: Take care to use namespace variables.
+ * tests/autoMkindex.test (autoMkindex-5.2): Use variable "result"
+ that gets cleaned up.
+ * tests/exec.test: Clean up the "path" array.
+ * tests/interp.test (interp-9.3): Initialize res, so prior values
+ cannot make the test fail.
+ * tests/execute.test (execute-8.1): Updated to remove the trace set
+ on ::errorInfo. When left in place, that trace can cause later tests
+ to fail.
+
+2004-05-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclBasic.c: Removed references to Tcl_RenameCommand from
+ * generic/tcl.h: comments. [Bug 848440, second part]
+
+ * tests/fCmd.test: Rewrote tests that failed consistently on NFS so
+ they either succeed (through slightly more liberal matching of the
+ results) or are constrained to not run. [Bug 931312]
+
+ * doc/bgerror.n: Use idiomatic open flags for working with log
+ files. [Bug 959602]
+
+2004-05-24 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclExecute.c (VerifyExprObjType): use GET_WIDE_OR_INT to
+ properly have tclIntType used for smaller values. This corrects [TclX
+ Bug 896727] and any other 3rd party extension that created math
+ functions but was not yet WIDE_INT aware in them.
+
+2004-05-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (TclInitLimitSupport): Made limits work on
+ platforms where sizeof(void*)!=sizeof(int). [Bug 959193]
+
+2004-05-24 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/set.n: accurate description of name resolution process,
+ referring to namespace.n for details [Bug 959180]
+
+2004-05-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_FindNamespaceVar): [Bug 959052] fixed,
+ insuring that no "zombie" variables are found.
+ * generic/tclVar.c (TclLookupSimpleVar): comments re [Bug 736729]
+ (predecessor of [Bug 959052]) removed.
+ * tests/namespace.test: added tests 17.10-12
+
+ The patch modifies non-documented behaviour, and passes every test in
+ the testsuite. However, scripts relying on the old behaviour may
+ break.
+ Note that the only behaviour change concerns the creative writing of
+ unset variables. More precisely, which variable will be created when
+ neither a namespace variable nor a global variable by that name
+ exists, as defined by [info vars]. The new behaviour is that the
+ namespace resolution process deems a variable to exist exactly when
+ [info vars] finds it - ie, either it has value, or else it was "fixed"
+ by a call to [variable].
+ Note: this patch was removed on 2002-05-25.
+
+2004-05-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclObjLookupVar, TclObjUnsetVar2): fix for new (in
+ tcl8.4) exteriorisations of [Bug 736729] due to the use of
+ tclNsVarNameType obj types. Reenabling the use of this objType ("VAR
+ ref absolute" benchmark down to 66 ms, from 230). Added comments in
+ TclLookupSimpleVar explaining my current understanding of [Bug
+ 736729].
+
+2004-05-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: fix for [Bug 735335]. The use of tclNsVarNameType
+ objs is still disabled, pending resolution of [Bug 736729].
+
+2004-05-21 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/namespace.test (namespace-41.3): removed the {knownBug}
+ constraint: [Bug 231259] is closed since nov 2001, and the fix of [Bug
+ 729692] (INST_START_CMD) makes the test succeed.
+
+2004-05-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Move a few declarations a
+ short distance so pre-C99 compilers can cope. Also fix so
+ TCL_COMPILE_DEBUG path compiles...
+
+2004-05-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): reorganised TEBC
+ automatic variables, defining them in tight blocks instead of at the
+ function level. This has three purposes:
+ - it simplifies the analysis of individual instructions
+ - it is preliminary work to the non-recursive engine
+ - it allows a better register allocation by the optimiser; under
+ gcc3.3, this results in up to 10% runtime in some tests
+
+2004-05-20 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (TclLimitRemoveAllHandlers):
+ * generic/tclBasic.c (DeleteInterpProc):
+ * tests/interp.test (interp-34.7): Ensure that all limit callbacks are
+ deleted when their interpreters are deleted. [Bug 956083]
+
+2004-05-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinFile.c (TclpMatchInDirectory): fix for an issue where
+ there was a sneak path from Tcl_DStringFree to SetErrorCode(0). The
+ result was that the error code could be reset between a call to
+ FindFirstFileEx and the check of its status return, leading to a
+ bizarre error return of {POSIX unknown {No error}}. (Found in
+ unplanned test - no incident logged at SourceForge.)
+
+2004-05-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/interp.test (interp-34.3): Rewrite this test to see if a time
+ limit can catch a tight bytecode loop, a maximally aggressive
+ denial-of-service attack.
+ * generic/tclInterp.c (Tcl_LimitCheck): Fix the sense of checks to see
+ whether a time limit has been extended.
+
+ * tests/*.test: Many minor fixes, including ensuring that every test
+ is run (so constraints control whether the test is doing anything) and
+ making sure that constraints are always set using the API instead of
+ poking around inside tcltest's internal datastructures. Also got rid
+ of all trailing whitespace lines from the test suite!
+
+2004-05-19 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c: Fixed [SF Tcl Bug 943274]. This is the same problem
+ * generic/tclIO.h: as [SF Tcl Bug 462317], see ChangeLog entry
+ 2001-09-26. The fix done at that time is incomplete. It is possible to
+ get around it if the actual read operation is defered and not executed
+ in the event handler itself. Instead of tracking if we are in an read
+ caused by a synthesized fileevent we now track if the OS has delivered
+ a true event = actual data and bypass the driver if a read finds that
+ there is no actual data waiting. The flag is cleared by a short or
+ full read.
+
+ ***POTENTIAL INCOMPATIBILITY*** for channel drivers.
+
+2004-05-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix to (Bug 956063) in 'file dirname'.
+ * tests/cmdAH.test: added test for this bug.
+
+ * doc/FileSystem.3: better documentation of refCount requirements of
+ some FS functions (Bug 956126)
+
+2004-05-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclTest.c (TestgetintCmd): Made the tests in get.test check
+ * tests/get.test: Tcl_GetInt() since the core now
+ avoids that function.
+
+2004-05-18 Kevin B. Kenny <kennykb@acm.org>
+
+ * compat/strftime.c (_fmt, ISO8601Week):
+ * doc/clock.n:
+ * tests/clock.test: Major rework to the handling of ISO8601 week
+ numbers. Now passes all the %G and %V test cases on Windows, Linux and
+ Solaris [Bugs 500285, 500389, and 852944]
+
+2004-05-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/append.n, doc/upvar.n: Added example.
+
+2004-05-18 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: now generates a tclConfig.sh from Pat Thoyts [Patch
+ 909911]
+
+2004-05-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n: Improve clarity (based on [Patch 955361] by Peter
+ Spjuth)
+
+ * tools/man2help2.tcl (macro,SHmacro): Added support for subsection
+ (.SS) header macros.
+
+ * doc/interp.n: Added user documentation for the TIP#143 resource
+ limits and some examples.
+
+ * generic/tclInterp.c (Tcl_LimitCheck, Tcl_LimitTypeReset): Reset the
+ limit-exceeded flag when removing a limit.
+
+2004-05-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): added comments to
+ classify the variables according to their use in TEBC.
+
+2004-05-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/global.n, doc/uplevel.n: Added an example.
+
+ * tests/info.test (info-3.1): Corrected test result back to what it
+ used to be in Tcl 7.* now that command counts are being correctly kept
+
+ * generic/tclExecute.c (TEBC:INST_START_CMD): Make sure that the
+ command-count is always advanced. Allows TIP#143 limits to tell that
+ work is being done.
+
+ * doc/list.n: Updated example to fit with the unified format.
+ * doc/seek.n: Added some examples.
+
+2004-05-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * win/tclWinFile.c:
+ * tests/cmdAH.test: fix to (Bug 954263) where 'file executable' was
+ case-sensitive.
+
+2004-05-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/OpenFileChnl.3: Documented type of 'offset' argument to Tcl_Seek
+ was wrong. [Bug 953374]
+
+2004-05-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): remove one level of
+ indirection for compiledLocals addressing.
+
+2004-05-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_CALL_FUNC1): bugfix; restored
+ (DE)CACHE_STACK_INFO pair around the call - the user defined math
+ function could cause a recursive call to TEBC.
+
+2004-05-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_DeleteInterp):
+ * generic/tclExecute.c (INST_START_CMD): interp deletion now modifies
+ the compileEpoch, eliminating the need for the check for interp
+ deletion in INST_START_CMD.
+
+2004-05-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.h:
+ * generic/tclCompile.c:
+ * generic/tclExecute.c: changed implementation of {expand}, last
+ chance while in alpha as ...
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Scripts precompiled with ProComp under previous tcl8.5a versions may
+ malfunction due to changed instruction numbers for
+ INST_LIST_INDEX_IMM, INST_LIST_RANGE_IMM and INST_START_CMD.
+
+2004-05-14 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclInt.decls: Promoted TclpLocaltime and TclpGmtime
+ * generic/tclIntDecls.h: from Unix-specific stubs to the generic
+ * generic/tclIntPlatDecls.h: internal Stubs table. Reran 'genstubs'
+ * generic/tclStubInit.c:
+ * unix/tclUnixPort.h:
+
+ * generic/tclClock.c: Changed a buggy 'GMT' timezone specification
+ to the correct 'GMT0'. [Bug 922848]
+
+ * unix/tclUnixThrd.c: Moved TclpGmtime and TclpLocaltime to
+ unix/tclUnixTime.c where they belong.
+
+ * unix/tclUnixTime.c (TclpGmtime, TclpLocaltime, TclpGetTimeZone,
+ ThreadSafeGMTime [removed],
+ ThreadSafeLocalTime [removed],
+ SetTZIfNecessary, CleanupMemory):
+ Restructured to make sure that the same mutex protects all calls to
+ localtime, gmtime, and tzset. Added a check in front of those calls to
+ make sure that the TZ env var hasn't changed since the last call to
+ tzset, and repeat tzset if necessary. [Bug 942078] Removed a buggy
+ test of the Daylight Saving Time information in 'gettimeofday' in
+ favor of applying 'localtime' to a known value. [Bug 922848]
+
+ * tests/clock.test (clock-3.14): Added test to make sure that changes
+ to $env(TZ) take effect immediately.
+
+ * win/tclWinTime.c (TclpLocaltime, TclpGmtime): Added porting layer
+ for 'localtime' and 'gmtime' calls.
+
+2004-05-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c:
+ * generic/tclCompile.h: the math functions receive a pointer to top of
+ the stack (tosPtr) instead of the execution environment (eePtr). First
+ step towards a change in the execution stack management - it is now
+ only used within TEBC.
+
+2004-05-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP#143 IMPLEMENTATION
+
+ * generic/tclExecute.c (TclCompEvalObj, TclExecuteByteCode):
+ * generic/tclBasic.c (TclEvalObjvInternal): Enable limit checking.
+ * generic/tclInterp.c (Tcl_Limit*): Public limit API.
+ * generic/tcl.decls:
+ * tests/interp.test: Basic tests of command limits.
+
+ * doc/binary.n: TIP#129 IMPLEMENTATION [Patch 858211]
+ * generic/tclBinary.c: Note that the test suite probably has many more
+ * tests/binary.test: failures now due to alterations in constraints.
+
+2004-05-12 Miguel Sofer <msofer@users.sf.net>
+
+ Optimisations for INST_START_CMD [Bug 926164].
+ * generic/tclCompile.c (TclCompileScript): avoid emitting
+ INST_START_CMD as the first instruction in a bytecoded Tcl_Obj. It is
+ not needed, as the checks are done before calling TEBC.
+ * generic/tclExecute.c (TclExecuteByteCode): runtime peephole
+ optimisation: check at INST_POP if the next instruction is
+ INST_START_CMD, in which case we fall through.
+
+2004-05-11 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/split.n, doc/join.n: Updated examples and added more.
+
+2004-05-11 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/glob.n: documented behaviour of symbolic links with 'glob -types
+ d' (Bug 951489)
+
+2004-05-11 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/scan.n: Updated the examples to be clearer about their relevance
+ to the scan command.
+
+2004-05-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/scan.n: Added examples.
+
+2004-05-10 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c (BuildCommandLine): Moved non-obvious appending
+ logic to outside the loop and added commentary for its purpose. Also
+ use the existence of contents in the linePtr rather than the scratch
+ DString post the append, as this more clear.
+
+ (TclpCreateProcess): When under NT, with no console, and executing a
+ DOS application, the path priming does not need an ending space as
+ BuildCommandLine() will do this for us.
+
+2004-05-08 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c:
+ * generic/tclIOUtil.c: remove some compiler warnings on MacOS X.
+
+2004-05-07 Chengye Mao <chengye.geo@yahoo.com>
+
+ * win/tclWinPipe.c: refixed bug 789040 re-entered in rev 1.41. Let's
+ be careful and don't re-enter previously fixed bugs.
+
+2004-05-08 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/format.n: Added examples.
+
+2004-05-07 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/unset.n: added upvar.n to the "see also" list
+
+2004-05-07 Reinhard Max <max@suse.de>
+
+ * generic/tclEncoding.c:
+ * tests/encoding.test: added support and tests for translating
+ embedded null characters between real nullbytes and the internal
+ representation on input/output [Bug 949905].
+
+2004-05-07 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c:
+ * generic/tclIOUtil.c:
+ * generic/tclFileSystem.h:
+ * tests/fileSystem.test: fix for [Bug 943995], in which vfs-registered
+ root volumes were not handled correctly as glob patterns in all
+ circumstances.
+
+2004-05-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclObj.c (TclFreeObj): made TclFreeObj use the new macro
+ TclFreeObjMacro(), so that the allocation and freeing of Tcl_Obj is
+ defined in a single spot (the macros in tclInt.h), with the exception
+ of the TCL_MEM_DEBUG case.
+ The #ifdef logic for the corresponding macros has been reformulated to
+ make it clearer.
+
+2004-05-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/break.n, doc/continue.n, doc/for.n, doc/while.n: More examples.
+
+2004-05-05 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test (unixInit-2.10): Test correction for Mac OSX.
+ Be sure to consistently compare normalized path names. Thanks to
+ Steven Abner (tauvan). [Bug 948177]
+
+2004-05-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/CrtObjCmd.3: Remove reference to Tcl_RenameCommand; there is no
+ such API. [Bug 848440]
+
+2004-05-05 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinSock.c (SocketEventProc) : connect errors should fire both
+ the readable and writable handlers because this is how it works on
+ UNIX [Bug 794839]
+
+ * generic/tclEncoding.c (TclFinalizeEncodingSubsystem):
+ FreeEncoding(systemEncoding); moved to before the hash table iteration
+ as it was causing a double free attempt under some conditions.
+
+ * win/coffbase.txt: Added the tls extension to the list of preferred
+ load addresses.
+
+2004-05-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/fileSystem.test (filesystem-1.39): replace 'file volumes'
+ * tests/fileName.test (filename-12.9,10): lindex with direct C:/
+ hard-coded because A:/ was being used and that is empty for most.
+
+ * tests/winFCmd.test (winFCmd-16.12): test volumerelative $HOME
+
+2004-05-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclAlloc.c: Make sure Tclp*Alloc* routines get
+ * generic/tclInt.h: declared in the TCL_MEM_DEBUG and
+ * generic/tclThreadAlloc.c: TCL_THREADS configuration. [Bug 947564]
+
+ * tests/tcltest.test: Test corrections for Mac OSX. Thanks to Steven
+ Abner (tauvan). [Bug 947440]
+
+2004-05-04 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclEvent.c (TclSetLibraryPath): Suppress a warning.
+
+2004-05-03 Andreas Kupries <andreask@activestate.com>
+
+ * Applied [Patch 868853], fixing a mem leak in TtySetOptionProc.
+ Report and Patch provided by Stuart Cassoff <stwo@users.sf.net>.
+
+2004-05-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (TclCreateProc): comments corrected.
+
+2004-05-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript): setting the compilation
+ namespace outside of the loop.
+
+2004-05-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:
+ * generic/tclInt.h: reverted fix for [Bug 926445] of 2004-04-02,
+ restoring TCL_ALIGN to the header file. Todd Helfter reported that the
+ macro is required by tbcload.
+
+2004-05-03 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWin32Dll.c (TclpCheckStackSpace):
+ * tests/stack.test (stack-3.1): Fix for undetected stack overflow in
+ TclReExec on Windows. [Bug 947070]
+
+2004-05-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl: Corrected unique prefix matching of
+ interactive command completion in [unknown]. [Bug 946952]
+
+2004-05-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (TclObjInvokeProc):
+ * tests/proc.test (proc-3.6): fix for bad quoting of multi-word proc
+ names in error messages [Bug 942757]
+
+2004-04-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/glob.n, doc/incr.n, doc/set.n: More examples.
+ * doc/if.n, doc/rename.n, doc/time.n:
+
+2004-04-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Replaced Kevin Kenny's temporary
+ * generic/tclThreadAlloc.c: fix for Bug 945447 with a cleaner,
+ more permanent replacement.
+
+2004-04-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclThreadAlloc.c: Added a temporary (or so I hope!)
+ inclusion of "tclWinInt.h" to avoid problems when compiling on
+ Win32-VC++ with --enable-threads. [Bug 945447]
+
+2004-04-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/puts.n: Added a few examples.
+
+2004-04-29 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/execute.test (execute-8.2): Avoid crashes when there is
+ limited system stack space (threads-enabled).
+
+2004-04-28 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/global.n:
+ * doc/upvar.n:
+ * generic/tclVar.c (ObjMakeUpvar):
+ * tests/upvar.test (upvar-8.11):
+ * tests/var.test (var-3.11): Avoid creation of unusable variables:
+ [Bug 600812] [TIP 184].
+
+2004-04-28 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n: Fixed fault in documentation of -index option [943448]
+
+2004-04-26 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixFCmd.c (TclpObjNormalizePath): Corrected improper
+ positioning of returned checkpoint. [Bug 941108]
+
+2004-04-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/open.n, doc/close.n: Updated (thanks to David Welton) to be
+ clearer about pipeline errors and added example to open(n) that shows
+ simple pipeline use. [Patches 941377,941380]
+
+ * doc/DictObj.3: Added warning about the use of Tcl_DictObjDone and an
+ example of use of iteration. [Bug 940843]
+
+ * doc/Thread.3: Reworked to remove references to testing interfaces
+ and instead promote the use of the Thread package. [Patch 932527]
+ Also reworked and reordered the page for better readability.
+
+2004-04-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Removed obsolete declarations and #include's.
+ * generic/tclInt.h: [Bugs 926459, 926486]
+
+2004-04-24 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWin32Dll.c (DllMain): Added DisableThreadLibraryCalls() for
+ the DLL_PROCESS_ATTACH case. We're not interested in knowing about
+ DLL_THREAD_ATTACH, so disable the notices.
+
+2004-04-24 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclPort.h:
+ * macosx/Makefile:
+ * unix/Makefile.in: followup on tcl header reform [FR 922727]: removed
+ use of relative #include paths in tclPort.h to allow installation of
+ private headers outside of tcl source tree; added 'unix' dir to
+ compiler header search path; add newly required tcl private headers to
+ Tcl.framework on Mac OSX.
+
+2004-04-23 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (Tcl_SetChannelOption): Fixed [SF Tcl Bug 930851].
+ When changing the eofchar we have to zap the related flags to prevent
+ them from prematurely aborting the next read.
+
+2004-04-25 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix to [Bug 940281]. Tcl_FSJoinPath will now
+ always return a valid Tcl_Obj when the input is valid.
+ * generic/tclIOUtil.c: fix to [Bug 931823] for a more consistent
+ Tcl_FSPathSeparator() implementation which allows filesystems not to
+ implement their Tcl_FSFilesystemSeparatorProc if they wish to use the
+ default '/'. Also fixed associated memory leak seen with, e.g., tclvfs
+ package.
+ * doc/FileSystem.3: documented Tcl_FSJoinPath return values more
+ clearly, and Tcl_FSFilesystemSeparatorProc requirements.
+
+2004-04-23 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWin32Dll.c: Removed my mistake from 4/19 of adding an exit
+ handler to TclWinInit. TclWinEncodingsCleanup called from
+ TclFinalizeFilesystem does the Tcl_FreeEncoding for us.
+
+ * win/tclWinChan.c (Tcl_MakeFileChannel): Case for CloseHandle
+ returning zero and not throwing a
+ RaiseException(EXCEPTION_INVALID_HANDLE) now being done.
+
+2004-04-22 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclEvent.c: TclSetLibraryPath's use of caching the stringrep
+ of the pathPtr object to TclGetLibraryPath called from another thread
+ was ineffective if the original's stringrep had been invalidated as
+ what happens when it gets muted to a list.
+
+ * win/tclWinTime.c: If the Tcl_ExitProc (StopCalibration) is called
+ from the stack frame of DllMain's PROCESS_DETACH, the wait operation
+ should timeout and continue.
+
+ * generic/tclInt.h:
+ * generic/tclThread.c:
+ * generic/tclEvent.c:
+ * unix/tclUnixThrd.c:
+ * win/tclWinThrd.c: Provisions made so masterLock, initLock, allocLock
+ and joinLock mutexes can be recovered during Tcl_Finalize.
+
+2004-04-22 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/switch.n: Reworked the examples to be more systematically named
+ and to cover some TIP#75 capabilities.
+
+ * doc/cd.n: Documentation clarification from David Welton.
+
+ * doc/exec.n: Added some examples, Windows ones from Arjen Markus and
+ Unix ones by myself.
+
+2004-04-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/Hash.3: Added note to Tcl_{First,Next}HashEntry docs that
+ deleting the element they return is supported (and is in fact the only
+ safe update you can do to the structure of a hashtable while an
+ iteration is going over it.)
+
+ * doc/bgerror.n: Added example from David Welton. [Patch 939473]
+
+ * doc/after.n: Added examples from David Welton. [Patch 938820]
+
+2004-04-19 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWin32Dll.c: Added an exit handler in TclWinInit() so
+ tclWinTCharEncoding could be freed during Tcl_Finalize().
+
+ * generic/tclEncoding.c: Added FreeEncoding(systemEncoding) in
+ TclFinalizeEncodingSubsystem because its ref count was incremented in
+ TclInitEncodingSubsystem.
+
+2004-04-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/read.n: Added example from David Welton. [Patch 938056]
+
+2004-04-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclObj.c (Tcl_GetDoubleFromObj) Corrected "short circuit"
+ conversion of int to double. Reported by Jeff Hobbs on the Tcl'ers
+ Chat.
+
+2004-04-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lreplace.n, doc/lrange.n, doc/llength.n: More examples for
+ * doc/linsert.n, doc/lappend.n: the documentation.
+
+2004-04-16 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3: Corrected documentation of Tcl_FSUtime, and the
+ corresponding filesystem driver Tcl_FSUtimeProc. [Bug 935838]
+
+2004-04-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/socket.n: Added example from [Patch 936245].
+ * doc/gets.n: Added example based on [Patch 935911].
+
+2004-04-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclClock.c (Tcl_ClockObjCmd): Minor fault in a [clock
+ clicks] error message.
+
+2004-04-07 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinInit.c (TclpSetInitialEncodings): note that WIN32_CE is
+ also a unicode platform.
+ * generic/tclEncoding.c (TclFindEncodings, Tcl_FindExecutable):
+ * generic/tclInt.h: Correct handling of UTF
+ * unix/tclUnixInit.c (TclpInitLibraryPath): data that is actually
+ * win/tclWinFile.c (TclpFindExecutable): "clean", allowing the
+ * win/tclWinInit.c (TclpInitLibraryPath): loading of Tcl from paths
+ that contain multi-byte chars on Windows [Bug 920667]
+
+ * win/configure: define TCL_LIB_FLAG, TCL_BUILD_LIB_SPEC,
+ * win/configure.in: TCL_LIB_SPEC, TCL_PACKAGE_PATH in tclConfig.sh.
+
+2004-04-06 Don Porter <dgp@users.sourceforge.net>
+
+ Patch 922727 committed. Implements three changes:
+
+ * generic/tclInt.h: Reworked the Tcl header files into a clean
+ * unix/tclUnixPort.h: hierarchy where tcl.h < tclPort.h < tclInt.h
+ * win/tclWinInt.h: and every C source file should #include
+ * win/tclWinPort.h: at most one of those files to satisfy its
+ declaration needs. tclWinInt.h and tclWinPort.h also better organized
+ so that tclWinPort.h includes the Windows implementation of
+ cross-platform declarations, while tclWinInt.h makes declarations that
+ are available on Windows only.
+
+ * generic/tclBinary.c (TCL_NO_MATH): Deleted the generic/tclMath.h
+ * generic/tclMath.h (removed): header file. The internal Tcl
+ * macosx/Makefile (PRIVATE_HEADERS): header, tclInt.h, has a
+ * win/tcl.dsp: #include <math.h> directly,
+ and file external to Tcl needing libm should do the same.
+
+ * win/Makefile.in (WIN_OBJS): Deleted the win/tclWinMtherr.c file.
+ * win/makefile.bc (TCLOBJS): It's a vestige from matherr() days
+ * win/makefile.vc (TCLOBJS): gone by.
+ * win/tcl.dsp:
+ * win/tclWinMtherr.c (removed):
+
+ End Patch 922727.
+
+ * tests/unixInit.test (unixInit-3.1): Default encoding on Darwin
+ systems is utf-8. Thanks to Steven Abner (tauvan). [Bug 928808]
+
+2004-04-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/cmdAH.test (cmdAH-18.2): Added constraint because
+ access(...,X_OK) is defined to be permitted to be meaningless when
+ running as root, and OSX exhibits this. [Bug 929892]
+
+2004-04-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:
+ * generic/tclInt.h: removed the macro TCL_ALIGN() from tclInt.h,
+ replaced by the static macro ALIGN() in tclCompile.c [Bug 926445]
+
+2004-04-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.h: removed redundant #ifdef _TCLINT [Bug 928415],
+ reported by tauvan.
+
+2004-04-02 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/tcltest.test: Corrected constraint typos: "nonRoot" ->
+ "notRoot". Thanks to Steven Abner (tauvan). [Bug 928353]
+
+2004-04-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Removed obsolete tclBlockTime* declarations. [Bug
+ 926454]
+
+2004-04-01 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: Fix to privately reported vfs bug with 'glob
+ -type d -dir . *' across a vfs boundary. No tests for this are
+ currently possible without effectively moving tclvfs into Tcl's test
+ suite.
+
+2004-03-31 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/msgcat.n: Clarified message catalog file encodings. [Bug 811457]
+ * library/msgcat/msgcat.tcl: Updated internals to make use of [dict]s
+ to store message catalog data and to use [source -encoding utf-8] to
+ access catalog files. Thanks to Michael Sclenker. [Patch 875055, RFE
+ 811459] Corrected [mcset] to be able to successfully set a translation
+ to the empty string. [mcset $loc $src {}] was incorrectly set the $loc
+ translation of $src back to $src. Also changed [ConvertLocale] to
+ minimally require a non-empty "language" part in the locale value. If
+ not, an error raised prompts [Init] to keep looking for a valid locale
+ value, or ultimately fall back on the "C" locale. [Bug 811461].
+ * library/msgcat/pkgIndex.tcl: Bump to msgcat 1.4.1.
+
+2004-03-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclHash.c (HashStringKey): Cleaned up. This function is not
+ faster, but it is a little bit clearer.
+ * generic/tclLiteral.c (HashString): Applied logic from HashObjKey.
+ * generic/tclObj.c (HashObjKey): Rewrote to fix fault which hashed
+ every single-character object to the same hash bucket. The new code is
+ shorter, simpler, clearer, and (happily) faster.
+
+2004-03-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TEBC): reverting to the previous method for
+ async tests in TEBC, as the new method turned out to be too costly.
+ Async tests now run every 64 instructions.
+
+2004-03-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: New instruction code INST_START_CMD that
+ * generic/tclCompile.h: allows checking the bytecode's validity
+ * generic/tclExecute.c: [Bug 729692] and the interp's readyness
+ * tests/interp.test (18.9): [Bug 495830] before running the command.
+ * tests/proc.test (7.1): It also changes the mechanics of the async
+ * tests/rename.test (6.1): tests in TEBC, doing it now at command
+ start instead of every 16 instructions.
+
+2004-03-30 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: Fix to Windows glob where the pattern is a
+ * generic/tclIOUtil.c: volume relative path or a network share [Bug
+ * tests/fileName.test: 898238]. On windows 'glob' will now return
+ * tests/fileSystem.test: the results of 'glob /foo/bar' and 'glob
+ \\foo\\bar' as 'C:/foo/bar', i.e. a correct absolute path (rather than
+ a volume relative path).
+
+ Note that the test suite does not test commands like
+ 'glob //Machine/Shared/*' (on a network share).
+
+2004-03-30 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Fix to filename bugs recently
+ * tests/fileName.test: introduced [Bug 918320].
+
+2004-03-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c (Tcl_Main, StdinProc): Append newline only
+ * tests/basic.test (basic-46.1): to incomplete scripts
+ as part of multi-line script construction. Do not add an extra
+ trailing newline to the complete script. [Bug 833150]
+
+2004-03-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript): corrected possible segfault
+ when a compilation returns TCL_OUTLINE_COMPILE after having grown the
+ compile environment [Bug 925121].
+
+2004-03-27 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/array.n: added documentation for trace-realted behaviour of
+ 'array get' [Bug 449893]
+
+2004-03-26 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bumped version number to 8.5a2 to distinguish
+ * tools/tcl.wse.in: HEAD of CVS development from the recent 8.5a1
+ * unix/configure.in: release.
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.57
+ * win/configure:
+
+2004-03-26 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Fix to Windows-only volume relative path
+ * tests/fileSystem.test: normalization. [Bug 923568]. Also fixed
+ another volume relative bug found while testing.
+
+2004-03-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (NsEnsembleImplementationCmd): Fix messed up
+ handling of strncmp result which just happened to work in some libc
+ implementations. [Bug 922752]
+
+2004-03-23 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/StringObj.3: Inverted the sense of the documentation of how the
+ bytes parameter is documented to match behaviour. [Bug 921464]
+
+2004-03-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * compat/strtoll.c:
+ * compat/strtoull.c:
+ * generic/tclIntDecls.h:
+ * generic/tclMain.c:
+ * generic/tclObj.c:
+ * win/tclWinDde.c:
+ * win/tclWinReg.c:
+ * win/tclWinTime.c: Made HEAD build on Windows VC++ again.
+
+2004-03-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclIntDecls.h: Made HEAD build on Solaris again by applying
+ fix recommended by Don Porter.
+
+2004-03-18 Reinhard Max <max@suse.de>
+
+ * generic/tclIntDecls.h: Removed TclpTime_t. It wasn't really needed,
+ * generic/tclInt.h: but caused warnings related to
+ * generic/tclInt.decls: strict aliasing with GCC 3.3.
+ * generic/tclClock.c:
+ * generic/tclDate.c:
+ * generic/tclGetDate.y:
+ * win/tclWinTime.c:
+ * unix/tclUnixTime.c:
+
+ * generic/tclNamesp.c: Added temporary pointer variables to work
+ * generic/tclStubLib.c: around warnings related to
+ * unix/tclUnixChan.c: strict aliasing with GCC 3.3.
+
+ * unix/tcl.m4: Removed -Wno-strict-aliasing.
+
+2004-03-18 Daniel Steffen <das@users.sourceforge.net>
+
+ Removed support for Mac OS Classic platform [Patch 918142]
+
+ * README:
+ * compat/string.h:
+ * doc/Encoding.3:
+ * doc/FileSystem.3:
+ * doc/Init.3:
+ * doc/Macintosh.3 (removed):
+ * doc/OpenFileChnl.3:
+ * doc/OpenTcp.3:
+ * doc/SourceRCFile.3:
+ * doc/Thread.3:
+ * doc/clock.n:
+ * doc/exec.n:
+ * doc/fconfigure.n:
+ * doc/file.n:
+ * doc/filename.n:
+ * doc/glob.n:
+ * doc/open.n:
+ * doc/puts.n:
+ * doc/resource.n (removed):
+ * doc/safe.n:
+ * doc/source.n:
+ * doc/tclvars.n:
+ * doc/unload.n:
+ * generic/README:
+ * generic/tcl.decls:
+ * generic/tcl.h:
+ * generic/tclAlloc.c:
+ * generic/tclBasic.c:
+ * generic/tclCmdAH.c:
+ * generic/tclDate.c:
+ * generic/tclDecls.h:
+ * generic/tclFCmd.c:
+ * generic/tclFileName.c:
+ * generic/tclGetDate.y:
+ * generic/tclIOCmd.c:
+ * generic/tclIOUtil.c:
+ * generic/tclInitScript.h:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclMain.c:
+ * generic/tclMath.h:
+ * generic/tclNotify.c:
+ * generic/tclPathObj.c:
+ * generic/tclPlatDecls.h:
+ * generic/tclPort.h:
+ * generic/tclStubInit.c:
+ * generic/tclTest.c:
+ * generic/tclThreadJoin.c:
+ * library/auto.tcl:
+ * library/init.tcl:
+ * library/package.tcl:
+ * library/safe.tcl:
+ * library/tclIndex:
+ * mac/AppleScript.html (removed):
+ * mac/Background.doc (removed):
+ * mac/MW_TclAppleScriptHeader.h (removed):
+ * mac/MW_TclAppleScriptHeader.pch (removed):
+ * mac/MW_TclBuildLibHeader.h (removed):
+ * mac/MW_TclBuildLibHeader.pch (removed):
+ * mac/MW_TclHeader.h (removed):
+ * mac/MW_TclHeader.pch (removed):
+ * mac/MW_TclHeaderCommon.h (removed):
+ * mac/MW_TclStaticHeader.h (removed):
+ * mac/MW_TclStaticHeader.pch (removed):
+ * mac/MW_TclTestHeader.h (removed):
+ * mac/MW_TclTestHeader.pch (removed):
+ * mac/README (removed):
+ * mac/bugs.doc (removed):
+ * mac/libmoto.doc (removed):
+ * mac/morefiles.doc (removed):
+ * mac/porting.notes (removed):
+ * mac/tclMac.h (removed):
+ * mac/tclMacAETE.r (removed):
+ * mac/tclMacAlloc.c (removed):
+ * mac/tclMacAppInit.c (removed):
+ * mac/tclMacApplication.r (removed):
+ * mac/tclMacBOAAppInit.c (removed):
+ * mac/tclMacBOAMain.c (removed):
+ * mac/tclMacChan.c (removed):
+ * mac/tclMacCommonPch.h (removed):
+ * mac/tclMacDNR.c (removed):
+ * mac/tclMacEnv.c (removed):
+ * mac/tclMacExit.c (removed):
+ * mac/tclMacFCmd.c (removed):
+ * mac/tclMacFile.c (removed):
+ * mac/tclMacInit.c (removed):
+ * mac/tclMacInt.h (removed):
+ * mac/tclMacInterupt.c (removed):
+ * mac/tclMacLibrary.c (removed):
+ * mac/tclMacLibrary.r (removed):
+ * mac/tclMacLoad.c (removed):
+ * mac/tclMacMath.h (removed):
+ * mac/tclMacNotify.c (removed):
+ * mac/tclMacOSA.c (removed):
+ * mac/tclMacOSA.r (removed):
+ * mac/tclMacPanic.c (removed):
+ * mac/tclMacPkgConfig.c (removed):
+ * mac/tclMacPort.h (removed):
+ * mac/tclMacProjects.sea.hqx (removed):
+ * mac/tclMacResource.c (removed):
+ * mac/tclMacResource.r (removed):
+ * mac/tclMacSock.c (removed):
+ * mac/tclMacTclCode.r (removed):
+ * mac/tclMacTest.c (removed):
+ * mac/tclMacThrd.c (removed):
+ * mac/tclMacThrd.h (removed):
+ * mac/tclMacTime.c (removed):
+ * mac/tclMacUnix.c (removed):
+ * mac/tclMacUtil.c (removed):
+ * mac/tcltkMacBuildSupport.sea.hqx (removed):
+ * tests/all.tcl:
+ * tests/binary.test:
+ * tests/cmdAH.test:
+ * tests/cmdMZ.test:
+ * tests/fCmd.test:
+ * tests/fileName.test:
+ * tests/fileSystem.test:
+ * tests/interp.test:
+ * tests/io.test:
+ * tests/ioCmd.test:
+ * tests/load.test:
+ * tests/macFCmd.test (removed):
+ * tests/osa.test (removed):
+ * tests/resource.test (removed):
+ * tests/socket.test:
+ * tests/source.test:
+ * tests/unload.test:
+ * tools/cvtEOL.tcl (removed):
+ * tools/genStubs.tcl:
+ * unix/Makefile.in:
+ * unix/README:
+ * unix/mkLinks:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/tcl.dsp:
+
+2004-03-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n: Improved examples on the advanced capabilities of
+ lsearch (with the right options, set element removal can be done)
+ following discussion on tkchat.
+
+2004-03-16 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/catch.n: Compiled [catch] no longer fails to catch syntax
+ errors. Removed the claims in the documentation that it does.
+ * doc/return.n: Updated example to use [dict merge].
+
+2004-03-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure, unix/tcl.m4: add -Wno-strict-aliasing for GCC to
+ suppress useless type puning warnings.
+
+2004-03-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/file.n: *roff formatting fix. [Bug 917171]
+
+2004-03-15 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinNotify.c: Fixed a mistake where the return value of
+ MsgWaitForMultipleObjectsEx for "a message is in the queue" wasn't
+ accurate. I removed the check on the case result==(WAIT_OBJECT_0 + 1)
+ This was having the error of falling into GetMessage and waiting there
+ by accident, which wasn't alertable through Tcl_AlertNotifier. I'll do
+ some more study on this and try to find-out why.
+
+2004-03-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ IMPLEMENTATION OF TIP#163
+ * generic/tclDictObj.c (DictMergeCmd): This is based on work by Joe
+ * tests/dict.test (dict-20.*): English in Tcl [FRQ 745851]
+ * doc/dict.n: but not exactly.
+
+2004-03-10 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclGetDate.y (TclGetDate): Fix so that [clock scan
+ <timeOfDay> -gmt true] uses the GMT base date instead of the local
+ one. [Bug 913513]
+ * tests/clock.test: Added test cases for wrong ISO8601 week number
+ [Bug 500285] and wrong GMT base date [Bug 913513]. Several tests still
+ fail on Windows, and these are actual faults in [clock scan]. Fix is
+ still pending.
+ * generic/tclDate.c: Regenerated.
+
+2004-03-08 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: Fix to 'glob -path' near the root
+ * tests/fileName.test: of the filesystem. [Bug 910525]
+
+2004-03-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c (TclParseInit): Modified TclParseInit so
+ * generic/tclTest.c ([testexprparser]): that Tcl_Parse initialization
+ conforms to documented promised about what fields will not be
+ modified by what Tcl_Parse* routines. [Bug 910595]
+
+2004-03-05 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/configure.in: Check for define of MWMO_ALERTABLE in winuser.h.
+ * win/tclWinPort.h: If MWMO_ALERTABLE is not defined in winuser.h then
+ define it. This is needed for Mingw.
+
+2004-03-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclTest.c: Modified TesteventObjCmd to use a
+ Tcl_QueuePosition in place of an 'int' for the enumerated queue
+ position, to avoid a compiler warning on SGI. [Bug 771960]
+
+2004-03-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/registry.test: Applied fix from [Patch 910174] to make the test
+ for an English-language system include any country code, rather than
+ just English-United States.1252. Thanks to Pat Thoyts for the changes.
+
+2004-03-04 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/registry.test: Applied fixed from [Bug 766159] to skip two
+ tests on Win98 that depend on a Unicode registry (NT specific).
+
+2004-03-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h (TclParseInit): Factored the common code
+ * generic/tclParse.c (TclParseInit): for initializing a Tcl_Parse
+ * generic/tclParseExpr.c: struct into one routine.
+
+2004-03-04 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/reg/pkgIndex.tcl: Added TIP #100 support to the
+ * win/tclWinReg.c: registry package [patch 903831]
+ This provides a Windows test of the TIP #100 mechanism and a sample to
+ show how unloading an extension can be done.
+
+2004-03-04 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/dltest/pkgua.c: Fix minor syntax problems. [Bug 909288]
+
+2004-03-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.5a1 TAGGED FOR RELEASE ***
+
+ * changes: updated for 8.5a1
+
+2004-03-03 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: default environment variable for VC++ is %MSDevDir%
+ not %MSVCDir%, although vcvars32.bat sets both.
+
+ * win/tclWinNotify.c (Tcl_WaitForEvent) : Allows an idling notifier to
+ service "Asynchronous Procedure Calls" from its wait state. Only
+ useful for extension authors who decide they might want to try
+ "completion routines" with WriteFileEx(), as an example. From
+ experience, I recommend that "completion ports" should be used instead
+ as the execution of the callbacks are more managable.
+
+2004-03-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README: update patchlevel to 8.5a1
+ * generic/tcl.h:
+ * tools/tcl.wse.in, tools/tclSplash.bmp:
+ * unix/configure, unix/configure.in, unix/tcl.spec:
+ * win/README.binary, win/configure, win/configure.in:
+
+ * unix/tcl.m4: update HP-11 build libs setup
+
+2004-03-01 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Allow 64-bit enabling on
+ IRIX64-6.5* systems. [Bug 218561]
+ * unix/configure: autoconf-2.57
+
+ * generic/tclTrace.c (TclCheckInterpTraces): The TIP 62
+ * generic/tclTest.c (TestcmdtraceCmd): implementation introduced a
+ * tests/trace.test (trace-29.10): bug by testing the CallFrame
+ level instead of the iPtr->numLevels level when deciding what traces
+ created by Tcl_Create(Obj)Trace to call. Added test to expose the
+ error, and made fix. [FRQ 462580]
+
+2004-02-28 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fileSystem.test: fix to Tcl Bug 905163.
+ * tests/fileName.test: fix to Tcl Bug 904705.
+
+ * doc/{various}.n: removed 'the the' typos.
+
+2004-02-26 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: fixed copyright year in Tcl.framework Info.plist
+
+2004-02-25 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/basic.test: Made several tests more robust to the
+ * tests/cmdMZ.test: list-quoting of path names that might contain
+ * tests/exec.test: Tcl-special chars like { or [. Should help us
+ * tests/io.test: sort out [Bug 554068]
+ * tests/pid.test:
+ * tests/socket.test:
+ * tests/source.test:
+ * tests/unixInit.test:
+
+2004-02-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclLoad.c (Tcl_LoadObjCmd): Missing dereference caused
+ segfault with non-loadable extension. [Bug 904307]
+
+ * unix/tclUnixChan.c (TcpGetOptionProc): Stop memory leak with very
+ long hostnames. [Bug 888777]
+
+2004-02-25 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinDde.c: Removed some gcc warnings - except for the
+ -Wconversion warning for GetGlobalAtomName. gcc is just wrong about
+ this.
+
+2004-02-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ IMPLEMENTATION OF TIP#100 FROM GEORGIOS PETASIS
+ * generic/tclLoad.c (Tcl_UnloadObjCmd): Implementation.
+ * tests/unload.test: Test suite.
+ * unix/dltest/pkgua.c: Helper for test suite.
+ * doc/unload.n: Documentation.
+ Also assorted changes (mostly small) to several other files.
+
+2004-02-23 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/regc_locale.c (cclass): Buffer was having its size reset
+ instead of being released => memleak. [Bug 902562]
+
+2004-02-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclLoad.c (Tcl_LoadObjCmd): Fixed memory leak due to an
+ improper error exit route.
+
+2004-02-20 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinSock.c (SocketThreadExitHandler): Don't call
+ TerminateThread when WaitForSingleObject returns a timeout.
+ Tcl_Finalize called from DllMain will pause all threads. Trust that
+ the thread will get the close notice at a later time if it does ever
+ wake up before being cleaned up by the system anyway.
+
+2004-02-17 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n:
+ * library/tcltest/tcltest.tcl: Changed -verbose default value to
+ {body error} so that detailed information on unexpected errors in
+ tests is provided by default, even after the fix for [Bug 725253]
+
+2004-02-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/unixInit.test (unixInit-7.1):
+ * unix/tclUnixInit.c (TclpInitPlatform): ensure the std fds exist to
+ prevent crash condition [Bug 772288]
+
+2004-02-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Bozo mistake in memory
+ releasing order when in an error case. [Bug 898910]
+
+2004-02-16 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclTrace.c (TclTraceExecutionObjCmd)
+ (TclTraceCommandObjCmd): fix possible mem leak in trace info.
+
+2004-02-12 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinInit.c (AppendEnvironment): Use the tail component of the
+ passed in lib path instead of just blindly using lib+4. That worked
+ when lib was "lib/..." but fails for other values. Thanks go to
+ Patrick Samson for pointing this out.
+
+2004-02-10 David Gravereaux <davygrvy@pobox.com>
+
+ * win/nmakehlp.c: better macro grepping logic.
+
+2004-02-07 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc:
+ * win/rules.vc:
+ * win/tcl.rc:
+ * win/tclsh.rc: Added an 'unchecked' option to the OPTS macro so a
+ core built with symbols can be linked to the non-debug enabled C
+ run-time. As per discussion with Kevin Kenny. Called like this:
+
+ nmake -af makefile.vc OPTS=unchecked,symbols
+
+ This clarifies the meaning of the 'g' naming suffix to mean only that
+ the binary requires the debug enabled C run-time. Whether the binary
+ contains symbols or not is a different condition.
+
+2004-02-06 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/clock.n: Removed reference to non-existent [file ctime].
+
+2004-02-05 David Gravereaux <davygrvy@pobox.com>
+
+ * docs/tclvars.n: Added clarification of the tcl_platform(debug) var
+ that it only refers to the flavor of the C run-time, and not whether
+ the core contains symbols.
+
+2004-02-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFileName.c (SkipToChar): Corrected CONST and type-casting
+ issues that caused compiler warnings.
+
+2004-02-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c (StoreStatData): Removed improper refcount
+ decrement of the varName parameter. This error was causing segfaults
+ following test cmdAH-28.7.
+
+ * library/tcltest/tcltest.tcl: Corrected references to non-existent
+ $name variable in [cleanupTests]. [Bug 833637]
+
+2004-02-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Corrected parsing of single command
+ line argument (option with missing value) [Bug 833910]
+ * library/tcltest/pkgIndex.tcl: Bump to version 2.2.5.
+
+2004-02-02 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclIO.c (Tcl_Ungets): Fixes improper filling of the channel
+ buffer. This is the buffer before the splice. [Bug 405995]
+
+2004-02-01 David Gravereaux <davygrvy@pobox.com>
+
+ * tests/winPipe.test: more pass-thru commandline verifications.
+ * win/tclWinPipe.c (BuildCommandLine): Special case quoting for '{'
+ not required by the c-runtimes's parse_cmdline().
+ * win/tclAppInit.c: Removed our custom setargv() in favor of the work
+ provided by the c-runtime. [Bug 672938]
+
+ * win/nmakehlp.c: defensive techniques to avoid static buffer
+ overflows and a couple envars upsetting invokations of cl.exe and
+ link.exe. [Bug 885537]
+
+ * tests/winPipe.test: Added proof that BuildCommandLine() is not doing
+ the "N backslashes followed a quote -> insert N * 2 + 1 backslashes
+ then a quote" rule needed for the crt's parse_cmdline().
+ * win/tclWinPipe.c: Fixed BuildCommandLine() to pass the new cases.
+
+2004-01-30 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: Use the -GZ compiler switch when building for
+ symbols. This is supposed to emulate the release build better to avoid
+ hiding problems that only show themselves in a release build.
+
+2004-01-29 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix to [Bug 883143] in file normalization
+
+2004-01-29 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n:
+ * generic/tclFCmd.c
+ * generic/tclTest.c
+ * library/init.tcl
+ * mac/tclMacFile.c
+ * tests/fileSystem.test: fix to [Bug 886352] where 'file copy -force'
+ had inconsistent behaviour wrt target files with insufficient
+ permissions, particular from vfs->native fs. Behaviour of '-force' is
+ now always consistent (and now consistent with behaviour of 'file
+ delete -force'). Added new tests and documentation and cleaned up the
+ 'simplefs' test filesystem.
+
+ * generic/tclIOUtil.c
+ * unix/tclUnixFCmd.c
+ * unix/tclUnixFile.c
+ * win/tclWinFile.c: made native filesystems more robust to C code
+ which asks for mount lists.
+
+ * generic/tclPathObj.c: fix to [Bug 886607] removing warning/error
+ with some compilers.
+
+2004-01-28 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclObj.c (SetBooleanFromAny): Rewrite to do more efficient
+ string->bool conversion.
+ Many other minor whitespace/style fixes to this file too.
+
+2004-01-27 David Gravereaux <davygrvy@pobox.com>
+
+ * win/nmakehlp.c: Use '.\nul' as the sourcefile name instead of 'nul'
+ so VC 5.2 doesn't try searching the path for it and failing with a
+ possible dialogbox popping up about having to add a CD to an empty
+ drive. Also added a SetErrorMode() call to disable any dialogs that
+ cl.exe or link.exe might create. [Bug 885537]
+
+2004-01-22 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/file.n: clarified documentation of 'file system' [Bug 883825]
+ * tests/fCmd.test: improved test result in failure case.
+
+2004-01-22 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * tests/fileSystem.test: 3 new tests
+ * generic/tclPathObj.c: fix to [Bug 879555] in file normalization.
+ * doc/filename.n: small clarification to Windows behaviour with
+ filenames like '.....', 'a.....', '.....a'.
+
+ * generic/tclIOUtil.c: slight improvement to native cwd caching on
+ Windows.
+
+2004-01-21 David Gravereaux <davygrvy@pobox.com>
+
+ * doc/Panic.3: Mentions of 'panic' and 'panicVA' removed from the
+ documentation.
+
+2004-01-21 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * doc/FileSystem.3:
+ * generic/tcl.decls:
+ * generic/tclCmdAH.c
+ * generic/tclDecls.h
+ * generic/tclFCmd.c
+ * generic/tclFileName.c
+ * generic/tclFileSystem.h
+ * generic/tclIOUtil.c
+ * generic/tclInt.decls
+ * generic/tclInt.h
+ * generic/tclIntDecls.h
+ * generic/tclPathObj.c
+ * generic/tclStubInit.c
+ * generic/tclTest.c
+ * mac/tclMacFile.c
+ * tests/fileName.test
+ * tests/fileSystem.test
+ * tests/winFCmd.test
+ * unix/tclUnixFile.c
+ * win/tclWin32Dll.c
+ * win/tclWinFCmd.c
+ * win/tclWinFile.c
+ * win/tclWinInt.h
+
+ Three main issues accomplished: (1) cleaned up variable names in the
+ filesystem code so that 'pathPtr' is used throughout. (2) applied a
+ round of filesystem optimisation with better handling and caching of
+ relative and absolute paths, requiring fewer conversions. (3)
+ clarifications to the documentation, particularly regarding the
+ acceptable refCounts of objects. Some new tests added. Tcl benchmarks
+ show a significant improvement over 8.4.5, and on Windows typically a
+ small improvement over 8.3.5 (Unix still appears to require
+ optimisation). TCL_FILESYSTEM_VERSION_2 introduced, but for internal
+ use only. There should be no public incompatibilities from these
+ changes. Thanks to dgp for extensive testing.
+
+2004-01-19 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinPipe.c (Tcl_WaitPid): Fixed a thread-safety problem with
+ the process list. The delayed cut operation after the wait was going
+ stale by being outside the list lock. It now cuts within the lock and
+ does a locked splice for when it needs to instead. [Bug 859820]
+
+2004-01-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompile.c, generic/tclCompile.h: Two new opcodes,
+ INST_LIST_INDEX_IMM and INST_LIST_RANGE_IMM, that have operand(s) of
+ new type OPERAND_IDX4 which represents indexes into things like lists
+ (and perhaps other things eventually.)
+ * generic/tclExecute.c (TclExecuteByteCode): Implementation of the new
+ opcodes. INST_LIST_INDEX_IMM does a simple [lindex] with either front-
+ or end-based simple indexing. INST_LIST_RANGE_IMM does an [lrange]
+ with front- or end-based simple indexing for both the reference to the
+ first and last items in the range.
+ * generic/tclCompCmds.c (TclCompileLassignCmd): Generate bytecode for
+ the [lassign] command.
+
+2004-01-17 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinInit.c: added #pragma comment(lib, "advapi32.lib") when
+ compiling under VC++ so we don't need to specify it when linking.
+
+2004-01-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LassignObjCmd): Add more shimmering
+ protection for when the list is also one of the variables.
+
+ BASIC IMPLEMENTATION OF TIP#57
+ * generic/tclCmdIL.c (Tcl_LassignObjCmd): Implementation of the
+ [lassign] command that takes full advantage of Tcl's object API.
+ * doc/lassign.n: New file documenting the command.
+ * tests/cmdIL.test (cmdIL-6.*): Test suite for the command.
+
+2004-01-15 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinReg.c: Placed the requirement for advapi.lib into the
+ object file itself with #pragma comment (lib, ...) when built with
+ VC++. This will simplify linking for users of the static library.
+
+ * win/rules.vc: Added new 'fullwarn' to the CHECKS commandline macro;
+ sets $(FULLWARNINGS).
+
+ * win/makefile.vc: Removed 'advapi.lib' from $(baselibs). Added new
+ logic to crank-up the warning levels for both compile and link when
+ $(FULLWARNINGS) is set. Some clean-up with how the resource files are
+ built and how -DTCL_USE_STATIC_PACKAGES is sent when compiling the
+ shells.
+
+ * win/tclAppInit.c: Small change in how TCL_USE_STATIC_PACKAGES is
+ used.
+
+ * win/tcl.rc:
+ * win/tclsh.rc: Some clean-up with how the resource files are built.
+ Fixed 'OriginalFilename' problem that still thought a debug suffix was
+ still 'd', now is 'g'.
+
+2004-01-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclDictObj.c (TraceDictPath, DictExistsCmd): Adjusted
+ behaviour of [dict exists] so a failure to look up a dictionary along
+ the path of dicts doesn't trigger an error. This is how it was
+ documented to behave previously... [Bug 871387]
+
+ * generic/tclDictObj.c: Assorted dict fixes from Peter Spjuth relating
+ to [Bug 876170].
+ (SetDictFromAny): Make sure that lists retain their ordering even when
+ converted to dictionaries and back.
+ (TraceDictPath): Correct object reference count handling!
+ (DictReplaceCmd, DictRemoveCmd): Stop object leak.
+ (DictIncrCmd,DictLappendCmd,DictAppendCmd,DictSetCmd,DictUnsetCmd):
+ Simpler handling of reference counts when assigning to variables.
+ * tests/dict.test (dict-19.2): Memory leak stress test
+
+2004-01-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Silence compiler warnings.
+
+ Patch 876451: restores performance of [return]. Also allows forms such
+ as [return -code error $msg] to be bytecompiled.
+
+ * generic/tclInt.h: Factored Tcl_ReturnObjCmd() into two pieces:
+ * generic/tclCmdMZ.c: TclMergeReturnOptions(), which can parse the
+ options to [return], check their validity, and create the
+ corresponding return options dictionary, and TclProcessReturn(), which
+ takes that return options dictionary and performs the [return]
+ operation.
+
+ * generic/tclCompCmds.c: Rewrote TclCompileReturnCmd() to call
+ TclMergeReturnOptions() at compile time so the return options
+ dictionary is computed at compile time (when it is fully known). The
+ dictionary is pushed on the stack along with the result, and the code
+ and level values are included in the bytecode as operands. Also
+ supports optimized compilation of un-[catch]ed [return]s from procs
+ with default options into the INST_DONE instruction.
+
+ * generic/tclExecute.c: Rewrote INST_RETURN instruction to retrieve
+ the code and level operands, pop the return options from the stack,
+ and call TclProcessReturn() to perform the [return] operation.
+
+ * generic/tclCompile.h: New utilities include TclEmitInt4 macro
+ * generic/tclCompile.c: and TclWordKnownAtCompileTime().
+
+ End Patch 876451.
+
+ * generic/tclFileName.c (Tcl_GlobObjCmd): Latest changes to management
+ of the interp result by Tcl_GetIndexFromObj() exposed improper interp
+ result management in the [glob] command procedure. Corrected by
+ adopting the Tcl_SetObjResult(Tcl_NewStringObj) pattern. This stopped
+ a segfault in test filename-11.36. [Bug 877677]
+
+2004-01-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct, Tcl_WrongNumArgs):
+ Create fresh objects instead of using the one currently in the
+ interpreter, which isn't guaranteed to be fresh and unshared. The cost
+ for the core will be minimal because of the object cache, and this
+ fixes [Bug 875395].
+
+2004-01-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompExpr.c (CompileLandOrLorExpr): cosmetic changes.
+
+2004-01-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompExpr.c (CompileLandOrLorExpr): new logic, fewer
+ instructions. As a side effect, the instructions INST_LOR and
+ INST_LAND are now never used.
+ * generic/tclExecute.c (INST_JUMP*): small optimisation; fix a bug in
+ debug code.
+
+2004-01-11 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclWinThrd.c (Tcl_ConditionNotify): condPtr must be dereferenced
+ to see if there are waiters else uninitialized datum is manipulated.
+ [Bug 849007 789338 745068]
+
+2004-01-09 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tcl.h: Renamed and deprecated #defines moved to within the
+ #ifndef TCL_NO_DEPRECATED block. This allows us to build Tcl to check
+ for deprecated functions in use, such as panic() and Tcl_Ckalloc(). By
+ request from DKF. Extensions that build with -DTCL_NO_DEPRECATED now
+ have these macros as restricted.
+ ***POTENTIAL INCOMPATIBILITY***
+
+ * win/makefile.vc:
+ * win/rules.vc: Added -DTCL_NO_DEPRECATED usage to makefile.vc.
+ Called like this: nmake -af makefile.vc CHECKS=nodep
+
+2004-01-09 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to infinite loop in TclFinalizeFilesystem
+ [Bug 873311]
+
+ ******************************************************************
+ *** 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" ***
+ ******************************************************************
diff --git a/ChangeLog.2005 b/ChangeLog.2005
new file mode 100644
index 0000000..0d1d7cf
--- /dev/null
+++ b/ChangeLog.2005
@@ -0,0 +1,3822 @@
+2005-12-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStubLib.c: Corrected a typo in "missing Stubs table
+ pointer."
+
+2005-12-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tcl.decls: Destubbed TclTomMathInitializeStubs - it is in
+ * generic/tcl.h: the stub library, not the main shared
+ * generic/tclBasic.c: library. Exported Tcl_InitBignumFromDouble.
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclStrToD.c:
+
+ * generic/tclDecls.h:
+ * generic/tclStubLib.c:
+ * generic/tclStubInit.c: Regenerated.
+
+ * generic/clock.tcl: Reverted to using the time zone abbreviation and
+ not its name to "stop the bleeding" on [Bug 1386377]. This is *not* a
+ good long-term solution, but there may not be one.
+
+ * libtommath/bn_mp_sqrt.c: Improved the initial approximation to the
+ square root, roughly doubling the speed of the routine. (This is a
+ local change that needs to be communicated to Tom.)
+
+ * win/Makefile.in: Corrected a bug where tommath_class.h and
+ tommath_superclass.h were not installed, making it impossible for
+ client code to compile against the tommath stubs.
+
+ * library/tzdata: Updated to Olson's tzdata2005r. (Latest changes to
+ Daylight Saving Time in Canada, plus redefinition of the Posix-style
+ zones [e.g., EST5EDT] to be locale-independent.)
+
+ * libtommath: Updated to Tom St.Denis's release 0.37.
+
+2005-12-20 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclThreadAlloc.c (Tcl_GetMemoryInfo): Format values as longs
+ and not ints, so they are less likely to wrap on 64-bit machines.
+
+2005-12-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: Modified [string is double] to use
+ * tests/string.test: TclParseNumber() to parse trailing whitespace.
+ Ensures consistency, and makes it easier to cleanup after invalid
+ internal reps left behind by parsing [Bugs 1360532 1382287].
+
+ * generic/tclParseExpr.c: Added TCL_PARSE_NO_WHITESPACE to
+ * generic/tclScan.c: TclParseNumber() calls since [scan] and [expr]
+ * tests/scan.test: parsing don't want spaces in parsed numbers.
+
+ * generic/tclInt.h: Added TCL_PARSE_NO_WHITESPACE flag to the
+ * generic/tclStrToD.c: TclParseNumber() interface.
+
+2005-12-19 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/Tcl.n: Clarify what is going on in variable substitution
+ following thread on comp.lang.tcl.
+
+2005-12-18 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileDictCmd): Ensure that we only do an
+ 'endCatch' when there's a preceding 'beginCatch'. [Bug 1382528] Many
+ thanks to Anton Kovalenko for finding this and pointing out that it was
+ a catch stack handling problem!
+
+2005-12-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: workaround gcc warning "comparison is always
+ * generic/tclTest.c: false due to limited range of data type".
+
+ * macosx/Tcl.xcode/project.pbxproj:
+ * macosx/Tcl.xcodeproj/project.pbxproj:
+ * unix/Makefile.in: add new tclTomMath* files.
+
+ * generic/tclBasic.c: replace panic with Tcl_Panic.
+
+2005-12-13 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tcl.decls: Added changes to export an additional stubs
+ * generic/tclBasic.c: table to represent the 'libtommath' routines
+ * generic/tclDecls.h: that Tcl uses and export them to callers.
+ * generic/tclInt.decls: Reran 'genstubs'
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclStubLib.c:
+ * generic/tclTomMath.decls:
+ * generic/tclTomMath.h:
+ * generic/tclTomMathDecls.h:
+ * generic/tclTomMathInterface.c:
+ * generic/tommath.h:
+ * tools/fix_tommath_h.tcl:
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+ * generic/tclClock.c: Made changes to silence a number of compiler
+ * generic/tclIO.c: warnings when building with mingw.
+ * generic/tclIORChan.c:
+ * generic/tclLink.c:
+ * generic/tclListObj.c:
+ * generic/tclObj.c:
+ * generic/tclParseExpr.c:
+ * generic/tclProc.c:
+ * generic/tclTimer.c:
+ * win/tclWinChan.c:
+ * win/tclWinConsole.c:
+ * win/tclWinDde.c:
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+ * win/tclWinReg.c:
+ * win/tclWinSock.c:
+
+2005-12-13 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclExecute.c (TEBC:DICT_FIRST,DICT_DONE): Only decrease the
+ references to the dictionary once the iteration completes. Do this by
+ storing the dict in the iterator context variable. [Bug 1379349] Thanks
+ to Ulrich Ring and Tobias Hippler for finding this.
+
+2005-12-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tcl.m4, unix/configure: Fix sh quoting error reported in
+ bash-3.1+ [Bug 1377619] (schafer)
+
+2005-12-12 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/mathfunc.n: Changed two examples from the incorrect 'tcl::math::'
+ to 'tcl::mathfunc::' [Bug 1378818]
+
+2005-12-09 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/configure: Regen.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Define MACHINE for gcc builds. The
+ lack of a definition of this variable in the manifest file was causing
+ a runtime error in wish built with gcc.
+
+2005-12-09 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/lsearch.test (lsearch-10.8..10): If the -start is off the end,
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): searching should find nothing
+ at all. [Bug 1374778]
+
+2005-12-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/Makefile.in, win/makefile.vc: Add Win x64 and CE build support
+ * win/tcl.m4, win/configure: CE still requires C code fixes.
+
+ * generic/tcl.h: use struct __stat64 (not _stat64) for MSC_VER >= 1400
+ (i.e. latest Platform SDK).
+
+2005-12-07 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/socket.n: Cross-referenced the socket documentation better to the
+ fconfigure documentation on the topic of asynch sockets.
+ * doc/fconfigure.n: Added keyword to documentation of -blocking option
+ so that people looking for "asynch" can find it as well.
+
+2005-12-05 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixPort.h (Darwin): fix incorrect __DARWIN_UNIX03 configure
+ overrides that were originally copied from Darwin CVS (rdar://3693001)
+
+2005-12-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * tools/tclZIC.tcl: Updated to reflect changes in calling sequence when
+ GetJulianDateFromEraYearMonthDay moved to C.
+ * library/tzdata: Regenerated from Olson's tzdata2005p.tar.gz - the
+ 'systemv' changes appear not to affect Tcl's processing of the dates.
+
+2005-12-05 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/configure.in: move check for fts API to configure.in and run it
+ * unix/tcl.m4: on all platforms, since Linux glibc2 and *BSDs
+ also have this; using fts is more efficient than a recursive
+ opendir/readdir.
+ * unix/tclUnixFCmd.c (TraverseUnixTree): add support to fts code for
+ platforms with stat64.
+ * unix/configure:
+ * unix/tclConfig.h.in: regen.
+
+2005-12-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure: Use fts file API on Darwin if available.
+ * unix/tcl.m4: Addresses file delete issues in readdir noted
+ * unix/tclUnixFCmd.c: in [Bug 1034337]. (steffen)
+ Remove redundant stat call for each file in DoCopyFile. (steffen)
+
+2005-12-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c: Moved a tiny bit more of [clock format] from run
+ * library/clock.tcl: time to compile time, and fixed a l10n bug in the
+ process. [Bug 1371446]. Also, conditoned the call to SetupTimeZone to
+ speed the common case where TZData($timezone) already exists, and
+ achieved a puny speedup by making ::tcl::clock::getenv not throw
+ errors.
+ * unix/Makefile.in: Made some changes to support a 'make' command that
+ is present on some antiquated versions of Solaris.
+
+2005-12-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Continued rationalizing the code, eliminating
+ numerous redundant [mc] calls. Added another time boost by precompiling
+ a [::format] command to do the bulk of the work of [clock format].
+
+2005-12-01 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/Makefile.in: Add remaining dependency info. While automated
+ maintenance of this information would be good, having it at all is much
+ better than a poke in the eye with a sharp stick...
+
+2005-12-01 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclClock.c: fix warning.
+
+ * unix/tcl.m4 (Darwin): fix error when MACOSX_DEPLOYMENT_TARGET unset
+ * unix/configure: regen.
+
+2005-11-30 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/Makefile.in: Add dependency information relating to tclCompile.h
+ since when the list of opcodes changes it is usually useful to rebuild
+ everything that depends on it (but which is nonetheless a small
+ fraction of the total set of Tcl source files).
+
+ ***POTENTIAL INCOMPATIBILITY*** for bytecode savers/loaders. See below
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Arrange for very simple
+ [switch] invokations to be compiled into hash lookups into jump tables;
+ only a very specific kind of [switch] can be safely compiled this way,
+ but that happens to be the most common kind. This makes around 5-10%
+ difference to the speed of execution of clock.test.
+ * generic/tclExecute.c (TEBC:INST_JUMP_TABLE): New instruction to allow
+ for jumps to locations looked up in a hashtable. Requires a new AuxData
+ type, tclJumptableInfoType (supported by the functions DupJumptableInfo
+ and FreeJumptableInfo in tclCompCmds.c) so anything that saves bytecode
+ containing this *must* be updated!
+
+2005-11-30 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c: Fixed a bad refcount in previous commit that led
+ to a corrupted heap. Also silenced a warning that some compilers gave
+ about the excessively long constant for JULIAN_SEC_POSIX_EPOCH. Also
+ fixed a bug where [clock format] would fail in the :localtime zone for
+ times before the Posix Epoch. Thanks to Miguel Sofer for pointing out
+ all of these. Also rationalized the code a little bit by moving parts
+ of [clock scan] into C, eliminating some code that was duplicated in
+ the C and Tcl layers.
+
+2005-11-29 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclBasic.c: Moved a big part of [clock format] down
+ * generic/tclClock.c: to the C level in order to make it go faster.
+ * generic/tclInt.h: Preliminary measurements suggest that it
+ * generic/clock.tcl: more than doubles in speed with this change.
+
+2005-11-29 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): Allow [lsearch -regexp] to
+ process REs that contain backreferences. This expensive mode of
+ operation is only used if the RE would otherwise cause a compilation
+ failure. [Bug 1366683]
+
+2005-11-28 Kevin Kenny <kennykb@acm.org>
+
+ * tools/tclZIC.tcl (convertTimeOfDay): Corrected a typo that caused
+ wrong DST transitions in any time zone where the transition is
+ specified as local Standard Time (as opposed to wall-clock or UTC).
+ (Also updated the code to be bignum-safe.)
+ * tests/clock.test (clock-51.1): Added regression test for the above.
+ * library/tzdata: Updated to Olson's 'tzdata2005o' (changes for Cuba,
+ Nicaragua, Jordan, and Georgia) and regenerated. Thanks to Paul
+ Mackerras for reporting this problem.
+
+2005-11-27 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4 (Darwin): add 64bit support, check for Tiger copyfile(),
+ add CFLAGS to SHLIB_LD to support passing -isysroot in env(CFLAGS) to
+ configure (flag can't be present twice, so can't be in both CFLAGS and
+ LDFLAGS during configure), don't use -prebind when deploying on 10.4,
+ define TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING (rdar://3171542).
+ (SC_ENABLE_LANGINFO, SC_TIME_HANDLER): add/fix caching, fix obsolete
+ autoconf macros. Sync with tk/unix/tcl.m4.
+
+ * unix/configure.in: fix obsolete autoconf macros, sync gratuitous
+ formatting/ordering differences with tk/unix/configure.in.
+
+ * unix/Makefile.in: add CFLAGS to tclsh/tcltest link to make executable
+ linking the same as during configure (needed to avoid losing any linker
+ relevant flags in CFLAGS, in particular flags that cannot be in
+ LDFLAGS). Avoid concurrent linking of tclsh and compiling of
+ tclTestInit.o or xtTestInit.o during parallel make.
+ (checkstubs, checkdoc, checkexports): dependency and Darwin fixes
+ (dist): add new macosx files.
+
+ * unix/tclLoadDyld.c (TclpDlopen): use NSADDIMAGE_OPTION_WITH_SEARCHING
+ on second NSAddImage only. [Bug 1204237]
+ (TclGuessPackageName): should not be MODULE_SCOPE.
+ (TclpLoadMemory): ppc64 and endian (i386) fixes, add support for
+ loading universal (fat) bundles from memory.
+
+ * unix/tclUnixFCmd.c:
+ * macosx/tclMacOSXFCmd.c: ppc64 and endian (i386) fixes.
+ (TclMacOSXCopyFileAttributes): add support for new Tiger copyfile() API
+ to enable copying of xattrs & ACLs by [file copy].
+
+ * generic/tcl.h: add Darwin specifc configure overrides for TCL_WIDE
+ defines to support fat compiles of ppc and ppc64 at the same time,
+ (replaces Darwin CVS fix by emoy, rdar://3693001). add/correct location
+ of version numbers in macosx files.
+
+ * generic/tclInt.h: clarify fat compile comment.
+
+ * unix/tclUnixPort.h: add Darwin specifc configure overrides to support
+ fat compiles, where configure runs only once for multiple architectures
+ (replaces Darwin CVS fix by emoy, rdar://3693001).
+
+ * macosx/tclMacOSXBundle.c:
+ * macosx/tclMacOSXNotify.c:
+ * unix/tclUnixNotfy.c:
+ * unix/tclUnixPort.h: fix #include order to support compile time
+ override of HAVE_COREFOUNDATION in tclUnixPort.h when building for
+ ppc64
+
+ * macosx/Tcl.pbproj/default.pbxuser (new file):
+ * macosx/Tcl.pbproj/jingham.pbxuser:
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * macosx/Tcl.xcode/default.pbxuser (new file):
+ * macosx/Tcl.xcode/project.pbxproj (new file):
+ * macosx/Tcl.xcodeproj/default.pbxuser (new file):
+ * macosx/Tcl.xcodeproj/project.pbxproj (new file): new/updated
+ projects for Xcode 2.2 on 10.4, Xcode 1.5 on 10.3 & ProjectBuilder on
+ 10.2, with native tcltest targets and support for universal (fat)
+ compiles.
+
+ * macosx/README: clarification/cleanup, document new Xcode projects and
+ universal (fat) builds via CFLAGS (i.e. all of ppc ppc64 i386 at once).
+
+ * unix/Makefile.in:
+ * unix/aclocal.m4:
+ * unix/configure.in:
+ * unix/dltest/Makefile.in:
+ * macosx/configure.ac (new file): add support for inclusion of
+ unix/configure.in by macosx/configure.ac, allows generation of a config
+ headers enabled configure script in macosx (required by Xcode
+ projects).
+
+ * macosx/GNUmakefile: rename from Makefile to avoid overwriting by
+ configure run in tcl/macosx, add support for reusing configure cache,
+ build target fixes, remove GENERIC_FLAGS override now handled by
+ tcl.m4.
+
+ * generic/tcl.decls: add Tcl_Main declaration as comment to avoid
+ 'checkstubs' target complaining about it missing from stubs.
+
+ * generic/regex.h:
+ * generic/tclDate.c:
+ * generic/tclEnv.c:
+ * generic/tclGetDate.y:
+ * generic/tclIOUtil.c:
+ * generic/tclObj.c:
+ * generic/tclStubInit.c:
+ * generic/tclStubLib.c:
+ * generic/tclPathObj.c:
+ * generic/tclThreadAlloc.c:
+ * generic/tclThreadStorage.c:
+ * generic/tclTrace.c:
+ * generic/tclVar.c:
+ * generic/tommath.h:
+ * tools/fix_tommath_h.tcl:
+ * unix/tclUnixFCmd.c: ensure externally visible symbols not contained
+ in stubs table are declared as MODULE_SCOPE (or as static if not used
+ outside of own source file). These changes allow 'make checkstubs' to
+ complete without error on Darwin with gcc 4.
+
+ * generic/rege_dfa.c (getvacant):
+ * generic/regexec.c (cfind):
+ * generic/tclCompExpr.c (CompileSubExpr):
+ * generic/tclNamesp.c (NamespaceEnsembleCmd):
+ * unix/tclUnixChan.c (TclUnixWaitForFile): initialise variables to
+ silence gcc 4 warnings.
+
+ * generic/tclExecute.c (TclExecuteByteCode): fix unused variable
+ warning when NO_WIDE_TYPE is defined.
+
+ * generic/regguts.h: only #define NDEBUG if not already #defined.
+
+ * unix/tclUnixNotfy.c:
+ * macosx/tclMacOSXNotify.c: sync whitespace & comments.
+
+ * unix/tclUnixPort.h:
+ * win/tclWinPort.h: remove declaration of obsolete&unused TclpMutex
+ API.
+
+ * unix/configure:
+ * unix/tclConfig.h.in: regen.
+
+2005-11-21 Andreas Kupries <andreask@activestate.com>
+
+ * unix/Makefile.in (install-libraries): Updated Makefile to new
+ * win/Makefile.in (install-libraries): version of the http package.
+ This fixes the ifneeded/provide mismatch reported when trying to
+ require http. Should we maybe try to automatically extract the version
+ number from the http code to prevent future breakage ?
+
+ This follows the update of the version number by dgp on Nov 15 (No
+ entry found in the ChangeLog).
+
+2005-11-20 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclStubLib.c: Don't set tclStubsPtr to 0 when
+ Tcl_PkgRequireEx() fails [Fix for [Bug 1091431] "Tcl_InitStubs failure
+ crashes wish"]
+
+2005-11-18 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/trace.test (trace-34.5): [Bug 1047286], added a second test
+ illustrating the role of "ns in callStack" in the ns's visibility
+ during deletion traces.
+
+2005-11-18 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n: Restored several missing lines near the %w format group
+ so that %w and %W are documented with their actual behaviour. [Bug
+ 1359183]
+
+2005-11-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIO.c (TclFinalizeIOSubsystem): preserve statePtr until we
+ retrieve the next statePtr from it.
+
+2005-11-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclObj.c (GetBignumFromObj): replace NULL with
+ tclEmptyStringRep to stop memcpy from complaining in a debug build
+ (the corresponding branch is eliminated by the optimiser otherwise).
+
+2005-11-18 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (TclFinalizeIOSubsystem): Applied Pat Thoyts' patch
+ for [Bug 1359094]. This moves the retrieval of the next channel state
+ to the end of the loop, as the called closeproc may close other
+ channels, i.e. modify the list we are iterating, invalidating any
+ pointer retrieved earlier.
+
+2005-11-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclListObj.c: Restored the SetListFromAny routine to the
+ * generic/tclObj.c: "list" Tcl_ObjType, and restored the
+ Tcl_RegisterObjType() call for "list". This addresses the needs of some
+ "bridge" extensions to examine whether the Tcl_ObjType of a Tcl_Obj is
+ that of the "list" Tcl_ObjType.
+
+2005-11-18 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * library/http/http.tcl (http::geturl): Improved syntactic validation
+ of URLs, and better error messages in some cases. [Bug 1358369]
+
+2005-11-17 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/namespace.test: fix comment
+
+2005-11-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStrToD.c: More data in the "can't happen" Tcl_Panic to
+ aid debugging.
+
+ * generic/tclBasic.c (CallCommandTraces): Save/restore the interp
+ result during traces to fix [Bug 1355342].
+
+2005-11-13 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * tests/namespace.test: fix for [Bug 1354540] and [Bug 1355942]. The
+ new tests 7.3-6 and the modified 51.13 fail due to the unrelated [Bug
+ 1355342]
+
+ * tests/trace.test: added tests 20.13-16 for [Bug 1355342]
+
+2005-11-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_DeleteCommandFromToken):
+ * generic/tclObj.c (Tcl_GetCommandFromObj): more partial fixes for
+ [Bug 1354540] - making sure that cached references to a command being
+ deleted cannot be made reusable by a delete trace.
+
+2005-11-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_FindCommand): Do not find commands in dead
+ namespaces on the path. Partial fix for [Bug 1354540].
+
+2005-11-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Revised TclParseNumber interface to enable
+ * generic/tclScan.c: revision to the [scan] command implementation
+ * generic/tclStrToD.c: to permit tests scan-4.44,55 to pass again.
+ [Bug 1348067].
+
+2005-11-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_DeleteCommandFromToken):
+ * generic/tclObj.c (Tcl_GetCommandFromObj): bump the cmd epoch early
+ to insure that cached references to this command are invalidated.
+ Partial fix for [Bug 1352734] - at least insures that namespace-51.13
+ does not cause a panic. The test is still marked as knownbug, pending
+ resolution of what is actually the correct return value ([Bug
+ 1354540])
+
+2005-11-09 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclTimer.c: Changed [after] so that it behaves correctly
+ * tests/timer.test: with negative arguments [Bug 1350293] and
+ arguments that overflow a 32-bit word. [Bug 1350291]
+
+2005-11-08 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/compile.test: Updated tests with changed behavior
+ * tests/execute.test: due to addition of bignums.
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/parseExpr.test:
+ * tests/platform.test:
+ * tests/string.test:
+
+2005-11-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixFCmd.c (MAX_READDIR_UNLINK_THRESHOLD): reduce to 130
+ based on errors seen on OS X 10.3 with lots of links in a dir.
+ [Bug 1034337 followup]
+
+2005-11-09 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/Makefile.in (gdb-test): Added a new target to make it easier to
+ run the test suite inside a debugger.
+
+2005-11-08 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/compExpr-old.test: Updated tests with changed behavior due
+ to addition of bignums.
+
+ * tests/expr.test: Portable tests expr-46.13-18 [Bug 1341368]
+
+ * generic/tclPkg.c: Corrected inconsistencies in the value returned
+ * tests/pkg.test: by Tcl_PkgRequire(Ex) so that the returned
+ values will always agree with what is stored in the package database.
+ This way repeated calls to Tcl_PkgRequire(Ex) have the same results.
+ Thanks to Hemang Lavana. [Bug 1162286].
+
+2005-11-08 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclTrace.c (TraceVarEx): Factor out heart of Tcl_TraceVar2
+ (TclTraceVariableObjCmd,TraceVarProc): Use the new internal API to
+ arrange for the clientData to be cleaned up at the same time as the
+ rest of the main trace record. This simplifies the code a bit at the
+ same time.
+
+2005-11-07 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/trace.test (trace-13.2-4): added tests to detect leak, see [Bug
+ 1348775]. The recently added trace-8.9 test is now 13.4.
+
+2005-11-07 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/dict.test (dict-19.2): arrange for the stress testing code to
+ only stress test the dict code and not the trace code as well. [Bug
+ 1342858]
+
+2005-11-05 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/trace.test (trace-8.9): added test to detect leak, see [Bug
+ 1348775].
+
+2005-11-04 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinPort.h: Applied [Patch 1267871] by Matt Newman for
+ * win/tclWinPipe.c: extended error code support on Windows.
+ * tests/exec.test: Tests for extended error codes.
+ * generic/tclPipe.c: Permit long codes (platform macros permitting).
+
+2005-11-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBinary.c:
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * generic/tclIOCmd.c:
+ * generic/tclLink.c:
+ * generic/tclTest.c:
+ * generic/tclVar.c: fix for [Bug 1334947]. The functions TclPtrSetVar,
+ Tcl_ObjSetVar2 and Tcl_SetVar2Ex now always consume the newValuePtr
+ argument - i.e., they will free a 0-refCount object if they failed to
+ set the variable. Fixed all callers in the core.
+
+2005-11-04 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclGetDate.y: Added abbreviations for the Korean
+ * library/clock.tcl: timezone. [Patch 1298737]
+ * generic/tclDate.c: Regenerated.
+
+ * tools/findBadExternals.tcl: Added this script, which locates external
+ symbols that do not begin with 'Tcl' or 'tcl' and hence might be in
+ conflict with other link libraries. Thanks to George Peter Staplin for
+ the idea and the initial version of the script. [Bug 1263012]
+
+ * unix/Makefile.in: Trimmed a bunch of fat out of the tommath/
+ directory in 'make dist'. [RFE 1333318]
+
+ * unix/tcl.m4: Added code to enable [load] on LynxOS. Thanks to
+ heidibr@users.sf.net for the patch. [Bug 1163896]. Removed the last
+ vestiges of GNU dld from the Unix build [RFE 1071992].
+
+ * unix/tclLoadDld.c: Removed.
+ * unix/configure: Regenerated.
+
+2005-11-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * generic/tclVar.c:
+ * tests/trace.test: fix for [Bugs 1338280/1337229]; changed to use the
+ same approach as the 8.4 patch in the ticket (i.e., removed the patch
+ committed on 2005-31-10).
+
+2005-11-03 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWin32Dll.c: Applied [Patch 1256872] to provide unicode
+ * win/tclWinConsole.c: support in the console on suitable systems.
+ * win/tclWinInt.h: Patch by Anton Kovalenko
+
+2005-11-02 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ Applied [Patch 1096916] to support building with MSVC 8.
+ * generic/regerror.c: Avoid use of reserved word.
+ * generic/tcl.h: Select the right Tcl_Stat structure
+ * generic/tclDate.c: Casts to handle 64 bit time_t case.
+ * tests/env.test: Include essential envvar on Win32
+ * win/nmakehlp.c: Handle new return codes.
+ * win/makefile.vc: Use the selected options.
+ * win/rules.vc: Check options are applicable
+ * win/tclWinPort.h: Disable deprecated function warnings
+ * win/tclWinSock.c: Provide default value to avoid warning.
+ * win/tclWinTime.c: Add casts to handle 64bit time_t type.
+
+2005-11-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c (TclCheckExecutionTraces): Corrected mistaken
+ assumption that all command traces are set at the script level.
+ Report/fix from Jacques H. de Villiers. [Bug 1337941]
+
+ * tests/unixNotfy.test (1.1,2): Update error message whitespace to
+ match changes in code.
+
+ * tests/expr-old.test (expr-32.52): Use int(.) to restrict result of
+ left shift to the C long range.
+
+ * expr.test (expr-46.13): Added test that illustrates shortcoming of
+ [Patch 1340260].
+
+2005-10-31 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c: fix for [Bugs 1338280/1337229]. Thanks Don.
+ * tests/trace.test: fix duplicate test numbers
+
+2005-10-31 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * win/tclWinSerial.c (SerialSetOptionProc): Cleaned up option parsing
+ to produce more informative error messages and separate error and
+ non-error code paths better.
+ * tests/ioCmd.test (iocmd-8-19): Updated.
+
+2005-10-29 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclTrace.c (TraceVarProc): [Bug 1337229], partial fix. Ensure
+ that a second call with TCL_TRACE_DESTROYED does not lead to a second
+ call to Tcl_EventuallyFree(). It is still true that that second call
+ should not happen, so the bug is not completely fixed.
+ * tests/trace.test (test-18.3-4): added tests for [Bug 1337229] and
+ [Bug 1338280].
+
+2005-10-23 Vince Darley <vincentdarley@sourceforge.net>
+
+ * generic/tclFileName.c: fix to memory leak in glob [Bug 1335006] Obj
+ leak detection and patch by Eric Melbardis.
+
+ * tests/fCmd.test:
+ * win/tclWinFile.c: where appropriate windows API is available, try to
+ set 'nlink' and 'ino' stat fields (previously they were always 0). [Bug
+ 1325803]
+
+2005-10-22 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/foreach.test (foreach-8.1): added test for [Bug 1189274]
+
+2005-10-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_INCR_*): fixed [Bug 1334570]. Obj leak
+ detection and patch by Eric Melbardis.
+
+2005-10-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (RefineApproximation): Plugged a memory leak
+ where two intermediate results were not freed on one return path. [Bug
+ 1334461]. Thanks to Eric Melbardis for the patch.
+
+2005-10-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/binary.n: Clarify that virtually all code that uses the 'h'
+ format in [binary scan] should be using the 'H' format instead. It is
+ nearly always a bug to use the other!
+
+2005-10-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclListObj.c (TclLsetFlat):
+ * tests/lset.test (lset-10.3): fixed handling of unshared lists with
+ shared sublists, [Bug 1333036] reported by neuronstorm.
+
+2005-10-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIORChan.c (PassReceivedError,PassReceivedErrorInterp):
+ Fix crash caused by passing -1 as the length to TclNewStringObj(). Only
+ Tcl_NewStringObj (the function call, not the macro) handles that sort
+ of thing correctly. This makes ioCmd.test pass again.
+
+2005-10-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclClock.c: Removed some dead code.
+ * generic/tclCmdIL.c:
+ * generic/tclCompCmds.c:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * generic/tclLiteral.c:
+ * generic/tclParseExpr.c:
+ * generic/tclScan.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+
+2005-10-19 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclIORChan.c: General cleanup, removing checks that are
+ unnecessary due to the general contracts of other functions in the
+ core, converting to using ANSI declarations, etc. Note that nearly the
+ whole file has changed, but it is often just cosmetic.
+
+2005-10-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_DICT_APPEND, INST_DICT_LAPPEND): fixed
+ faulty peephole optimisation that can cause crashes, [Bug 1331475]
+ reported by Aric Bills.
+
+2005-10-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Added optimization for I32L64 systems to avoid
+ using bignums to perform int multiplies. The improvement shows up most
+ dramatically in tclbench's matrix.bench.
+
+2005-10-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Restored some optimizations of the
+ INST_INCR_SCALAR1_IMM opcode.
+
+2005-10-14 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_ClearChannelHandlers): removed change dated
+ 2005-10-04 (see below). Look into [Bug 1323992] for detailed
+ discussion.
+
+ * generic/tcl.h: Fixed bad definition of CRTEXPORT which should have
+ been CRTIMPORT rather. This broke compilation of generic/tclMain.c and
+ was probably introduced by mistake while applying the fix for [Bug
+ 1256937] below.
+
+2005-10-14 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c (TclIncrObj, TclExecuteByteCode): Tidied up a
+ couple of infelicitous do {...} while(0) constructs.
+
+2005-10-14 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tcl.h: Fix for [Bug 1256937] - correctly decorate
+ * generic/tclMain.c: imported functions from msvcrt in static builds.
+
+2005-10-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/format.test: "Forward"-port of test updates relating to [Bug
+ 1284178]. The bug itself was fixed by TIP#237.
+
+2005-10-13 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_ClearChannelHandlers): temporary ifdef
+ TCL_THREADS changes done to de-activate pending event processing when
+ channel is being closed/cutted.
+
+2005-10-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Removed obsolete use of NO_ERRNO_H.
+ * tools/man2tcl.c:
+ * unix/tcl.m4:
+ * unix/tclConfig.h.in:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * compat/tclErrno.h: Removed obsolete file.
+
+ * generic/tclStrToD.c (TclParseNumber): Missing goto caused crash when
+ parsing "Na". [Bug 1325833]
+
+2005-10-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (GetNumberFromObj): Restored some lost
+ optimizations for empty string values. We avoid cost of a call to
+ TclParseNumber just to tell us an empty string isn't a number.
+
+2005-10-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclPathObj.c (SetFsPathFromAny): TclGetString macro must not
+ be combined with post-increment arguments. [Bug 1325099]
+
+2005-10-12 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c (Tcl_ExecuteByteCode, TclIncrObj): Several
+ common cases inlined in hopes of gaining a little performance in [incr]
+
+2005-10-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c: New convenience macro CompileTokens().
+
+2005-10-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrections to the NO_WIDE_TYPE build. Also
+ added missing "break" to a switch that broke wide XOR operations.
+
+2005-10-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInterp.c (DeleteScriptLimitCallback)
+ (SetScriptLimitCallback): Improve the interlocking between the script
+ limit callback record and the hash table of current such records, to
+ prevent crashes in callbacks that create callbacks.
+ (Tcl_LimitSetTime): Reset the correct flag. Problem reported by
+ Nicolas Castagne <castagne@imag.fr> on comp.lang.tcl
+
+2005-10-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Fixing errors in last commit. (Two commits, the
+ second removes wrong comment).
+
+2005-10-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclStrToD.c:
+ * generic/tclStringObj.c: Initialise variables to avoid compiler
+ warnings ([Bug 1320818] among others).
+
+2005-10-08 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#237 IMPLEMENTATION
+
+ [kennykb-numerics-branch] Resynchronized with the HEAD; at this
+ checkpoint [-rkennykb-numerics-branch-20051008], the HEAD and
+ kennykb-numerics-branch contain identical code.
+
+ [kennykb-numerics-branch] Merge updates from HEAD
+
+ * generic/tclExecute.c: More performance macros and special handling of
+ the wide integer type for performance on 32-bit systems.
+
+2005-10-07 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Macro GetNumberFromObj() is version of
+ TclGetNumberFromObj() that saves a function call for common uses.
+
+ * generic/tclInt.h: Made #undef NO_WIDE_TYPE the default on 32-bit
+ systems. Being able to use 64-bit values without leaping to mp_int
+ should help with performance.
+
+ * generic/tclObj.c: Bug fixes in the #undef NO_WIDE_TYPE
+ * generic/tclExecute.c: configuration.
+
+ * generic/tclExecute.c: Improved performance of comparison opcodes and
+ bitwise operations and removed yet more dead code.
+
+2005-10-07 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixFCmd.c (TraverseUnixTree): Adjust 2004-11-11 change to
+ * tests/fCmd.test (fCmd-20.2): account for NFS special files
+ with a readdir rewind threshold. [Bug 1034337]
+
+2005-10-06 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Improved performance of INST_RSHIFT and
+ INST_LSHIFT.
+
+2005-10-05 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Improved performance of INST_MULT, INST_DIV,
+ INST_ADD, and INST_SUB and replaced a "goto... label" with a "break
+ from loop" in TclIncrObj() and removed some dead code.
+
+2005-10-05 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclPipe.c (TclCreatePipeline): Fixed [Bug 1109294]. Applied
+ the patch provided by David Gravereaux.
+
+ * doc/CrtChannel.3: Fixed [Bug 1104682], by application of David
+ Welton's patch for it, and added a note about wideSeekProc.
+
+ * generic/tclIORChan.c (RcClose): Removed unreachable panic/return
+ statements. This fixes the remainder of [Bug 1286256].
+
+2005-10-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/env.test (env-6.1):
+ * win/tclWinPort.h: define USE_PUTENV_FOR_UNSET 1
+ * generic/tclEnv.c (TclSetEnv, TclUnsetEnv): add USE_PUTENV_FOR_UNSET
+ to existing USE_PUTENV define to account for various systems that have
+ putenv(), but can't unset env vars with it. Note difference between
+ Windows and Linux for actually unsetting the env var (use of '=').
+ Correct the resizing of the environ array. We assume that we are in
+ full ownership, but that's not correct.[Bug 979640]
+
+2005-10-04 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+ * generic/tclExecute.c: Updated TclIncrObj() to more efficiently add
+ native long integers. Also updated IllegalExprOperandType and the
+ INST_UMINUS, INST_UPLUS, INST_BITNOT, and INST_TRY_CVT_TO_NUMERIC
+ sections for performance.
+
+ * generic/tclBasic.c: Updated more callers to make use of
+ TclGetNumberFromObj. Removed some dead code.
+
+2005-10-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinSerial.c (SerialSetOptionProc): free argv [Bug 1067708]
+
+ * tests/http.test: do not URI encode -._~ according
+ * library/http/http.tcl (init): to RFC3986. [Bug 1182373] (aho)
+
+ * unix/tclLoadShl.c (TclpDlopen): use DYNAMIC_PATH on second shl_load
+ only. [Bug 1204237]
+
+ * doc/scan.n: scan %[] requires "one or more chars" [Bug 1277503]
+
+ * tests/winFile.test (getuser): allow valid Windows usernames. [Bug
+ 1311285]
+
+ * generic/tclParse.c (Tcl_ParseCommand): add code that recognizes {} in
+ addition to {expand} for word expansion (make with
+ -DALLOW_EMPTY_EXPAND).
+
+2005-10-04 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_ClearChannelHandlers): now deletes any
+ outstanding timer for the channel. Also, prevents events still in the
+ event queue from triggering on the current channel.
+
+ * generic/tclTimer.c (Tcl_DeleteTimerHandler): bail out early if passed
+ NULL argument.
+
+2005-10-03 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclBasic.c: Re-implemented ExprRoundFunc and
+ ExprEntierFunc to use TclGetNumberFromObj.
+
+ * generic/tclInt.h: Added new routine TclGetNumberFromObj to
+ * generic/tclObj.c: provide efficient access to the actual
+ internal rep of a numeric Tcl_Obj without conversions.
+
+2005-10-03 Kevin Kenny <kennykb@acm.org>
+
+ * tools/loadICU.tcl: Changed the file names of message catalogs to
+ lowercase.
+ * tools/makeTestCases.tcl:
+ * library/tzdata/*: Olson's tzdata2005n.tar.gz. Includes new DST
+ rules for USA and a number of changes to other locales.
+ * tests/clock.test: Regenerated for new US DST rules.
+
+2005-09-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c: Separate encoding conversion of command line
+ arguments from list formatting. [Bug 1306162].
+
+2005-09-30 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclStringObj.c: Bug fix: Missing cast to large enough
+ integral size before << operations led to broken [format %llx] results.
+ Thanks to Robert Henry for reporting the bug.
+
+2005-09-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/mathfunc.n: implementation for TIP #255, expr min/max
+ * library/init.tcl:
+ * tests/info.test, tests/expr-old.test:
+
+2005-09-27 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tcl.h: Changed name of the new Tcl_Obj intrep field
+ * generic/tclObj.c: from "bignumValue" to "ptrAndLongRep" as
+ * generic/tclProc.c: described in TIP 237, and more suitable for
+ other more general uses.
+
+2005-09-27 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/binary.test (binary-14.18): Added test for [Bug 1116542] though
+ the bug itself was already fixed by unrelated changes.
+
+2005-09-26 Kevin Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merge updates from HEAD.
+
+2005-09-26 Kevin Kenny <kennykb@acm.org>
+
+ * libtommath/: Updated to release 0.36.
+ * generic/tommath.h: Regenerated.
+ * generic/tclTomMathInterface.h: Added ten missing aliases for mp_*
+ functions to avoid namespace pollution in Tcl's exported symbols. [Bug
+ 1263012]
+
+2005-09-23 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * unix/Makefile.in: Added -DMP_PREC=4 switch to all compiles so
+ * win/Makefile.in: that minimum memory requirements of mp_int's
+ * win/makefile.vc: will not be quite so large. [Bug 1299153].
+
+ * generic/tclStrToD.c: Fixed memory leak. [Bug 1299803].
+ * generic/tclObj.c:
+
+2005-09-20 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Revise TclIncrObj() to call
+ Tcl_GetBignumAndClearObj.
+
+ * generic/tcl.decls: Add Tcl_GetBignumAndClearObj.
+ * generic/tclObj.c:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2005-09-16 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclInt.h: Added TclBNInitBigNumFromWideInt() so
+ * generic/tclTomMathInterface.c: that every caller isn't required to
+ duplicate the sign logic to use the unsigned interface.
+
+ * generic/tclBasic.c: Reduce the number of places where Tcl intrudes
+ * generic/tclExecute.c: into the internal format details of the mp_int
+ * generic/tclObj.c: struct.
+ * generic/tclStrToD.c:
+ * generic/tcLStringObj.c:
+
+ * generic/tclTomMath.h: Added mp_cmp_d to routines from libtommath
+ * unix/Makefile.in: used by Tcl.
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+ * libtommath/bn_mp_add_d.c: Bug fix. For mp_add_d(&a, d, &c), when &a
+ has the value -d, then the value &c computed should be zero, but
+ mp_add_d was producing an inconsistent zero value with a sign field of
+ MP_NEG, something like a value of -0, which other routines in
+ libtommath can't handle.
+
+ * generic/tclExecute.c: Dropped all creation of "bigOne" values and
+ just use tommath routines that accept the value "1" directly.
+
+2005-09-15 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/ParseCmd.3: copy/paste fix [Bug 1292427]
+
+2005-09-15 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merge updates from HEAD.
+
+ * generic/tclStringObj.c (TclAppendFormattedObjs): Revision to
+ eliminate one round of string copying.
+
+ * generic/tclBasic.c: More callers of TclObjPrintf and
+ * generic/tclCkalloc.c: TclFormatToErrorInfo.
+ * generic/tclCmdMZ.c:
+ * generic/tclExecute.c:
+ * generic/tclIORChan.c:
+ * generic/tclMain.c:
+ * generic/tclProc.c:
+ * generic/tclTimer.c:
+ * generic/tclUtil.c:
+ * unix/tclUnixFCmd.c
+
+ * unix/configure: autoconf-2.59
+
+2005-09-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tcl.m4 (SC_TCL_EARLY_FLAGS): Added extra hack to allow Tcl to
+ transparently open large files on RHEL 3. [Bug 1287638]
+
+2005-09-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Bug fixes: ObjPrintfVA needed to
+ support "*" fields and needed to interpret precision limits on %s
+ conversions as a maximum number of bytes, not Tcl_UniChars, to take
+ from the (char *) argument.
+
+ * generic/tclBasic.c: Updated several callers to use
+ * generic/tclCkalloc.c: TclFormatToErrorInfo() and/or
+ * generic/tclCmdAH.c: TclObjPrintf().
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * generic/tclIORChan.c:
+ * generic/tclIOUtil.c:
+ * generic/tclNamesp.c:
+ * generic/tclProc.c:
+
+ * library/init.tcl: Keep [unknown] in sync with errorInfo
+ formatting rules.
+
+2005-09-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: First caller of TclFormatToErrorInfo.
+
+ * generic/tclInt.h: Using stdarg.h conventions, add more
+ * generic/tclStringObj.c: fixed arguments to TclFormatObj() and
+ TclObjPrintf(). Added new routine TclFormatToErrorInfo().
+
+ * generic/tcl.h: Explicitly standardized on the use of stdarg.h
+ * generic/tclBasic.c: conventions for functions with variable number
+ * generic/tclInt.h: of arguments. Support for varargs.h has been
+ * generic/tclPanic.c: implicitly gone for some time now. All
+ * generic/tclResult.c: TCL_VARARGS* macros purged from Tcl sources,
+ * generic/tclStringObj.c: leaving only some deprecated #define's
+ * tools/genStubs.tcl: in tcl.h for the sake of older extensions.
+
+ * generic/tclDecls.h: make genstubs
+
+ * doc/AddErrInfo.3: Replaced all documented requirement for use of
+ * doc/Eval.3: TCL_VARARGS_START() with requirement for use of
+ * doc/Panic.3: va_start().
+ * doc/SetResult.3:
+ * doc/StringObj.3:
+
+2005-09-12 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merge updates from HEAD.
+
+ * generic/tclCmdAH.c: Added support for the "ll" width
+ * generic/tclStringObj.c: specifier to [format].
+
+ * generic/tclStringObj.c (TclAppendFormattedObjs): Bug fix: make
+ sure %ld formats force the collection of a wide value, when the value
+ could be a different long.
+
+2005-09-09 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (RcDecodeEventMask): Added missing type
+ declaration for the parameter 'mask'. This fixes the [Bug 1286256]. The
+ other warning can be removed only by removing the panic/return code.
+
+2005-09-09 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merge updates from HEAD.
+
+2005-09-09 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclStringObj.c: Added two missing casts to silence messages
+ from MSVC6.
+
+2005-09-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: New internal routine TclObjPrintf()
+ * generic/tclStringObj.c: is similar to TclFormatObj() but
+ accepts arguments in non-Tcl_Obj format.
+
+ * generic/tclInt.h: New internal routines TclFormatObj()
+ * generic/tclStringObj.c: and TclAppendFormattedObjs() to offer
+ sprintf()-like means to append to Tcl_Obj. Work in progress toward
+ [RFE 572392].
+
+ * generic/tclCmdAH.c: Compiler directive NEW_FORMAT when #define'd
+ directs the [format] command to be implemented in terms of the new
+ TclAppendFormattedObjs() routine.
+
+2005-09-08 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ TIP#254 IMPLEMENTATION
+
+ * generic/tclLink.c (LinkTraceProc,ObjValue): Added many new of C var
+ * generic/tcl.h: to link to, making it
+ * doc/LinkVar.3: easier to seamlessly
+ * generic/tclTest.c (TestlinkCmd): couple C code and Tcl
+ * tests/link.test: scripts in an
+ application. [Patch 1242844]
+
+2005-09-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtf.c (Tcl_UniCharToUtf): Corrected handling of negative
+ * tests/utf.test (utf-1.5): Tcl_UniChar input value. Incorrect
+ handling was producing byte sequences outside of Tcl's legal internal
+ encoding. [Bug 1283976].
+
+2005-09-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInt.h (List): Added flag to keep track of whether a list
+ * generic/tclListObj.c: with a string rep is provably canonical.
+ * generic/tclUtil.c (Tcl_ConcatObj): Do efficient concatenation and
+ * generic/tclBasic.c (Tcl_EvalObjEx): evaluation when the list is
+ canonical, and not just when the list is pure. This should make the
+ "pure list" hacking introduced in 8.3 much more robust.
+
+2005-09-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclObj.c (pendingObjDataKey): Added missing 'static' to stop
+ symbol from leaking outside the Tcl library. [Bug 1263012]
+
+2005-09-02 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclScan.c: Bug fix: The %o, %x, %i formats of [scan] must
+ not accept any 0b or 0o prefixes. [scan $s %o] must continue to work
+ even with KILL_OCTAL enabled.
+
+ * generic/tclInt.h: Added TCL_PARSE_SCAN_PREFIXES to the flags
+ * generic/tclStrToD.c: accepted by TclParseNumber.
+
+2005-09-01 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixSock.c (InitializeHostName): Synchronized use of static
+ modifier in declaration and definition of function.
+
+ * unix/tclUnixChan.c (FileTruncateProc): Synchronized use of static
+ modifier in declaration and definition of function.
+
+ * generic/tclResult.c (ReleaseKeys): Synchronized use of static
+ modifier in declaration and definition of function.
+
+ * generic/tclListObj.c (NewListIntRep): Synchronized use of static
+ modifier in declaration and definition of function.
+
+ * generic/tclEncoding.c (InitializeEncodingSearchPath): Synchronized
+ use of static modifier in declaration and definition of function.
+
+ * generic/tclEncoding.c (FillEncodingFileMap): Synchronized use of
+ static modifier in declaration and definition of function.
+
+ * generic/tclIORChan.c (RcNewHandle): Synchronized use of static
+ modifier in declaration and definition of function.
+
+2005-09-01 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclObj.c: TclParseNumber calls meant to parse an integer
+ value now pass the TCL_PARSE_INTEGER_ONLY flag.
+
+ * generic/tclScan.c: Extended [scan] to accept the %lld, %llo, %llx,
+ and %lli formats. Numeric scanning is now done via TclParseNumber calls
+
+ * generic/tclInt.h: Extended TclParseNumber to accept new flag
+ * generic/tclStrToD.c: values TCL_PARSE_INTEGER_ONLY,
+ TCL_PARSE_OCTAL_ONLY, and TCL_PARSE_HEXIDECIMAL_ONLY, to give caller
+ more control over the parsing rules.
+
+2005-08-31 Vince Darley <vincentdarley@sourceforge.net>
+
+ * doc/FileSystem.3:
+ * unix/tclUnixFile.c:
+ * windows/tclWinFile.c: clarify that Tcl_FSMatchInDirectory may be
+ called with a NULL interpreter, and fix the code so this is allowed.
+ Tcl's core itself (tclEncoding.c:FillEncodingFileMap()) calls this
+ with a NULL interpreter.
+
+2005-08-30 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclObj.c: Extended bignum support to include bignums so
+ large they will not pack into a Tcl_Obj. When they outgrow Tcl's string
+ rep length limits, a panic will result.
+
+ * generic/tclTomMath.h: Added mp_sqrt to routines from
+ * unix/Makefile.in: libtommath used by Tcl.
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+ * generic/tclBasic.c: Extended sqrt(.) so that range covers the
+ entire double range, accepting as many bignums in the domain as that
+ will allow.
+
+2005-08-29 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl (::tcl::tm::roots): Accepted Don Porter's patch for
+ [Bug 1189657]. Syncs the implementation to the specification (TIP #189)
+
+2005-08-29 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merge updates from HEAD.
+
+ * generic/tclBasic.c: Restored round(.) to the Tcl 8.4 rules.
+
+2005-08-29 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclBasic.c (ExprMathFunc): Restored "round away from zero"
+ * tests/expr.test (expr-46.*): behaviour to the "round" function.
+ Added test cases for the behavior, including the awkward case of a
+ number whose fractional part is 1/2-1/2ulp. [Bug 1275043]
+
+2005-08-26 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c: Moved Tcl_{Cut,Splice}Channel to
+ {Cut,Splice}Channel for internal use, and created new public functions
+ for Tcl_{Cut,Splice}Channel which walk the whole stack of
+ transformations and invoke the necessary thread actions. Added code to
+ Tcl_(Un)StackChannel to properly invoke the thread actions when pushing
+ and popping transformations on/from a channel.
+
+2005-08-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (NamespaceEnsembleCmd): Reset the result after
+ creating an ensemble to clear any result object sharing (potentially
+ caused by delete traces) so that we can safely return the name of the
+ ensemble. Previously, this caused crashes in Snit's test suite.
+
+2005-08-25 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclListObj.c (UpdateStringOfList): Stop uncontrolled and
+ unsafe crashes from happening when working with very large string
+ representations. [Bug 1267380]
+
+ * generic/tclExecute.c (TEBC:INST_DICT_LAPPEND): Stop dropping a
+ duplicated object on the floor, which was a memory leak (and a wrong
+ result too). Thanks to Andreas Kupries for reporting this.
+
+2005-08-25 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merge updates from HEAD
+
+ * generic/tclExecute.c: Bug fix. INST_RSHIFT: shift of negative values
+ produced incorrect results.
+
+ * generic/tclExecute.c: Bug fix. INST_*SHIFT opcodes stack management.
+ [expr 0<<6] should be 0, not 6.
+
+ * generic/tclBasic.c: Extended the domain of round(.) to all non-Inf,
+ non-NaN doubles, using bignums for the result as needed.
+
+2005-08-24 Andreas Kupries <andreask@activestate.com>
+
+ TIP#219 IMPLEMENTATION
+
+ * doc/SetChanErr.3: ** New File **. Documentation of the new channel
+ API functions.
+ * generic/tcl.decls: Stub declarations of the new channel API.
+ * generic/tclDecls.h: Regenerated
+ * generic/tclStubInit.c:
+
+ * tclIORChan.c: ** New File **. Implementation of the reflected
+ channel.
+ * generic/tclInt.h: Integration of reflected channel and new error
+ * generic/tclIO.c: propagation into the generic I/O core.
+ * generic/tclIOCmd.c:
+ * generic/tclIO.h:
+ * library/init.tcl:
+
+ * tests/io.test: Extended testsuite.
+ * tests/ioCmd.test:
+ * tests/chan.test:
+ * generic/tclTest.c:
+ * generic/tclThreadTest.c:
+
+ * unix/Makefile.in: Integration into the build machinery.
+ * win/Makefile.in:
+ * win/Makefile.vc:
+
+2005-08-24 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (Tcl_DoubleDigits): Fixed the corner cases of
+ * tests/binary.test (binary-65.*) formatting floating point
+ numbers with the largest and smallest possible significands, and added
+ test cases for them.
+
+2005-08-24 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Corrected some TRACE bugs that prevented
+ compilation with --enable-symbols=all.
+ * generic/tclStrToD.c: Revised commentary to prepare for a renaming of
+ the file, removed some dead code, and fixed a bug where
+ TclBignumToDouble failed on huge negative numbers.
+ * tests/binary.test (binary-65.*): Added missing 'ieeeFloatingPoint'
+ to large/small significand tests.
+ * tests/expr.test (expr-45.*) Added missing braces around expressions.
+
+2005-08-24 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclBasic.c: Revised implementation of the ceil(.) and
+ * generic/tclInt.h: floor(.) math functions in light of the
+ * generic/tclStrToD.c: revised comparison operators, so that it is
+ always true that ($x <= ceil($x)) and ($x >= floor($x)). The simple
+ approach of "convert to double and call ceil() or floor()" could not
+ guarantee that.
+
+ * generic/tclExecute.c: Bug fix: TclBignumToDouble return -Inf when
+ appropriate. Removed declarations of removed routines.
+
+ * generic/tclExecute.c: Revised the type promotion rules of the
+ comparison operators so that they form proper equivalence classes over
+ the set of numeric strings.
+
+2005-08-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure.in:
+ * win/configure: Regen.
+ * win/configure.in: Update minimum autoconf version to 2.59.
+
+2005-08-23 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * generic/tclInt.h:
+ * generic/tclObj.c (Tcl_GetBooleanFromObj, SetDoubleFromAny,
+ Tcl_GetLongFromObj, Tcl_GetWideIntFromObj, Tcl_GetBignumFromObj):
+ * generic/tclParseExpr.c (GetLexeme):
+ * generic/tclScan.c (Tcl_ScanObjCmd):
+ * generic/tclStrToD.c (TclParseNumber):
+ * tests/binary.test (binary-62.1-65.7):
+ * tests/expr.test (expr-40.1-42.1):
+ * scan.test (scan-14.1,14.2):
+ Modified Tcl_ParseNumber to accept an argument to force interpretation
+ as decimal, and modified [scan] to use it. Corrected a bug where Not a
+ Number with hexadecimal information bits returned consistently
+ incorrect values. #ifdef-ed out some code that is needed only for IBM
+ hexadecimal floating point. Fixed bugs in code to handle the corner
+ cases of smallest and largest significands. Added test cases to improve
+ test coverage in generic/tclStrToD.c. Added test cases for 0b notation
+ (TIP #114). Removed TclStrToD, and the static functions that it calls,
+ which are now dead code (TclParseNumber now does all input
+ floating-point conversions.)
+
+2005-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclStrToD.c: Bug fix: set shift magnitude properly whether
+ we're expanding to mp_int type or not.
+
+ * generic/tclExecute.c: Bug fix: ACCEPT_NAN under INST_UMINUS.
+
+ * generic/tclStrToD.c: New macros TIP_114_FORMATS and KILL_OCTAL to
+ configure acceptance of 0o and 0b numbers and rejection of "leading
+ zero as octal".
+
+ * generic/tclBasic.c: Re-used the guts of int(.) and wide(.) math
+ functions to perform conversions in OldMathFuncProc.
+
+ * generic/tclBasic.c: Support for ACCEPT_NAN.
+ * generic/tclExecute.c:
+
+ * generic/tclInt.decls: Restored TclExprFloatError to internal stubs
+ * generic/tclBasic.c: table, and moved definition back to
+ * generic/tclExecute.c: tclExecute.c from tclBasic.c to handle #undef
+ ACCEPT_NAN.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclInt.h: New internal macros TclIsNaN and TclIsInfinite
+ * generic/tclBasic.c: replace the IS_NAN and IS_INF macros scattered
+ * generic/tclExecute.c: here and there.
+ * generic/tclObj.c:
+ * generic/tclStrToD.c:
+ * generic/tclUtil.c:
+
+2005-08-22 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclConfig.h.in: autoheader-2.59.
+
+2005-08-22 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclInt.h: New ACCEPT_NAN macro to mark code that
+ * generic/tclCmdAH.c: supports or disables accepting of the NaN
+ * generic/tclExecute.c: value at various points.
+ * generic/tclLink.c:
+
+ * generic/tclStrToD.c: Bug fix. Parsing of +/- Infinity was reversed.
+
+ * generic/tclTestObj.c: Disabled unused [testconvertobj] command.
+
+ * generic/tclBasic: Added [expr {entier(.)}]. Rewrote int(.) and
+ wide(.) to use the same guts, accepting all non-Inf doubles as
+ arguments.
+
+ * generic/tclInt.h: New routine TclInitBignumFromDouble.
+ * generic/tclStrToD.c: Modified to return code and write error
+ message.
+
+ * generic/tclInt.h: TCL_WIDE_INT_IS_LONG implies NO_WIDE_TYPE.
+ * generic/tclObj.c: Removed now unnecessary tests of the
+ * generic/tclStrToD.c: TCL_WIDE_INT_IS_LONG definition.
+
+ * generic/tclInt.h: New internal routine TclSetBignumIntRep
+ * generic/tclObj.c: consolidates packing of bignum value into a
+ * generic/tclStrToD.c: Tcl_Obj within one source code file.
+
+ * tests/expr.test: Corrected the wideIs64bit constraint.
+ * tests/format.test:
+ * tests/scan.test:
+
+2005-08-21 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclInt.h: Moved TclParseInteger to tclUtil.c and
+ * generic/tclParseExpr.c: made it static.
+ * generic/tclUtil.c:
+
+ * generic/tclInt.decls: Moved TclExprFloatError to tclBasic.c and made
+ * generic/tclBasic.c: it static.
+ * generic/tclExecute.c:
+
+ * generitc/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclExecute.c: errno, IS_NAN, IS_INF, LLD no longer called in
+ this file; dropped/disabled support for them.
+
+ * generic/tclCompExpr.c: errno no longer used in these files;
+ * generic/tclParseExpr.c: dropped support "hack" for it.
+
+ * generic/tclStrToD.c: Disabled out of date support "hack" for errno.
+
+ * generic/tclBasic.c: Eliminated VerifyExprObjType. Initialize errno
+ to zero in OldMathFuncProc.
+
+2005-08-19 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclBasic.c: Updated OldMathFuncProc and ExprAbsFunc to do
+ less invasion into numeric Tcl_Obj internals. Made ExprDoubleFunc,
+ ExprIntFunc, ExprWideFunc, and ExprRoundFunc bignum-aware. Revised
+ ExprSrandFunc error message.
+
+ * generic/tclProc.c: Wrapped a few tclWideIntType uses in
+ * generic/tclCmdMZ.c: #ifndef NO_WIDE_TYPE.
+
+ * generic/tclInt.h: #define'd NO_WIDE_TYPE.
+
+ * generic/tclVar.c: Replaced TclPtrIncrVar and TclPtrIncrWideVar
+ * generic/tclInt.h: with TclPtrIncrObjVar and replaced TclIncrVar2
+ * generic/tclInt.decls: and TclIncrWideVar2 with TclIncrObjVar2. New
+ routines call on TclIncrObj to do the work.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclCmdIL.c: Rework Tcl_IncrObjCmd and the INST_*INCR*
+ * generic/tclExecute.c: opcodes to use the new routines.
+
+2005-08-18 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Fixed string rep invalidation bug in
+ * tests/dict.test (dict-11.17): INST_DICT_INCR_IMM rewrite.
+
+ * generic/tclDictObj.c: DictIncrCmd rewrite to use TclIncrObj.
+
+ * generic/tclInt.h: TclIncrObj static -> internal
+ * generic/tclExecute.c:
+
+2005-08-17 George Peter Staplin <GeorgePS@XMission.com>
+
+ * generic/tclBasic.c: eliminate a namespace clash caused by
+ BuiltinFuncTable not being static.
+
+ * generic/tclObj.c: fix a namespace clash caused by a missing
+ static for pendingObjData.
+
+2005-08-17 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclEvent.c (Tcl_Finalize): Removed a copy-and-paste accident
+ that caused a (mostly harmless) double finalize of the load and
+ filesystem subsystems.
+ * tests/clock.test: Eliminated the bad test clock-43.1, and split
+ clock-50.1 into two tests, with a more permissive check on the error
+ message for an out-of-range value.
+
+2005-08-17 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclBasic.c (Tcl_Expr{Long,Double}{,Obj}): Updated to
+ * generic/tclTest.c: deal with
+ * tests/expr-old.test: bignums (well,
+ * tests/expr.test: mostly).
+ Added a missing "errno=0;" in ExprUnaryFunc so that spurious error
+ returns aren't detected.
+ Added test cases for Tcl_Expr* and Tcl_Expr*Obj because there was very
+ poor test coverage in those areas.
+ * generic/tclParseExpr.c: Reworked parsing of numbers to call
+ TclParseNumber rather than trying to do things locally.
+ * generic/tclStrToD.c: Corrected a comment. Changed so that *endPtrPtr
+ does not include any trailing whitespace.
+
+2005-08-17 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: New routine TclIncrObj to centralize the
+ increment operation needed in many places. Updated INST_DICT_INCR_IMM
+ to make use of it.
+
+2005-08-16 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Made bit shifting opcodes and INST_MOD
+ bignum-aware.
+
+ * tests/scan.test: Making << bignum-aware means that repeated
+ * tests/string.test: left shifting cannot turn a positive into a
+ negative. Revised [int_range] and [largest_int] utility commands in the
+ test suite that relied on that happening. Without revision they became
+ infinite loops.
+
+ * generic/tclExecute.c: Made binary bitwise opcodes bignum-aware.
+
+ * generic/tclTomMath.h: Added mp_or and mp_xor to routines from
+ * unix/Makefile.in: libtommath used by Tcl.
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+2005-08-15 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Updates from HEAD.
+ * generic/tclExecute.c: More revisions to IllegalExprOperandType.
+ Merged INST_BITNOT with INST_UMINUS and make it bignum-aware according
+ to the rule: ~a = -a - 1. Disabled unused code and noted more TODOs.
+
+ * generic/tclInt.decls: Disabled TclLooksLikeInt() and all callers.
+ * generic/tclUtil.c:
+ * generic/tclCompCmds.c:
+
+ * generic/tclBasic.c: Rewrite of VerifyExprObjType().
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclExecute.c: Updated execution of comparison bytecodes to
+ be bignum-aware, routing string compares through INST_STR_CMP.
+
+2005-08-14 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Updated execution of arithmetic bytecodes to
+ be bignum-aware, and to allow calculations on NaN to produce a NaN
+ result. INST_UMINUS updated to call mp_neg.
+
+ * generic/tclTomMath.h: Added mp_and, mp_expt_d, and mp_neg to
+ * unix/Makefile.in: routines from libtommath used by Tcl.
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+2005-08-13 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclObj.c: Extended Bignum auto-narrowing to auto-narrow
+ to tclWideIntType when appropriate; this helps keep things working as
+ the bytecode execution code is migrated to supporting bignums.
+
+ * generic/tclExecute.c: Major overhaul of IllegalExprOperandType.
+ Changed several TclNewFooObj() calls to more logically appropriate
+ ones. Added several TODO comments marking opportunies for future work.
+ Made more use of the eePtr->constants. Made INST_UMINUS bignum aware.
+
+2005-08-12 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Simplify doCondJump. Use eePtr->constants as
+ result of INST_DICT_NEXT, INST_LAND, and INST_LOR. Separate INST_LNOT
+ from INST_UMINUS and simplify.
+
+2005-08-12 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (MktimeObjCmd):
+ * library/clock.tcl (GetSystemTimeZone, LoadZoneinfoFile)
+ (ReadZoneinfoFile):
+ * tests/clock.test (clock-50.1):
+ Added functionality to read /etc/localtime if it exists, so that Tcl's
+ time can track system time on Linux even if TZ is not set. Changed
+ ::tcl::clock::Mktime to check for failure, and added a test case that
+ mimics failure but is really success.
+
+2005-08-11 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclExecute.c: Rewrite of INST_LAND/INST_LOR to take advantage
+ of loss of "pure double" issues. Merged INST_UPLUS with
+ INST_TRY_CVT_TO_NUMERIC and updated to use improved rules for impure
+ "double"s as well.
+
+ * generic/tclStrToD.c: Restored conditional generation of
+ tclWideIntType values by TclParseNumber so that Tcl's not completely
+ broken while bignum calculation support is incomplete. The NO_WIDE_TYPE
+ macro can be used to disable this.
+
+ * generic/tclBasic.c (ExprAbsFunc): First pass making [expr abs(.)]
+ bignum-aware.
+
+2005-08-11 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclEvent.c: Eliminated the USE_THREAD_STORAGE option
+ * generic/tclInt.h: (which is on in every build generated by
+ * generic/tclThread.c: by the standard configurator).
+ * generic/tclThreadStorage.c: Eliminated the code for thread specific
+ * unix/configure: data without USE_THREAD_STORAGE and
+ * unix/tcl.m4: radically refactored the code for
+ * unix/tclConfig.h.in: USE_THREAD_STORAGE so that it has fewer
+ * unix/tclUnixThrd.c: dependencies on the order of
+ * win/configure: finalization. (Also, made 'make
+ * win/Makefile.in: distclean' on Windows clean just a little
+ * win/rules.vc: bit cleaner.)
+ * win/tcl.m4:
+ * win/tclWinThrd.c:
+
+2005-08-10 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclTomMath.h: Added mp_shrink, mp_to_unsigned_bin,
+ * unix/Makefile.in: mp_to_unsigned_bin_n, and mp_unsigned_bin_size
+ * win/Makefile.in: to routines from libtommath used by Tcl.
+ * win/makefile.vc:
+
+ * generic/tommath.h: make gentommath_h
+
+ * generic/tclObj.c: Substantial rewrite to make all number parsing
+ flow through TclParseNumber(). Also established the NO_WIDE_TYPE and
+ BIGNUM_AUTO_NARROW #ifdef's to help track the assumptions of different
+ portions of the code.
+
+ * generic/tclInt.h: Added NO_WIDE_TYPE #ifdefs
+
+2005-08-10 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclEvent.c (Tcl_Finalize): Pushed Tcl_FinalizeLoad and
+ Tcl_ResetFilesystem down after Tcl_FinalizeThreadAlloc because we can't
+ unload DLL's until after their TSD keys are finalized. (Note that we'll
+ still see aborts if an unloaded DLL has TSD - that still needs to be
+ fixed.
+
+ * tests/compExpr-old.test (compExpr-3.8): Made tests conditional on
+ * tests/expr.test (expr-3.8): 'unix' because they get
+ stack overflows on Win32 threaded builds,
+
+2005-08-09 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclPathObj.c: fix to [file rootname] bug in optimized code
+ path reported on comp.lang.tcl.
+
+2005-08-08 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclObj.c: Replaced some goto's with loops and started
+ use of BIGNUM_AUTO_NARROW and NO_WIDE_TYPE.
+
+2005-08-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclThreadStorage.c: Stop exposing the guts of the thread
+ storage system through the internal stubs table. Client code should
+ always use the standard API.
+
+2005-08-05 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch]
+ * generic/tclObj.c: Rewrote Tcl_GetDoubleFromObj().
+
+2005-08-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixInit.c (localeTable): Solaris uses a non-standard name
+ for the cp1251 charset. Thanks to Victor Wagner for reporting this.
+ [Bug 1252475]
+
+2005-08-05 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/makefile.vc: Removed unused file ldAout.tcl.
+ * win/makefile.bc: [Bug 1244361]
+
+ * tests/binary.test: Cleaned up testing for scanning of NaN. [Bug
+ 1246264]
+
+ * generic/tclBasic.c (ExprAbsFunc): Added code to handle the corner
+ * tests/expr.test (expr-38.1): case of applying 'abs' to the
+ smallest 32-bit integer. [Bug 1241572]
+
+2005-08-04 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CloseChannel): Fixed comment nit, added apparently
+ missing word to complete a sentence.
+
+ * generic/tclObj.c (Tcl_DbDecrRefCount): Fixed whitespace nit in panic
+ message.
+
+2005-08-04 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Updated from HEAD
+
+ * generic/tclObj.c: Rewrote Tcl_GetBooleanFromObj() and supporting
+ routines to make use of TclParseNumber. This reduces the potential
+ number of times a string value must be scanned.
+
+ * generic/tclObj.c: Simplified routines that manage the typeTable.
+ Deleted the UpdateStringOfBoolean() routine, that can never be called.
+
+2005-08-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Untangled some dependencies in the
+ * generic/tclEvent.c: order of finalization routines.
+ * generic/tclInt.h: [Bug 1251399]
+ * generic/tclObj.c:
+
+2005-08-02 Don Porter <dgp@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Updated from HEAD
+
+2005-07-30 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclLoadDyld.c (TclpDlopen, TclpLoadMemory): workarounds for
+ bugs/changes in behaviour in Mac OS X 10.4 Tiger.
+
+2005-07-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdIL.c (InfoGlobalsCmd): Even in high-speed mode, still
+ have to take care with non-existant variables. [Bug 1247135]
+
+2005-07-28 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/README: Update link to msys_mingw8.zip.
+
+2005-07-28 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/compExpr-old.test: Still more conversion of "nonPortable"
+ * tests/error.test: tests into tests with constraints that
+ * tests/expr-old.test: describe the limits of their
+ * tests/expr.test: portability. Also more consolidation
+ * tests/fileName.test: of constraint synonyms.
+ * tests/format.test: wideis64bit, 64bitInts => wideIs64bit
+ * tests/get.test: wideIntegerUnparsed => wideIs32bit
+ * tests/load.test: wideIntExpressions => wideBiggerThanInt
+ * tests/obj.test:
+ * tests/parseExpr.test: Dropped "roundOffBug" constraint that
+ * tests/string.test: protected from buggy sprintf.
+
+2005-07-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclPipe.c (TclCreatePipeline): Arrange for POSIX systems to
+ * unix/tclUnixPipe.c (TclpOpenFile): use the O_APPEND flag for
+ * tests/exec.test (exec-19.1): files opened in a pipeline
+ like ">>this". Note that Windows cannot support such access; there is
+ no equivalent flag on the handle that can be set at the kernel-call
+ level. The test is unix-specific in every way. [Bug 1245953]
+
+2005-07-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c: Converted the $::tcl_precision value to be kept
+ per-thread to prevent different threads from stomping on each others'
+ formatting prescriptions.
+
+ ***POTENTIAL INCOMPATIBILITY*** Multi-threaded programs that set the
+ value of ::tcl_precision will now have to set it in each thread.
+
+ * tests/expr.test: Consolidated equivalent constraints into
+ * tests/fileName.test: single definitions and (more precise) names:
+ * tests/get.test: longis32bit, 32bit, !intsAre64bit => longIs32bit
+ * tests/listObj.test: empty => emptyTest; winOnly => win
+ * tests/obj.test: intsAre64bit => longIs64bit
+ Also updated some "nonPortable" tests to use constraints that mark
+ precisely what about them isn't portable, so the tests can run where
+ they work.
+
+ * library/init.tcl ([unknown]): Corrected return code handling in the
+ portions of [unknown] that expand incomplete commands during
+ interactive operations. [Bug 1214462].
+
+2005-07-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/configure.in: Check for a $prefix/share directory and add it the
+ the package if found. This will check for Tcl packages in
+ /usr/local/share when Tcl is configured with the default dist install.
+ [Patch 1231015]
+
+2005-07-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_CallWhenDeleted): Converted to use
+ per-thread counter, rather than a process global one that required
+ mutex protection. [RFE 1077194]
+
+ * generic/tclNamesp.c (TclTeardownNamespace): Re-ordering so that
+ * tests/trace.test (trace-34.4): command delete traces fire
+ while the command still exists. [Bug 1047286]
+
+2005-07-24 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * unix/configure: Regen.
+ * unix/tcl.m4 (SC_PROG_TCLSH, SC_BUILD_TCLSH):
+ * win/configure: Regen.
+ * win/tcl.m4 (SC_PROG_TCLSH, SC_BUILD_TCLSH): Split confused search
+ for tclsh on PATH and build and install locations into two macros.
+ SC_PROG_TCLSH searches just the PATH. SC_BUILD_TCLSH determines the
+ name of the tclsh executable in the Tcl build directory. [Bug 1160114]
+ [Patch 1244153]
+
+2005-07-23 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Updates to the Tcl script library to make use
+ * library/history.tcl: of Tcl 8.4 features. Forward port of
+ * library/init.tcl: appropriate portions of [Patch 1237755].
+ * library/package.tcl:
+ * library/safe.tcl:
+ * library/word.tcl:
+
+2005-07-23 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/string.test: Add string is tests for functionality that was not
+ tested.
+ * win/README: Update msys + mingw URL. Remove old Cygwin + mingw info.
+
+2005-07-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_DICT_*): stop 2 compiler warnings for
+ uninitialised variables.
+
+2005-07-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TEBC:INST_DICT_INCR_IMM): Fix the incrementor
+ to work correctly with wide values.
+
+2005-07-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileDictCmd): First run at a compiler
+ * generic/tclExecute.c (TclExecuteByteCode): for dictionaries. Also
+ added an instruction to support 'finally'-like clauses, exposed more of
+ the dict guts to the rest of the core, and defined a few tests to
+ exercise more obscure parts of the compiler's operation that were bugs
+ during development.
+
+2005-07-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/ldAout.tcl (***REMOVED***): Removed support for ancient
+ * unix/configure: BSD's, IRIX 4, RISCos and
+ * unix/Makefile.in: Ultrix. Removed two files whose
+ * unix/tcl.m4: code is used only on those
+ * unix/tclLoadAout.c (***REMOVED***): antique platforms.
+
+ ***POTENTIAL INCOMPATIBILITY*** if anyone actually uses those
+ platforms; it is to be noted though, that an error in the installer has
+ actually not caused a necessary file to be installed on those platforms
+ in several releases, and nobody's complained.
+
+2005-07-16 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (RefineResult): Plugged a stupid memory leak in
+ RefineResult (called from Tcl_StrToD). [Tk Bug 1227781]
+
+2005-07-15 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (TclClockLocaltimeObjCmd,ThreadSafeLocalTime):
+ * library/clock.tcl (GuessWindowsTimeZone, ClearCaches):
+ * tests/clock.test (clock-49.1, clock-49.2):
+ Handle correctly the case where localtime() returns NULL to report a
+ conversion error. Also handle the case where the Windows registry
+ contains timezone values that can be mapped to a tzdata file name but
+ the corresponding file does not exist or is corrupted, by falling back
+ on a Posix timezone string instead; this last case will avoid calls to
+ localtime() in starpacks on Windows. [Bug 1237907]
+
+2005-07-14 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCompile.c: Update to follow style guidelines.
+ (TclPrintInstruction): Reorganize to do better printing out of bytecode
+ with far fewer "special hacks" for particular opcodes.
+ * generic/tclCompile.h: Requires two new opcode types.
+
+2005-07-13 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixSock.c: Use a ProcessGlobalValue to store the value
+ * win/tclWinSock.c: returned by Tcl_GetHostName() ([info
+ hostname]). Also re-order initialization of the value on Windows to
+ favor GetComputerName() over gethostname() as a source of the
+ information.
+
+2005-07-12 Kevin Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Updated from HEAD
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd):
+ * generic/tclInt.h:
+ * generic/tclObj.c (Tcl_GetDoubleFromObj, SetDoubleFromAny)
+ (Tcl_GetIntFromObj, SetIntOrWideFromAny):
+ * generic/tclStrToD.c (TclParseNumber, etc.):
+ * tclTomMathInterface.c (TclBNInitBignumFromWideUInt):
+ * tests/obj.test (obj-1.1, obj-2.2, obj-3.1, obj-3.2):
+
+ Initial attempt at an implementation of TIP #249, comprising a unified
+ parser and modifications to the Tcl_Get*FromObj routines to use it.
+ Further integration of the parser is necessary and planned.
+
+2005-07-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/lsearch.n: Clarify documentation of -exact option; wording was
+ open to misinterpretation by non-English speakers.
+
+2005-07-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c: General style cleanup.
+
+2005-07-08 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Reimplement long and wide
+ type integer division and modulus operations so that the smallest and
+ largest integer values are handled properly. The divide operation is
+ more efficient since it no longer does a modulus or negation and only
+ checks for a remainder when the quotient will be a negative number.
+ The modulus operation is now a bit more complex because of a number of
+ special cases dealing with the smallest and largest integers.
+ * tests/expr.test: Add test cases for division and modulus operations
+ on the smallest and largest integer values for 32 and 64 bit types.
+ [Patch 1230205]
+
+2005-07-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclLink.c: Simplified LinkTraceProc [Bug 1208108].
+
+2005-07-05 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Purged use of TCLTESTARGS [RFE 1161550].
+
+ * generic/tclUtil.c: Converted TclFormatInt() into a macro.
+ * generic/tclInt.decls: [RFE 1194015]
+ * generic/tclInt.h:
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclNamesp.c: Allow for [namespace import] of a command
+ * tests/namespace.test: over a previous [namespace import] of itself
+ without throwing an error. [RFE 1230597]
+
+2005-07-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictForCmd, DictFilterCmd): Interlocking of
+ dictionary internal representations is now done in the core of the dict
+ iterator. Purge the last attempts at doing it at a higher level as they
+ didn't work and were no longer needed.
+
+2005-07-01 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixNotfy.c: protect against spurious wake-ups while waiting
+ on the condition variable when tearing down the notifier thread [Bug
+ 1222872].
+
+2005-06-28 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode): When parsing an integer
+ operand for a unary minus expression operator, check for a wide integer
+ that is actually LONG_MIN. If found, convert back to a long int type.
+ * tests/expr.test: Add constraint for 32bit long int type and 64bit
+ wide int type. Add tests that parse the smallest/largest long int and
+ wide int values.
+
+2005-06-24 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclEvent.c (Tcl_Finalize):
+ * generic/tclInt.h:
+ * generic/tclPreserve.c (TclFinalizePreserve): Changed the finalization
+ logic so that Tcl_Preserve finalizes after exit handlers run; a lot of
+ code called from Tk's exit handlers presumes that Tcl_Preserve will
+ still work even from an exit handler.
+
+2005-06-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Make file safe to re-[source] without
+ destroying registered auto_mkindex_parser hooks.
+
+2005-06-23 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWinChan.c: More rewriting of __asm__ blocks that implement
+ * win/tclWinFCmd.c: SEH in GCC, because mingw's gcc 3.4.2 is not as
+ forgiving of violations committed by the old code and caused panics.
+ [Bug 1225957]
+
+2005-06-23 Daniel Steffen <das@users.sourceforge.net>
+
+ * tools/tcltk-man2html.tcl: fixed useversion glob pattern to accept
+ multi-digit patchlevels.
+
+2005-06-22 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinFile.c: Potential buffer overflow. [Bug 1225571] Thanks to
+ Pat Thoyts for discovery and fix.
+
+2005-06-22 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclInt.h: Changed the finalization
+ * generic/tclEvent.c (Tcl_Finalize): logic to defer the
+ * generic/tclIO.c (TclFinalizeIOSubsystem): shutdown of the pipe
+ * unix/tclUnixPipe.c (TclFinalizePipes): management until after all
+ * win/tclWinPipe.c (TclFinalizePipes): channels have been closed,
+ in order to avoid a situation where the Windows PipeCloseProc2 would
+ re-establish the exit handler after exit handlers had already run,
+ corrupting the heap. [Bug 1225727] Also corrected a potential read of
+ uninitialized memory in PipeClose2Proc [Bug 1225044]
+
+2005-06-21 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclInt.h: Followup to change made on 2005-06-18 by Daniel
+ Steffen. There are compilers (*) who error out on the redefinition of
+ WORDS_BIGENDIAN. We have to undef the previous definition (on the
+ command line) first to make this acceptable. (*): AIX native.
+
+2005-06-21 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclFileName.c: Changed [file split] and [file join] to treat
+ Windows drive letters similarly to ~ syntax and make sure that they
+ appear with "./" in front when they are in intermediate components of
+ the path. [Bug 1194458]
+ * tests/fileName.test: Added test for the above bug.
+
+2005-06-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Added missing walk of the list of active
+ * generic/tclTrace.c: traces to cleanup references to traces being
+ * generic/tclInt.h: deleted. [Bug 1201035] Made the walk of the
+ * tests/trace.test (trace-34.*): active trace list aware of the
+ direction of trace scanning, so the proper correction can be made.
+ [Bug 1224585]
+
+2005-06-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tcl.m4 (SC_ENABLE_SYMBOLS): Only enable the 'compile' special
+ debugging feature when requested in configure.in; removes irrelevant
+ junk from the configure files of extensions that use Tcl's tcl.m4.
+
+2005-06-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompile.h (INST_PUSH_RETURN_OPTIONS): New opcode to allow
+ * generic/tclCompCmds.c (TclCompileCatchCmd): compilation of
+ * generic/tclCompile.c: TIP#90 catch [Bug
+ * generic/tclExecute.c (TclExecuteByteCode): 1219112]
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Ensure we spill to the
+ command form in all cases where it generates an error.
+
+2005-06-20 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Generate an error if a mode
+ argument like -exact is passed more than once to the switch command.
+ The previous implementation silently accepted invalid switch
+ invocations like [switch -exact -glob $str ...].
+ * tests/for.test: Check some error cases when invoking continue and
+ break inside a for loop next script.
+ * tests/switch.test: Add checks for shortened version of a mode
+ argument like -exact. Add test for more than one mode argument. Add
+ test for odd case of passing a variable as a body script.
+
+2005-06-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.h: ensure WORDS_BIGENDIAN is defined correctly with
+ fat compiles on Darwin (i.e. ppc and i386 at the same time), the
+ configure AC_C_BIGENDIAN check is not sufficient in this case because a
+ single run of the compiler builds for two architectures with different
+ endianness.
+
+ * unix/tcl.m4 (Darwin): add -headerpad_max_install_names to LDFLAGS to
+ ensure we can always relocate binaries with install_name_tool.
+
+ * unix/configure: autoconf-2.59
+
+2005-06-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdAH.c (Tcl_FormatObjCmd): Fix for [Bug 1154163]; only
+ * tests/format.test: insert 'l' modifier when it is needed.
+
+2005-06-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclTimer.c (AfterDelay): Split out the code to manage
+ synchronous-delay [after] commands.
+ * tests/interp.test (interp-34.10): Time limits and synch-delay [after]
+ did not mix well... [Bug 1221395]
+
+2005-06-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_DeleteCommandFromToken): Only delete a
+ * tests/namespace.test (namespace-49.2): command from the hashtable on
+ reentrant processing if it has not been already deleted; at least three
+ deletes of the same command are possible. [Bug 1220058]
+ * generic/tclTrace.c (TraceCommandProc): Remove bogus error message
+ creation when traces trigger in situations where the command has
+ already been deleted.
+
+2005-06-13 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFCmd.c: correct fix to file mkdir 2005-06-09 [Bug 1219176]
+
+2005-06-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c: Factor out some common idioms into named forms
+ for greater clarity.
+
+2005-06-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/chan.n: Fold in the descriptive parts of the documentation for
+ all the commands that [chan] builds on top of.
+
+2005-06-09 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFCmd.c: fix to race condition in file mkdir [Bug 1217375]
+ * doc/glob.n: improve glob documentation [Bug 1190891]
+
+2005-06-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/expr.n, doc/mathfunc.n: Fix minor typos [Bug 1211078] and add
+ mention of distinctly-relevant [namespace path] subcommand.
+
+2005-06-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Reduced the Tcl_ObjTypes "index",
+ * generic/tclIndexObj.c: "ensembleCmd", "localVarName", and
+ * generic/tclNamesp.c: "levelReference" to file static scope.
+ * generic/tclProc.c:
+ * generic/tclVar.c:
+
+ * generic/tclObj.c: Restored registration of the "procbody"
+ Tcl_ObjType, as required by the tclcompiler application.
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2005-06-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIO.c (Tcl_ChannelTruncateProc): Stop proliferation of
+ * generic/tcl.h: channel type versions
+ * doc/CrtChannel.3: following advice from AKu
+
+ Bump patchlevel to a4 to distinguish from a3 release.
+
+ * generic/tclInt.h (INTERP_TRACE_IN_PROGRESS): Add flag so the error
+ * generic/tclIndexObj.c (Tcl_WrongNumArgs): messages from ensembles
+ * generic/tclIOCmd.c (Tcl_ReadObjCmd): can be correct.
+
+ TIP#208 IMPLEMENTATION
+
+ * library/init.tcl: Create the chan ensemble.
+ * tests/chan.test: Rudimentary test suite.
+ * doc/chan.n: General documentation.
+
+ TRUNCATION API (part of TIP#208)
+ * generic/tcl.h, generic/tcl.decls: Declaration of the API.
+ * doc/CrtChannel.3, doc/OpenFileChnl.3: Documentation of the API.
+ * generic/tclBasic.c (Tcl_CreateInterp): Create the mapping into Tcl.
+ * generic/tclIOCmd.c (TclChanTruncateObjCmd): Implementation of
+ Tcl-level truncation API.
+ * generic/tclIO.c (Tcl_TruncateChannel): Generic C-level truncation API
+ implementation.
+ * unix/tclUnixChan.c (FileTruncateProc): Basic implementation of
+ truncating driver.
+
+ * win/tclWinChan.c (FileTruncateProc): Added implementation of file
+ truncation for Windows.
+ * tests/chan.test (chan-15.2): Added real test of truncation.
+
+2005-06-06 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWin32Dll.c: Corrected another buglet in the assembly code for
+ stack probing on Win32/gcc. [Bug 1213678]
+ * generic/tclObj,c: Added missing 'static' on definition of
+ UpdateStringOfBignum, and removed a 'switch' on a 'long long' operand
+ (which HP-UX native 'cc' seems unable to handle). [Bug 1215775]
+
+2005-06-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ *** 8.5a3 TAGGED FOR RELEASE ***
+
+ * unix/Makefile.in (dist): add libtommath
+
+2005-06-03 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * library/parray.tcl (parray): Only generate the sorted list of element
+ names once. Thanks to Andreas Leitgeb for spotting this.
+
+2005-06-03 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: fixed 'embedded' target.
+
+2005-06-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in (html): add BUILD_HTML_FLAGS optional var
+ * tools/tcltk-man2html.tcl: add a --useversion to prevent confusion
+ when multiple Tcl source dirs exist.
+
+2005-06-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: For compatibility with earlier Tcl releases,
+ * generic/tclResult.c: when a command procedure simply does a
+ * generic/tclTest.c: "return TCL_RETURN;" we must interpret that
+ * tests/result.test: the same as
+ "return Tcl_SetReturnOptions(interp, Tcl_NewObj());" [Bug 1209759].
+
+2005-06-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Allow compilation of
+ -nocase -glob [switch]es (only one we know how to compile).
+
+ TIP#241 IMPLEMENTATION from Joe Mistachkin
+
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd, Tcl_LsortObjCmd):
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): Implementation of -nocase
+ option for [lsearch], [lsort] and [switch] commands.
+ * win/tclWinPort.h: Win uses nonstandard function names...
+ * tests/cmdIL.test, tests/lsearch.test, tests/switch.test: Tests
+ * doc/lsearch.n, doc/lsort.n, doc/switch.n: Docs
+
+ * generic/tclCompCmds.c (TclCompileLindexCmd): Compile the most common
+ case of [lindex] more efficiently.
+
+ * unix/tclUnixNotfy.c (Tcl_FinalizeNotifier): Pass the correct number
+ of arguments to Tcl_JoinThread.
+
+2005-05-31 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/configure.in, unix/tcl.m4: Standardize generation of help
+ messages to always use AC_HELP_STRING and always (except for --with-tcl
+ and --with-tk, where the default is complex) say what the default is.
+
+2005-05-31 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixNotfy.c: the notifier thread is now created as joinable
+ thread and it is properly joined in Tcl_FinalizeNotifier. This is an
+ attempt to fix the [Bug 1082283].
+
+2005-05-30 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * win/tclWinThrd.c: Fixed [Bug 1204064]
+
+2005-05-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP #229 IMPLEMENTATION
+
+ * generic/tclNamesp.c (Tcl_FindCommand, TclResetShadowedCmdRefs)
+ (NamespacePathCmd, SetNsPath, UnlinkNsPath, TclInvalidateNsPath):
+ Implementation of the [namespace path] command and the command name
+ resolution engine.
+ * doc/info.n, doc/namespace.n: Doc updates.
+ * tests/namespace.test (namespace-51.*): Test updates.
+ * generic/tclResolve.c (BumpCmdRefEpochs, Tcl_SetNamespaceResolvers):
+ * generic/tclBasic.c (Tcl_CreateCommand, Tcl_CreateObjCommand): Ensure
+ that people don't see stale paths.
+ * generic/tclInt.h (Namespace, NamespacePathEntry): Structure defs.
+ * generic/tclCmdIL.c (InfoCommandsCmd): Updates to [info commands].
+
+2005-05-26 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Makefile: moved & corrected EMBEDDED_BUILD check.
+
+ * unix/configure.in: corrected framework finalization to softlink stub
+ library to Versions/8.x subdir instead of Versions/Current.
+ * unix/configure: autoconf-2.59
+
+2005-05-25 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCmdMZ.c (Tcl_TimeObjCmd): add necessary cast
+
+2005-05-25 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#182 IMPLEMENTATION [Patch 1165062]
+
+ * doc/mathfunc.n: New built-in math function bool().
+ * generic/tclBasic.c:
+ * tests/expr.test:
+ * tests/info.test:
+
+2005-05-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl: Updated [unknown] to be sure the [return]
+ * tests/init.test: options from an auto-loaded command are seen
+ correctly by the caller.
+
+2005-05-24 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/env.test: added DYLD_FRAMEWORK_PATH to the list of env vars
+ that need to be handled specially.
+
+ * macosx/Makefile:
+ * macosx/README:
+ * macosx/Tcl-Info.plist.in (new file):
+ * unix/Makefile.in:
+ * unix/configure.in:
+ * unix/tcl.m4:
+ * unix/tclUnixInit.c: moved all Darwin framework build support from
+ macosx/Makefile into the standard unix configure/make buildsystem, the
+ macosx/Makefile is no longer required to build Tcl.framework (but its
+ functionality is still available for backwards compatibility).
+ * unix/configure: autoconf-2.59
+
+ * generic/tclIOUtil.c (TclLoadFile):
+ * generic/tclInt.h:
+ * unix/tcl.m4:
+ * unix/tclLoadDyld.c: added support for [load]ing .bundle binaries in
+ addition to .dylib's: .bundle's can be [unload]ed (unlike .dylib's),
+ and can be [load]ed from memory, e.g. directly from VFS without needing
+ to be written out to a temporary location first. [Bug 1202209]
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * generic/tclCmdMZ.c (Tcl_TimeObjCmd): change [time] called with a
+ count > 1 to return a string with a float value instead of a rounded
+ off integer. [Bug 1202178]
+
+ * doc/expr.n:
+ * doc/string.n: fixed roff syntax complaints from 'make html'.
+
+2005-05-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Corrected parser to recognize all
+ boolean literals accepted by Tcl_GetBoolean, including prefixes like
+ "y" and "f", and to allow "eq" and "ne" as function names in the proper
+ context. [Bug 1201589].
+
+2005-05-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (TclEvalObjvInternal): Rewrite for greater
+ clarity; although 'goto' is Bad, the contortions you have to go through
+ to avoid it can be worse...
+
+2005-05-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c (Tcl_InitNotifier): fixed crashing CFRelease
+ of runLoopSource in Tcl_InitNotifier (reported by Zoran):
+ CFRunLoopAddSource doesn't CFRetain, so can only CFRelease the
+ runLoopSource in Tcl_FinalizeNotifier.
+
+2005-05-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_ExprBoolean): Rewrite as wrapper around
+ Tcl_ExprBooleanObj.
+
+ * generic/tclCmdMZ.c ([string is boolean/true/false]): Rewrite dropping
+ string-based Tcl_GetBoolean call, so that internal reps are kept for
+ subsequent quick boolean operations.
+
+ * generic/tclExecute.c: Dropped most special handling of the "boolean"
+ Tcl_ObjType, since that type should now be rarely encountered.
+
+ * doc/BoolObj.3: Rewrite of documentation dropping many details
+ about the internals of Tcl_Objs. Shorter documentation focuses on the
+ function and use of the routines.
+
+ * generic/tclInt.h: Revision to the "boolean" Tcl_ObjType, so that
+ * generic/tclObj.c: only string values like "yes" and "false" are
+ * tests/obj.test: kept as the "boolean" Tcl_ObjType. The string
+ values "0" and "1" are kept as "int" Tcl_ObjType, which also produce
+ quick calls to Tcl_GetBooleanFromObj(). Since this internal change
+ means a Tcl_ConvertToType to a "boolean" Tcl_ObjType might not produce
+ a Tcl_Obj of type "boolean", the registration of the "boolean" type is
+ also removed.
+ ***POTENTIAL INCOMPATIBILITY***
+ For callers of Tcl_GetObjType on the type name "boolean".
+
+2005-05-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclObj.c (TclInitObjSubsystem): Removed the
+ * tests/listObj.test: registration of the Tcl_ObjType's "list",
+ * tests/obj.test: "procbody", "index", "ensembleCommand",
+ "localVarName", and "levelReference". The only reason to register a
+ Tcl_ObjType is to have it returned by Tcl_GetObjType, and the only
+ reason for that is to retrieve a (Tcl_ObjType *) to pass to
+ Tcl_ConvertToType(). None of the types above can support a
+ Tcl_ConvertToType() call; they panic. Better not to offer something
+ than to lead users into a panic.
+ ***POTENTIAL INCOMPATIBILITY***
+ For callers of Tcl_GetObjType on the type names listed above.
+
+2005-05-15 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * win/tclWin32Dll.c: conditioned definition of EXCEPTION_REGISTRATION
+ structures on HAVE_NO_SEH, to fix a bug in buildability on MSVC.
+
+2005-05-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls:
+ * generic/tclTest.c:
+ * generic/tclUtil.c:
+ * win/tclWin32Dll.c: fixed link error due to direct access by tclTest.c
+ to the MODULE_SCOPE tclPlatform global: renamed existing
+ TclWinGetPlatform() accessor to TclGetPlatform() and moved it to
+ generic code so that it can be used by on all platforms where
+ MODULE_SCOPE is enforced.
+
+ * macosx/tclMacOSXBundle.c:
+ * unix/tclUnixInit.c:
+ * unix/tcl.m4 (Darwin): made use of CoreFoundation API configurable and
+ added test of CoreFoundation availablility to allow building on ppc64,
+ replaced HAVE_CFBUNDLE by HAVE_COREFOUNDATION; test for availability of
+ Tiger or later OSSpinLockLock API.
+
+ * unix/tclUnixNotfy.c:
+ * unix/Makefile.in:
+ * macosx/tclMacOSXNotify.c (new file): when CoreFoundation is
+ available, use new CFRunLoop based notifier: allows easy integration
+ with other event loops on Mac OS X, in particular the TkAqua Carbon
+ event loop is now integrated via a standard tcl event source (instead
+ of TkAqua upon loading having to finalize the exsting notifier and
+ replace it with its custom version). [Patch 1202052]
+
+ * tests/unixNotfy.test: don't run unthreaded tests on Darwin since
+ notifier may be using threads even in unthreaded core.
+
+ * unix/tclUnixPort.h:
+ * unix/tcl.m4 (Darwin): test for thread-unsafe realpath during
+ configure, as Darwin 7 and later realpath is threadsafe.
+
+ * macosx/Makefile: enable configure caching.
+
+ * unix/configure.in: wrap tclConfig.h header in #ifndef _TCLCONFIG so
+ that it can be included more than once without warnings from gcc4.0 (as
+ happens e.g. when including both tclInt.h and tclPort.h)
+
+ * macosx/tclMacOSXBundle.c:
+ * unix/tclUnixChan.c:
+ * unix/tclLoadDyld.c:
+ * unix/tclUnixInit.c: fixed gcc 4.0 warnings.
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c: make genstubs
+
+2005-05-13 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWin32Dll.c: Further rework of the SEH logic. All
+ EXCEPTION_REGISTRATION records are now in the activation record rather
+ than pushed on the stack.
+
+2005-05-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Dropped the TCL_NO_MATH configuration. It's
+ * generic/tclBinary.c: believed this has not been working in a long
+ * generic/tclExecute.c: time. Tcl needs math.h. [RFE 1200680]
+ * unix/Makefile.in:
+
+2005-05-12 Kevin Kenny <kennykb@acm.org>
+
+ * doc/mathfunc.n: Changed NAME line to match the name of the page.
+
+2005-05-11 Kevin Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Resynchronized with the HEAD; at this
+ checkpoint [-rkennykb-numerics-branch-20050511], the HEAD and
+ kennykb-numerics-branch contain identical code.
+
+2005-05-11 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c (TclStrToD, RefineResult, ParseNaN): Changed the
+ code to cast 'char' to UCHAR explicitly when using ctype macros, to
+ silence complaints from the Solaris compiler.
+
+2005-05-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixFCmd.c: add lint attr to enum to satisfy strictly
+ compliant compilers that don't like trailing ,s.
+
+ * tests/string.test: string-10.[21-30]
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): add extra checks to prevent
+ possible UMR in unichar cmp function for string map.
+
+2005-05-10 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclBinary.c (FormatNumber): Fixed a bug where NaN's resulted
+ in reads of uninitialized memory when using 'd', 'q', or 'Q' format.
+ * generic/tclStrToD.c (ParseNaN, TclFormatNaN): Added code to handle
+ the peculiarities of HP's PA_RISC, which uses a different 'quiet' bit
+ in NaN from everyone else.
+ * libtommath/tommath_superclass.h: Corrected C++-style comment.
+
+2005-05-10 Kevin Kenny <kennykb@acm.org>
+
+ Merged all changes on kennykb-numerics-branch back into the HEAD.
+ TIP's 132 and 232 are now Final.
+
+2005-05-10 Kevin Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged changes from HEAD.
+
+2005-05-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (ExponLong, ExponWide):
+ * tests/expr.test (expr-23.34/35): fixed special case 'i**0' for i>0
+ [Bug 1198892]
+
+2005-05-09 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+ * win/tclWin32Dll.c (TclpCheckStackSpace, TclWinCPUID): Reworked
+ structured event handling to function even with -fomit-frame-pointers.
+
+2005-05-08 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+ * generic/tclStrToD.c: Made code more portable by finding a workaround
+ for MSVC's 'volatile' issue that does not require conditional
+ compilation.
+ * win/tclWin32Dll.c (TclWinCPUID): Removed structured event handling
+ from the GCC code since (a) bad code is generated by the instruction
+ scheduling with -O2, and (b) it's not needed on any reasonably modern
+ CPU.
+
+2005-05-07 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+ * generic/tclEvent.c: Moved initialization of tclStrToD.c's
+ * generic/tclInt.h: static constants into a procedure called
+ * generic/tclStrToD.c: from TclInitSubsystems to avoid double checked
+ locking protocol. Cleaned up an issue where MSVC ignored the
+ 'volatile' specifier, causing incorrect comparison of an underflowed
+ number against zero.
+
+2005-05-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tcl.m4, unix/configure: correct Solaris 10 (5.10) check and add
+ support for x86_64 Solaris cc builds.
+
+2005-05-05 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged with HEAD.
+
+2005-05-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinThrd.c: Corrected a compilation error on the
+ --enable-threads configuration.
+
+2005-05-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.decls: Converted TclMatchIsTrivial to a macro.
+ * generic/tclInt.h:
+ * generic/tclUtil.c:
+ * generic/tclIntDecls.h: `make genstubs`
+ * generic/tclStubInit.c:
+ * generic/tclBasic.c: Added callers of TclMatchIsTrivial where a
+ * generic/tclCmdIL.c: search can be done more efficiently when it is
+ * generic/tclCompCmds.c:recognized that a pattern match is really an
+ * generic/tclDictObj.c: exact match. [Patch 1076088]
+ * generic/tclIO.c:
+ * generic/tclNamesp.c:
+ * generic/tclVar.c:
+
+ * generic/tclCompCmds.c: Factored common efficiency trick into a
+ macro named CompileWord.
+
+ * generic/tclCompCmds.c: Replaced all instance of
+ * generic/tclCompile.c: TCL_OUT_LINE_COMPILE with TCL_ERROR.
+ * generic/tclInt.h: Now that we've eradicated the mistaken
+ * tests/appendComp.test: notion of a "compile-time error", we
+ can use the TCL_ERROR return code to signal any failure to produce
+ bytecode.
+
+2005-05-03 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/DString.3: Eliminated use of identifier "string" in Tcl's
+ * doc/Environment.3: public C API to avoid conflict/confusion with
+ * doc/Eval.3: the std::string of C++.
+ * doc/ExprLong.3, doc/ExprLongObj.3, doc/GetInt.3, doc/GetOpnFl.3:
+ * doc/ParseCmd.3, doc/RegExp.3, doc/SetResult.3, doc/StrMatch.3:
+ * doc/Utf.3, generic/tcl.decls, generic/tclBasic.c, generic/tclEnv.c:
+ * generic/tclGet.c, generic/tclParse.c, generic/tclParseExpr.c:
+ * generic/tclRegexp.c, generic/tclResult.c, generic/tclUtf.c:
+ * generic/tclUtil.c, unix/tclUnixChan.c:
+
+ * generic/tclDecls.h: `make genstubs`
+
+2005-05-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.decls:
+ * generic/tclBasic.c: Simplified implementation of Tcl_ExprString.
+ * tests/expr-old.test:
+
+ * generic/tclDecls.h: `make genstubs`
+
+2005-04-30 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixNotfy.c: applied dkf's tkMacOSXNotify.c cleanup changes.
+
+2005-04-29 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#176 IMPLEMENTATION [Patch 1165695]
+
+ * generic/tclUtil.c: Extended TclGetIntForIndex to recognize index
+ formats including end+integer and integer+/-integer.
+
+ * generic/tclCmdMZ.c: Extended the -start switch of [regexp] and
+ [regsub] to accept all index formats known by TclGetIntForIndex.
+
+ * doc/lindex.n: Updated docs to note new index formats.
+ * doc/linsert.n, doc/lrange.n, doc/lreplace.n, doc/lsearch.n:
+ * doc/lset.n, doc/lsort.n, doc/regexp.n, doc/regsub.n, doc/string.n:
+
+ * tests/cmdIL.test: Updated tests.
+ * tests/compile.test, tests/lindex.test, tests/linsert.test:
+ * tests/lrange.test, tests/lreplace.test, tests/lsearch.test:
+ * tests/lset.test, tests/regexp.test, tests/regexpComp.test:
+ * tests/string.test, tests/stringComp.test, tests/util.test:
+
+2005-04-28 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test (7.1): Alternative fix for the 2004-11-11 commit.
+
+2005-04-27 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl: Corrected flaw in interactive command
+ * tests/main.test: auto-completion. [Bug 1191409].
+
+ TIP#183 IMPLEMENTATION [Patch 577093]
+
+ * generic/tclIOUtil.c (TclGetOpenModeEx): New routine.
+ * generic/tclInt.h:
+
+ * generic/tclIO.c (Tcl_OpenObjCmd): Support for "b" and
+ * doc/open.n: "BINARY" in "access" argument to [open].
+ * tests/ioCmd.test:
+
+2005-04-26 Kevin B. Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclBinary.c (FormatNumber): Dredge the NaN out of the
+ internal representation if Tcl_GetDoubleFromObj returns TCL_ERROR on a
+ NaN.
+
+ * generic/tclObj.c (Tcl_GetDoubleFromObj): Restored silent
+ overflow/underflow behaviour that the merge of 2004-04-25 messed up.
+ Thanks to Don Porter for calling attention to this bug. Also removed an
+ uninitialised memory reference in this function that valgrind caught.
+ Also changed to return TCL_ERROR on a pure NaN.
+
+ * generic/tclStrToD.c (RefineResult): Added a test for the initial
+ approximation being HUGE_VAL; this test avoids EDOM being returned from
+ ldexp on some platforms on input values exceeding the floating point
+ range.
+
+ * tests/expr.test (expr-29.*, expr-30.*): Added further tests of
+ overflow/underflow on input conversions.
+
+2005-04-25 Kevin B. Kenny <kennykb@users.sourceforge.net>
+
+ [kennykb-numerics-branch] Merged with HEAD.
+
+ * doc/CrtMathFunc.n: Revised documentation for TIP 232
+
+2005-04-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * compat/string.h: fixed memchr() protoype for __APPLE__ so that we
+ build on Mac OS X 10.1 again.
+
+ * generic/tclNotify.c (TclFinalizeNotifier): fixed notifier not being
+ finalized in unthreaded core (was testing for notifier initialization
+ in current thread by checking thread id != 0 but thread id is always 0
+ in untreaded core).
+
+ * win/tclWinNotify.c (Tcl_WaitForEvent):
+ * unix/tclUnixNotfy.c (Tcl_WaitForEvent): don't call ScaleTimeProc for
+ zero wait times (as specified in TIP 233).
+
+ * unix/Makefile.in: added @PLAT_SRCS@ to SRCS and split out NOTIFY_SRCS
+ from UNIX_SRCS for parity with UNIX_OBJS & NOTIFY_OBJS.
+
+ * unix/tcl.m4 (Darwin): added configure checks for recently added
+ linker flags -single_module and -search_paths_first to allow building
+ with older tools (and on Mac OS X 10.1), use -single_module in SHLIB_LD
+ and not just T{CL,K}_SHLIB_LD_EXTRAS, added unexporting from Tk of
+ symbols from libtclstub to avoid duplicate symbol warnings, added
+ PLAT_SRCS definition for Mac OS X, defined MODULE_SCOPE to
+ __private_extern__.
+ (SC_MISSING_POSIX_HEADERS): added caching of dirent.h check.
+
+ * unix/configure: autoconf-2.59
+
+2005-04-25 Kevin B. Kenny <kennykb@users.sourceforge.net>
+
+ * library/tzdata/America/Boise:
+ * library/tzdata/America/Chicago:
+ * library/tzdata/America/Denver
+ * library/tzdata/America/Indianapolis:
+ * library/tzdata/America/Los_Angeles:
+ * library/tzdata/America/Louisville:
+ * library/tzdata/America/Managua:
+ * library/tzdata/America/New_York:
+ * library/tzdata/America/Phoenix:
+ * library/tzdata/America/Port-au-Prince:
+ * library/tzdata/America/Indiana/Knox:
+ * library/tzdata/America/Indiana/Marengo:
+ * library/tzdata/America/Indiana/Vevay:
+ * library/tzdata/America/Kentucky/Monticello:
+ * library/tzdata/America/North_Dakota/Center:
+ * library/tzdata/Asia/Tehran:
+ Olson's tzdata2005i. Corrects exact time at which Standard Time was
+ adopted in the US (generally, noon, Standard Time, rather than noon,
+ Local Mean Time). Adopts new civil rules for Nicaragua and Iran.
+
+2005-04-25 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl: Use "ni" and "in" operators.
+
+2005-04-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: fix for [Bug 1189274].
+
+2005-04-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclLiteral.c: Silence compiler warnings.
+ * generic/tclObj.c: [Bug 1188863].
+
+2005-04-22 Don Porter <dgp@users.sourceforge.net>
+
+ The 2005-04-21 changes to Tcl_GetBooleanFromObj were done to bring it
+ into agreement with its docs. Further investigation reveals it was the
+ docs that were incorrect.
+
+ * doc/BoolObj.3: Corrections to the documentation of
+ Tcl_GetBooleanFromObj to bring it into agreement with what this public
+ interface has always done, including noting the difference in function
+ between Tcl_GetBooleanFromObj and Tcl_GetBoolean.
+
+ * generic/tclGet.c: Revised Tcl_GetBoolean to no longer be a
+ wrapper around Tcl_GetBooleanFromObj (different function!).
+
+ * generic/tclObj.c: Removed TclGetTruthValueFromObj routine that
+ was added yesterday. Revisions so that only Tcl_GetBoolean-approved
+ values get the "boolean" Tcl_ObjType. This retains the fix for [Bug
+ 1187123].
+ * tests/string.test: Test string-23.0 for Bug 1187123.
+
+ * generic/tclInt.h: Revert most recent change.
+ * generic/tclBasic.c:
+ * generic/tclCompCmds.c:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * tests/obj.test:
+
+2005-04-21 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/GetInt.3: Convert argument "string" to "str" to agree with code.
+ Also clarified a few details on int and double formats.
+ * generic/tclGet.c: Radical code simplification. Converted
+ Tcl_GetFoo() routines into wrappers around Tcl_GetFooFromObj(). Reduces
+ code duplication, and the resulting potential for inconsistency.
+
+ * generic/tclObj.c: Several changes:
+
+ - Re-ordered error detection code so all values with trailing garbage
+ receive a "not an integer" message instead of an "integer too large"
+ message.
+ - Removed inactive code meant to deal with strtoul* routines that fail
+ to parse leading signs. All of them do, and if any are detected that
+ do not, the correct fix is replacement with compat/strtoul*.c, not a
+ lot of special care by the callers.
+ - Tcl_GetDoubleFromObj now avoids shimmering away a "wideInt" intrep.
+ - Fixed Tcl_GetBooleanFromObj to agree with its documentation and with
+ Tcl_GetBoolean, accepting only "0" and "1" and not other numeric
+ strings. [Bug 1187123]
+ - Added new private routine TclGetTruthValueFromObj to perform the more
+ permissive conversion of numeric values to boolean that is needed by
+ the [expr] machinery.
+
+ * generic/tclInt.h (TclGetTruthValueFromObj): New routine.
+ * generic/tclExecute.c: Updated callers to call new routine.
+ * generic/tclBasic.c: Updated callers to call new routine.
+ * generic/tclCompCmds.c: Updated callers to call new routine.
+ * generic/tclDictObj.c: Updated callers to call new routine.
+ * tests/obj.test: Corrected bad tests that actually expected
+ values like "47" and "0xac" to be accepted as booleans.
+
+ * generic/tclLiteral.c: Disabled the code that forces some literals
+ into the "int" Tcl_ObjType during registration. We can re-enable it if
+ this change causes trouble, but it seems more sensible to let Tcl's
+ "on-demand" shimmering rule, and not try to pre-guess things.
+
+2005-04-20 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+ * doc/expr.n:
+ * doc/mathfunc.n (new file): Revised documentation for TIP 232
+
+2005-04-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclGet.c (Tcl_GetInt): Corrected error that did not
+ * generic/tclObj.c (Tcl_GetIntFromObj): permit 0x80000000 to be
+ recognized as an integer on TCL_WIDE_INT_IS_LONG systems [Bug 1090869].
+
+2005-04-20 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclFileName.c: Silenced a compiler warning about '/*' within
+ a comment.
+
+2005-04-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Added unsupported command
+ * generic/tclCmdAH.c: [::tcl::unsupported::EncodingDirs] to permit
+ * generic/tclInt.h: query/set of the encoding search path at
+ * generic/tclInterp.c: the script level. Updated init.tcl to make
+ * library/init.tcl: use of the new command. Also updated several
+ coding practices in init.tcl ("eq" for [string equal], etc.)
+
+2005-04-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (Initialize): Put initialization code into a proc
+ to avoid inadvertently clobbering global variables. [Bug 1185933]
+ * tests/clock.test (clock-48.1): Added regression test for the above
+ bug.
+ Thanks to Ulrich Ring for reporting this bug.
+
+2005-04-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/Var.c (Tcl_ArrayObjCmd - ARRAY_NAMES): fix Tcl_Obj leak. [Bug
+ 1084111]
+
+2005-04-16 Zoran Vasiljevic <vasiljevic@users.sf.net>
+
+ * generic/tclIOUtil.c: force clenaup of the interp result in
+ TclLoadFile(). Some implementations of TclpFindSymbol() will seed the
+ interp result with error message when unable to find the requested
+ symbol (this is not considered to be an error).
+
+ Set of changes correcting huge memory waste (not a leak) when a thread
+ exits. This has been introduced in 8.4.7 within an attempt to correctly
+ cleanup after ourselves when Tcl library is being unloaded with the
+ Tcl_Finalize() call.
+
+ This fixes the [Bug 1178445]
+
+ * generic/tclInt.h: added prototypes for TclpFreeAllocCache() and
+ TclFreeAllocCache()
+
+ * generic/tclThreadAlloc.c: modified TclFinalizeThreadAlloc() to
+ explicitly call TclpFreeAllocCache with the NULL-ptr as argument
+ signalling cleanup of private tsd key used only by the threading
+ allocator.
+
+ * unix/tclUnixThrd.c: fixed TclpFreeAllocCache() to recognize when
+ being called with NULL argument. This is a signal for it to clean up
+ the tsd key associated with the threading allocator.
+
+ * win/tclWinThrd.c: renamed TclWinFreeAllocCache to TclpFreeAllocCache
+ and fixed to recognize when being called with NULL argument. This is a
+ signal for it to clean up the tsd key associated with the threading
+ allocator.
+
+2005-04-13 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/unixInit.test: Disabled obsolete tests and removed code
+ * tests/encoding.test: that supported them.
+ * generic/tclInterp.c:
+
+ * library/init.tcl: Use auto-loading to bring in Tcl Module support
+ * library/tclIndex: as needed. This reduces startup time by
+ * library/tm.tcl: delaying this initialization to a later time.
+
+2005-04-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: missing semicolons caused failure to compile
+ with TCL_COMPILE_DEBUG.
+
+2005-04-13 David Gravereaux <davygrvy@pobox.com>
+
+ * generic/tclIO.c (Tcl_SetChannelBufferSize): Lowest size limit
+ * tests/io.test: changed from ten bytes to one byte. Need for
+ * tests/iogt.test: this change was proven by Ross Cartlidge
+ <rossc@cisco.com> where [read stdin 1] was grabbing 10 bytes followed
+ by starting a child process that was intended to continue reading from
+ stdin. Even with -buffersize set to one, nine chars were getting lost
+ by the buffersize over reading for the native read() caused by [read].
+
+2005-04-13 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/tclUnixInit.c (TclpGetEncodingNameFromEnvironment): Reversed
+ order of verifying candidate [encoding system] value, checking against
+ a table in memory first before calling Tcl_GetEncoding and potentially
+ scanning through the filesystem. Also ordered the table so that a
+ binary search could be used within it. Improves startup time a bit more
+ on some systems.
+
+2005-04-13 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.n: Added a missing '--' on several [switch] commands to
+ improve performance of [clock format] and related operations. [FRQ
+ 1182459]
+
+2005-04-13 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/fcopy.n: Improved documentation on copying binary files, added an
+ example and mentioned the use of [file copy].
+ * doc/fconfigure.n: Improved documentation of -encoding binary option.
+ This is all following comments from Steve Manning <steve@manning.net>
+ on comp.lang.tcl that the current documentation was not clear.
+
+2005-04-13 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c:Commented out the functions
+ TclPrintInstruction(), TclPrintObject() and TclPrintSource() when not
+ debugging the compiler, as they are never called in that case.
+
+2005-04-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInterp.c: Corrected bad syntax of Tcl_Panic() call.
+
+ * generic/tclUtil.c (TclGetProcessGlobalValue): More robust handling
+ of bad TclInitProcessGlobalValueProc behavior; an immediate panic
+ rather than a mysterious crash later.
+
+ * generic/tclEncoding.c: Several changes to the way the
+ encodingFileMap cache is maintained. Previously, it was attempted to
+ keep the file map filled and up to date with changes in the encoding
+ search path. This contributed to slow startup times since it required
+ an expensive "glob" operation to fill the cache. Now the validity of
+ items in the cache are checked at the time they are used, so the cache
+ is permitted to fall out of sync with the encoding search path. Only
+ [encoding names] and Tcl_GetEncodingNames() now pay the full expense.
+ [Bug 1177363]
+
+2005-04-12 Kevin B. Kenny <kennykb@acm.org>
+
+ * compat/strstr.c: Added default definition of NULL to accommodate
+ building on systems with badly broken headers. [Bug 1175161]
+
+2005-04-11 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tools/tclZIC.tcl: Rewrote to take advantage of more features of Tcl
+ 8.5 (on which it was dependent anyway). Also added a [package require]
+ line to formalize the relationship.
+
+2005-04-11 Kevin Kenny <kennykb@users.sf.net>
+
+ [kennykb-numerics-branch] Merged with HEAD. Updated to libtommath 0.35.
+
+ * generic/tclBasic.c: Attempted to repeat changes that applied to
+ tclExecute.c in Miguel Sofer's commit of 2005-04-01, together with
+ (possibly) a few more uses of his new object creation macros. Also
+ plugged a memory leak in TclObjInvoke. [Bug 1180368]
+
+2005-04-10 Kevin Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Montevideo:
+ * library/tzdata/Asia/Almaty:
+ * library/tzdata/Asia/Aqtau:
+ * library/tzdata/Asia/Aqtobe:
+ * library/tzdata/Asia/Baku:
+ * library/tzdata/Asia/Jerusalem:
+ * library/tzdata/Asia/Oral:
+ * library/tzdata/Asia/Qyzylorda:
+ * library/tzdata/Indian/Chagos:
+ * library/tzdata/Indian/Cocos: Olson's tzdata2005h
+
+2005-04-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclObjInvoke): Plug memory leak. [Bug 1180368]
+
+2005-04-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: fix possible leak of expansion Tcl_Objs
+
+2005-04-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/README: updated requirements for OS & developer tool versions
+ and other small fixes/cleanup.
+
+ * generic/tclListObj.c (Tcl_ListObjIndex): added missing NULL return
+ when getting index from an empty list.
+
+ * unix/tcl.m4 (Darwin): added -single_module linker flag to
+ TCL_SHLIB_LD_EXTRAS and TK_SHLIB_LD_EXTRAS.
+ * unix/configure: autoconf-2.59
+
+2005-04-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h (TclGetEncodingFromObj): New function to
+ * generic/tclEncoding.c (TclGetEncodingFromObj): retrieve a
+ Tcl_Encoding value, as well as cache it in the internal rep of a new
+ "encoding" Tcl_ObjType.
+ * generic/tclCmdAH.c (Tcl_EncodingObjCmd): Updated to call new
+ function so that Tcl_Encoding's used by [encoding convert*] routines
+ are not freed too quickly. [Bug 1077262]
+
+2005-04-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Rewritten to be able to
+ handle the other form of [switch] and generate slightly simpler (but
+ longer) code.
+
+2005-04-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/upvar.n, doc/unset.n, doc/tell.n, doc/tclvars.n, doc/subst.n:
+ * doc/seek.n, doc/scan.n, doc/regsub.n, doc/registry.n, doc/regexp.n:
+ * doc/read.n, doc/puts.n, doc/pkgMkIndex.n, doc/open.n, doc/lreplace.n:
+ * doc/lrange.n, doc/load.n, doc/llength.n, doc/linsert.n, doc/lindex.n:
+ * doc/lappend.n, doc/info.n, doc/gets.n, doc/format.n, doc/flush.n:
+ * doc/fileevent.n, doc/file.n, doc/fblocked.n, doc/close.n:
+ * doc/array.n, doc/Utf.3, doc/TraceVar.3, doc/StrMatch.3, doc/RegExp.3:
+ * doc/PrintDbl.3, doc/OpenTcp.3, doc/OpenFileChnl.3, doc/Object.3:
+ * doc/Notifier.3, doc/LinkVar.3, doc/IntObj.3, doc/Interp.3:
+ * doc/GetOpnFl.3, doc/GetIndex.3, doc/Eval.3, doc/CrtMathFnc.3:
+ * doc/CrtFileHdlr.3, doc/CrtCommand.3, doc/CrtChannel.3:
+ * doc/Backslash.3: Purge old .VS/.VE macro instances.
+
+ * tools/man2html2.tcl (IPmacro): Rewrote to understand what .IP really
+ is (.IP and .TP are really just two ways of doing the same thing).
+ Change below made this relevant.
+ * doc/re_syntax.n: Change some uses of .TP to .IP to work around bugs
+ in various *roff implementations. Also reworded the atom descriptions
+ slightly.
+
+2005-04-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (ExprSrandFunc): Replaced incursions into the
+ * generic/tclUtil.c (TclGetIntForIndex): intreps of numeric types with
+ simpler calls of Tcl_GetIntFromObj and Tcl_GetLongFromObj, now that
+ those routines are better behaved wrt shimmering. [Patch 1177219]
+
+2005-04-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclObj.c: Change in TclDecrRefCount and TclFreeObj, to speed
+ up the freeing of simple Tcl_Obj [Patch 1174551]
+
+2005-04-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: small opts in obj handling
+
+2005-04-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: converted a few function calls to macros.
+
+2005-04-01 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/ListObj.3:
+ * generic/tclBasic.c:
+ * generic/tclCmdIL.c:
+ * generic/tclConfig.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclListObj.c:
+ * generic/tclStubInit.c:
+ * generic/tclVar.c: Changed the internal representation of lists to
+ (a) reduce the malloc/free calls at list creation (from 2 to 1), (b)
+ reduce the cost of handling empty lists (we now never create a list
+ internal rep for them), (c) allow refcounting of the list internal rep.
+ The latter permits insuring that the pointers returned by
+ Tcl_ListObjGetElements remain valid even if the object shimmers away
+ from its original list type. This is [Patch 1158008]
+
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclObj.c:
+ * generic/tclStringObj.c:
+ (1) defined new internal macros for creating and setting frequently
+ used obj types (int,long, wideInt, double, string). Changed TEBC to use
+ eg 'TclNewIntObj(objPtr, i)' to avoid the function call in 'objPtr =
+ Tcl_NewIntObj(i)'
+ (2) ExecEnv now stores two Tcl_Obj* pointing to the constants "0" and
+ "1", for use by TEBC.
+ (3) slight reduction in cost of INST_START_CMD
+
+2005-03-31 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_JUMP_TRUE/FALSE): replaced "test and
+ branch" with "compute index into table"
+
+2005-03-30 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/FileSystem.3: Defined loadHandle argument. [Bug 1172401]
+
+2005-03-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tcl.m4, win/configure: do not require cygpath in macros to allow
+ msys alone as an alternative.
+
+2005-03-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.h: Move the TclInterpReady() declaration from
+ * generic/tclInt.h: tclCompile.h to tclInt.h. Should have been done
+ as part of the 1115904 bug fix on 2005-03-18.
+
+ * generic/tclThreadTest.c: Stop providing the phony package
+ "Thread 1.0" when the [::testthread] command is defined. It's never
+ used by anything, and conflicts with loading the real "Thread" package.
+
+2005-03-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c (TclCompileIncrCmd): Corrected checks for
+ immediate operand usage to permit leading space and sign characters.
+ Restores more efficient bytecode for [incr x -1] that got lost in the
+ CONST string reforms of Tcl 8.4. [Bug 1165671]
+
+ * generic/tclBasic.c (Tcl_EvalEx): Restored recursion limit
+ * generic/tclParse.c (TclSubstTokens): testing in nested command
+ * tests/basic.test (basic-46.4): substitutions within direct
+ * tests/parse.test (parse-19.*): script evaluation (Tcl_EvalEx)
+ that got lost in the parser reforms of Tcl 8.1. Added tests for correct
+ behavior. [Bug 1115904]
+
+2005-03-15 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c:
+ * win/tclWinFile.c:
+ * tests/winFCMd.test: fix to 'file pathtype' and 'file norm' failures
+ on reserved filenames like 'COM1:', etc.
+
+2005-03-15 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * unix/tcl.m4: Updated the OpenBSD configuration and regenerated
+ * unix/configure: the configure script.
+
+2005-03-15 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged with HEAD.
+
+ * generic/tclBasic.c (many):
+ * generic/tclCompExpr.c (CompileMathFuncCall):
+ * generic/tclCompile.h:
+ * generic/tclExecute.c (many):
+ * generic/tclParseExpr.c (ParsePrimaryExpr):
+ * tests/compExpr-old.test:
+ * tests/compExpr.test:
+ * tests/compile.test:
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/for.test:
+ * tests/parseExpr.test: Initial implementation of TIP #232.
+
+ * generic/tclObj.c (Tcl_DbNewBignumObj): Fixed typo that broke
+ --enable-symbols=mem build
+ * tests/binary.test (binary-40.3, binary-40.6): Corrected tests to
+ allow NaN(7ffffffffffff).
+
+2005-03-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: fixed INST_PUSH1's debugging code (wrong obj
+ ref passed to TRACE_WITH_OBJ).
+
+2005-03-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: fixed INST_RETURN's stack effect in
+ tclInstructionTable (-1 instead of -2)
+
+2005-03-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c: removed debugging line
+
+2005-03-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c (TclCheckInterpTraces): Corrected mistaken cast
+ of ClientData to (TraceCommandInfo *) when not warranted. Thanks to
+ Yuri Victorovich for the report. [Bug 1153871]
+ * generic/tcl.h: Moved flag values TCL_TRACE_ENTER_EXEC and
+ * generic/tclInt.h: TCL_TRACE_LEAVE_EXEC from public interface into
+ private. Should be used only by internal workings of execution traces.
+
+2005-03-09 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged from HEAD.
+
+ * doc/PrintDbl.3:
+ * doc/tclVars.n: Documented new semantics for tcl_precision.
+ * generic/tclExecute.c (Tcl_ExecuteByteCode): Removed the check for
+ division-by-zero on IEEE-754 machines.
+ * generic/tclUtil.c (Tcl_PrintDouble): Corrected bug where numbers in
+ the range [1e-4 .. 1.) were printed incorrectly.
+ * tests/compExpr-old.test (compExpr-old-11.13): Revised test case for
+ division by zero.
+ * tests/expr-old.test (expr-34.11, expr-34.12): Revised test cases for
+ overflow in pow() to deal with infinities.
+ * tests/expr.test (expr-11.13, expr-29.1, expr-29.2): Revised test case
+ for division by zero and for underflow on input conversions.
+ * tests/parseExpr.test (parseExpr-16.11): Revised test case for
+ overflow on input conversion.
+ * tests/string.test (string-6.38 deleted): Removed test case for
+ underflow on input conversion, which is no longer an error.
+ * tests/util.test (util-10.*): Added test case for the bug in tclUtil.c
+
+2005-03-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/makefile.vc: clarify necessary defined vars that can come from
+ MSVC or the Platform SDK.
+
+2005-03-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/string.n: Minor typo. [Bug 1158247]
+
+2005-03-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: new peephole optimisation for INST_PUSH1; fixed
+ the peephole opt in INST_POP so that it is not used when
+ TCL_COMPILE_DEBUG is defined.
+
+2005-03-04 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclCmdMZ.c: Changed [scan] to treat out-of-range floating
+ point values as infinities and zeroes.
+ * generic/tclExecute.c: Changed [expr] to be permissive about
+ infinities, allowing them to propagate.
+ * generic/tclGet.c: Changed Tcl_GetDouble to be permissive about
+ over/underflow.
+ * generic/tclObj.c: Changed SetDoubleFromAny to be permissive about
+ over/underflow.
+ * generic/tclParseExpr.c: Made [expr] permissive about input numbers
+ out of range.
+
+2005-03-03 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclInt.h:
+ * generic/tclStrToD.c (Tcl_DoubleDigits, TclFormatNaN):
+ * generic/tclUtil.c (Tcl_PrintDouble): Changed the signature of
+ TclDoubleDigits so that it accepts a pointer to the signum of the
+ argument, and returns the signum via that pointer. Added very hacky
+ code to handle IEEE signed zeroes in Tcl_DoubleDigits. (It can't be
+ done other than as a hack until C9x; C89 simply doesn't deal with the
+ concept of -0.0). Added output conversion of tagged NaN values.
+ * generic/tclBinary.c (FormatNumber): Changed to allow [binary format]
+ to handle NaN.
+ * tests/binary.test (binary-60.1): Added a quick-n-dirty test to make
+ sure that NaN's can be scanned and formatted.
+ * generic/tclParseExpr.c (GetLexeme, ParseMaxDoubleLength): Modified so
+ that tagged NaN (e.g., NaN(DEADBEEF)) can be recognized.
+
+2005-03-02 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged with HEAD as of 2005-02-23.
+
+ * generic/tclExecute.c: Broadened test for NaN to work on Windows.
+ * generic/tclInt.h:
+ * generic/tclStrToD.c (Tcl_DoubleDigits):
+ * generic/tclUtil.c (Tcl_PrintDouble, TclPrecTraceProc): Added
+ Tcl_DoubleDigits to format 'double' numbers with the minimum number of
+ significant digits to yield correct rounding. Modified tcl_precision
+ to accept 0 as a precision (meaning "minimum digits"), and made 0 the
+ default. [TIP #132]
+ * generic/tclObj.c: Made NaN's throw an error in Tcl_GetDoubleFromObj.
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc: Added libtommath/bn_mp_init_set.c to the build.
+ * libtommath/tommath.h (mp_iseven): Fixed a bug that caused zero to
+ test 'odd'.
+ * generic/tommath.h: Regenerated.
+ * tests/binary.test:
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/scan.test: Corrected a number of tests that depended on
+ tcl_precision, and removed the {eformat} condition from tests that no
+ longer require it.
+ * tests/util.test: Corrected a number of tests that depended on
+ tcl_precision, and removed the {eformat} condition from tests that no
+ longer require it. Added a series of tests for correct rounding in
+ Tcl_PrintDouble. [TIP #132].
+
+2005-03-01 David N. Welton <davidw@dedasys.com>
+
+ * doc/CrtSlave.3: Changed to Tcl_Object to Tcl_Obj in the man page.
+
+2005-02-24 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Better use of [glob -types] to avoid
+ * tests/tcltest.test: failed attempts to [source] a directory, and
+ similar matters. Thanks to "mpettigr". [Bug 1119798]
+
+ * library/tcltest/pkgIndex.tcl: Bump to tcltest 2.2.8
+ * unix/Makefile.in:
+ * win/Makefile.in:
+
+2005-02-23 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/CrtChannel.3 (THREADACTIONPROC): Formatting fix. [Bug 1149605]
+
+2005-02-17 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinFCmd.c (TraverseWinTree): use wcslen on wchar, not
+ Tcl_UniCharLen.
+
+2005-02-16 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/variable.n: fix for [Bug 1124160], variables are detected by
+ [info vars] but not by [info locals].
+
+2005-02-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in: remove SHLIB_LD_FLAGS (only for AIX, inlined into
+ * unix/tcl.m4: SHLIB_LD). Combine AIX-* and AIX-5 branches in
+ * unix/configure: SC_CONFIG_CFLAGS. Correct gcc builds for AIX-4+
+ and HP-UX-11. autoconf-2.59 gen'd.
+
+2005-02-11 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/basic.test (basic-26.3): new test
+
+2005-02-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_EvalObjEx):
+ * tests/basic.test (basic-26.2): preserve the arguments passed to TEOV
+ in the pure-list branch, in case the list shimmers away. Fix for [Bug
+ 1119369], reported by Peter MacDonald.
+
+2005-02-10 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: fix for test failures introduced on 2005-01-17
+ [Bug 1119092]
+
+2005-02-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/binary.n: Made the documentation of sign bit masking and [binary
+ scan] consistent. [Bug 1117017]
+
+2005-02-08 David N. Welton <davidw@dedasys.com>
+
+ * doc/CrtChannel.3: Typo: return->returns.
+
+2005-02-06 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclStrToD.c (TclStrToD, SafeLdExp): Added code to manage the
+ FPU precision on gcc+x86. Enabled fast conversion of floats with small
+ exponents now that precision is correct.
+ * tests/expr.test: Corrected test for the smallest representible value
+ to the right IEEE values.
+
+2005-02-06 David N. Welton <davidw@dedasys.com>
+
+ * doc/Thread.3: One-word grammar fix.
+
+2005-02-05 David N. Welton <davidw@dedasys.com>
+
+ * doc/Thread.3: Fixed sentence describing flags for Tcl_CreateThread.
+
+ * doc/FileSystem.3: Cleaned up typo in Tcl_FSNewNativePath
+ documentation.
+
+ * generic/tclPathObj.c: Cleaned up typo in comment.
+
+2005-02-03 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+
+ * generic/tclStrToD.c (TclStrToD, RefineResult, SafeLdExp): Added code
+ to ensure that 'ldexp' is never called with a value that will underflow
+ * tests/expr.test: Added tests for the smallest representible value,
+ and rounding between it and zero. (The tests reflect current
+ behaviour; plan is to change the specification of Tcl so that input
+ conversion of doubles underflows silently.)
+
+2005-02-02 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclProc.c (TclInitCompiledLocals): Add check for type of the
+ framePtr->procPtr->bodyPtr passed to TclInitCompiledLocals and panic if
+ it is not the correct type. If the body of the proc is not of the
+ compiled byte code type then the code will crash. This was discovered
+ while tracking down a crash in Itcl, that crash is fixed by Itcl patch
+ 1115085.
+
+2005-02-01 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Merged with HEAD as of today.
+
+ * generic/tclInt.decls: Changed numbers of new stubs to resolve a
+ conflict.
+ * generic/tclInt.h: Added new TclStrToD routine that replaces the
+ native 'strtod' throughout Tcl.
+ * generic/tclCmdMZ (Tcl_StringObjCmd):
+ * generic/tclGet.c (Tcl_GetDouble):
+ * generic/tclObj.c (SetBooleanFromAny, SetDoubleFromAny):
+ * generic/tclParseExpr.c (GetLexeme):
+ * generic/tclScan.c (Tcl_ScanObjCmd): Replaced all uses of the native
+ 'strtod' with a TclStrToD routine that performs correct rounding and
+ handles denormals.
+ * generic/tclStrToD.c: (new file)
+ New scanning function for extracting 'double' from a string that rounds
+ correctly, and handles denormals and infinities.
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc:
+ Added tclStrToD.c and the tommath routines that support it.
+
+ These changes represent a partial implementation of TIP #132. Output
+ conversion of floating point numbers, and proper handling of infinities
+ within expressions, still need to be addressed.
+
+2005-02-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclCompEvalObj): Removed stray statement left
+ behind in prior code reorganization.
+
+2005-01-31 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/configure: autoconf-2.57
+
+2005-01-30 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/configure.in: Restored two double-evals that were removed in the
+ DBGX purge; these are still needed on some platforms to account for
+ TCL_TRIM_DOTS. [Bug 1112654]
+
+ * unix/configure: NOT REGENERATED: only have autoconf 2.59 here, need
+ to find someone with autoconf 2.57.
+
+2005-01-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/configure, unix/tcl.m4: add solaris 64-bit gcc build support.
+ [Bug 1021871]
+
+2005-01-28 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/expr-old.test (expr-old-37.2): Added test for [Bug 1109484]
+
+2005-01-27 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclBasic.c (Tcl_ExprBoolean, Tcl_ExprDouble)
+ (Tcl_ExprLong): Fix to recognize Tcl_WideInt type. [Bug 1109484]
+
+2005-01-26 Andreas Kupries <andreask@activestate.com>
+
+ TIP#218 IMPLEMENTATION
+
+ * generic/tclDecls.h: Regenerated from tcl.decls.
+ * generic/tclStubInit.c:
+
+ * doc/CrtChannel.3: Documentation of extended API,
+ * generic/tcl.decls: extended testsuite, and
+ * generic/tcl.h: implementation. Removal of old
+ * generic/tclIO.c: driver-specific TclpCut/Splice
+ * generic/tclInt.h: functions. Replaced with generic
+ * tests/io.test: thread-action calls through the
+ * unix/tclUnixChan.c: new hooks. Update of all builtin
+ * unix/tclUnixPipe.c: channel drivers to version 4.
+ * unix/tclUnixSock.c: Windows drivers extended to
+ * win/tclWinChan.c: manage thread state in a thread
+ * win/tclWinConsole.c: action handler.
+ * win/tclWinPipe.c:
+ * win/tclWinSerial.c:
+ * win/tclWinSock.c:
+
+2005-01-25 Don Porter <dgp@users.sourceforge.net>
+
+ * library/auto.tcl: Updated [auto_reset] to clear auto-loaded
+ commands in namespaces other than :: and to clear auto-loaded commands
+ that do not happen to be procs. [Bug 1101670]
+ ***POTENTIAL INCOMPATIBILITY***
+
+2005-01-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4 (Darwin): fixed bug with static build linking to dynamic
+ library in /usr/lib etc instead of linking to static library earlier in
+ search path. [Bug 956908] Removed obsolete references to Rhapsody.
+ * unix/configure: autoconf-2.57
+
+2005-01-21 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclStubInit.c: Regenerated the stubs support code from the
+ * generic/tclDecls.h: modified tcl.decls (TIP #233, see below).
+
+ * doc/GetTime.3: Implemented TIP #233, i.e. the
+ * generic/tcl.decls: 'Virtualization of Tcl's Sense of Time'.
+ * generic/tcl.h: Declared, implemented, and documented the
+ * generic/tclInt.h: specified new API functions. Moved the
+ * unix/tclUnixEvent.c: native (OS) access to time information
+ * unix/tclUnixNotfy.c: into standard handler functions. Inserted
+ * unix/tclUnixTime.c: hooks calling on the handlers where native
+ * win/tclWinNotify.c: access was done before, and where scaling
+ * win/tclWinTime.c: between domains (real/virtual) is required.
+
+2005-01-21 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclThread.c: Typo police. Fixed some nits
+ * generic/tclCmdAH.c: in header comments of functions.
+ * generic/tclBasic.c: (Missing --).
+ * generic/tclFileName.c:
+
+2005-01-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/FileSystem.3: Add missing ARGUMENTS section definitions for
+ arguments to Tcl_FSLink. [Bug 1106272]
+
+2005-01-21 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch]
+
+ * unix/Makefile.in: Updated Makefile to build libtommath on Unix as
+ well as Windows. [Bug 1106865]
+
+ * generic/tclTestObj.c (TestbignumobjCmd): Silenced a compiler warning
+ about a mismatched 'const'.
+
+2005-01-20 Kevin B. Kenny <kennykb@acm.org>
+
+ [kennykb-numerics-branch] Development checkpoint.
+
+ * compat/strtoll.c: Reverted to HEAD.
+ * compat/strtoull.c:
+ * doc/Ensemble.3:
+ * generic/tclBasic.c:
+ * generic/tclCmdIL.c:
+ * generic/tclNamesp.c:
+ * generic/tclPathObj.c:
+ * generic/tclPort.h:
+ * unix/configure:
+ * unix/configure.in:
+ * unix/tcl.m4:
+ * win/configure:
+ * win/configure.in:
+ * win/rules.vc:
+ * win/tcl.m4:
+
+ * generic/tcl.h: Added declarations for bignum types, and for a
+ 'bignumValue' in the Tcl_Obj structure.
+ * generic/tclInt.h: Added declarations of interface procedures for
+ memory allocation in libtommath.
+
+ * generic/tcl.decls: Added new interface to bignum objects.
+ * generic/tclInt.decls: Added internal stubs for bignum routines used
+ by the test code in tclTestObj.c.
+
+ * generic/tclDecls/h: Regen.
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.h:
+
+ * tools/fix_tommath_h.tcl: (New file) Script to edit
+ libtommath/tommath.h and produce generic/tommath.h so that storage
+ classes, allocation routines, and data types conform to Tcl's
+ conventions.
+ * generic/tommath.h: (New file) Generated by the above.
+
+ * generic/tclTomMath.h: (New file) Additional declarations to be
+ included in tommath.h when building Tcl.
+
+ * generic/tclTomMathInterface.c: (New file) Small 'glue' routines
+ adapting tommath's API to Tcl.
+
+ * libtommath/bn_fast_s_mp_mul_digs.c:
+ * libtommath/bn_mp_mul_d.c:
+ * libtommath/bn_mp_read_radix.c:
+ * libtommath/tommath.h: Applied suggested changes from Tom St Denis
+ that correct an off-by-one error in single-digit multiplication
+ (leading to a pointer smash if uncorrected) and change the string
+ argument to 'mp_read_radix' from 'char*' to 'const char*'.
+
+ * libtommath/bn_mp_radix_size.c: Local patch to ensure that sufficient
+ memory is requested even if the number has a single digit.
+
+ * libtommath/bn_mp_read_radix.c: Local patch to return MP_VAL if the
+ input string contains an invalid character.
+
+ * generic/tclObj.c: Added accessor functions for bignums.
+ * generic/tclTestObj.c: Added a 'testbignumobj' command to exercise the
+ accessor functions for bignums.
+
+ * win/Makefile.in: Added rules for making libtommath.
+
+2005-01-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ TIP#235 IMPLEMENTATION
+
+ * doc/Ensemble.3: Documentation for the new public API.
+ * generic/tclNamesp.c (Tcl_CreateEnsemble,...): Rename of
+ * generic/tcl.decls: existing API into TIPped form.
+
+2005-01-19 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/tclWinChan.c (FileCloseProc): Invoke TclpCutFileChannel() to
+ remove a FileInfo from the thread local list before deallocating it.
+ This should have been done via an earlier call to Tcl_CutChannel, but I
+ was running into a crash in the next call to Tcl_CutChannel during the
+ I/O finalization stage.
+
+2005-01-18 Kevin Kenny <kennykb@acm.org>
+
+ * library/tzdata/GMT+0:
+ * library/tzdata/GMT-0:
+ * library/tzdata/GMT0:
+ * library/tzdata/Greenwich:
+ * library/tzdata/Navajo:
+ * library/tzdata/Universal:
+ * library/tzdata/Zulu:
+ * library/tzdata/America/Asuncion:
+ * library/tzdata/America/Rosario:
+ * library/tzdata/Asia/Jerusalem:
+ * library/tzdata/Brazil/Acre:
+ Routine update per Olson's tzdata2005c. Removed links to links
+ (Greenwich in several aliases; Navajo; Acre). Updated Paraguayan DST
+ rules and "best guess" at this year's Israeli rules.
+
+2005-01-17 Vince Darley <vincentdarley@users.sourceforge.net>
+
+ * generic/tclFileName.c: fix for glob failure on Windows shares [Bug
+ 1100542].
+
+ * doc/pkgMkIndex.n: added documentation that 'pkg_mkIndex -lazy' is not
+ a good idea. [Bug 1101678]
+
+2005-01-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tests/compile.test (compile-17.1): Document known issue with binding
+ time of compiled command interpretations in [expr].
+
+ * generic/tclIOUtil.c (TclFSFileAttrIndex): New helper function so that
+ we don't need to hard-code attribute indexes. [Bug 1100671]
+
+2005-01-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/string.n: Removed the term 'set' from the documentation of the
+ [string trim] commands, as it caused confusion.
+
+2005-01-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tcl.m4 (SC_PATH_{TCL,TK}CONFIG): Added code to detect the case
+ when the --with-tcl/--with-tk arguments point to the config scripts
+ themselves and not their directory. If this is the case, they now
+ complain but keep working. [FRQ 951247]
+ * unix/configure: autoconf-2.57
+
+2005-01-10 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/Makefile.in, unix/configure.in, unix/tcl.m4,
+ * unix/tclConfig.sh.in, unix/dltest/Makefile.in:
+ Remove ${DBGX}, ${TCL_DBGX} from Tcl build system [Patch 1081595].
+ * unix/configure: regenerated
+
+2005-01-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixFCmd.c (TclUnixCopyFile): Convert u_int to unsigned to
+ make clashes with types in standard C headers less of a problem. [Bug
+ 1098829]
+
+2005-01-09 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/tclUnixThrd.c, unix/tclUnixPort.h: Remove readdir_r() and
+ related #ifdeffery (see [Bug 1095909]).
+ * unix/tcl.m4, unix/tclConfig.h.in: Don't check for HAVE_READDIR_R.
+ * unix/configure: Regenerated.
+
+2005-01-06 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * library/http/http.tcl (http::mapReply): Significant performance
+ enhancement by using [string map] instead of [regsub]/[subst], and
+ update version requirement to Tcl8.4. [Bug 1020491]
+
+2005-01-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/lsearch.n, doc/re_syntax.n: Convert to other form of emacs mode
+ control comment to prevent problems with old versions of man. [Bug
+ 1085127]
+
+2005-01-05 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/winDde.test: Fixed broken test result.
+
+2005-01-05 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInt.h, generic/tclPort.h: Move the #include of tclConfig.h
+ *first* before any reference to tcl.h so that the build configuration
+ is loaded before the first reference to any system headers. Issue
+ reported by Art Haas on tcl-core.
+
+2005-01-04 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/fCmd.test (fCmd-18.10): Added notNetworkFilesystem constraint.
+ [Bug 456665]
+
+ ******************************************************************
+ *** 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" ***
+ ******************************************************************
diff --git a/ChangeLog.2007 b/ChangeLog.2007
new file mode 100644
index 0000000..5995956
--- /dev/null
+++ b/ChangeLog.2007
@@ -0,0 +1,5921 @@
+2007-12-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n: Clarified meaning of dictionary values following
+ discussion on comp.lang.tcl.
+
+2007-12-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c: More [lsort] data handling streamlines. The
+ function MergeSort is gone, essentially inlined into Tcl_LsortObjCmd.
+ It is not a straight inlining, two loops over all lists elements where
+ merged in the process: the linked list elements are now built and
+ merged into the temporary sublists in the same pass.
+
+2007-12-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c: More [lsort] data handling streamlines. Extra
+ mem reqs of latest patches removed, restored to previous mem profile.
+ Improved -unique handling, now eliminating repeated elems immediately
+ instead of marking them to avoid reinsertion at the end.
+
+2007-12-23 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): TCL_REG_NOSUB cannot
+ * tests/regexp.test (regexp-22.2): be used because it
+ * tests/regexpComp.test: [Bug 1857126] disallows backrefs.
+
+2007-12-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c: Speed patch for lsort. [Patch 1856994]
+
+2007-12-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd, Tcl_LsearchObjCmd): Avoid
+ calling SelectObjFromSublist when there are no sublists.
+
+2007-12-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Preallocate a listObj of
+ sufficient length for the sorted list instead of growing it. Second
+ commit replaces calls to Tcl_ListObjAppenElement with direct access to
+ the internal rep.
+
+2007-12-19 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5.0 TAGGED FOR RELEASE ***
+
+ * changes: Updated for 8.5.0 release.
+
+2007-12-19 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): update switch -regexp
+ * tests/switch.test-14.*: compilation to pass
+ the cflags to INST_REGEXP (changed on 12-07). Added tests for switch
+ -regexp compilation (need more). [Bug 1854399]
+
+2007-12-18 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.0 release.
+
+2007-12-18 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/regguts.h, generic/regc_color.c, generic/regc_nfa.c:
+ Fixes for problems created when processing regular expressions that
+ generate very large automata. An enormous number of thanks to Will
+ Drewry <wad_at_google.com>, Tavis Ormandy <taviso_at_google.com>,
+ and Tom Lane <tgl_at_sss.pgh.pa.us> from the Postgresql crowd for
+ their help in tracking these problems down. [Bug 1810264]
+
+2007-12-17 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.0 release.
+
+2007-12-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclAlloc.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclThreadAlloc.c: Fix alignment for memory returned by
+ TclStackAlloc; insure that all memory allocators align to 16-byte
+ boundaries on 64 bit platforms [Bug 1851832, 1851524]
+
+2007-12-14 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIOUtil.c (FsAddMountsToGlobResult): fix the tail
+ conversion of vfs mounts. [Bug 1602539]
+
+ * win/README: updated notes
+
+2007-12-14 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/winFile.test: Fixed tests for win2k with long machine name
+
+2007-12-14 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/nmakehlp.c: Support compilation with MSVC9 for AMD64.
+ * win/makefile.vc:
+
+2007-12-13 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/trace.n: Clarified documentation of enterstep and leavestep
+ traces, including adding example. [Bug 614282, 1701540, 1755984]
+
+2007-12-12 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/IntObj.3: Update docs for the Tcl_GetBignumAndClearObj() ->
+ Tcl_TakeBignumFromObj() revision [TIP 298]. Added docs for the
+ Tcl_InitBignumFromDouble() routine. [Bug 1446971]
+
+ * changes: Updated for 8.5.0 release.
+
+2007-12-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclUtil.c (TclReToGlob): reduce escapes in conversion
+ when not necessary
+
+ * generic/tclInt.decls: move TclByteArrayMatch and TclReToGlob
+ * generic/tclIntDecls.h: to tclInt.h from stubs.
+ * generic/tclStubInit.c: Add flags var to TclByteArrayMatch for
+ * generic/tclInt.h: future extensibility
+ * generic/tcl.h: define TCL_MATCH_EXACT doc for Tcl_StringCaseMatch.
+ * doc/StrMatch.3: It is compatible with existing usage.
+ * generic/tclExecute.c (INST_STR_MATCH): flag for TclByteArrayMatch
+ * generic/tclUtil.c (TclByteArrayMatch, TclStringMatchObj):
+ * generic/tclRegexp.c (Tcl_RegExpExecObj):
+ * generic/tclCmdMZ.c (StringMatchCmd): Use TclStringMatchObj
+ * tests/string.test (11.9.* 11.10.*): more tests
+
+2007-12-10 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/string.n, doc/UniCharIsAlpha.3: Fix markup errors.
+ * doc/CrtCommand.3, doc/CrtMathFnc.3, doc/FileSystem.3,
+ * doc/GetStdChan.3, doc/OpenFileChnl.3, doc/SetChanErr.3,
+ * doc/eval.n, doc/filename.n: Consistency: Move "KEYWORDS" section
+ after "SEE ALSO".
+
+2007-12-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * tools/genStubs.tcl: fix numerous issues handling 'macosx',
+ 'aqua' or 'x11' entries interleaved
+ with 'unix' entries [Bug 1834288]; add
+ genStubs::export command
+ [Tk FR 1716117]; cleanup formatting.
+
+ * generic/tcl.decls: use new genstubs 'export' command to
+ * generic/tclInt.decls: mark exported symbols not in stubs
+ * generic/tclTomMath.decls: table [Tk FR 1716117]; cleanup
+ formatting.
+
+ * generic/tclDecls.h: regen with new genStubs.tcl.
+ * generic/tclIntDecls.h: [Bug 1834288]
+ * generic/tclIntPlatDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclStubInit.c:
+
+2007-12-09 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/io.test, tests/chanio.test (io-73.1): Make sure to invalidate
+ * generic/tclIO.c (SetChannelFromAny): internal rep only after
+ validating channel rep. [Bug 1847044]
+
+2007-12-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/expr.n, doc/mathop.n: Improved the documentation of the
+ operators. [Bug 1823622]
+
+ * generic/tclBasic.c (builtInCmds): Corrected list of hidden and
+ * doc/interp.n (SAFE INTERPRETERS): exposed commands so that the
+ documentation and reality now match. [Bug 1662436]
+
+2007-12-07 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclExecute.c (TclExecuteByteCode INST_REGEXP):
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): Pass correct RE
+ compile flags at compile time, and use TCL_REG_NOSUB.
+
+ * generic/tclIOCmd.c (FinalizeIOCmdTSD, Tcl_PutsObjCmd): cache
+ stdout channel object for [puts $str] calls.
+
+2007-12-06 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Remove mention of dead comp.lang.tcl.announce
+ newsgroup. [Bug 1846433]
+
+ * unix/README: Mention the stub library created by `make` and warn
+ about the effect of embedded paths in the installed binaries.
+ Thanks to Larry Virden. [Bug 1794084]
+
+ * doc/AddErrInfo.3: Documentation for the new routines in TIP 270.
+ * doc/Interp.3:
+ * doc/StringObj.3:
+
+2007-12-06 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/namespace.n: Documentation for zero-argument form of
+ [namespace import] (TIP 261) [Bug 1596416]
+
+2007-12-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclInt.h: add TclGetChannelFromObj decl
+ (TclMatchIsTrivial): simplify TclMatchIsTrivial to remove ] check.
+
+2007-12-06 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+
+ * generic/tclBasic.c (Tcl_CreateInterp): Simplify the setting up of
+ * generic/tclIOCmd.c (TclInitChanCmd): the [chan] ensemble. This
+ * library/init.tcl: gets rid of quite a bit of
+ code and makes it possible to understand the whole with less effort.
+
+ * generic/tclCompCmds.c (TclCompileEnsemble): Ensure that the right
+ number of tokens are copied. [Bug 1845320]
+
+ * generic/tclNamesp.c (TclMakeEnsemble): Added missing release of a
+ DString. [Bug 1845397]
+
+2007-12-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclIO.h: Create Tcl_Obj for Tcl channels to reduce
+ * generic/tclIO.c: overhead in lookup by Tcl_GetChannel. New
+ * generic/tclIOCmd.c: TclGetChannelFromObj for internal use.
+ * generic/tclIO.c (WriteBytes, WriteChars): add opt check to avoid
+ EOL translation when not linebuffered or using lf. [Bug 1845092]
+
+2007-12-05 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/stack.test: made the tests for stack overflow not care
+ about which mechanism caused the error (interp's recursion limit
+ or C-stack depth detector).
+
+2007-12-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/configure, win/tcl.m4 (LIBS_GUI): mingw needs -lole32
+ -loleaut32 but not msvc for Tk's [send]. [Bug 1844749]
+
+2007-12-05 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): Prevent shimmering crash
+ when -exact and -integer/-real are mixed. [Bug 1844789]
+
+2007-12-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixChan.c (CreateSocketAddress): Add extra #ifdef-fery to
+ make code compile on BSD 5. [Bug 1618235, again]
+
+2007-12-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Bump tcltest to version 2.3.0 so that
+ * library/tcltest/pkgIndex.tcl: we release a stable tcltest with a
+ * unix/Makefile.in: stable Tcl.
+ * win/Makefile.in:
+
+2007-12-03 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/configure, win/tcl.m4 (LIBS_GUI): remove ole32.lib oleaut32.lib
+
+2007-12-03 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Adjusted the [switch]
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd): command so that when
+ passed two arguments, no check for options are performed. This is OK
+ since in the two-arg case, detecting an option would definitely lead
+ to a syntax error. [Patch 1836519]
+
+2007-11-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/makefile.vc: add ws2_32.lib to baselibs
+ * win/configure, win/tcl.m4: add ws2_32.lib / -lws2_32 to build.
+ * win/tclWinSock.c: remove dyn loading of winsock, assume that it is
+ always available now.
+
+2007-11-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclWinSock.c (InitializeHostName): Correct error in
+ buffer length tracking. After gethostname() writes into a buffer,
+ convert only the written string to internal encoding, not the whole
+ buffer.
+
+2007-11-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclConfig.c: Corrected failure of the [::foo::pkgconfig]
+ command to clean up registered configuration data when the query
+ command is deleted from the interp. [Bug 983501]
+
+ * generic/tclNamesp.c (Tcl_SetEnsembleMappingDict): Added checks
+ that the dict value passed in is in the format required to make the
+ internals of ensembles work. [Bug 1436096]
+
+ * generic/tclIO.c: Simplify test and improve accuracy of error
+ message in latest changes.
+
+2007-11-28 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclIO.c: -eofchar must support no eofchar.
+
+2007-11-27 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: remove unneeded call in Tcl_CreateInterp, add
+ comments.
+
+2007-11-27 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinSock.c: Add mising encoding conversion of the [info
+ hostname] value from the system encoding to Tcl's internal encoding.
+
+ * doc/chan.n: "Fix" the limitation on channel -eofchar
+ * doc/fconfigure.n: values to single byte characters by
+ * generic/tclIO.c: documenting it and making it fail loudly.
+ * tests/chan.test: Thanks to Stuart Cassoff for contributing the
+ fix. [Bug 800753]
+
+2007-11-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * unix/tclUnixInit.c:
+ * unix/tclUnixThrd.c: Fix stack checking via workaround for bug in
+ glibc's pthread_attr_get_np, patch from [Bug 1815573]. Many thanks to
+ Sergei Golovan (aka Teo) for detecting the bug and helping diagnose
+ and develop the fix.
+
+2007-11-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileDictAppendCmd): Fix bug in [dict
+ append] compiler which caused strange stack corruption. [Bug 1837392]
+
+2007-11-23 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c: Fixed a problem with reflected channels. 'chan
+ postevent' is defined to work only from within the interpreter
+ containing the handler command. Sensible, we want only handler
+ commands to use it. It identifies the channel by handle. The channel
+ moves to a different interpreter or thread. The interpreter containing
+ the handler command doesn't know the channel any longer. 'chan
+ postevent' fails, not finding the channel any longer. Uhm.
+
+ Fixed by creating a second per-interpreter channel table, just for
+ reflected channels, where each interpreter remembers for which
+ reflected channels it has the handler command. This info does not move
+ with the channel itself. The table is updated by 'chan create', and
+ used by 'chan postevent'.
+
+ * tests/ioCmd.test: Updated the testsuite.
+
+2007-11-23 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclVar.c (Tcl_ArrayObjCmd): handle the right data for
+ * tests/var.test (var-14.2): [array names $var -glob $ptn]
+
+2007-11-23 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdMZ.c (String*Cmd, TclInitStringCmd): Rebuilt [string]
+ * generic/tclCompCmds.c (TclCompileString*Cmd): as an ensemble.
+
+2007-11-22 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (Dict*Cmd,TclInitDictCmd): Rebuilt the [dict]
+ * generic/tclCompCmds.c (TclCompileDict*Cmd): command as an ensemble.
+
+2007-11-22 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Rewrote the [string] and
+ * generic/tclDictObj.c (Tcl_DictObjCmd): [dict] implementations to be
+ ready for conversion to ensembles.
+
+ * tests/string.test (string-12.22): Flag shimmering bug found in
+ [string range].
+
+2007-11-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileEnsemble): Rewrote the ensemble
+ compiler to remove many of the limitations. Can now compile scripts
+ that use unique prefixes of subcommands, and which have mappings of a
+ command to multiple words (provided the first is a compilable command
+ of course).
+
+2007-11-21 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclNamesp.c (TclMakeEnsemble): Factor out the code to set up
+ a core ensemble from a table of information about subcommands, ready
+ for reuse within the core.
+
+ * generic/various: Start to return more useful Error codes, currently
+ mainly on assorted lookup failures.
+
+2007-11-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c: Changed the underlying implementation of the
+ hash table used in dictionaries to additionally keep all entries in
+ the hash table in a linked list, which is only ever added to at the
+ end. This makes iteration over all entries in the dictionary in
+ key insertion order a trivial operation, and so cleans up a great deal
+ of complexity relating to dictionary representation and stability of
+ iteration order.
+
+ ***POTENTIAL INCOMPATIBILITY***
+ For any code that depended on the (strange) old iteration order.
+
+ * generic/tclConfig.c (QueryConfigObjCmd): Correct usage of
+ Tcl_WrongNumArgs.
+
+2007-11-19 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5b3 TAGGED FOR RELEASE ***
+
+ * README: Bump version number to 8.5b3.
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+ * changes: Updated for 8.5b3 release.
+
+2007-11-19 Kevin Kenny <kennykb@users.sourceforge.net>
+
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/America/Campo_Grande:
+ * library/tzdata/America/Caracas:
+ * library/tzdata/America/Cuiaba:
+ * library/tzdata/America/Havana:
+ * library/tzdata/America/Sao_Paulo:
+ * library/tzdata/Asia/Damascus:
+ * library/tzdata/Asia/Gaza:
+ * library/tzdata/Asia/Tehran: Olson's tzdata2007i imported.
+
+2007-11-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclExecuteByteCode:INST_EXIST_*): Fix read
+ traces not firing on non-existent array elements. [Bug 1833522]
+
+2007-11-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdIL.c (TclInitInfoCmd): Rename the implementation
+ commands for [info] to be something more "expected".
+
+ * generic/tclCompCmds.c (TclCompileInfoExistsCmd): Compiler for the
+ [info exists] subcommand.
+ (TclCompileEnsemble): Cleaned up version of ensemble compiler that was
+ in TclCompileInfoCmd, but which is now much more generally applicable.
+
+ * generic/tclInt.h (ENSEMBLE_COMPILE): Added flag to allow for cleaner
+ turning on and off of ensemble bytecode compilation.
+
+ * generic/tclCompile.c (TclCompileScript): Add the cmdPtr to the list
+ of arguments passed to command compilers.
+
+2007-11-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/regc_nfa.c: Fixed infinite loop in the regexp compiler.
+ [Bug 1810038]
+
+ * generic/regc_nfa.c: Corrected looping logic in fixempties() to
+ avoid wasting time walking a list of dead states. [Bug 1832612]
+
+2007-11-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclNamesp.c (NamespaceEnsembleCmd): Must pass a non-NULL
+ interp to Tcl_SetEnsemble* functions.
+
+ * doc/re_syntax.n: Try to make this easier to read. It's still a very
+ difficult manual page!
+
+ * unix/tcl.m4 (SC_CONFIG_CFLAGS): Allow people to turn off the -rpath
+ option to their linker if they so desire. This is a configuration only
+ recommended for (some) vendors. Relates to [Patch 1231022].
+
+2007-11-15 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWin32Dll.c: Prefer UINT_PTR to DWORD_PTR when casting
+ pointers to integer types for greater portability. [Bug 1831253]
+
+2007-11-15 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add new chanio.test.
+ * macosx/Tcl.xcode/project.pbxproj:
+
+2007-11-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompile.c (TclCompileScript): Ensure that we get our
+ count in our INST_START_CMD calls right, even when there's a failure
+ to compile a command directly.
+
+ * generic/tclNamesp.c (Tcl_SetEnsembleSubcommandList)
+ (Tcl_SetEnsembleMappingDict): Special code to make sure that
+ * generic/tclCmdIL.c (TclInitInfoCmd): [info exists] is compiled
+ right while not allowing changes to the ensemble to cause havok.
+
+ * generic/tclCompCmds.c (TclCompileInfoCmd): Simple compiler for the
+ [info] command that only handles [info exists].
+
+ * generic/tclExecute.c (TclExecuteByteCode:INST_EXIST_*): New
+ instructions to allow the testing of whether a variable exists.
+
+2007-11-14 Andreas Kupries <andreask@activestate.com>
+
+ * tests/chanio.test: New file. This is essentially a duplicate of
+ 'io.test', with all channel commands converted to their 'chan xxx'
+ notation.
+ * tests/io.test: Fixed typo in test description.
+
+2007-11-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/regc*.c: Eliminate multi-char collating element code
+ completely. Simplifies the code quite a bit. If people still want the
+ full code, it will remain on the 8.4 branch. [Bug 1831425]
+
+2007-11-13 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCompCmds.c (TclCompileRegexpCmd): clean up comments, only
+ free dstring on OK from TclReToGlob.
+ (TclCompileSwitchCmd): simplify TclReToGlob usage.
+
+2007-11-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/regc*.c: #ifdef/comment out the code that deals with
+ multi-character collating elements, which have never been supported.
+ Cuts the memory consumption of the RE compiler. [Bug 1831425]
+
+2007-11-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd, TclCompileRegexpCmd):
+ Extend [switch] compiler to handle regular expressions as long as
+ things are not too complex. Fix [regexp] compiler so that non-trivial
+ literal regexps get fed to INST_REGEXP.
+
+ * doc/mathop.n: Clarify definitions of some operations.
+
+2007-11-13 Miguel Sofer <msofer@users.sf.net>
+
+ * unix/tclUnixInit.c: the TCL_NO_STACK_CHECK was being incorrectly
+ undefined here; this should be set (or not) in the compile options, it
+ is used elsewhere and needs to be consistent.
+
+2007-11-13 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * unix/tcl.m4: Added autoconf goo to detect and make use of
+ * unix/configure.in: getaddrinfo and friends.
+ * unix/configure: (regenerated)
+
+2007-11-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixCompat.c (TclpGetHostByName): The six-argument form of
+ getaddressbyname_r() uses the fifth argument to indicate whether the
+ lookup succeeded or not on at least one platform. [Bug 1618235]
+
+2007-11-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/regcomp.c: Convert optst() from expensive no-op to a
+ cheap no-op.
+
+2007-11-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixChan.c (CreateSocketAddress): Rewrote to use the
+ thread-safe version of gethostbyname() by forward-porting the code
+ used in 8.4, and added rudimentary support for getaddrinfo() (not
+ enabled by default, as no autoconf-ery written). Part of fix for [Bug
+ 1618235].
+
+2007-11-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclGet.c (Tcl_Get, Tcl_GetInt): revert use of TclGet* macros
+ due to compiler warning. These cases won't save time either.
+
+ * generic/tclUtil.c (TclReToGlob): add more comments, set interp
+ result if specified on error.
+
+2007-11-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: New macro TclResetResult, new iPtr
+ * generic/tclExecute.c: flag bit INTERP_RESULT_UNCLEAN:
+ * generic/tclInt.h: shortcut for Tcl_ResetResult for the
+ * generic/tclProc.c: "normal" case: TCL_OK, no return
+ * generic/tclResult.c: options, no errorCode nor errorInfo,
+ * generic/tclStubLib.c: return at normal level. [Patch
+ * generic/tclUtil.c: 1830184]
+
+ THIS PATCH WAS REVERTED: initial (mis)measurements overstated the
+ perfomance wins, which turn out to be tiny. Not worth the
+ complication.
+
+2007-11-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclCompCmds.c, generic/tclCompile.c, generic/tclCompile.h:
+ * generic/tclExecute.c, generic/tclInt.decls, generic/tclIntDecls.h:
+ * generic/tclRegexp.c, generic/tclRegexp.h: Add INST_REGEXP and fully
+ * generic/tclStubInit.c, generic/tclUtil.c: compiled [regexp] for the
+ * tests/regexpComp.test: [Bug 1830166] simple cases. Also added
+ TclReToGlob function to convert RE to glob patterns and use these in
+ the possible cases.
+
+2007-11-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclResult.c (ResetObjResult): clarify the logic.
+
+ * generic/tclBasic.c: Increased usage of macros to detect
+ * generic/tclBinary.c: and take advantage of objTypes. Added
+ * generic/tclClock.c: macros TclGet(Int|Long)FromObj,
+ * generic/tclCmdAH.c: TclGetIntForIndexM & TclListObjLength,
+ * generic/tclCmdIL.c: modified TclListObjGetElements.
+ * generic/tclCmdMZ.c:
+ * generic/tclCompCmds.c: The TclGetInt* macros are only a
+ * generic/tclCompExpr.c: shortcut on platforms where 'long' is
+ * generic/tclCompile.c: 'int'; it may be worthwhile to extend
+ * generic/tclDictObj.c: their functionality to other cases.
+ * generic/tclExecute.c:
+ * generic/tclGet.c: As this patch touches many files it
+ * generic/tclIO.c: has been recorded as [Patch 1830038]
+ * generic/tclIOCmd.c: in order to facilitate reviewing.
+ * generic/tclIOGT.c:
+ * generic/tclIndexObj.c:
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+ * generic/tclListObj.c:
+ * generic/tclLiteral.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclParse.c:
+ * generic/tclProc.c:
+ * generic/tclRegexp.c:
+ * generic/tclResult.c:
+ * generic/tclScan.c:
+ * generic/tclStringObj.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+
+2007-11-11 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixTime.c (TclpWideClicksToNanoseconds): Fix issues with
+ * generic/tclInt.h: int64_t overflow.
+
+ * generic/tclBasic.c: Fix stack check failure case if stack grows up
+ * unix/tclUnixInit.c: Simplify non-crosscompiled case.
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2007-11-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Fast path for INST_LIST_INDEX when the index
+ is not a list.
+
+ * generic/tclBasic.c:
+ * unix/configure.in:
+ * unix/tclUnixInit.c: Detect stack grwoth direction at compile time,
+ only fall to runtime detection when crosscompiling.
+
+ * unix/configure: autoconf 2.61
+
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * tests/interp.test:
+ * unix/tclUnixInit.c:
+ * win/tclWin32Dll.c: Restore simpler behaviour for stack checking, not
+ adaptive to stack size changes after a thread is launched. Consensus
+ is that "nobody does that", and so it is not worth the cost. Improved
+ failure comments (mistachkin).
+
+2007-11-10 Kevin Kenny <kennykb@acm.org>
+
+ * win/tclWin32Dll.c: Rewrote the Windows stack checking algorithm to
+ use information from VirtualQuery to determine the bound of the stack.
+ This change fixes a bug where the guard page of the stack was never
+ restored after an overflow. It also eliminates a nasty piece of
+ assembly code for structured exception handling on mingw. It
+ introduces an assumption that the stack is a single memory arena
+ returned from VirtualAlloc, but the code in MSVCRT makes the same
+ assumption, so it should be fairly safe.
+
+2007-11-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * unix/tclUnixInit.c:
+ * unix/tclUnixPort.h:
+ * win/tclWin32Dll.c: Modify the stack checking algorithm to recheck in
+ case of failure. The working assumptions are now that (a) a thread's
+ stack is never moved, and (b) a thread's stack can grow but not
+ shrink. Port to windows - could be more efficient, but is already
+ cheaper than it was.
+
+2007-11-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclResult.c (ResetObjResult): new shortcut.
+
+ * generic/tclAsync.c:
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclUnixInit.c:
+ * generic/tclUnixPort.h: New fields in interp (ekeko!) to cache TSD
+ data that is accessed at each command invocation, access macros to
+ replace Tcl_AsyncReady and TclpCheckStackSpace by much faster variants
+ [Patch 1829248]
+
+2007-11-09 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclInt.decls, generic/tclIntDecls.h: Use unsigned char for
+ * generic/tclExecute.c, generic/tclUtil.c: TclByteArrayMatch and
+ don't allow a nocase option. [Bug 1828296]
+ For INST_STR_MATCH, ignore pattern type for TclByteArrayMatch case.
+
+ * generic/tclBinary.c (Tcl_GetByteArrayFromObj): check type before
+ func jump (perf).
+
+2007-11-07 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclStubInit.c: Added TclByteArrayMatch
+ * generic/tclInt.decls: for efficient glob
+ * generic/tclIntDecls.h: matching of ByteArray
+ * generic/tclUtil.c (TclByteArrayMatch): Tcl_Objs, used in
+ * generic/tclExecute.c (TclExecuteByteCode): INST_STR_MATCH. [Bug
+ 1827996]
+
+ * generic/tclIO.c (TclGetsObjBinary): Add an efficient binary path for
+ [gets].
+ (DoWriteChars): Special case for 1-byte channel write.
+
+2007-11-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclEncoding.c: Version of the embedded iso8859-1 encoding
+ handler that is faster (functions to do the encoding know exactly what
+ they're doing instead of pulling it from a table, though the table
+ itself has to be retained for use by shift encodings that depend on
+ iso8859-1). [Patch 1826906], committing for dkf.
+
+2007-11-05 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclConfig.c (Tcl_RegisterConfig): Modified to not extend the
+ config database if the encoding provided by the user is not found
+ (venc == NULL). Scripts expecting the data will error out, however we
+ neither crash nor provide bogus information. See [Bug 983509] for more
+ discussion.
+
+ * unix/tclUnixChan.c (TtyGetOptionProc): Accepted [Patch 1823576]
+ provided by Stuart Cassof <stwo@users.sourceforge.net>. The patch adds
+ the necessary utf/external conversions to the handling of the
+ arguments of option -xchar which will allow the use of \0 and similar
+ characters.
+
+2007-11-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclTest.c (TestSetCmd2):
+ * generic/tclVar.c (TclObjLookupVarEx):
+ * tests/set.test (set-5.1): Fix error branch when array name looks
+ like array element (code not normally exercised).
+
+2007-11-01 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/tcltk-man2html.tcl (output-directive): Convert .DS/.DE pairs
+ into tables since that is now all that they are used for.
+
+ * doc/RegExp.3: Clarified documentation of RE flags. [Bug 1167840]
+
+ * doc/refchan.n: Adjust internal name to be consistent with the file
+ name for reduced user confusion. After comment by Dan Steffen.
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd, UniCharIsAscii): Remember, the
+ NUL character is in ASCII too. [Bug 1808258]
+
+ * doc/file.n: Clarified use of [file normalize]. [Bug 1185154]
+
+2007-10-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump version number to 8.5b2.1 to distinguish
+ * library/init.tcl: CVS development snapshots from the 8.5b2
+ * unix/configure.in: release.
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+2007-10-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/expr.n, doc/mathfunc.n: Improve documentation to try to make
+ clearer what is going on.
+
+ * doc/interp.n: Shorten the basic descriptive text for some interp
+ subcommands so Solaris nroff doesn't truncate them. [Bug 1822268]
+
+2007-10-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (output-widget-options): Enhance the HTML
+ generator so that it can produce multi-line option descriptions.
+
+2007-10-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclUtil.c (Tcl_ConcatObj): optimise for some of the
+ concatenees being empty objs. [Bug 1447328]
+
+2007-10-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclEncoding.c (TclInitEncodingSubsystem): Hard code the
+ iso8859-1 encoding, as it's needed for more than just text (especially
+ binary encodings...) Note that other encodings rely on the encoding
+ being a table encoding (!) so we can't use more efficient encoding
+ mapping functions.
+
+2007-10-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/regc_lex.c (lexescape): Close off one of the problems
+ mentioned in [Bug 1810264].
+
+2007-10-27 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_FindCommand): insure that FQ command names
+ are searched from the global namespace, ie, bypassing resolvers of the
+ current namespace. [Bug 1114355]
+
+ * doc/apply.n: fixed example [Bug 1811791]
+ * doc/namespace.n: improved example [Bug 1788984]
+ * doc/AddErrInfo.3: typo [Bug 1715087]
+ * doc/CrtMathFnc.3: fixed Tcl_ListMathFuncs entry [Bug 1672219]
+
+ * generic/tclCompile.h:
+ * generic/tclInt.h: moved declaration of TclSetCmdNameObj from
+ tclCompile.h to tclInt.h, reverting linker [Bug 1821159] caused by
+ commit of 2007-10-11 (both I and gcc missed one dep).
+
+ * generic/tclVar.c: try to preserve Tcl_Objs when doing variable
+ lookups by name, partially addressing [Bug 1793601].
+
+2007-10-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl (make-man-pages, htmlize-text)
+ (process-text): Make the man->HTML scraper work better.
+
+2007-10-26 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5b2 TAGGED FOR RELEASE ***
+
+ * changes: Updated for 8.5b2 release.
+
+ * doc/*.1: Revert doc changes that broke
+ * doc/*.3: `make html` so we can get the release
+ * doc/*.n: out the door.
+
+ * README: Bump version number to 8.5b2.
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+2007-10-26 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/man2help2.tcl, tools/man2tcl.c: Made some of the tooling code
+ to do man->other formats work better with current manpage set. Long
+ way still to go.
+
+2007-10-25 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclThread.c: Added TclpMasterLock/Unlock arround calls to
+ ForgetSyncObject in Tcl_MutexFinalize and Tcl_ConditionFinalize to
+ prevent from garbling the internal lists that track sync objects. [Bug
+ 1726873]
+
+2007-10-24 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/man2html2.tcl (macro): Added support for converting the new
+ macros into HTML.
+
+ * doc/man.macros (QW,PQ,QR,MT): New macros that hide the ugly mess
+ needed to get proper GOOBE quoting in the manual pages.
+ * doc/*.n, doc/*.3, doc/*.1: Lots of changes to take advantage of the
+ new macros.
+
+2007-10-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: Fix comments.
+ * generic/tclExecute.c:
+
+2007-10-18 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/mkdepend.tcl: sort the dep list for a more humanly readable
+ output.
+
+2007-10-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclResult.c (TclMergeReturnOptions): Make sure any -code
+ values get pulled out of the dictionary, even if they are integer
+ valued.
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): Added code to more
+ optimally compile [return -level 0 $x] to "push $x". [RFE 1794073]
+
+ * compat/tmpnam.c (removed): The routine tmpnam() is no longer
+ * unix/Makefile.in: called by Tcl source code. Remove autogoo the
+ * unix/configure.in: supplied a replacement version on systems
+ * win/tcl.dsp: where the routine was not available. [RFE
+ 1811848]
+
+ * unix/configure: autoconf-2.59
+
+ * generic/tcl.h: Remove TCL_LL_MODIFIER_SIZE. [RFE 1811837]
+
+2007-10-17 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/mkdepend.tcl: Improved defense from malformed object list
+ infile.
+
+2007-10-17 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tools/man2html2.tcl: Convert .DS/.DE into HTML tables, not
+ preformatted text.
+
+2007-10-17 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclCompExpr.c: Moved a misplaced declaration that blocked
+ compilation on VC++.
+ * generic/tclExecute.c: Silenced several VC++ compiler warnings about
+ converting 'long' to 'unsigned short'.
+
+2007-10-16 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: removed old dependency cruft that is no longer
+ needed.
+
+2007-10-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOCmd.c: Revise [open] so that it interprets leading
+ zero strings passed as the "permissions" argument as octal numbers,
+ even if Tcl itself no longer parses integers in that way.
+
+ * unix/tclUnixFCmd.c: Revise the "-permissions" [file attribute] so
+ that it interprets leading zero strings as octal numbers, even if Tcl
+ itself no longer parses integers in that way.
+
+ * generic/tclCompExpr.c: Corrections to code that produces
+ * generic/tclUtil.c: extended "bad octal" error messages.
+
+ * tests/cmdAH.test: Test revisions so that tests pass whether or
+ * tests/cmdIL.test: not Tcl parses leading zero strings as octal.
+ * tests/compExpr-old.test:
+ * tests/compExpr.test:
+ * tests/compile.test:
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/incr.test:
+ * tests/io.test:
+ * tests/lindex.test:
+ * tests/link.test:
+ * tests/mathop.test:
+ * tests/parseExpr.test:
+ * tests/set.test:
+ * tests/string.test:
+ * tests/stringComp.test:
+
+2007-10-15 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/mkdepend.tcl: Produces usable output. Include path problem
+ * win/makefile.vc: fixed. Never fight city hall when it comes to
+ levels of quoting issues.
+
+2007-10-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c (Tcl_ParseBraces): fix for possible read after
+ the end of buffer. [Bug 1813528] (Joe Mistachkin)
+
+2007-10-14 David Gravereaux <davygrvy@pobox.com>
+
+ * tools/mkdepend.tcl (new): Initial stab at generating automatic
+ * win/makefile.vc: dependencies.
+
+2007-10-12 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Mine all version information from headers.
+ * win/rules.vc: Sync tcl and tk and bring extension versions
+ * win/nmakehlp.c: closer together. Try and avoid using tclsh to do
+ substitutions as we may cross compile.
+ * win/coffbase.txt: Added offsets for snack dlls.
+
+2007-10-11 David Gravereaux <davygrvy@pobox.com>
+
+ * win/makefile.vc: Fixed my bad spelling mistakes from years back.
+ Dedependency, duh! Rather funny.
+
+2007-10-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c: Correct [string is (wide)integer] failure
+ * tests/string.test: to report correct failindex values for
+ non-decimal integer strings. [Bug 1805887]
+
+ * compat/strtoll.c (removed): The routines strtoll() and strtoull()
+ * compat/strtoull.c (removed): are no longer called by the Tcl source
+ * generic/tcl.h: code. (Their functionality has been replaced
+ * unix/Makefile.in: by TclParseNumber().) Remove outdated comments
+ * unix/configure.in: and mountains of configury autogoo that
+ * unix/tclUnixPort.h: allegedly support the mythical systems where
+ * win/Makefile.in: these routines might not have been available.
+ * win/makefile.bc:
+ * win/makefile.vc:
+ * win/tclWinPort.h:
+
+ * unix/configure: autoconf-2.59
+
+2007-10-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclObj.c: remove superfluous #include of tclCompile.h
+
+2007-10-08 George Peter Staplin <georgeps@xmission.com>
+
+ * doc/Hash.3: Correct the valid usage of the flags member for the
+ Tcl_HashKeyType. It should be 0 or more of the flags mentioned.
+
+2007-10-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tcl.h (Tcl_DecrRefCount): Update change from 2006-05-29 to
+ make macro more warning-robust in unbraced if code.
+
+2007-10-02 Don Porter <dgp@users.sourceforge.net>
+
+ [core-stabilizer-branch]
+
+ * README: Bump version number to 8.5.0
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+2007-10-02 Andreas Kupries <andreask@activestate.com>
+
+ * library/tclIndex: Added 'tcl::tm::path' to the tclIndex. This fixes
+ [Bug 1806422] reported by Don Porter.
+
+2007-09-25 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclProc.c (Tcl_DisassembleObjCmd): Define a command,
+ ::tcl::unsupported::disassemble, which can disassemble procedures,
+ lambdas and general scripts.
+ * generic/tclCompile.c (TclDisassembleByteCodeObj): Split apart the
+ code to print disassemblies of bytecode so that there is reusable code
+ that spits it out in a Tcl_Obj and then that code is used when doing
+ tracing.
+
+2007-09-20 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5b1 TAGGED FOR RELEASE ***
+
+ * changes: updates for 8.5b1 release.
+
+2007-09-19 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bump version number to 8.5b1
+ * generic/tcl.h: Merge from core-stabilizer-branch.
+ * library/init.tcl: Stabilizing toward 8.5b1 release now done on
+ * tools/tcl.wse.in: the HEAD. core-stabilizer-branch is now
+ * unix/configure.in: suspended.
+ * unix/tcl.spec:
+ * win/configure.in:
+
+2007-09-19 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclStubLib.: Replaced isdigit with internal implementation.
+
+2007-09-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStubLib.c: Remove C library calls from Tcl_InitStubs() so
+ * win/makefile.vc: that we don't need the C library linked in to
+ libtclStub.
+
+2007-09-17 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Add crt flags for tclStubLib now it uses C-library
+ functions.
+
+2007-09-17 Joe English <jenglish@users.sourceforge.net>
+
+ * tcl.m4: use '${CC} -shared' instead of 'ld -Bshareable' to build
+ shared libraries on current NetBSDs. [Bug 1749251]
+ * unix/configure: regenerated (autoconf-2.59).
+
+2007-09-17 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Update `make dist` so that tclDTrace.d is
+ included in the source code distribution.
+
+ * generic/tcl.h: Revised Tcl_InitStubs() to restore Tcl 8.4
+ * generic/tclPkg.c: source compatibility with callers of
+ * generic/tclStubLib.c: Tcl_InitStubs(interp, TCL_VERSION, 1). [Bug
+ 1578344]
+
+2007-09-17 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclTrace.c (Tcl_TraceObjCmd, TraceExecutionObjCmd)
+ (TraceCommandObjCmd, TraceVariableObjCmd): Generate literal values
+ * generic/tclNamesp.c (NamespaceCodeCmd): more efficiently using
+ * generic/tclFCmd.c (CopyRenameOneFile): TclNewLiteralStringObj
+ * generic/tclEvent.c (TclSetBgErrorHandler): macro.
+
+2007-09-15 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: replace all direct references to compiler by ${CC} to
+ enable CC overriding at configure & make time; run
+ check for visibility "hidden" with all compilers;
+ quoting fixes from TEA tcl.m4.
+ (SunOS-5.1x): replace direct use of '/usr/ccs/bin/ld' in SHLIB_LD by
+ 'cc' compiler driver.
+ * unix/configure: autoconf-2.59
+
+2007-09-14 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclBasic.c (Tcl_CreateObjCommand): Only invalidate along the
+ namespace path once; that is enough. [Bug 1519940]
+
+2007-09-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclDTrace.d (new file): Add DTrace provider for Tcl; allows
+ * generic/tclCompile.h: tracing of proc and command entry &
+ * generic/tclBasic.c: return, bytecode execution, object
+ * generic/tclExecute.c: allocation and more; with
+ * generic/tclInt.h: essentially zero cost when tracing
+ * generic/tclObj.c: is inactive; enable with
+ * generic/tclProc.c: --enable-dtrace configure arg
+ * unix/Makefile.in: (disabled by default, will only
+ * unix/configure.in: enable if DTrace is present). [Patch
+ 1793984]
+
+ * macosx/GNUmakefile: Enable DTrace support.
+ * macosx/Tcl-Common.xcconfig:
+ * macosx/Tcl.xcodeproj/project.pbxproj:
+
+ * generic/tclCmdIL.c: Factor out core of InfoFrameCmd() into
+ internal TclInfoFrame() for use by DTrace
+ probes.
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2007-09-12 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Perform missing updates of the tcltest Tcl
+ * win/Makefile.in: Module installed filename that should have
+ been part of the bump to tcltest 2.3b1. Thanks Larry Virden.
+
+2007-09-12 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc, win/rules.vc, win/nmakehlp.c: Use nmakehlp to
+ substitute values for tclConfig.sh (helps cross-compiling).
+
+2007-09-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: Accept underscores and colons in
+ * library/tcltest/pkgIndex.tcl: constraint names. Properly handle
+ constraint expressions that return non-numeric boolean results like
+ "false". Bump to tcltest 2.3b1. [Bug 1772989; RFE 1071322]
+ * tests/info.test: Disable fragile tests.
+
+ * doc/package.n: Restored the functioning of [package require
+ * generic/tclPkg.c: -exact] to be compatible with Tcl 8.4. [Bug
+ * tests/pkg.test: 1578344]
+
+2007-09-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileDictCmd-update):
+ * generic/tclCompile.c (tclInstructionTable):
+ * generic/tclExecute.c (INST_DICT_UPDATE_END): fix stack management in
+ compiled [dict update]. [Bug 1786481]
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Scripts that were precompiled on earlier versions of 8.5 and use [dict
+ update] will crash. Workaround: recompile.
+
+2007-09-11 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c: Corrected an off-by-one error in the setting
+ of MaxBaseWide for certain powers. [Bug 1767293 - problem reported in
+ comments when bug was reopened]
+
+2007-09-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclLink.c (Tcl_UpdateLinkedVar): guard against var being
+ unlinked. [Bug 1740631] (maros)
+
+2007-09-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: fix tclInstructionTable entry for
+ dictUpdateEnd
+
+ * generic/tclExecute.c: remove unneeded setting of 'cleanup' variable
+ before jumping to checkForCatch.
+
+2007-09-10 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/package.n: Restored the document parallel syntax of the
+ * generic/tclPkg.c: [package present] and [package require]
+ * tests/pkg.test: commands. [Bug 1723675]
+
+2007-09-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Removed the "nsName" Tcl_ObjType from the
+ * generic/tclNamesp.c: registered set. Revised the management of the
+ * generic/tclObj.c: intrep of that Tcl_ObjType. Revised the
+ * tests/obj.test: TclGetNamespaceFromObj() routine to return
+ TCL_ERROR and write a consistent error message when a namespace is not
+ found. [Bug 1588842. Patch 1686862]
+
+ ***POTENTIAL INCOMPATIBILITY***
+ For callers of Tcl_GetObjType() on the name "nsName".
+
+ * generic/tclExecute.c: Update TclGetNamespaceFromObj() callers.
+ * generic/tclProc.c:
+
+ * tests/apply.test: Updated tests to expect new consistent
+ * tests/namespace-old.test: error message when a namespace is not
+ * tests/namespace.test: found.
+ * tests/upvar.test:
+
+ * generic/tclCompCmds.c: Use the new INST_REVERSE instruction
+ * tests/mathop.test: to correct the compiled versions of math
+ operator commands. [Bug 1724437]
+
+ * generic/tclCompile.c: New bytecode instruction INST_REVERSE to
+ * generic/tclCompile.h: reverse the order of N items at the top of
+ * generic/tclExecute.c: stack.
+
+ * generic/tclCompCmds.c (TclCompilePowOpCmd): Make a separate
+ routine to compile ** to account for its different associativity.
+
+2007-09-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (Tcl_SetVar2, TclPtrSetVar): [Bug 1710710] fixed
+ correctly, reverted fix of 2007-05-01.
+
+2007-09-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictUpdateCmd, DictWithCmd): Plug a hole that
+ * generic/tclExecute.c (TEBC,INST_DICT_UPDATE_END): allowed a careful
+ * tests/dict.test (dict-21.16,21.17,22.11): attacker to craft a dict
+ containing a recursive link to itself, violating one of Tcl's
+ fundamental datatype assumptions and causing a stack crash when the
+ dict was converted to a string. [Bug 1786481]
+
+2007-09-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEvent.c ([::tcl::Bgerror]): Corrections to Tcl's
+ * tests/event.test: default [interp bgerror] handler so that when
+ it falls back to a hidden [bgerror] in a safe interp, it gets the
+ right error context data. [Bug 1790274]
+
+2007-09-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (TclInitCompiledLocals): the refCount of resolved
+ variables was being managed without checking if they were Var or
+ VarInHash: itcl [Bug 1790184]
+
+2007-09-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclResult.c (Tcl_GetReturnOptions): Take care that a
+ * tests/init.test: non-TCL_ERROR code doesn't cause existing
+ -errorinfo, -errorcode, and -errorline entries to be omitted.
+ * generic/tclEvent.c: With -errorInfo no longer lost, generate more
+ complete ::errorInfo when calling [bgerror] after a non-TCL_ERROR
+ background exception.
+
+2007-09-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInterp.c (Tcl_Init): Removed constraint on ability
+ to define a custom [tclInit] before calling Tcl_Init(). Until now the
+ custom command had to be a proc. Now it can be any command.
+
+ * generic/tclInt.decls: New internal routine TclBackgroundException()
+ * generic/tclEvent.c: that for the first time permits non-TCL_ERROR
+ exceptions to trigger [interp bgerror] handling. Closes a gap in TIP
+ 221. When falling back to [bgerror] (which is designed only to handle
+ TCL_ERROR), convert exceptions into errors complaining about the
+ exception.
+
+ * generic/tclInterp.c: Convert Tcl_BackgroundError() callers to call
+ * generic/tclIO.c: TclBackgroundException().
+ * generic/tclIOCmd.c:
+ * generic/tclTimer.c:
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2007-09-06 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcode/project.pbxproj: discontinue unmaintained support
+ * macosx/Tcl.xcode/default.pbxuser: for Xcode 1.5; replace by Xcode2
+ project for use on Tiger (with Tcl.xcodeproj to be used on Leopard).
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: updates for Xcode 2.5 and 3.0.
+ * macosx/Tcl.xcodeproj/default.pbxuser:
+ * macosx/Tcl.xcode/project.pbxproj:
+ * macosx/Tcl.xcode/default.pbxuser:
+ * macosx/Tcl-Common.xcconfig:
+
+ * macosx/README: document project changes.
+
+2007-09-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Removed support for the unmaintained
+ * generic/tclExecute.c: -DTCL_GENERIC_ONLY configuration. [Bug
+ * unix/Makefile.in: 1264623]
+
+2007-09-04 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: It's unreliable to count on the release
+ manager to remember to `make genstubs` before `make dist`. Let the
+ Makefile remember the dependency for us.
+
+ * unix/Makefile.in: Corrections to `make dist` dependencies to be
+ sure that macosx/configure gets generated whenever it does not exist.
+
+2007-09-03 Kevin B, Kenny <kennykb@acm.org>
+
+ * library/tzdata/Africa/Cairo:
+ * library/tzdata/America/Grand_Turk:
+ * library/tzdata/America/Port-au-Prince:
+ * library/tzdata/America/Indiana/Petersburg:
+ * library/tzdata/America/Indiana/Tell_City:
+ * library/tzdata/America/Indiana/Vincennes:
+ * library/tzdata/Antarctica/McMurdo:
+ * library/tzdata/Australia/Adelaide:
+ * library/tzdata/Australia/Broken_Hill:
+ * library/tzdata/Australia/Currie:
+ * library/tzdata/Australia/Hobart:
+ * library/tzdata/Australia/Lord_Howe:
+ * library/tzdata/Australia/Melbourne:
+ * library/tzdata/Australia/Sydney:
+ * library/tzdata/Pacific/Auckland:
+ * library/tzdata/Pacific/Chatham: Olson's tzdata2007g.
+
+ * generic/tclListObj.c (TclLindexFlat):
+ * tests/lindex.test (lindex-17.[01]): Added code to detect the error
+ when a script does [lindex {} end foo]; an overaggressive optimisation
+ caused this call to return an empty object rather than an error.
+
+2007-09-03 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclObj.c (TclInitObjSubsystem): restore registration of the
+ "wideInt" Tcl_ObjType for compatibility with 8.4 extensions that
+ access the tclWideIntType Tcl_ObjType; add setFromAnyProc for
+ tclWideIntType.
+
+2007-09-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/lsearch.n: Added note that order of results with the -all option
+ is that of the input list. It always was, but this makes it crystal.
+
+2007-08-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c: Added fflush() calls following all callers of
+ * generic/tclExecute.c: TclPrintByteCodeObj() so that tcl_traceCompile
+ output is less likely to get mangled when writes to stdout interleave
+ with other code.
+
+2007-08-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Use a table lookup in ParseLexeme() to
+ determine lexemes with single-byte representations.
+
+ * generic/tclBasic.c: Used unions to better clarify overloading of
+ * generic/tclCompExpr.c: the fields of the OpCmdInfo and
+ * generic/tclCompile.h: TclOpCmdClientData structs.
+
+2007-08-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Call TclCompileSyntaxError() when
+ expression syntax errors are found when compiling expressions. With
+ this in place, convert TclCompileExpr to return void, since there's no
+ longer any need to report TCL_ERROR.
+ * generic/tclCompile.c: Update callers.
+ * generic/tclExecute.c:
+
+ * generic/tclCompCmds.c: New routine TclCompileSyntaxError()
+ * generic/tclCompile.h: to directly compile bytecodes that report a
+ * generic/tclCompile.c: syntax error, rather than (ab)use a call to
+ TclCompileReturnCmd. Also, undo the most recent commit that papered
+ over some issues with that (ab)use. New routine produces a new opcode
+ INST_SYNTAX, which is a minor variation of INST_RETURN_IMM. Also a bit
+ of constification.
+
+ * generic/tclCompile.c: Move the deallocation of local LiteralTable
+ * generic/tclCompExpr.c: entries into TclFreeCompileEnv().
+ * generic/tclExecute.c: Update callers.
+
+ * generic/tclCompExpr.c: Force numeric and boolean literals in
+ expressions to register with their intreps intact, even if that means
+ overwriting existing intreps in already registered literals.
+
+2007-08-25 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Added code to handle
+ * tests/expr.test (expr-23.48-53) integer exponentiation
+ that results in 32- and 64-bit integer results, avoiding calls to wide
+ integer exponentiation routines in this common case. [Bug 1767293]
+
+ * library/clock.tcl (ParseClockScanFormat): Modified code to allow
+ * tests/clock.test (clock-60.*): case-insensitive matching
+ of time zone and month names. [Bug 1781282]
+
+2007-08-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Register literals found in expressions
+ * tests/compExpr.test: to restore literal sharing. Preserve numeric
+ intreps when literals are created for the first time. Correct memleak
+ in ExecConstantExprTree() and add test for the leak.
+
+2007-08-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: replaced copy loop that tripped some compilers
+ with memmove. [Bug 1780870]
+
+2007-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl ([auto_load_index]): Delete stray "]" that created
+ an expr syntax error (masked by a [catch]).
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): Added crash protection
+ to handle callers other than TclCompileScript() failing to meet the
+ initialization assumptions of the TIP 280 code in CompileWord().
+
+ * generic/tclCompExpr.c: Suppress the attempt to convert to
+ numeric when pre-compiling a constant expresion indicates an error.
+
+2007-08-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TEBC): disable the new shortcut to frequent
+ INSTs for debug builds. REVERTED (collision with alternative fix)
+
+2007-08-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c: Corrected the logic of dropping the last
+ * tests/main.test: newline from an interactively typed command.
+ [Bug 1775878]
+
+2007-08-21 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/thread.test: thread-4.4: clear ::errorInfo in the thread as a
+ message is left here from init.tcl on windows due to no tcl_pkgPath.
+
+2007-08-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_SUB): fix usage of the new macro for
+ overflow detection in sums, adapt to subtraction. Lengthy comment
+ added.
+
+2007-08-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (Overflowing, TclIncrObj, TclExecuteByteCode):
+ Encapsulate Miguel's last change in a more mnemonic macro.
+
+2007-08-19 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: changed the check for overflow in sums,
+ reducing objsize, number of branches and cache misses (according to
+ cachegrind). Non-overflow for s=a+b:
+ previous
+ ((a >= 0 || b >= 0 || s < 0) && (s >= 0 || b < 0 || a < 0))
+ now
+ (((a^s) >= 0) || ((a^b) < 0))
+ This expresses: "a and s have the same sign or else a and b have
+ different sign".
+
+2007-08-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/interp.n (RESOURCE LIMITS): Added text to better explain why
+ time limits are described using absolute times. [Bug 1752148]
+
+2007-08-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: improved localVarNameType caching to leverage
+ the new availability of Tcl_Obj in variable names, avoiding string
+ comparisons to verify that the cached value is usable.
+
+ * generic/tclExecute.c: check the two most frequent instructions
+ before the switch. Reduces both runtime and obj size a tiny bit.
+
+2007-08-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Added a "constant" field to the OpNode
+ struct (again "free" due to alignment requirements) to mark those
+ subexpressions that are completely known at compile time. Enhanced
+ CompileExprTree() and its callers to precompute these constant
+ subexpressions at compile time. This resolves the issue raised in [Bug
+ 1564517].
+
+2007-08-15 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclIOUtil.c (TclGetOpenModeEx): Only set the O_APPEND flag
+ * tests/ioUtil.test (ioUtil-4.1): on a channel for the 'a'
+ mode and not for 'a+'. [Bug 1773127]
+
+2007-08-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_INVOKE*): peephole opt, do not get the
+ interp's result if it will be pushed/popped.
+
+2007-08-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Use fully qualified variable names for
+ * tests/thread.test: ::errorInfo and ::errorCode so that string
+ * tests/trace.test: reported to variable traces are fully
+ qualified in agreement with Tcl 8.4 operations.
+
+2007-08-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclLoadDyld.c: use dlfcn API on Mac OS X 10.4 and later; fix
+ issues with loading from memory on intel and 64bit; add debug messages
+
+ * tests/load.test: add test load-10.1 for loading from vfs.
+
+ * unix/dltest/pkga.c: whitespace & comment cleanup, remove
+ * unix/dltest/pkgb.c: unused pkgf.c.
+ * unix/dltest/pkgc.c:
+ * unix/dltest/pkge.c:
+ * unix/dltest/pkgf.c (removed):
+ * unix/dltest/pkgua.c:
+ * macosx/Tcl.xcodeproj/project.pbxproj:
+
+2007-08-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Provide DECACHE/CACHE protection to the
+ * tests/trace.test: Tcl_LogCommandInfo() call. [Bug 1773040]
+
+2007-08-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdMZ.c (Tcl_SplitObjCmd): use TclNewStringObj macro
+ instead of calling the function.
+
+ * generic/tcl_Obj.c (TclAllocateFreeObjects): remove unneeded memset
+ to 0 of all allocated objects.
+
+2007-08-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h: remove redundant ops in TclNewStringObj macro.
+
+2007-08-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h: fix the TclSetVarNamespaceVar macro, was causing a
+ leak.
+
+2007-08-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Revise CompileExprTree() to use the
+ OpNode mark field scheme of tree traversal. This eliminates the need
+ to use magic values in the left and right fields for that purpose.
+ Also stop abusing the left field within ParseExpr() to store the
+ number of arguments in a parsed function call. CompileExprTree() now
+ determines that for itself at compile time. Then reorder code to
+ eliminate duplication.
+
+2007-08-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (TclCreateProc): better comments on the required
+ varflag values when loading precompiled procs.
+
+ * generic/tclExecute.c (INST_STORE_ARRAY):
+ * tests/trace.test (trace-2.6): whole array write traces on compiled
+ local variables were not firing. [Bug 1770591]
+
+2007-08-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclProc.c (InitLocalCache): reference firstLocalPtr via
+ procPtr. codePtr->procPtr == NULL exposed by tbcload.
+
+2007-08-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrected failure to compile/link in the
+ -DNO_WIDE_TYPE configuration.
+
+ * generic/tclExecute.c: Corrected improper use of bignum arguments to
+ * tests/expr.test: *SHIFT operations. [Bug 1770224]
+
+2007-08-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h: remove comments refering to VAR_SCALAR, as that
+ flag bit does not exist any longer.
+ * generic/tclProc.c (InitCompiledLocals): removed optimisation for
+ non-resolved case, as the function is never called in that case.
+ Renamed the function to InitResolvedLocals to calrify the point.
+
+ * generic/tclInt.decls: Exporting via stubs to help xotcl adapt to
+ * generic/tclInt.h: VarReform.
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+2007-08-07 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclEnv.c: improve environ handling on Mac OS X (adapted
+ * unix/tclUnixPort.h: from Apple changes in Darwin tcl-64).
+
+ * unix/Makefile.in: add support for compile flags specific to
+ object files linked directly into executables.
+
+ * unix/configure.in (Darwin): only use -seg1addr flag when prebinding;
+ use -mdynamic-no-pic flag for object files linked directly into exes;
+ support overriding TCL_PACKAGE_PATH/TCL_MODULE_PATH in environment.
+
+ * unix/configure: autoconf-2.59
+
+2007-08-06 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/parseExpr.test: Update source file name of expr parser code.
+
+ * generic/tclCompExpr.c: Added a "mark" field to the OpNode
+ struct, which is used to guide tree traversal. This field costs
+ nothing since alignement requirements used the memory already.
+ Rewrote ConvertTreeToTokens() to use the new field, which permitted
+ consolidation of utility routines CopyTokens() and
+ GenerateTokensForLiteral().
+
+2007-08-06 Kevin B. Kenny <kennykb@users.sf.net>
+
+ * generic/tclGetDate.y: Added a cast to the definition of YYFREE to
+ silence compiler warnings.
+ * generic/tclDate.c: Regenerated
+ * win/tclWinTest.c: Added a cast to GetSecurityDescriptorDacl call
+ to silence compiler warnings.
+
+2007-08-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.decls: Exporting via stubs to help itcl adapt to
+ * generic/tclInt.h: VarReform. Added localCache initialization
+ * generic/tclIntDecls.h: to TclInitCompiledLocals (which only exists
+ * generic/tclProc.c: for itcl).
+ * generic/tclStubInit.c:
+ * generic/tclVar.c:
+
+2007-08-01 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * library/word.tcl: Rewrote for greater efficiency. [Bug 1764318]
+
+2007-08-01 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclInt.h: Added a TclOffset macro ala Tk_Offset to
+ * generic/tclVar.c: abstract out 'offsetof' which may not be
+ * generic/tclExceute.c: defined (eg: msvc6).
+
+2007-08-01 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclCleanupVar): fix [Bug 1765225], thx Larry
+ Virden.
+
+2007-07-31 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/Hash.3:
+ * generic/tclHash.c:
+ * generic/tclObj.c:
+ * generic/tclThreadStorage.c: (changes part of the patch below)
+ Stop Tcl_CreateHashVar from resetting hPtr->clientData to NULL after
+ calling the allocEntryProc for a custom table.
+
+ * generic/tcl.h:
+ * generic/tclBasic.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCompCmds.c:
+ * generic/tclCompile.c:
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclHash.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclLiteral.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * generic/tclThreadStorage.c:
+ * generic/tclTrace.c:
+ * generic/tclVar.c: VarReform [Patch 1750051]
+
+ *** POTENTIAL INCOMPATIBILITY *** (tclInt.h and tclCompile.h)
+ Extensions that access internals defined in tclInt.h and/or
+ tclCompile.h may lose both binary and source compatibility. The
+ relevant changes are:
+ 1. 'struct Var' is completely changed, all acceses to its internals
+ (either direct or via the TclSetVar* and TclIsVar* macros) will
+ malfunction. Var flag values and semantics changed too.
+ 2. 'struct Bytecode' has an additional field that has to be
+ initialised to NULL
+ 3. 'struct Namespace' is larger, as the varTable is now one pointer
+ larger than a Tcl_HashTable. Direct access to its fields will
+ malfunction.
+ 4. 'struct CallFrame' grew one more field (the second such growth with
+ respect to Tcl8.4).
+ 5. API change for the functions TclFindCompiledLocal, TclDeleteVars
+ and many internal functions in tclVar.c
+
+ Additionally, direct access to variable hash tables via the standard
+ Tcl_Hash* interface is to be considered as deprecated. It still works
+ in the present version, but will be broken by further specialisation
+ of these hash tables. This concerns especially the table of array
+ elements in an array, as well as the varTable field in the Namespace
+ struct.
+
+2007-07-31 Miguel Sofer <msofer@users.sf.net>
+
+ * unix/configure.in: allow use of 'inline' in Tcl sources. [Patch
+ * win/configure.in: 1754128]
+ * win/makefile.vc: Regen with autoconf 2.61
+
+2007-07-31 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tclUnixInit.c (TclpSetVariables): Use the thread-safe getpwuid
+ replacement to fill the tcl_platform(user) field as it is not subject
+ to spoofing. [Bug 681877]
+
+ * unix/tclUnixCompat.c: Simplify the #ifdef logic.
+
+ * unix/tclUnixChan.c (FileWatchProc): Fix test failures.
+
+2007-07-30 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tclUnixChan.c (SET_BITS, CLEAR_BITS): Added macros to make this
+ file clearer.
+
+2007-07-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TEOvI, GetCommandSource):
+ * generic/tclExecute.c (TEBC, TclGetSrcInfoForCmd):
+ * generic/tclInt.h:
+ * generic/tclTrace.c (TclCheck(Interp|Execution)Traces):
+ Removed the need for TEBC to inspect the command before calling TEOvI,
+ leveraging the TIP 280 infrastructure. Moved the generation of a
+ correct nul-terminated command string away from the trace code, back
+ into TEOvI/GetCommandSource.
+
+2007-07-20 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/platform.tcl: Fixed bug in 'platform::patterns'
+ * library/platform/pkgIndex.tcl: where identifiers not matching
+ * unix/Makefile.in: the special linux and solaris forms would not
+ * win/Makefile.in: get 'tcl' as an acceptable platform added to
+ * doc/platform.n: the result. Bumped package to version 1.0.3 and
+ * doc/platform_shell.n: updated documentation and Makefiles. Also
+ fixed bad version info in the documentation of platform::shell.
+
+2007-07-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c: In contexts where interp and parsePtr->interp
+ might be different, be sure to use the latter for error reporting.
+ Also pulled the interp argument back out of ParseTokens() since we
+ already had a parsePtr->interp to work with.
+
+2007-07-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Removed unused arguments and variables
+
+2007-07-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c (ParseExpr): While adding comments to
+ explain the operations of ParseExpr(), made significant revisions to
+ the code so it would be easier to explain, and in the process made the
+ code simpler and clearer as well.
+
+2007-07-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: More commentary.
+ * tests/parseExpr.test: Several tests of syntax error messages
+ to check that when expression substrings are truncated they leave
+ visible the context relevant to the reported error.
+
+2007-07-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Factored out, corrected, and commented
+ common code for reporting syntax errors in LEAF elements.
+
+2007-07-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileWhileCmd):
+ * generic/tclCompile.c (TclCompileScript):
+ Corrected faulty avoidance of INST_START_CMD when the first opcode in
+ a script is within a loop (as produced by 'while 1'), so that the
+ corresponding command is properly counted. [Bug 1752146]
+
+2007-07-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Added a "parseOnly" flag argument to
+ ParseExpr() to indicate whether the caller is Tcl_ParseExpr(), with an
+ end goal of filling a Tcl_Parse with Tcl_Tokens representing the
+ parsed expression, or TclCompileExpr() with the goal of compiling and
+ executing the expression. In the latter case, more aggressive
+ conversion of QUOTED and BRACED lexeme to literals is done. In the
+ former case, all such conversion is avoided, since Tcl_Token
+ production would revert it anyway. This enables simplifications to the
+ GenerateTokensForLiteral() routine as well.
+
+2007-07-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Added a field for operator precedence
+ to be stored directly in the parse tree. There's no memory cost to
+ this addition, since that memory would have been lost to alignment
+ issues anyway. Also, converted precedence definitions and lookup
+ tables to use symbolic constants instead of raw number for improved
+ readability, and continued extending/improving/correcting comments.
+ Removed some unused counter variables. Renamed some variables for
+ clarity and replaced some cryptic logic with more readable macros.
+
+2007-07-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Revision so that the END lexeme never
+ gets inserted into the parse tree. Later tree traversal never reaches
+ it since its location in the tree is not variable. Starting and
+ stopping with the START lexeme (node 0) is sufficient. Also finished
+ lexeme code commentary.
+
+ * generic/tclCompExpr.c: Added missing creation and return of
+ the Tcl_Parse fields that indicate error conditions. [Bug 1749987]
+
+2007-07-05 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl (unknown): Corrected inconsistent error message
+ in interactive [unknown] when empty command is invoked. [Bug 1743676]
+
+2007-07-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (SetNsNameFromAny):
+ * generic/tclObj.c (SetCmdNameFromAny): Avoid unnecessary
+ ckfree/ckalloc when the old structs can be reused.
+
+2007-07-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c: Fix case where a FQ cmd or ns was being cached
+ * generic/tclObj.c: in a different interp, tkcon. [Bug 1747512]
+
+2007-07-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Revised #define values so that there
+ is now more expansion room to define more BINARY operators.
+
+2007-07-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclHash.c (CompareStringKeys): Always use the strcmp()
+ version; the operation is functionally equivalent, the speed is
+ identical (up to measurement limitations), and yet the code is
+ simpler. [FRQ 951168]
+
+2007-07-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Removed TCL_PRESERVE_BINARY_COMPATIBILITY and
+ * generic/tclHash.c: any code enabled when it is set to 0. We will
+ * generic/tclStubInit.c: always want to preserve binary compat
+ of the structs that appear in the interface through the 8.* series of
+ releases, so it's pointless to drag around this never-enabled
+ alternative.
+
+ * generic/tclIO.c: Removed dead code.
+ * unix/tclUnixChan.c:
+
+ * generic/tclCompExpr.c: Removed dead code, old implementations
+ * generic/tclEvent.c: of expr parsing and compiling, including the
+ * generic/tclInt.h: routine TclFinalizeCompilation().
+
+2007-06-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Plug a memory leak caused by a
+ missing Tcl_DecrRefCount on an error path. [Bug 1717186]
+
+2007-06-30 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclThread.c: Prevent RemeberSyncObj() from growing the sync
+ object lists by reusing already free'd slots, if possible. See
+ discussion on Bug 1726873 for more information.
+
+2007-06-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/DictObj.3 (Tcl_DictObjDone): Improved documentation of this
+ function to make it clearer how to use it. [Bug 1710795]
+
+2007-06-29 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclAlloc.c: on Darwin, ensure memory allocated by
+ * generic/tclThreadAlloc.c: the custom TclpAlloc()s is aligned to
+ 16 byte boundaries (as is the case with the Darwin system malloc).
+
+ * generic/tclGetDate.y: use ckalloc/ckfree instead of malloc/free.
+ * generic/tclDate.c: bison 1.875e
+
+ * generic/tclBasic.c (TclEvalEx): fix warnings.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: better support for renamed tcl
+ * macosx/Tcl.xcodeproj/default.pbxuser: source dir; add 10.5 SDK build
+ * macosx/Tcl-Common.xcconfig: config; remove tclMathOp.c.
+
+ * macosx/README: document Tcl.xcodeproj changes.
+
+2007-06-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Removed dead code, including the
+ * generic/tclExecute.c: entire file tclMathOp.c.
+ * generic/tclInt.h:
+ * generic/tclMathOp.c (removed):
+ * generic/tclTestObj.c:
+ * win/tclWinFile.c:
+
+ * unix/Makefile.in: Updated to reflect deletion of tclMathOp.c.
+ * win/Makefile.in:
+ * win/makefile.bc:
+ * win/makefile.vc:
+
+2007-06-28 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclBasic.c: Silence constness warnings for TclStackFree
+ * generic/tclCompCmds.c: when building with msvc.
+ * generic/tclFCmd.c:
+ * generic/tclIOCmd.c:
+ * generic/tclTrace.c:
+
+2007-06-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (UnsetVarStruct): fix possible segfault.
+
+2007-06-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c: Corrected broken trace reversal logic in
+ * generic/tclTest.c: TclCheckInterpTraces that led to infinite loop
+ * tests/trace.test: when multiple Tcl_CreateTrace traces were set
+ and one of them did not fire due to level restrictions. [Bug 1743931]
+
+2007-06-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclEvalEx): Moved some arrays from the C
+ stack to the Tcl stack.
+
+2007-06-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (UnsetVarStruct): more streamlining.
+
+2007-06-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Safety checks to avoid crashes in the
+ TclStack* routines when called with an incompletely initialized
+ interp. [Bug 1743302]
+
+2007-06-25 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (UnsetVarStruct): fixing incomplete change, more
+ streamlining.
+
+2007-06-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclDeleteCompiledLocalVars): removed inlining that
+ ended up not really optimising (limited benchmarks). Now calling
+ UnsetVarStruct (streamlined old code is #ifdef'ed out, in case better
+ benchmarks do show a difference).
+
+ * generic/tclVar.c (UnsetVarStruct): fixed a leak introduced in last
+ commit.
+
+2007-06-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (UnsetVarStruct, TclDeleteVars): made the logic
+ slightly clearer, eliminated some duplicated code.
+
+ *** POTENTIAL INCOMPATIBILITY *** (tclInt.h and Var struct users)
+ The core never builds VAR_LINK variable to have traces. Such a
+ "monster", should one exist, will now have its unset traces called
+ *before* it is unlinked.
+
+2007-06-23 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c (AtForkChild): don't call CoreFoundation
+ APIs after fork() on systems where that would lead to an abort().
+
+2007-06-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Revised TclStackRealloc() signature to better
+ * generic/tclInt.h: parallel (and fall back on) Tcl_Realloc.
+
+ * generic/tclNamesp.c (TclResetShadowesCmdRefs): Replaced
+ ckrealloc based allocations with TclStackRealloc allocations.
+
+ * generic/tclCmdIL.c: More conversions to use TclStackAlloc.
+ * generic/tclScan.c:
+
+2007-06-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Move most instances of the Tcl_Parse struct
+ * generic/tclCompExpr.c: off the C stack and onto the Tcl stack. This
+ * generic/tclCompile.c: is a rather large struct (> 3kB).
+ * generic/tclParse.c:
+
+2007-06-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TEOvI): Made sure that leave traces
+ * generic/tclExecute.c (INST_INVOKE): that were created during
+ * tests/trace.test (trace-36.2): execution of an originally
+ untraced command do not fire [Bug 1740962], partial fix.
+
+2007-06-21 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tcl.h, generic/tclCompile.h, generic/tclCompile.c: Remove
+ references in comments to obsolete {expand} notation. [Bug 1740859]
+
+2007-06-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c: streamline namespace vars deletion: only compute
+ the variable's full name if the variable is traced.
+
+2007-06-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.decls: Revised the interfaces of the routines
+ * generic/tclExecute.c: TclStackAlloc and TclStackFree to make them
+ easier for callers to use (or more precisely, harder to misuse).
+ TclStackFree now takes a (void *) argument which is the pointer
+ intended to be freed. TclStackFree will panic if that's not actually
+ the memory the call will free. TSA/TSF also now tolerate receiving
+ (interp == NULL), in which case they simply fall back to be calls to
+ Tcl_Alloc/Tcl_Free.
+
+ * generic/tclIntDecls.h: make genstubs
+
+ * generic/tclBasic.c: Updated callers
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCompCmds.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclFCmd.c:
+ * generic/tclFileName.c:
+ * generic/tclIOCmd.c:
+ * generic/tclIndexObj.c:
+ * generic/tclInterp.c:
+ * generic/tclNamesp.c:
+ * generic/tclProc.c:
+ * generic/tclTrace.c:
+ * unix/tclUnixPipe.c:
+
+2007-06-20 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tools/tcltk-man2html.tcl: revamp of html doc output to use CSS,
+ standardized headers, subheaders, dictionary sorting of names.
+
+2007-06-18 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tools/tcltk-man2html.tcl: clean up copyright merging and output.
+ clean up coding constructs.
+
+2007-06-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL.c (InfoFrameCmd):
+ * generic/tclCmdMZ.c (Tcl_SwitchObjCmd):
+ * generic/tclCompile.c (TclInitCompileEnv):
+ * generic/tclProc.c (Tcl_ProcObjCmd, SetLambdaFromAny): Moved the
+ CmdFrame off the C stack and onto the Tcl stack.
+
+ * generic/tclExecute.c (TEBC): Moved the CmdFrame off the C stack and
+ onto the Tcl stack, between the catch and the execution stacks
+
+2007-06-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclEvalEx,TclEvalObjEx): Moved the CmdFrame off
+ the C stack and onto the Tcl stack.
+
+2007-06-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclProc.c (TclObjInterpProcCore): Minor fixes to make
+ * generic/tclExecute.c (TclExecuteByteCode): compilation debugging
+ builds work again. [Bug 1738542]
+
+2007-06-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclProc.c (TclObjInterpProcCore): Use switch instead of a
+ chain of if's for a modest performance gain and a little more clarity.
+
+2007-06-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c: Simplified [variable] compiler and executor.
+ * generic/tclExecute.c: Missed updates to "there is always a valid
+ frame".
+
+ * generic/tclCompile.c: reverted TclEvalObjvInternal and INST_INVOKE
+ * generic/tclExecute.c: to essentially what they were previous to the
+ * generic/tclBasic.c: commit of 2007-04-03 [Patch 1693802] and the
+ subsequent optimisations, as they break the new trace tests described
+ below.
+
+ * generic/trace.test: added tests 36 to 38 for dynamic trace creation
+ and addition. These tests expose a change in dynamics due to a recent
+ round of optimisations. The "correct" behaviour is not described in
+ docs nor TIP 62.
+
+2007-06-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.decls: Modif to the internals of TclObjInterpProc
+ * generic/tclInt.h: to reduce stack consumption and improve task
+ * generic/tclIntDecls.h: separation. Changes the interface of
+ * generic/tclProc.c: TclObjInterpProcCore (patching TclOO
+ simultaneously).
+
+ * generic/tclProc.c (TclObjInterpProcCore): simplified obj management
+ in wrongNumArgs calls.
+
+2007-06-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c: SetByteCodeFromAny() can no longer return any
+ * generic/tclExecute.c: code other than TCL_OK, so remove code that
+ * generic/tclProc.c: formerly handled exceptional codes.
+
+2007-06-13 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TclCompEvalObj): missed update to "there is
+ always a valid frame".
+
+ * generic/tclProc.c (TclObjInterpProcCore): call TEBC directly instead
+ of going through TclCompEvalObj - no need to check the compilation's
+ freshness, this has already been done. This improves speed and should
+ also provide some relief to [Bug 1066755].
+
+2007-06-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclBasic.c (Tcl_CreateInterp): Turn the [info] command into
+ * generic/tclCmdIL.c (TclInitInfoCmd): an ensemble, making it easier
+ for third-party code to plug into.
+
+ * generic/tclIndexObj.c (Tcl_WrongNumArgs):
+ * generic/tclNamesp.c, generic/tclInt.h (tclEnsembleCmdType): Make
+ Tcl_WrongNumArgs do replacement correctly with ensembles and other
+ sorts of complex replacement strategies.
+
+2007-06-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: comments added to explain iPtr->numLevels
+ management.
+
+ * generic/tclNamesp.c: tweaks to Tcl_GetCommandFromObj and
+ * generic/tclObj.c: TclGetNamespaceFromObj; modified the usage of
+ structs ResolvedCmdName and ResolvedNsname so that the field refNsPtr
+ is NULL for fully qualified names.
+
+2007-06-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Further TEOvI split, creating a new
+ * generic/tclCompile.h: TclEvalObjvKnownCommand() function to handle
+ * generic/tclExecute.c: commands that are already known and are not
+ traced. INST_INVOKE now calls into this function instead of inlining
+ parts of TEOvI. Same perf, better isolation.
+
+ ***POTENTIAL INCOMPAT*** There is a subtle issue with the timing of
+ execution traces that is changed here - first change appeared in my
+ commit of 2007-04-03 [Patch 1693802], which caused some divergence
+ between compiled and non-compiled code.
+ ***THIS CHANGE IS UNDER REVIEW***
+
+2007-06-10 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * README: updated links. [Bug 1715081]
+
+ * generic/tclExecute.c (TclExecuteByteCode): restore support for
+ INST_CALL_BUILTIN_FUNC1 and INST_CALL_FUNC1 bytecodes to support 8.4-
+ precompiled sources (math functions). [Bug 1720895]
+
+2007-06-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclvar.c: new macros TclGetCurrentNamespace() and
+ TclGetGlobalNamespace(); Tcl_GetCommandFromObj and
+ TclGetNamespaceFromObj rewritten to make the logic clearer; slightly
+ faster too.
+
+2007-06-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_INVOKE): isolated two vars to the small
+ block where they are actually used.
+
+ * generic/tclObj.c (Tcl_GetCommandFromObj): rewritten to make the
+ logic clearer; slightly faster too.
+
+ * generic/tclBasic.c: Split TEOv in two, by separating a processor
+ for non-TCL_OK returns. Also split TEOvI in a full version that
+ handles non-existing and traced commands, and a separate shorter
+ version for the regular case.
+
+ * generic/tclBasic.c: Moved the generation of command strings for
+ * generic/tclTrace.c: traces: previously in Tcl_EvalObjv(), now in
+ TclCheck[Interp|Execution]Traces(). Also insured that the strings are
+ properly NUL terminated at the correct length. [Bug 1693986]
+
+ ***POTENTIAL INCOMPATIBILITY in internal API***
+ The functions TclCheckInterpTraces() and TclCheckExecutionTraces() (in
+ internal stubs) used to be noops if the command string was NULL, this
+ is not true anymore: if the command string is NULL, they generate an
+ appropriate string from (objc,objv) and use it to call the traces. The
+ caller might as well not call them with a NULL string if he was
+ expecting a noop.
+
+ * generic/tclBasic.c: Extend usage of TclLimitReady() and
+ * generic/tclExecute.c: (new) TclLimitExceeded() macros.
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+
+ * generic/tclInt.h: New TclCleanupCommandMacro for core usage.
+ * generic/tclBasic.c:
+ * generic/tclExecute.c:
+ * generic/tclObj.c:
+
+2007-06-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add new Tclsh-Info.plist.in.
+
+2007-06-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Changed [string first] and
+ * doc/string.n: [string last] so that they have clearer descriptions
+ for those people who know the adage about needles and haystacks. This
+ follows suggestions on comp.lang.tcl...
+
+2007-06-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c: fix for uninit read. [Bug 1732414]
+
+2007-06-06 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add settings for Fix&Continue.
+
+ * unix/configure.in (Darwin): add plist for tclsh; link the
+ * unix/Makefile.in (Darwin): Tcl and tclsh plists into
+ * macosx/Tclsh-Info.plist.in (new): their binaries in all cases.
+ * macosx/Tcl-Common.xcconfig:
+
+ * unix/tcl.m4 (Darwin): fix CF checks in fat 32&64bit builds.
+ * unix/configure: autoconf-2.59
+
+2007-06-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Added interp flag value ERR_LEGACY_COPY to
+ * generic/tclInt.h: control the timing with which the global
+ * generic/tclNamesp.c: variables ::errorCode and ::errorInfo get
+ * generic/tclProc.c: updated after an error. This keeps more
+ * generic/tclResult.c: precise compatibility with Tcl 8.4.
+ * tests/result.test (result-6.2): [Bug 1649062]
+
+2007-06-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.h:
+ * generic/tclExecute.c: Tcl-stack reform, [Patch 1701202]
+
+2007-06-03 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: add datarootdir to silence autoconf-2.6x warning.
+
+2007-05-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Removed code that dealt with
+ * generic/tclCompile.c: TCL_TOKEN_EXPAND_WORD tokens representing
+ * generic/tclCompile.h: expanded literal words. These sections were
+ mostly in place to enable [info frame] to discover line information in
+ expanded literals. Since the parser now generates a token for each
+ post-expansion word referring to the right location in the original
+ script string, [info frame] gets all the data it needs.
+
+ * generic/tclInt.h: Revised the parser so that it never produces
+ * generic/tclParse.c: TCL_TOKEN_EXPAND_WORD tokens when parsing an
+ * tests/parse.test: expanded literal word; that is, something like
+ {*}{x y z}. Instead, generate the series of TCL_TOKEN_SIMPLE_WORD
+ tokens to represent the words that expansion of the literal string
+ produces. [RFE 1725186]
+
+2007-05-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixThrd.c (Tcl_JoinThread): fix for 64-bit handling of
+ pthread_join exit return code storage. [Bug 1712723]
+
+2007-05-22 Don Porter <dgp@users.sourceforge.net>
+
+ [core-stabilizer-branch]
+
+ * unix/configure: autoconf-2.59 (FC6 fork)
+ * win/configure:
+
+ * README: Bump version number to 8.5b1
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+2007-05-18 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/configure: autoconf-2.59 (FC6 fork)
+ * win/configure:
+
+ * README: Bump version number to 8.5a7
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * generic/tclParse.c: Disable and remove the ALLOW_EXPAND sections
+ * tests/info.test: that continued to support the deprecated
+ * tests/mathop.test: {expand} syntax. Updated the few remaining
+ users of that syntax in the test suite.
+
+2007-05-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TclLimitReady): Created a macro version of
+ Tcl_LimitReady just for TEBC, to reduce the amount of times that the
+ bytecode engine calls out to external functions on the critical path.
+ * generic/tclInterp.c (Tcl_LimitReady): Added note to remind anyone
+ doing maintenance that there is a macro version to update.
+
+2007-05-17 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.decls: workaround 'make checkstubs' failures from
+ tclStubLib.c MODULE_SCOPE revert. [Bug 1716117]
+
+2007-05-16 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclStubLib.c: Change Tcl_InitStubs(), tclStubsPtr, and the
+ auxilliary stubs table pointers back to public visibility.
+
+ These symbols need to be exported so that stub-enabled extensions may
+ be statically linked into an extended tclsh or Big Wish with a
+ dynamically-linked libtcl. [Bug 1716117]
+
+2007-05-15 Don Porter <dgp@users.sourceforge.net>
+
+ * win/configure: autoconf-2.59 (FC6 fork)
+
+ * library/reg/pkgIndex.tcl: Bump to registry 1.2.1 to account for
+ * win/configure.in: [Bug 1682211] fix.
+ * win/makefile.bc:
+ * win/tclWinReg.c:
+
+2007-05-11 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclInt.h: Removed TclEvalObjEx and TclGetSrcInfoForPc from
+ tclInt.h now they are in the internal stubs table.
+
+2007-05-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: TclFinalizeThreadAlloc() is always defined, so
+ make sure it is also always declared (with MODULE_SCOPE).
+
+2007-05-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.h: fix warning when building threaded with -DPURIFY.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add 'DebugUnthreaded' &
+ * macosx/Tcl.xcodeproj/default.pbxuser: 'DebugLeaks' configs and env
+ var settings needed to run the 'leaks' tool.
+
+2007-05-07 Don Porter <dgp@users.sourceforge.net>
+
+ [Tcl Bug 1706140]
+
+ * generic/tclLink.c (LinkTraceProc): Update Tcl_VarTraceProcs so
+ * generic/tclNamesp.c (Error*Read): they call Tcl_InterpDeleted()
+ * generic/tclTrace.c (Trace*Proc): for themselves, and do not
+ * generic/tclUtil.c (TclPrecTraceProc): rely on (frequently buggy)
+ setting of the TCL_INTERP_DESTROYED flag by the trace core.
+
+ * generic/tclVar.c: Update callers of TclCallVarTraces to not pass
+ in the TCL_INTERP_DESTROYED flag. Also apply filters so that public
+ routines only pass documented flag values down to lower level routines
+
+ * generic/tclTrace.c (TclCallVarTraces): The setting of the
+ TCL_INTERP_DESTROYED flag is now done entirely within the
+ TclCallVarTraces routine, the only place it can be done right.
+
+2007-05-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h (ExtraFrameInfo): Create a new mechanism for
+ * generic/tclCmdIL.c (InfoFrameCmd): conveying what information needs
+ to be added to the results of [info frame] to replace the hack that
+ was there before.
+ * generic/tclProc.c (Tcl_ApplyObjCmd): Use the new mechanism for the
+ [apply] command, the only part of Tcl itself that needs it (so far).
+
+ * generic/tclInt.decls (TclEvalObjEx, TclGetSrcInfoForPc): Expose
+ these two functions through the internal stubs table, necessary for
+ extensions that need to integrate deeply with TIP#280.
+
+2007-05-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/tclWinFile.c (TclpGetUserHome): Squelch type-pun warnings in
+ * win/tclWinInit.c (TclpSetVariables): Win-specific code not found
+ * win/tclWinReg.c (AppendSystemError): during earlier work on Unix.
+
+2007-05-04 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclIO.c (TclFinalizeIOSubsystem): Added an initializer to
+ silence a spurious gcc warning about use of an uninitialized
+ variable.
+ * tests/encoding.test: Modified so that encoding tests happen in a
+ private namespace, to avoid polluting the global one. This problem was
+ discovered when running the test suite '-singleproc 1 -skip exec.test'
+ because the 'path' variable in encoding.test conflicted with the one
+ in io.test.
+ * tests/io.test: Made more of the working variables private to the
+ namespace.
+
+2007-05-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclTest.c (SimpleMatchInDirectory): Corrected a refcount
+ imbalance that affected the filesystem-[147]* tests in the test suite.
+ Thanks to Don Porter for the patch. [Bug 1710707]
+ * generic/tclPathObj.c (Tcl_FSJoinPath, Tcl_FSGetNormalizedPath):
+ Corrected several memory leaks that caused refcount imbalances
+ resulting in memory leaks on Windows. Thanks to Joe Mistachkin for the
+ patch.
+
+2007-05-01 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclPtrSetVar): fixed leak whenever newvaluePtr had
+ refCount 0 and was used for appending (but not lappending). Thanks to
+ mistachkin and kbk. [Bug 1710710]
+
+2007-05-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclIO.c (DeleteChannelTable): Made changes so that
+ DeleteChannelTable tries to close all open channels, not just the
+ first. [Bug 1710285]
+ * generic/tclThread.c (TclFinalizeSynchronization): Make sure that TSD
+ blocks get freed on non-threaded builds. [Bug 1710825]
+ * tests/utf.test (utf-25.1--utf-25.4): Modified tests to clean up
+ after the 'testobj' extension to avoid spurious reports of memory
+ leaks.
+
+2007-05-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (STR_MAP): When [string map] has a pure dict map,
+ a missing Tcl_DictObjDone() call led to a memleak. [Bug 1710709]
+
+2007-04-30 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: add 'tclsh' dependency to install targets that
+ rely on tclsh, fixes parallel 'make install' from empty build dir.
+
+2007-04-30 Andreas Kupries <andreask@gactivestate.com>
+
+ * generic/tclIO.c (FixLevelCode): Corrected reference count
+ mismanagement of newlevel, newcode. Changed to allocate the Tcl_Obj's
+ as late as possible, and only when actually needed. [Bug 1705778, leak
+ K29]
+
+2007-04-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclProc.c (Tcl_ProcObjCmd, SetLambdaFromAny): Corrected
+ reference count mismanagement on the name of the source file in the
+ TIP 280 code. [Bug 1705778, leak K02 among other manifestations]
+
+2007-04-25 Donal K. Fellows <dkf@users.sf.net>
+
+ *** 8.5a6 TAGGED FOR RELEASE ***
+
+ * generic/tclProc.c (TclObjInterpProcCore): Only allocate objects for
+ error message generation when associated with argument names that are
+ really used. [Bug 1705778, leak K15]
+
+2007-04-25 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclIOUtil.c (Tcl_FSChdir): Changed the memory management so
+ that the path returned from Tcl_FSGetNativePath is not duplicated
+ before being stored as the current directory, to avoid a memory leak.
+ [Bug 1705778, leak K01 among other manifestations]
+
+2007-04-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c (ParseExpr): Revised to be sure that an
+ error return doesn't prevent all literals getting placed on the
+ litList to be returned to the caller for freeing. Corrects some
+ memleaks. [Bug 1705778, leak K23]
+
+2007-04-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in (dist): add macosx/*.xcconfig files to src dist;
+ copy license.terms to dist macosx dir; fix autoheader bits.
+
+2007-04-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclListObj.c: reverting [Patch 738900] (committed on
+ 2007-04-20). Causes some Tk test breakage of unknown importance, but
+ the impact of the patch itself is likely to be so small that it does
+ not warrant investigation at this time.
+
+2007-04-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictKeysCmd): Rewrote so that the lock on the
+ internal representation of a dict is only set when necessary. [Bug
+ 1705778, leak K04]
+ (DictFilterCmd): Added code to drop the lock in the trivial match
+ case. [Bug 1705778, leak K05]
+
+2007-04-24 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclBinary.c: Addressed several code paths where the error
+ return from the 'binary format' command leaked the result buffer.
+ * generic/tclListObj.c (TclLsetFlat): Fixed a bug where the new list
+ under construction was leaked in the error case. [Bug 1705778, leaks
+ K13 and K14]
+
+2007-04-24 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in (dist): add platform library package to src dist
+
+2007-04-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c (ParseExpr): Memory leak in error case; the
+ literal Tcl_Obj was not getting freed. [Bug 1705778, leak #1 (new)]
+
+ * generic/tclNamesp.c (Tcl_DeleteNamespace): Corrected flaw in the
+ flag marking scheme to be sure that global namespaces are freed when
+ their interp is deleted. [Bug 1705778]
+
+2007-04-24 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Plugged six memory leaks
+ in bignum arithmetic.
+ * generic/tclIOCmd.c (Tcl_ReadObjCmd): Plugged a leak of the buffer
+ object if the physical read returned an error and the bypass area had
+ no message.
+ * generic/tclIORChan.c (TclChanCreateObjCmd): Plugged a leak of the
+ return value from the "initialize" method of a channel handler.
+ (All of the above under [Bug 1705778])
+
+2007-04-23 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclCkalloc.c: fix warnings from gcc build configured with
+ * generic/tclCompile.c: --enable-64bit --enable-symbols=all.
+ * generic/tclExecute.c:
+
+ * unix/tclUnixFCmd.c: add workaround for crashing bug in fts_open()
+ * unix/tclUnixInit.c: without FTS_NOSTAT on 64bit Darwin 8 or earlier.
+
+ * unix/tclLoadDyld.c (TclpLoadMemory): fix (void*) arithmetic.
+
+ * macosx/Tcl-Common.xcconfig: enable more warnings.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add 'DebugMemCompile' build
+ configuration that calls configure with --enable-symbols=all; override
+ configure check for __attribute__((__visibility__("hidden"))) in Debug
+ configuration to restore availability of ZeroLink.
+
+ * macosx/tclMacOSXNotify.c: fix warnings.
+
+ * macosx/tclMacOSXFCmd.c: const fixes.
+
+ * macosx/Tcl-Common.xcconfig: fix whitespace.
+ * macosx/Tcl-Debug.xcconfig:
+ * macosx/Tcl-Release.xcconfig:
+ * macosx/README:
+
+ * macosx/GNUmakefile: fix/add copyright and license refs.
+ * macosx/tclMacOSXBundle.c:
+ * macosx/Tcl-Info.plist.in:
+ * macosx/Tcl.xcode/project.pbxproj:
+ * macosx/Tcl.xcodeproj/project.pbxproj:
+
+ * unix/configure.in: install license.terms into Tcl.framework.
+ * unix/configure: autoconf-2.59
+
+2007-04-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclVar.c (UnsetVarStruct): Make sure the
+ TCL_INTERP_DESTROYED flags gets passed to unset trace routines so they
+ can respond appropriately. [Bug 1705778, leak #9]
+
+2007-04-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclFreeCompileEnv): Tip 280's new field
+ extCmdMapPtr was not being freed. [Bug 1705778, leak #1]
+
+2007-04-23 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclCompCmds.c (TclCompileUpvarCmd): Plugged a memory leak in
+ 'upvar' when compiling (a) upvar outside a proc, (b) upvar with a
+ syntax error, or (c) upvar where the frame index is not known at
+ compile time.
+ * generic/tclCompExpr.c (ParseExpr): Plugged a memory leak when
+ parsing expressions that contain syntax errors.
+ * generic/tclEnv.c (ReplaceString): Clear memory correctly when
+ growing the cache to avoid reads of uninitialised data.
+ * generic/tclIORChan.c (TclChanCreateObjCmd, FreeReflectedChannel):
+ Plugged two memory leaks.
+ * generic/tclStrToD.c (AccumulateDecimalDigit): Fixed a mistake where
+ we'd run beyond the end of the 'pow10_wide' array if a number begins
+ with a string of more than 'maxpow10_wide' zeroes.
+ * generic/tclTest.c (Testregexpobjcmd): Removed an invalid access
+ beyond the end of 'objv' in 'testregexp -about'.
+ All of these issues reported under [Bug 1705778] - detected with the
+ existing test suite, no new regression tests required.
+
+2007-04-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclDeleteNamespaceVars): fixed access to freed
+ memory detected by valgrind: Tcl_GetCurrentNamespace was being
+ called after freeing root CallFrame (on interp deletion).
+
+2007-04-20 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclListObj.c (SetListFromAny): avoid discarding internal
+ reps of objects converted to singleton lists. [Patch 738900]
+
+2007-04-20 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n: Corrected a silly error (transposed 'uppercase' and
+ 'lowercase' in clock.n. [Bug 1656002]
+ Clarified that [clock scan] does not recognize a locale's alternative
+ calendar.
+ Deleted an entirely superfluous (and also incorrect) remark about the
+ effect of Daylight Saving Time on relative times in [clock scan]. [Bug
+ 1582951]
+ * library/clock.tcl: Corrected an error in skipping over the %Ey field
+ on input.
+ * library/msgs/ja.msg:
+ * tools/loadICU.tcl: Corrected several localisation faults in the
+ Japanese locale (most notably, incorrect dates for the Emperors'
+ eras). Many thanks to SourceForge user 'nyademo' for pointing this out
+ and developing a fix. [Bug 1637471]
+ * generic/tclPathObj.c: Corrected a 'const'ness fault that caused
+ bitter complaints from MSVC.
+ * tests/clock.test (clock-40.1, clock-58.1, clock-59.1): Corrected a
+ test case that depended on ":localtime" being able to handle dates
+ prior to the Posix epoch. [Bug 1618445] Added a test case for the
+ dates of the Japanese emperors. [Bug 1637471] Added a regression test
+ for military time zone input conversion. [Bug 1586828]
+ * generic/tclGetDate.y (MilitaryTable): Fixed an ancient bug where the
+ military NZA time zones had the signs reversed. [Bug 1586828]
+ * generic/tclDate.c: Regenerated.
+ * doc/Notifier.3: Documented Tcl_SetNotifier and Tcl_ServiceModeHook.
+ Quite against my better judgment. [Bug 414933]
+ * generic/tclBasic.c, generic/tclCkalloc.c, generic/tclClock.c:
+ * generic/tclCmdIL.c, generic/tclCmdMZ.c, generic/tclFCmd.c:
+ * generic/tclFileName.c, generic/tclInterp.c, generic/tclIO.c:
+ * generic/tclIOUtil.c, generic/tclNamesp.c, generic/tclObj.c:
+ * generic/tclPathObj.c, generic/tclPipe.c, generic/tclPkg.c:
+ * generic/tclResult.c, generic/tclTest.c, generic/tclTestObj.c:
+ * generic/tclVar.c, unix/tclUnixChan.c, unix/tclUnixTest.c:
+ * win/tclWinLoad.c, win/tclWinSerial.c: Replaced commas in varargs
+ with string concatenation where possible. [Patch 1515234]
+ * library/tzdata/America/Tegucigalpa:
+ * library/tzdata/Asia/Damascus: Olson's tzdata 2007e.
+
+2007-04-19 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/regcomp.c, generic/regc_cvec.c, generic/regc_lex.c,
+ * generic/regc_locale.c: Improve the const-correctness of the RE
+ compiler.
+
+2007-04-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_LSHIFT): fixed a mistake introduced in
+ version 1.266 ('=' became '=='), which effectively turned the block
+ that handles native shifts into dead code. This explains why the
+ testsuite did not pick this mistake. Rewrote to make the intention
+ clear.
+
+ * generic/tclInt.h (TclDecrRefCount): change the order of the
+ branches, use empty 'if ; else' to handle use in unbraced outer
+ if/else conditions (as already done in tcl.h)
+
+ * generic/tclExecute.c: slight changes in Tcl_Obj management.
+
+2007-04-17 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Fixed the naming of
+ ::tcl::clock::ReadZoneinfoFile because (yoicks!) it was in the global
+ namespace.
+ * doc/clock.n: Clarified the cases in which legacy time zone is
+ recognized. [Bug 1656002]
+
+2007-04-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: fixed checkInterp logic [Bug 1702212]
+
+2007-04-16 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * various (including generic/tclTest.c): Complete the purge of K&R
+ function definitions from manually-written code.
+
+2007-04-15 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclCompCmds.c: added a cast to silence a compiler error on
+ VC2005.
+ * library/clock.tcl: Restored unique-prefix matching of keywords on
+ the [clock] command. [Bug 1690041]
+ * tests/clock.test: Added rudimentary test cases for unique-prefix
+ matching of keywords.
+
+2007-04-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: removed some code at INST_EXPAND_SKTOP that
+ duplicates functionality already present at checkForCatch.
+
+2007-04-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: new macros OBJ_AT_TOS, OBJ_UNDER_TOS,
+ OBJ_AT_DEPTH(n) and CURR_DEPTH that remove all direct references to
+ tosPtr from TEBC (after initialisation and the code at the label
+ cleanupV_pushObjResultPtr).
+
+2007-04-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompCmds.c: moved all exceptDepth management to the
+ macros - the decreasing half was managed by hand.
+
+2007-04-10 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclInt.h (TclNewLiteralStringObj): New macro to make
+ allocating literal string objects (i.e. objects whose value is a
+ constant string) easier and more efficient, by allowing the omission
+ of the length argument. Based on [Patch 1529526] (afredd)
+ * generic/*.c: Make use of this (in many files).
+
+2007-04-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile (tclInstructionTable): Fixed bugs in description
+ of dict instructions.
+
+2007-04-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile (tclInstructionTable): Fixed bug in description
+ of INST_START_COMMAND.
+
+ * generic/tclExecute.c (TEBC): Small code reduction.
+
+2007-04-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (TEBC):
+ * generic/tclNamespace.c (NsEnsembleImplementationCmd):
+ * generic/tclProc.c (InitCompiledLocals, ObjInterpProcEx)
+ (TclObjInterpProcCore, ProcCompileProc): Code reordering to reduce
+ branching and improve branch prediction (assume that forward branches
+ are typically not taken).
+
+2007-04-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: INST_INVOKE optimisation. [Patch 1693802]
+
+2007-04-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c: Revised ErrorCodeRead and ErrorInfoRead trace
+ routines so they guarantee the ::errorCode and ::errorInfo variable
+ always appear to exist. [Bug 1693252]
+
+2007-04-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInt.decls: Moved TclGetNamespaceFromObj() to the
+ * generic/tclInt.h: internal stubs table; regen.
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+2007-04-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Added bytecode compilers for the variable
+ * generic/tclCompCmds.c: linking commands: 'global', 'variable',
+ * generic/tclCompile.h: 'upvar', 'namespace upvar' [Patch 1688593]
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * generic/tclVar.c:
+
+2007-04-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Replace arrays on the C stack and ckalloc
+ * generic/tclExecute.c: calls with TclStackAlloc calls to use memory
+ * generic/tclFCmd.c: on Tcl's evaluation stack.
+ * generic/tclFileName.c:
+ * generic/tclIOCmd.c:
+ * generic/tclIndexObj.c:
+ * generic/tclInterp.c:
+ * generic/tclNamesp.c:
+ * generic/tclTrace.c:
+ * unix/tclUnixPipe.c:
+
+2007-04-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileScript, TclPrintInstruction):
+ * generic/tclExecute.c (TclExecuteByteCode): Changed the definition of
+ INST_START_CMD so that it knows how many commands start at the current
+ location. This makes the interpreter command counter correct without
+ requiring a large number of instructions to be issued. (See my change
+ from 2007-01-19 for what triggered this.)
+
+2007-03-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompCmds.c: Replace arrays on the C stack and
+ ckalloc calls with TclStackAlloc calls to use memory on Tcl's
+ evaluation stack.
+
+ * generic/tclCmdMZ.c: Revised [string to* $s $first $last]
+ implementation to reduce number of allocs/copies.
+
+ * tests/string.test: More [string reverse] tests.
+
+2007-03-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: optimise the lookup of elements of indexed
+ arrays.
+
+2007-03-29 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (Tcl_ApplyObjCmd):
+ * tests/apply.test (9.3): Fixed Tcl_Obj leak on error return; an
+ unneeded ref to lambdaPtr was being set and not released on an error
+ return path.
+
+2007-03-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (STR_REVERSE): Implement the actual [string
+ reverse] command in terms of the new TclStringObjReverse() routine.
+
+ * generic/tclInt.h (TclStringObjReverse): New internal routine
+ * generic/tclStringObj.c (TclStringObjReverse): that implements the
+ [string reverse] operation, making use of knowledge/surgery of the
+ String intrep to minimize the number of allocs and copies needed to do
+ the job.
+
+2007-03-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdMZ.c (STR_MAP): Replace ckalloc calls with
+ TclStackAlloc calls.
+
+2007-03-24 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * win/tclWinThrd.c: Thread exit handler marks the current thread as
+ un-initialized. This allows exit handlers that are registered later to
+ re-initialize this subsystem in case they need to use some sync
+ primitives (cond variables) from this file again.
+
+2007-03-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (DeleteInterpProc): pop the root frame pointer
+ before deleting the global namespace [Bug 1658572]
+
+2007-03-23 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/Makefile.in: Added code to keep a Cygwin path name from leaking
+ into LIBRARY_DIR when doing 'make test' or 'make runtest'.
+
+2007-03-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Replaced arrays on the
+ C stack and ckalloc calls with TclStackAlloc calls to use memory on
+ Tcl's evaluation stack.
+
+ * generic/tclExecute.c: Revised GrowEvaluationStack to take an
+ argument specifying the growth required by the caller, so that a
+ single reallocation / copy is the most that will ever be needed even
+ when required growth is large.
+
+2007-03-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: More ckalloc -> ckrealloc conversions.
+ * generic/tclLiteral.c:
+ * generic/tclNamesp.c:
+ * generic/tclParse.c:
+ * generic/tclPreserve.c:
+ * generic/tclStringObj.c:
+ * generic/tclUtil.c:
+
+2007-03-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEnv.c: Some more ckalloc -> ckrealloc replacements.
+ * generic/tclLink.c:
+
+2007-03-20 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclDate.c: Rebuilt, despite Donal Fellows's comment when
+ committing it that no rebuild was required.
+ * generic/tclGetDate.y: According to Donal Fellows, "Introduce modern
+ formatting standards; no need for rebuild of tclDate.c."
+
+ * library/tzdata/America/Cambridge_Bay:
+ * library/tzdata/America/Havana:
+ * library/tzdata/America/Inuvik:
+ * library/tzdata/America/Iqaluit:
+ * library/tzdata/America/Pangnirtung:
+ * library/tzdata/America/Rankin_Inlet:
+ * library/tzdata/America/Resolute:
+ * library/tzdata/America/Yellowknife:
+ * library/tzdata/Asia/Choibalsan:
+ * library/tzdata/Asia/Dili:
+ * library/tzdata/Asia/Hovd:
+ * library/tzdata/Asia/Jakarta:
+ * library/tzdata/Asia/Jayapura:
+ * library/tzdata/Asia/Makassar:
+ * library/tzdata/Asia/Pontianak:
+ * library/tzdata/Asia/Ulaanbaatar:
+ * library/tzdata/Europe/Istanbul: Upgraded to Olson's tzdata2007d.
+
+ * generic/tclListObj.c (TclLsetList, TclLsetFlat):
+ * tests/lset.test: Changes to deal with shared internal representation
+ for lists passed to the [lset] command. Thanks to Don Porter for
+ fixing this issue. [Bug 1677512]
+
+2007-03-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c: Revise the various expansion routines for
+ CompileEnv fields to use ckrealloc() where appropriate.
+
+ * generic/tclBinary.c (Tcl_SetByteArrayLength): Replaced ckalloc() /
+ memcpy() sequence with ckrealloc() call.
+
+ * generic/tclBasic.c (Tcl_CreateMathFunc): Replaced some calls to
+ * generic/tclEvent.c (Tcl_CreateThread): Tcl_Alloc() with calls
+ * generic/tclObj.c (UpdateStringOfBignum): to ckalloc(), which
+ * unix/tclUnixTime.c (SetTZIfNecessary): better supports memory
+ * win/tclAppInit.c (setargv): debugging.
+
+2007-03-19 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/regsub.n: Corrected example so that it doesn't recommend
+ potentially unsafe practice. Many thanks to Konstantin Kushnir
+ <chpock@gmail.com> for reporting this.
+
+2007-03-17 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinReg.c (GetKeyNames): Size the buffer for enumerating key
+ names correctly, so that Unicode names exceeding 127 chars can be
+ retrieved without crashing. [Bug 1682211]
+ * tests/registry.test (registry-4.9): Added test case for the above
+ bug.
+
+2007-03-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIOUtil.c (Tcl_Stat): Reimplement workaround to avoid gcc
+ warning by using local variables. When the macro argument is of type
+ long long instead of long, the incorrect warning is not generated.
+
+2007-03-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * win/Makefile.in: Fully qualify LIBRARY_DIR so that `make test` does
+ not depend on working dir.
+
+2007-03-15 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * tests/parse.test: Add two backslash newline parse tests.
+
+2007-03-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (INST_FOREACH_STEP4): Make private copy of
+ * tests/foreach.test (foreach-10.1): value list to be assigned to
+ variables so that shimmering of that list doesn't lead to invalid
+ pointers. [Bug 1671087]
+
+ * generic/tclEvent.c (HandleBgErrors): Make efficient private copy
+ * tests/event.test (event-5.3): of the command prefix for the interp's
+ background error handling command to avoid panics due to pointers to
+ memory invalid after shimmering. [Bug 1670155]
+
+ * generic/tclNamesp.c (NsEnsembleImplementationCmd): Make efficient
+ * tests/namespace.test (namespace-42.8): private copy of the
+ command prefix as we invoke the command appropriate to a particular
+ subcommand of a particular ensemble to avoid panic due to shimmering
+ of the List intrep. [Bug 1670091]
+
+ * generic/tclVar.c (TclArraySet): Make efficient private copy of
+ * tests/var.test (var-17.1): the "list" argument to [array set] to
+ avoid crash due to shimmering invalidating pointers. [Bug 1669489]
+
+2007-03-12 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Fix problems with declaration
+ positioning and memory leaks. [Bug 1679072]
+
+2007-03-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdIL.c (Tcl_LreverseObjCmd): Ensure that a list is
+ correctly reversed even if its internal representation is shared
+ without the object itself being shared. [Bug 1675044]
+
+2007-03-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIL (Tcl_LsortObjCmd): changed fix to [Bug 1675116] to
+ use the cheaper TclListObjCopy() instead of Tcl_DuplicateObj().
+
+2007-03-09 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/shell.tcl: Made more robust if an older platform
+ * library/platform/pkgIndex.tcl: package is present in the inspected
+ * unix/Makefile.in: shell. Package forget it to prevent errors. Bumped
+ * win/Makefile.in: package version to 1.1.3, and updated the Makefiles
+ installing it as Tcl Module.
+
+2007-03-09 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Handle tricky case with loss
+ * tests/cmdIL.test (cmdIL-1.29): of list rep during sorting due
+ to shimmering. [Bug 1675116]
+
+2007-03-09 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (ReadZoneinfoFile): Added Y2038 compliance to the
+ code for version-2 'zoneinfo' files.
+ * tests/clock.test (clock-56.3): Added a test case for Y2038 and
+ 'zoneinfo'. Modified test initialisation to use the
+ 'loadTestedCommands' function of tcltest to bring in the correct path
+ for the registry library.
+
+2007-03-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclListObj.c (TclLsetList): Rewrite so that the routine
+ itself does not do any direct intrep surgery. Better isolates those
+ things into the implementation of the "list" Tcl_ObjType.
+
+2007-03-08 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclListObj.c (TclLindexList, TclLindexFlat): Moved these
+ functions to tclListObj.c from tclCmdIL.c to mirror the way that the
+ equivalent functions for [lset]'s guts are arranged.
+
+2007-03-08 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Further tweaks to the Windows time zone table
+ (restoring missing Mexican time zones). Added rudimentary handling of
+ version-2 'zoneinfo' files. Update US DST rules so that zones such as
+ 'EST5EDT' get the correct transition dates.
+ * tests/clock.test: Added rudimentary test cases for 'zoneinfo'
+ parsing. Adjusted several tests that depended on obsolete US DST
+ transition rules.
+
+2007-03-07 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c: add spinlock debugging and sanity checks.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: ensure gcc version used by
+ * macosx/Tcl.xcodeproj/default.pbxuser: Xcode and configure/make are
+ * macosx/Tcl-Common.xcconfig: consistent and independent of
+ gcc_select default and CC env var; fixes for Xcode 3.0.
+
+ * unix/tcl.m4 (Darwin): s/CFLAGS/CPPFLAGS/ in macosx-version-min check
+ * unix/configure: autoconf-2.59
+
+2007-03-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdIL.c (TclLindex*): Rewrites to make efficient
+ private copies of the list and indexlist arguments, so we can operate
+ on the list elements directly with no fear of shimmering effects.
+ Replaces defensive coding schemes that are otherwise required. End
+ result is that TclLindexList is entirely a wrapper around
+ TclLindexFlat, which is now the core engine of all [lindex]
+ operations.
+
+ * generic/tclObj.c (Tcl_AppendAllObjTypes): Converted to simpler
+ list validity test.
+
+2007-03-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclRegexp.c (TclRegAbout): Generate information about a
+ regexp as a Tcl_Obj instead of as a string, which is more efficient.
+
+2007-03-07 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl: Adjusted Windows time zone table to handle new US
+ DST rules by locale rather than as Posix time zone spec.
+ * tests/clock.test (clock-39.6, clock-49.2, testclock::registry):
+ Adjusted tests to simulate new US rules.
+ * library/tzdata/America/Indiana/Winamac:
+ * library/tzdata/Europe/Istanbul:
+ * library/tzdata/Pacific/Easter:
+ Olson's tzdata2007c.
+
+2007-03-05 Andreas Kupries <andreask@activestate.com>
+
+ * library/platform/shell.tcl (::platform::shell::RUN): In the case of
+ * library/platform/pkgIndex.tcl: a failure put the captured stderr
+ * unix/Makefile.in: into the error message to aid in debugging. Bumped
+ * win/Makefile.in: package version to 1.1.2, and updated the makefiles
+ installing it as Tcl Module.
+
+2007-03-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclLink.c (LinkedVar): Added macro to conceal at least some
+ of the pointer hackery.
+
+2007-03-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdIL.c (Tcl_LreverseObjCmd): Added missing
+ TclInvalidateStringRep() call when we directly manipulate the intrep
+ of an unshared "list" Tcl_Obj. [Bug 1672585]
+
+ * generic/tclCmdIL.c (Tcl_JoinObjCmd): Revised [join] implementation
+ to append Tcl_Obj's instead of strings. [RFE 1669420]
+
+ * generic/tclCmdIL.c (Info*Cmd): Code simplifications and
+ optimizations.
+
+2007-03-02 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCompile.c (TclPrintInstruction): Added a scheme to allow
+ * generic/tclCompile.h (AuxDataPrintProc): aux-data to be printed
+ * generic/tclCompCmds.c (Print*Info): out for debugging. For
+ this to work, immediate operands referring to aux-data must be
+ identified as such in the instruction descriptor table using
+ OPERAND_AUX4 (all are always 4 bytes).
+
+ * generic/tclExecute.c (TclExecuteByteCode): Rewrote the compiled
+ * generic/tclCompCmds.c (TclCompileDictCmd): [dict update] so that it
+ * generic/tclCompile.h (DictUpdateInfo): stores critical
+ * tests/dict.test (dict-21.{14,15}): non-varying data in an
+ aux-data value instead of a (shimmerable) literal. [Bug 1671001]
+
+2007-03-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdIL.c (Tcl_LinsertObjCmd): Code simplifications
+ and optimizations.
+
+ * generic/tclCmdIL.c (Tcl_LreplaceObjCmd): Code simplifications
+ and optimizations.
+
+ * generic/tclCmdIL.c (Tcl_LrangeObjCmd): Rewrite in the same
+ spirit; avoid shimmer effects rather than react to them.
+
+ * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Stop throwing away
+ * tests/foreach.test (foreach-1.14): useful error information when
+ loop variable sets fail.
+
+ * generic/tclCmdIL.c (Tcl_LassignObjCmd): Rewrite to make an
+ efficient private copy of the list argument, so we can operate on the
+ list elements directly with no fear of shimmering effects. Replaces
+ defensive coding schemes that are otherwise required.
+
+ * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Rewrite to make
+ efficient private copies of the variable and value lists, so we can
+ operate on them without any special shimmer defense coding schemes.
+
+2007-03-01 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileForeachCmd): Prevent an unexpected
+ * tests/foreach.test (foreach-9.1): infinite loop when the
+ variable list is empty and the foreach is compiled. [Bug 1671138]
+
+2007-02-26 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (FreeReflectedChannel): Added the missing
+ refcount release between NewRC and FreeRC for the channel handle
+ object, spotted by Don Porter. [Bug 1667990]
+
+2007-02-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c (Tcl_ForeachObjCmd): Removed surplus
+ copying of the objv array that used to be a workaround for [Bug
+ 404865]. That bug is long fixed.
+
+2007-02-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Use new interface in Tcl_EvalObjEx so that the
+ recounting logic of the List internal rep need not be repeated there.
+ Better encapsulation of internal details.
+
+ * generic/tclInt.h: New internal routine TclListObjCopy() used
+ * generic/tclListObj.c: to efficiently do the equivalent of [lrange
+ $list 0 end]. After some experience with this, might be a good
+ candidate for exposure as a public interface. It's useful for callers
+ of Tcl_ListObjGetElements() who want to control the ongoing validity
+ of the returned objv pointer.
+
+2007-02-22 Andreas Kupries <andreask@activestate.com>
+
+ * tests/pkg.test: Added tests for the case of an alpha package
+ satisfying a require for the regular package, demonstrating a corner
+ case specified in TIP#280. More notes in the comments to the test.
+
+2007-02-20 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: Added "const" specifiers in TclSockGetPort
+ * generic/tclIntDecls.h: regenerated
+ * generic/*.c:
+ * unix/tclUnixChan.c
+ * unix/tclUnixPipe.c
+ * win/tclWinPipe.c
+ * win/tclWinSock.c: Added many "const" specifiers in implementation.
+
+2007-02-20 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/tcltest.n: Typo fix. [Bug 1663539]
+
+2007-02-20 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclFileName.c: Handle extended paths on Windows NT and
+ * generic/tclPathObj.c: above. These have a \\?\ prefix. [Bug
+ * win/tclWinFile.c: 1479814]
+ * tests/winFCmd.test: Tests for extended path handling.
+
+2007-02-19 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tcl.m4: use SHLIB_SUFFIX=".so" on HP-UX ia64 arch.
+ * unix/configure: autoconf-2.59
+
+ * generic/tclIOUtil.c (Tcl_FSEvalFileEx): safe incr of objPtr ref.
+
+2007-02-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/chan.n, doc/clock.n, doc/eval.n, doc/exit.n, doc/expr.n:
+ * doc/interp.n, doc/open.n, doc/platform_shell.n, doc/pwd.n:
+ * doc/refchan.n, doc/regsub.n, doc/scan.n, doc/tclvars.n, doc/tm.n:
+ * doc/unload.n: Apply [Bug 1610310] to fix typos. Thanks to Larry
+ Virden for spotting them.
+
+ * doc/interp.n: Partial fix of [Bug 1662436]; rest requires some
+ policy decisions on what should and shouldn't be safe commands from
+ the "new in 8.5" set.
+
+2007-02-13 Kevin B. Kenny <kennykb@acm.org>
+
+ * tools/fix_tommath_h.tcl: Further tweaking for the x86-64. The change
+ is to make 'mp_digit' be an 'unsigned int' on that platform; since
+ we're using only 32 bits of it, there's no reason to make it a 64-bit
+ 'unsigned long.'
+ * generic/tclTomMath.h: Regenerated.
+
+2007-02-13 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/re_syntax.n: Corrected description of 'print' class [Bug
+ 1614687] and enhanced description of 'graph' class.
+
+2007-02-12 Kevin B. Kenny <kennykb@acm.org>
+
+ * tools/fix_tommath_h.tcl: Added code to patch out a check for
+ __x86_64__ that caused Tommath to use __attributes(TI)__ for the
+ mp_word type. Tetra-int's simply fail on too many gcc-glibc-OS
+ combinations to be ready for shipment today, even if they work for
+ some of us. This change allows reversion of das's change of 2006-08-18
+ that accomplised the same thing on Darwin. [Bugs 1601380, 1603737,
+ 1609936, 1656265]
+ * generic/tclTomMath.h: Regenerated.
+ * library/tzdata/Africa/Asmara:
+ * library/tzdata/Africa/Asmera:
+ * library/tzdata/America/Nassau:
+ * library/tzdata/Atlantic/Faeroe:
+ * library/tzdata/Atlantic/Faroe:
+ * library/tzdata/Australia/Eucla:
+ * library/tzdata/Pacific/Easter: Rebuilt from Olson's tzdata2007b.
+
+2007-02-09 Joe Mistachkin <joe@mistachkin.com>
+
+ * win/nmakehlp.c: Properly cleanup after nmakehlp, including the
+ * win/makefile.vc: vcX0.pch file.
+
+2007-02-08 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/tclUnixInit.c (TclpCheckStackSpace): do stack size checks with
+ unsigned size_t to correctly validate stackSize in the 2^31+ range.
+ [Bug 1654104]
+
+2007-02-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c: Corrected broken logic in Tcl_DeleteNamespace
+ * tests/namespace.test: introduced in Patch 1577278 that caused
+ [namespace delete ::] to be effective only at level #0. New test
+ namespace-7.7 should prevent similar error in the future [Bug 1655305]
+
+2007-02-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c: Corrected broken implementation of the
+ * tests/namespace.test: TclMatchIsTrivial optimization on [namespace
+ children $namespace $pattern].
+
+2007-02-04 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: use gcc4's __attribute__((__visibility__("hidden"))) if
+ available to define MODULE_SCOPE effective on all platforms.
+ * unix/configure.in: add caching to -pipe and zoneinfo checks.
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2007-02-03 Joe Mistachkin <joe@mistachkin.com>
+
+ * win/rules.vc: Fix platform specific file copy macros for downlevel
+ Windows.
+
+2007-01-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclResult.c: Added optimization case to TclTransferResult to
+ cover common case where there's big savings over the fully general
+ path. Thanks to Peter MacDonald. [Bug 1626518]
+
+ * generic/tclLink.c: Broken linked float logic corrected. Thanks to
+ Andy Goth. [Bug 1602538]
+
+ * doc/fcopy.n: Typo fix. [Bug 1630627]
+
+2007-01-28 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: extract build settings that
+ * macosx/Tcl.xcodeproj/default.pbxuser: were common to multiple
+ * macosx/Tcl-Common.xcconfig (new file): configurations into external
+ * macosx/Tcl-Debug.xcconfig (new file): xcconfig files; add extra
+ * macosx/Tcl-Release.xcconfig (new file): configurations for building
+ with SDKs and 64bit; convert legacy jam-based 'Tcl' target to native
+ target with single script phase; correct syntax of build setting
+ references to use $() throughout.
+
+ * macosx/README: document new Tcl.xcodeproj configurations; other
+ minor updates/corrections.
+
+ * generic/tcl.h: update location of version numbers in macosx files.
+
+ * macosx/Tcl.xcode/project.pbxproj: restore 'tcltest' target to
+ * macosx/Tcl.xcode/default.pbxuser: working order by replicating
+ applicable changes to Tcl.xcodeproj since 2006-07-20.
+
+2007-01-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: integrate CPPFLAGS into CFLAGS as late as possible and
+ move (rather than duplicate) -isysroot flags from CFLAGS to CPPFLAGS
+ to avoid errors about multiple -isysroot flags from some older gcc
+ builds.
+
+ * unix/configure: autoconf-2.59
+
+2007-01-22 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * compat/memcmp.c (memcmp): Reworked so that arithmetic is never
+ performed upon void pointers, since that is illegal. [Bug 1631017]
+
+2007-01-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompile.c (TclCompileScript): Reduce the frequency with
+ which we issue INST_START_CMD, making bytecode both more compact and
+ somewhat faster. The optimized case is where we would otherwise be
+ issuing a sequence of those instructions; in those cases, it is only
+ ever the first one encountered that could possibly trigger.
+
+2007-01-19 Joe Mistachkin <joe@mistachkin.com>
+
+ * tools/man2tcl.c: Include stdlib.h for exit() and improve comment
+ detection.
+ * win/nmakehlp.c: Update usage.
+ * win/makefile.vc: Properly build man2tcl.c for MSVC8.
+
+2007-01-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXFCmd.c (TclMacOSXSetFileAttribute): on some versions
+ of Mac OS X, truncate() fails on resource forks, in that case use
+ open() with O_TRUNC instead.
+
+ * macosx/tclMacOSXNotify.c: accommodate changes to prototypes of
+ OSSpinLock(Un)Lock API.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: ensure HOME and USER env vars
+ * macosx/Tcl.xcodeproj/default.pbxuser: are defined when running
+ testsuite from Xcode.
+
+ * tests/env.test: add extra system env vars that need to be preserved
+ on some Mac OS X versions for testsuite to work.
+
+ * unix/Makefile.in: Move libtommath defines into configure.in to
+ * unix/configure.in: avoid replicating them across multiple
+ * macosx/Tcl.xcodeproj/project.pbxproj: buildsystems.
+
+ * unix/tcl.m4: ensure CPPFLAGS env var is used when set. [Bug 1586861]
+ (Darwin): add -isysroot and -mmacosx-version-min flags to CPPFLAGS
+ when present in CFLAGS to avoid discrepancies between what headers
+ configure sees during preprocessing tests and compiling tests.
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2007-01-18 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompile.c (TclCompileScript): Make sure that when parsing
+ an expanded literal fails, a correct bytecode sequence is still
+ issued. [Bug 1638414]. Also make sure that the start of the expansion
+ bytecode sequence falls inside the span of bytecodes for a command.
+ * tests/compile.test (compile-16.24): Added test for [Bug 1638414]
+
+2007-01-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIO.c: Added macros to make usage of ChannelBuffers
+ clearer.
+
+2007-01-11 Joe English <jenglish@users.sourceforge.net>
+
+ * win/tcl.m4(CFLAGS_WARNING): Remove "-Wconversion". This was removed
+ from unix/tcl.m4 2004-07-16 but not from here.
+ * win/configure: Regenerated.
+
+2007-01-11 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Fixes to work better on Win98. Read version numbers
+ * win/nmakehlp.c: from package index file to avoid keeping numbers in
+ * win/rules.vc: the makefile where they may become de-synchronized.
+
+2007-01-10 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/regcomp.c (compile, freev): Define a strategy for
+ * generic/regexec.c (exec): managing the internal
+ * generic/regguts.h (AllocVars, FreeVars): vars of the RE engine to
+ * generic/regcustom.h (AllocVars, FreeVars): reduce C stack usage.
+ This will make Tcl as a whole much less likely to run out of stack
+ space...
+
+2007-01-09 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileLindexCmd):
+ * tests/lindex.test (lindex-9.2): Fix silly bug that ended up
+ sometimes compiling list arguments in the wrong order. [Bug 1631364]
+
+2007-01-03 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclDate.c: Regenerated to recover a lost fix from patthoyts.
+ [Bug 1618523]
+
+2006-12-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclIO.c (Tcl_GetsObj): Avoid checking for for the LF in a
+ possible CRLF sequence when EOF has already been found.
+
+2006-12-26 Mo DeJong <mdejong@users.sourceforge.net>
+
+ * generic/tclEncoding.c (EscapeFromUtfProc): Clear the
+ TCL_ENCODING_END flag when end bytes are written. This fix keep this
+ method from writing escape bytes for an encoding like iso2022-jp
+ multiple times when the escape byte overlap with the end of the IO
+ buffer.
+ * tests/io.test: Add test for escape byte overlap issue.
+
+2006-12-19 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * unix/tclUnixThrd.c (Tcl_GetAllocMutex, TclpNewAllocMutex): Add
+ intermediate variables to shut up unwanted warnings. [Bug 1618838]
+
+2006-12-19 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixThrd.c (TclpInetNtoa): fix for 64 bit.
+
+ * unix/tcl.m4 (Darwin): --enable-64bit: verify linking with 64bit
+ -arch flag succeeds before enabling 64bit build.
+ * unix/configure: autoconf-2.59
+
+2006-12-17 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/macOSXLoad.test (new file): add testing of .bundle loading and
+ * tests/load.test: unloading on Darwin (in addition
+ * tests/unload.test: to existing tests of .dylib
+ loading).
+ * macosx/Tcl.xcodeproj/project.pbxproj: add building of dltest
+ binaries so that testsuite run from Xcode can use them; fix testsuite
+ run script
+ * unix/configure.in: add support for building dltest binaries as
+ * unix/dltest/Makefile.in: .bundle (in addition to .dylib) on Darwin.
+ * unix/Makefile.in: add stub lib dependency to dltest target.
+ * unix/configure: autoconf-2.59
+
+ * tests/append.test: fix cleanup failure when all tests are skipped.
+
+ * tests/chan.test (chan-16.9): cleanup chan event handler to avoid
+ causing error in event.test when running testsuite with -singleproc 1.
+
+ * tests/info.test: add !singleTestInterp constraint to tests that fail
+ when running testsuite with -singleproc 1. [Bug 1605269]
+
+2006-12-14 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/string.n: Fix example. [Bug 1615277]
+
+2006-12-12 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Now that the new internal structs are
+ in use to support operator commands, might as well make them the
+ default for [expr] as well and avoid passing every parsed expression
+ through the inefficient Tcl_Token array format. This addresses most
+ issues in [RFE 1517602]. Assuming no performance disasters result from
+ this, much dead code supporting the other implementation might now be
+ removed.
+
+ * generic/tclBasic.c: Final step routing all direct evaluation forms
+ * generic/tclCompExpr.c: of the operator commands through TEBC,
+ * generic/tclCompile.h: dropping all the routines in tclMathOp.c.
+ * generic/tclMathOp.c: Still needs Engineering Manual attention.
+
+2006-12-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Another step with all sorting operator
+ * generic/tclCompExpr.c: commands now routing through TEBC via
+ * generic/tclCompile.h: TclSortingOpCmd().
+
+2006-12-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Another step down the path of re-using
+ * generic/tclCompExpr.c: TclExecuteByteCode to implement the TIP 174
+ * generic/tclCompile.h: commands instead of using a mass of code
+ * generic/tclMathOp.c: duplication. Now all operator commands that
+ * tests/mathop.test: demand exactly one operation are implemented
+ via TclSingleOpCmd and a call to TEBC.
+
+ * generic/tclCompExpr.c: Revised implementation of TclInvertOpCmd to
+ * generic/tclMathOp.c: perform a bytecode compile / execute sequence.
+ This demonstrates a path toward avoiding mountains of code duplication
+ in tclMathOp.c and tclExecute.c.
+
+ * generic/tclCompile.h: Change TclExecuteByteCode() from static to
+ * generic/tclExecute.c: MODULE_SCOPE so all files including
+ tclCompile.h may call it.
+
+ * generic/tclMathOp.c: More revisions to make tests pass.
+ * tests/mathop.test:
+
+2006-12-08 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclNamesp.c (TclTeardownNamespace): Ensure that dying
+ namespaces unstitch themselves from their referents. [Bug 1571056]
+ (NsEnsembleImplementationCmd): Silence GCC warning.
+
+ * tests/mathop.test: Full tests for & | and ^ operators
+
+2006-12-08 Daniel Steffen <das@users.sourceforge.net>
+
+ * library/tcltest/tcltest.tcl: use [info frame] for "-verbose line".
+
+2006-12-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c: Additional commits correct most
+ * generic/tclExecute.c: failing tests illustrating bugs
+ * generic/tclMathOp.c: uncovered in [Patch 1578137].
+
+ * generic/tclBasic.c: Biggest source of TIP 174 failures was that
+ the commands were not [namespace export]ed from the ::tcl::mathop
+ namespace. More bits from [Patch 1578137] correct that.
+
+ * tests/mathop.test: Commmitted several new tests from Peter Spjuth
+ found in [Patch 1578137]. Many failures now demonstrate issues to fix
+ in the TIP 174 implementation.
+
+2006-12-07 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/mathop.test: Added tests for ! ~ eq operators.
+ * generic/tclMathOp.c (TclInvertOpCmd): Add in check for non-integral
+ numeric values.
+ * generic/tclCompCmds.c (CompileCompareOpCmd): Factor out the code
+ generation for the chained comparison operators.
+
+2006-12-07 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/exec.test: Fixed line endings (caused win32 problems).
+
+2006-12-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompCmds.c: Revised and consolidated into utility
+ * tests/mathop.test: routines some of routines that compile
+ the new TIP 174 commands. This corrects some known bugs. More to come.
+
+2006-12-06 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/expr.test (expr-47.12): Improved error reporting in hopes of
+ having more information to pursue [Bug 1609936].
+
+2006-12-05 Andreas Kupries <andreask@activestate.com>
+
+ TIP#291 IMPLEMENTATION
+
+ * generic/tclBasic.c: Define tcl_platform element for pointerSize.
+ * doc/tclvars.n:
+
+ * win/Makefile.in: Added installation instructions for the platform
+ * win/makefile.vc: package. Added the platform package.
+ * win/makefile.bc:
+ * unix/Makefile.in:
+
+ * tests/platform.test:
+ * tests/safe.test:
+
+ * library/platform/platform.tcl:
+ * library/platform/shell.tcl:
+ * library/platform/pkgIndex.tcl:
+
+ * doc/platform.n:
+ * doc/platform_shell.n:
+
+2006-12-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPkg.c: When no requirements are supplied to a
+ * tests/pkg.test: [package require $pkg] and [package unknown]
+ is invoked to find a satisfying package, pass the requirement argument
+ "0-" (which means all versions are acceptable). This permits a
+ registered [package unknown] command to call [package vsatisfies
+ $testVersion {*}$args] without any special handling of the empty $args
+ case. This fixes/avoids a bug in [::tcl::tm::UnknownHandler] that was
+ causing old TM versions to be provided in preference to newer TM
+ versions. Thanks to Julian Noble for discovering the issue.
+
+2006-12-04 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP#267 IMPLEMENTATION
+
+ * generic/tclIOCmd.c (Tcl_ExecObjCmd): Added -ignorestderr option,
+ * tests/exec.test, doc/exec.n: loosely from [Patch 1476191]
+
+2006-12-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Added implementation for the
+ CompileExprTree() routine that can produce expression bytecode
+ directly from internal structures with no need to pass through the
+ Tcl_Token array representation. Still disabled by default. #undef
+ USE_EXPR_TOKENS to try it out.
+
+2006-12-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Added expr parsing routines that
+ produce a different set of internal structures representing the parsed
+ expression, as well as routines that go on to convert those structures
+ into the traditional Tcl_Token array format. Use of these routines is
+ currently disabled. #undef PARSE_DIRECT_EXPR_TOKENS to enable them.
+ These routines will only become really useful when more routines that
+ compile directly from the new internal structures are completed.
+
+2006-12-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/file.n: Clarification of [file pathtype] docs. [Bug 1606454]
+
+2006-12-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * libtommath/bn_mp_add.c: Corrected the effects of a
+ * libtommath/bn_mp_div.c: bollixed 'cvs merge' operation
+ * libtommath/bncore.c: that inadvertently committed some
+ * libtommath/tommath_class.h: half-developed code.
+
+ TIP#299 IMPLEMENTATION
+
+ * doc/mathfunc.n: Added isqrt() function to docs
+ * generic/tclBasic.c: Added isqrt() math function (ExprIsqrtFunc)
+ * tests/expr.test (expr-47.*): Added tests for isqrt()
+ * tests/info.test (info-20.2): Added isqrt() to expected math funcs.
+
+2006-12-01 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/chan.test: Correct timing sensitivity in new test. [Bug
+ 1606860]
+
+ TIP#287 IMPLEMENTATION
+
+ * doc/chan.n: New subcommand [chan pending].
+ * generic/tclBasic.c: Thanks to Michael Cleverly for proposal
+ * generic/tclInt.h: and implementation.
+ * generic/tclIOCmd.c:
+ * library/init.tcl:
+ * tests/chan.test:
+ * tests/ioCmd.test:
+
+ TIP#298 IMPLEMENTATION
+
+ * generic/tcl.decls: Tcl_GetBignumAndClearObj -> Tcl_TakeBignumFromObj
+ * generic/tclObj.c:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclExecute.c: Update callers.
+ * generic/tclMathOp.c:
+
+2006-11-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata: Olson's tzdata2006p.
+ * libtommath/bn_mp_sqrt.c: Fixed a bug where the initial approximation
+ to the square root could be on the wrong side, causing failure of
+ convergence.
+
+2006-11-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (Tcl_AppendObjToErrorInfo): Added
+ Tcl_DecrRefCount() on the objPtr argument to plug memory leaks. This
+ makes the routine a consumer, which makes it easiest to use.
+
+2006-11-28 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c: TIP #280 implementation.
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclCompCmds.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclIOUtil.c:
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * tests/compile.test:
+ * tests/info.test:
+ * tests/platform.test:
+ * tests/safe.test:
+
+2006-11-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/tclUnixChan.c (TclUnixWaitForFile):
+ * tests/event.test (event-14.*): Corrected a bug where
+ TclUnixWaitForFile would present select() with the wrong mask on an
+ LP64 machine if a fd number exceeds 32. Thanks to Jean-Luc Fontaine
+ for reporting and diagnosing. [Bug 1602208]
+
+2006-11-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (TclIncrObj): Correct failure to detect
+ floating-point increment values. Thanks to William Coleda [Bug
+ 1602991]
+
+2006-11-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/mathop.test, doc/mathop.n: More bits and pieces of the TIP#174
+ implementation. Note that the test suite is not yet complete.
+
+2006-11-26 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4 (Linux): --enable-64bit support. [Patch 1597389]
+ * unix/configure: autoconf-2.59 [Bug 1230558]
+
+2006-11-25 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP#174 IMPLEMENTATION
+
+ * generic/tclMathOp.c (new file): Completed the implementation of the
+ interpreted versions of all the tcl::mathop commands. Moved to a new
+ file to make tclCompCmds.c more focused in purpose.
+
+2006-11-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (Tcl*OpCmd, TclCompile*OpCmd):
+ * generic/tclBasic.c (Tcl_CreateInterp): Partial implementation of
+ TIP#174; the commands are compiled, but (mostly) not interpreted yet.
+
+2006-11-22 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP#269 IMPLEMENTATION
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Implementation of the [string
+ * tests/string.test (string-25.*): is list] command, based on
+ * doc/string.n: work by Joe Mistachkin, with
+ enhancements by Donal Fellows for better failindex behaviour.
+
+2006-11-22 Don Porter <dgp@users.sourceforge.net>
+
+ * tools/genWinImage.tcl (removed): Removed two files used in
+ * win/README.binary (removed): production of binary distributions
+ for Windows, a task we no longer perform. [Bug 1476980]
+ * generic/tcl.h: Remove mention of win/README.binary in comment
+
+ * generic/tcl.h: Moved TCL_REG_BOSONLY #define from tcl.h to
+ * generic/tclInt.h: tclInt.h. Only know user is Expect, which
+ already #include's tclInt.h. No need to continue greater exposure.
+ [Bug 926500]
+
+2006-11-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_CreateInterp, TclHideUnsafeCommands):
+ * library/init.tcl: Refactored the [chan] command's guts so that it
+ does not use aliases to global commands, making the code more robust.
+
+2006-11-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (INST_EXPON): Corrected crash on
+ [expr 2**(1<<63)]. Was operating on cleared bignum Tcl_Obj.
+
+2006-11-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/apply.n, doc/chan.n: Added examples.
+
+2006-11-15 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#270 IMPLEMENTATION
+
+ * generic/tcl.decls: New public routines Tcl_ObjPrintf,
+ * generic/tclStringObj.c: Tcl_AppendObjToErrorInfo, Tcl_Format,
+ * generic/tclInt.h: Tcl_AppendLimitedToObj,
+ Tcl_AppendFormatToObj and Tcl_AppendPrintfToObj. Former internal
+ versions removed.
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclBasic.c: Updated callers.
+ * generic/tclCkalloc.c:
+ * generic/tclCmdAH.c:
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclCompExpr.c:
+ * generic/tclCompile.c:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * generic/tclIORChan.c:
+ * generic/tclIOUtil.c:
+ * generic/tclMain.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclPkg.c:
+ * generic/tclProc.c:
+ * generic/tclStrToD.c:
+ * generic/tclTimer.c:
+ * generic/tclUtil.c:
+ * unix/tclUnixFCmd.c:
+
+ * tools/genStubs.tcl: Updated script to no longer produce the
+ _ANSI_ARGS_ wrapper in generated declarations. Also revised to accept
+ variadic prototypes with more than one fixed argument. (This is
+ possible since TCL_VARARGS and its limitations are no longer in use).
+ * generic/tcl.h: Some reordering so that macro definitions do
+ not interfere with the now _ANSI_ARGS_-less stub declarations.
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclTomMathDecls.h:
+
+2006-11-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/ChnlStack.3, doc/CrtObjCmd.3, doc/GetIndex.3, doc/OpenTcp.3:
+ * doc/chan.n, doc/fconfigure.n, doc/fcopy.n, doc/foreach.n:
+ * doc/history.n, doc/http.n, doc/library.n, doc/lindex.n:
+ * doc/lrepeat.n, doc/lreverse.n, doc/pkgMkIndex.n, doc/re_syntax.n:
+ Convert \fP to \fR so that man-page scrapers have an easier time.
+
+2006-11-14 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#261 IMPLEMENTATION
+
+ * generic/tclNamesp.c: [namespace import] with 0 arguments
+ introspects the list of imported commands.
+
+2006-11-13 Kevin B. Kenny <kennykb@users.sourceforge.net>
+
+ * generic/tclThreadStorage.c (Tcl_InitThreadStorage):
+ (Tcl_FinalizeThreadStorage): Silence a compiler warning about
+ presenting a volatile pointer to 'memset'.
+
+2006-11-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIO.c: When [gets] on a binary channel needs to use
+ the "iso8859-1" encoding, save a copy of that encoding per-thread to
+ avoid repeated freeing and re-loading of it from the file system. This
+ replaces the cached copy of this encoding that the platform
+ initialization code used to keep in pre-8.5 releases.
+
+2006-11-13 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Fix gcc warnings about 'cast to/from
+ * generic/tclEncoding.c: pointer from/to integer of different
+ * generic/tclEvent.c: size' on 64-bit platforms by casting
+ * generic/tclExecute.c: to intermediate types
+ * generic/tclHash.c: intptr_t/uintptr_t via new PTR2INT(),
+ * generic/tclIO.c: INT2PTR(), PTR2UINT() and UINT2PTR()
+ * generic/tclInt.h: macros. [Patch 1592791]
+ * generic/tclProc.c:
+ * generic/tclTest.c:
+ * generic/tclThreadStorage.c:
+ * generic/tclTimer.c:
+ * generic/tclUtil.c:
+ * unix/configure.in:
+ * unix/tclUnixChan.c:
+ * unix/tclUnixPipe.c:
+ * unix/tclUnixPort.h:
+ * unix/tclUnixTest.c:
+ * unix/tclUnixThrd.c:
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2006-11-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h, generic/tclInt.decls: Transfer TclPtrMakeUpvar and
+ TclObjLookupVar to the internal stubs table.
+
+2006-11-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/fCmd.test (fCmd-6.26): fix failure when env(HOME) path
+ contains symlinks.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: remove tclParseExpr.c; when
+ running testsuite from inside Xcdoe, skip stack-3.1 (it only fails
+ under those circumstances).
+
+ * unix/tcl.m4 (Darwin): suppress linker arch warnings when building
+ universal for both 32 & 64 bit and no 64bit CoreFoundation is
+ available; sync with tk tcl.m4 change.
+ * unix/configure.in: whitespace.
+ * unix/configure: autoconf-2.59
+
+2006-11-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c (removed): Moved all the code of
+ * generic/tclCompExpr.c: tclParseExpr.c into tclCompExpr.c.
+ * unix/Makefile.in: This sets the stage for expr compiling to work
+ * win/Makefile.in: directly with the full parse tree structures,
+ * win/makefile.bc: and not have to pass through the information
+ * win/makefile.vc: lossy format of an array of Tcl_Tokens.
+ * win/tcl.dsp:
+
+2006-11-09 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ TIP#272 IMPLEMENTATION
+
+ * generic/tclCmdMZ.c (Tcl_StringObjCmd): Implementation of the
+ * tests/string.test, tests/stringComp.test: [string reverse] command
+ * doc/string.n: from TIP#272.
+
+ * generic/tclCmdIL.c (Tcl_LreverseObjCmd): Implementation of the
+ * generic/tclBasic.c, generic/tclInt.h: [lreverse] command from
+ * tests/cmdIL.test (cmdIL-7.*): TIP#272.
+ * doc/lreverse.n:
+
+2006-11-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIO.c, generic/tclPkg.c: Style & clarity rewrites.
+
+2006-11-07 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixFCmd.c (CopyFile): Added code to fall back to a
+ hardwired default block size should the filesystem report a bogus
+ value. [Bug 1586470]
+
+2006-11-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Changed Tcl_ObjPrintf() response to an
+ invalid format specifier string. No longer panics; now produces an
+ error message as output.
+
+ TIP#274 IMPLEMENTATION
+
+ * generic/tclParseExpr.c: Exponentiation operator is now right
+ * tests/expr.test: associative. [Patch 1556802]
+
+2006-11-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TEOVI): fix por possible leak of a Command in
+ the presence of execution traces that delete it.
+
+ * generic/tclBasic.c (TEOVI):
+ * tests/trace.test (trace-21.11): fix for [Bug 1590232], execution
+ traces may cause a second command resolution in the wrong namespace.
+
+2006-11-03 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/event.test (event-11.5): Rewrote tests to stop Tcl from
+ * tests/io.test (multiple tests): opening sockets that are
+ * tests/ioCmd.test (iocmd-15.1,16,17): reachable from outside hosts
+ * tests/iogt.test (__echo_srv__.tcl): where not necessary. This is
+ * tests/socket.test (multiple tests): noticably annoying on some
+ * tests/unixInit.test (unixInit-1.2): systems (e.g., Windows).
+
+2006-11-02 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: check autoconf/autoheader exit
+ status and stop build if they fail.
+
+2006-11-02 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/ParseCmd.3, doc/Tcl.n, doc/eval.n, doc/exec.n:
+ * doc/fconfigure.n, doc/interp.n, doc/unknown.n:
+ * library/auto.tcl, library/init.tcl, library/package.tcl:
+ * library/safe.tcl, library/tm.tcl, library/msgcat/msgcat.tcl:
+ * tests/all.tcl, tests/basic.test, tests/cmdInfo.test:
+ * tests/compile.test, tests/encoding.test, tests/execute.test:
+ * tests/fCmd.test, tests/http.test, tests/init.test:
+ * tests/interp.test, tests/io.test, tests/ioUtil.test:
+ * tests/iogt.test, tests/namespace-old.test, tests/namespace.test:
+ * tests/parse.test, tests/pkg.test, tests/pkgMkIndex.test:
+ * tests/proc.test, tests/reg.test, tests/trace.test:
+ * tests/upvar.test, tests/winConsole.test, tests/winFCmd.test:
+ * tools/tclZIC.tcl:
+ * generic/tclParse.c (Tcl_ParseCommand): Replace {expand} with {*}
+ officially (TIP #293). Leave -DALLOW_EXPAND=0|1 option to keep
+ {expand} syntax for transition users. [Bug 1589629]
+
+2006-11-02 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclBasic.c, generic/tclInterp.c, generic/tclProc.c: Silence
+ warnings from gcc over signed/unsigned and TclStackAlloc().
+ * generic/tclCmdMZ.c: Update to more compact and clearer coding style.
+
+2006-11-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCmdAH.c: Further revisions to produce the routines
+ * generic/tclInt.h: TclFormat() and TclAppendFormatToObj() that
+ * generic/tclNamesp.c: accept (objc, objv) arguments rather than
+ * generic/tclStringObj.c: any varargs stuff.
+
+ * generic/tclBasic.c: Further revised TclAppendPrintToObj() and
+ * generic/tclCkalloc.c: TclObjPrintf() routines to panic when unable
+ * generic/tclCmdAH.c: to complete their formatting operations,
+ * generic/tclCmdIL.c: rather than report an error message. This
+ * generic/tclCmdMZ.c: means an interp argument for error message
+ * generic/tclDictObj.c: recording is no longer needed, further
+ * generic/tclExecute.c: simplifying the interface for callers.
+ * generic/tclIORChan.c:
+ * generic/tclIOUtil.c:
+ * generic/tclInt.h:
+ * generic/tclMain.c:
+ * generic/tclNamesp.c:
+ * generic/tclParseExpr.c:
+ * generic/tclPkg.c:
+ * generic/tclProc.c:
+ * generic/tclStringObj.c:
+ * generic/tclTimer.c:
+ * generic/tclUtil.c:
+ * unix/tclUnixFCmd.c:
+
+2006-11-02 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/winPipe.test (winpipe-4.[2345]): Made robust when run in
+ directory with spaces in its name.
+
+ * generic/tclCmdAH.c: Clean up uses of cast NULLs.
+
+ * generic/tclInterp.c (AliasObjCmd): Added more explanatory comments.
+
+ * generic/tclBasic.c (TclEvalObjvInternal): Rewrote so that comments
+ are relevant and informative once more. Also made the unknown handler
+ processing use the Tcl execution stack for working space, and not the
+ general heap.
+
+2006-11-01 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixPort.h: ensure MODULE_SCOPE is defined before use, so
+ that tclPort.h can once again be included without tclInt.h.
+
+ * generic/tclEnv.c (Darwin): mark _environ symbol as unexported even
+ when MODULE_SCOPE != __private_extern__.
+
+2006-10-31 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Refactored and renamed the routines
+ * generic/tclCkalloc.c: TclObjPrintf, TclFormatObj, and
+ * generic/tclCmdAH.c: TclFormatToErrorInfo to a new set of routines
+ * generic/tclCmdIL.c: TclAppendPrintfToObj, TclAppendFormatToObj,
+ * generic/tclCmdMZ.c: TclObjPrintf, and TclObjFormat, with the
+ * generic/tclDictObj.c: intent of making the latter list, plus
+ * generic/tclExecute.c: TclAppendLimitedToObj and
+ * generic/tclIORChan.c: TclAppendObjToErrorInfo, public via a revised
+ * generic/tclIOUtil.c: TIP 270.
+ * generic/tclInt.h:
+ * generic/tclMain.c:
+ * generic/tclNamesp.c:
+ * generic/tclParseExpr.c:
+ * generic/tclPkg.c:
+ * generic/tclProc.c:
+ * generic/tclStringObj.c:
+ * generic/tclTimer.c:
+ * generic/tclUtil.c:
+ * unix/tclUnixFCmd.c:
+
+2006-10-31 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c, generic/tcl.h, generic/tclInterp.c:
+ * generic/tclNamesp.c: removing the flag bit TCL_EVAL_NOREWRITE, the
+ last remnant of the callObjc/v fiasco. It is not needed, as it is now
+ always set and checked or'ed with TCL_EVAL_INVOKE.
+
+2006-10-31 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/rules.vc: Fix for [Bug 1582769] - options conflict with VC2003.
+
+2006-10-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c, generic/tclNamesp.c, generic/tclProc.c:
+ * generic/tclInt.h: Removed the callObjc and callObjv fields from the
+ Interp structure. They did not function correctly and made other parts
+ of the core amazingly complex, resulting in a substantive change to
+ [info level] behaviour. [Bug 1587618]
+ * library/clock.tcl: Removed use of [info level 0] for calculating the
+ command name as used by the user and replace with a literal. What's
+ there now is sucky, but at least appears to be right to most users.
+ * tests/namespace.test (namespace-42.7,namespace-47.1): Reverted
+ changes to these tests.
+ * tests/info.test (info-9.11,info-9.12): Added knownBug constraint
+ since these tests require a different behaviour of [info level] than
+ is possible because of other dependencies.
+
+2006-10-30 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tools/tcltk-man2html.tcl (option-toc): handle any kind of options
+ defined toc section (needed for ttk docs)
+
+2006-10-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (TEOVI): insured that the interp's callObjc/v
+ fields are restored after traces run, as they be spoiled. This was
+ causing a segfault in tcllib's profiler tests.
+
+2006-10-30 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (INST_MOD): Corrected improper testing of the
+ * tests/expr.test: sign of bignums when applying Tcl's
+ division rules. Thanks to Peter Spjuth. [Bug 1585704]
+
+2006-10-29 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (EnsembleImplementationCmd):
+ * tests/namespace.test (47.7-8): reverted a wrong "optimisation" that
+ completely broke snit; added two tests.
+
+2006-10-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclProc.c (ObjInterpProcEx, TclObjInterpProcCore): Split the
+ core of procedures to make it easier to build procedure-like code
+ without going through horrible contortions. This is the last critical
+ component to make advanced OO systems workable as simple loadable
+ extensions. TOIPC is now in the internal stub table.
+ (MakeProcError, MakeLambdaError): Refactored ProcessProcResultCode to
+ be simpler, some of which goes to TclObjInterpProcCore, and the rest
+ of which is now in these far simpler routines which just do errorInfo
+ stack generation for different types of procedure-like entity.
+ * tests/apply.test (apply-5.1): Updated to expect the more informative
+ form of message.
+
+2006-10-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclVar.c (HasLocalVars): New macro to make various bits and
+ pieces cleaner.
+
+ * generic/tclNamesp.c (TclSetNsPath): Expose SetNsPath() through
+ internal stubs table with semi-external name.
+
+ * generic/tclInt.h (CallFrame): Add a field for handling context data
+ for extensions (like object systems) that should be tied to a call
+ frame (and not a command or interpreter).
+
+ * generic/tclBasic.c (TclRenameCommand): Change to take CONST args;
+ they were only ever used in a constant way anyway, so this appears to
+ be a spot that was missed during TIP#27 work.
+
+2006-10-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (SetLambdaFromAny): minor change, eliminate
+ redundant call to Tcl_GetString (thanks aku).
+
+ * generic/tclInterp.c (ApplyObjCmd):
+ * generic/tclNamesp.c (EnsembleImplementationCmd): replaced ckalloc
+ (heap) with TclStackAlloc (execution stack).
+
+2006-10-24 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/info.test (info-9.11-12): tests for [Bug 1577492]
+ * tests/apply.test (apply-4.3-5): tests for [Bug 1574835]
+
+ * generic/tclProc.c (ObjInterpProcEx): disable itcl hacks for calls
+ from ApplyObjCmd (islambda==1), as they mess apply's error messages
+ [Bug 1583266]
+
+2006-10-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (ApplyObjCmd): fix wrong#args for apply by using
+ the ensemble rewrite engine. [Bug 1574835]
+ * generic/tclInterp.c (AliasObjCmd): previous commit missed usage of
+ TCL_EVAL_NOREWRITE for aliases.
+
+ * generic/tclBasic.c (TclEvalObjvInternal): removed redundant check
+ for ensembles. [Bug 1577628]
+
+ * library/clock.tcl (format, scan): corrected wrong # args messages to
+ * tests/clock.test (3.1, 34.1): make use of the new rewrite
+ capabilities of [info level]
+
+ * generic/tcl.h: Lets TEOV update the iPtr->callObj[cv] new
+ * generic/tclBasic.c: fields, except when the flag bit
+ * generic/tclInt.h: TCL_EVAL_NOREWRITE is present. These values
+ * generic/tclNamesp.c: are used by Tcl_PushCallFrame to initialise
+ * generic/tclProc.c: the frame's obj[cv] fields, and allows
+ * tests/namespace.test: [info level] to know and use ensemble
+ rewrites. [Bug 1577492]
+
+ ***POTENTIAL INCOMPATIBILITY***
+ The return value from [info level 0] on interp alias calls is changed:
+ previously returned the target command (including curried values), now
+ returns the source - what was actually called.
+
+2006-10-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tcl.h: Modified the Tcl call stack so there is
+ * generic/tclBasic.c: always a valid CallFrame, even at level 0
+ * generic/tclCmdIL.c: [Patch 1577278]. Most of the changes
+ * generic/tclInt.h: involve removing tests for a NULL
+ * generic/tclNamesp.c: iPtr->(var)framePtr. There is now a
+ * generic/tclObj.c: CallFrame pushed at interp creation with a
+ * generic/tclProc.c: pointer to it stored in iPtr->rootFramePtr.
+ * generic/tclTrace.c: A second unused field in Interp is
+ * generic/tclVar.c: hijacked to enable further functionality,
+ currently unused (but with several FRQs depending on it).
+
+ ***POTENTIAL INCOMPATIBILITY***
+ Any user that includes tclInt.h and needs to determine if it is
+ running at level 0 should change (iPtr->varFramePtr == NULL) to
+ (iPtr->varFramePtr == iPtr->rootFramePtr).
+
+2006-10-23 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bump version number to 8.5a6
+ * generic/tcl.h:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2006-10-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tcl.h, generic/tclHash.c: Tcl_FindHashEntry now calls
+ Tcl_CreateHashEntry with a newPtr set to NULL: this would have caused
+ a segfault previously and eliminates duplicated code. A macro has been
+ added to tcl.h (only used when TCL_PRESERVE_BINARY_COMPATABALITY is
+ not set - i.e., not by default).
+
+2006-10-20 Reinhard Max <max@tclers.tk>
+
+ * unix/configure.in: Added autodetection for OS-supplied timezone
+ * unix/Makefile.in: files and configure switches to override the
+ * unix/configure: detected default.
+
+2006-10-20 Daniel Steffen <das@users.sourceforge.net>
+
+ *** 8.5a5 TAGGED FOR RELEASE ***
+
+ * tools/tcltk-man2html.tcl: add support for alpha & beta versions to
+ useversion glob pattern. [Bug 1579941]
+
+2006-10-18 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: 8.5a5 release date set
+
+ * doc/Encoding.3: Missing doc updates (mostly Table of
+ * doc/Ensemble.3: Contents) exposed by `make checkdoc`
+ * doc/FileSystem.3:
+ * doc/GetTime.3:
+ * doc/PkgRequire.3:
+
+2006-10-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInterp.c (ApplyObjCmd): fixed bad error in 2006-10-12
+ commit: interp released too early. Spotted by mistachkin.
+
+2006-10-16 Miguel Sofer <msofer@users.sf.net>
+
+ * tclProc.c (SetLambdaFromAny):
+ * tests/apply.test (9.1-9.2): plugged intrep leak [Bug 1578454],
+ found by mjanssen.
+
+2006-10-16 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c: Moved TIP#219 cleanup to DeleteInterpProc.
+
+2006-10-16 Daniel Steffen <das@users.sourceforge.net>
+
+ * changes: updates for 8.5a5 release.
+
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): Darwin: fix for main
+ thread, where pthread_get_stacksize_np() returns incorrect info.
+
+ * macosx/GNUmakefile: don't redo prebinding of non-prebound binaires.
+
+2006-10-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPkg.c (ExactRequirement): Plugged memory leak. Also
+ changed Tcl_Alloc()/Tcl_Free() calls to ckalloc()/ckfree() for easier
+ memory debugging in the future. [Bug 1568373]
+
+ * library/tcltest/tcltest.tcl: Revise tcltest bump to 2.3a1.
+ * library/tcltest/pkgIndex.tcl: This permits more features to be
+ * unix/Makefile.in: added to tcltest before we reach version 2.3.0
+ * win/Makefile.in: best timed to match the release of Tcl 8.5.0.
+ * win/makefile.vc: This also serves as a demo of TIP 268 features
+
+2006-10-13 Colin McCormack <coldstore@users.sf.net>
+
+ * win/tclWinFile.c: corrected erroneous attempt to protect against
+ NULL return from Tcl_FSGetNormalizedPath per [Bug 1548263] causing
+ [Bug 1575837].
+ * win/tclWinFile.c: alfredd supplied patch to fix [Bug 1575837]
+
+2006-10-13 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): on Darwin, use
+ * unix/tcl.m4: pthread_get_stacksize_np() API to get thread stack size
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2006-10-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInterp.c (ApplyObjCmd):
+ * tests/interp.test (interp-14.5-10): made [interp alias] use the
+ ensemble rewrite machinery to produce better error messages [Bug
+ 1576006]
+
+2006-10-12 David Gravereaux <davygrvy@pobox.com>
+
+ * win/nmakehlp.c: Replaced all wnsprintf() calls with snprintf().
+ wnsprintf was not in my shwlapi header file (VC++6)
+
+2006-10-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPkg.c (Tcl_PackageRequireEx): Corrected crash when
+ argument version=NULL passed in.
+
+2006-10-10 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.5a5 release.
+
+ * generic/tclNamespace.c (TclTeardownNamespace): After the
+ commandPathSourceList of a namespace is cleared, set the
+ commandPathSourceList to NULL so we don't try to walk the list a
+ second time, possibly after it is freed. [Bug 1566526]
+ * tests/namespace.test (namespace-51.16): Added test.
+
+2006-10-09 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/UpVar.3: brough the docs in accordance to the code. Ever since
+ 8.0, Tcl_UpVar(2)? accepts TCL_NAMESPACE_ONLY as a flag value, and
+ var-3.4 tests for proper behaviour. The docs only allowed 0 and
+ TCL_GLOBAL_ONLY. [Bug 1574099]
+
+2006-10-09 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/*.test: updated all tests to refer explicitly to the global
+ variables ::errorInfo, ::errorCode, ::env and ::tcl_platform: many
+ were relying on the alternative lookup in the global namespace, that
+ feature is tested specifically in namespace and variable tests.
+
+ The modified testfiles are: apply.test, basic.test, case.test,
+ cmdIL.test, cmdMZ.test, compExpr-old.test, error.test, eval.test,
+ event.test, expr.test, fileSystem.test, for.test, http.test, if.test,
+ incr-old.test, incr.test, interp.test, io.test, ioCmd.test, load.test,
+ misc.test, namespace.test, parse.test, parseOld.test, pkg.test,
+ proc-old.test, set.test, switch.test, tcltest.test, thread.test,
+ var.test, while-old.test, while.test.
+
+2006-10-06 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/rules.vc: [Bug 1571954] avoid /RTCc flag with MSVC8
+
+2006-10-06 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * doc/binary.n: TIP #275: Support unsigned values in binary
+ * generic/tclBinary.c: command. Tests and documentation updated.
+ * tests/binary.test:
+
+2006-10-05 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl: Fixed bug in TIP #189 implementation, now allowing
+ '_' in module names.
+
+2006-10-05 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/http/http.tcl (http::geturl): only do geturl url rfc 3986
+ validity checking if $::http::strict is true (default true for 8.5).
+ [Bug 1560506]
+
+ * generic/tcl.h: note limitation on changing Tcl_UniChar size
+ * generic/tclEncoding.c (UtfToUnicodeProc, UnicodeToUtfProc):
+ * tests/encoding.test (encoding-16.1): fix alignment issues in
+ unicode <> utf conversion procs. [Bug 1122671]
+
+2006-10-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (Tcl_LappendObjCmd):
+ * tests/append.test(4.21-22): fix for longstanding [Bug 1570718],
+ lappending nothing to non-list. Reported by lvirden
+
+2006-10-04 Kevin B. Kenny <kennykb@acm.org>
+
+ * tzdata/: Olson's tzdata2006m.
+
+2006-10-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/clock.test (clock-49.2): Removed a locale dependency that
+ caused a spurious failure in the German locale. [Bug 1567956]
+
+2006-10-01 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/Eval.3 (TclEvalObjv): added note on refCount management for the
+ elements of objv. [Bug 730244]
+
+2006-10-01 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinFile.c: Handle possible missing define.
+
+ * win/tclWinFile.c (TclpUtime): [Bug 1420432] file mtime fails for
+ * tests/cmdAH.test: directories on windows
+
+ * tests/winFile.test: Handle Msys environment a little differently in
+ getuser function. [Bug 1567956]
+
+2006-09-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclUtil.c (Tcl_SplitList): optimisation, [Patch 1344747] by
+ dgp.
+
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclObj.c:
+ * generic/tclStubInit.c: added an internal function TclObjBeingDeleted
+ to provide info as to the reason for the loss of an internal rep. [FR
+ 1512138]
+
+ * generic/tclCompile.c:
+ * generic/tclHistory.c:
+ * generic/tclInt.h:
+ * generic/tclProc.c: made Tcl_RecordAndEvalObj not call "history" if
+ it has been redefined to an empty proc, in order to reduce the noise
+ when debugging [FR 1190441]. Moved TclCompileNoOp from tclProc.c to
+ tclCompile.c
+
+2006-09-28 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclPkg.c (CompareVersions): Bugfix. Check string lengths
+ * tests/pkg.test: before comparison. The shorter string is the smaller
+ number. Added testcases as well. Interestingly all existing test cases
+ for vcompare compared numbers of the same length with each other. [Bug
+ 1563836]
+
+2006-09-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclIO.c (Tcl_GetsObj): added two test'n'panic guards for
+ possible NULL derefs, [Bug 1566382] and coverity #33.
+
+2006-09-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrected error in INST_LSHIFT in the
+ * tests/expr.test: calculation done to determine whether a shift
+ in the (long int) type is possible. The calculation had literal value
+ "1" where it needed a value "1L" to compute the correct result. Error
+ detected via testing with the math::bigfloat package [Bug 1567222]
+
+ * generic/tclPkg.c (CompareVersion): Flatten strcmp() results to
+ {-1, 0, 1} to match expectations of CompareVersion() callers.
+
+2006-09-27 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/regc_color.c (singleton):
+ * generic/regc_cvec.c (addmcce):
+ * generic/regcomp.c (compile, dovec): the static function addmcce does
+ nothing when called with two NULL pointers; the only call is by
+ compile with two NULL pointers (regcomp.c #includes regc_cvec.c).
+ Large parts (all?) the code for mcce (multi character collating
+ element) that we do not use is ifdef'ed out with the macro
+ REGEXP_MCCE_ENABLE.
+ This silences coverity bugs 7, 16, 80
+
+ * generic/regc_color.c (uncolorchain):
+ * generic/regc_nfa.c (freearc): changed tests and asserts to
+ equivalent formulation, designed to avoid an explicit comparison to
+ NULL and satisfy coverity that 6 and 9 are not bugs.
+
+2006-09-27 Andreas Kupries <andreask@activestate.com>
+
+ * tests/pkg.test: Added test for version comparison at the 32bit
+ boundary. [Bug 1563836]
+
+ * generic/tclPkg.c: Rewrote CompareVersion to perform string
+ comparison instead of numeric. This breaks through the 32bit limit on
+ version numbers. See code for details (handling of leading zeros,
+ signs, etc.). un-CONSTed some arguments of CompareVersions,
+ RequirementSatisfied, and AllRequirementsSatisfied. The new compare
+ modifies the string (temporary string terminators). All callers use
+ heap-allocated ver-intreps, so we are good with that. [Bug 1563836]
+
+2006-09-27 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclFileName.c (TclGlob): added a panic for a call with
+ TCL_GLOBMODE_TAILS and pathPrefix==NULL. This would cause a segfault,
+ as found by coverity #26.
+
+2006-09-26 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/Encoding.3: Added covariant 'const' qualifier for the
+ * generic/tcl.decls: Tcl_EncodingType argument to
+ * generic/tclEncoding.c: Tcl_CreateEncoding. [Further TIP#27 work.]
+ * generic/tclDecls.h: Reran 'make genstubs'.
+
+2006-09-26 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Additional compiler flags and amd64 support.
+ * win/nmakehlp.c:
+ * win/rules.vc:
+
+2006-09-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: As 2006-09-22 commit from Donal K. Fellows
+ demonstrates, "#define NULL 0" is just wrong, and as a quotable chat
+ figure observed, "If NULL isn't defined, we're not using a C compiler"
+ Improper fallback definition of NULL removed.
+
+2006-09-25 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tcl.h: More fixing which struct stat to refer to.
+ * generic/tclGetDate.y: Some casts from time_t to int required.
+ * generic/tclTimer.c: Tcl_Time structure members are longs.
+ * win/makefile.vc: Support for varying compiler options
+ * win/rules.vc: and build to platform-specific subdirs.
+
+2006-09-25 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (Tcl_StackChannel): Fixed [Bug 1564642], aka
+ coverity #51. Extended loop condition, added checking for NULL to
+ prevent seg.fault.
+
+2006-09-25 Andreas Kupries <andreask@activestate.com>
+
+ * doc/package.n: Fixed nits reported by Daniel Steffen in the TIP#268
+ changes.
+
+2006-09-25 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclNotify.c (Tcl_DeleteEvents): Simplified the code in hopes
+ of making the invariants clearer and proving to Coverity that the
+ event queue memory is managed correctly.
+
+2006-09-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclNotify.c (Tcl_DeleteEvents): Make it clear what happens
+ when the event queue is mismanaged. [Bug 1564677], coverity bug #10.
+
+2006-09-24 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c (Tcl_ParseCommand): also return an error if
+ start==NULL and numBytes<0. This is coverity's bug #20
+
+ * generic/tclStringObj.c (STRING_SIZE): fix allocation for 0-length
+ strings. This is coverity's bugs #54-5
+
+2006-09-22 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclInt.h: Moved TIP#268's field 'packagePrefer' to the end
+ of the structure, for better backward compatibility.
+
+2006-09-22 Andreas Kupries <andreask@activestate.com>
+
+ TIP#268 IMPLEMENTATION
+
+ * generic/tclDecls.h: Regenerated from tcl.decls.
+ * generic/tclStubInit.c:
+
+ * doc/PkgRequire.3: Documentation of extended API, extended testsuite.
+ * doc/package.n:
+ * tests/pkg.test:
+
+ * generic/tcl.decls: Implementation.
+ * generic/tclBasic.c:
+ * generic/tclConfig.c:
+ * generic/tclInt.h:
+ * generic/tclPkg.c:
+ * generic/tclTest.c:
+ * generic/tclTomMathInterface.c:
+ * library/init.tcl:
+ * library/package.tcl:
+ * library/tm.tcl:
+
+2006-09-22 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclThreadTest.c (TclCreateThread): Use NULL instead of 0 as
+ end-of-strings marker to Tcl_AppendResult; the difference matters on
+ 64-bit machines. [Bug 1562528]
+
+2006-09-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclUtil.c: Dropped ParseInteger() routine. TclParseNumber
+ covers the task just fine.
+
+2006-09-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclEvent.c (Tcl_VwaitObjCmd): Rewrite so that an exceeded
+ limit trapped in a vwait cannot cause a dangerous dangling trace.
+
+2006-09-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (INST_EXPON): Native type overflow detection
+ * tests/expr.test: was completely broken. Falling back on use of
+ bignums for all non-trivial ** calculations until
+ native-type-constrained special cases can be done carefully and
+ correctly. [Bug 1561260]
+
+2006-09-15 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/http/http.tcl: Change " " -> "+" url encoding mapping
+ * library/http/pkgIndex.tcl: to " " -> "%20" as per RFC 3986.
+ * tests/http.test (http-5.1): bump http to 2.5.3
+ * unix/Makefile.in:
+ * win/Makefile.in:
+
+2006-09-12 Andreas Kupries <andreask@activestate.com>
+
+ * unix/configure.in (HAVE_MTSAFE_GETHOST*): Modified to recognize
+ HP-UX 11.00 and beyond as having mt-safe implementations of the
+ gethost functions.
+ * unix/configure: Regenerated, using autoconf 2.59
+
+ * unix/tclUnixCompat.c (PadBuffer): Fixed bug in calculation of the
+ increment needed to align the pointer, and added documentation
+ explaining why the macro is implemented as it is.
+
+2006-09-11 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/rules.vc: Updated to install http, tcltest and msgcat as
+ * win/makefile.vc: Tcl Modules (as per Makefile.in).
+ * win/makefile.vc: Added tommath_(super)class headers.
+
+2006-09-11 Andreas Kupries <andreask@activestate.com>
+
+ * unix/Makefile.in (install-libraries): Fixed typo tcltest 2.3.9 ->
+ 2.3.0.
+
+2006-09-11 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixCompat.c: make compatLock static and only declare it
+ when it will actually be used; #ifdef parts of TSD that are not always
+ needed; adjust #ifdefs to cover all possible cases; fix whitespace.
+
+2006-09-11 Andreas Kupries <andreask@activestate.com>
+
+ * tests/msgcat.test: Bumped version in auxiliary files as well.
+ * doc/msgcat.n:
+
+2006-09-11 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/Makefile.in: Bumped msgcat version to 1.4.2 to be
+ * win/Makefile.in: consistent with dgp's commits of 2006-09-10.
+
+2006-09-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/msgcat/msgcat.tcl: Removed some unneeded [uplevel]s.
+
+2006-09-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrected INST_EXPON flaw that treated
+ * tests/expr.test: $x**1 as $x**3. [Bug 1555371]
+
+ * doc/tcltest.n: Bump to version tcltest 2.3.0 to
+ * library/tcltest/pkgIndex.tcl: account for new "-verbose line"
+ * library/tcltest/tcltest.tcl: feature.
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.bc:
+ * win/makefile.vc:
+
+ * library/msgcat/msgcat.tcl: Bump to version msgcat 1.4.2 to
+ * library/msgcat/pkgIndex.tcl: account for modifications.
+
+2006-09-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * library/msgcat/msgcat.tcl (msgcat::Init): on Darwin, add fallback of
+ * tests/msgcat.test: default msgcat locale to
+ * unix/tclUnixInit.c (TclpSetVariables): current CFLocale
+ identifier if available (via private ::tcl::mac::locale global, set at
+ interp init when on Mac OS X 10.3 or later with CoreFoundation).
+
+ * library/tcltest/tcltest.tcl: add 'line' verbose level: prints source
+ * doc/tcltest.n: file line information of failing tests.
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add new tclUnixCompat.c file;
+ revise tests target to use new tcltest 'line' verbose level.
+
+ * unix/configure.in: add descriptions to new AC_DEFINEs for MT-safe.
+ * unix/tcl.m4: add caching to new SC_TCL_* macros for MT-safe wrappers
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2006-09-08 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixCompat.c: Added fallback to gethostbyname() and
+ gethostbyaddr() if the implementation is known to be MT-safe
+ (currently for Darwin 6 or later only).
+
+ * unix/configure.in: Assume gethostbyname() and gethostbyaddr() are
+ MT-safe starting with Darwin 6 (Mac OSX 10.2).
+
+ * unix/configure: Regenerated with autoconf V2.59
+
+2006-09-08 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixCompat.c: Fixed conditions for CopyArray/CopyString, and
+ CopyHostent. Also fixed bad var names in TclpGetHostByName.
+
+2006-09-07 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixCompat.c: Added fallback to MT-unsafe library calls if
+ TCL_THREADS is not defined.
+ Fixed alignment of arrays copied by CopyArray() to be on the
+ sizeof(char *) boundary.
+
+2006-09-07 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixChan.c: Rewritten MT-safe wrappers to return ptrs to
+ * unix/tclUnixCompat.c: TSD storage making them all look like their
+ * unix/tclUnixFCmd.c: MT-unsafe pendants API-wise.
+ * unix/tclUnixPort.h:
+ * unix/tclUnixSock.c:
+
+2006-09-06 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * unix/tclUnixChan.c: Added TCL_THREADS ifdef'ed usage of MT-safe
+ * unix/tclUnixFCmd.c: calls like: getpwuid, getpwnam, getgrgid,
+ * unix/tclUnixSock.c: getgrnam, gethostbyname and gethostbyaddr.
+ * unix/tclUnixPort.h: See [Bug 999544]
+ * unix/Makefile.in:
+ * unix/configure.in:
+ * unix/tcl.m4:
+ * unix/configure: Regenerated.
+
+ * unix/tclUnixCompat.c: New file containing MT-safe implementation of
+ some library calls.
+
+2006-09-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Removed much complexity that is no
+ longer needed.
+
+ * tests/main.text (Tcl_Main-4.4): Test corrected to not be
+ timing sensitive to the Bug 1481986 fix. [Bug 1550858]
+
+2006-09-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/package.n: correct package example
+
+2006-08-31 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Corrected flawed logic for disabling
+ the INST_TRY_CVT_TO_NUMERIC instruction at the end of an expression
+ when function arguments contain operators. [Bug 1541274]
+
+ * tests/expr-old.test: The remaining failing tests reported in
+ * tests/expr.test: [Bug 1381715] are all new in Tcl 8.5, so
+ there's really no issue of compatibility with Tcl 8.4 result to deal
+ with. Fixed by updating tests to expect 8.5 results.
+
+2006-08-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Dropped the old expr parser.
+
+2006-08-30 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclBasic.c (Tcl_CreateInterp): init iPtr->threadId
+
+ * win/tclWinChan.c [Bug 819667] Improve logic for identifying COM
+ ports.
+
+ * generic/tclIOGT.c (ExecuteCallback):
+ * generic/tclPkg.c (Tcl_PkgRequireEx): replace Tcl_GlobalEval(Obj)
+ with more efficient Tcl_Eval(Obj)Ex
+
+ * unix/Makefile.in (valgrindshell): add valgrindshell target and
+ update default VALGRINDARGS. User can override, or add to it with
+ VALGRIND_OPTS env var.
+
+ * generic/tclFileName.c (DoGlob): match incrs with decrs.
+
+2006-08-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Use the "parent" field of orphan
+ ExprNodes to store the closure of left pointers. This lets us avoid
+ repeated re-scanning leftward for the left boundary of subexpressions,
+ which in worst case led to near O(N^2) runtime.
+
+2006-08-29 Joe Mistachkin <joe@mistachkin.com>
+
+ * unix/tclUnixInit.c: Fixed the issue (typo) that was causing
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): stack.test to fail on
+ FreeBSD (and possibly other Unix platforms).
+
+2006-08-29 Colin McCormack <coldstore@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: Added test for NULL return from
+ * generic/tclPathObj.c: Tcl_FSGetNormalizedPath which was causing
+ * unix/tclUnixFile.c: segv's per [Bug 1548263]
+ * win/tclWinFCmd.c:
+ * win/tclWinFile.c:
+
+2006-08-28 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Havana: Regenerated from Olson's
+ * library/tzdata/America/Tegucigalpa: tzdata2006k.
+ * library/tzdata/Asia/Gaza:
+
+2006-08-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c: Revised ObjPrintfVA to take care to
+ * generic/tclParseExpr.c: copy only whole characters when doing
+ %s formatting. This relieves callers of TclObjPrintf() and
+ TclFormatToErrorInfo() from needing to fix arguments to character
+ boundaries. Tcl_ParseExpr() simplified by taking advantage. [Bug
+ 1547786]
+
+ * generic/tclStringObj.c: Corrected TclFormatObj's failure to
+ count up the number of arguments required by examining the format
+ string. [Bug 1547681]
+
+2006-08-27 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclClock.c (ClockClicksObjCmd): Fix nested macro breakage
+ with TCL_MEM_DEBUG enabled. [Bug 1547662]
+
+2006-08-26 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/namespace.n:
+ * generic/tclNamesp.c:
+ * tests/upvar.test: bugfix, docs clarification and new tests for
+ [namespace upvar] as follow up to [Bug 1546833], reported by Will
+ Duquette.
+
+2006-08-24 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata: Regenerated, including several new files, from
+ Olson's tzdata2006j.
+ * library/clock.tcl:
+ * tests/clock.test: Removed an early testing hack that allowed loading
+ 'registry' from the build tree rather than an installed one. This is a
+ workaround for [Bug 15232730], which remains open because it's a
+ symptom of a deeper underlying problem.
+
+2006-08-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Minimal collection of new tests
+ * tests/parseExpr.test: testing the error messages of the new
+ expr parser. Several bug fixes and code simplifications that appeared
+ during that effort.
+
+2006-08-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: Revisions to complete the thread finalization
+ of the cwdPathPtr. [Bug 1536142]
+
+ * generic/tclParseExpr.c: Revised mistaken call to
+ TclCheckBadOctal(), so both [expr 08] and [expr 08z] have same
+ additional info in error message.
+
+ * tests/compExpr-old.test: Update existing tests to not fail with
+ * tests/compExpr.test: the new expr parser.
+ * tests/compile.test:
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/for.test:
+ * tests/if.test:
+ * tests/parseExpr.test:
+ * tests/while.test:
+
+2006-08-21 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * win/Makefile.in (gdb): Make this target work so that debugging an
+ msys build is possible.
+
+2006-08-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c (Tcl_WaitForEvent): if the run loop is
+ already running (e.g. if Tcl_WaitForEvent was called recursively),
+ re-run it in a custom run loop mode containing only the source for the
+ notifier thread, otherwise wakeups from other sources added to the
+ common run loop modes might get lost.
+
+ * unix/tclUnixNotfy.c (Tcl_WaitForEvent): on 64-bit Darwin,
+ pthread_cond_timedwait() appears to have a bug that causes it to wait
+ forever when passed an absolute time which has already been exceeded
+ by the system time; as a workaround, when given a very brief timeout,
+ just do a poll on that platform. [Bug 1457797]
+
+ * generic/tclClock.c (ClockClicksObjCmd): add support for Darwin
+ * generic/tclCmdMZ.c (Tcl_TimeObjCmd): nanosecond resolution timer
+ * generic/tclInt.h: to [clock clicks] and [time]
+ * unix/configure.in (Darwin): when TCL_WIDE_CLICKS defined
+ * unix/tclUnixTime.c (TclpGetWideClicks, TclpWideClicksToNanoseconds):
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * unix/tclUnixPort.h (Darwin): override potentially faulty configure
+ detection of termios availability in all cases, since termios is known
+ to be present on all Mac OS X releases since 10.0. [Bug 497147]
+
+2006-08-18 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4 (Darwin): add support for --enable-64bit on x86_64, for
+ universal builds including x86_64, for 64-bit CoreFoundation on
+ Leopard and for use of -mmacosx-version-min instead of
+ MACOSX_DEPLOYMENT_TARGET
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * generic/tcl.h: add fixes for building on Leopard and
+ * unix/tclUnixPort.h: support for 64-bit CoreFoundation on Leopard
+ * macosx/tclMacOSXFCmd.c:
+
+ * unix/tclUnixPort.h: on Darwin x86_64, disable use of vfork as it
+ causes execve to fail intermittently. (rdar://4685553)
+
+ * generic/tclTomMath.h: on Darwin 64-bit, for now disable use of
+ 128-bit arithmetic through __attribute__ ((mode(TI))), as it leads to
+ link errors due to missing fallbacks. (rdar://4685527)
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: add x86_64 to universal build,
+ switch native release targets to use DWARF with dSYM, Xcode 3.0
+ changes
+ * macosx/README: updates for x86_64 and Xcode 2.4.
+
+ * macosx/Tcl.xcodeproj/default.pbxuser: add test suite target that
+ * macosx/Tcl.xcodeproj/project.pbxproj: runs the tcl test suite at
+ build time and shows clickable test suite errors in the GUI build
+ window.
+
+ * tests/macOSXFCmd.test: fix use of deprecated resource fork paths.
+
+ * unix/tclUnixInit.c (TclpInitLibraryPath): move code that is only
+ needed when TCL_LIBRARY is defined to run only in that case.
+
+ * generic/tclLink.c (LinkTraceProc): fix 64-bit signed-with-unsigned
+ comparison warning from gcc4 -Wextra.
+
+ * unix/tclUnixChan.c (TclUnixWaitForFile): with timeout < 0, if
+ select() returns early (e.g. due to a signal), call it again instead
+ of returning a timeout result. Fixes intermittent event-13.8 failures.
+
+2006-08-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.c: Revised the new set of expression
+ * generic/tclParseExpr.c: parse error messages.
+
+2006-08-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Replace PrecedenceOf() function with
+ prec[] static array.
+
+2006-08-14 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * library/clock.tcl (::tcl::clock::add): Added missing braces to
+ clockval validation code. Pointed out on comp.lang.tcl.
+
+2006-08-11 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclNamesp.c: Improvements in buffer management to make
+ namespace creation faster. Plus selected other minor improvements to
+ code quality. [Patch 1352382]
+
+2006-08-10 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ Misc patches to make code more efficient. [Bug 1530474] (afredd)
+ * generic/*.c, macosx/tclMacOSXNotify.c, unix/tclUnixNotfy.c,
+ * win/tclWinThrd.c: Tidy up invokations of Tcl_Panic() to promote
+ string constant sharing and consistent style.
+ * generic/tclBasic.c (Tcl_CreateInterp): More efficient handling of
+ * generic/tclClock.c (TclClockInit): registration of commands not
+ in global namespace.
+ * generic/tclVar.c (Tcl_UnsetObjCmd): Remove unreachable clause.
+
+2006-08-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Replace buffer copy in for loop with
+ call to memcpy(). Thanks to afredd. [Patch 1530262]
+
+2006-08-09 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclCmdIL.c (Tcl_LassignObjCmd): Make the wrong#args message
+ a bit more consistent with those used elsewhere. [Bug 1534628]
+
+ * generic/tclDictObj.c (DictForCmd): Stop crash when attempting to
+ iterate over an invalid dictionary. [Bug 1531184]
+
+ * doc/ParseCmd.3, doc/expr.n, doc/set.n, doc/subst.n, doc/switch.n:
+ * doc/tclvars.n: Ensure that uses of [expr] in documentation examples
+ are also good style (with braces) unless otherwise necessary. [Bug
+ 1526581]
+
+2006-08-03 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixPipe.c (TclpCreateProcess): for USE_VFORK: ensure
+ standard channels are initialized before vfork() so that the child
+ doesn't potentially corrupt global state in the parent's address space
+
+ * tests/compExpr-old.test: add 'oldExprParser' constraint to all tests
+ * tests/compExpr.test: that depend on the exact format of the
+ * tests/compile.test: error messages of the pre-2006-07-05
+ * tests/expr-old.test: expression parser. The constraint is on by
+ * tests/expr.test: default (i.e those tests still fail), but
+ * tests/for.test: can be turned off by passing '-constraints
+ * tests/if.test: newExprParser' to tcltest, which will skip
+ * tests/parseExpr.test: the 196 failing tests in the testsuite that
+ * tests/while.test: are caused by the new expression parser
+ error messages.
+
+2006-07-31 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (ConvertLocalToUTCUsingC): Corrected a regression
+ that caused dates before 1969 to be one day off in the :localtime time
+ zone if TZ is not set. [Bug 1531530]
+
+2006-07-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (GetJulianDayFromEraYearMonthDay): Corrected
+ several errors in converting dates before the Common Era [Bug 1426279]
+ * library/clock.tcl: Corrected syntax errors in generated code for %EC
+ %Ey, and %W format groups [Bug 1505383]. Corrected a bug in cache
+ management for format strings containing [glob] metacharacters [Bug
+ 1494664]. Corrected several errors in formatting/scanning of years
+ prior to the Common Era, and added the missing %EE format group to
+ indicate the era.
+ * tools/makeTestCases.tcl: Added code to make sure that %U and %V
+ format groups are included in the tests. (The code depends on %U and
+ %V formatting working correctly when 'makeTestCases.tcl' is run,
+ rather than making a completely independent check.) Added tests for
+ [glob] metacharacters in strings. Added tests for years prior to the
+ Common Era.
+ * tests/clock.test: Rebuilt with new test cases for all the above.
+
+2006-07-30 Joe English <jenglish@users.sourceforge.net>
+
+ * doc/AppInit.3: Fix typo [Bug 1496886]
+
+2006-07-26 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrected flawed overflow detection in
+ * tests/expr.test: INST_EXPON that caused [expr 2**64] to return
+ 0 instead of the same value as [expr 1<<64].
+
+2006-07-24 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinSock.c: Correct un-initialized Tcl_DString. Thanks to
+ afredd. [Bug 1518166]
+
+2006-07-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c:
+ * tests/execute.test (execute-9.1): dgp's fix for [Bug 1522803].
+
+2006-07-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c (Tcl_InitNotifier, Tcl_WaitForEvent):
+ create notifier thread lazily upon first call to Tcl_WaitForEvent()
+ rather than in Tcl_InitNotifier(). Allows calling exeve() in processes
+ where the event loop has not yet been run (Darwin's execve() fails in
+ processes with more than one thread), in particular allows embedders
+ to call fork() followed by execve(), previously the pthread_atfork()
+ child handler's call to Tcl_InitNotifier() would immediately recreate
+ the notifier thread in the child after a fork.
+
+ * macosx/tclMacOSXFCmd.c (TclMacOSXCopyFileAttributes): add support
+ * macosx/tclMacOSXNotify.c (Tcl_InitNotifier): for weakly
+ * unix/tclUnixInit.c (Tcl_GetEncodingNameFromEnvironment): importing
+ symbols not available on OSX 10.2 or 10.3, enables binaires built on
+ later OSX versions to run on earlier ones.
+ * macosx/Tcl.xcodeproj/project.pbxproj: enable weak-linking; turn on
+ extra warnings.
+ * macosx/README: document how to enable weak-linking; cleanup.
+ * unix/tclUnixPort.h: add support for weak-linking; conditionalize
+ AvailabilityMacros.h inclusion; only disable realpath on 10.2 or
+ earlier when threads are enabled.
+ * unix/tclLoadDyld.c (TclpLoadMemoryGetBuffer): change runtime Darwin
+ * unix/tclUnixInit.c (TclpInitPlatform): release check to use
+ global initialized
+ once
+ * unix/tclUnixFCmd.c (DoRenameFile, TclpObjNormalizePath): add runtime
+ Darwin release check to determine if realpath is threadsafe.
+ * unix/configure.in: add check on Darwin for compiler support of weak
+ * unix/tcl.m4: import and for AvailabilityMacros.h header; move
+ Darwin specific checks & defines that are only relevant to the tcl
+ build out of tcl.m4; restrict framework option to Darwin; clean up
+ quoting and help messages.
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * generic/regc_locale.c (cclass):
+ * generic/tclExecute.c (TclExecuteByteCode):
+ * generic/tclIOCmd.c (Tcl_ExecObjCmd):
+ * generic/tclListObj.c (NewListIntRep):
+ * generic/tclObj.c (Tcl_GetLongFromObj, Tcl_GetWideIntFromObj)
+ (FreeBignum, Tcl_SetBignumObj):
+ * generic/tclParseExpr.c (Tcl_ParseExpr):
+ * generic/tclStrToD.c (TclParseNumber):
+ * generic/tclStringObj.c (TclAppendFormattedObjs):
+ * unix/tclLoadDyld.c (TclpLoadMemory):
+ * unix/tclUnixPipe.c (TclpCreateProcess): fix signed-with-unsigned
+ comparison and other warnings from gcc4 -Wextra.
+
+2006-07-13 Andreas Kupries <andreask@activestate.com>
+
+ * unix/tclUnixPort.h: Added the inclusion of <AvailabilityMacros.h>.
+ The missing header caused the upcoming #if conditions to wrongly
+ exclude realpath, causing file normalize to ignore symbolic links in
+ the path.
+
+2006-07-11 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclAsync.c: Made Tcl_AsyncDelete() more tolerant when called
+ after all thread TSD has been garbage-collected.
+
+2006-07-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParseExpr.c: Completely new expression parser that
+ builds a parse tree instead of operating with deep recursion. This
+ corrects reports of stack-blowing crashes parsing long expressions
+ [Bug 906201] and replaces a fundamentally O(N^2) algorithm with an
+ O(N) one [RFE 903765]. The new parser is better able to generate error
+ messages that clearly report both the nature and context of the syntax
+ error [Bugs 1029267, 1381715]. For now, the code for the old parser is
+ still present and can be activated with a "#define OLD_EXPR_PARSER
+ 1". This is for the sake of a clean implementation patch, and for ease
+ of benchmarking. The new parser is non-recursive, so much lighter in
+ stack consumption, but it does use more heap, so there may be cases
+ where parsing of long expressions that succeeded with the old parser
+ will lead to out of memory panics with the new one. There are still
+ more improvements possible on that point, though significant progress
+ may require changes to the Tcl_Token specifications documented for the
+ public Tcl_Parse*() routines.
+ ***POTENTIAL INCOMPATIBILITY*** for any callers that rely on the exact
+ (usually terrible) error messages generated by the old parser. This
+ includes a large number of tests in the test suite.
+
+ * generic/tclInt.h: Replaced TclParseWhiteSpace() with
+ * generic/tclParse.c: TclParseAllWhiteSpace() which is what
+ * generic/tclParseExpr.c: all the callers really needed.
+ Breaking whitespace runs at newlines is useful only to the command
+ parsing function, and it can call the file scoped routine
+ ParseWhiteSpace() to do that.
+
+ * tests/expr-old.test: Removed knownBug constraints that masked
+ * tests/expr.test: failures due to revised error messages.
+ * tests/parseExpr.test:
+
+2006-06-20 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: Changed default configuration to
+ * generic/tclInt.decls: #undef USE_OBSOLETE_FS_HOOKS which disables
+ * generic/tclTest.c: access to the Tcl 8.3 internal routines for
+ hooking into filesystem operations. Everyone ought to have migrated to
+ Tcl_Filesystems by now.
+ ***POTENTIAL INCOMPATIBILITY*** for any code still stuck in the
+ pre-Tcl_Filesystem era.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ * generic/tclStrToD.c: Removed dead code that permitted disabling of
+ recognition of the new 0b and 0o numeric formats.
+
+ * generic/tclExecute.c: Removed dead code that implemented alternative
+ * generic/tclObj.c: design where numeric values did not
+ automatically narrow to the smallest Tcl_ObjType required to hold them
+
+ * generic/tclCmdAH.c: Removed dead code that was old implementation
+ of [format].
+
+2006-06-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tclUnixPort.h (Darwin): support MAC_OS_X_VERSION_MAX_ALLOWED
+ define from AvailabilityMacros.h: override configure detection and
+ only use API available in the indicated OS version or earlier.
+
+2006-06-14 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/format.n, doc/scan.n: Added examples for converting between
+ characters and their numeric interpretations following user prompting.
+
+2006-06-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclLoadDl.c (TclpDlopen): Workaround for a compiler bug in Sun
+ Forte 6. [Bug 1503729]
+
+2006-06-06 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/GetStdChan.3: Added recommendation that each call to
+ Tcl_SetStdChannel() be accompanied by a call to Tcl_RegisterChannel().
+
+2006-06-05 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/Alloc.3: Added documentation of promise that Tcl_Realloc(NULL,x)
+ is the same as Tcl_Alloc(x), as discussed in comp.lang.tcl. Also fixed
+ nonsense sentence to say something meaningful.
+
+2006-05-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tcl.h (Tcl_DecrRefCount): use if/else construct to allow
+ placement in unbraced outer if/else conditions. (jcw)
+
+2006-05-27 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/tclMacOSXNotify.c: implemented pthread_atfork() handler that
+ * unix/tcl.m4 (Darwin): recreates CoreFoundation state and
+ notifier thread in the child after a fork(). Note that pthread_atfork
+ is available starting with Tiger only. Because vfork() is used by the
+ core on Darwin, [exec]/[open] are not affected by this fix, only
+ extensions or embedders that call fork() directly (such as TclX).
+ However, this only makes fork() safe from corefoundation tcl with
+ --disable-threads; as on all platforms, forked children may deadlock
+ in threaded tcl due to the potential for stale locked mutexes in the
+ child. [Patch 923072]
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2006-05-24 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tcl.m4 (SC_CONFIG_SYSTEM): Fixed quoting of command script to
+ awk; it was a rarely used branch, but it was wrong. [Bug 1494160]
+
+2006-05-23 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * doc/chan.n, doc/refchan.n: Tighten up the documentation to follow a
+ slightly more consistent style with regard to argument capitalization.
+
+2006-05-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclProc.c (ProcCompileProc): When a bump of the compile
+ epoch forces the re-compile of a proc body, take care not to overwrite
+ any Proc struct that may be referred to on the active call stack. Note
+ that the fix will not be effective for code that calls the private
+ routine TclProcCompileProc() directly. [Bug 1482718]
+
+2006-05-13 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclEvent.c (HandleBgErrors): fix leak. [Coverity issue 86]
+
+2006-05-05 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclMain.c (Tcl_Main): Corrected flaw that required
+ * tests/main.test: (Tcl_Main-4.5): processing of one interactive
+ command before passing control to the loop routine registered with
+ Tcl_SetMainLoop(). [Bug 1481986]
+
+2006-05-04 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bump version number to 8.5a5
+ * generic/tcl.h:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README.binary:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * generic/tclBasic.c (ExprSrandFunc): Restore acceptance of wide/big
+ * doc/mathfunc.n: integer values by srand(). [Bug 1480509]
+
+2006-04-26 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5a4 TAGGED FOR RELEASE ***
+
+ * changes: Updates for another RC.
+
+ * generic/tclBinary.c: Revised the handling of the Q and q format
+ * generic/tclInt.h: specifiers for [binary] to account for the
+ * generic/tclStrToD.c: "middle endian" floating point format used in
+ Nokia N770.
+
+2006-04-25 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/DoubleObj.3: More doc updates for TIP 237.
+ * doc/expr.n:
+ * doc/format.n:
+ * doc/mathfunc.n:
+ * doc/scan.n:
+ * doc/string.n:
+
+ * generic/tclScan.c: [scan $s %u] is documented to accept only
+ * tests/scan.test: decimal formatted integers. Fixed to match.
+
+2006-04-19 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclStrToD.c: Added code to support the "middle endian"
+ floating point format used in the Nokia N770's software-based floating
+ point. Thanks to Bruce Johnson for reporting this bug, originally on
+ http://wiki.tcl.tk/15408.
+ * library/clock.tcl: Fixed a bug with Daylight Saving Time and Posix
+ time zone specifiers reported by Martin Lemburg in
+ http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/9a8b15a4dfc0b7a0
+ (and not at SourceForge).
+ * tests/clock.test: Added test case for the above bug.
+
+2006-04-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/IntObj.3: Minor review fixes, including better documentation of
+ the behaviour of Tcl_GetBignumAndClearObj.
+
+2006-04-17 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/IntObj.3: Documentation changes to account for TIP 237 changes.
+ * doc/Object.3: [Bug 1446971]
+
+2006-04-12 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/regc_locale.c (cclass): Redefined the meaning of [:print:]
+ to be exactly UNICODE letters, numbers, punctuation, symbols and
+ spaces (*not* whitespace). [Bug 1376892]
+
+2006-04-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c: Stop some interference between enter traces
+ * tests/trace.test: and enterstep traces. [Bug 1458266]
+
+2006-04-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Yet another revised fix for the [Bug 1379287]
+ * tests/fileSystem.test: family of path normalization bugs.
+
+2006-04-06 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclRegexp.c (FinalizeRegexp): full reset data to indicate
+ readiness for reinitialization.
+
+2006-04-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): It seems there
+ * tests/indexObj.test: are extensions that rely on the prior behavior
+ * doc/GetIndex.3: that the empty string cannot succeed as a
+ unique prefix matcher, so I'm restoring Donal Fellows's solution.
+ Added mention of this detail to the documentation. [Bug 1464039]
+
+ * tests/compExpr-old.test: Updated testmathfunctions constraint
+ * tests/compExpr.test: to post-TIP-232 world.
+ * tests/expr-old.test:
+ * tests/expr.test:
+ * tests/info.test:
+
+ * tests/indexObj.test: Corrected other test errors revealed by
+ * tests/upvar.test: testing outside the tcltest application.
+
+ * generic/tclPathObj.c: Revised fix for the [Bug 1379287] family of
+ path normalization bugs.
+
+2006-04-06 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4: removed TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING
+ define on Darwin. [Bug 1457515]
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2006-04-05 Don Porter <dgp@users.sourceforge.net>
+
+ * win/tclWinInit.c: More careful calls to Tcl_DStringSetLength()
+ * win/tclWinSock.c: to avoid creating invalid DString states. Bump
+ * win/tclWinDde.c: to version 1.3.2. [RFE 1366195]
+ * library/dde/pkgIndex.tcl:
+
+ * library/reg/pkgIndex.tcl: Bump to registry 1.2 because
+ * win/tclWinReg.c: Registry_Unload() is a new public routine
+ * win/Makefile.in: compared to the 1.1.* releases.
+
+ * win/configure.in: Bump package version numbers.
+ * win/configure: autoconf 2.59
+
+2006-04-05 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclIndexObj.c (Tcl_GetIndexFromObjStruct): Allow empty
+ strings to be matched by the Tcl_GetIndexFromObj machinery, in the
+ same manner as any other key. [Bug 1464039]
+
+2006-04-03 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (ReadChars): Added check, panic and commentary to a
+ piece of code which relies on BUFFER_PADDING to create enough space at
+ the beginning of each buffer for the insertion of partial multibyte
+ data at the beginning of a buffer. Commentary explains why this code
+ is OK, and the panic is as a precaution if someone twiddled the
+ BUFFER_PADDING into uselessness.
+
+ * generic/tclIO.c (ReadChars): Temporarily suppress the use of
+ TCL_ENCODING_END set when EOF was reached while the buffer we are
+ converting is not truly the last buffer in the queue. Together with
+ the Utf bug below it was possible to completely wreck the buffer data
+ structures, eventually crashing Tcl. [Bug 1462248]
+
+ * generic/tclEncoding.c (UtfToUtfProc): Stop accessing memory beyond
+ the end of the input buffer when TCL_ENCODING_END is set and the last
+ bytes of the buffer start a multi-byte sequence. This bug contributed
+ to [Bug 1462248].
+
+2006-03-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: remove unused var and silence gcc warning
+
+2006-03-29 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/Makefile.in: convert _NATIVE paths to use / to avoid ".\"
+ path-as-escape issue.
+
+2006-03-29 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for another RC.
+
+ * generic/tclPathObj.c: More fixes for path normalization when /../
+ * tests/fileSystem.test: tries to go beyond root.[Bug 1379287]
+
+ * generic/tclExecute.c: Revised INST_MOD implementation to do
+ calculations in native types as much as possible, moving to mp_ints
+ only when necessary.
+
+2006-03-28 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinPipe.c (TclpCreateProcess): change panics to Tcl errors
+ and do proper refcounting of noe objPtr. [Bug 1194429]
+
+ * unix/tcl.m4, win/tcl.m4: []-quote AC_DEFUN functions.
+
+2006-03-28 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcode/default.pbxuser: add '-singleproc 1' cli arg to
+ * macosx/Tcl.xcodeproj/default.pbxuser: tcltest to ease test debugging
+
+ * macosx/Tcl.xcode/project.pbxproj: removed $prefix/share from
+ * macosx/Tcl.xcodeproj/project.pbxproj: TCL_PACKAGE_PATH as per change
+ to unix/configure.in of 2006-03-13.
+
+ * unix/tclUnixFCmd.c (TclpObjNormalizePath): deal with *BSD/Darwin
+ realpath() converting relative paths into absolute paths [Bug 1064247]
+
+2006-03-28 Vince Darley <vincentdarley@sourceforge.net>
+
+ * generic/tclIOUtil.c: fix to nativeFilesystemRecord comparisons
+ (lesser part of [Bug 1064247])
+
+2006-03-27 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinTest.c: Fixes for [Bug 1456373] (mingw-gcc issue)
+
+2006-03-27 Andreas Kupries <andreask@activestate.com>
+
+ * doc/CrtChannel.3: Added TCL_CHANNEL_VERSION_5, made it the
+ * generic/tcl.h: version where the "truncateProc" is defined at,
+ * generic/tclIO.c: and moved all channel drivers of Tcl to v5.
+ * generic/tclIOGT.c, generic/tclIORChan.c, unix/tclUnixChan.c:
+ * unix/tclUnixPipe.c, win/tclWinChan.c, win/tclWinConsole.c:
+ * win/tclWinPipe.c, win/tclWinSerial.c, win/tclWinSock.c:
+
+2006-03-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Merge INST_MOD computation in with the
+ INST_?SHIFT instructions, which also operate only on two integral
+ values. Also corrected flaw that made INST_BITNOT of wide values
+ require mp_int calculations. Also corrected type that missed optimized
+ handling of the tclBooleanType by the TclGetBooleanFromObj macro.
+
+ * changes: Updates for another RC.
+
+2006-03-25 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Corrections to INST_EXPON detection of
+ overflow to use mp_int calculations.
+
+2006-03-24 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c (TclExecuteByteCode): Added a couple of missing
+ casts to 'int' that were affecting compilablity on VC6.
+
+2006-03-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Reverted latest change [Bug 506653] since it
+ reportedly killed test performance on Windows.
+
+ * generic/tclExecute.c: Revised INST_EXPON implementation to do
+ calculations in native types as much as possible, moving to mp_ints
+ only when necessary.
+
+2006-03-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Merged INST_EXPON handling in with the other
+ binary operators that operate on all number types (INST_ADD, etc.).
+
+ * tests/env.test: With case preserved (see 2006-03-21 commit) be sure
+ to do case-insensitive filtering. [Bug 1457065]
+
+2006-03-23 Reinhard Max <max@suse.de>
+
+ * unix/tcl.spec: Cleaned up and completed the spec file. An RPM can
+ now be built from the tcl source distribution with "rpmbuild -tb
+ <tarball>"
+
+2006-03-22 Reinhard Max <max@suse.de>
+
+ * tests/stack.test: Run the stack tests in subshells, so that they are
+ reported as failed tests rather than bugs in the test suite if the
+ recursion causes a segfault.
+
+2006-03-21 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for another RC.
+
+ * generic/tclStrToD.c: One of the branches of AccumulateDecimalDigit
+ * tests/parseExpr.test: did not. [Bug 1451233]
+
+ * tests/env.test: Preserve case of saved env vars. [Bug 1409272]
+
+2006-03-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.decls: implement globbing for HFS creator & type
+ * macosx/tclMacOSXFCmd.c:codes and 'hidden' flag, as documented in
+ * tests/macOSXFCmd.test: glob.n; objectified OSType handling in [glob]
+ * unix/tclUnixFile.c: and [file attributes]; fix globbing for
+ hidden files with pattern==NULL arg. [Bug 823329]
+ * generic/tclIntPlatDecls.h:
+ * generic/tclStubInit.c: make genstubs
+
+2006-03-20 Andreas Kupries <andreask@activestate.com>
+
+ * win/Makefile.in (install-libraries): Generate tcl8/8.4 directory
+ under Windows as well (cygwin Makefile). Related entry: 2006-03-07,
+ dgp. This moved the installation of http from 8.2 to 8.4, partially. A
+ fix of the required directory creation was done for unix on Mar 10,
+ without entry in the Changelog. This entry is for the fix of the
+ directory creation under Windows.
+
+ * unix/installManPage: There is always one even more broken "sed".
+ Moved the # comment starting character in the sed script to the
+ beginning of their respective lines. The AIX sed will not recognize
+ them as comments otherwise :( The actual text stays indented for
+ better association with the commands they belong to.
+
+2006-03-20 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * tests/cmdAH.test, tests/fCmd.test, tests/unixFCmd.test:
+ * tests/winFCmd.test: Cleanup of some test constraint handling, and a
+ few other minor issues.
+
+2006-03-18 Vince Darley <vincentdarley@sourceforge.net>
+
+ * generic/tclFileName.c:
+ * doc/FileSystem.3:
+ * tests/fileName.test: Fix to [Bug 1084705] so that 'glob -nocomplain'
+ finally agrees with its documentation and doesn't swallow genuine
+ errors.
+
+ ***POTENTIAL INCOMPATIBILITY*** for scripts that assumed '-nocomplain'
+ removes the need for 'catch' to deal with non-understood path names.
+
+ Small optimisation to implementation of pattern==NULL case of TclGlob,
+ and clarification to the documentation. [Tclvfs bug 1405317]
+
+2006-03-18 Vince Darley <vincentdarley@sourceforge.net>
+
+ * tests/fCmd.test: added knownBug test case for [Bug 1394972]
+
+ * tests/winFCmd.test:
+ * tests/tcltest.test: corrected tests to better account for behaviour
+ of writable/non-writable directories on Windows 2000/XP. This, with
+ the previous patches, closes [Bug 1193497]
+
+2006-03-17 Andreas Kupries <andreask@activestate.com>
+
+ * doc/chan.n: Updated with documentation for the commands 'chan
+ create' and 'chan postevent' (TIP #219).
+
+ * doc/refchan.n: New file. Documentation of the command handler API
+ for reflected channels (TIP #219).
+
+2006-03-17 Joe Mistachkin <joe@mistachkin.com>
+
+ * unix/tclUnixPort.h: Include pthread.h prior to pthread_np.h [Bug
+ 1444692]
+
+ * win/tclWinTest.c: Corrected typo of 'initializeMutex' that prevented
+ successful compilation.
+
+2006-03-16 Andreas Kupries <andreask@activestate.com>
+
+ * doc/open.n: Documented the changed behaviour of 'a'ppend mode.
+
+ * tests/io.test (io-43.1 io-44.[1234]): Rewritten to be self-contained
+ with regard to setup and cleanup. [Bug 681793]
+
+ * generic/tclIOUtil.c (TclGetOpenMode): Added the flag O_APPEND to the
+ list of POSIX modes used when opening a file for 'a'ppend. This
+ enables the proper automatic seek-to-end-on-write by the OS. See [Bug
+ 680143] for longer discussion.
+
+ * tests/ioCmd.test (iocmd-13.7.*): Extended the testsuite to check the
+ new handling of 'a'.
+
+2006-03-15 Andreas Kupries <andreask@activestate.com>
+
+ * tests/socket.test: Extended the timeout in socket-11.11 from 10 to
+ 40 seconds to allow for really slow machines. Also extended
+ actual/expected results with value of variable 'done' to make it
+ clearer when a test fails due to a timeout. [Bug 792159]
+
+2006-03-15 Vince Darley <vincentdarley@sourceforge.net>
+
+ * win/fCmd.test: add proper test constraints so the new tests don't
+ run on Unix.
+
+2006-03-14 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclPipe.c (TclCreatePipeline): Modified the processing of
+ pipebars to fail if the last bar is followed only by redirections.
+ [Bug 768659]
+
+2006-03-14 Andreas Kupries <andreask@activestate.com>
+
+ * doc/fconfigure.n: Clarified that -translation is binary is reported
+ as lf when queried, because it is identical to lf, except for the
+ special additional behaviour when setting it. [Bug 666770]
+
+2006-03-14 Andreas Kupries <andreask@activestate.com>
+
+ * doc/clock.n: Removed double-quotes around section title NAME; not
+ needed.
+ * unix/installManpage: Reverted part to handle double-quotes in
+ section NAME, chokes older sed installations.
+
+2006-03-14 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl (::tcl::tm::Defaults): Fixed handling of environment
+ variable TCLX.y_TM_PATH, bad variable reference. Thanks to Julian
+ Noble. [Bug 1448251]
+
+2006-03-14 Vince Darley <vincentdarley@sourceforge.net>
+
+ * win/tclWinFile.c: updated patch to deal with 'file writable' issues
+ on Windows XP/2000.
+ * generic/tclTest.c:
+ * unix/tclUnixTest.c:
+ * win/tclWinTest.c:
+ * tests/fCmd.test: updated test suite to deal with correct permissions
+ setting and differences between XP/2000 and 95/98 3 tests still fail;
+ to be dealt with shortly
+
+2006-03-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Report error when an escape encoding is
+ missing one of its sub-encodings. [Bug 506653]
+
+ * unix/configure.in: Revert change from 2005-07-26 that sometimes
+ * unix/configure: added $prefix/share to the tcl_pkgPath. See
+ [Patch 1231015]. autoconf-2.59.
+
+2006-03-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c (ObjInterpProcEx):
+ * tests/apply.test (apply-5.1): Fix [apply] error messages so that
+ they quote the lambda expression. [Bug 1447355]
+
+2006-03-10 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ -- Summary of changes fixing [Bug 1437595] --
+
+ * generic/tclEvent.c: Cosmetic touches and identation
+ * generic/tclInt.h: Added TclpFinalizeSockets() call.
+
+ * generic/tclIO.c: Calls TclpFinalizeSockets() as part of the
+ TclFinalizeIOSubsystem().
+
+ * unix/tclUnixSock.c: Added no-op TclpFinalizeSockets().
+
+ * win/tclWinPipe.c, win/tclWinSock.c: Finalization of sockets/pipes is
+ now solely done in TclpFinalizeSockets() and TclpFinalizePipes() and
+ not over the thread-exit handler, because the order of actions the Tcl
+ generic core will impose may result in cores/hangs if the thread exit
+ handler tears down corresponding subsystem(s) too early.
+
+2006-03-10 Vince Darley <vincentdarley@sourceforge.net>
+
+ * win/tclWinFile.c: previous patch breaks tests, so removed.
+
+2006-03-09 Vince Darley <vincentdarley@sourceforge.net>
+
+ * win/tclWinFile.c: fix to 'file writable' in certain XP directories.
+ Thanks to fvogel and jfg. [Patch 1344540] Modified patch to make use
+ of existing use of getSecurityProc.
+
+2006-03-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Complete missing bit of TIP 215 implementation
+ * tests/incr.test:
+
+2006-03-07 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/tcl.m4: Set SHLIB_LD_FLAGS='${LIBS}' on NetBSD, as per the
+ other *BSD variants. [Bug 1334613]
+ * unix/configure: Regenerated.
+
+2006-03-07 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Update in prep. for 8.5a4 release.
+
+ * unix/Makefile.in: Package http 2.5.2 requires Tcl 8.4, so the
+ * win/Makefile.in: *.tm installation has to be placed in an "8.4"
+ directory, not an "8.2" directory.
+
+2006-03-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Revised handling of TCL_EVAL_* flags to
+ * tests/parse.test: simplify TclEvalObjvInternal and to correct
+ the auto-loading of alias targets (parse-8.12). [Bug 1444291]
+
+2006-03-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Revised yesterday's fix for [Bug 1379287] to
+ work on Windows.
+
+ * generic/tclObj.c: Compatibility support for existing code that
+ calls Tcl_GetObjType("boolean").
+
+2006-03-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Fix for failed normalization of paths
+ * tests/fileSystem.test: with /../ that lead back to the root
+ of the filesystem, like /foo/.. [Bug 1379287]
+
+2006-03-01 Reinhard Max <max@suse.de>
+
+ * unix/installManPage: Fix the script for manpages that have quotes
+ around the .SH arguments, as doctools produces them. [Bug 1292145]
+ Some minor cleanups and improvements.
+
+2006-02-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Corrections to be sure that TCL_EVAL_GLOBAL
+ * tests/namespace.test: evaluations act the same as [uplevel #0]
+ * tests/parse.test: evaluations, even when execution traces or
+ * tests/trace.test: invocations of [::unknown] are present. [Bug
+ 1439836]
+
+2006-02-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Corrected a few bugs in how [namespace
+ * tests/namespace.test: unknown] interacts with TCL_EVAL_* flags.
+ [Patch 958222]
+
+2006-02-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIORChan.c: Revised error message generation and handling
+ * tests/ioCmd.test: of exceptional return codes in the channel
+ reflection layer. [Bug 1372348]
+
+2006-02-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIndexObj.c: Disallow the "ambiguous" error message
+ * tests/indexObj.test: when TCL_EXACT matching is requested.
+ * tests/ioCmd.test:
+
+2006-02-15 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIO.c: Made several routines tolerant of
+ * generic/tclIORChan.c: interp == NULL arguments. [Bug 1380662]
+ * generic/tclIOUtil.c:
+
+2006-02-09 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#215 IMPLEMENTATION
+
+ * doc/incr.n: Revised [incr] to auto-initialize when varName
+ * generic/tclExecute.c: argument is unset. [Patch 1413115]
+ * generic/tclVar.c:
+ * tests/compile.test:
+ * tests/incr-old.test:
+ * tests/incr.test:
+ * tests/set.test:
+
+ * tests/main.test (Tcl_Main-6.7): Improved robustness of
+ command auto-completion test. [Bug 1422736]
+
+2006-02-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/Encoding.3, doc/encoding.n: Updates due to review at request of
+ Don Porter. Mostly minor changes.
+
+2006-02-08 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#258 IMPLEMENTATION
+
+ * doc/Encoding.3: New subcommand [encoding dirs].
+ * doc/encoding.n: New routine Tcl_GetEncodingNameFromEnvironment
+ * generic/tcl.decls: Made public:
+ * generic/tclBasic.c: TclGetEncodingFromObj
+ * generic/tclCmdAH.c: -> Tcl_GetEncodingFromObj
+ * generic/tclEncoding.c:TclGetEncodingSearchPath
+ * generic/tclInt.decls: -> Tcl_GetEncodingSearchPath
+ * generic/tclInt.h: TclSetEncodingSearchPath
+ * generic/tclTest.c: -> Tcl_SetEncodingSearchPath
+ * library/init.tcl: Removed commands:
+ * tests/cmdAH.test: [tcl::unsupported::EncodingDirs]
+ * tests/encoding.test: [testencoding path] (Tcltest)
+ * unix/tclUnixInit.c: [Patch 1413934]
+ * win/tclWinInit.c:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+2006-02-01 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c: minor improvements to [apply]
+ * tests/apply.test: new tests; apply-5.1 currently fails to indicate
+ missing work in error reporting
+
+2006-02-01 Don Porter <dgp@users.sourceforge.net>
+
+ TIP#194 IMPLEMENTATION
+
+ * doc/apply.n: (New file) New command [apply]. [Patch 944803]
+ * doc/uplevel.n:
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * generic/tclProc.c:
+ * tests/apply.test: (New file)
+ * tests/proc-old.test:
+ * tests/proc.test:
+
+ TIP#181 IMPLEMENTATION
+
+ * doc/Namespace.3: New command [namespace unknown]. New public C
+ * doc/namespace.n: routines Tcl_(Get|Set)NamespaceUnknownHandler.
+ * doc/unknown.n: [Patch 958222]
+ * generic/tcl.decls:
+ * generic/tclBasic.c:
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * tests/namespace.test:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+ TIP#250 IMPLEMENTATION
+
+ * doc/namespace.n: New command [namespace upvar]. [Patch 1275435]
+ * generic/tclInt.h:
+ * generic/tclNamesp.c:
+ * generic/tclVar.c:
+ * tests/namespace.test:
+ * tests/upvar.test:
+
+2006-01-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/dict.n: Fixed silly bug in example. Thanks to Heiner Marxen
+ <heiner.marxen@unsel.de> for catching this! [Bug 1415725]
+
+2006-01-26 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tclUnixChan.c (TclpOpenFileChannel): Tidy up and comment the
+ mess to do with setting up serial channels. This (deliberately) breaks
+ a broken FreeBSD port, indicates what we're really doing, and reduces
+ the amount of conditional compilation sections for better maintenance.
+
+2006-01-25 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/tclUnixInit.c (TclpInitPlatform): Improved conditions on when
+ to update the FP rounding mode on FreeBSD, taken from FreeBSD port.
+
+2006-01-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/string.test (string-12.21): Added test for [Bug 1410553] based
+ on original bug report.
+
+2006-01-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclStringObj.c: fixed incorrect handling of internal rep in
+ Tcl_GetRange. Thanks to twylite and Peter Spjuth. [Bug 1410553]
+
+ * generic/tclProc.c: fixed args handling for precompiled bodies [Bug
+ 1412695]; thanks to Uwe Traum.
+
+2006-01-16 Reinhard Max <max@suse.de>
+
+ * generic/tclPipe.c (FileForRedirect): Prevent nameString from being
+ freed without having been initialized.
+ * tests/exec.test: Added a test for the above.
+
+2006-01-12 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclPathObj.c (Tcl_FSGetInternalRep): backported patch from
+ core-8-4-branch. A freed pointer has been overwritten causing all
+ sorts of coredumps.
+
+2006-01-12 Vince Darley <vincentdarley@sourceforge.net>
+
+ * win/tclWinFile.c: fix to sharing violation [Bug 1366227]
+
+2006-01-11 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Moved Tcl_LogCommandInfo from tclBasic.c to
+ * generic/tclNamesp.c: tclNamesp.c to get access to identifier with
+ * tests/error.test (error-7.0): file scope. Added check for traces on
+ ::errorInfo, and when present fall back to contruction of the stack
+ trace in the variable so that write trace notification timings are
+ compatible with earlier Tcl releases. This reduces, but does not
+ completely eliminate the ***POTENTIAL INCOMPATIBILITY*** created by
+ the 2004-10-15 commit. [Bug 1397843]
+
+2006-01-10 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/configure: add caching, use AC_CACHE_CHECK instead of
+ * unix/configure.in: AC_CACHE_VAL where possible, consistent message
+ * unix/tcl.m4: quoting, sync relevant tclconfig/tcl.m4 changes
+ and gratuitous formatting differences, fix SC_CONFIG_MANPAGES with
+ default argument, Darwin improvements to SC_LOAD_*CONFIG.
+
+2006-01-09 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c (NamespaceInscopeCmd): [namespace inscope]
+ * tests/namespace.test: commands were not reported by [info level].
+ [Bug 1400572]
+
+2006-01-09 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * generic/tclTrace.c: Stop exporting the guts of the trace command;
+ nothing outside this file needs to see it. [Bug 971336]
+
+2006-01-05 Donal K. Fellows <donal.k.fellows@manchester.ac.uk>
+
+ * unix/tcl.m4 (TCL_CONFIG_SYSTEM): Factor out the code to determine
+ the operating system version number, as it was replicated in several
+ places.
+
+2006-01-04 David Gravereaux <davygrvy@pobox.com>
+
+ * win/tclAppInit.c: WIN32 native console signal handler removed. This
+ was found to be interfering with TWAPI extension one. IMO, special
+ services such as signal handlers should best be done with extensions
+ to the core after discussions on c.l.t. about Roy Terry's tclsh
+ 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 1999 AND EARLIER IN "ChangeLog.1999" ***
+ ******************************************************************
diff --git a/ChangeLog.2008 b/ChangeLog.2008
new file mode 100644
index 0000000..9c4e951
--- /dev/null
+++ b/ChangeLog.2008
@@ -0,0 +1,3796 @@
+2008-12-31 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Set TCLLIBPATH in SHELL_ENV so that targets
+ like `make shell` have access to builds of bundled packages.
+
+2008-12-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (Tcl_ZlibStreamPut): Plug a memory leak.
+
+2008-12-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (ZlibStreamCmd): Fix compilation consistency. [Bug
+ * generic/tcl.decls: 2470237]
+
+ * generic/tclZlib.c (Tcl_ZlibStreamGet): Corrected the semantics of
+ this function to be useful to the PNG implementation. If the argument
+ object is empty, this gives the previous semantics.
+ (Tcl_ZlibStreamChecksum): Corrected name to be less misleading; it
+ only produced Adler-32 checksums when the stream was processing the
+ right type of compressed data format.
+ (Tcl_ZlibAdler32, Tcl_ZlibCRC32): Corrected types so that they work
+ naturally with the results of Tcl_GetByteArrayFromObj().
+ *** POTENTIAL INCOMPATIBILITY *** for all above changes, but very
+ unlikely to be difficult for anyone to deal with.
+
+2008-12-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tcl.decls: Tidy up the commenting style, adding markers for
+ each of the big release points under TCT stewardship and noting the
+ general purpose of each TIP that added C API. Overall effect is to
+ make this file much more informative to read without having to spend
+ effort correlating with TIPs and ChangeLogs.
+
+2008-12-23 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: Fix build of zlib objects with msvc
+ * win/tcl.m4:
+ * win/configure: autoconf-2.59
+
+2008-12-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/Makefile.in: Handle file extensions correctly. [Bug 2459725]
+
+2008-12-22 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ *** 8.6b1 TAGGED FOR RELEASE ***
+
+ * win/makefile.vc: Ensure pkgs directories are suitable and quote the
+ paths. [Bug 2458395]
+
+2008-12-22 Joe Mistachkin <joe@mistachkin.com>
+
+ * tools/man2help2.tcl: Added support for "\(mi" nroff macro. [Bug
+ 2330040]
+
+2008-12-22 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Support the pkgs tree in the NMAKE builds.
+
+2008-12-21 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: Fix broken build of bundled packages when path
+ to build dir contains spaces by switching to
+ relative paths to toplevel build dir.
+
+ * unix/configure.in: Preserve configure environment variables for
+ sub-configures of bundled packages; reuse
+ configure cache file for sub-configures.
+
+ * unix/configure: autoconf-2.59
+
+2008-12-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/TclZlib.3: Fix minor typo. [Bug 2455165]
+
+2008-12-20 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/Makefile.in: Renamed the static library libtcl86s.a to
+ * win/configure.in: have a name distinct from the import library
+ libtcl86.a. This renaming dodges an ancient
+ bug in the Makefile revealed by the last
+ commit where the $(TCL_LIB_FILE) rule can
+ fire to try to build the static library in a
+ --enable-shared build (and create a static
+ library that subsequently fails to link).
+ Revised the zlib objects so that they are
+ built directly into the build dir, without
+ building an intermediate static library.
+ *** POTENTIAL INCOMPATIBILITY *** for
+ embedders who link to the static library, but
+ I couldn't figure out how to sort this out
+ any other way.
+ * win/configure: Autoconf 2.59
+
+2008-12-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/Makefile.in: Minor updates to make building work better with
+ msys on Windows. (Apparently the gcc used doesn't like a / at the end
+ of a -I argument...)
+
+2008-12-20 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.6b1 release.
+
+2008-12-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: Make package install directory of bundled
+ * unix/configure.in: packages configurable via PACKAGE_DIR makefile
+ variable (set to platform-specific default).
+
+ * unix/Makefile.in (*-packages): Ensure toplevel targets fail if
+ sub-make/configure fails; fix quoting when
+ builddir path contains spaces.
+
+ * macosx/GNUmakefile: Add install-packages to install targets.
+
+ * unix/configure: autoconf-2.59
+
+2008-12-19 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/NRE.3: Formatting errors found by `make html`
+ * doc/Tcl_Main.3:
+ * doc/zlib.n:
+
+ * tests/chanio.test: Add missing [removeFile] cleanups.
+ * tests/io.test: Add missing [close $f] to io-73.2.
+
+ * unix/Makefile.in: Update `make dist' target to include the files
+ from the compat/zlib directory as well as all the bundled packages
+ found under the pkgs directory, according to their individual `make
+ dist' targets. Change includes breaking a `configure-packages' target
+ out of the `packages` target.
+
+ * README: Bump version number to 8.6b1
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2008-12-19 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: CONSTify TclGetLoadedPackages second param
+ * generic/tclLoad.c
+ * generic/tclIntDecls.h (regenerated)
+
+2008-12-19 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclExecute.c: Fix compile warnings when --enable-symbols=all
+
+ * win/configure.in:
+ * win/Makefile.in: Added build of packages in the 'pkgs/' directory.
+ * win/configure: Autoconf 2.59
+
+2008-12-19 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: Added build of compat/zlib
+
+2008-12-18 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (Tcl_CloseEx, CloseWrite, CloseChannelPart)
+ (ChanCloseHalf): Rewrite the half-close to properly flush the channel,
+ like is done for a full close, going through FlushChannel, and using
+ the flag BG_FLUSH_SCHEDULED (async flush during close). New functions
+ CloseWrite, CloseChannelPart, new flag CHANNEL_CLOSEDWRITE.
+
+ * tests/chanio.test (chanio-28.[67]): Reactivated these tests.
+ Replaced tclsh -> [interpreter] to get correct executable for the pipe
+ process, and added after cancel to kill the fail timers when we are
+ done. Removed the explicits calls to [flush], now that [close] handles
+ this correctly.
+
+2008-12-18 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/chanio.test: Replaced [chan event] handlers that returned
+ TCL_RETURN return code, with more conventional ones that return TCL_OK
+ to suppress otherwise strange writes of outdated $::errorInfo values
+ to stderr. [Bug 2444274]
+
+ * generic/tclExecute.c: Disabled apparently faulty assertion. [Bug
+ 2415422]
+
+2008-12-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/configure.in, unix/Makefile.in: Autoconf wizardry.
+ * compat/zlib/*: Import of zlib 1.2.3. The license is directly
+ compatible with Tcl's. This import omits the obsolete and contributed
+ parts (i.e. selected directories) and the supplied examples.
+
+ * generic/tclZlib.c: First implementation of the compressing and
+ * doc/zlib.n: decompressing channel transformations.
+ * tests/zlib.test (zlib-8.*):
+
+2008-12-18 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls: VOID -> void
+ * generic/tclInt.decls:
+ * compat/dlfcn.h:
+ * generic/tclDecls.h: (regenerated)
+ * generic/tclIntDecls.h:
+
+2008-12-18 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ TIP #332 IMPLEMENTATION - Half-Close for Bidirectional Channels
+
+ * doc/close.n, generic/tclIO.c, generic/tclIOCmd.c:
+ * unix/tclUnixChan.c, unix/tclUnixPipe.c, win/tclWinSock.c:
+ * generic/tcl.decls, generic/tclDecls.h, generic/tclStubInit.c:
+ * tests/chan.test, tests/chanio.test, tests/ioCmd.test:
+
+2008-12-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/SetChanErr.3: General improvements in nroff rendering and some
+ corrections to language issues.
+
+2008-12-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclResult.c: Move variable "length" inside if()
+ * generic/tclStringObj.c: Don't use ckfree((void *)...) but
+ * generic/tclVar.c: ckfree((char *)...)
+ * generic/tclZlib.c
+ * generic/tclBasic.c
+
+2008-12-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/namespace.test (namespace-28.1): Make tests not
+ * tests/namespace-old.test (namespace-old-9.5): dependent on the
+ global namespace's particular imports. [Bug 2433936]
+
+2008-12-17 Don Porter <dgp@users.sourceforge.net>
+
+ * unix/Makefile.in: Modify the distclean-packages target so that
+ empty build directories are deleted.
+
+ * unix/Makefile.in: Add build support for collections of TEA
+ * unix/configure.in: packages found under the pkgs directory.
+ [Patch 1163406]. Still needs porting to Windows.
+
+ * unix/configure: autoconf-2.59
+
+2008-12-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tcl.h, generic/tclZlib.c: Removed undocumented flag.
+
+2008-12-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclThreadTest.c: Eliminate -Wwrite-strings warnings in
+ --enable-threads build.
+ * generic/tclExecute.c: Use TclNewLiteralStringObj()
+ * unix/tclUnixFCmd.c: Use TclNewLiteralStringObj()
+ * win/tclWinFCmd.c: Use TclNewLiteralStringObj()
+
+2008-12-16 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #329 IMPLEMENTATION
+
+ * tests/error.test: Tests for the new commands.
+ * doc/throw.n, doc/try.n: Documentation of the new commands.
+ * library/init.tcl (throw, try): Implementation of commands documented
+ in TIP. This implementation is in Tcl and is a stop-gap until
+ higher-performance ones can be written.
+
+2008-12-16 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Add TIP 338 routines to stub table.
+ * generic/tcl.decls: [Bug 2431338]
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2008-12-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclExecute.c (TEBC:INST_DICT_GET): Make sure that the result
+ is empty when generating an error message. [Bug 2431847]
+
+2008-12-15 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclBinary.c: Redefine non-strict decoding to ignore only
+ * doc/binary.n: whitespace. [Bug 2380293]
+ * tests/binary.test:
+
+2008-12-15 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/AddErrInfo.3: Documented Tcl_(Set|Get)ErrorLine (TIP 336).
+ * doc/CrtCommand.3: Various other documentation updates to
+ * doc/CrtInterp.3: reflect the lack of access to Tcl_Interp
+ * doc/Interp.3: fields by default.
+ * doc/SetResult.3:
+ * doc/tcl.decls:
+
+ TIP #338 IMPLEMENTATION
+
+ * doc/AppInit.c: Made routines Tcl_SetStartupScript and
+ * doc/Tcl_Main.3: Tcl_GetStartupScript public. Removed all
+ * generic/tcl.h: internal stub access to Tcl*Startup* routines,
+ * generic/tclInt.decls: and removed their implementations. Their
+ * generic/tclMain.c: function can now be completely performed with
+ the new public interface.
+ *** POTENTIAL INCOMPATIBILITY for callers of the internal
+ Tcl*Startup* routines. ***
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+ * generic/tclDecls.h:
+
+2008-12-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/zlib.test: Added constraint so that tests don't fail where
+ they cannot work due to zlib support being missing.
+
+ * unix/configure.in, win/configure.in: Improve the autodetection code.
+ * win/tcl.m4 (SC_CONFIG_CFLAGS): Remove the assumption of the presence
+ of zlib library on Windows.
+ * win/makefile.vc, win/makefile.bc: Add support for building tclZlib.o
+ but only in stubbed-out mode for now.
+
+2008-12-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/TclZlib.3: Basic documentation of the C-level API.
+ * doc/zlib.n: Substantially improve documentation of Tcl-level API.
+ * generic/tclZlib.c (ZlibCmd): Flesh out the argument parsing for the
+ command to integrate with channels.
+
+2008-12-12 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclZlib.c (Tcl_ZlibInflate): Change PATH_MAX to MAXPATHLEN,
+ since MSVC doesn't have PATH_MAX.
+
+ * doc/clock.n: Document new DST fallback rules.
+ * library/clock.tcl (ProcessPosixTimeZone): Fix time change in Eastern
+ Europe (not 3:00 but 4:00 local time). [Bug 2207436]
+
+2008-12-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c, unix/configure.in: Added stubs to use when the
+ version of zlib is not capable enough, and automagic to detect when
+ that is the case. [Bug 2421265]
+
+2008-12-12 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * unix/tclUnixNotfy.c: Fix missing CLOEXEC on internal pipes [2417695]
+ * unix/tclUnixPipe.c: Fix missing CLOEXEC on [chan pipe] fds.
+
+2008-12-12 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (Tcl_ZlibDeflate): Add a bit of extra space for
+ the gzip header. [Bug 2419061]
+ (Tcl_ZlibInflate): Ensure that gzip header extraction is done
+ correctly.
+
+2008-12-12 Kevin Kenny <kennykb@acm.org>
+
+ TIP #322 IMPLEMENTATION
+
+ * doc/NRE.3 (new file): Added documentation of the published API for
+ Non-Recursive Evaluation (NRE).
+
+2008-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclZlib.c: Eliminate warning: different 'const' qualifiers
+ with msvc compiler. A few more 'const' optimizations.
+ * win/tcl.m4: Fix Windows build (msvc) for TIP #234 implementation
+ * win/Makefile.in:
+ * win/configure:
+
+2008-12-11 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (SetChannelFromAny and related): Modified the
+ * tests/io.test: internal representation of the tclChannelType to
+ contain not only the ChannelState pointer, but also a reference to
+ the interpreter it was made in. Invalidate and recompute the
+ internal representation when it is used in a different interpreter,
+ like cmdName intrep's. Added testcase. [Bug 2407783]
+
+2008-12-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclZlib.c (ConvertError): Factor out code to turn zlib
+ errors into Tcl errors.
+
+ * doc/zlib.n: Added a start at the documentation. Still very rough.
+
+2008-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/Makefile.in: Fix Windows build (mingw) for TIP #234
+ implementation (additionally, first make sure that zlib is available,
+ and rename the standard zdll.lib to libz.a, but at least this works so
+ far).
+
+2008-12-11 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/zlib.test: Start of test suite for zlib command.
+
+2008-12-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * library/clock.tcl (ProcessPosixTimeZone): Fallback to European time
+ zone DST rules, when the timezone is between 0 and -12. [Bug 2207436]
+ * tests/clock.test (clock-52.[23]): Test cases for [Bug 2207436]
+
+2008-12-11 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #234 IMPLEMENTATION
+
+ * generic/tclZlib.c: A very preliminary hack at an interface to the
+ zlib library, based on code from Pascal Scheffers.
+ WARNING! The C API may be subect to change without much warning! USE
+ AT YOUR OWN RISK!
+
+2008-12-10 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/*: Update from Olson's tzdata2008i.
+
+2008-12-10 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ TIP #343 IMPLEMENTATION - A Binary Specifier for [format/scan]
+
+ * doc/format.n
+ * doc/scan.n
+ * generic/tclInt.h
+ * generic/tclScan.c
+ * generic/tclStrToD.c
+ * generic/tclStringObj.c
+ * tests/format.test
+ * tests/scan.test
+
+2008-12-10 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #341 IMPLEMENTATION
+
+ * generic/tclDictObj.c (DictFilterCmd): Made key and value filtering
+ * tests/dict.test, doc/dict.n: accept arbitrary numbers of
+ glob arguments.
+
+2008-12-09 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: Restore source and binary compatibility for
+ TIP #337 implementation. (When it is _that_
+ simple, there is no excuse not to do it! :-))
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2008-12-09 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #337 IMPLEMENTATION
+
+ * doc/BackgdErr.3: Converted internal routine
+ * doc/interp.n: TclBackgroundException() into public routine
+ * generic/tcl.decls: Tcl_BackgroundException().
+ * generic/tclEvent.c:
+ * generic/tclInt.decls:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclStubInit.c:
+
+ * generic/tclIO.c: Update callers.
+ * generic/tclIOCmd.c:
+ * generic/tclInterp.c:
+ * generic/tclTimer.c:
+ *** POTENTIAL INCOMPATIBILITY only for extensions using the converted
+ internal routine ***
+
+2008-12-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIO.c (ChanClose,ChanRead,...): Factored out some of the
+ code to connect to channel drivers that was common in multiple
+ locations so as to make code more readable.
+
+2008-12-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdAH.c (FileTempfileCmd): Force temporary files to be
+ created in the native filesystem. Attempting to provide a template
+ that puts it elsewhere will result in the directory part of the
+ template being ignored. Partial address of [Bug 2388866] concerns.
+
+2008-12-05 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #335 IMPLEMENTATION
+
+ * generic/tclBasic.c (Tcl_InterpActive): Added function for working
+ * doc/CrtInterp.3: out if an interp is in use.
+
+ TIP #307 IMPLEMENTATION
+
+ * generic/tclResult.c (Tcl_TransferResult): Renamed function from
+ * generic/tcl.decls: TclTransferResult. Added
+ * doc/SetResult.3: to public stubs table.
+
+2008-12-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c (Tcl_FSGetNormalizedPath): Added another
+ flag value TCLPATH_NEEDNORM to mark those intreps which need more
+ complete normalization attention for correct results. [Bug 2385549]
+
+2008-12-03 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/tclWinPipe.c (TclpOpenTemporaryFile): Avoid an infinite loop due
+ to GetTempFileName/CreateFile interaction. [Bug 2380318]
+
+2008-12-03 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFileName.c (DoGlob): One of the Tcl_FSMatchInDirectory
+ calls did not have its return code checked. This caused error messages
+ returned by some Tcl_Filesystem drivers to be swallowed.
+
+2008-12-02 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #336 IMPLEMENTATION
+
+ * generic/tcl.decls: New routines Tcl_(Get|Set)ErrorLine.
+ * generic/tcl.h: Dropped default access to interp->errorLine.
+ * generic/tclCmdAH.c: Restore it with -DUSE_INTERP_ERRORLINE.
+ * generic/tclCmdMZ.c: Updated callers.
+ * generic/tclDictObj.c:
+ * generic/tclIOUtil.c:
+ * generic/tclNamesp.c:
+ * generic/tclOOBasic.c:
+ * generic/tclOODefinedCmds.c:
+ * generic/tclOOMethod.c:
+ * generic/tclProc.c:
+ * generic/tclResult.c:
+ *** POTENTIAL INCOMPATIBILITY for C code directly using the
+ interp->errorLine field ***
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2008-12-02 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (TclFinalizeIOSubsystem): Replaced Alexandre
+ Ferrieux's first patch for [Bug 2270477] with a gentler version, also
+ supplied by him.
+
+2008-12-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c: Coding standards fixups.
+
+2008-12-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/cmdAH.test (cmdAH-32.6): Test was not portable; depended on a
+ C API function not universally available. [Bug 2371623]
+
+2008-11-30 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/clock.tcl (format, ParseClockScanFormat): Added a [string
+ map] to get rid of namespace delimiters before caching a scan or
+ format procedure. [Bug 2362156]
+ * tests/clock.test (clock-64.[12]): Added test cases for the bug that
+ was tickled by a namespace delimiter inside a format string.
+
+2008-11-29 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #210 IMPLEMENTATION
+
+ * generic/tclCmdAH.c (FileTempfileCmd):
+ * unix/tclUnixFCmd.c (TclpOpenTemporaryFile, DefaultTempDir):
+ * win/tclWinPipe.c (TclpOpenTemporaryFile):
+ * doc/file.n, tests/cmdAH.test: Implementation of [file tempfile]. I
+ do not claim that this is a brilliant implementation, especially on
+ Windows, but it covers the main points.
+
+ * generic/tclThreadStorage.c: General revisions to make code clearer
+ and more like the style used in the rest of the core. Includes adding
+ more comments and explanation of what is going on. Reduce the amount
+ of locking required.
+
+2008-11-27 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tcl.h: Alternate fix for [Bug 2251175]: missing
+ * generic/tclCompile.c: backslash substitution on expanded literals.
+ * generic/tclParse.c:
+ * generic/tclTest.c:
+ * tests/parse.test:
+
+2008-11-26 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIndexObj.c: Eliminate warning: unused variable
+ * generic/tclTest.c: A few more (harmless) Tcl_SetResult
+ eliminations.
+
+2008-11-26 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tclIndex: Removed reference to no-longer-extant procedure
+ 'tclLdAout'.
+ * doc/library.n: Corrected mention of 'auto_exec' to 'auto_execok'.
+ [Patch 2114900] thanks to Stuart Cassoff <stwo@users.sf.net>
+
+2008-11-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclIndexObj.c: Eliminate 3 calls to Tcl_SetResult, as
+ * generic/tclIO.c: examples how it should have been done.
+ * generic/tclTestObj.c: purpose: contribute in the TIP #340
+ discussion.
+
+2008-11-25 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (TclFinalizeIOSubsystem): Applied Alexandre
+ Ferrieux's patch for [Bug 2270477] to prevent infinite looping during
+ finalization of channels not bound to interpreters.
+
+2008-11-25 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Don't assume that Tcl_SetResult sets
+ interp->result, especially not in a DString test, in preparation for
+ TIP #340
+
+2008-11-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * tools/tcltk-man2html.tcl: Improvements to tackle tricky aspects of
+ cross references and new entities to map. [Bug 2330040]
+
+2008-11-19 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclThreadTest.c: Convert Tcl_SetResult(......, TCL_DYNAMIC)
+ to Tcl_SetResult(......, TCL_VOLATILE), in preparation for TIP #340
+
+2008-11-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.decls: Fix signature and implementation of
+ * generic/tclDecls.h: Tcl_HashStats, such that it conforms to the
+ * generic/tclHash.c: documentation. [Bug 2308236]
+ * generic/tclVar.c:
+ * doc/Hash.3:
+ * generic/tclDictObj.c: Convert Tcl_SetResult call to
+ Tcl_SetObjResult.
+
+2008-11-17 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tests/for.test: Check for uncompiled-for-continue [Bug 2186888]
+ fixed earlier.
+
+ * generic/tcl.h: Fix [Bug 2251175]: missing backslash
+ * generic/tclCompCmds.c: substitution on expanded literals.
+ * generic/tclCompile.c
+ * generic/tclParse.c
+ * generic/tclTest.c
+ * tests/compile.test
+ * tests/parse.test
+
+2008-11-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclTest.c: Replace two times Tcl_SetResult with
+ Tcl_SetObjResult, a little simplification in preparation for the TIP
+ #340 patch.
+
+2008-11-13 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.h: Rename static function FSUnloadTempFile to
+ * generic/tclIOUtil.c: TclFSUnloadTempFile, needed in tclLoad.c
+
+ * generic/tclLoad.c: Fixed [Bug 2269431]: Load of shared
+ objects leaves temporary files on windows.
+
+2008-11-12 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/registry.test: Use HKCU to avoid requiring admin access for
+ registry testing on Vista/Server2008
+
+2008-11-11 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclNamesp.c: Eliminate warning: passing arg 4 of
+ Tcl_SplitList from incompatible pointer type.
+ * win/tcl.m4: Reverted change from 2008-11-06 (was under the
+ impression that "-Wno-implicit-int" added an extra
+ warning)
+ * win/configure: (regenerated)
+ * unix/tcl.m4: Use -O2 as gcc optimization compiler flag, and get rid
+ of -Wno-implicit-int for UNIX.
+ * unix/configure: (regenerated)
+
+2008-11-10 Andreas Kupries <andreask@activestate.com>
+
+ * doc/platform_shell.n: Fixed [Bug 2255235], reported by Ulrich
+ * library/platform/pkgIndex.tcl: Ring <uring@users.sourceforge.net>.
+ * library/platform/shell.tcl: Updated the LOCATE command in the
+ * library/tm.tcl: package 'platform::shell' to handle the new form
+ * unix/Makefile.in: of 'provide' commands generated by tm.tcl. Bumped
+ * win/Makefile.in: package to version 1.1.4. Added cross-references
+ to the relevant parts of the code to avoid future desynchronization.
+
+2008-11-07 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclInt.h: Applied [Patch 2215022] from Duoas to clean up
+ * generic/tclBinary.c: the binary ensemble initiailization code.
+ * generic/tclNamesp.c: Extends the TclMakeEnsemble to do
+ * doc/ByteArrObj.3: sub-ensembles from tables.
+
+2008-11-06 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * win/tcl.m4: Add "-Wno-implicit-int" flag for gcc, as on UNIX
+ * win/configure: (regenerated)
+ * generic/tclIO.c: Eliminate an 'array index out of bounds' warning
+ on HP-UX.
+
+2008-11-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclPort.h: Remove the ../win/ header dir as the build system
+ already has it, and it confuses builds when used with private headers
+ installed.
+
+2008-11-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.h (TCLOO_VERSION): Bump version of TclOO.
+
+2008-10-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOBasic.c (TclOONRUpcatch): Reworked the code that does
+ * generic/tclOO.c (InitFoundation): class constructor handling so
+ that it is more robust and runs the constructor call in the context of
+ the caller of the class's constructor method. Needed because the
+ previously used code did not work at all after applying the fix below;
+ no Tcl existing command could reliably do what was needed any more.
+
+ * generic/tclOODefineCmds.c (GetClassInOuterContext): Rework and
+ factor out the code to resolve class names in definitions so that
+ classes are resolved from the perspective of the caller of the
+ [oo::define] command, rather than from the oo::define namespace! This
+ makes much code simpler by reducing how often fully-qualified names
+ are required (previously always in practice, so no back-compat issues
+ exist). [Bug 2200824]
+
+2008-10-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclCompile.h: CONSTify TclDTraceInfo
+ * generic/tclBasic.c:
+ * generic/tclProc.c:
+ * generic/tclEnv.c: Eliminate some -Wwrite-strings warnings
+ * generic/tclLink.c:
+
+2008-10-27 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclEncoding.c: Use "iso8859-1" and not "identity" as
+ the default and original [encoding system] value. Since "iso8859-1" is
+ built in to the C source code for Tcl now, there's no availability
+ issue, and it has the good feature of "identity" that we must have
+ ("bytes in" == "bytes out") without the bad feature of "identity"
+ ("broken as designed") that makes us want to abandon it. [RFE 2008609]
+ *** POTENTIAL INCOMPATIBILITY for older releases of Tclkit and any
+ other code expecting a particular value for Tcl's default system
+ encoding ***
+
+2008-10-24 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/http.tcl: Fixed a failure to read SHOUTcast streams
+ with the new 2.7 package. Introduced a new intial state as the first
+ response may not be HTTP*.
+
+2008-10-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdAH.c (ForNextCallback): handle TCL_CONTINUE in the for
+ body. [Bug 2186888]
+
+2008-10-22 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tcl.h: CONST -> const and white-spacing
+ * generic/tclCompile.h:
+ * generic/tclEncoding.c:
+ * generic/tclStubInit.c:
+ * generic/tclStubLib.c:
+ * generic/tcl.decls
+ * generic/tclInt.decls
+ * generic/tclTomMath.decls
+ * generic/tclDecls.h: (regenerated)
+ * generic/tclIntDecls.h: (regenerated)
+ * generic/tclIntPlatDecls.h: (regenerated)
+ * generic/tclOODecls.h: (regenerated)
+ * generic/tclOOIntDecls.h: (regenerated)
+ * generic/tclPlatDecls.h: (regenerated)
+ * generic/tclTomMathDecls.h: (regenerated)
+ * generic/tclIntDecls.h: (regenerated)
+ * tools/genStubs.tcl: CONST -> const and white-spacing
+
+2008-10-19 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclProc.c: Reset -level and -code values to defaults
+ after they are used. [Bug 2152286]
+
+2008-10-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (TclInfoCoroutineCmd): Added code to make this
+ check for being invoked in a syntactically correct way.
+
+ * doc/info.n: Added documentation of [info coroutine].
+
+ * doc/prefix.n: Improved the documentation by fixing formatting,
+ adding good-practice recommendations and cross-references, etc.
+
+2008-10-17 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclOO.decls: CONST -> const.
+ * generic/tclOODecls.h: (regenerated)
+ * generic/tclOOIntDecls.h: (regenerated)
+
+2008-10-17 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORTrans.c (DeleteReflectedTransformMap): Removed debug
+ output in C++ comment.
+
+2008-10-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompile.h: Declare the internal tclInstructionTable to
+ * generic/tclExecute.c: simply be "const", not CONST86.
+
+ * generic/tclCmdAH.c: whitespace.
+ * generic/tclCmdIL.c: Uninitialized variable warning.
+ * generic/tclTest.c: const correctness warning.
+
+2008-10-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/*: Many very small formatting fixes.
+ * doc/{glob,http,if}.n: More substantial reformatting for clarity.
+ * doc/split.n: Remove mention of defunct c.l.t.announce
+
+2008-10-16 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/regc_locale.c: Add "const" to many internal const tables.
+ * generic/tclClock.c: No functional or API change.
+ * generic/tclCmdIL.c
+ * generic/tclConfig.c
+ * generic/tclDate.c
+ * generic/tclEncoding.c
+ * generic/tclEvent.c
+ * generic/tclExecute.c
+ * generic/tclFileName.c
+ * generic/tclGetDate.y
+ * generic/tclInterp.c
+ * generic/tclIO.c
+ * generic/tclIOCmd.c
+ * generic/tclIORChan.c
+ * generic/tclIORTrans.c
+ * generic/tclLoad.c
+ * generic/tclObj.c
+ * generic/tclOOBasic.c
+ * generic/tclOOCall.c
+ * generic/tclOOInfo.c
+ * generic/tclPathObj.c
+ * generic/tclPkg.c
+ * generic/tclResult.c
+ * generic/tclStringObj.c
+ * generic/tclTest.c
+ * generic/tclTestObj.c
+ * generic/tclThreadTest.c
+ * generic/tclTimer.c
+ * generic/tclTrace.c
+ * macosx/tclMacOSXFCmd.c
+ * win/cat.c
+ * win/tclWinInit.c
+ * win/tclWinTest.c
+
+2008-10-16 Don Porter <dgp@users.sourceforge.net>
+
+ * library/init.tcl: Revised [unknown] so that it carefully
+ preserves the state of the ::errorInfo and ::errorCode variables at
+ the start of auto-loading and restores that state before the
+ autoloaded command is evaluated. [Bug 2140628]
+
+2008-10-15 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.h: Add "const" to many internal const tables, so
+ * generic/tclBinary.c: those will be put by the C-compiler in the
+ * generic/tclCompile.c: TEXT segment in stead of the DATA segment.
+ * generic/tclDictObj.c: This makes those tables sharable in shared
+ * generic/tclHash.c: libraries.
+ * generic/tclListObj.c:
+ * generic/tclNamesp.c:
+ * generic/tclObj.c:
+ * generic/tclProc.c:
+ * generic/tclRegexp.c:
+ * generic/tclStringObj.c:
+ * generic/tclUtil.c:
+ * generic/tclVar.c:
+
+2008-10-14 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclCmdAH.c: Fix minor compiler warnings when compiling
+ * generic/tclCmdMZ.c: with -Wwrite-strings.
+ * generic/tclIndexObj.c:
+ * generic/tclProc.c:
+ * generic/tclStubLib.c:
+ * generic/tclUtil.c:
+ * win/tclWinChan.c:
+ * win/tclWinDde.c:
+ * win/tclWinInit.c:
+ * win/tclWinReg.c:
+ * win/tclWinSerial.c:
+
+2008-10-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/binary.n: Formatting fix.
+
+2008-10-14 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bump version number to 8.6a4
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * generic/tclExecute.c: Fix compile warnings when --enable-symbols=all
+
+ * generic/tclCmdIL.c: Fix write to unallocated memory whenever
+ [lrepeat] returns an empty list.
+
+2008-10-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/chan.n, doc/fconfigure.n: Added even more emphatic text to
+ direct people to the correct manual pages for specific channel types,
+ suitable for the hard-of-reading. Following discussion on tcl-core.
+
+2008-10-13 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/tclWinThrd.c (TclpThreadCreate): We need to initialize the
+ thread id variable to 0 as on 64 bit windows this is a pointer sized
+ field while windows only fills it with a 32 bit value. The result is
+ an inability to join the threads as the ids cannot be matched.
+
+ * generic/tclTest.c (TestNRELevels): Set array to the right size.
+
+2008-10-13 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOInfo.c (InfoClassDestrCmd): Handle error case.
+
+ * generic/tclOOInt.h: Added macro magic to make things work with
+ Objective C. [Bug 2163447]
+
+2008-10-12 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: Fix bug in srcDelta encoding within ByteCodes.
+ The bug can only be triggered under conditions that cannot happen in
+ Tcl, but were met during development of L. Thanks go to Robert Netzer
+ for diagnosis and fix.
+
+2008-10-10 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.6a3 TAGGED FOR RELEASE ***
+
+ * changes: Updates for 8.6a3 release.
+
+2008-10-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOODefineCmds.c (TclOODefineUnexportObjCmd)
+ (TclOODefineExportObjCmd): Corrected export/unexport record synthesis.
+ [Bug 2155658]
+
+2008-10-08 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * unix/tclUnixChan.c: Fix minor compiler warning.
+ * unix/tcl.m4: Fix for [Bug 2073255]
+ * unix/configure: Regenerated
+
+2008-10-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic (TclInfoCoroutineCmd):
+ * tests/unsupported.test: Arrange for [info coroutine] to return {}
+ when a coroutine is running but the resume command has been deleted.
+ [Bug 2153080]
+
+2008-10-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTrace.c: Corrected handling of errors returned by
+ variable traces so that the errorInfo value contains the original
+ error message. [Bug 2151707]
+
+ * generic/tclVar.c: Revised implementation of TclObjVarErrMsg so
+ that error message construction does not disturb an existing
+ iPtr->errorInfo that may be in progress.
+
+2008-10-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/binary.n: Added better documentation of the [binary encode] and
+ [binary decode] subcommands.
+
+2008-10-07 Miguel Sofer <msofer@users.sf.net>
+
+ TIP #327,#328 IMPLEMENTATIONS
+
+ * generic/tclBasic.c: Move [tailcall], [coroutine] and
+ * generic/tclCmdIL.c: [yield] out of ::tcl::unsupported
+ * tclInt.h:
+ * tests/info.test: and into global scope: TIPs #327
+ * tests/unsupported.test: and #328
+
+2008-10-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/chan.n, doc/transchan.n: Documented the channel transformation
+ API of TIP #230.
+
+2008-10-06 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * tests/winFCmd.test: Fixed some erroneous tests on Vista+.
+ * generic/tclFCmd.c: Fix constness for msvc of last commit
+
+2008-10-06 Joe Mistachkin <joe@mistachkin.com>
+
+ * tools/man2tcl.c: Added missing line from patch by Harald Oehlmann.
+ [Bug 1934200]
+
+2008-10-05 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/FileSystem.3: CONSTified Tcl_FSFileAttrStringsProc
+ * generic/tclFCmd.c: and tclpFileAttrStrings. This allows
+ * generic/tclIOUtil.c: FileSystems to report their attributes
+ * generic/tclTest.c: as const strings, without worrying that
+ * unix/tclUnixFCmd.c: Tcl modifies them (which Tcl should not
+ * win/tclWinFCmd.c: do anyway, but the API didn't indicate that)
+ * generic/tcl.decls
+ * generic/tclDecls.h: regenerated
+ * generic/tcl.h: Make sure that if CONST84 is defined as empty,
+ CONST86 should be defined as empty as well
+ (unless overridden). This change complies with
+ TIP #27
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-05 Kevin B, Kenny <kennykb@acm.org>
+
+ * libtommath/bn_mp_sqrt.c (bn_mp_sqrt): Handle the case where a
+ * tests/expr.test (expr-47.13): number's square root is
+ between n<<DIGIT_BIT and n<<DIGIT_BIT+1. [Bug 2143288]
+ Thanks to Malcolm Boffey (malcolm.boffey@virgin.net) for the patch.
+
+ TIP #331 IMPLEMENTATION
+
+ * doc/lset.n:
+ * generic/tclListObj.c (TclLsetFlat):
+ * tests/lset.test: Modified the [lset] command so that it allows for
+ an index of 'end+1', which has the effect of appending an element to
+ the list.
+
+2008-10-05 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclInt.decls: CONSTified the AuxDataType argument
+ * generic/tclCompCmds.c: of TclCreateAuxData and
+ * generic/tclCompile.c: TclRegisterAuxDataType and the return
+ * generic/tclCompile.h: values of TclGetAuxDataType and
+ * generic/tclExecute.c: TclGetInstructionTable
+ * generic/tclIntDecls.h: regenerated
+ This change complies with TIP #27 (even though it only involves
+ internal function, so this is not even necessary).
+
+2008-10-05 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclIndexObj.c (TclInitPrefixCmd): Make the [tcl::prefix]
+ into an exported command. [Bug 2144595]
+
+2008-10-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdIL.c (InfoFrameCmd): Improved hygiene of result
+ * generic/tclRegexp.c (TclRegAbout): handling.
+
+2008-10-04 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tclLoad.c: Make sure that any library which doesn't have an
+ unloadproc is only really unloaded when no library code is executed
+ yet. [Bug 2059262]
+
+2008-10-04 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOInfo.c (GetClassFromObj): Factor out the code to parse
+ a Tcl_Obj and get a class. Also make result handling hygienic.
+ * generic/tclOOBasic.c (TclOOSelfObjCmd): Better hygiene of results,
+ and stop allocating quite so much memory by sharing special "method"
+ names.
+
+2008-10-04 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/ChnlStack.3: CONSTified the typePtr argument
+ * doc/CrtChannel.3: of Tcl_CreateChannel and Tcl_StackChannel
+ * generic/tcl.decls: and the return value of Tcl_GetChannelType
+ * generic/tcl.h
+ * generic/tclIO.h
+ * generic/tclIO.c
+ * generic/tclDecls.h: regenerated
+ This change complies with TIP #27.
+
+ * doc/Hash.3: CONSTified the typePtr argument
+ * generic/tcl.decls: of Tcl_InitCustomHashTable.
+ * generic/tcl.h
+ * generic/tclHash.c
+ * generic/tclDecls.h: regenerated
+ This change complies with TIP #27.
+
+ * doc/RegConfig.3: CONSTified the configuration argument
+ * generic/tcl.decls: of Tcl_RegisterConfig.
+ * generic/tcl.h
+ * generic/tclConfig.c
+ * generic/tclPkgConfig.c
+ * generic/tclDecls.h: regenerated
+ This change complies with TIP #27.
+
+ * doc/GetIndex.3: CONSTified the tablePtr argument
+ * generic/tcl.decls: of Tcl_GetIndexFromObj.
+ * generic/tclIndexObj.c
+ * generic/tclDecls.h: regenerated
+ This change complies with TIP #27.
+
+2008-10-03 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/stack.test:
+ * unix/tclUnixTest.c: Removed test command teststacklimit and the
+ corresponding constraint: it is not needed with NRE
+
+2008-10-03 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #195 IMPLEMENTATION
+
+ * generic/tclIndexObj.c (TclGetIndexFromObjList, PrefixMatchObjCmd)
+ * doc/prefix.n, tests/string.test: Added [tcl::prefix] command for
+ working with prefixes of strings at the Tcl level. [Patch 1040206]
+
+ TIP #265 IMPLEMENTATION
+
+ * generic/tclIndexObj.c (Tcl_ParseArgsObjv, PrintUsage):
+ * generic/tcl.h (Tcl_ArgvInfo): Added function for simple parsing of
+ * doc/ParseArgs.3 (new file): optional arguments to commands. Still
+ needs tests and the like. [FRQ 1446696] Note that some of the type
+ signatures are changed a bit from the proposed implementation so that
+ they better reflect codified good practice for argument order.
+
+2008-10-02 Andreas Kupries <andreask@activestate.com>
+
+ * tests/info.test (info-23.3): Updated output of the test to handle
+ the NRE-enabled eval and the proper propagation of location
+ information through it. [Bug 2017632]
+
+ * doc/info.n: Rephrased the documentation of 'info frame' for positive
+ numbers as level argument. [Bug 2134049]
+
+ * tests/info.test (info-22.8): Made pattern for file containing
+ tcltest less specific to accept both .tcl and .tm variants of the file
+ during matching. [Bug 2129828]
+
+2008-10-02 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #330 IMPLEMENTATION
+
+ * generic/tcl.h: Remove the "result" and "freeProc" fields
+ * generic/tclBasic.c: from the default public declaration of the
+ * generic/tclResult.c: Tcl_Interp struct. Code should no longer
+ * generic/tclStubLib.c: be accessing these fields. Access can be
+ * generic/tclTest.c: restored by defining USE_INTERP_RESULT, but
+ * generic/tclUtil.c: that should only be a temporary migration aid.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-02 Joe Mistachkin <joe@mistachkin.com>
+
+ * doc/info.n: Fix unmatched font change.
+ * doc/tclvars.n: Fix unmatched font change.
+ * doc/variable.n: Fix unmatched font change.
+ * tools/man2help2.tcl: Integrated patch from Harald Oehlmann.
+ [Bug 1934272]
+ * tools/man2tcl.c: Increase MAX_LINE_SIZE to fix "Too long line" error.
+ * win/buildall.vc.bat: Prefer the HtmlHelp target over the WinHelp
+ target. [Bug 2072891]
+ * win/makefile.vc: Fix the HtmlHelp and WinHelp targets to not be
+ mutually exclusive.
+
+2008-09-29 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #323 IMPLEMENTATION (partial)
+
+ * doc/glob.n: Revise [glob] to accept zero patterns.
+ * generic/tclFileName.c:
+ * tests fileName.test:
+
+ * doc/linsert.n: Revise [linsert] to accept zero elements.
+ * generic/tclCmdIL.c:
+ * tests/linsert.test:
+
+2008-09-29 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #326 IMPLEMENTATION
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Added -stride option to carry
+ * doc/lsort.n, tests/cmdIL.test: out sorting of lists where the
+ elements are grouped. Adapted from [Patch 2082681]
+
+ TIP #313 IMPLEMENTATION
+
+ * generic/tclCmdIL.c (Tcl_LsearchObjCmd): Added -bisect option to
+ * doc/lsearch.n, tests/lsearch.test: allow the finding of the
+ place to insert an element in a sorted list when that element is
+ not already there. [Patch 1894241]
+
+ TIP #318 IMPLEMENTATION
+
+ * generic/tclCmdMZ.c (StringTrimCmd,StringTrimLCmd,StringTrimRCmd):
+ Update the default set of trimmed characters to include some from the
+ larger UNICODE space. Factor out the default trim set into a macro so
+ that it is easier to keep them in synch.
+
+2008-09-28 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #314 IMPLEMENTATION
+
+ * generic/tclCompCmds.c (TclCompileEnsemble)
+ * generic/tclNamesp.c (NamespaceEnsembleCmd)
+ (Tcl_SetEnsembleParameterList, Tcl_GetEnsembleParameterList)
+ (NsEnsembleImplementationCmdNR):
+ * generic/tcl.decls, doc/Ensemble.3, doc/namespace.n
+ * tests/namespace.test: Allow the handling of a (fixed) number of
+ formal parameters between an ensemble's command and subcommand at
+ invokation time. [Patch 1901783]
+
+2008-09-28 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Fix the numLevels computations on
+ * generic/tclInt.h: coroutine yield/resume
+ * tests/unsupported.test:
+
+2008-09-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclFileName.c (Tcl_GetBlock*FromStat): Made this work
+ acceptably when working with OSes that don't support reporting the
+ block size from the stat() call. [Bug 2130726]
+
+ * generic/tclCmdIL.c (Tcl_LrepeatObjCmd): Improve the handling of the
+ case where the combination of number of elements and repeat count
+ causes the resulting list to be too large. [Bug 2130992]
+
+2008-09-26 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #323 IMPLEMENTATION (partial)
+
+ * doc/lrepeat.n: Revise [lrepeat] to accept both zero
+ * generic/tclCmdIL.c: repetitions and zero elements to be repeated.
+ * tests/lrepeat.test:
+
+ * doc/object.n: Revise standard oo method [my variable] to
+ * generic/tclOOBasic.c: accept zero variable names.
+ * tests/oo.test:
+
+ * doc/tm.n: Revise [tcl::tm::path add] and
+ * library/tm.tcl: [tcl::tm::path remove] to accept zero paths.
+ * tests/tm.test:
+
+ * doc/namespace.n: Revise [namespace upvar] to accept zero
+ * generic/tclNamesp.c: variable names.
+ * tests/upvar.test:
+
+ * doc/lassign.n: Revise [lassign] to accept zero variable names.
+ * generic/tclCmdIL.c:
+ * tests/cmdIL.test:
+
+2008-09-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.h (TCLOO_VERSION): Bump the version.
+
+2008-09-25 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #323 IMPLEMENTATION (partial)
+
+ * doc/global.n: Revise [global] to accept zero variable names.
+ * doc/variable.n: Revise [variable] likewise.
+ * generic/tclVar.c:
+ * tests/proc-old.test:
+ * tests/var.test:
+
+ * doc/global.n: Correct false claim about [info locals].
+
+2008-09-25 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #315 IMPLEMENTATION
+
+ * tests/platform.test: Update tests to expect revised results
+ * tests/safe.test: corresponding to the TIP 315 change.
+
+ * unix/tclUnixInit.c, win/tclWinInit.c (TclpSetVariables):
+ * doc/tclvars.n (tcl_platform): Define what character is used for
+ separating PATH-like lists. Forms part of the tcl_platform array.
+
+ * generic/tclOOCall.c (InitCallChain, IsStillValid):
+ * tests/oo.test (oo-25.2): Revise call chain cache management so that
+ it takes into account class-wide caching correctly. [Bug 2120903]
+
+2008-09-24 Don Porter <dgp@users.sourceforge.net>
+
+ TIP #323 IMPLEMENTATION (partial)
+
+ * doc/file.n: Revise [file delete] and [file mkdir] to
+ * generic/tclCmdAH.c: accept zero "pathname" arguments (the
+ * generic/tclFCmd.c: no-op case).
+ * tests/cmdAH.test:
+ * tests/fCmd.test:
+
+2008-09-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOMethod.c (DBPRINT): Remove obsolete debugging macro.
+ [Bug 2124814]
+
+ TIP #316 IMPLEMENTATION
+
+ * generic/tcl.decls, generic/tclFileName.c (Tcl_GetSizeFromStat, etc):
+ * doc/FileSystem.3: Added reader functions for Tcl_StatBuf.
+
+2008-09-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/Method.3: Corrected documentation. [Patch 2082450]
+
+ * doc/lreverse.n, mathop.n, regexp.n, regsub.n: Make sure that the
+ initial line of the manpage includes nothing that chokes old versions
+ of man. [Bug 2118123]
+
+2008-09-22 Donal K. Fellows <dkf@users.sf.net>
+
+ TIP #320 IMPLEMENTATION
+
+ * generic/tclOODefineCmds.c (TclOODefineVariablesObjCmd):
+ * generic/tclOOInfo.c (InfoObjectVariablesCmd, InfoClassVariablesCmd):
+ * generic/tclOOMethod.c (TclOOSetupVariableResolver, etc):
+ * doc/define.n, doc/ooInfo.n, benchmarks/cps.tcl:
+ * tests/oo.test (oo-26.*): Allow the declaration of the common
+ variables used in methods of a class or object. These are then mapped
+ in using a variable resolver. This makes many class declarations much
+ simpler overall, encourages good usage of variable names, and also
+ boosts speed a bit.
+
+ * generic/tclOOMethod.c (TclOOGetMethodBody): Factor out the code to
+ get the body of a procedure-like method. Reduces the amount of "poking
+ inside the abstraction" that is done by the introspection code.
+
+2008-09-22 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * doc/chan.n: Clean up paragraph order.
+
+2008-09-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (NEXT_INST_F):
+ * generic/tclInt.h (TCL_CT_ASSERT): New compile-time assertions,
+ adapted from www.pixelbeat.org/programming/gcc/static_assert.html
+
+2008-09-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: Correct the TclGetLongFromObj, TclGetIntFromObj,
+ and TclGetIntForIndexM macros so that they retrieve the longValue
+ field from the internalRep instead of casting the otherValuePtr field
+ to type long.
+
+2008-09-17 Miguel Sofer <msofer@users.sf.net>
+
+ * library/init.tcl: Export min and max commands from the mathfunc
+ namespace. [Bug 2116053]
+
+2008-09-16 Joe Mistachkin <joe@mistachkin.com>
+
+ * generic/tclParse.c: Move TclResetCancellation to be called on
+ returning to level 0, as opposed to it being called on starting a
+ substitution at level 0.
+
+2008-09-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Move TclResetCancellation to be called on
+ returning to level 0, as opposed to it being called on starting a
+ command at level 0. Add a call on returning via Tcl_EvalObjEx to fix
+ [Bug 2114165].
+
+2008-09-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/binary.n: Added partial documentation of [binary encode] and
+ [binary decode].
+
+ * tests/binary.test,cmdAH.test,cmdIL.test,cmdMZ.test,fileSystem.test:
+ More use of tcltest2 to simplify the tests as exposed to people.
+ * tests/compile.test (compile-18.*): Added *some* tests of the
+ disassmbler, though not of its output format.
+
+2008-09-10 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/nre.test: Add missing constraints; enable test of foreach
+ recursion.
+
+ * generic/tclBasic.c:
+ * generic/tclCompile.h:
+ * generic/tclExecute.c (INST_EVAL_STK): Wrong numLevels when evaling a
+ canonical list. [Bug 2102930]
+
+2008-09-10 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclListObj.c (Tcl_ListObjGetElements): Make this list->dict
+ transformation - encountered when using [foreach] with dicts - not as
+ expensive as it was before. Spotted by Kieran Elby and reported on
+ tcl-core.
+
+2008-09-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/append.test, appendComp.test, cmdAH.test: Use the powers of
+ tcltest2 to make these files simpler.
+
+2008-09-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c (TclCompileTokens):
+ * generic/tclExecute.c (CompileExprObj): Fix a perf bug (found by Alex
+ Ferrieux) where some variables in the LVT where not being accessed by
+ index. Fix missing localCache management in compiled expressions found
+ while analyzing the bug.
+
+2008-09-07 Miguel Sofer <msofer@users.sf.net>
+
+ * doc/namespace.n: Fix [Bug 2098441]
+
+2008-09-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclTrace.test (TraceVarProc):
+ * generic/unsupported.test: Insure that unset traces are run even when
+ the coroutine is unwinding. [Bug 2093947]
+
+ * generic/tclExecute.c (CACHE_STACK_INFO):
+ * tests/unsupported.test: Restore execEnv's bottomPtr. [Bug 2093188]
+
+2008-09-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Stripped "callers" of the _ANSI_ARGS_ macro
+ * compat/dirent2.h: to support a TCL_NO_DEPRECATED build.
+ * compat/dlfcn.h:
+ * unix/tclUnixPort.h:
+
+ * generic/tcl.h: Removed the conditional #define of
+ _ANSI_ARGS_ that would support pre-prototype C compilers. Since
+ _ANSI_ARGS_ is no longer used in tclDecls.h, it's clear no one
+ compiling against Tcl 8.5 headers is making use of a -DNO_PROTOTYPES
+ configuration.
+
+2008-09-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/socket.test: Rewrote so as to use tcltest2 better.
+
+2008-09-01 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdAH.c: NRE-enabling [eval]; eval scripts are now
+ * generic/tclOOBasic.c: bytecompiled. Adapted recursion limit tests
+ * tests/interp.test: that were relying on eval not being
+ * tests/nre.test: compiled. Part of the [Bug 2017632] project.
+ * tests/unsupported.test:
+
+2008-09-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOMethod.c (InvokeProcedureMethod):
+ * generic/tclOO.c (ObjectRenamedTrace): Arrange for only methods that
+ involve callbacks into the Tcl interpreter to be skipped when the
+ interpreter is being torn down. Allows the semantics of destructors in
+ a dying interpreter to be more useful when they're implemented in C.
+
+2008-08-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * unix/Makefile.in: Ensure that all TclOO headers get installed.
+ * win/Makefile.in: [Bug 2082299]
+ * win/makefile.bc:
+ * win/makefile.vc:
+
+2008-08-28 Don Porter <dgp@users.sourceforge.net>
+
+ * README: Bump version number to 8.6a3
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2008-08-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/tclvars.n, doc/library.n: Ensured that these two manual pages
+ properly cross-reference each other. Issue reported on Tcler's Chat.
+
+2008-08-26 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (InfoCoroutine):
+ * tests/unsupported.test: New command that returns the FQN of the
+ currently executing coroutine. Lives as infoCoroutine under
+ unsupported, but is designed to become a subcommand of [info]
+
+2008-08-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (NRInterpCoroutine): Store the caller's eePtr,
+ stop assuming the coroutine is invoked from the same execEnv where it
+ was created.
+
+2008-08-24 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCmdAH.c (TclNRForeachCmd): Converted the [foreach]
+ command to have an NRE-aware non-compiled implementation. Part of the
+ [Bug 2017632] project. Also restructured the code so as to manage its
+ temporary memory more efficiently.
+
+2008-08-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Removed unused var; fixed function pointer
+ * generic/tclOOInt.h: declarations (why did gcc start complaining
+ * generic/tclOOMethod.c: all of a sudden?)
+ * generic/tclProc.c:
+
+2008-08-23 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclInt.h (EnsembleImplMap): Added extra field to make it
+ * generic/tclNamesp.c (TclMakeEnsemble): easier to build non-recursive
+ ensembles in the core.
+
+ * generic/tclDictObj.c (DictForNRCmd): Converted the [dict for]
+ command to have an NRE-aware non-compiled implementation. Part of the
+ [Bug 2017632] project.
+
+2008-08-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c:
+ * generic/tclExecute.c: Set special errocodes: COROUTINE_BUSY,
+ COROUTINE_CANT_YIELD, COROUTINE_ILLEGAL_YIELD.
+
+2008-08-22 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.6a2 TAGGED FOR RELEASE ***
+
+ * changes: Updates for 8.6a2 release.
+
+ * generic/tcl.h: Drop use of USE_COMPAT85_CONST. That added
+ indirection without value. Use -DCONST86="" to engage source compat
+ support for code written for 8.5 headers.
+
+ * generic/tclUtil.c (TclReToGlob): Added missing set of the
+ *exactPtr value to really fix [Bug 2065115]. Also avoid possible
+ DString overflow.
+ * tests/regexpComp.test: Correct duplicate test names.
+
+2008-08-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Previous fix, now done right.
+ * generic/tclCmdIL.c:
+ * generic/tclInt.h:
+ * tests/unsupported.test:
+
+2008-08-21 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/regexp.test, tests/regexpComp.test: Correct re2glob ***=
+ * generic/tclUtil.c (TclReToGlob): translation from exact
+ to anywhere-in-string match. [Bug 2065115]
+
+2008-08-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Reduced the use of CONST86 and eliminated
+ * generic/tcl.decls: the use of CONST86_RETURN to support source
+ code compatibility with Tcl 8.5 on those public routines passing
+ (Tcl_Filesystem *), (Tcl_Timer *), and (Tcl_Objtype *) values which
+ have been const-ified. What remains is the minimum configurability
+ needed to support code written for pre-8.6 headers via the new
+ -DUSE_COMPAT85_CONST compiler directive.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+ * generic/tclDecls.h: make genstubs
+
+2008-08-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Fix the cmdFrame level count in
+ * generic/tclCmdIL.c: coroutines. Fix small bug on coroutine
+ * generic/tclInt.h: rewind.
+
+2008-08-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclProc.c (Tcl_DisassembleObjCmd): Added ability to
+ disassemble TclOO methods. The code to do this is very ugly.
+
+2008-08-21 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclOOMethod.c: Added casts to make MSVC happy
+ * generic/tclBasic.c:
+
+2008-08-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (AllocObject): Suppress compilation of commands in
+ the namespace allocated for each object.
+ * generic/tclOOMethod.c (PushMethodCallFrame): Restore some of the
+ hackery that makes calling methods of classes fast. Fixes performance
+ problem introduced by the fix of [Bug 2037727].
+
+ * generic/tclCompile.c (TclCompileScript): Allow the suppression of
+ * generic/tclInt.h (NS_SUPPRESS_COMPILATION): compilation of commands
+ * generic/tclNamesp.c (Tcl_CreateNamespace): from a namespace or its
+ children.
+
+2008-08-20 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclTest.c (TestconcatobjCmd): Fix use of internal-only
+ TclInvalidateStringRep macro. [Bug 2057479]
+
+2008-08-17 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Implementation of [coroutine] and [yield]
+ * generic/tclCmdAH.c: commands (in tcl::unsupported).
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclInt.h:
+ * tests/unsupported.test:
+
+ * generic/tclTest.c (TestconcatobjCmd):
+ * generic/tclUtil.c (Tcl_ConcatObj):
+ * tests/util.test (util-4.7):
+ Fix [Bug 1447328]; the original "fix" turned Tcl_ConcatObj() into a
+ hairy monster. This was exposed by [Bug 2055782]. Additionally,
+ Tcl_ConcatObj could corrupt its input under certain conditions!
+
+ *** NASTY BUG FIXED ***
+
+2008-08-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Better cmdFrame management
+
+2008-08-14 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/fileName.test: Revise new tests for portability to case
+ insensitive filesystems.
+
+2008-08-14 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclNREvalObjv, Tcl_NRCallObjProc):
+ * generic/tclProc.c (TclNRInterpProcCore, InterpProcNR2):
+ DTrace probes for NRE. [Bug 2017160]
+
+ * generic/tclBasic.c (TclDTraceInfo): Add two extra arguments to
+ * generic/tclCompile.h: DTrace 'info' probes for tclOO
+ * generic/tclDTrace.d: method & class/object info.
+
+ * generic/tclCompile.h: Add support for debug logging of DTrace
+ * generic/tclBasic.c: 'proc', 'cmd' and 'inst' probes (does _not_
+ require a platform with DTrace).
+
+ * generic/tclCmdIL.c (TclInfoFrame): Check fPtr->line before
+ dereferencing as line info may
+ not exists when TclInfoFrame()
+ is called from a DTrace probe.
+
+ * tests/fCmd.test (fCmd-6.23): Made result matching robust when test
+ workdir and /tmp are not on same FS.
+
+ * unix/tclUnixThrd.c: Remove unused TclpThreadGetStackSize()
+ * generic/tclInt.h: and related ifdefs and autoconf tests.
+ * unix/tclUnixPort.h: [Bug 2017264] (jenglish)
+ * unix/tcl.m4:
+
+ * unix/Makefile.in: Ensure Makefile shell is /bin/bash for
+ * unix/configure.in (SunOS): DTrace-enabled build on Solaris.
+ (followup to 2008-06-12) [Bug 2016584]
+
+ * unix/tcl.m4 (SC_PATH_X): Check for libX11.dylib in addition to
+ libX11.so et al.
+
+ * unix/configure: autoconf-2.59
+ * unix/tclConfig.h.in: autoheader-2.59
+
+2008-08-13 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/nre.test: Added test for large {*}-expansion effects
+
+2008-08-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclFileName.c: Fix for errors handling -types {}
+ * tests/fileName.test: option to [glob]. [Bug 1750300]
+ Thanks to Matthias Kraft and George Peter Staplin.
+
+2008-08-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclOOInfo.c (InfoObjectDefnCmd, InfoObjectMixinsCmd):
+ Fix # args displayed. [Bug 2048676]
+
+2008-08-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclOOMethod.c (PushMethodCallFrame): Added missing check
+ for bytecode validity. [Bug 2037727]
+
+ * generic/tclProc.c (TclProcCompileProc): On recompile of a
+ proc, clear away any entries on the CompiledLocal list from the
+ previous compile. This will prevent compile of temporary variables in
+ the proc body from growing the localCache arbitrarily large.
+
+ * README: Bump version number to 8.6a2
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * changes: Updates for 8.6a2 release.
+
+2008-08-11 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/http.tcl: Remove 8.5 requirement.
+ * library/http/pkgIndex.tcl:
+ * unix/Makefile.in:
+ * win/Makefile.in:
+ * win/makefile.vc:
+
+2008-08-11 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl: Added a 'package provide' command to the generated
+ ifneeded scripts of Tcl Modules, for early detection of conflicts
+ between the version specified through the file name and a 'provide'
+ command in the module implementation, if any. Note that this change
+ also now allows Tcl Modules to not provide a 'provide' command at all,
+ and declaring their version only through their filename.
+
+ * generic/tclProc.c (Tcl_ProcObjCmd): Fixed memory leak triggered by
+ * tests/proc.test: procbody::test::proc. See [Bug 2043636]. Added a
+ test case demonstrating the leak before the fix. Fixed a few spelling
+ errors in test descriptions as well.
+
+2008-08-11 Don Porter <dgp@users.sourceforge.net>
+
+ * library/http/http.tcl: Bump http version to 2.7.1 to account
+ * library/http/pkgIndex.tcl: for [Bug 2046486] bug fix. This
+ * unix/Makefile.in: release of http now requires a
+ * win/Makefile.in: dependency on Tcl 8.5 to be able to
+ * win/makefile.bc: use the unsigned formats in the
+ * win/makefile.vc: [binary scan] command.
+
+2008-08-11 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/http.tcl: CRC field from zlib data should be treated as
+ unsigned for 64bit support. [Bug 2046846]
+
+2008-08-10 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclProc.c: Completely removed ProcCompileProc, which was a
+ fix for [Bug 1482718]. This is not needed at least since varReform,
+ where the local variable data at runtime is read from the CallFrame
+ and/or the LocalCache.
+
+2008-08-09 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Slight cleanup
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+
+2008-08-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclExecute.c: Fix warnings.
+
+ * generic/tclOOMethod.c (PushMethodCallFrame): Fix uninitialized efi
+ name field.
+
+ * tests/lrange.test (lrange-1.17): Add test cleanup; whitespace.
+
+2008-08-08 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.6a2 release.
+
+2008-08-08 Kevin Kenny <kennykb@acm.org>
+
+ * library/tzdata/CET:
+ * library/tzdata/MET:
+ * library/tzdata/Africa/Casablanca:
+ * library/tzdata/America/Eirunepe:
+ * library/tzdata/America/Rio_Branco:
+ * library/tzdata/America/Santarem:
+ * library/tzdata/America/Argentina/San_Luis:
+ * library/tzdata/Asia/Karachi:
+ * library/tzdata/Europe/Belgrade:
+ * library/tzdata/Europe/Berlin:
+ * library/tzdata/Europe/Budapest:
+ * library/tzdata/Europe/Sofia:
+ * library/tzdata/Indian/Mauritius: Olson's tzdata2008e.
+
+2008-08-07 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Fix tailcalls falling out of tebc into
+ * generic/tclExecute.c: Tcl_EvalEx. [Bug 2017946]
+ * generic/tclInt.h:
+
+2008-08-06 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclOO.c: Revised TclOO's check for an interp being
+ deleted during handling of object command deletion. The old code was
+ relying on documented features of command delete traces that do not in
+ fact work. [Bug 2039178]
+
+ * tests/oo.test (oo-26.*): Added tests that demonstrate failure
+ of TclOO to check for various kinds of invalid bytecode during method
+ dispatch. [Bug 2037727]
+
+2008-08-06 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclLookupSimpleVar): Fix bug that the core could
+ not trigger before TclOO: the number of locals was being read from the
+ Proc, which can under some circumstance be out of sync with the
+ localCache's. Found by dgp while investigating [Bug 2037727].
+
+ * library/init.tcl (::unknown): Removed the [namespace inscope]
+ hack that was maintained for Itcl
+
+ *** POTENTIAL INCOMPATIBILITY *** for Itcl
+ Itcl users will need a new release with Itcl's [Patch 2040295], or
+ else load the tiny script in that patch by themselves (rewrite
+ ::unknown). Note that it is a script-only patch.
+
+2008-08-05 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/tclUnixChan.c: Streamline async connect logic [Patch 1994512]
+
+2008-08-05 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Fix for [Bug 2038069] by dgp.
+ * tests/execute.test:
+
+2008-08-04 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/nre.test: Added tests for [if], [while] and [for]. A test
+ for [foreach] has been added and marked as knownbug, awaiting for it
+ to be NR-enabled.
+
+ * generic/tclBasic.c: Made atProcExit commands run
+ * generic/tclCompile.h: unconditionally, streamlined
+ * generic/tclExecute.c: atProcExit/tailcall processing in TEBC.
+ * generic/tclProc.c:
+ * tests/unsupported.test:
+
+2008-08-04 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Stopped faulty double-logging of errors to
+ * tests/execute.test: stack trace when a compile epoch bump triggers
+ fallback to direct evaluation of commands in a compiled script.
+ [Bug 2037338]
+
+2008-08-03 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: New unsupported command atProcExit that
+ * generic/tclCompile.h: shares the implementation with tailcall.
+ * generic/tclExecute.c: Fixed a segfault in tailcalls. Tests added.
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+ * generic/tclNamesp.c:
+ * tests/unsupported.test:
+
+2008-08-02 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/NRE.test (removed): Migrated tests to standard locations,
+ * tests/nre.test (new): separating core functionality from the
+ * tests/unsupported.test (new): experimental commands.
+
+2008-08-01 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * doc/Exit.3: Do not call Tcl_Finalize implicitly
+ * generic/tclEvent.c: on DLL_PROCESS_DETACH as it may lead
+ * win/tclWin32Dll.c (DllMain): to issues and the user should be
+ explicitly calling Tcl_Finalize before unloading regardless. Clarify
+ the docs to note the explicit need in embedded use.
+
+2008-08-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c: Revised timing of the CmdFrame stack
+ * tests/info.test: management in TclEvalEx so that the CmdFrame
+ will still be on the stack at the time Tcl_LogCommandInfo is called to
+ append another level of -errorinfo information. Sets the stage to add
+ file and line data to the stack trace. Added test to check that [info
+ frame] functioning remains unchanged by the revision.
+
+2008-07-31 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/NRE.test: Replaced all deep-recursing tests by shallower
+ tests that actually measure the C-stack depth. This makes them
+ bearable again (even under memdebug) and avoid crashing on failure.
+
+ * generic/tclBasic.c: NR-enabling [catch], [if] and [for] and
+ * generic/tclCmdAH.c: [while] (the script, not the tests)
+ * generic/tclCmdIL.c:
+ * generic/tclCmdMZ.c:
+ * generic/tclInt.h:
+ * tests/NRE.test:
+
+ * generic/tclBasic.c: Moved the few remaining defs from tclNRE.h to
+ * generic/tclDictObj.c: tclInt.h, eliminated inclusion of tclNRE.h
+ * generic/tclExecute.c: everywhere.
+ * generic/tclInt.h:
+ * generic/tclInterp.c:
+ * generic/tclNRE.h (removed):
+ * generic/tclNamesp.c:
+ * generic/tclOOBasic.c:
+ * generic/tclOOInt.h:
+ * generic/tclProc.c:
+ * generic/tclTest.c:
+ * unix/Makefile.in:
+
+2008-07-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Improved tailcalls.
+ * generic/tclCompile.h:
+ * generic/tclExecute.c:
+ * generic/tclTest.c:
+ * tests/NRE.test:
+
+ * generic/tclBasic.c (TclNREvalObjEx): New comments and code reorg
+ to clarify what is happening.
+
+ * generic/tclBasic.c: Guard against the value of iPtr->evalFlags
+ changing between the times where TEOV and TEOV_exception run. Thanks
+ dgp for catching this.
+
+2008-07-29 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/NRE.test: New tests that went MIA in the NRE revamping
+
+ * generic/tclBasic.c: Clean up
+ * generic/tclNRE.h:
+ * generic/tclExecute.c:
+
+ * generic/tclBasic.c: Made use of the thread's alloc cache stored in
+ * generic/tclInt.h: the ekeko at interp creation to avoid hitting
+ * generic/tclNRE.h: the TSD each time an NRE callback is pushed or
+ * generic/tclThreadAlloc.c: pulled; the approach is suitably general
+ to extend to every other obj allocation where an interp is know; this
+ is left for some other time, requires a lot of grunt work.
+
+ * generic/tclExecute.c: Fix [Bug 2030670] that cause TclStackRealloc
+ to panic on rare corner cases. Thx ajpasadyn for diagnose and patch.
+
+ * generic/tcl.decls: Completely revamped NRE implementation, with
+ * generic/tclBasic.c: (almost) unchanged API.
+ * generic/tclCompile.h:
+ * generic/tclExecute.c: TEBC will require a bit of a facelift, but
+ * generic/tclInt.decls: TEOV at least looks great now. There are new
+ * generic/tclInt.h: tests (incomplete!) to verify that execution
+ * generic/tclInterp.c: is indeed in the same TEBC instance, at the
+ * generic/tclNRE.h: same level in all stacks involved. Tailcalls
+ * generic/tclNamesp.c: are still a bit leaky, still deserving to be
+ * generic/tclOOBasic.c: in tcl::unsupported.
+ * generic/tclOOMethod.c:
+ * generic/tclProc.c: Uninit'd var warnings in TEBC with -O2, no
+ * generic/tclTest.c: warnings otherwise.
+
+2008-07-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/FileSystem.3: CONSTified many functions using
+ * generic/tcl.decls: Tcl_FileSystem which all are supposed
+ * generic/tclDecls.h: to be a constant, but this was not
+ * generic/tclFileSystem.h: reflected in the API: Tcl_FSData,
+ * generic/tclIOUtil.c: Tcl_FSGetInternalRep, Tcl_FSRegister,
+ * generic/tclPathObj.c: Tcl_FSNewNativePath, Tcl_FSUnregister,
+ * generic/tclTest.c: Tcl_FSGetFileSystemForPath ...
+ This change complies with TIP #27.
+ ***POTENTIAL INCOMPATIBILITY***
+
+2008-07-28 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c: Added missing ref count when creating an empty
+ string as path (TclEvalEx). In 8.4 the missing code caused panics in
+ the testsuite. It doesn't in 8.5. I am guessing that the code path
+ with the missing the incr-refcount is not invoked any longer. Because
+ the bug in itself is certainly the same.
+
+2008-07-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOMethod.c (PushMethodCallFrame): Remove hack that should
+ have gone when this code was merged into Tcl.
+
+2008-07-27 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/Object.3: CONSTified 3 functions using Tcl_ObjType
+ * doc/ObjectType.3: which all are supposed to be a constant, but
+ * generic/tcl.decls: this was not reflected in the API:
+ * generic/tcl.h: Tcl_RegisterObjType, Tcl_ConvertToType,
+ * generic/tclDecls.h: Tcl_GetObjType
+ * generic/tclObj.c: Introduced a CONST86_RETURN, so extensions
+ * generic/tclCompCmds.c: which use Tcl_ObjType directly can be
+ * generic/tclOOMethod.c: modified to compile against both Tcl 8.5 and
+ * generic/tclTestobj.c: Tcl 8.6. tclDecls.h regenerated
+ This change complies with TIP #27.
+ ***POTENTIAL INCOMPATIBILITY***
+
+2008-07-25 Andreas Kupries <andreask@activestate.com>
+
+ * test/info.test: More work on singleTestInterp usability. [1605269]
+
+ * tests/info.test: Tests 38.* added, exactly testing the tracking of
+ location for uplevel scripts. Resolved merge conflict on info-37.0,
+ switched !singleTestInterp constraint to glob matching instead. Ditto
+ info-22.8, removed constraint, more glob matching, and reduced the
+ depth of the stack we check. More is coming, right now I want to
+ commit the bug fixes.
+
+ * tests/oo.test: Updated oo-22.1 for expanded location tracking.
+
+ * generic/tclCompile.c (TclInitCompileEnv): Reorganized the
+ initialization of the #280 location information to match the flow in
+ TclEvalObjEx to get more absolute contexts.
+
+ * generic/tclBasic.c (TclEvalObjEx): Added missing cleanup of extended
+ location information.
+
+2008-07-25 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/info.test (info-37.0): Add !singleTestInterp constraint;
+ (info-22.8, info-23.0): switch to glob matching to avoid sensitivity
+ to tcltest.tcl line number changes, remove knownBug constraint, fix
+ expected result. [Bug 1605269]
+
+2008-07-24 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * doc/Notifier.3: CONSTified 4 functions in the Notifier which
+ * doc/Thread.3: all have a Tcl_Time* in it which is supposed
+ * generic/tcl.decls: to be a constant, but this was not reflected
+ * generic/tcl.h: reflected in the API:
+ * generic/tclDecls.h: Tcl_SetTimer, Tcl_WaitForEvent,
+ * generic/tclNotify.c: Tcl_ConditionWait, Tcl_SetMaxBlockTime
+ * macosx/tclMacOSXNotify.c:
+ * generic/tclThread.c: Introduced a CONST86, so extensions which have
+ * unix/tclUnixNotfy.c: have their own Notifier (are there any?) can
+ * unix/tclUnixThrd.c: can be modified to compile against both Tcl
+ * win/tclWinNotify.c: Tcl 8.5 and Tcl 8.6
+ * win/tclWinThrd.c: Regenerated tclDecls.h with "make stubs".
+ This change complies with TIP #27
+ ***POTENTIAL INCOMPATIBILITY***
+
+2008-07-23 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * tests/lrange.test: Added relative speed test to check for lrange
+ in-place optimization committed 2008-06-30.
+ * tests/binary.test: Added relative speed test to check for pure byte
+ array CONCAT1 optimization committed 2008-06-30.
+
+2008-07-23 Andreas Kupries <andreask@activestate.com>
+
+ * tests/info.test: Reordered the tests to have monotonously increasing
+ numbers.
+
+ * generic/tclBasic.c: Modified TclArgumentGet to reject pure lists
+ * generic/tclCmdIL.c: immediately, without search. Reworked setup of
+ * generic/tclCompile.c: eoFramePtr, doesn't need the line information,
+ * tests/info.test: more sensible to have everything on line 1 when
+ eval'ing a pure list. Updated the users of the line information to
+ special case this based on the frame type (i.e.
+ TCL_LOCATION_EVAL_LIST). Added a testcase demonstrating the new
+ behaviour.
+
+2008-07-23 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c (GetCommandSource): Added comment with
+ explanation and warning for waintainers.
+
+2008-07-22 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclCompile.c: Made the new TclEnterCmdWordIndex static, and
+ * generic/tclCompile.h: ansified.
+
+ * generic/tclBasic.c: Ansified the new functions. Added missing
+ function comments.
+
+ * generic/tclBasic.c: Reworked the handling of bytecode literals for
+ * generic/tclCompile.c: #280 to fix the abysmal performance for deep
+ * generic/tclCompile.h: recursion, replaced the linear search through
+ * generic/tclExecute.c: the whole stack with another hashtable and
+ * generic/tclInt.h: simplified the data structure used by the compiler
+ by using an array instead of a hashtable. Incidentially this also
+ fixes the memory leak reported via [Bug 2024937].
+
+2008-07-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Added numLevels field to CommandFrame, let
+ * generic/tclExecute.c: GetCommandSource use it. This solves [Bug
+ * generic/tclInt.h: 2017146]. Thx dgp for the analysis.
+
+2008-07-21 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclBasic.c: Extended the existing TIP #280 system (info
+ * generic/tclCmdAH.c: frame), added the ability to track the absolute
+ * generic/tclCompCmds.c: location of literal procedure arguments, and
+ * generic/tclCompile.c: making this information available to uplevel
+ * generic/tclCompile.h: eval, and siblings. This allows proper
+ * generic/tclInterp.c: tracking of absolute location through custom
+ * generic/tclInt.h: (Tcl-coded) control structures based on uplevel,
+ * generic/tclNamesp.c: etc.
+ * generic/tclProc.c:
+ * tests/info.test:
+
+2008-07-21 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/*.c: Fix [2021443] inconsistant "wrong # args" messages
+ * win/tclWinReg.c
+ * win/tclWinTest.c
+ * tests/*.test
+
+2008-07-21 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ TIP #304 IMPLEMENTATION
+
+ * generic/tcl.decls: Public API
+ * generic/tclIOCmds.c: Generic part
+ * unix/tclUnixPipe.c: OS part
+ * win/tclWinPipe.c: OS part
+ * tests/chan.test: [chan pipe] tests
+ * tests/ioCmd.test: Modernized checks
+ * tests/ioTrans.test:
+
+2008-07-21 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclFCmd.c: Inodes on windows are unreliable. [Bug 2015723]
+ * tests/winFCmd.test: test rename with inode collision
+
+2008-07-21 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tcl.decls: Changed the implementation of
+ * generic/tclBasic.c: [namespace import]; removed
+ * generic/tclDecls.h: Tcl_NRObjProc, replaced with
+ * generic/tclExecute.c: Tcl_NRCmdSwap (proposed public
+ * generic/tclInt.h: NRE API). This should fix
+ * generic/tclNRE.h: [Bug 582506].
+ * generic/tclNamesp.c:
+ * generic/tclStubInit.c:
+
+ * generic/tclBasic.c: NRE: enabled calling NR commands
+ * generic/tclExecute.c: from the callbacks. Completely
+ * generic/tclInt.h: redone tailcall implementation
+ * generic/tclNRE.h: using the new feature. [Bug 2021489]
+ * generic/tclProc.c:
+ * tests/NRE.test:
+
+2008-07-20 Kevin B. Kenny <kenykb@acm.org>
+
+ * tests/fileName.test: Repaired the failing test fileName-15.7 from
+ dkf's commit earlier today.
+
+2008-07-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (SetDictFromAny): Make the list->dict
+ transformation a bit more efficient; modern dicts are ordered and so
+ we can round-trip through lists without needing the string rep at all.
+ * generic/tclListObj.c (SetListFromAny): Make the dict->list
+ transformation not lossy of internal representations and hence more
+ efficient. [Bug 2008248] (ajpasadyn) but using a more efficient patch.
+
+ * tests/fileName.test: Revise to reduce the obscurity of tests. In
+ particular, all tests should now produce informative messages on
+ failure and the quantity of [catch]-based obscurity is now greatly
+ reduced; non-erroring is now checked for directly.
+
+2008-07-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/env.test: Add LANG to the list of variables that are not
+ touched by the environment variable tests, so that subprocesses can
+ get their system encoding correct.
+
+ * tests/exec.test, tests/env.test: Rewrite so that non-ASCII
+ characters are not used in the final comparison. Part of fixing [Bug
+ 1513659].
+
+2008-07-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Optimization: replace calls to
+ * generic/tclDictObj.c: Tcl_NRAddCallback with the macro
+ * generic/tclExecute.c: TclNRAddCallback.
+ * generic/tclInterp.c:
+ * generic/tclNRE.h:
+ * generic/tclNamesp.c:
+ * generic/tclOO.c:
+ * generic/tclOOBasic.c:
+ * generic/tclOOCall.c:
+ * generic/tclOOInt.h:
+ * generic/tclOOMethod.c:
+ * generic/tclProc.c:
+
+2008-07-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (TclNRNewObjectInstance, FinalizeAlloc):
+ * generic/tclOOBasic.c (TclOO_Class_Create, TclOO_Class_CreateNs)
+ (TclOO_Class_New, FinalizeConstruction, AddConstructionFinalizer):
+ NRE-enablement of the class construction methods.
+
+2008-07-18 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/NRE.test: Added basic tests for deep TclOO calls
+
+ * generic/tcl.decls: Change the public api prefix from
+ * generic/tcl.h: TclNR_foo to Tcl_NRfoo
+ * generic/tclBasic.c:
+ * generic/tclDecls.h:
+ * generic/tclDictObj.c:
+ * generic/tclExecute.c:
+ * generic/tclInterp.c:
+ * generic/tclNRE.h:
+ * generic/tclNamesp.c:
+ * generic/tclOO.c:
+ * generic/tclOOBasic.c:
+ * generic/tclOOCall.c:
+ * generic/tclOOMethod.c:
+ * generic/tclProc.c:
+ * generic/tclStubInit.c:
+
+2008-07-18 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOBasic.c (TclOO_Object_Eval, FinalizeEval): NRE-enable
+ the oo::object.eval method.
+
+2008-07-18 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclDictObj.c (DictWithCmd, DictUpdateCmd): Fix refcounting
+ bugs that caused crashes [Bug 2017857].
+
+ * generic/tclBasic.c (TclNREvalObjEx): Streamline the management of
+ the command frame (opt).
+
+2008-07-17 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclDictObj.c (DictWithCmd, FinalizeDictWith): Split the
+ implementation of [dict with] so that it works with NRE.
+ (DictUpdateCmd, FinalizeDictUpdate): Similarly for the non-compiled
+ version of [dict update].
+
+2008-07-16 George Peter Staplin <georgeps@users.sf.net>
+
+ * win/tclWinThrd.c: Test for TLS_OUT_OF_INDEXES to make certain that
+ thread key creation is successful.
+
+2008-07-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c, generic/tclOOInt.h, generic/tclOOBasic.c:
+ * generic/tclOOCall.c, generic/tclOOMethod.c: NRE-enable the TclOO
+ implementation in Tcl. No change to public APIs, except that method
+ implementations can now be NRE-aware if they choose (which normal
+ methods and forwards are). On the other hand, callers of
+ TclOOInvokeObject (which is only in the internal stub table) will need
+ to deal with the fact that it's only safe to call inside an NRE-aware
+ context.
+ ***POTENTIAL INCOMPATIBILITY***
+
+2008-07-15 Miguel Sofer <msofer@users.sf.net>
+
+ * tests/NRE.test: Better constraint for testing the existence of
+ * tests/stack.test: teststacklimit, to insure that the test suite
+ runs under tclsh.
+
+ * generic/tclParse.c: Fixing incomplete reversion of "fix" for [Bug
+ 2017583], missing TclResetCancellation call.
+
+2008-07-15 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclBasic.c (Tcl_CancelEval): Fix blunder. [Bug 2018603]
+
+ * doc/DictObj.3: Fix error in example. [Bug 2016740]
+
+ * generic/tclNamesp.c (EnsembleUnknownCallback): Factor out some of
+ the more complex parts of the ensemble code to make it easier to
+ understand and hence to permit tighter compilation of code on the
+ critical path.
+
+2008-07-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclParse.c: Reverting the "fix" for [Bug 2017583], numLevel
+ * tests/parse.test: management and TclInterpReady check seems to be
+ necessary after all.
+
+2008-07-14 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclProc.c (TclNRApplyObjCmd, TclObjInterpProcCore):
+ * generic/tclBasic.c (TclNR_AddCallback, TclEvalObjv_NR2):
+ * generic/tclNRE.h (TEOV_callback): Change the callback storage type
+ to use an array, so guaranteeing correct inter-member spacing and
+ memory layout.
+
+2008-07-14 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Remove unneeded TclInterpReady calls
+ * generic/tclParse.c:
+
+ * generic/tclBasic.c.: Embedded Tcl_Canceled() calls into
+ * generic/tclExecute.c: TclInterpReady().
+ * generic/tclParse.c:
+
+ * generic/tclVar.c: Fix error message
+
+ * generic/tclParse.c: Remove unnecessary numLevel management
+ * tests/parse.test: [Bug 2017583]
+
+ * generic/tclBasic.c.: NRE left too many calls to
+ * generic/tclExecute.c: TclResetCancellation lying around: it
+ * generic/tclProc.c: only needs to be called prior to any
+ iPtr->numLevels++. Thanks mistachkin.
+
+ * generic/tclBasic.c: TclResetCancellation() calls were misplaced
+ (merge mishap); stray //. Thanks patthoyts.
+
+ * generic/tclInt.h: The new macros TclSmallAlloc and TclSmallFree
+ were badly defined under mem debugging [Bug 2017240] (thx das)
+
+2008-07-13 Miguel Sofer <msofer@users.sf.net>
+
+ NRE implementation [Patch 2017110]
+
+ * generic/tcl.decls: The NRE infrastructure
+ * generic/tcl.h:
+ * generic/tclBasic.c:
+ * generic/tclCmdAH.c:
+ * generic/tclCompile.h:
+ * generic/tclDecls.h:
+ * generic/tclExecute.c:
+ * generic/tclHistory.c:
+ * generic/tclInt.decls:
+ * generic/tclInt.h:
+ * generic/tclIntDecls.h:
+ * generic/tclNRE.h:
+ * generic/tclStubInit.c:
+ * unix/Makefile.in:
+
+ * generic/tclInterp.c: NRE-enabling: procs, lambdas, uplevel,
+ * generic/tclNamesp.c: same-interp aliases, ensembles, imports
+ * generic/tclProc.c: and namespace_eval.
+
+ * generic/tclTestProcBodyObj.c: New NRE specific tests (few, but
+ * tests/NRE.test: note that the thing is actually
+ tested by the whole testsuite.
+
+ * tests/interp.test: Fixed numLevel counting.
+ * tests/parse.test:
+ * tests/stack.test:
+
+ * unix/configure: Removing support for the hacky nonportable
+ * unix/configure.in: stack check: it is not needed anymore, Tcl
+ * unix/tclConfig.h.in: is very thrifty on the C stack.
+ * unix/tclUnixInit.c:
+ * unix/tclUnixTest.c:
+ * win/tclWin32Dll.c:
+
+2008-07-08 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclGet.c: Corrected out of date comments and removed
+ * generic/tclInt.decls: internal routine TclGetLong() that's no
+ longer used. If an extension is using this from the internal stubs
+ table, it can shift to the public routine Tcl_GetLongFromObj() or
+ can request addition of a public Tcl_GetLong().
+ ***POTENTIAL INCOMPATIBILITY***
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2008-07-08 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/CrtInterp.3: Tighten up the descriptions of behaviour to make
+ this page easier to read for a "Tcl 8.6" audience.
+
+2008-07-07 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclCmdIL.c (InfoFrameCmd): Fixed unsafe idiom of setting
+ the interp result found by Don Porter.
+
+2008-07-07 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/regexp.n, doc/regsub.n: Correct examples. [Bug 1982642]
+
+2008-07-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/lindex.n: Improve examples.
+
+2008-07-03 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (InvokeTclMethod): Fixed the memory leak
+ reported in [Bug 1987821]. Thanks to Miguel for the report and Don
+ Porter for tracking the cause down.
+
+2008-07-03 Don Porter <dgp@users.sourceforge.net>
+
+ * library/package.tcl: Removed [file readable] testing from
+ [tclPkgUnknown] and friends. We find out soon enough whether a file is
+ readable when we try to [source] it, and not testing before allows us
+ to workaround the bugs on some common filesystems where [file
+ readable] lies to us. [Patch 1969717]
+
+2008-07-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/regc_nfa.c (duptraverse): Impose a maximum stack depth on
+ the single most recursive part of the RE engine. The actual maximum
+ may need tuning, but that needs a system with a small stack to carry
+ out. [Bug 1905562]
+
+ * tests/string.test: Eliminate non-ASCII characters from the actual
+ test script. [Bug 2006884]
+
+2008-06-30 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/ObjectType.3: Clean up typedef formatting.
+
+2008-06-30 Don Porter <dgp@users.sourceforge.net>
+
+ * doc/ObjectType.3: Updated documentation of the Tcl_ObjType
+ struct to match expectations of Tcl 8.5. [Bug 1917650]
+
+2008-06-30 Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+
+ * generic/tclCmdIL.c: Lrange cleanup and in-place optimization. [Patch
+ 1890831]
+
+ * generic/tclExecute.c: Avoid useless String conversion for CONCAT1 of
+ pure byte arrays. [Patch 1953758]
+
+2008-06-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/*.1, doc/*.3, doc/*.n: Many small updates, purging out of date
+ change bars and cleaning up the formatting of typedefs. Added a few
+ missing bits of documentation in the process.
+
+2008-06-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Plug memory leak in [Bug 1999176] fix. Thanks
+ to Rolf Ade for detecting.
+
+2008-06-29 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/interp.n: Corrected order of subcommands. [Bug 2004256]
+ Removed obsolete (i.e. 8.5) .VS/.VE pairs.
+
+ * doc/object.n (EXAMPLES): Fix incorrect usage of oo::define to be
+ done with oo::objdefine instead. [Bug 2004480]
+
+2008-06-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Plug memory leak in [Bug 1972879] fix. Thanks
+ to Rolf Ade for detecting and Dan Steffen for the fix. [Bug 2004654]
+
+2008-06-26 Andreas Kupries <andreask@activestate.com>
+
+ * unix/Makefile.in: Followup to my change of 2008-06-25, make code
+ generated by the Makefile and put into the installed tm.tcl
+ conditional on interpreter safeness as well. Thanks to Daniel Steffen
+ for reminding me of that code.
+
+2008-06-25 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.6a1 TAGGED FOR RELEASE ***
+
+ * changes: Updates for 8.6a1 release.
+
+ * generic/tclOO.h: Bump to TclOO 0.5.
+
+2008-06-25 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl: Modified the handling of Tcl Modules and of the
+ * library/safe.tcl: Safe Base to interact nicely with each other,
+ * library/init.tcl: enabling requiring Tcl Modules in safe
+ * tests/safe.test: interpreters. [Bug 1999119]
+
+2008-06-25 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/rules.vc: Fix versions of dde and registry dlls
+ * win/makefile.vc: Fix problem building with staticpkg option
+
+2008-06-24 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Fixed some internals management in the "path"
+ Tcl_ObjType for the empty string value. Problem led to a crash in the
+ command [glob -dir {} a]. [Bug 1999176]
+
+2008-06-24 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * doc/fileevent.n: Fix examples and comment on eof use. [Bug 1995063]
+
+2008-06-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclPathObj.c: Fixed bug in Tcl_GetTranslatedPath() when
+ operating on the "Special path" variant of the "path" Tcl_ObjType
+ intrep. A full normalization was getting done, in particular, coercing
+ relative paths to absolute, contrary to what the function of producing
+ the "translated path" is supposed to do. [Bug 1972879]
+
+2008-06-20 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.6a1 release.
+
+ * generic/tclInterp.c: Fixed completely boneheaded mistake that
+ * tests/interp.test: [interp bgerror $slave] and [$slave bgerror]
+ would always act like [interp bgerror {}]. [Bug 1999035]
+
+ * tests/chanio.test: Corrected flawed tests revealed by a -debug 1
+ * tests/cmdAH.test: -singleproc 1 test suite run.
+ * tests/event.test:
+ * tests/interp.test:
+ * tests/io.test:
+ * tests/ioTrans.test:
+ * tests/namespace.test:
+
+ * tests/encoding.test: Make failing tests pass again. [Bug 1972867]
+
+2008-06-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (Tcl_ObjectContextInvokeNext): Corrected 'next' (at
+ * tests/oo.test (oo-7.8): end of a call chain) to make it
+ * doc/next.n: consistent with the TIP. [Bug 1998244]
+
+ * generic/tclOOCall.c (AddSimpleClassChainToCallContext): Make sure
+ * tests/oo.test (oo-14.8): that class mixins are processed in the
+ documented order. [Bug 1998221]
+
+2008-06-19 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updates for 8.6a1 release.
+
+ * README: Bump version number to 8.6a1
+ * generic/tcl.h:
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2008-06-17 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclClock.c (ClockConvertlocaltoutcObjCmd): Removed left
+ over debug output.
+
+2008-06-17 Andreas Kupries <andreask@activestate.com>
+
+ * doc/tm.n: Followup to changelog entry 2008-03-18 regarding
+ ::tcl::tm::Defaults. Updated the documentation to not only mention the
+ new (underscored) form of environment variable names, but make it the
+ encouraged form as well. [Bug 1914604]
+
+2008-06-17 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclClock.c (ConvertLocalToUTC):
+ * tests/clock.test (clock-63.1): Fixed a bug where the internal
+ ConvertLocalToUTC command segfaulted if passed a dictionary without
+ the 'localSeconds' key. To the best of my knowledge, the bug was not
+ observable in the [clock] command itself.
+
+2008-06-16 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclCmdIL.c (TclInfoFrame): Moved the code looking up the
+ * tests/info.test: information for key 'proc' out of the
+ TCL_LOCATION_BC branch to after the switch, this is common to all
+ frame types. Updated the testsuite to match. This was exposed by the
+ 2008-06-08 commit (Miguel), switching uplevel from direct eval to
+ compilation. [Bug 1987851]
+
+2008-06-16 Andreas Kupries <andreask@activestate.com>
+
+ * tests/ioTrans.test (iortrans-11.*): Fixed same issue as for
+ iortrans.tf-11.*, cleanup of temp file, making this a followup to the
+ entry on 2008-06-10 by myself.
+
+2008-06-13 David Gravereaux <davygrvy@pobox.com>
+
+ * win/rules.vc: SYMBOLS macro is now being set to zero when $(OPTS) is
+ not available.
+ * win/makefile.vc: The Stubs source files (tclStubLib.c and
+ tclOOStubLib.c) should not be compiled with the -GL flag.
+
+2008-06-13 Joe Mistachkin <joe@mistachkin.com>
+
+ TIP #285 IMPLEMENTATION
+
+ * doc/Eval.3: Added documentation for the Tcl_CancelEval and
+ Tcl_Canceled functions and the TCL_CANCEL_UNWIND flag bit.
+ * doc/after.n: Corrected the spelling of 'canceled' in the
+ documentation.
+ * doc/interp.n: Added documentation for [interp cancel].
+ * generic/tcl.decls: Added the Tcl_CancelEval and Tcl_Canceled
+ functions to the stubs table.
+ * generic/tcl.h: Added the TCL_CANCEL_UNWIND flag bit.
+ * generic/tclBasic.c: The bulk of the script cancellation
+ functionality is defined here. Added code to initialize and manage the
+ script cancellation hash table in a thread-safe manner. Reset script
+ cancellation flags prior to increasing the nesting level (if the
+ nesting level is currently zero) and always cooperatively check for
+ script cancellation near the start of TclEvalObjvInternal and after
+ invoking async handlers.
+ * generic/tclDecls.h: Regenerated.
+ * generic/tclEvent.c: Call TclFinalizeEvaluation during finalization
+ to cleanup the script cancellation hash table. During [vwait], always
+ cooperatively check for script cancellation. Corrected the spelling of
+ 'canceled' in comments to be consistent with the documentation.
+ * generic/tclExecute.c: Reset script cancellation flags prior to
+ increasing the nesting level (if the nesting level is currently zero)
+ and always cooperatively check for script cancellation after invoking
+ async handlers. Prevent [catch] from catching script cancellation when
+ the TCL_CANCEL_UNWIND flag is set (similar to the manner used by TIP
+ 143 when a limit has been exceeded).
+ * generic/tclInt.decls: Added TclResetCancellation to the internal
+ stubs table.
+ * generic/tclInt.h: Added asyncCancel and asyncCancelMsg fields to the
+ private Interp structure. Added private interp flag value CANCELED to
+ help control script cancellation.
+ * generic/tclIntDecls.h: Regenerated.
+ * generic/tclInterp.c (Tcl_InterpObjCmd): Added [interp cancel]
+ subcommand.
+ * generic/tclNotify.c (Tcl_DeleteEventSource): Corrected the spelling
+ of 'canceled' in comments to be consistent with the documentation.
+ * generic/tclParse.c: Reset script cancellation flags prior to
+ * generic/tclProc.c: increasing the nesting level (if the nesting
+ level is currently zero) and cooperatively check for script
+ cancellation prior to evaluating commands.
+ * generic/tclStubInit.c: Regenerated.
+ * generic/tclThreadTest.c (Tcl_ThreadObjCmd): Added script
+ cancellation support ([testthread cancel]).
+ Modified [testthread id] to allow querying of the 'main' thread ID.
+ Corrected comments to reflect the actual command syntax. Made
+ [testthread wait] cooperatively check for script cancellation. Added
+ [testthread event] to allow for processing one pending event without
+ blocking.
+ * generic/tclTimer.c: Delay for a maximum of 500 milliseconds prior to
+ checking for async handlers and script cancellation.
+ * tests/cmdAH.test: Changed [interp c] to [interp create].
+ * tests/interp.test: Added and fixed tests for [interp cancel].
+ * tests/thread.test: Added tests for script cancellation via
+ [testthread cancel].
+ * tools/man2help2.tcl: Fixed problems with WinHelp target (see
+ * tools/man2tcl.c: [Bug 1934200], [Bug 1934265], and [Bug 1934272]).
+ * win/makefile.vc: Added 'pdbs' option for Windows build rules to
+ * win/rules.vc: allow for non-debug builds with full symbols.
+ * win/tcl.hpj.in: Corrected version for WinHelp target.
+ * win/tclWinNotify.c: Used SleepEx and WaitForSingleObjectEx on
+ * win/tclWinThrd.c: Windows because they are alertable.
+
+2008-06-12 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: Add complete deps on tclDTrace.h.
+
+ * generic/tclOO.c: Use TclOOStubs hooks field to retrieve
+ * generic/tclOODecls.h: TclOOIntStubs pointer. [Bug 1980953]
+ * generic/tclOOIntDecls.h:
+ * generic/tclOOStubInit.c:
+ * generic/tclOOStubLib.c:
+
+ * generic/tclIORTrans.c: Fix signed <-> unsigned cast warnings.
+
+ * unix/Makefile.in: Clean generated tclDTrace.h file.
+ * unix/configure.in (SunOS): Fix static DTrace-enabled build.
+
+ * unix/tcl.m4 (SunOS-5.11): Fix 64bit amd64 support with gcc & Sun cc.
+ * unix/configure: autoconf-2.59
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: Add tclIORTrans.c; updates and
+ cleanup for Xcode 3.1/Leopard.
+ * macosx/Tcl.xcode/project.pbxproj: Sync Tcl.xcodeproj changes.
+ * macosx/README: Document new build configs.
+
+2008-06-10 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclEncoding.c(UtfToUtfProc): Avoid unwanted sign extension
+ when converting incomplete UTF-8 sequences. See [Bug 1908443] for
+ details.
+
+2008-06-10 Andreas Kupries <andreask@activestate.com>
+
+ * tests/ioTrans.test (iortrans.tf-6.1): Fixed the [Bug 1988552],
+ reported by Kevin. Have to close the channel before removal of the
+ file. Fixed same bug in test 'iortrans.tf-11.0', after fixing missing
+ cleanup of the file in 'iortrans.tf-11.*'. Lastly fixed the names of
+ the threaded tests 'iortrans-8.*' to the correct 'iortrans.tf-8.*'.
+
+2008-06-09 Andreas Kupries <andreas_kupries@users.sourceforge.net>
+
+ * generic/tclIORTrans.c (ReflectInput): Fixed a bug triggered by Pat
+ Thoyts <patthoyts@users.sourceforge.net>. Reset the EOF flag after
+ draining the Tcl level into the result buffer, to make sure that the
+ result buffer will be drained as well by repeated calls to
+ ReflectInput should it contain more than one buffer-full of data.
+ Without that reset the higher I/O system will not call on ReflectInput
+ anymore due to the assumed EOF, thus losing the data which did not fit
+ in the buffer of the call which caused the eof and drain.
+
+2008-06-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOCall.c (TclOOGetSortedMethodList): Plug memory leak
+ that occurred when all methods were hidden. [Bug 1987817]
+
+2008-06-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Compilation of uplevel scripts, allow
+ * generic/tclCompCmds.c: non-body compiled scripts to access the
+ * generic/tclCompile.c: LVT (but not to extend it) and enable the
+ * generic/tclCompile.h: canonical list opt to sidestep the
+ * generic/tclExecute.c: compiler. [Patch 1973096]
+ * generic/tclProc.c:
+ * tests/uplevel.test:
+
+2008-06-06 Andreas Kupries <andreask@activestate.com>
+
+ TIP #230 IMPLEMENTATION
+
+ * generic/tclIOCmd.c: Integration of transform commands into 'chan'
+ ensemble.
+ * generic/tclInt.h: Definitions of the transform commands.
+ * generic/tclIORTrans.c: Implementation of the reflection transforms.
+ * tests/chan.test: Tests updated for new sub-commands of 'chan'.
+ * tests/ioCmd.test: Tests updated for new sub-commands of 'chan'.
+ * tests/ioTrans.test: Whole new set of tests for the reflection
+ transform.
+ * unix/Makefile.in: Integration of new files into build rules.
+ * win/Makefile.in: Integration of new files into build rules.
+ * win/makefile.vc: Integration of new files into build rules.
+
+ NOTE: The file 'tclIORTrans.c' has a lot of code in common with the
+ file 'tclIORChan.c', as that made it much easier to develop the
+ reference implementation as a separate module. Now that the
+ transforms have been committed the one thing left to do is to go
+ over both modules and see which of the common parts we can
+ factor out and share.
+
+2008-06-04 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclBinary.c: TIP #317 implementation
+ * tests/binary.test:
+
+2008-06-02 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclOO.c (ReleaseClassContents): Fix the one remaining
+ valgrind complaint about oo.test, caused by failing to protect the
+ Object as well as the Class corresponding to a subclass being deleted
+ and hence getting a freed-memory read when attempting to delete the
+ class command. [Bug 1981001]
+
+2008-06-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOOMethod.c (Tcl_NewMethod): Complete the fix of [Bug
+ 1981001], previous fix was incomplete though helpful in telling me
+ where to look.
+
+2008-06-01 Joe Mistachkin <joe@mistachkin.com>
+
+ * win/Makefile.in: Add tclOO genstubs to Windows makefiles and remove
+ * win/makefile.vc: -DBUILD_tcloo because it is no longer required.
+
+2008-06-01 Kevin B. Kenny <kennykb@acm.org>
+
+ * generic/tclOODecls.h: Added the swizzling of DLLEXPORT and
+ * generic/tclOOIntDecls.h: DLLIMPORT needed to make EXTERN work.
+
+ * generic/tclDictObj.c: Added missing initializers to the ensemble
+ map to silence a compiler warning. Thanks to
+ George Peter Staplin for the report.
+
+ * generic/tclOOMethod.c: Fix a bug where the refcount of a method was
+ reset if the method was redefined while there
+ was an active invocation. [Bug 1981001]
+
+2008-06-01 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.decls, unix/Makefile.in (genstubs): Make generation of
+ stub tables correct.
+ * generic/tclOO{Decls.h,IntDecls.h,StubInit.c,StubLib.c}: Fixes to
+ make the generation work correctly, removing subtle differences
+ between output of different versions of stub generator.
+
+2008-06-01 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclOOStubLib.c: Ensure use of tcl stubs; include in
+ * unix/Makefile.in: stub lib; disable broken tclOO
+ genstubs
+
+ * generic/tclOO.c: Make tclOO stubs tables 'static const'
+ * generic/tclOODecls.h: and stub table pointers MODULE_SCOPE
+ * generic/tclOOIntDecls.h: (change generated files manually
+ * generic/tclOOStubInit.c: pending genstubs support for tclOO).
+ * generic/tclOOStubLib.c:
+
+ * generic/tclOO.c: Fix warnings for 'int<->ptr
+ * generic/tclOOCall.c: conversion' and 'signed vs unsigned
+ * generic/tclOOMethod.c: comparison'.
+
+ * tests/msgcat.test: Fix for ::tcl::mac::locale with @modifier.
+
+ * tools/tsdPerf.tcl: Use [info sharedlibextension]
+
+ * unix/tclConfig.h.in: autoheader-2.59
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: Add new tclOO files; add debug
+ * macosx/README: configs with corefoundation
+ disabled and with gcov; update
+ to Xcode 3.1.
+
+2008-05-31 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclOO.c (InitFoundation): Correct reference counting for
+ strings used when creating the constructor for classes.
+ * generic/tclOOMethod.c (TclOODelMethodRef): Correct fencepost error
+ in reference counting of method implementation structures.
+ * tests/oo.test (oo-0.5): Added a test to detect a memory leak problem
+ relating to disposal of the core object system.
+
+ TIP#257 IMPLEMENTATION
+
+ * generic/tclBasic.c, generic/tclOOInt.h: Correct declarations.
+ * win/Makefile.in, win/makefile.bc, win/makefile.vc: Build support for
+ Win32, from Joe Mistachkin. [Patch 1980861]
+
+ * generic/tclOO*, doc/*, tests/oo.test: Port of implementation of
+ TclOO to sit directly inside Tcl. Note that this is incomplete (e.g.
+ no build support yet for Windows).
+
+2008-05-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tests/io.test (io-53.9): Need to close chan before removing file.
+
+2008-05-26 Donal K. Fellows <dkf@users.sf.net>
+
+ * win/makefile.bc: Remove deprecated winhelp target.
+ * win/Makefile.in, win/makefile.vc: It didn't work correctly anyway.
+
+2008-05-23 Andreas Kupries <andreask@activestate.com>
+
+ * win/tclWinChan.c (FileWideSeekProc): Accepted a patch by Alexandre
+ Ferrieux <ferrieux@users.sourceforge.net> to fix the [Bug 1965787].
+ 'tell' now works for locations > 2 GB as well instead of going
+ negative.
+
+ * generic/tclIO.c (Tcl_SetChannelBufferSize): Accepted a patch by
+ * tests/io.test: Alexandre Ferrieux <ferrieux@users.sourceforge.net>
+ * tests/chanio.test: to fix the [Bug 1969953]. Buffersize outside of
+ the supported range are now clipped to nearest boundary instead of
+ ignored.
+
+2008-05-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclNamesp.c (Tcl_LogCommandInfo): Restored ability to
+ handle the argument value length = -1. Thanks to Chris Darroch for
+ discovering the bug and providing the fix. [Bug 1968245]
+
+2008-05-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclParse.c (ParseComment): The new TclParseAllWhiteSpace
+ * tests/parse.test (parse-15.60): routine has no mechanism to
+ return the "incomplete" status of "\\\n" so calling this routine
+ anywhere that can be reached within a Tcl_ParseCommand() call is a
+ mistake. In particular, ParseComment() must not use it. [Bug 1968882]
+
+2008-05-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclNamesp.c (Tcl_SetNamespaceUnknownHandler): Corrected odd
+ logic for handling installation of namespace unknown handlers which
+ could lead too very strange things happening in the error case.
+
+2008-05-16 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompile.c: Fix crash with tcl_traceExec. Found and fixed
+ by Alexander Pasadyn. [Bug 1964803]
+
+2008-05-15 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * win/makefile.vc: We should use the thread allocator for threaded
+ * win/rules.vc: builds. Added 'tclalloc' option to disable.
+
+2008-05-09 George Peter Staplin <georgeps@xmission.com>
+
+ * tools/tsdPerf.c: A loadable Tcl extension for testing TSD
+ performance.
+ * tools/tsdPerf.tcl: A simplistic tool that uses the thread
+ extension and tsdPerf.so to get some performance metrics by,
+ simulating, simple TSD contention.
+
+2008-05-09 George Peter Staplin <georgeps@xmission.com>
+
+ * generic/tcl.h: Make Tcl_ThreadDataKey a void *.
+ * generic/tclInt.h: Change around some function names and add some
+ new per-platform declarations for thread-specific data functions.
+ * generic/tclThread.c: Make use of of the new function names that no
+ longer have a Tclp prefix.
+ * generic/tclThreadStorage.c: Replace the core thread-specific data
+ (TSD) mechanism with an array offset solution that eliminates the hash
+ tables, and only uses one slot of native TSD. Many thanks to Kevin B.
+ Kenny for his help with this.
+
+ * unix/tclUnixThrd.c: Add platform-specific TSD functions for use by
+ * win/tclWinThrd.c: tclThreadStorage.c.
+
+2008-05-09 Kevin B. Kenny <kennykb@acm.org>
+
+ * tests/dict.test (dict-19.2): Corrected a bug where the test was
+ changed to use [apply] instead of a temporary proc, but the cleanup
+ script still attempted to delete the temporary proc.
+
+2008-05-07 Donal K. Fellows <dkf@cspool38.cs.man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileDictAppendCmd): Fix silly off-by
+ one error that caused a crash every time a compiled 'dict append' with
+ more than one argument was used. Found by Colin McCormack.
+
+2008-05-02 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclBasic.c: Converted the [binary] command into an
+ * generic/tclBinary.c: ensemble.
+ * generic/tclInt.h:
+ * test/binary.test: Updated the error tests for ensemble errors.
+
+ * generic/tclFileName.c: Reverted accidental commit of TIP 316 APIs.
+
+2008-04-27 Donal K. Fellows <dkf@users.sf.net>
+
+ * */*.c: A large tranche of getting rid of pre-C89-isms; if your
+ compiler doesn't support things like proper function declarations,
+ 'void' and 'const', borrow a proper one when building Tcl. (The header
+ files allow building things that link against Tcl with really ancient
+ compilers still; the requirement is just when building Tcl itself.)
+
+2008-04-26 Zoran Vasiljevic <vasiljevic@users.sourceforge.net>
+
+ * generic/tclAsync.c: Tcl_AsyncDelete(): panic if attempt to locate
+ handler token fails. Happens when some other thread attempts to delete
+ somebody else's token.
+
+ Also, panic early if we find out the wrong thread attempting to delete
+ the async handler (common trap). As, only the one that created the
+ handler is allowed to delete it.
+
+2008-04-24 Andreas Kupries <andreask@activestate.com>
+
+ * tests/ioCmd.test: Extended testsuite for reflected channel
+ implementation. Added test cases about how it handles if the rug is
+ pulled out from under a channel (= killing threads, interpreters
+ containing the tcl command for a channel, and channel sitting in a
+ different interpreter/thread.)
+
+ * generic/tclIORChan.c: Fixed the bugs exposed by the new testcases,
+ redone most of the cleanup and exit handling.
+
+2008-04-21 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclIOUtil.c: Removed all code delimited by
+ * generic/tclTest.c: USE_OBSOLETE_FS_HOOKS, completing
+ * tests/ioCmd.test: the deprecation path for these
+ * tests/ioUtil.test (removed): obsolete interfaces. (Code was active
+ in Tcl 8.4, present but enabled only by customized compile switch in
+ Tcl 8.5, and now completely gone for Tcl 8.6). Also removed all tests
+ relevant only to the removed interfaces.
+
+2008-04-19 George Peter Staplin <georgeps@xmission.com>
+
+ * doc/Ensemble.3: Fix a typo: s/defiend/defined/
+ Thanks to hat0 for spotting this.
+
+2008-04-16 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclInt.h: Make stubs tables 'static const' and
+ * generic/tclStubInit.c: export only module-scope pointers to
+ * generic/tclStubLib.c: the main stubs tables (for package
+ * tools/genStubs.tcl: initialization). [Patch 1938497]
+ * generic/tclBasic.c (Tcl_CreateInterp):
+ * generic/tclTomMathInterface.c (TclTommath_Init):
+
+ * generic/tclInt.h: Revise Tcl_SetNotifier() to use a
+ * generic/tclNotify.c: module-scope hooks table instead of
+ * generic/tclStubInit.c: runtime stubs-table modification;
+ * macosx/tclMacOSXNotify.c: ensure all hookable notifier functions
+ * win/tclWinNotify.c: check for hooks; remove hook checks in
+ * unix/tclUnixNotfy.c: notifier API callers. [Patch 1938497]
+
+2008-04-15 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CopyData): Applied another patch by Alexandre
+ * io.test (io-53.8a): Ferrieux <ferrieux@users.sf.net>,
+ * chanio.test (chan-io-53.8a): to shift EOF handling to the async
+ part of the command if a callback is specified, should the channel be
+ at EOF already when fcopy is called. Testcase by myself.
+
+2008-04-15 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/Makefile.in: Adjust tclDTrace.h dependencies for removal
+ of tclStubLib.o from TCL_OBJS. [Bug 1942795]
+
+2008-04-14 Kevin B. Kenny <kennykb@acm.org>
+
+ * unix/tclUnixTime.c (NativeGetTime): Removed obsolete use of
+ 'struct timezone' in the call to 'gettimeofday'. [Bug 1942197]
+
+ * tests/clock.test (clock-33.5, clock-33.5a, clock-33.8, clock-33.8a):
+ Added comments to the test that it can fail on a heavily loaded
+ system.
+
+2008-04-10 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIOCmd.c (Tcl_FcopyObjCmd): Keeping check for negative
+ values, changed to not be an error, but behave like the special value
+ -1 (copy all, default).
+
+ * tests/iocmd.test (iocmd-15.{12,13}): Removed.
+
+ * tests/io.test (io-52.5{,a,b}): Reverted last change, added
+ * tests/chanio.test (chan-io-52.5{,a,b}): comment regarding the
+ meaning of -1, added two more testcases for other negative values,
+ and input wrapped to negative.
+
+2008-04-09 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/{fCmd,unixFCmd,winFCmd,winFile}.test: Tidying up of the test
+ suite to make better use of tcltest2 and be clearer about what is
+ being tested.
+
+ * win/Makefile.in (html): Added target for doing convenient
+ documentation builds, mirroring the one from unix/Makefile.
+
+2008-04-09 Andreas Kupries <andreask@activestate.com>
+
+ * tests/chanio.test (chan-io-52.5): Removed '-size -1' from test,
+ * tests/io.test (io-52.5): does not seem to have any bearing, and was
+ an illegal value. Test case is not affected by the value of -size,
+ test flag restoration and that evrything was properly copied.
+
+ * generic/tclIOCmd.c (Tcl_FcopyObjCmd): Added checking of -size value
+ * tests/ioCmd.test (iocmd-15.{13,14}): to reject negative values, and
+ values overflowing 32-bit signed. Basic patch by Alexandre Ferrieux
+ <ferrieux@users.sourceforge.net>, with modifications from me to
+ separate overflow from true negative value. Extended testsuite. [Bug
+ 1557855]
+
+2008-04-09 Daniel Steffen <das@users.sourceforge.net>
+
+ * tests/chanio.test (chan-io-53.8,53.9,53.10): Fix typo & quoting for
+ * tests/io.test (io-53.8,53.9,53.10): spaces in builddir path
+
+2008-04-08 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c: Added comments to the alignment macros used in
+ GrowEvaluationStack() and friends.
+
+2008-04-08 Daniel Steffen <das@users.sourceforge.net>
+
+ * tools/genStubs.tcl: Revert erroneous 2008-04-02 change marking
+ *StubsPtr as EXTERN instead of extern.
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclTomMathDecls.h:
+
+2008-04-07 Andreas Kupries <andreask@activestate.com>
+
+ * tests/io.test (io-53.10): Testcase for bi-directional fcopy.
+ * tests/chanio.test:
+ * generic/tclIO.c: Additional changes to data structures for fcopy and
+ * generic/tclIO.h: channels to perform proper cleanup in case of a
+ channel having two background copy operations running as is now
+ possible.
+
+ * generic/tclIO.c (BUSY_STATE, CheckChannelErrors, TclCopyChannel):
+ New macro, and the places using it. This change allows for
+ bi-directional fcopy on channels. Thanks to Alexandre Ferrieux
+ <ferrieux@users.sourceforge.net> for the patch. [Bug 1350564]
+
+2008-04-07 Reinhard Max <max@suse.de>
+
+ * generic/tclStringObj.c (Tcl_AppendFormatToObj): Fix [format {% d}]
+ so that it behaves the same way as in 8.4 and as C's printf().
+ * tests/format.test: Add a test for '% d' and '%+d'.
+
+2008-04-05 Kevin B. Kenny <kennykb@acm.org>
+
+ * win/tclWinFile.c: (WinSymLinkDirectory): Fixed a problem that Tcl
+ was creating an NTFS junction point (IO_REPARSE_TAG_MOUNT_POINT) but
+ filling in the union member for a Vista symbolic link. We had gotten
+ away with this error because the union member
+ (SymbolicLinkReparseBuffer) was misdefined in this file and in the
+ 'winnt.h' in early versions of MinGW. MinGW 3.4.2 has the correct
+ definition of SymbolicLinkReparseBuffer, exposing the mismatch, and
+ making tests cmdAH-19.4.1, fCmd-28.*, and filename-11.* fail.
+ * tests/chanio.test (chan-io-53.9):
+ * tests/io.test (io-53.9): Made test cleanup robust against the
+ possibility of slow process shutdown on Windows.
+
+ * win/tcl.m4: Added -D_CRT_SECURE_NO_DEPRECATE and
+ -DCRT_NONSTDC_NO_DEPRECATE to the MSVC compilation flags so that the
+ compilation doesn't barf on perfectly reasonable Posix system calls.
+ * win/configure: Manually patched (don't have the right autoconf to
+ hand).
+
+2008-04-04 Andreas Kupries <andreask@activestate.com>
+
+ * tests/io.test (io-53.9): Added testcase for [Bug 780533], based
+ * tests/chanio.test: on Alexandre's test script. Also fixed problem
+ with timer in preceding test, was not canceled properly in the ok case
+
+2008-04-04 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIORChan.c (ReflectOutput): Allow zero return from write
+ when input was zero-length anyway. Otherwise keept it an error, and
+ separate the message from 'written too much'.
+
+ * tests/ioCmd.test (iocmd-24.6): Testcase updated for changed message.
+
+ * generic/tclIORChan.c (ReflectClose): Added missing removal of the
+ now closed channel from the reflection map. Before we could crash the
+ system by invoking 'chan postevent' on a closed reflected channel,
+ dereferencing the dangling pointer in the map.
+
+ * tests/ioCmd.test (iocmd-31.8): Testcase for the above.
+
+2008-04-03 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CopyData): Applied patch [Bug 1932639] to
+ * tests/io.test: prevent fcopy from calling -command synchronously
+ * tests/chanio.test: the first time. Thanks to Alexandre Ferrieux
+ <ferrieux@users.sourceforge.net> for report and patch.
+
+2008-04-02 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tcl.decls: Remove 'export' declarations of symbols now
+ only in libtclstub and no longer in libtcl.
+
+ * generic/tclStubLib.c: Make symbols in libtclstub.a MODULE_SCOPE to
+ * tools/genStubs.tcl: avoid exporting them from libraries that link
+ with -ltclstub; constify tcl*StubsPtr and stub
+ table hook pointers. [Bug 1819422]
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclStubInit.c:
+ * generic/tclTomMathDecls.h:
+
+2008-04-02 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclIO.c (CopyData): Applied patch for fcopy problem [Bug
+ 780533], with many thanks to Alexandre Ferrieux
+ <ferrieux@users.sourceforge.net> for tracking it down and providing a
+ solution. Still have to convert his test script into a proper test
+ case.
+
+2008-04-01 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclStrToD.c: Applied patch for [Bug 1839067] (fp rounding
+ * unix/tcl.m4: setup on solaris x86, native cc), provided by
+ Michael Schlenker.
+
+2008-04-01 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStubLib.c: Removed needless #ifdef complexity.
+
+ * generic/tclStubLib.c (Tcl_InitStubs): Added missing error message.
+ * generic/tclPkg.c (Tcl_PkgInitStubsCheck):
+
+ * README: Bump version number to 8.6a0
+ * generic/tcl.h:
+ * library/init.tcl:
+ * macosx/Tcl-Common.xcconfig:
+ * macosx/Tcl.pbproj/default.pbxuser:
+ * macosx/Tcl.pbproj/project.pbxproj:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/README:
+ * win/configure.in:
+ * win/makefile.bc:
+ * win/tcl.m4:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * generic/tclBasic.c: Revised stubs-generation tool and interp
+ * tools/genStubs.tcl: creation so that "tclStubsPtr" is not present
+ * unix/Makefile.in: in libtcl.so, but is present only in
+ * win/Makefile.in: libtclstub.a. This tightens up the rules for
+ * win/makefile.bc: users of the stubs interfaces. [Bug 1819422]
+ * win/makefile.vc:
+
+ * generic/tclDecls.h: make genstubs
+ * generic/tclIntDecls.h:
+ * generic/tclIntPlatDecls.h:
+ * generic/tclPlatDecls.h:
+ * generic/tclTomMathDecls.h:
+
+2008-03-30 Kevin Kenny <kennykb@acm.org>
+
+ * generic/tclInt.h (TclIsNaN):
+ * unix/configure.in: Added code to the configurator to check for a
+ standard isnan() macro and use it if one is
+ found. This change avoids bugs where the test of
+ ((d) != (d)) is optimized away by an
+ overaggressive compiler. [Bug 1783544]
+ * generic/tclObj.c: Added missing #include <math.h> needed to locate
+ isnan() after the above change.
+
+ * unix/configure: autoconf-2.61
+
+ * tests/mathop.test (mathop-25.9, mathop-25.14): Modified tests to
+ deal with (slightly buggy) math libraries in which pow() returns an
+ incorrectly rounded result. [Bug 1808174]
+
+2008-03-26 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5.2 TAGGED FOR RELEASE ***
+
+ * generic/tcl.h: Bump to 8.5.2 for release.
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+ * changes: Updated for 8.5.2 release.
+
+2008-03-28 Donal K. Fellows <dkf@users.sf.net>
+
+ * tests/fCmd.test: Substantial rewrite to use many more tcltest
+ features. Great reduction in quantity of [catch] gymnastics. Several
+ buggy tests fixed, including one where the result of the previous test
+ was being checked!
+
+2008-03-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * library/tzdata/America/Marigot:
+ * library/tztata/America/St_Barthelemy:
+ * library/tzdata/America/Argentina/San_Luis:
+ * library/tzdata/Asia/Ho_Chi_Minh:
+ * library/tzdata/Asia/Kolkata: (new files)
+ * library/tzdata/America/Caracas:
+ * library/tzdata/America/Havana:
+ * library/tzdata/America/Santiago:
+ * library/tzdata/America/Argentina/Buenos_Aires:
+ * library/tzdata/America/Argentina/Catamarca:
+ * library/tzdata/America/Argentina/Cordoba:
+ * library/tzdata/America/Argentina/Jujuy:
+ * library/tzdata/America/Argentina/La_Rioja:
+ * library/tzdata/America/Argentina/Mendoza:
+ * library/tzdata/America/Argentina/Rio_Gallegos:
+ * library/tzdata/America/Argentina/San_Juan:
+ * library/tzdata/America/Argentina/Tucuman:
+ * library/tzdata/America/Argentina/Ushuaia:
+ * library/tzdata/Asia/Baghdad:
+ * library/tzdata/Asia/Calcutta:
+ * library/tzdata/Asia/Damascus:
+ * library/tzdata/Asia/Saigon:
+ * library/tzdata/Pacific/Easter:
+ Changes up to and including Olson's tzdata2008b.
+
+2008-03-27 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/tcl.m4 (SunOS-5.1x): Fix 64bit support for Sun cc. [Bug
+ 1921166]
+
+ * unix/configure: autoconf-2.59
+
+2008-03-26 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.2 release.
+
+2008-03-24 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * generic/tclBinary.c: [Bug 1923966] - crash in binary format
+ * tests/binary.test: Added tests for the above crash condition.
+
+2008-03-21 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/switch.n: Clarified documentation in respect of two-argument
+ invokation. [Bug 1899962]
+
+ * tests/switch.test: Added more tests of regexp-mode compilation of
+ the [switch] command. [Bug 1854435]
+
+2008-03-20 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tcl.h, generic/tclThreadAlloc.c: Tidied up the declarations
+ of Tcl_GetMemoryInfo so that it is always defined. Will panic when
+ called against a Tcl that was previously built without it at all,
+ which is OK because that also indicates a serious mismatch between
+ memory configuration options.
+
+2008-03-19 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tcl.h, generic/tclThreadAlloc.c (Tcl_GetMemoryInfo): Make
+ sure this function is available when direct linking. [Bug 1868171]
+
+ * tests/reg.test (reg-33.14): Marked nonPortable because some
+ environments have small default stack sizes. [Bug 1905562]
+
+2008-03-18 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl (::tcl::tm::UnknownHandler): Changed 'source' to
+ 'source -encoding utf-8'. This fixes a portability problem of Tcl
+ Modules pointed out by Don Porter. By using plain 'source' we were at
+ the mercy of 'encoding system', making modules less portable than they
+ could be. The exact scenario: A writes a TM in some weird encoding
+ which is A's system encoding, distributes it, and somewhere else it
+ cannot be read/used because the system encoding is different. Forcing
+ the use of utf-8 makes the module portable.
+
+ ***INCOMPATIBILITY*** for all Tcl Modules already written in non-utf-8
+ compatible encodings.
+
+2008-03-18 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c: Patch from Miguel Sofer to correct the
+ alignment of memory allocated by GrowEvaluationStack(). [Bug 1914503]
+
+2008-03-18 Andreas Kupries <andreask@activestate.com>
+
+ * library/tm.tcl (::tcl::tm::Defaults): Modified handling of
+ environment variables. Solution slightly different than proposed in
+ the report. Using the underscored form TCLX_y_TM_PATH even if
+ TCLX.y_TM_PATH exists. Also using a loop to cut prevent code
+ replication. [Bug 1914604]
+
+2008-03-16 Donal K. Fellows <dkf@users.sf.net>
+
+ * generic/tclCompCmds.c (TclCompileDictForCmd): Correct the handling
+ of stack space calculation (the jump pattern used was confusing the
+ simple-minded code doing the calculations). [Bug 1903325]
+
+ * doc/lreplace.n: Clarified documentation of what happens with
+ negative indices. [Bug 1905809] Added example, tidied up formatting.
+
+2008-03-14 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (OldMathFuncProc): Same workaround protection
+ from bad TclStackAlloc() alignment. Thanks George Peter Staplin.
+
+ * generic/tclCmdIL.c (Tcl_LsortObjCmd): Use ckalloc() to allocate
+ SortElement arrays instead of TclStackAlloc() which isn't getting
+ alignment right. Workaround for [Bug 1914503].
+
+2008-03-14 Reinhard Max <max@suse.de>
+
+ * generic/tclTest.c: Ignore the return value of write() when we are
+ * unix/tclUnixPipe.c: about to exit anyways.
+
+2008-03-13 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/configure.in: Use backslash-quoting instead of double-quoting
+ * unix/tcl.m4: for lib paths in tclConfig.sh. [Bug 1913622]
+ * unix/configure: autoconf-2.59
+
+2008-03-13 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.2 release.
+
+ * generic/tclStrToD.c: Resolve identifier conflict over "pow10" with
+ libm in Cygwin and DJGPP. Thanks to Gordon Schumacher and Philip
+ Moore. [Patch 1800636]
+
+2008-03-12 Daniel Steffen <das@users.sourceforge.net>
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: Add support for Xcode 3.1
+ * macosx/Tcl.xcodeproj/default.pbxuser: CODE_SIGN_IDENTITY and
+ * macosx/Tcl-Common.xcconfig: 'xcodebuild install'.
+
+2008-03-12 Andreas Kupries <andreask@activestate.com>
+
+ * doc/info.n: Replaced {expand} with {*}.
+
+2008-03-12 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/Makefile.in (install-libraries): Bump http to 2.7
+ * win/Makefile.in (install-libraries): Added -myaddr option to allow
+ * library/http/http.tcl (http::geturl): control of selected socket
+ * library/http/pkgIndex.tcl: interface. [Bug 559898]
+ * doc/http.n, tests/http.test: Added -keepalive and
+ -protocol 1.1 with chunked transfer encoding support. [Bug 1063703,
+ 1470377, 219225] (default keepalive is 0)
+ Added ability to override Host in -headers. [Bug 928154]
+ Added -strict option to control URL validation on per-call basis.
+ [Bug 1560506]
+
+2008-03-11 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * library/http/http.tcl (http::geturl): Add -method option to support
+ * tests/http.test (http-3.1): http PUT and DELETE requests.
+ * doc/http.n: [Bug 1599901, 862554]
+
+ * library/http/http.tcl: Whitespace changes, code cleanup. Allow http
+ to be re-sourced without overwriting http state.
+
+2008-03-11 Daniel Steffen <das@users.sourceforge.net>
+
+ * generic/tclEncoding.c (LoadEscapeEncoding): Avoid leaking escape
+ sub-encodings, fixes encoding-11.1 failing after iso2022-jp loaded.
+ [Bug 1893053]
+
+ * macosx/tclMacOSXNotify.c: Avoid using CoreFoundation after fork() on
+ Darwin 9 even when TclpCreateProcess() uses vfork().
+
+ * macosx/Tcl.xcodeproj/project.pbxproj: Add support for Xcode 3.1 and
+ * macosx/Tcl.xcodeproj/default.pbxuser: configs for building with
+ * macosx/Tcl-Common.xcconfig: gcc-4.2 and llvm-gcc-4.2.
+
+ * unix/tclUnixPort.h: Workaround vfork() problems in
+ llvm-gcc-4.2.1 -O4 build.
+
+ * unix/tclUnixPort.h: Move MODULE_SCOPE compat
+ define to top. [Bug 1911102]
+
+ * macosx/GNUmakefile: Fix quoting to allow paths
+ * macosx/Tcl-Common.xcconfig: to ${builddir} and
+ * unix/Makefile.in: ${INSTALL_ROOT} to contain
+ * unix/configure.in: spaces.
+ * unix/install-sh:
+ * unix/tcl.m4:
+ * tests/ioCmd.test:
+
+ * unix/configure: autoconf-2.59
+
+ * unix/Makefile.in (install-strip): Strip non-global symbols from
+ dynamic library.
+
+ * unix/tclUnixNotfy.c: Fix warning.
+
+ * tests/exec.test (exec-9.7): Reduce timing sensitivity
+ * tests/socket.test (socket-2.11): (esp. on multi-proc machines).
+
+ * tests/fCmd.test (fCmd-9.4): Skip on Darwin 9 (xfail).
+
+2008-03-11 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclVar.c (TclDeleteNamespaceVars):
+ * tests/var.test (var-8.2): Unset traces on vars should be called with
+ a FQ named during namespace deletion. This was causing infinite loops
+ when unset traces recreated the var, as reported by Julian Noble. [Bug
+ 1911919]
+
+2008-03-10 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.2 release.
+
+ * doc/http.n: Revised to indicate that [package require http 2.5.5]
+ is needed to get all the documented commands ([http::meta]).
+
+ * generic/tclEvent.c (TclDefaultBgErrorHandlerObjCmd): Added error
+ * tests/event.test (event-5.*): checking to protect against callers
+ passing invalid return options dictionaries. [Bug 1901113]
+
+ * generic/tclBasic.c (ExprAbsFunc): Revised so that the abs()
+ * tests/expr.test: function and the [::tcl::mathfunc::abs]
+ command do not return the value of -0, or equivalent values with more
+ alarming string reps like -1e-350. [Bug 1893815]
+
+2008-03-07 Andreas Kupries <andreask@activestate.com>
+
+ * generic/tclResult.c (ReleaseKeys): Workaround for [Bug 1904907].
+ Reset the return option keys to NULL to allow full re-initialization
+ by GetKeys(). This introduces a memory leak for the key objects, but
+ gets us around a crash in the finalization of reflected channels when
+ handling returns, either at compile- or runtime. In both cases we
+ access the keys after they have been released by their thread exit
+ handler. A proper fix is entangled with the untangling of the
+ finalization ordering and attendant issues. For now we choose the
+ lesser evil.
+
+2008-03-07 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclExecute.c (Tcl_ExprObj): Revised expression bytecode
+ compiling so that bytecodes invalid due to changing context or due to
+ the difference between expressions and scripts are not reused. [Bug
+ 1899164]
+
+ * generic/tclCmdAH.c: Revised direct evaluation implementation of
+ [expr] so that [expr $e] caches compiled bytecodes for the expression
+ as the intrep of $e.
+
+ * tests/execute.test (execute-6.*): More tests checking that
+ script bytecode is invalidated in the right situations.
+
+2008-03-07 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * win/configure.in: Add AC_HEADER_STDC to support msys/win64.
+
+2008-03-06 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/namespace.n: Minor tidying up. [Bug 1909019]
+
+2008-03-04 Don Porter <dgp@users.sourceforge.net>
+
+ * tests/execute.test (6.3,4): Added tests for [Bug 1899164].
+
+2008-03-03 Reinhard Max <max@suse.de>
+
+ * unix/tclUnixChan.c: Fix mark and space parity on Linux, which uses
+ CMSPAR instead of PAREXT.
+
+2008-03-02 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclNamesp.c (GetNamespaceFromObj):
+ * tests/interp.test (interp-28.2): Spoil the intrep of an nsNameType
+ obj when the reference crosses interpreter boundaries.
+
+2008-02-29 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclResult.c (Tcl_SetReturnOptions): Revised the refcount
+ management of Tcl_SetReturnOptions to become that of a conventional
+ Consumer routine. Thanks to Peter Spjuth for pointing out the
+ difficulties calling Tcl_SetReturnOptions with non-0-count value for
+ options.
+ * generic/tclExecute.c (INST_RETURN_STK): Revised the one caller
+ within Tcl itself which passes a non-0-count value to
+ Tcl_SetReturnOptions().
+
+ * generic/tclBasic.c (Tcl_AppendObjToErrorInfo): Revised the
+ refcount management of Tcl_AppendObjToErrorInfo to become that of a
+ conventional Consumer routine. This preserves the ease of use for the
+ overwhelming common callers who pass in a 0-count value, but makes the
+ proper call with a non-0-count value less surprising.
+ * generic/tclEvent.c (TclDefaultBgErrorHandlerObjCmd): Revised the
+ one caller within Tcl itself which passes a non-0-count value to
+ Tcl_AppendObjToErrorInfo().
+
+2008-02-28 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/tclPort.h, unix/tclCompat.h, unix/tclUnixChan.h: Reduce scope
+ of <sys/filio.h> and <sys/ioctl.h> #includes. [Patch 1903339]
+
+2008-02-28 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/tclUnixChan.c, unix/tclUnixNotfy.c, unix/tclUnixPipe.c:
+ Consolidate all code conditionalized on -DUSE_FIONBIO into one place.
+ * unix/tclUnixPort.h, unix/tclUnixCompat.c: New routine
+ TclUnixSetBlockingMode(). [Patch 1903339]
+
+2008-02-28 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclBasic.c (TclEvalObjvInternal): Plug memory leak when
+ an enter trace deletes or changes the command, prompting a reparsing.
+ Don't let the second pass lose commandPtr value allocated during the
+ first pass.
+
+ * generic/tclCompExpr.c (ParseExpr): Plug memory leak in error
+ message generation.
+
+ * generic/tclStringObj.c (Tcl_AppendFormatToObj): [format %llx $big]
+ leaked an mp_int.
+
+ * generic/tclCompCmds.c (TclCompileReturnCmd): The 2007-10-18 commit
+ to optimize compiled [return -level 0 $x] [RFE 1794073] introduced a
+ memory leak of the return options dictionary. Fixing that.
+
+2008-02-27 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/http.tcl: [Bug 705956] - fix inverted logic when
+ cleaning up socket error in geturl.
+
+2008-02-27 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n: Corrected minor indentation gaffe in the penultimate
+ paragraph. [Bug 1898025]
+ * generic/tclClock.c (ParseClockFormatArgs): Changed to check that the
+ clock value is in the range of a 64-bit integer. [Bug 1862555]
+ * library/clock.tcl (::tcl::clock::format, ::tcl::clock::scan,
+ (::tcl::clock::add, ::tcl::clock::LocalizeFormat): Fixed bugs in
+ caching of localized strings that caused weird results when localized
+ date/time formats were used. [Bug 1902423]
+ * tests/clock.test (clock-61.*, clock-62.1): Regression tests for [Bug
+ 1862555] and [Bug 1902423].
+
+2008-02-26 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclIOUtil.c, unix/tclUnixPort.h, unix/tclUnixChan.c:
+ Remove dead/unused portability-related #defines and unused conditional
+ code. See [Patch 1901828] for discussion.
+
+2008-02-26 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclIORChan.c (enum MethodName),
+ * generic/tclCompExpr.c (enum Marks): More stray trailing ","s
+
+2008-02-26 Joe English <jenglish@users.sourceforge.net>
+
+ * unix/configure.in(socklen_t test): Define socklen_t as "int" if
+ missing, not "unsigned". Use AC_TRY_COMPILE instead of
+ AC_EGREP_HEADER.
+ * unix/configure: regenerated.
+
+2008-02-26 Joe English <jenglish@users.sourceforge.net>
+
+ * generic/tclCompile.h: Remove stray trailing "," from enum
+ InstOperandType definition (C99ism).
+
+2008-02-26 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * generic/tclUtil.c (TclReToGlob): Fix the handling of the last star
+ * tests/regexpComp.test: possibly being escaped in
+ determining right anchor. [Bug 1902436]
+
+2008-02-26 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/pkgIndex.tcl: Set version 2.5.5
+ * library/http/http.tcl: It is better to do the [eof] check after
+ trying to read from the socket. No clashes found in testing. Added
+ http::meta command to access the http headers. [Bug 1868845]
+
+2008-02-22 Pat Thoyts <patthoyts@users.sourceforge.net>
+
+ * library/http/pkgIndex.tcl: Set version 2.5.4
+ * library/http/http.tcl: Always check that the state array exists
+ in the http::status command. [Bug 1818565]
+
+2008-02-13 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump version number to 8.5.2b1 to distinguish
+ * library/init.tcl: CVS development snapshots from the 8.5.1 and
+ * unix/configure.in: 8.5.2 releases.
+ * unix/tcl.spec:
+ * win/configure.in:
+ * README
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+2008-02-12 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * generic/tclCompCmds.c (TclCompileSwitchCmd): Corrected logic for
+ * tests/switch.test (switch-10.15): handling -nocase compilation; the
+ -exact -nocase option cannot be compiled currently. [Bug 1891827]
+
+ * unix/README: Documented missing configure flags. [Bug 1799011]
+
+2008-02-06 Kevin B. Kenny <kennykb@acm.org>
+
+ * doc/clock.n (%N): Corrected an error in the explanation of the %N
+ format group.
+ * generic/tclClock.c (ClockParseformatargsObjCmd):
+ * library/clock.tcl (::tcl::clock::format):
+ * tests/clock.test (clock-1.0, clock-1.4):
+ Performance enhancements in [clock format] (moving the analysis of
+ $args into C code, holding on to Tcl_Objs with resolved command names,
+ [lassign] in place of [foreach], avoiding [namespace which] for
+ command resolution).
+
+2008-02-04 Don Porter <dgp@users.sourceforge.net>
+
+ *** 8.5.1 TAGGED FOR RELEASE ***
+
+ * changes: Updated for 8.5.1 release.
+
+ * generic/tcl.h: Bump to 8.5.1 for release.
+ * library/init.tcl:
+ * tools/tcl.wse.in:
+ * unix/configure.in:
+ * unix/tcl.spec:
+ * win/configure.in:
+
+ * unix/configure: autoconf-2.59
+ * win/configure:
+
+2008-02-04 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclExecute.c (INST_CONCAT1): Fix optimisation for in-place
+ concatenation (was going over String type)
+
+2008-02-02 Daniel Steffen <das@users.sourceforge.net>
+
+ * unix/configure.in (Darwin): Correct Info.plist year substitution
+ in non-framework builds.
+
+ * unix/configure: autoconf-2.59
+
+2008-01-30 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclInterp.c (Tcl_GetAlias): Fix for [Bug 1882373], thanks go
+ to an00na.
+
+2008-01-30 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * tools/tcltk-man2html.tcl: Reworked manual page scraper to do a
+ proper job of handling references to Ttk options. [Tk Bug 1876493]
+
+2008-01-29 Donal K. Fellows <donal.k.fellows@man.ac.uk>
+
+ * doc/man.macros (SO, SE): Adjusted macros so that it is possible for
+ Ttk to have its "standard options" on a manual page that is not called
+ "options". [Tk Bug 1876493]
+
+2008-01-25 Don Porter <dgp@users.sourceforge.net>
+
+ * changes: Updated for 8.5.1 release.
+
+2008-01-23 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclInt.h: New macro TclGrowParseTokenArray() to
+ * generic/tclCompCmds.c: simplify code that might need to grow
+ * generic/tclCompExpr.c: an array of Tcl_Tokens in the parsePtr
+ * generic/tclParse.c: field of a Tcl_Parse. Replaces the
+ TclExpandTokenArray() routine via replacing:
+ int needed = parsePtr->numTokens + growth;
+ while (needed > parsePtr->tokensAvailable) {
+ TclExpandTokenArray(parsePtr);
+ }
+ with:
+ TclGrowParseTokenArray(parsePtr, growth);
+ This revision merged over from dgp-refactor branch.
+
+ * generic/tclCompile.h: Demote TclCompEvalObj() from internal stubs to
+ * generic/tclInt.decls: a MODULE_SCOPE routine declared in
+ tclCompile.h.
+
+ * generic/tclIntDecls.h: make genstubs
+ * generic/tclStubInit.c:
+
+2008-01-22 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclTimer.c (AfterProc): Replace Tcl_EvalEx() with
+ Tcl_EvalObjEx() to evaluate [after] callbacks. Part of trend to favor
+ compiled execution over direct evaluation.
+
+2008-01-22 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCmdIl.c (Tcl_LreverseObjCmd):
+ * tests/cmdIL.test (cmdIL-7.7): Fix crash on reversing an empty list.
+ [Bug 1876793]
+
+2008-01-20 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * unix/README: Minor typo fixes [Bug 1853072]
+
+ * generic/tclIO.c (TclGetsObjBinary): Operate on topmost channel.
+ [Bug 1869405] (Ficicchia)
+
+2008-01-17 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclCompExpr.c: Revision to preserve parsed intreps of
+ numeric and boolean literals when compiling expressions with (optimize
+ == 1).
+
+2008-01-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclCompExpr.c: Add an 'optimize' argument to
+ * generic/tclCompile.c: TclCompileExpr() to profit from better
+ * generic/tclCompile.h: literal management according to usage.
+ * generic/tclExecute.c:
+
+ * generic/tclCompExpr.c: Fix literal leak in exprs [Bug 1869989] (dgp)
+ * generic/tclExecute.c:
+ * tests/compExpr.test:
+
+ * doc/proc.n: Changed wording for access to non-local variables; added
+ mention to [namespace upvar]. Lame attempt at dealing with
+ documentation. [Bug 1872708]
+
+2008-01-15 Miguel Sofer <msofer@users.sf.net>
+
+ * generic/tclBasic.c: Replacing 'operator' by 'op' in the def of
+ * generic/tclCompExpr.c: struct TclOpCmdClientData to accommodate C++
+ * generic/tclCompile.h: compilers. [Bug 1855644]
+
+2008-01-13 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * win/tclWinSerial.c (SerialCloseProc, TclWinOpenSerialChannel): Use
+ critical section for read & write side. [Bug 1353846] (newman)
+
+2008-01-11 Miguel Sofer <msofer@users.sf.net>
+
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): Restore stack checking
+ functionality in freebsd. [Bug 1850424]
+
+ * unix/tclUnixThrd.c (TclpThreadGetStackSize): Fix for crash in
+ freebsd. [Bug 1860425]
+
+2008-01-10 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tclStringObj.c (Tcl_AppendFormatToObj): Correct failure to
+ * tests/format.test: account for big.used == 0 corner case in the
+ %ll(idox) format directives. [Bug 1867855]
+
+2008-01-09 George Peter Staplin <georgeps@xmission.com>
+
+ * doc/vwait.n: Add a missing be to fix a typo.
+
+2008-01-04 Jeff Hobbs <jeffh@ActiveState.com>
+
+ * tools/tcltk-man2html.tcl (make-man-pages): Make man page title use
+ more specific info on lhs to improve tabbed browser view titles.
+
+2008-01-02 Donal K. Fellows <dkf@users.sf.net>
+
+ * doc/binary.n: Fixed documentation bug reported on tcl-core, and
+ reordered documentation to discourage people from using the hex
+ formatter that is hardly ever useful.
+
+2008-01-02 Don Porter <dgp@users.sourceforge.net>
+
+ * generic/tcl.h: Bump version number to 8.5.1b1 to distinguish
+ * library/init.tcl: CVS development snapshots from the 8.5.0 and
+ * unix/configure.in: 8.5.1 releases.
+ * unix/tcl.spec:
+ * win/configure.in:
+ * README
+
+ * unix/configure: autoconf (2.59)
+ * win/configure:
+
+ ******************************************************************
+ *** CHANGELOG ENTRIES FOR 2006-2007 IN "ChangeLog.2007" ***
+ *** 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" ***
+ ******************************************************************
diff --git a/README b/README
index 519245f..7004bc5 100644
--- a/README
+++ b/README
@@ -1,11 +1,7 @@
README: Tcl
- This is the Tcl 8.4.7 source distribution.
- Tcl/Tk is also available through NetCVS:
- http://tcl.sourceforge.net/
- You can get any source release of Tcl from the file distributions
- link at the above URL.
-
-RCS: @(#) $Id: README,v 1.49.2.7 2004/07/13 19:21:16 hobbs Exp $
+ This is the Tcl 8.6.1 source distribution.
+ http://sourceforge.net/projects/tcl/files/Tcl/
+ You can get any source release of Tcl from the URL above.
Contents
--------
@@ -14,10 +10,10 @@ Contents
3. Compiling and installing Tcl
4. Development tools
5. Tcl newsgroup
- 6. Tcl contributed archive
- 7. Tcl Resource Center
- 8. Mailing lists
- 9. Support and Training
+ 6. The Tcler's Wiki
+ 7. Mailing lists
+ 8. Support and Training
+ 9. Tracking Development
10. Thank You
1. Introduction
@@ -25,14 +21,19 @@ Contents
Tcl provides a powerful platform for creating integration applications that
tie together diverse applications, protocols, devices, and frameworks.
When paired with the Tk toolkit, Tcl provides the fastest and most powerful
-way to create GUI applications that run on PCs, Unix, and the Macintosh.
+way to create GUI applications that run on PCs, Unix, and Mac OS X.
Tcl can also be used for a variety of web-related tasks and for creating
powerful command languages for applications.
Tcl is maintained, enhanced, and distributed freely by the Tcl community.
-The home for Tcl/Tk sources and bug/patch database is on SourceForge:
+Source code development and tracking of bug reports and feature requests
+takes place at:
+
+ http://core.tcl.tk/
+
+Tcl/Tk release and mailing list services are hosted by SourceForge:
- http://tcl.sourceforge.net/
+ http://sourceforge.net/projects/tcl/
with the Tcl Developer Xchange hosted at:
@@ -48,17 +49,21 @@ 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.4.html
+ http://www.tcl.tk/software/tcltk/8.6.html
Detailed release notes can be found at the file distributions page
by clicking on the relevant version.
- http://sourceforge.net/project/showfiles.php?group_id=10894
+ http://sourceforge.net/projects/tcl/files/Tcl/
Information about Tcl itself can be found at
- http://www.tcl.tk/scripting/
+ http://www.tcl.tk/about/
+
+There have been many Tcl books on the market. Many are mentioned in the Wiki:
+ http://wiki.tcl.tk/_/ref?N=25206
-There have been many Tcl books on the market. Most are listed at
- http://www.tcl.tk/resource/doc/books/
+To view the complete set of reference manual entries for Tcl 8.6 online,
+visit the URL:
+ http://www.tcl.tk/man/tcl8.6/
2a. Unix Documentation
----------------------
@@ -92,25 +97,20 @@ Windows help Tcl documentation will appear in the "Start" menu:
3. Compiling and installing Tcl
-------------------------------
-There are brief notes in the unix/README, win/README, and mac/README about
+There are brief notes in the unix/README, win/README, and macosx/README about
compiling on these different platforms. There is additional information
about building Tcl from sources at
http://www.tcl.tk/doc/howto/compile.html
-4. TclPro Development tools
+4. Development tools
---------------------------
-A high quality set of commercial quality development tools is available to
-accelerate your Tcl application development. The TclPro product provides a
-debugger, static code checker, packaging utility, and bytecode compiler.
-TclPro was open-sourced when Scriptics/Ajuba was acquired by Interwoven.
-Visit its home at SourceForge for more information and source/binaries:
-
- http://tclpro.sourceforge.net/
-
-ActiveState has picked up support for commercial Tcl development tools.
-More information can be found at
+ActiveState produces a high quality set of commercial quality development
+tools that is available to accelerate your Tcl application development.
+Tcl Dev Kit builds on the earlier TclPro toolset and provides a debugger,
+static code checker, single-file wrapping utility, bytecode compiler and
+more. More information can be found at
http://www.ActiveState.com/Tcl
@@ -119,33 +119,23 @@ More information can be found at
There is a USENET news group, "comp.lang.tcl", intended for the exchange of
information about Tcl, Tk, and related applications. The newsgroup is a
-great place to ask general information questions. There is also
-a USENET news group, "comp.lang.tcl.announce", intended to announce new
-releases of software, training, and more. For bug reports, please
+great place to ask general information questions. For bug reports, please
see the "Support and bug fixes" section below.
-6. Tcl contributed archive
---------------------------
+6. Tcl'ers Wiki
+---------------
-Many people have created exciting packages and applications based on Tcl
-and/or Tk and made them freely available to the Tcl community. An archive
-of these contributions is kept on the machine ftp://archives.tcl.tk/pub/tcl
-(aka ftp://ftp.procplace.com/pub/tcl). You can access the archive using
-anonymous FTP. The archive also contains several FAQ ("frequently asked
-questions") documents that provide solutions to problems that are commonly
-encountered by Tcl newcomers.
+A Wiki-based open community site covering all aspects of Tcl/Tk is at:
-7. Tcl Resource Center
-----------------------
+ http://wiki.tcl.tk/
-Visit http://www.tcl.tk/resource/ to see an annotated index of
-many Tcl resources available on the World Wide Web. This includes
-papers, books, and FAQs, as well as development tools, extensions,
-applications, binary releases, and patches. You can also recommend
-additional URLs for the resource center using the forms labeled "Add a
-Resource".
+It is dedicated to the Tcl programming language and its extensions. A
+wealth of useful information can be found there. It contains code
+snippets, references to papers, books, and FAQs, as well as pointers to
+development tools, extensions, and applications. You can also recommend
+additional URLs by editing the wiki yourself.
-8. Mailing lists
+7. Mailing lists
----------------
Several mailing lists are hosted at SourceForge to discuss development or
@@ -156,22 +146,17 @@ to subscribe, visit:
and go to the Mailing Lists page.
-9. Support and Training
+8. Support and Training
------------------------
We are very interested in receiving bug reports, patches, and suggestions
-for improvements. We prefer that you send this information to us via the
-bug form at SourceForge, rather than emailing us directly. The bug
-database is at:
+for improvements. We prefer that you send this information to us as
+tickets entered into our tracker at:
- http://tcl.sourceforge.net/
-
-The bug form was designed to give uniform structure to bug reports as
-well as to solicit enough information to minimize followup questions.
+ http://core.tcl.tk/tcl/reportlist
We will log and follow-up on each bug, although we cannot promise a
-specific turn-around time. Enhancements, reported via the Feature
-Requests form at the same web site, may take longer and may not happen
+specific turn-around time. Enhancements may take longer and may not happen
at all unless there is widespread support for them (we're trying to
slow the rate at which Tcl/Tk turns into a kitchen sink). It's very
difficult to make incompatible changes to Tcl/Tk at this point, due to
@@ -184,7 +169,13 @@ questions for which no one else is likely to know the answer. In addition,
see the following Web site for links to other organizations that offer
Tcl/Tk training:
- http://www.tcl.tk/resource/community/commercial/training
+ http://wiki.tcl.tk/training
+
+9. Tracking Development
+-----------------------
+
+Tcl is developed in public. To keep an eye on how Tcl is changing, see
+ http://core.tcl.tk/
10. Thank You
-------------
diff --git a/changes b/changes
index 31c21d0..659319c 100644
--- a/changes
+++ b/changes
@@ -1,7 +1,5 @@
Recent user-visible changes to Tcl:
-RCS: @(#) $Id: changes,v 1.79.2.11 2004/07/26 19:15:03 hobbs Exp $
-
1. No more [command1] [command2] construct for grouping multiple
commands on a single command line.
@@ -128,7 +126,7 @@ Tcl_Eval.
that came after version 3.3 was released.
40. 5/17/91 Changed tests to conform to Mary Ann May-Pumphrey's approach.
-
+
41. 5/23/91 Massive revision to Tcl parser to simplify the implementation
of string and floating-point support in expressions. Newlines inside
[] are now treated as command separators rather than word separators
@@ -262,7 +260,7 @@ argument (before file name), for consistency with other Tcl commands.
*** POTENTIAL INCOMPATIBILITY ***
72. 8/20/91 Changed format of information in $errorInfo variable:
-comments such as
+comments such as
("while" body line 1)
are now on separate lines from commands being executed.
*** POTENTIAL INCOMPATIBILITY ***
@@ -1194,7 +1192,7 @@ under some dynamic loading systems (e.g. SunOS 4.1 and Windows).
6/8/95 (feature change) Modified interface to Tcl_Main to pass in the
address of the application-specific initialization procedure.
Tcl_AppInit is no longer hardwired into Tcl_Main. This is needed
-in order to make Tcl a shared library.
+in order to make Tcl a shared library.
6/8/95 (feature change) Modified Makefile so that the installed versions
of tclsh and libtcl.a have version number in them (e.g. tclsh7.4 and
@@ -1618,7 +1616,7 @@ file name. Under Windows '95, this is incorrectly interpreted as a UNC
path. They delays came from the network timeouts needed to determine that
the file name was invalid. Tcl_TranslateFileName now suppresses duplicate
slashes that aren't at the beginning of the file name. (SS)
-
+
1/25/96 (bug fix) Changed exec and open to create children so they are
attached to the application's console if it exists. (SS)
@@ -2256,21 +2254,21 @@ version of Tcl. It's quite a bit faster than MetroWerk's version. (RJ)
8/26/96 (documentation update) Removed old change bars (for all changes
in Tcl 7.5 and earlier releases) from manual entries. (JO)
-8/27/96 (enhancement) The exec and open commands behave better and work in
-more situations under Windows NT and Windows 95. Documentation describes
+8/27/96 (enhancement) The exec and open commands behave better and work in
+more situations under Windows NT and Windows 95. Documentation describes
what is still lacking. (CS)
8/27/96 (enhancement) The Windows makefiles will now compile even if the
compiler is not in the path and/or the compiler's environment variables
-have not been set up. (CS)
+have not been set up. (CS)
-8/27/96 (configuration improvement) The Windows resource files are
+8/27/96 (configuration improvement) The Windows resource files are
automatically updated when the version/patch level changes. The header file
now has a comment that reminds the user which other files must be manually
updated when the version/patch level changes. (CS)
8/28/96 (new feature) Added file manipulation features (copy, rename, delete,
-mkdir) that are supported on all platforms. They are implemented as
+mkdir) that are supported on all platforms. They are implemented as
subcommands to the "file" command. See the documentation for the "file"
command for more information. (JH)
@@ -2373,7 +2371,7 @@ the Tcl script in the fileevent wasn't closing the socket immediately. (JL)
package goes in a separate subdirectory of a directory in
$tcl_pkgPath). These directories are included in auto_path by
default.
- - Changed the package auto-loader to look for pkgIndex.tcl files
+ - Changed the package auto-loader to look for pkgIndex.tcl files
not only in the auto_path directories but also in their immediate
children. This should make it easier to install and uninstall
packages (don't have to change auto_path or merge pkgIndex.tcl
@@ -2623,7 +2621,7 @@ lookups of keyword arguments. (JO)
1/12/97 (new feature) Serial IO channel drivers for Windows and Unix,
available by using Tcl open command to open pseudo-files like "com1:" or
-"/dev/ttya". New option to Tcl fconfigure command for serial files:
+"/dev/ttya". New option to Tcl fconfigure command for serial files:
"-mode baud,parity,data,stop" to specify baud rate, parity, data bits, and
stop bits. Serial IO is not yet available on Mac.
@@ -2703,7 +2701,7 @@ to Feb 31.) The code now will return the last valid day of the
month in these situations. Thanks to Hume Smith for sending in
this bug fix. (RJ)
-2/10/97 (feature change) Eliminated Tcl_StringObjAppend and
+2/10/97 (feature change) Eliminated Tcl_StringObjAppend and
Tcl_StringObjAppendObj procedures, replaced them with Tcl_AppendToObj
and Tcl_AppendStringsToObj procedures. Added new procedure
Tcl_SetObjLength. (JO)
@@ -3070,7 +3068,7 @@ compilation errors from "invoked from within" to "while compiling". (BL)
modified the interpreter result even if there was no error.
- The argument parsing procedure used by several compile procedures
always treated "]" as end of a command: e.g., "set a ]" would fail.
- - Changed errorInfo traceback message for compilation errors from
+ - Changed errorInfo traceback message for compilation errors from
"invoked from within" to "while compiling".
- Problem initializing Tcl object managers during interpreter creation.
- Added check and error message if formal parameter to a procedure is
@@ -3145,7 +3143,7 @@ is leaked to safe interps. Error message fixes for interp sub commands.
Likewise changes in safealias.tcl; tcl_safeCreateInterp can now be called
without argument to generate the slave name (like in interp create). (DL)
-7/10/97 (bug fixes) Bytecode compiler now generates more detailed
+7/10/97 (bug fixes) Bytecode compiler now generates more detailed
command location information: subcommands as well as commands now have
location information. This means command trace procedures now get the
correct source string for each command in their command parameter. (BL)
@@ -3183,7 +3181,7 @@ malloc and free. (SS)
sourcing/loading (see safe.n) to hide pathnames, use virtual
paths tokens instead, improved security in several respects and made it
more tunable. Multi level interp loading can work too now. Package auto
-loading now works in safe interps as long as the package directory is in
+loading now works in safe interps as long as the package directory is in
the auto_path (no deep crawling allowed in safe interps). (DL)
*** POTENTIAL INCOMPATIBILITY with previous alpha and beta releases ***
@@ -3211,7 +3209,7 @@ exists" command returns 0 for them. (BL)
7/29/97 (feature change) Changed the http package to use the ::http
namespace. http_get renamed to http::geturl, http_config renamed to
http::config, http_formatQuery renamed to http::formatQuery.
-It now provides the 2.0 version of the package.
+It now provides the 2.0 version of the package.
The 1.0 version is still available with the old names.
*** POTENTIAL INCOMPATIBILITY with Tcl 8.0b2 but not with Tcl 7.6 ***
@@ -3275,7 +3273,7 @@ except that the default precision is 12 instead of 6. (JO)
----------------- Released 8.0, 8/18/97 -----------------------
8/19/97 (bug fix) Minimal fix for glob -nocomplain bugs:
-"glob -nocomplain unreadableDir/*" was generating an anonymous
+"glob -nocomplain unreadableDir/*" was generating an anonymous
error. More in depth fixes will come with 8.1. (DL).
8/20/97 (bug fix) Removed check for FLT_MIN in binary command so
@@ -3320,7 +3318,7 @@ does not prevent stack overflow by multi-interps recursion or aliasing} (DL)
9/11/97 (bug fix) An uninitialized variable in Tcl_WaitPid caused
pipes to fail to report eof properly under Windows. (SS)
-9/12/97 (bug fix) "exec" was misidentifying some DOS executables as not
+9/12/97 (bug fix) "exec" was misidentifying some DOS executables as not
executable. (CCS)
9/14/97 (bug fix) Was using the wrong structure in sizeof operation in
@@ -3344,7 +3342,7 @@ Roseman for the pointer on the fix.) (RJ)
cause the compare function to run off the end of an array if the
number only contained 0's. (Thanks to Greg Couch for the report.) (RJ)
-9/18/97 (bug fix) TclFinalizeEnvironment was not cleaning up
+9/18/97 (bug fix) TclFinalizeEnvironment was not cleaning up
properly. (DL, JI)
9/18/97 (bug fix) Fixed long-standing bug where an "array get" command
@@ -3380,9 +3378,9 @@ Now you can "join $list \0" for instance. (DL)
non-existent directory, exec would fail when trying to create its temporary
files. (CCS)
-10/9/97 (bug fix) Under mac and windows, "info hostname" would crash if
+10/9/97 (bug fix) Under mac and windows, "info hostname" would crash if
sockets were installed but the hostname could not be determined anyhow.
-Tcl_GetHostName() was returning NULL when it should have been returning
+Tcl_GetHostName() was returning NULL when it should have been returning
an empty string. (CCS)
10/10/97 (bug fix) "file attribute /" returned error on windows. (CCS)
@@ -3470,7 +3468,7 @@ around to be really closed in this case. (JL)
12/8/97 (bug fix) Need to protect the channel in a fileevent so that it
is not deleted before the fileevent handler returns. (CS, JL)
-12/18/97 (bug fix) In the opt argument parsing package: if the description
+12/18/97 (bug fix) In the opt argument parsing package: if the description
had only flags, the "too many arguments" case was not detected. The default
value was not used for the special "args" ending argument. (DL)
@@ -3513,7 +3511,7 @@ that could lead to a crash. (SS)
non-local variable references. (SS)
6/25/98 (new features) Added name resolution hooks to support [incr Tcl].
-There are new internal Tcl_*Resolver* APIs to add, query and remove the hooks.
+There are new internal Tcl_*Resolver* APIs to add, query and remove the hooks.
With this changes it should be possible to dynamically load [incr Tcl]
as an extension. (MM)
@@ -3541,7 +3539,7 @@ TclAccessInsertProc, TclStatInsertProc, & TclOpenFileChannelInsertProc
insert pointers to such routines; TclAccessDeleteProc, TclStatDeleteProc,
& TclOpenFileChannelDeleteProc delete pointers to such routines. See
the file generic/tclIOUtils.c for more details. (SKS)
-
+
7/1/98 (enhancement) Added a new internal C variable
tclPreInitScript. This is a pointer to a string that may hold an
initialization script; If this pointer is non-NULL it is evaluated in
@@ -3625,7 +3623,7 @@ internal representation holds a pointer to a Proc structure. Extended
TclCreateProc to take both strings and "procbody". (EMS)
10/13/98 (bug fix) The "info complete" command can now handle strings
-with NULLs embedded. Thanks to colin@field.medicine.adelaide.edu.au
+with NULLs embedded. Thanks to colin@field.medicine.adelaide.edu.au
for providing this fix. (RJ)
10/13/98 (bug fix) The "lsort -dictionary" command did not properly
@@ -3693,7 +3691,7 @@ by default. Fixed socket code so it turns off this bit right after
creation so sockets aren't kept open by exec'ed processes. [Bug: 892]
Thanks to Kevin Kenny for this fix. (SS)
-1/11/98 (bug fix) On HP, "info sharedlibextension" was returning
+1/11/98 (bug fix) On HP, "info sharedlibextension" was returning
empty string on static apps. It now always returns ".sl". (RJ)
1/28/99 (configure change) Now support -pipe option on gcc. (RJ)
@@ -3738,7 +3736,7 @@ panic. (stanton)
2/2/99 (feature change/bug fix) Changed the behavior of "file
extension" so that it splits at the last period. Now the extension of
-a file like "foo..o" is ".o" instead of "..o" as in previous versions.
+a file like "foo..o" is ".o" instead of "..o" as in previous versions.
*** POTENTIAL INCOMPATIBILITY ***
----------------- Released 8.0.5, 3/9/99 -------------------------
@@ -3759,15 +3757,15 @@ a file like "foo..o" is ".o" instead of "..o" as in previous versions.
of a UTF-8 string remains \0. Thus Tcl strings once again do not
contain null bytes, except for termination bytes.
- For Java compatibility, "\uXXXX" is used in Tcl to enter a Unicode
- character. "\u0000" through "\uffff" are acceptable Unicode
- characters.
+ character. "\u0000" through "\uffff" are acceptable Unicode
+ characters.
- "\xXX" is used to enter a small Unicode character (between 0 and 255)
in Tcl.
- Tcl automatically translates between UTF-8 and the normal encoding for
the platform during interactions with the system.
- The fconfigure command now supports a -encoding option for specifying
the encoding of an open file or socket. Tcl will automatically
- translate between the specified encoding and UTF-8 during I/O.
+ translate between the specified encoding and UTF-8 during I/O.
See the directory library/encoding to find out what encodings are
supported (eventually there will be an "encoding" command that
makes this information more accessible).
@@ -3841,7 +3839,7 @@ imported procedures as well as procedures defined in a namespace. (BL)
in place of Tcl_GetStringFromObj() if the string representation's length
isn't needed. (BL)
-12/18/97 (bug fix) In the opt argument parsing package: if the description
+12/18/97 (bug fix) In the opt argument parsing package: if the description
had only flags, the "too many arguments" case was not detected. The default
value was not used for the special "args" ending argument. (DL)
@@ -3851,11 +3849,11 @@ procs now in auto.tcl and package.tcl can be autoloaded if needed. (DL)
1/7/98 (enhancement) tcltest made at install time will search for it's
init.tcl where it is, even when using virtual path compilation. (DL)
-1/8/98 (os bug workaround) when needed, using a replacement for memcmp so
+1/8/98 (os bug workaround) when needed, using a replacement for memcmp so
string compare "char with high bit set" "char w/o high bit set" returns
the expected value on all platforms. (DL)
-1/8/98 (unix portability/configure) building from .../unix/targetName/
+1/8/98 (unix portability/configure) building from .../unix/targetName/
subdirectories and simply using "../configure" should now work fine. (DL)
1/14/98 (enhancement) Added new regular expression package that
@@ -3887,7 +3885,7 @@ to generate direct loading package indexes (such those you need
if you use namespaces and plan on using namespace import just after
package require). pkg_mkIndex still has limitations regarding
package dependencies but errors are now ignored and with -direct, correct
-package indexes can be generated even if there are dependencies as long
+package indexes can be generated even if there are dependencies as long
as the "package provide" are done early enough in the files. (DL)
1/28/98 (enhancement) Performance tuning of regexp and regsub. (CCS)
@@ -3911,7 +3909,7 @@ continue to use the argv array after calling Tcl_OpenCommandChannel(). (CCS)
2/1/98 (bug fix) More bugs with %Z in format string argument to strftime():
1. Borland always returned empty string.
2. MSVC always returned the timezone string for the current time, not the
- timezone string for the specified time.
+ timezone string for the specified time.
3. With MSVC, "clock format 0 -format %Z -gmt 1" would return "GMT" the first
time it was called, but would return the current timezone string on all
subsequent calls. (CCS)
@@ -3933,7 +3931,7 @@ root directory was returning error. (CCS)
determine the attributes for a file. Previously it would return different
error messages on Unix vs. Windows vs. Mac. (CCS)
-2/4/98 (bug fixes) Fixed several instances of bugs where the parser/compiler
+2/4/98 (bug fixes) Fixed several instances of bugs where the parser/compiler
would reach outside the range of allocated memory. Improved the array
lookup algorithm in set compilation. (DL)
@@ -3941,13 +3939,13 @@ lookup algorithm in set compilation. (DL)
deprecated and ignored. The part1 is always parsed when the part2 argument
is NULL. This is to avoid a pattern of errors for extension writers converting
from string based Tcl_SetVar() to new Tcl_SetObjVar2() and who could easily
-forget to provide the flag and thus get code working for normal variables
+forget to provide the flag and thus get code working for normal variables
but not for array elements. The performance hit is minimal. A side effect
of that change is that is is no longer possible to create scalar variables
-that can't be accessed by tcl scripts because of their invalid name
-(ending with parenthesis). Likewise it is also parsed and checked to
-ensure that you don't create array elements of array whose name is a valid
-array element because they would not be accessible from scripts anyway.
+that can't be accessed by tcl scripts because of their invalid name
+(ending with parenthesis). Likewise it is also parsed and checked to
+ensure that you don't create array elements of array whose name is a valid
+array element because they would not be accessible from scripts anyway.
Note: There is still duplicate array elements parsing code. (DL)
*** POTENTIAL INCOMPATIBILITY ***
@@ -3993,7 +3991,7 @@ registry call. (CCS)
2/11/98 (enhancement) Eliminate the TCL_USE_TIMEZONE_VAR definition from
configure.in, because it was the same information as the already existing
HAVE_TM_ZONE definition. The lack of HAVE_TM_ZONE is used to work around a
-Solaris and Windows bug where "clock format [clock sec] -format %Z -gmt 1"
+Solaris and Windows bug where "clock format [clock sec] -format %Z -gmt 1"
produces the local timezone string instead of "GMT". (CCS)
2/11/98 (bug fix) Memleaks and dereferencing of uninitialized memory in
@@ -4351,7 +4349,7 @@ strings that are already null terminated. [Bug: 1793] (stanton)
5/3/99 (new feature) Applied Jeff Hobbs's string patch which includes
the following changes:
- - added new subcommands: equal, repeat, map, is, replace
+ - added new subcommands: equal, repeat, map, is, replace
- added -length option to "string compare|equal"
- added -nocase option to "string compare|equal|match"
- string and list indices can be an integer or end?-integer?.
@@ -4380,7 +4378,7 @@ improvements for many Tcl scripts. [Bug: 1063] (stanton)
encoding subfield from the LANG/LC_ALL environment variables in cases
where the locale is not found in the built-in locale table. It also
attempts to initialize the locale subsystem so X11 is happy. [Bug: 1989]
-(stanton)
+(stanton)
5/14/99 (bug fix) Applied the patch to fix 100-year and 400-year
boundaries in leap year code, from Isaac Hollander. [Bug: 2066] (redman)
@@ -4468,7 +4466,7 @@ harness package. Modified test files to use new tcltest package.
6/26/99 (new feature) Applied patch from Peter Hardie to add poke
command to dde and changed the dde package version number to
-1.1. (redman)
+1.1. (redman)
6/28/99 (bug fix) Applied patch from Peter Hardie to fix problem in
Tcl_GetIndexFromObj() when the key being passed is the empty string.
@@ -4531,7 +4529,7 @@ notation for opening serial ports on Windows. (redman)
instead of the platform-specific "size_t", primarily after SunOS 4
users could no longer compile. (redman)
-7/22/99 (bug fix) Fixed crashing during "array set a(b) {}".
+7/22/99 (bug fix) Fixed crashing during "array set a(b) {}".
[Bug: 2427] (redman)
7/22/99 (bug fix) The install-sh script must be given execute
@@ -4566,7 +4564,7 @@ pack-old.n [Bug: 2469]. Patches from Don Porter. (redman)
7/29/99 (bug fix) Allow tcl to open CON and NUL, even for redirection
of std channels. [Bug: 2393 2392 2209 2458] (redman)
-7/30/99 (bug fix) Applied fixed Trf patch from Andreas Kupries.
+7/30/99 (bug fix) Applied fixed Trf patch from Andreas Kupries.
[Bug: 2386] (hobbs)
7/30/99 (bug fix) Fixed bug in info complete. [Bug: 2383 2466] (hobbs)
@@ -4576,7 +4574,7 @@ provided by James Dennett. [Bug: 2450] (redman)
7/30/99 (bug fix) Fixed launching of 16bit applications on Win9x from
wish. The command line was being primed with tclpip82.dll, but it was
-ignored later.
+ignored later.
7/30/99 (bug fix) Added functions to stub table, patch provided by Jan
Nijtmans. [Bug: 2445] (hobbs)
@@ -4589,7 +4587,7 @@ thread's stack space. (redman)
--------------- Released 8.2b2, August 5, 1999 ----------------------
8/4/99 (bug fix) Applied patches supplied by Henry Spencer to greatly
-enhance performance of certain classes of regular expressions.
+enhance performance of certain classes of regular expressions.
[Bug: 2440 2447] (stanton)
8/5/99 (doc change) Made it clear that tcl_pkgPath was not set for
@@ -4603,7 +4601,7 @@ terminated in tclLiteral.c. [Bug: 2496] (hobbs)
8/9/99 (bug fix) Fixed test suite to handle larger integers
(64bit). Patch from Don Porter. (hobbs)
-8/9/99 (documentation fix) Clarified Tcl_DecrRefCount docs
+8/9/99 (documentation fix) Clarified Tcl_DecrRefCount docs
[Bug: 1952]. Clarified array pattern docs [Bug: 1330]. Fixed clock docs
[Bug: 693]. Fixed formatting errors [Bug: 2188 2189]. Fixed doc error
in tclvars.n [Bug: 2042]. (hobbs)
@@ -4663,7 +4661,7 @@ and in testthread code. No more known (reported) mem leaks for Tcl
built using gcc on Solaris 2.5.1. Also none reported for Tcl on NT
(using Purify 6.0). (hobbs)
-10/30/99 (bug fix) fixed improper bytecode handling of
+10/30/99 (bug fix) fixed improper bytecode handling of
'eval {set array($unknownvar) 5}' (also for incr) (hobbs)
10/30/99 (bug fix) fixed event/io threading problems by making
@@ -5117,7 +5115,7 @@ bits for Tcl_UniChar though) (hobbs)
2001-05-30 (new feature)[TIP 15] Tcl_GetMathFuncInfo, Tcl_ListMathFuncs,
Tcl_InfoObjCmd, InfoFunctionsCmd APIs (fellows)
-2001-06-08 (bug fix,feature enhancement)[219170,414936] all Tcl_Panic
+2001-06-08 (bug fix,feature enhancement)[219170,414936] all Tcl_Panic
definitions brought into agreement (porter)
2001-06-12 (bug fix)[219232] regexp returned non-matching sub-pairs to have
@@ -5286,7 +5284,7 @@ compiles to 0 bytecodes (sofer)
2001-09-13 (new feature) Old ChangeLog entries => ChangeLog.1999 (hobbs)
-2001-09-17 (new feature) compiling with TCL_COMPILE_DEBUG now required to
+2001-09-17 (new feature) compiling with TCL_COMPILE_DEBUG now required to
enable all compile and execution tracing (sofer)
*** POTENTIAL INCOMPATIBILITY ***
@@ -5568,7 +5566,7 @@ options to configure (max)
2002-07-30 (bug fix)[584603] WriteChars infinite loop non-UTF-8 string (kupries)
-2002-08-04 (new feature)[584051,580433,585105,582429][TIP 27] Tcl interfaces
+2002-08-04 (new feature)[584051,580433,585105,582429][TIP 27] Tcl interfaces
are now fully CONST-ified. Use the symbols USE_NON_CONST or
USE_COMPAT_CONST to select interfaces with fewer changes.
*** POTENTIAL INCOMPATIBILITY ***
@@ -5578,7 +5576,7 @@ options to configure (max)
=> tcltest 2.2
2002-08-07 (bug fix)[587488] mem leak with USE_THREAD_ALLOC (sofer,sass)
-
+
2002-08-07 (feature enhancement)[584794,584650,472576] boolean values
are no longer always re-parsed from string. (sofer)
@@ -5712,7 +5710,7 @@ packages in multiple interps.
2003-02-01 (bug fix)[675356] [clock clicks {}]; [clock clicks -] - syntax errs
-2003-02-01 (bug fix)[656660] MT-safety for [clock format]
+2003-02-01 (bug fix)[656660] MT-safety for [clock format]
2003-02-03 (bug fix)[651271] command rename traces get fully-qualified names
*** POTENTIAL INCOMPATIBILITY ***
@@ -5858,7 +5856,7 @@ in the 8.4.3 release.
2003-07-16 (bug fix)[756791] corrected assumption that Tcl_Free == free
-2003-07-16 (feature enhancement) -DTCL_UTF_MAX=6 compile option forces
+2003-07-16 (feature enhancement) -DTCL_UTF_MAX=6 compile option forces
internal UCS-4 representation of Unicode (default is recommended UCS-2).
2003-07-16 (bug fix)[767578] 64-bit corrections in thread notifier.
@@ -5931,7 +5929,7 @@ various odd regexp "can't happen" bugs.
2003-12-09 (platform support)[852369] update errno usage for recent glibc
-2003-12-12 (bug fix)[858937] fix for [file normalize ~nobody]
+2003-12-12 (bug fix)[858937] fix for [file normalize ~nobody]
2003-12-17 (bug fix)[839519] fixed two memory leaks (vasiljevic)
@@ -5946,7 +5944,7 @@ various odd regexp "can't happen" bugs.
2004-02-12 (feature enhancement) update HP-11 build libs setup
-2004-02-17 (bug fix)[849514,859251] corrected [file normailze] of $link/..
+2004-02-17 (bug fix)[849514,859251] corrected [file normailze] of $link/..
2004-02-17 (bug fix)[772288] Unix std channels forced to exist at startup.
@@ -5964,36 +5962,149 @@ various odd regexp "can't happen" bugs.
--- Released 8.4.6, March 1, 2004 --- See ChangeLog for details ---
+Changes to 8.5a1 include all changes to the 8.4 line through 8.4.6,
+plus the following, which focuses on the high-level feature changes
+in this changeset (new minor version) rather than bug fixes:
+
+ * refactored IO code to split FS path code into generic/tclPathObj.c
+ and generic/tclFileSystem.h
+
+ * refactored trace code into generic/tclTrace.c
+
+ * configure scripts now require autoconf 2.57 for regeneration
+
+ * updated runtime library scripts to use newer Tcl code features
+ (like replacing regsub with string map)
+
+ * improve robustness of tcltest test suite across environments
+
+ * changed the bytecode evaluation-stack addressing mode, from array-style
+ to pointer-style; the catch stack and evaluation stack are now
+ contiguous in memory
+
+ * switch command is now byte-compiled
+
+ * enhanced checking in 'file' command for Windows NT file permissions
+
+ * [TIP #57] new 'lassign' command (adopted from TclX)
+
+ * [TIP #75] switch -regexp now provides submatch info
+
+ * [TIP #90] extended 'catch' and 'return' to enable creation of procs
+ that are a true replacement for 'return'
+
+ * [TIP #100] new 'unload' command (can unload DLLs loaded via 'load',
+ requires the extension writer to support it)
+
+ * [TIP #111] new 'dict' command. Several commands have been updated
+ to handle the list form of dicts implicitly at the C level where
+ only lists were previously accepted
+
+ * [TIP #112] 'namespace ensemble' command addition allows for ensembles
+ that build on the namespace abstraction
+
+ * [TIP #118] file attributes -readonly option for unices that support
+ chflags(), support Mac Classic attribute options on OS X, add
+ -rsrclength for OS X, enhance file copy on OS X to copy finder
+ attributes and resource forks transparently
+
+ * [TIP #120] enable dde in safe interpreters
+ * [TIP #130] enable unique dde server names on Windows
+ * [TIP #135] change dde servername -exact option to -force
+=> dde 1.3
+
+ * [TIP #121] new Tcl_SetExitProc C API to control application shutdown
+
+ * [TIP #123] expr ** exponentiation operator
+
+ * [TIP #124] 'clock clicks -milliseconds' now returns a wide integer and a
+ new 'clock clicks -microseconds' returns a wide integer, representing
+ the number of microseconds, both since the Posix epoch
+
+ * [TIP #127] added 'lsearch -index' option
+
+ * [TIP #136] added 'lrepeat' command
+
+ * [TIP #137/151] Add -encoding option to 'source' command and main tclsh
+ executable.
+ *** POTENTIAL INCOMPATIBILITY ***
+ For Tcl embedders that build on Tcl_Main() and make use of Tcl_Main's
+ former ability to pass a leading "-encoding" option to interactive shell
+ operations, this will now be consumed by Tcl.
+
+ * [TIP #138] New TCL_HASH_KEY_SYSTEM_HASH option for Tcl hash tables
+
+ * [TIP #139] documented portions of Tcl's namespace C APIs
+
+ * [TIP #148] correct [list]-quoting of the '#' character
+ *** POTENTIAL INCOMPATIBILITY ***
+ For scripts that assume a particular (buggy) string rep for lists.
+
+ * [TIP #156] add "root locale" to msgcat
+=> msgcat 1.4
+
+ * [TIP #157] leading {expand} syntax on words to cause argument expansion.
+ This is a safer/cleaner alternative to the use of 'eval'.
+
+--- Released 8.5a1, March 3, 2004 --- See ChangeLog for details ---
+
+2004-03-04 (new feature) registry package is [unload]able (thoyts)
+=> registry 1.1.4
+
2004-03-08 (bug fix)[910525] [glob -path] in root directory (darley)
-2004-03-15 (bug fix)[916795] syntax error -> compiler segfault (sofer,porter)
+2004-03-12 (new feature)[TIP 163] [dict merge] (english, fellows)
+
+2004-03-18 (platform support) support for Mac Classic removed (steffen)
+
+2004-03-28 (bug fix)[925121] corrected segfault in bc compiler (sofer)
-2004-03-29 (bug fix)[920667] install into any Unicode path on Win (hobbs)
+2004-03-30 (bug fix)[495830,729692] bytecode execution checks
+each command/interp validity before executing. (sofer)
2004-03-31 (bug fix)[811457] support translation to "" (porter)
2004-03-31 (bug fix)[811461] ignore locales with no "language" part (porter)
-=> msgcat 1.3.2
+=> msgcat 1.4.1
+
+2004-04-01 (bug fix) make [glob -type d -dir . *] work across VFS boundary
+
+2004-04-06 (clean up) refactored Tcl header file #include order. Might
+create need for changes in extensions that #include private headers.
+Changed source code files should work with older Tcl as well. See ChangeLog.
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2004-04-07 (bug fix)[920667] install into any Unicode path on Win (hobbs)
2004-04-07 (platform support) properly substitute more values in Windows
tclConfig.sh (hobbs)
2004-04-23 (bug fix)[930851] reset channel EOF when eofchar changes (kupries)
+2004-04-28 (bug fix)[600812][TIP 184] [upvar 0 scalar array(foo)] raises error
+
2004-05-03 (bug fix)[947070] stack overflow prevention on Win (kenny)
2004-05-03 (bug fix)[868853] fix leak in [fconfigure $serial -xchar] (cassoff)
-2004-04-05 (bug fix)[928353,929892,928808,947440,948177] test fixes: OSX
-(abner)
-
-2004-05-04 (bug fix) crash: [cd] w/ volumerelative $HOME (hobbs)
+2004-05 (bug fix)[928353,929892,928808,947440,948177] test fixes: OSX (abner)
2004-05-05 (bug fix)[794839] socket connect error -> r/w fileevents
(gravereaux)
-2004-05-14 (bug fix)[940278,922848] [clock] notices $::env(TZ) changes,
+2004-05-07 (bug fix)[949905] corrected utf-8 encoding of \u0000 on I/O (max)
+
+2004-05-13 (new feature)[TIP 129] [binary scan tnmrRqQ] (markus, fellows)
+
+2004-05-13 (new feature)[TIP 142] [interp limit] (fellows)
+
+2004-05-14 (bug fix)[940278,922848] [clock] notices $::env(TZ) changes,
gmt works on all platforms. (kenny, welton, glessner)
+2004-05-16 (feature rewrite) bytecode execution of {expand} changed
+ *** POTENTIAL INCOMPATIBILITY with prior 8.5a releases ***
+
+2004-05-18 (platform support) makefile.vc now generates tclConfig.sh (thoyts)
+
2004-05-18 (bug fix)[500285,500389,852944] [clock %G %V] ISO8601 week numbers
(kenny)
@@ -6007,24 +6118,34 @@ gmt works on all platforms. (kenny, welton, glessner)
2004-05-26 (bug fix)[960926] file count doubled when -singleproc 1 (porter)
=> tcltest 2.2.6
-2004-05-27 (bug fix)[949905] corrected utf-8 encoding of \u0000 on I/O (max)
+2004-05-26 (bug fix)[874058] improved build configuration on 64-bit systems.
+Corrects Tcl_StatBuf definition issues. (hobbs)
+
+2004-05-30 (platform support) Win: allow signed short exit codes (gravereaux)
2004-06-05 (bug fix)[976722] hi-res clock fixes: Win
(godfrey, suchenwirth, kenny)
-
2004-06-10 (bug fix)[932314] bad return values from Tcl_FSChdir() (vasiljevic)
-2004-06-14 (bug fix) correct dde hangs w/non-responsive apps (thoyts)
-=> dde 1.2.3
+2004-06-18 (platform support) regonize more unix locales (huang)
+
+2004-06-18 (bug fix) prevent stack overflow from long free() chains (fellows)
2004-06-21 (platform support) exceptions w/ gcc -O3 on Win (dejong)
+2004-06-23 (feature rewrite)[976496] thread local storage done with hash
+tables to avoid system limits (mistachkin)
+
2004-06-29 (bug fix)[981733] SafeBase global pollution (fellows)
+2004-06-30 (new feature)[TIP 188] [string is wideinteger] (kenny)
+
2004-07-02 (new feature)[TIP 202] pipe redirection 2>@1 (hobbs)
2004-07-03 (bug fix)[908375] round() wide integer support (lavana, sofer)
+2004-07-07 (bug fix)[458361] shimmer of single-word scripts suppressed (sofer)
+
2004-07-15 (bug fix)[770053] crash in thread finalize of notifier (vasiljevic)
2004-07-15 (bug fix)[990453] plug mutex leaks on reinit
@@ -6035,11 +6156,2151 @@ gmt works on all platforms. (kenny, welton, glessner)
2004-07-19 (bug fix)[987967] improved self-init of mutexes on Win (vasiljevic)
-2004-07-19 (bug fix)[874058] improved build configuration on 64-bit systems.
-Corrects Tcl_StatBuf definition issues. (hobbs)
-
2004-07-20 (bug fix) pure Darwin/CFLite support (steffen)
2004-07-20 (bug fix)[736426] plug leaky allocator reinit (mistachkin, kenny)
---- Released 8.4.7, July 26, 2004 --- See ChangeLog for details ---
+2004-07-30 (bug fix)[999084] no deadlock in re-entrant Tcl_Finalize (porter)
+
+2004-08-02 (new feature)[TIP 207] [interp invokehidden -namespace] (porter)
+
+2004-08-10 (bug fix) thread IDs on 64-bit systems (ratcliff,vasiljevic)
+
+2004-08-13 (bug fix) avoid malicious code acceptance by [mclocale] (porter)
+=> msgcat 1.3.3
+
+2004-08-16 (bug fix)[1008314] Tcl_SetVar TCL_LIST_ELEMENT (sofer,porter)
+
+2004-08-18 (new feature)[TIP 173,209] complete [clock] rewrite (kenny)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2004-08-18 (new feature)[TIP 189] package loading for Tcl Modules (kupries)
+
+2004-08-19 (bug fix)[1011860] [scan %ld] fix on LP64 (fellows,porter)
+
+2004-08-23 (bug fix)[695441] extend [tcl_findLibrary] search path to include
+ $::auto_path and [pkgconfig get scriptdir,runtime] (porter)
+
+2004-08-27 (platform support) TCL_MODULE_PATH values for Mac OSX (steffen)
+
+2004-08-27 (bug fix)[1017022] recognize imported ensembles (fellows)
+
+2004-08-30 (bug fix) [string map $x $x] crash (fellows)
+
+2004-09-01 (bug fix)[1020445] WIN64 support (hobbs)
+
+2004-09-03 (bug fix)[1020538] crash in [file copy] (violi,fellows)
+
+2004-09-07 (bug fix)[1016167] [after] overwrites its imports (kenny)
+
+2004-09-08 (bug fix) fixed [clock format 0 -format %k] (kenny)
+
+2004-09-09 (bug fix)[560297] fixed broken [namespace forget] logic (porter)
+
+2004-09-09 (bug fix)[1017299] fixed [namespace import] cycle prevention
+(porter)
+
+2004-09-10 (performance) $x[set x {}] is now fast [K $x [set x {}]] (sofer)
+
+2004-09-10 (bug fix)[868489] better control over int <-> wideInt
+(fellows,kenny)
+
+2004-09-10 (bug fix)[1025359] POSIX errorCode from wide seeks (kupries,fellows)
+
+2004-09-10 (bug fix)[707104,1026493] fix [rename] of [interp alias] (porter)
+
+2004-09-18 (bug fix)[868467] fix [expr 5>>32] => 0, not 5 (hintermayer,fellows)
+
+2004-09-21 (bug fix) consistent errorinfo from [namespace eval x error foo bar]
+ and [namespace eval c {error foo bar}] (porter)
+
+2004-09-22 (feature change) syntax errors not reported at compile time;
+ deferred to runtime. Support [return -errorline]. (porter)
+
+2004-09-23 (bug fix)[1016726] fix `make clean` in static config
+(leitgeb,dejong)
+
+2004-09-22 (feature change) report all compile errors at runtime (porter)
+
+2004-09-29 (bug fix)[1036649] syntax error in [subst] => buffer overflow
+(sofer)
+
+2004-09-30 (bug fix)[1038021] save/restore error state: var traces (porter)
+
+2004-10-01 (performance) stackframe level values in internal reps (fellows)
+
+2004-10-01 (feature change)[1037235] auto-create [dict] key paths (fellows)
+
+2004-10-04 (bug fix)[884830] eq and ne parse in expr (fellows)
+
+2004-10-05 (reform) errorInfo, errorCode management (porter)
+ *** POTENTIAL INCOMPATIBILITY for traces on those vars ***
+
+2004-10-06 (feature change)[1041072] re-bless and enhance Tcl_AppendResult
+(dkf)
+
+2004-10-06 (reform) more robust interp result appends (porter)
+=> dde 1.3.1
+=> registry 1.1.5
+
+2004-10-06 (reform) re-write of [glob] guts (fellows)
+
+2004-10-07 (reform)[925620] improved platform split of VFS code (darley)
+
+2004-10-08 (new feature)[TIP 201] "in" and "ni" expr operators (fellows)
+
+2004-10-08 (new feature)[TIP 212] [dict update]; [dict with] (fellows)
+
+2004-10-08 (bug fix)[954263] case insensitive [file exec] for Win
+(hobbs,darley)
+
+2004-10-14 (performance) [info commands/globals/procs/vars $pattern] faster
+ when $pattern is trivial (fellows)
+
+2004-10-14 (new feature)[TIP 217] [lsort -indices] (salsman,fellows)
+
+2004-10-24 (reform) replaced bit flag values with macros for Var handling
+ *** POTENTIAL INCOMPATIBILITY for accesses to Var internals ***
+
+2004-10-26 (new feature)[1054370] install msgcat, http, tcltest as TM's
+(porter)
+
+2004-10-26 (bug fix)[767676] negative PIDs with pipes (giese,gravereaux)
+
+2004-10-27 (bug fix)[731778] stop critical section leaks
+(mistachkin,gravereaux)
+
+2004-10-27 (bug fix)[926088] -load option to find tested packages (gravereaux)
+
+2004-10-28 (bug fix)[1030548] restore the --enable-symbols --enable-threads
+build on Win (mistachkin,kenny,kupries)
+
+2004-10-29 (bug fix)[1055673] fix command line syntax error message (porter)
+=> tcltest 2.2.7
+
+2004-10-30 (bug fix)[926106] fix [file mtime] DST anomaly (kenny)
+
+2004-10-31 (bug fix)[1057461] fix [info globals ::varName] (fellows)
+
+2004-11-02 (bug fix)[761471] fix [expr {NaN == NaN}] (sofer)
+
+2004-11-02 (bug fix)[1017151] misleading errorInfo after tests (seeger,porter)
+
+2004-11-03 (bug fix)[527164] preserve errorinfo from var traces (porter)
+
+2004-11-08 (bug fix){947693] Made -blocking option of channel during [close]
+consistent on Windows with Unix (gravereaux)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2004-11-11 (bug fix)[1034337] recursive file delete, MacOSX (steffen)
+
+2004-11-12 (new feature)[TIP 221] [interp bgerror] (porter)
+
+2004-11-12 (new feature)[TIP 226] Tcl_(Save|Restore|Discard)InterpState
+(porter)
+
+2004-11-12 (new feature)[TIP 227] Tcl_(Get|Set)ReturnOptions (porter)
+
+2004-11-12 (bug fix)[1004065] stop crash when TCL_UTF_MAX==6 (hobbs,porter)
+
+2004-11-15 (bug fix)[10653678] [trace variable],[trace remove] interop (porter)
+
+2004-11-16 (bug fix)[1067709] crash in [fconfigure -ttycontrol] (hobbs)
+
+2004-11-18 (new feature) configure options --enable-man-suffix (max)
+
+2004-11-22 (bug fix)[1030465] Improve HAVE_TYPE_OFF64_T check (dejong)
+
+2004-11-22 (bug fix)[1043129] Fixed the treatment of backslashes in file
+join on Windows (darley)
+
+2004-11-22 (bug fix)[976438] Move init.tcl search path construction to
+tclInit (porter)
+
+2004-11-24 (bug fix)[1072654] Fixed segfault in info vars trivial
+matching branch (new in 8.4.8) (porter)
+
+2004-11-24 (bug fix)[1001325, 1071701] Fixed readdir_r detection and usage
+(dejong, kenny, porter)
+
+2004-11-24 (bug fix)[1071807] Fixed all uses of 'select' to use standard
+macros rather than older bit-whacking style (kenny)
+
+2004-11-26 (bug fix)[1073524] Simplify the code to check for correctness of
+strstr, strtoul and strtod on unix (fellows)
+
+2004-11-26 (bug fix)[1072136] Remove file normalize on tcl_findLibrary
+search path uniqification added in 8.4.8 (porter)
+
+2004-11-30 (bug fix)[976520] Rework startup/initialization of the Tcl
+library, encoding search initialization, and Tcl_FindExecutable structure.
+[tclInit] no longer driven by the value of $::tcl_libPath (TCLLIBPATH).
+(porter)
+ *** POTENTIAL INCOMPATIBILITY : makes encoding names case sensitive
+ on Windows, where they have been case insensitive ***
+
+2004-12-02 (bug fix)[1074671] Ensure tilde paths are not returned specially
+by 'glob' (darley)
+
+Doc improvements [759545,926590,935853,1017072,1018486,1022527,1027849,
+ 1032243,1047928,1048005,1058446,1062647,1065732,1073334,etc.]
+Test suite expansion [1036649,1001997,etc.]
+
+--- Released 8.5a2, December 7, 2004 --- See ChangeLog for details ---
+
+2004-12-13 (bug fix)[1083082] encoding memory leaks (ade,porter)
+
+2004-12-13 (bug fix)[1082349] restored C++ extension support (porter)
+
+2004-12-14 (bug fix)[1081541] workaround automake-ism "$U" (porter)
+
+2004-12-15 (new feature) CallFrames on execution, not C, stack (sofer)
+
+2004-12-16 (bug fix)[1085023] [interp limit] support in [vwait], etc. (fellows)
+
+2004-12-29 (bug fix)[1090413] make [clock scan 0030] work (morian,kenny)
+
+2004-12-29 (bug fix)[1092789] make [clock scan 10000] work (porter,kenny)
+
+2004-12-29 (platform support)[1092952,1091967] MSVC7, gcc OPT compiles (hobbs)
+
+2005-01-06 (performance)[1020491] [http::mapReply] (fellows)
+=> http 2.5.1
+
+2005-01-09 (bug fix)[1095909] stopped use of readdir_r (english)
+
+2005-01-10 (enhancement)[1081595] stopped use of TCL_DBGX (english)
+
+2005-01-17 (bug fix)[1100542] [glob] of Windows shares (schar,darley)
+
+2005-01-19 (new feature)[TIP 235] C API for ensembles (fellows)
+
+2005-01-21 (new feature)[TIP 233] virtual time (kupries)
+
+2005-01-25 (bug fix)[1101670] [auto_reset] update for [namespace] (porter)
+***POTENTIAL INCOMPATIBILITY***
+May cause re-[source]-ing of files that have not anticipated that before.
+
+2005-01-27 (new feature)[TIP 218] Tcl_Channel API update for threads (kupries)
+
+2005-01-27 (bug fix)[1109484] Tcl_Expr* updates for Tcl_WideInt (hobbs)
+
+2005-01-28 (platform support)[1021871] Solaris gcc 64-bit support (hobbs)
+
+2005-02-10 (bug fix)[1119369] Tcl_EvalObjEx: avoid shimmer loss of List intrep
+(sofer,macdonald)
+
+2005-02-11 (platform support) correct gcc builds for AIX-4+, HP-UX-11 (hobbs)
+
+2005-02-24 (bug fix)[1119798] prevent [source $directory] (porter,mpettigr)
+=> tcltest 2.2.8
+
+2005-03-10 (bug fix)[1153871] bad ClientData cast (porter,victorovich)
+
+2005-03-15 (platform support) OpenBSD ports patch (thoyts)
+
+2005-03-18 (bug fix)[1115904] restore recursion limit in direct eval (porter)
+
+2005-03-24 (bug fix) stop conflict between Tcltest and Thread packages (porter)
+
+2005-03-29 (platform support) allow msys builds without cygwin (hobbs)
+
+2005-04-01 (internal change)[1158008] internal rep of "list" Tcl_Obj's
+now uses a refcounted struct (sofer)
+***POTENTIAL INCOMPATIBILITY***
+For any code that goes poking into the internals of "list" Tcl_Obj's
+
+2005-04-05 (performance)[1174551] Tcl_DecrRefCount of Tcl_Obj "chains" (sofer)
+
+2005-04-08 (performance)[1077262] better Tcl_Encoding cache lifetimes (porter)
+
+2005-04-10 (bug fix)[1180368] [interp invokehidden] mem leak (kenny,porter)
+
+2005-04-12 (performance)[1177363] startup encoding file scan (porter)
+
+2005-04-12 (performance)[1182459] [clock format] (kenny)
+
+2005-04-13 (bug fix) min buffer size dropped from 10 to 1 byte (gravereaux)
+
+2005-04-16 (bug fix)[1178445] fix memory waste at thread exit (vasiljevic)
+
+2004-04-16 (bug fix)[1084111] [array names] memory leak (ade,sofer)
+
+2005-04-19 (bug fix)[1185933] [clock] init clobbered global vars (ring,kenny)
+
+2005-04-19 (new feature) [::tcl::unsupported::EncodingDirs] - unsupported
+command to set search path for encoding files (porter)
+
+2005-04-20 (bug fix)[1090869] Tcl_GetInt accept 0x80000000, 64-bit
+(porter,singh)
+
+2005-04-22 (bug fix)[1187123] [string is boolean] respect EIAS (porter)
+
+2005-04-25 (enhancement) update to tzdata2005i (kenny)
+
+2005-04-25 (platform support) builds on Mac OS X 10.1 (steffen)
+
+2005-04-27 (new feature)[TIP 183] [open $f {... BINARY ...}] (porter)
+
+2005-04-29 (new feature)[TIP 176] simple index arithmetic (porter)
+
+2005-05-06 (platform support) x86_64 Solarix cc and Solaris 10 builds (hobbs)
+
+2005-05-10 (bug fix)[1198892] [expr {i**0}] error (kaitschu,markus)
+
+2005-05-10 (new feature)[TIP 132] floating-point conversion to string (kenny)
+***POTENTIAL INCOMPATIBILITY***
+For scripts that rely on (tcl_precision==12) number formatting
+
+2005-05-10 (new feature)[TIP 232] math functions as commands (kenny)
+***POTENTIAL INCOMPATIBILITY***
+Tcl_GetMathFuncInfo functioning is reduced; routine is now deprecated
+
+2005-05-13 (feature removed) TCL_NO_MATH compiler directive (porter)
+
+2005-05-14 (platform support) Mac OSX: configurable CoreFoundation API
+(steffen)
+
+2005-05-14 (platform support) Mac OSX: use realpath when threadsafe (steffen)
+
+2005-05-17 (feature removed) Tcl_ObjType's "list", "procbody", "index",
+"ensembleCommand", "localVarName", "levelReference, "boolean" are no
+longer registered (porter)
+***POTENTIAL INCOMPATIBILITY***
+For any callers of Tcl_GetObjType on those strings
+
+2005-05-20 (bug fix)[1201589] boolean literal prefix in expressions (porter)
+
+2005-05-24 (platform support) Darwin build support merged into unix (steffen)
+
+2005-05-24 (new feature)[1202209] Mac OSX: support [load] of .bundle binaries
+Can support [load] from memory as well (steffen)
+
+2005-05-24 (new feature)[1202178] [time] returns non-integer result (steffen)
+
+2005-05-25 (new feature)[TIP 182] [expr {bool(...)}] (mistachkin,porter)
+
+2005-05-30 (new feature)[TIP 229] [namespace path] (fellows)
+
+2005-05-31 (bug fix)[1082283] Unix: notifier thread now joinable (vasiljevic)
+
+2005-06-01 (new feature)[TIP 241] -nocase: lsort, lsearch, switch (mistachkin)
+
+2005-06-01 (bug fix)[1209759] "return TCL_RETURN;" could cause panic (porter)
+
+Documentation improvements [1075433,1085127,1117017,1124160,1149605,etc.]
+
+--- Released 8.5a3, June 4, 2005 --- See ChangeLog for details ---
+
+2005-06-06 (bug fix)[1213678] Windows/gcc: crash in stack.test (kenny)
+
+2005-06-07 (new feature)[TIP 208] [chan] and [chan truncate] (fellows)
+
+2005-06-07 (revert) Restored registration of "procbody" Tcl_ObjType (porter)
+Reduces the ***POTENTIAL INCOMPATIBILITY*** from 2005-05-17.
+
+2005-06-13 (bug fix)[1217375,1219176] [file mkdir] race (diekhans,darley)
+
+2005-06-14 (bug fix)[1220058] [namespace delete] crash (duquette,fellows)
+
+2005-06-17 (bug fix)[1221395] Tcl_LimitSetTime able to break [vwait] (fellows)
+
+2005-06-18 (bug fix)[1154163] [format %h] on 64-bit OS's (kraft,fellows)
+
+2005-06-21 (bug fix)[1201035,1224585] execution trace crashes (porter)
+
+2005-06-21 (bug fix)[1194458] Windows: [file split] (kenny,porter)
+
+2005-06-22 (bug fix)[1225727] Windows: pipe finalization crash (kenny)
+
+2005-06-22 (bug fix)[1225571] Windows: [file pathtype] buffer overflow (thoyts)
+
+2005-06-22 (bug fix)[1225044] Windows: UMR in pipe close (kenny)
+
+2005-06-23 (bug fix)[1225957] Windows/gcc: crashes in assembler code (kenny)
+
+2005-06-24 (bug fix) make Tcl_Preserve safe in Tk exit handlers (kenny)
+
+2005-07-01 (bug fix)[1222872] notifier spurious wake-up protection (vasiljevic)
+
+2005-07-05 (bug fix)[1230597] allow idempotent [namespace import] (porter)
+
+2005-07-15 (bug fix)[1237907] localtime() => NULL => crash (kenny)
+
+2005-07-21 (dropped support) IRIX 4, RISCos, Ultrix, and ancient BSD (kenny)
+***POTENTIAL INCOMPATIBILITY***
+
+2005-07-22 (enhancement)[1237755] 8.4 features in script library (fradin,porter)
+
+2005-07-24 (new feature) configure macros SC_PROG_TCLSH, SC_BUILD_TCLSH (dejong)
+2005-07-26 (bug fix)[1047286] cmd delete traces during namespace delete (porter)
+
+2005-07-26 (new unix feature)[1231015] ${prefix}/share on ::tcl_pkgPath (dejong)
+***POTENTIAL INCOMPATIBILITY***
+
+2005-07-27 (bug fix)[1214462] [unknown] can return exceptions (porter)
+
+2005-07-27 (new feature) value of ::tcl_precision now kept per-thread (porter)
+***POTENTIAL INCOMPATIBILITY***
+
+2005-07-28 (unix bug fix)[1245953] O_APPEND for >> redirection (fellows)
+
+2005-07-29 (bug fix)[1247135] [info globals] return only existing vars (fellows)
+
+2005-07-30 (new Darwin feature) TCL_LOAD_FROM_MEMORY configuration (steffen)
+
+2005-08-05 (bug fix)[1241572] correct [expr abs($LONG_MIN)] (kenny)
+
+2005-08-05 (Solaris bug fix)[1252475] recognize cp1251 encoding (wagner,fellows)
+
+2005-08-11 (config options) eliminated USE_THREAD_STORAGE option (kenny)
+
+2005-08-23 (toolchain support) autoconf-2.59 now required (dejong)
+
+2005-08-24 (new feature)[TIP 219] reflected channels ([chan create]) (kupries)
+
+2005-08-25 (bug fix)[1267380] [lrepeat] buffer overflow prevention (fellows)
+
+2005-08-26 (bug fix) fix [namespace ensemble] crashes in Snit (fellows)
+
+2005-08-29 (bug fix)[1275043] restore round() away from zero (kenny)
+
+2005-08-29 (bug fix)[1189657] correct [tcl::tm::roots] (porter)
+
+2005-09-07 (bug fix)[1283976] invalid [format %c -1] result (porter)
+
+2005-09-08 (new feature)[1242844][TIP 254] new types for Tcl_LinkVar (fellows)
+
+2005-09-07 (toolchain support) deprecate TCL_VARARGS*; stdarg.h assumed (porter)
+***POTENTIAL INCOMPATIBILITY***
+
+2005-09-15 (RHEL bug fix)[1287638] support open >2GB files RHEL 3 (palan)
+
+2005-09-08 (new feature)[TIP 255] [expr min()] and [expr max()] (hobbs)
+
+2005-09-30 (bug fix)[1306162] $argv encoding and list formatting (porter)
+
+2005-10-04 (bug fix)[1067708] [fconfigure -ttycontrol] leak (hobbs)
+
+2005-10-04 (bug fix)[1182373] [http::mapReply] update to RFC 3986 (aho,hobbs)
+=> http 2.5.2
+
+2005-10-04 (HPUX bug fix)[1204237] shl_load() and DYNAMIC_PATH (collins,hobbs)
+
+2005-10-05 (bug fix)[979640] buffer overrun mixing putenv(), ::env (bold,hobbs)
+
+2005-10-08 (new feature)[TIP 237] unlimited range for integers (kenny,porter)
+***POTENTIAL INCOMPATIBILITY*** for any code that relies on implicit truncation
+of integer calculations to the range of a C long
+
+2005-10-14 (platform support)[1256937] MSVC++ static builds (thoyts)
+
+2005-10-19 (bug fix)[1331475] [dict append] crash (bills,sofer)
+
+2005-10-20 (bug fix)[1333036] [lset] shared sublist handling (sofer)
+
+2005-10-23 (bug fix)[1335006] memleack in [glob] (melbardis,darley)
+
+2005-10-23 (bug fix)[1325803] Win: [file stat] on links (bonilla,darley)
+
+2005-11-01 (bug fix)[1337941] Tcl_TraceCommand() -> crash (devilliers,porter)
+
+2005-11-02 (platform support)[1256937] MSVC 8 support (thoyts)
+
+2005-11-03 (new Win NT/XP feature) Unicode console support (kovalenko,thoyts)
+
+2005-11-04 (bug fix)[1337229,1338280] [namespace delete] / unset traces (sofer)
+
+2005-11-04 (enhancement) Korean timezone abbreviations (kenny)
+
+2005-11-04 (platform support)[1163896] LynxOS [load] (heidibr)
+
+2005-11-04 (bug fix)[1334947] value refcount error in var setting (sofer)
+
+2005-11-04 (Win enhancement)[1267871] extended exit codes (newman,thoyts)
+
+2005-11-07 (bug fix)[1348775] unset trace memory leak (sofer)
+
+2005-11-08 (bug fix)[1162286] [package require] checks that the script
+registered by [package ifneeded] provides the version it claims (lavana,porter)
+*** POTENTIAL INCOMPATIBILITY ***
+
+2005-11-09 (bug fix)[1350293,1350291] [after $negative $script] fixed (kenny)
+
+2005-11-12 (bug fix)[1352734,1354540,1355942,1355342] [namespace delete]
+issues with [namespace path] and command delete traces (sofer,fellows)
+
+2005-11-18 (bug fix)[1358369] URL parsing standards compliance (wu,fellows)
+=> http 2.5.2
+
+2005-11-18 (revert) Restored registration of "list" Tcl_ObjType (porter)
+Reduces the ***POTENTIAL INCOMPATIBILITY*** from 2005-05-17.
+
+2005-11-18 (bug fix)[1359094] Tclkit crash (thoyts, kupries)
+
+2005-11-20 (bug fix)[1091431] Tcl_InitStubs failure crashes wish (english)
+
+2005-11-27 (platform support) Darwin 64bit, Tiger copyfile(), and
+Max OSX universal binaries support (steffen)
+
+2005-11-28 (bug fix) [clock] DST transition error (mackerras,kenny)
+
+2005-11-29 (bug fix)[1366683] [lsearch -regexp] backrefs (cleverly,fellows)
+
+2005-11-30 (performance) recoded portions of [clock] in C (kenny)
+
+2005-11-30 (enhancement) improved bytecode compiling of [switch] (fellows)
+*** POTENTIAL INCOMPATIBILITY ***
+For loading bytecode compiled and saved by earlier 8.5alpha releases
+
+2005-12-05 (Darwin bug fix)[1034337] NFS recursive file delete (steffen)
+
+2005-12-08 (platform support) Win x64 build (hobbs)
+
+2005-12-09 (bug fix)[1374778] [lsearch -start $pastEnd] => -1 (fellows)
+
+2005-12-12 (bug fix)[1377619] configure syntax error exposed in bash-3.1 (hobbs)
+
+2005-12-13 (bug fix)[1379349] [dict for] CoW error (ring,hippler,fellows)
+
+2005-12-18 (bug fix)[1382528] [dict for {k v} {} {}] crash (kovalenko,fellows)
+
+2005-12-27 clock tzdata updated to Olson's tzdata2005r (kenny)
+
+2005-12-27 libtommath updated to release 0.37 (kenny)
+
+2006-01-09 (bug fix)[1480572] [info level $l] => "namespace inscope" (porter)
+
+2006-01-11 (compat support)[1397843] when ::errorInfo is traced, fall back to
+old pattern of stack trace construction (porter).
+Reduces the ***POTENTIAL INCOMPATIBILITY*** from 2004-10-05.
+
+2006-01-12 (bug fix)[1366227] Win: [file stat] sharing violation (darley)
+
+2006-01-23 (bug fix)[1410553] Tcl_GetRange Unicode confusion (twylite,spjuth)
+
+2006-01-23 (bug fix)[1412695] args handling in precompiled procs (traum,sofer)
+
+2006-02-01 (new feature)[1275435][TIP 250] [namespace upvar] (sofer)
+
+2006-02-01 (new feature)[958222][TIP 181] [namespace unknown] (madden)
+
+2006-02-01 (new feature)[944803][TIP 194] [apply] (mistachkin)
+
+2006-02-08 (new feature)[1413934][TIP 258] [encoding dirs], etc. (porter)
+
+2006-02-09 (new feature)[1413115][TIP 215] auto-init [incr] (leitgeb)
+
+2006-03-02 (bug fix)[1379287] norm of paths with /../ back to root (porter)
+
+2006-03-03 (compat support) Restored registration of a "boolean" Tcl_ObjType
+(porter)
+Reduces the ***POTENTIAL INCOMPATIBILITY*** from 2005-05-17.
+
+2006-03-06 (bug fix)[1439836,1444291] fix TCL_EVAL_{GLOBAL,INVOKE} handling
+when auto-loading or exec traces are present (porter)
+
+2006-03-10 (bug fix)[1437595] Win socket finalize with threads (vasiljevic)
+
+2006-03-13 (revert 2005-07-26 change) ${prefix}/share on ::tcl_pkgPath (porter)
+
+2006-03-14 (bug fix)[1448251] TCLX.y_TM_PATH handling (noble, kupries)
+
+2006-03-14 (bug fix)[768659] pipeline error when last command missing (kupries)
+
+2006-03-18 (bug fix)[1193497] Win porting of [file writable] (darley,vogel)
+
+2006-03-18 (bug fix)[1084705] [glob -nocomplain] silence empty result only,
+no other errors (darley)
+***POTENTIAL INCOMPATIBILITY***
+
+2006-03-21 (platform enhancement)[823329] HFS globbing support (steffen)
+
+2006-03-23 (platform support) updated tcl.spec file (max)
+
+2006-03-28 (bug fix)[1064247] BSD: path normalization with realpath() (steffen)
+
+2006-04-03 (bug fix)[1462248] crash reading utf-8 chars spanning multiple
+buffers at end of file (kraft,kupries)
+
+2006-04-05 (bug fix)[1464039] Tcl_GetIndexFromObj: empty key (fellows)
+
+2006-04-05 (bug fix) overdue dde, registry patchelevel increments (porter)
+=> dde 1.3.2
+=> registry 1.2
+
+2006-04-06 (bug fix)[1457515] TCL_IO_TRACK_OS_FOR_DRIVER_WITH_BAD_BLOCKING
+removed (steffen)
+
+2006-04-11 (bug fix)[1458266] enter/enterstep trace interference (leunissen)
+
+2006-04-12 (feature change)[1376892] revised definition of [:print:] (fellows)
+
+(platform support) Use of _ANSI_ARGS_ purged. ANSI compiler required (fellows)
+
+Documentation improvements [1211078,1190891,1292427,1277503,1104682,1359183,
+1415725,666770]
+
+--- Released 8.5a4, April 27, 2006 --- See ChangeLog for details ---
+
+2006-05-04 (bug fix)[1480509] srand() accept wide input (porter,afredd)
+
+2006-05-05 (bug fix)[1481986] interactive Tcl_Main blocks main loop (porter,lin)
+
+2006-05-13 (bug fix)[1482718] proc re-compile: preserve the previous
+bytecode while references still on the stack (porter,ryazanov)
+
+2006-05-27 (bug fix)[923072] Darwin: made unthreaded CoreFoundation notifier
+naked-fork safe on Tiger (steffen)
+
+2006-06-20 (internal change) Dropped the internal routines used to hook into
+filesystem operations back in the pre-Tcl_Filesystem days. (porter)
+***POTENTIAL INCOMPATIBILITY***
+For extensions and programs that have never migrated to the supported Tcl 8.4
+interface for virtual filesystems
+
+2006-07-05 (enhancement) Expression parser rewrite avoids stack overflow,
+reduces from O(N^2) to O(N) complexity, and greatly improves syntas error
+messages (porter)
+***POTENTIAL INCOMPATIBILITY***
+For any code relying on exact error messages.
+
+2006-07-20 (platform support) Mac OS X weak linking (steffen)
+
+2006-07-20 (bug fix) Darwin: execve() works iff event loop not yet run (steffen)
+
+2006-07-24 (bug fix)[1518166] Uninitialized Tcl_DString (afredd)
+
+2006-07-30 (bug fix)[1426279,1505383,1494664,1531530] [clock] fixes (kenny)
+
+2006-08-09 (bug fix)[1531184] [dict for {file stat} x {}] crash (fellows)
+
+2006-08-10 (bug fix)[1538262,1530474] code cleanup; optimizations (afredd)
+
+2006-08-18 (bug fix) intermittent failures in TclUnixWaitForFile() (steffen)
+
+2006-08-18 (platform support) Darwin x86_64 (steffen)
+
+2006-08-21 (bug fix)[1457797] Darwin 64-bit notifier hang (steffen)
+
+2006-08-21 (bug fix) Darwin: recursively called event loop (steffen)
+
+2006-08-21 (enhancement) Darwin: nanosec resolution clicks and [time] (steffen)
+
+2006-08-28 (bug fix)[1547681] TclFormatObj count arguments (mistachkin,porter)
+
+2006-08-28 (bug fix) stack.test failure on FreeBSD (mistachkin)
+
+2006-08-30 (bug fix)[1548263] filesystem segfaults (hobbs,mccormack)
+
+2006-08-31 (bug fix)[1541274] [expr {sqrt(-1)}] => -NaN (suchenwirth,porter)
+
+2006-09-06 (bug fix)[999544] use of MT-safe system calls (vasiljevic)
+
+2006-09-10 (platform support) Darwin: msgcat use CFLocale (steffen)
+=> msgcat 1.4.2
+
+2006-09-10 (new feature) tcltest option: -verbose line (steffen)
+=> tcltest 2.3a1
+
+2006-09-19 (bug fix)[1555271,1561260] Several ** operator bugs (porter)
+
+2006-09-22 (bug fix)[1562528] NULL terminates variadic calls (fellows,ryazanov)
+
+2006-09-22 (new feature)[1520767][TIP 268] [package] alpha/beta version;
+[package require] ranges, [package prefer] selection mode (kupries)
+
+2006-09-26 (platform support) MSVC8 AMD64 support (thoyts)
+
+2006-09-27 (bug fix)[1567222] bignum << errors (porter)
+
+2006-09-30 (enhancement)[1190441] quiet no-op [history] (sofer)
+
+2006-10-04 clock tzdata updated to Olson's tzdata2006m (kenny)
+
+2006-10-05 (bug fix)[1570718] make [lappend $nonList] complain (sofer,virden)
+
+2006-10-05 (bug fix)[1122671] alignment fixes in unicode encoding routines
+(hobbs,staplin)
+
+2006-10-05 (enhancement) Allow "_" in Tcl Module filenames (kupries)
+
+2006-10-05 (new feature) [set ::http::strict 0] (default value is 1) to disable
+URL validity checking against RFC 2986 (hobbs)
+=> http 2.5.3
+
+2006-10-06 (new feature)[1565751][TIP 275] [binary scan] unsigned (thoyts)
+
+2006-10-10 (bug fix)[1566526] crash cleaning up [namespace path] data (porter)
+
+2006-10-12 (bug fix)[1576006] better error messages from [interp alias] (sofer)
+
+2006-10-13 (platform support) get stack size on Darwin (steffen)
+
+--- Released 8.5a5, October 20, 2006 --- See ChangeLog for details ---
+
+2006-10-20 (configure change) Added autodetection for OS-supplied timezone
+files (max)
+
+2006-10-23 (enhancement)[1577278] Ensure the Tcl call stack always has a
+CallFrame, even at level 0 (sofer)
+ *** POTENTIAL INCOMPATIBILITY for users of tclInt.h ***
+
+2006-10-23 (enhancement)[1577492] Tcl_PushCallFrame and [info level]
+enhanced for ensemble rewrites (sofer)
+ *** POTENTIAL INCOMPATIBILITY for [info level 0] on interp alias ***
+
+2006-11-02 (feature change)[TIP 293] Replace {expand} with {*} (hobbs)
+ *** POTENTIAL INCOMPATIBILITY with previous 8.5 alphas only ***
+
+2006-11-04 (new feature)[TIP 274] Exponentiation operator is right
+associative (porter)
+
+2006-11-09 (new feature)[TIP 272] Added [lreverse] and [string reverse]
+commands (fellows)
+
+2006-11-14 (new feature)[TIP 261] [namespace import] returns list of
+imported commands (porter)
+
+2006-11-15 (new feature)[TIP 270] New C routines Tcl_ObjPrintf,
+Tcl_AppendObjToErrorInfo, Tcl_Format, Tcl_AppendLimitedToObj,
+Tcl_AppendFormatToObj, Tcl_AppendPrintfToObj (porter)
+
+2006-11-22 (feature change) Moved TCL_REG_BOSONLY from tcl.h to tclInt (porter)
+
+2006-11-22 (new feature)[TIP 269] Added [string is list] classification
+command (mistackin, fellows)
+
+2006-11-25 (new feature)[TIP 174] Added commands corresponding to most
+expr operators in ::tcl::mathop (fellows)
+
+2006-11-26 (platform support)[1230558] --enable-64bit on more systems (steffen)
+
+2006-11-27 (bug fix)[1602208] Fix 64-bit handling of select() on unix where
+fd was greater than 32 (fontaine, kenny)
+
+2006-11-28 (new feature)[TIP 280] Added [info frame] command for more
+Tcl-level debugging information (kupries)
+
+2006-12-01 (feature change)[TIP 298] Change Tcl_GetBignumAndClearObj to
+Tcl_TakeBignumFromObj (porter)
+
+2006-12-01 (new feature)[TIP 287] Added [chan pending] subcommand (cleverly)
+
+2006-12-01 (new feature)[TIP 299] Added isqrt() expr operator (kenny)
+
+2006-12-04 (new feature)[TIP 267] Added -ignorestderr option to exec (fellows)
+
+2006-12-05 (new feature)[TIP 291] ::tcl_platform(pointerSize) key (kupries)
+
+2007-01-11 (configure change) Remove "-Wconversion" from deflt CFLAGS (english)
+
+2007-01-25 (configure change) Ensure CPPFLAGS env var is used when set (steffen)
+
+2007-02-19 (configure change) Use SHLIB_SUFFIX=".so" on HP-UX IA64 (was
+".sl") (hobbs)
+
+2007-02-20 (bug fix)[1479814] Handle Windows NT \\?\... extended paths (thoyts)
+
+2007-03-01 (bug fix)[1671138] Fix infinite loop in compiled foreach with an
+empty list (fellows)
+
+2007-03-07 (enhancement) Improved Windows time zone tables to handle new US
+DST rules (kenny)
+
+2007-03-09 (enhancement) Improved Y2038 compliance of zoneinfo files (kenny)
+
+2007-04-02 (enhancement) Added bytecode compilation for global, variable,
+upvar and namespace upvar (sofer)
+
+2007-04-20 (bug fix) Improve clock localization for Japanese locale (kenny)
+
+2007-04-20 (enhancement) Document Tcl_SetNotifier & Tcl_ServiceModeHook (kenny)
+
+2007-04-23 (bug fix) fts_open() crash on 64bit Darwin 8 or earlier (steffen)
+
+--- Released 8.5a6, April 25, 2007 --- See ChangeLog for details ---
+
+2007-04-30 (bug fix)[1705778] many valgrind-detected leaks corrected
+
+2007-05-01 (bug fix)[1710709] leak in [string map] (porter)
+
+2007-05-02 (bug fix)[1710707] leaks in filesystem paths (mistachkin,kenny)
+
+2007-05-18 (feature change) {expand} syntax support removed. (porter)
+ *** POTENTIAL INCOMPATIBILITY with previous 8.5 alphas only ***
+
+2007-05-29 (bug fix)[1712723] Joinable thread death on 64-bit (virden,hobbs)
+
+2007-05-30 (feature change)[1725186] When expanded literals are parsed,
+(example: {*}{1 2 3}), TCL_TOKEN_EXPAND_WORD token is no longer returned.
+Tokens reflecting the expansion are returned instead. (porter)
+ *** POTENTIAL INCOMPATIBILITY with previous 8.5 alphas only ***
+
+2007-06-06 (platform support) Darwin: add plist to tclsh (steffen)
+
+2007-06-12 (enhancement) [info] is now a [namespace ensemble] (fellows)
+
+2007-06-20 (enhancement) better `make html` results (hobbs)
+
+2007-06-21 (feature change)[1740962] leave traces created during execution
+of traced command do not fire (sofer)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2007-06-23 (bug fix) Darwin: prevent post-fork() abort() (steffen)
+
+2007-06-27 (bug fix)[1743941] Infinite loop in Tcl_CreateTrace traces (porter)
+
+2007-06-29 (enhancement) Tcl_Alloc alignment on Darwin (steffen)
+
+2007-06-30 (bug fix)[1726873] crash in thread sync objects (vasiljevic,twylite)
+
+2007-06-30 (bug fix)[1717186] [lsort -command \{ $l] leak (afredd,fellows)
+
+2007-07-05 (bug fix)[1743676] no command named "" error message (porter,virden)
+
+2007-07-11 (bug fix)[1752146] [while 1 {}] & [interp limit] on commands (sofer)
+
+2007-07-31 (bug fix)[681877] tcl_platform(user) from system, not env (fellows)
+
+2007-07-31 (enhancement)[1750051] space efficiency of Tcl variables (sofer)
+ *** POTENTIAL INCOMPATIBILITY for C code that accesses internal
+ Tcl structs Var, Bytecode, Namespace, or CallFrame. ***
+
+2007-08-01 (enhancement)[1764318] word.tcl proc rewrites (petasis,fellows)
+
+2007-08-08 (bug fix)[1770224] [tcl::mathop::>> $big1 $big2] errors (porter)
+
+2007-08-14 (platform support) Darwin [load] from VFS on intel & 64bit (steffen)
+
+2007-08-15 (bug fix)[1773127] corrected open mode "a+" (rottman,fellows)
+
+2007-08-16 (bug fix)[1773040] ::errorInfo trace crash (janssen,porter)
+
+2007-08-16 (performance)[1564517] pre-compile constant expressions (porter)
+
+2007-08-21 (bug fix)[1775878] 'puts \' in interactive tclsh failed to move to
+prompt for continuation line (porter)
+
+2007-08-25 (bug fix)[1781282] [clock scan] case senstivity (kenny)
+
+2007-08-25 (performance)[1767293] ** on native integer types (kenny)
+
+2007-09-03 clock tzdata updated to Olson's tzdata2007g (kenny)
+
+2007-09-06 (platform support) Darwin: drop support for Xcode 1.5 project, add
+project for Xcode 3.0 (steffen)
+
+2007-09-08 (bug fix)[1786481] nested [dict update] crash (fellows)
+
+2007-09-08 (bug fix)[1710710] TclPtrSetVar leak (mistachkin,sofer)
+
+2005-09-09 (feature removed) Tcl_ObjType "nsName" no longer registered (porter)
+ *** POTENTIAL INCOMPATIBILITY for Tcl_GetObjType("nsName") ***
+
+2007-09-10 (bug fix)[1740631] Linked variable unlink prevention (maros,hobbs)
+
+2007-09-11 (bug fix)[1786481] [dict update] stack management (sofer)
+ *** POTENTIAL INCOMPATIBILITY with previous 8.5 alpha bytecode only ***
+
+2007-09-11 (bug fix)[1578344] [package require -exact] 8.4 compat (porter)
+ *** POTENTIAL INCOMPATIBILITY with previous 8.5 alphas only ***
+
+2007-09-11 (bug fix)[1772989,1071322] Support _, : in test constraints (porter)
+=> tcltest 2.3b1
+
+2007-09-11 (platform support) Windows AMD64 support (thoyts)
+
+2007-09-14 (enhancement)[1793984] DTrace provider for Tcl (steffen)
+
+2007-09-14 (bug fix)[1519940] surplus ns path invalidation (fellows,bauer)
+
+2007-09-15 (platform support) SunOS-5.1x link with cc, not ld (steffen)
+
+2007-09-17 (platform support)[1748251] Fix NetBSD link failures (english)
+
+(bug fix)[1066755] Several stack efficiency efforts increases recursion limit
+on Windows to be larger than the default [interp recursionlimit] value
+
+--- Released 8.5b1, September 26, 2007 --- See ChangeLog for details ---
+
+2007-10-02 (bug fix)[1806422] proper [tcl::tm::path] autoload (porter)
+
+2007-10-02 (bug fix) Improve Tcl_DecrRefCount() robustness (staplin)
+
+2007-10-11 (bug fix)[1805887] [string is int -failindex] for 0o, 0b (porter)
+
+2007-10-15 (bug fix)[1813528] Tcl_ParseBraces read past buffer (mistachkin)
+
+2007-10-25 (bug fix)[1726873] intermittent crash in threads (vasiljevic)
+
+--- Released 8.5b2, October 26, 2007 --- See ChangeLog for details ---
+
+2007-10-27 (bug fix)[1821159] fixed broken compile on x86_64 (sofer)
+
+2007-10-27 (bug fix)[1810264] stop panic in RE lexer (fellows)
+
+2007-10-28 (enhancement)[1826906] Embed iso8859-1 encoding in libtcl (fellows)
+
+2007-11-01 (bug fix)[1808258] [string is ascii \000] (fellows)
+
+2007-11-05 (bug fix)[1823576] [fconfigure $serial -xchar \000] (cassof)
+
+2007-11-07 (performance)[1827996] binary glob matching (hobbs)
+
+2007-11-07 (performance) binary [gets] (hobbs)
+
+2007-11-09 (performance)[1829248] interp state reset (sofer)
+
+2007-11-10 (performance) stack checking (sofer)
+
+2007-11-10 (performance) list indexing bytecode (sofer)
+
+2007-11-11 (performance)[1830038] macros to fetch Tcl_Obj intreps (sofer)
+
+2007-11-11 (performance)[1830166] RE bytecode for simple cases (hobbs)
+
+2007-11-13 (performance) [switch] & [regexp] use RE bytecode (hobbs, fellows)
+
+2007-11-14 (performance) bytecode for [info exists] (fellows)
+
+2007-11-15 (new feature)[1231022] configure option: --disable-rpath (fellows)
+
+2007-11-15 (bug fix)[1810038] infinite loop in RE compiler (lane,porter)
+
+Many significant documentation improvements (fellows, sofer)
+
+--- Released 8.5b3, November 19, 2007 --- See ChangeLog for details ---
+
+2007-11-20 (enhancement) string rep of dict has stable order (fellows)
+
+2007-11-21 (enhancement) compiled ensemble support (fellows)
+
+2007-11-22 (enhancement) [dict] is now an ensemble (fellows)
+
+2007-11-23 (enhancement) [string] is now an ensemble (fellows)
+
+2007-11-26 (bug fix)[1815573] Correct stack checking failure (sofer,golovan)
+
+2007-11-27 (bug fix)[800753] Document single byte char limit for
+[chan configure -eofchar] (cassoff)
+
+2007-12-03 (enhancement)[1836519] [switch $val $body] safe/fast (fellows,spjuth)
+
+2007-12-03 (release) tcltest package bump to 2.3.0 (porter)
+
+2007-12-03 (bug fix)[1618235] fix BSD compile errors (fellows)
+
+2007-12-05 (bug fix)[1844789] fix [lsearch -exact -integer] crash (fellows)
+
+2007-12-05 (performance)[1845092] Tcl_ObjType for channel names (hobbs)
+
+2007-12-14 (bug fix)[1602539] NUL pollution in [glob] result (hobbs)
+
+2007-12-17 (bug fix)[1851832,1851524] memory alignment correction (sofer)
+
+2007-12-18 (bug fix)[1810264] revised regexp engine to prevent debilitating
+over-consumption of resources (drewry,lane,ormandy,fellows)
+
+Several documentation and release notes improvements
+
+--- Released 8.5.0, December 20, 2007 --- See ChangeLog for details ---
+
+2007-12-23 (bug fix)[1857126] restore backref support to regexps (hobbs)
+
+2007-12-26 (enhancement)[1856994] [lsort] performance (sofer)
+
+2008-01-10 (bug fix)[1867855] fix [format %lli 0] crash (porter)
+
+2008-01-11 (bug fix)[1850424,1860425] stack checking on *bsd (sofer,noble)
+
+2008-01-13 (bug fix)[1353846] crash in read-only serial (hobbs,newman)
+
+2008-01-15 (bug fix)[1869989] mem leak; expr literals (porter,melbardis)
+
+2008-01-20 (bug fix)[1869405] binary [gets]; stacked channels (hobbs,ficicchia)
+
+2008-01-22 (bug fix)[1867855] fix [lreverse {}] crash (sofer,madden)
+
+2008-01-30 (bug fix)[1882373] fix Tcl_GetAlias pointer code (an00na)
+
+Several documentation and release notes improvements
+
+--- Released 8.5.1, February 5, 2008 --- See ChangeLog for details ---
+
+2008-02-06 (enhancement) [clock format] performance (kenny)
+
+2008-02-12 (bug fix)[1891827] compiled [switch -nocase] error (fellows)
+
+2008-02-22 (bug fix)[1818565] missing state array in http::status (thoyts)
+=> http 2.5.4
+
+2008-02-26 (bug fix)[1868845] corrected [eof] ordering (thoyts)
+
+2008-02-26 (new feature) [http::meta] command (thoyts)
+=> http 2.5.5
+
+2008-02-26 (bug fix)[1902436] fixed regexps ending in \* (hobbs)
+
+2008-02-27 (bug fix)[1862555,1902423] [clock] range & l10n (kenny)
+
+2008-02-28 (bug fix) [return -level 0] memory leak (porter)
+
+2008-02-28 (bug fix) [format %llx $big] memory leak (porter)
+
+2008-02-28 (bug fix) expression parser error message memory leak (porter)
+
+2008-02-28 (bug fix) memory leak when enter trace modifies command (porter)
+
+2008-02-29 (enhancement) Consumer refcounting for Tcl_SetReturnOptions()
+and Tcl_AddObjToErrorInfo() (spjuth,porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-03-07 (bug fix)[1899164] Avoid expr and script bytecode confusion (porter)
+
+2008-03-07 (bug fix)[1904907] finalize crash in Tcl_GetReturnOptions (kupries)
+
+2008-03-10 (bug fix)[1893815] expr {abs(-1e-350)} => -0.0 (porter)
+
+2008-03-10 (bug fix)[1901113] crash in [tcl::Bgerror {} {}] (madden,porter)
+
+2008-03-11 (bug fix)[1911919] unset trace inf loop in namespace delete (sofer)
+
+2008-03-12 (new feature) some HTTP 1.1 support in http (and more!) (hobbs)
+=> http 2.7
+
+2008-03-13 (enhancement) support space in INSTALL_ROOT or $builddir (steffen)
+
+2008-03-16 (bug fix)[1903325] bytecode stack space prediction crash (fellows)
+
+2008-03-18 (bug fix)[1914604] Tcl Modules: encoding fixed to utf-8; environment
+variables without "." added to customization hooks (kupries)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-03-18 (bug fix)[1914503] alignment of TclStackAlloc() return (sofer)\
+
+2008-03-20 (bug fix)[1868171] expose Tcl_GetMemoryInfo (for AOLserver) (fellows)
+
+2008-03-24 (bug fix)[1923966] crash in [binary format x0s] (thoyts)
+
+2008-03-27 (platform support)[1921166] Solaris 64bit build fixes (steffen)
+
+2008-03-27 clock tzdata updated to Olson's tzdata2008b (kenny)
+
+--- Released 8.5.2, March 28, 2008 --- See ChangeLog for details ---
+
+2008-03-30 (bug fix)[1783544] more robust TclIsNaN() (kenny,teterin)
+
+2008-04-01 (interface)[1819422] tclStubsPtr no longer in libtcl (porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-04-01 (bug fix)[1839067] FP round fix for Solaris/x86 (kupries,schlenker)
+
+2008-04-02 (bug fix)[780533,1932639] [fcopy] callbacks unreliable (ferrieux)
+
+2008-04-02 (interface)[1819422] libtclstub symbols MODULE_SCOPE (steffen)
+
+2008-04-04 (bug fix) [chan postevent] crash (kupries)
+
+2008-04-07 (bug fix) Fix broken [format {% d}] (max)
+
+2008-04-07 (bug fix)[1350564] Bi-directional [fcopy] now supported (ferrieux)
+
+2008-04-16 (bug fix)[1938497] Tcl_SetNotifier() fixes (steffen)
+
+2008-04-16 (interface)[1938497] make stubs tables 'static const' (steffen)
+
+2008-05-02 (new feature) [binary] is now a [namespace ensemble] (thoyts)
+
+2008-05-07 (bug fix) [dict append] crash (mccormack,fellows)
+
+2008-05-21 (bug fix)[1968882] [info complete "\\\n"] => 0 (porter)
+
+2008-05-22 (bug fix)[1968245] Tcl_LogCommandInfo() accept length=-1 (darroch)
+
+2008-05-23 (bug fix)[1965787] 32-bit overflow in [tell] result (ferrieux)
+
+2008-05-31 (new feature)[TIP 257] [oo::*] commands from TclOO (fellows)
+
+2008-06-04 (new feature)[TIP 317] [binary encode]; [binary decode] (thoyts)
+
+2008-06-06 (new feature)[TIP 230] [chan push]; [chan pop] (kupries)
+
+2008-06-08 (enhancement)[1973096] bytecompiled [uplevel] scripts (sofer)
+
+2008-06-12 (platform support) Solaris static build with DTrace (steffen)
+
+2008-06-12 (platform support) Solaris/amd64 gcc 64bit support (steffen)
+
+2008-06-13 (new feature)[TIP 285] [interp cancel]; Tcl_CancelEval() (mistachkin)
+
+2008-06-20 (bug fix)[1999035] make [interp bgerror $i] act in $i (porter)
+
+2008-06-23 (bug fix)[1972879] bad path intrep caching (porter)
+
+2008-06-24 (bug fix)[1999176] crash in [glob -dir {} a] (porter)
+
+2008-06-25 (bug fix)[1999119] Support TM packages in Safe Base (kupries)
+
+--- Released 8.6a1, June 25, 2008 --- See ChangeLog for details ---
+
+2008-06-29 (bug fix)[2004480] plug memory leaks (ade,porter,steffen)
+
+2008-07-01 (enhancement)[1905562] embed recursion limit in RE engine (fellows)
+
+2008-07-03 (bug fix)[1969717] fix package finding on Samba shares (jos)
+
+2008-07-03 (bug fix)[1987821] mem leak in [seek] on reflected chan (kupries)
+
+2008-07-13 (enhancement)[2017110] new Non-Recursive Evaluation implementation
+enables deep Tcl evaluation stacks without deep C stacks. (sofer)
+
+2008-07-20 (enhancement)[2008248] dict->list preserve item intreps (pasadyn)
+
+2008-07-21 (bug fix)[582506] imported cmds now fire execution traces (sofer)
+
+2008-07-21 (bug fix)[2015723] [file] bad use of inodes on Windows (thoyts)
+
+2008-07-21 (new feature)[TIP 304] [chan pipe] (ferrieux)
+
+2008-07-21 (bug fix)[2021443] more consistent "wrong # args" msgs (nijtmans)
+
+2008-07-21 (enhancement) [info frame] returns file data in more cases (kupries)
+
+2008-07-29 (bug fix)[2030670] fix rare panic in TclStackFree (pasadyn,sofer)
+
+2008-08-01 Tcl_Finalize() no longer called implicitly on DLL_PROCESS_DETACH.
+
+2008-08-05 (enhancement)[1994512] async connect logic simplified (jenglish)
+
+2008-08-06 (bug fix)[2040295] stopped supplying a workaround for bugs
+in Itcl's use of [namespace code]. Itcl now supplies its own workaround.
+ *** POTENTIAL INCOMPATIBILITY for older Itcl releases ***
+
+2008-08-06 (bug fix)[2039178] repaired guard against dispatching oo methods
+in a deleted interp. (porter)
+
+2008-08-08 tzdata updated to Olson's tzdata2008e (kenny)
+
+2008-08-11 (bug fix)[2046846] 64bit support for http zlib crc (thoyts)
+=> http 2.7.1
+
+2008-08-11 (enhancement) automatic [package provide] for TMs (kupries)
+
+2008-08-17 (bug fix)[2055782] crash involving Tcl_ConcatObj (sofer)
+
+2008-08-21 (new feature) CONST-ified Tcl routines passing (Tcl_ObjType *),
+(Tcl_Filesystem *), or (Tcl_Timer *) arguments (nijtmans,porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-08-21 (bug fix)[2065115] Restored ***= regexp functioning (hobbs,porter)
+
+--- Released 8.6a2, August 25, 2008 --- See ChangeLog for details ---
+
+2008-08-29 (bug fix)[2082299] Install TclOO header files (fellows)
+
+2008-09-01 oo methods called during interp deletion no longer skipped if
+they do not need the dying interp (fellows)
+
+2008-09-02 (support) Dropped support for pre-ANSI compilers. (porter)
+
+2008-09-04 (bug fix)[2093947] var unset trace in coroutine (fellows,sofer)
+
+2008-09-10 (enhancement) efficient list->dict conversion (elby,fellows)
+
+2008-09-10 (bug fix)[2102930] faulty numLevels count (madden,sofer)
+
+2008-09-16 (bug fix)[2114165] eval failure following cancel (sofer)
+
+2008-09-17 (bug fix)[2116053] export [min] and [max] from tcl::mathfunc (sofer)
+
+2008-09-22 (new feature)[TIP 320] oo common variable declaration (fellows)
+
+2008-09-24 (new feature)[TIP 316] portable access to Tcl_StatBuf (fellows)
+
+2008-09-24 (new feature)[TIP 323] [file delete], [file mkdir] zero pathNames (porter)
+
+2008-09-25 (new feature)[TIP 315] new var: tcl_platform(pathSeparator) (vu,fellows)
+
+2008-09-25 (new feature)[TIP 323] [global], [variable] zero varNames (porter)
+
+2008-09-26 (new feature)[TIP 323] [lassign], [namespace upvar], [my variable] zero varNames (porter)
+
+2008-09-26 (new feature)[TIP 323] [tcl::tm::path add|remove] zero pathNames (porter)
+
+2008-09-26 (new feature)[TIP 323] [lrepeat] zero elements; zero repeats (porter)
+
+2008-09-27 (bug fix)[2130992] prevent overflow crash in [lrepeat] (fellows)
+
+2008-09-28 (new feature)[TIP 314] ensemble parameters before subcommand (hellström,fellows)
+
+2008-09-29 (new feature)[TIP 318] revised defaults for [string trim] (poser)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-09-29 (new feature)[TIP 313] [lsearch -bisect] (spjuth)
+
+2008-09-29 (new feature)[TIP 326] [lsort -stride] (elby)
+
+2008-09-29 (new feature)[TIP 323] [linsert] zero elements (porter)
+
+2008-09-29 (new feature)[TIP 323] [glob] zero patterns (porter)
+
+2008-10-02 (new feature)[TIP 330] interp->result access disabled (kenny)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-03 (new feature)[TIP 265] Tcl_ParseArgv() (bromley)
+
+2008-10-03 (new feature)[TIP 195] [tcl::prefix] (spjuth)
+
+2008-10-04 (new feature) CONST-ified Tcl routines Tcl_GetIndexFromObj,
+Tcl_RegisterConfig, Tcl_InitCustomHashTable, and routines passing
+(Tcl_ChannelType *). (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-04 (bug fix)[2059262] unload only libraries marked unloadable (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-05 (new feature)[TIP 331] [lset listVar end+1 $value] (kenny)
+
+2008-10-05 (bug fix)[2143288] correct bad isqrt() results (boffey,kenny)
+
+2008-10-05 (new feature) CONST-ified return value of the
+Tcl_FSFileAttrStringsProc prototype. (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY for Tcl_Filesystems ***
+
+2008-10-07 (new feature)[TIP 327] [tailcall] (sofer)
+
+2008-10-07 (new feature)[TIP 328] [coroutine],[yield],[info coroutine] (sofer)
+
+2008-10-08 (bug fix)[2151707] fix stack trace from variable trace (porter)
+
+2008-10-10 (bug fix)[2155658] crash in oo method export (fellows)
+
+--- Released 8.6a3, October 10, 2008 --- See ChangeLog for details ---
+
+2008-10-13 (bug fix) Fix ability to join threads on 64-bit Windows (thoyts)
+
+2008-10-23 (bug fix)[2186888] Direct-eval [for] handling of [continue] was
+broken by NRE reform (sofer,porter)
+
+2008-10-24 (bug fix) fix failure to read SHOUTcast streams (thoyts)
+=> http 2.7.2
+
+2008-10-27 (enhancement) system encoding at startup is now "iso8859-1", and
+no longer "identity". Use of identity encoding minimized (porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2008-10-31 (bug fix)[2200824] revised [oo::define] to include caller
+context when resolving names. (nassau,fellows)
+
+2008-11-10 (bug fix)[2255235] [platform::shell::LOCATE] update (ring,kupries)
+=> platform::shell 1.1.4
+
+2008-11-13 (bug fix)[2269431] VFS [load] -> tempfile litter (ficicchia,nijtmans)
+
+2008-11-26 (bug fix)[2114900] updated tclIndex file (cassoff,kenny)
+
+2008-11-27 (bug fix)[2251175] [{*}{\{}] errors (hellström,ferrieux,porter)
+
+2008-11-29 (new feature)[TIP 210] [file tempfile] (techentin,fellows)
+
+2008-11-30 (bug fix)[2362156] [clock]: colon in format string (mizuno,kenny)
+
+2008-12-02 (bug fix)[2270477] hang in channel finalization (ferrieux,kupries)
+
+2008-12-02 (new feature)[TIP 336] Tcl_*ErrorLine() routines. Direct access
+to the errorLine field of the interp struct denied by default. (porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+ *** Define USE_INTERP_ERRORLINE to restore access for legacy code ***
+
+2008-12-04 (bug fix)[2385549] [file normalize] failed on some paths (porter)
+
+2008-12-05 (new feature)[TIP 307] Tcl_TransferResult() (leunissen,fellows)
+
+2008-12-05 (new feature)[TIP 335] Tcl_InterpActive() (mistachkin,fellows)
+
+2008-12-09 (new feature)[TIP 337] Tcl_BackgroundException() (porter)
+
+2008-12-10 (new feature)[TIP 341] >1 [dict filter] patterns (hellström,fellows)
+
+2008-12-10 (new feature)[TIP 343] [format %b $n] [scan $s %b] (ferrieux)
+
+2008-12-10 tzdata updated to Olson's tzdata2008i (kenny)
+
+2008-12-11 (new feature)[TIP 234] [zlib] and Tcl_Zlib*() (sheffers,fellows)
+
+2008-12-11 (bug fix)[2407783] spoil ChannelState when channel name passes
+among multiple interps (kupries)
+
+2008-12-12 (new feature)[TIP 322] Tcl_NR*() routines to enabled non-recursive
+evaluation in extensions (sofer,kenny)
+
+2008-12-09 (new feature)[TIP 338] Tcl_*StartupScript() (porter)
+ *** POTENTIAL INCOMPATIBILITY for callers of Tcl*Startup* routines ***
+
+2008-12-16 (new feature)[TIP 329] [try] [throw] (davel,fellows)
+
+2008-12-17 (new feature)[TIP 308] package tdbc 1.0b1 (kenny)
+
+2008-12-18 (new feature)[TIP 332] [close $chan read|write] (ferrieux)
+
+2008-12-18 (bug fix)[2444274] panic in long commands from {*} (goth,porter)
+
+--- Released 8.6b1, December 19, 2008 --- See ChangeLog for details ---
+
+2008-12-27 [TIP 234] Tcl_Zlib* interface revisions (fellows)
+ *** INCOMPATIBILITY with interface of 8.6b1 ***
+
+2009-01-02 (platform support)[878333] IRIX compat for mkstemp() (fellows)
+
+2009-01-03 (bug fix)[2481670] [clock add] error message (talvo)
+
+2009-01-05 (bug fix)[2412068] NR-enable [source] (fellows)
+
+2009-01-06 (bug fix)[2489836] crash unknown method dispatch (nadkarni,fellows)
+
+2009-01-06 (bug fix)[2481109] fix context of instance name check (fellows)
+
+2009-01-08 (enhancement) more -errorcode values (fellows)
+
+2009-01-19 (new feature) CONFIG_INSTALL_DIR - where tclConfig.sh goes (cassoff)
+
+2009-01-19 (platform support) better tools for BSD ports (cassoff)
+
+2009-01-21 (bug fix)[2458202] exit crash with [chan create]d channel (kupries)
+
+2009-01-26 (bug fix)[2446662] uniformly declare EOF on RST on sockets (ferrieux)
+
+2009-01-26 (bug fix)[1028264] delay WSACleanup() from under our feet (ferrieux)
+
+2009-01-29 (bug fix)[2519474] Tcl_FindCommand() bug exposed by oo (fellows)
+
+2009-01-29 (bug fix)[2537939] Fix Tcl_OOInitStubs() for no-stubs build (fellows)
+
+2009-02-04 (bug fix)[2561746] [string repeat] overflow crash (porter)
+
+2009-02-05 (enhancement) optimize string operations on bytearrays (fellows)
+
+2009-02-12 (bug fix) enable simpler [oo::define] extension (ferri,fellows)
+
+2009-02-15 (bug fix)[2603158] Tcl_AppendObjToObj: append to self crash (porter)
+
+2009-02-17 (platform support) MSVC and _WIN64 (hobbs)
+
+2009-02-20 (bug fix)[2571597] [file pathtype /a] wrong result (nadkarni,porter)
+
+2009-03-03 (bug fix)[2662434] [zlib crc32] result now unsigned (gavilan,fellows)
+
+2009-03-15 (platform support) translate SIGINFO where defined (BSD) (teterin)
+
+2009-03-15 (bug fix)[2687952] TSD struct memleak (mistachkin)
+
+2009-03-18 (bug fix)[2688184] memleak in [file normalize] (mistachkin)
+
+2009-03-20 (bug fix)[2597185] crash in Tcl_AppendStringToObj (porter)
+
+2009-03-20 (bug fix)[2561794,2669109,2494093,2553906] string overflow (porter)
+
+2009-03-22 (bug fix)[2502037] NR-enable [namespace unknown] (sofer)
+
+2009-03-27 (bug fix)[2710920] [file dirname|tail /foo/] errors (epler,porter)
+
+2009-04-08 (bug fix)[2570363] unsafe [eval]s in tcltest (bron,porter)
+=> tcltest 2.3.1
+
+2009-04-08 (platform support) more Darwin kernel patterns (steffen)
+=> platform 1.0.4
+
+2009-04-09 (bug fix)[26245326] [http::geturl] connection failures (golovan)
+=> http 2.7.3
+
+2009-04-10 (new feature) Darwin: embeddable CoreFoundation notifier (steffen)
+
+2009-04-10 (bug fix)[1961211] Darwin [load] back-compatibility (steffen)
+
+2009-04-09 (new feature) http chunked+gzip modes (thoyts)
+=> http 2.8.0
+
+2009-04-11 (enhancement) clarified cmd name resolution in oo forwards (fellows)
+
+20009-04-19 (bug fix)[2715421] http: excess bytes after POST (thoyts)
+=> http 2.8.1
+
+2009-04-30 (bug fix)[2486550] coroutine in [interp invokehidden] (sofer)
+
+2009-05-07 (bug fix)[2785893] find command in deleted namespace (sofer)
+
+2009-05-08 (bug fix)[2414858] tailcall in oo constructor (fellows)
+
+2009-05-14 (new subcommand)[TIP 354] [info object namespace] (fellows)
+
+2009-05-29 (platform support) account for ia64_32 (kupries)
+=> platform 1.0.5
+
+2009-06-02 (bug fix)[2798543] incorrect [expr] integer ** results (porter)
+
+2009-06-10 (bug fix)[2801413] overflow in [format] (porter)
+
+2009-06-13 (bug fix)[2802881] corrected compile env context (tasada,porter)
+
+2009-06-17 (redesign) reduced ambition of [exit] finalization with aim to
+avoid otherwise very tricky multi-thread finalization bugs. (staplin,ferrieux)
+ *** POTENTIAL INCOMPATIBILITY for exit handlers ***
+
+2009-06-26 (platform support) updates for Xcode 3.1 & 3.2 (steffen)
+
+2009-06-30 (platform support) clang static analyzer macros (steffen)
+
+2009-07-01 (bug fix)[2806622] Win: bad tcl_platform(user) value (thoyts)
+
+2009-07-05 (bug fix) zlib support asynch [chan copy] on chan transform (fellows)
+
+2009-07-12 (bug fix)[1895546] TclOO support for Itcl 4 method caching (fellows)
+
+2009-07-13 (bug fix)[1605269] NR-related [info frame] fixes (kupries)
+
+2009-07-14 (bug fix)[2821401] NR-enable direct eval [switch] (kenny)
+
+2009-07-16 (bug fix)[2819200] underflow settings on MIPS systems (porter)
+
+2009-07-19 (interface)[TIP 354] new routine Tcl_GetObjectName() (fellows)
+
+2009-07-20 (performance) favor [string is] success cases over empty (fellows)
+
+2009-07-22 (interface) removed TclpPanic() routine (nijtmans)
+
+2009-07-23 (bug fix)[2820349] plug event leak in notifier (mistachkin)
+
+2009-07-24 (bug fix)[2826248] crash in Tcl_GetChannelHandle (sonnenburg,kupries)
+
+2009-07-31 (bug fix)[2830354] overflow in [format] (misch,porter)
+
+2009-08-06 (bug fix)[2827000] reflected channels can signal EGAIN (kupries)
+
+2009-08-12 (new feature)[TIP 353] Tcl_NRExprObj() (porter)
+
+2009-08-20 (bug fix)[2823276] NR-enable [if], [for], [while] (fellows)
+
+2009-08-20 (bug fix)[2806250] EIAS violation in ~foo pathnames (porter)
+
+2009-08-21 (bug fix)[2837800] [glob */foo] return ./~x/foo (porter)
+
+2009-08-24 (bug fix) nested event loop notifier w/TkAqua Cocoa (alaoui,steffen)
+
+2009-08-25 (bug fix) [info frame] account for continuation lines (kupries)
+
+2009-08-27 (bug fix)[2845535] overflows in [format] (porter)
+
+2009-09-01 (bug fix) improved error message in tcltest (porter)
+=> tcltest 2.3.2
+
+2009-09-11 (bug fix)[2849860] http handle "quoted" charset value (fellows)
+=> http 2.7.4
+
+2009-09-11 (enhancement)[2314561] [subst] now bytecompiled, NR-enabled (porter)
+
+2009-09-24 (new feature)[TIP 356] Tcl_NRSubstObj() (porter)
+
+2009-10-04 (bug fix)[2569449] Core Foundation memory bug in Tiger (steffen)
+
+2009-10-06 (bug fix) repair intrep loss in slave interp evaluations
+introduced by first versions of the NRE conversion (nadkarni,porter)
+
+2009-10-06 (bug fix)[1941434] broken tclTomMath.h includes (porter)
+
+2009-10-07 (bug fix)[2871908] leaked hash table (mistachkin,kupries)
+
+2009-10-08 (bug fix)[2874678] bignum leak in [dict incr] (fellows)
+
+2009-10-17 (bug fix)[2629338] crash in var unset traces (raney,fellows)
+
+2009-10-19 (bug fix)[2107634] extend [read] and [gets] to Tcl string limits
+(morrison,parker,porter)
+
+2009-10-21 (bug fix)[2882561] Haiku OS signal support (morrison,fellows)
+
+2009-10-22 (bug fix)[2883857] [my varname arr(index)] (boudaillier,fellows)
+
+2009-10-23 (bug fix) 0-length writes: spurious SIG_PIPE (teterin,kupries)
+
+2009-10-24 Broken DST applied EU rules to US zones (lehenbauer,kenny)
+
+2009-10-29 (bug fix)[2800740] halved bignum memory on 64-bit systems (porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2009-11-05 (bug fix)[2854929] TM search path support in Safe Base (kupries)
+
+2009-11-05 (enhancement) rewrite of the Safe Base commands (kupries)
+
+2009-11-11 (bug fix)[2888099] [close] loses ENOSPC error (khomoutov,ferrieux)
+
+2009-11-11 (bug fix)[2891171] RFC 3986 compliance for ? in URL (nijtmans)
+=> http 2.8.2
+
+2009-11-12 (bug fix)[2895565] [fcopy -size] miscounts when converting encodings
+(kupries)
+
+2009-11-16 (bug fix)[2891556] encoding finalization crash (mistachkin,ferrieux)
+
+2009-11-18 (bug fix)[2849797] consistent names for std chans (nijtmans,fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2009-11-19 (enhancement) [load]able Tcltest extension (nijtmans)
+
+2009-11-24 (bug fix)[2893771] [file stat] on Win locked files (thoyts)
+
+2009-11-24 (bug fix)[2903011] crash call destructor from constructor (fellows)
+
+2009-12-03 (bug fix)[2906841] Safe Base [glob ../*] fixes (fellows)
+
+2009-12-09 (bug fix)[2901998] consistent I/O buffering (ferrieux,kupries)
+
+2009-12-11 (bug fix)[2806407] NR-enabled coroutines (sofer)
+
+2009-12-16 (bug fix)[2913616] msgcat: improved safe interp support (fellows)
+=> msgcat 1.4.3
+
+2009-12-22 (bug fix)[2918962] [lsort -index -stride] crash (moore,fellows)
+
+2009-12-23 (bug fix)[2913625] [info script/nameof] in safe interps (fellows)
+
+2009-12-28 (bug fix)[2891362] enable time limit in child interps (fellows)
+
+2009-12-29 (bug fix)[2922555] [binary decode hex { }] crash (thoyts)
+
+2009-12-29 (bug fix)[2895741] enable min(), max() in safe interps (fellows)
+
+2009-12-30 (bug fix)[2824981] guard [unknown] against [set] undef (sofer)
+
+2010-01-05 (bug fix)[2918610] [file rootname] corruption (magerya,porter)
+
+2010-01-18 (bug fix)[2932421] less [format %s] shimmer (ferrieux)
+
+2010-01-18 (bug fix)[2918110] [chan postevent] crash (bron,kupries)
+
+2010-01-21 (bug fix)[2910748] NR-enable epoch fallback direct eval (sofer)
+
+2010-01-30 (enhancement) [unset] now bytecompiled (fellows)
+
+2010-02-01 (bug fix)[2942697] faster match: some pathological regexp patterns
+(lane,fellows)
+
+2010-02-01 (bug fix)[2939073] [array unset] unset trace crash (ferrieux)
+
+2010-02-02 (bug fix)[2944404] crash in oo destructor (fellows)
+
+2010-02-02 (new feature) [array] is now a [namespace ensemble] (fellows)
+
+2010-02-05 (enhancement) [error] now bytecompiled (fellows)
+
+2010-02-08 (bug fix)[2947783] Tcl_Zlib*flate fail on shared values (fellows)
+
+2010-02-09 (enhancement) [try] now bytecompiled (fellows)
+
+2010-02-11 (bug fix)[2826551] line-sensitive matching in regexp (dejong)
+
+2010-02-11 (bug fix)[2949740] [open |noSuch rb] crash (kovalenko,fellows)
+
+2010-02-15 (bug fix)[2950259] harden (delete obj ns -> delete obj) (fellows)
+
+2010-02-21 (bug fix)[2954959] get sign of abs($zero) right (nijtmans)
+
+2010-02-22 (bug fix)[2762041] zlib chan transforms read EOF too early (kupries)
+
+2010-02-27 (bug fix)[801429] Tcl_SetMainLoop() thread safety (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-03-02 (enhancement) -fvisibility-hidden build support (nijtmans)
+
+2010-03-04 (bug fix)[2962664] [oo::class destroy] crash (fellows)
+
+2010-03-05 (interface) TclOO typedefs for function pointers (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-03-09 (bug fix)[2936225] stop [chan copy] to slow channel consuming all
+memory with buffer backup (ferrieux)
+
+2010-03-17 (bug fix)[2921116] crash in chan transfrom teardown (kupries)
+
+2010-03-19 (enhancement) [throw] now bytecompiled (fellows)
+
+2010-03-20 (enhancement) permit [fcopy] of > 2**31 bytes (fellows)
+
+2010-03-24 (new feature) [info object methodtype] (fellows)
+
+2010-03-24 (bug fix)[2383005] [return -errorcode] reject non-list (porter)
+
+2010-03-25 (bug fix)[2976504] broken fstatfs() call (reeuwijk,fellows)
+
+2010-03-30 (new feature)[TIP 362] [registry -32bit|-64bit] (courtney,fellows)
+=> registry 1.3
+
+2010-03-30 (bug fix)[2978773] refchan mem preservation (kupries)
+
+2010-04-02 (new feature)[TIP 357] Tcl_LoadFile, Tcl_FindSymbol, etc. (kenny)
+
+2010-04-05 (configure change)[TIP 364] default build: --enable-threads (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-04-02 (new feature)[TIP 348] [info errorstack], [return -errorstack]
+(ferrieux)
+
+2010-04-20 (enhancement) update bundled zlib to 1.2.5 (nijtmans)
+
+2010-04-29 (enhancement)[2992970] optimize bytearray appends (fellows)
+
+2010-05-19 (bug fix)[3004007] dict/list shimmer w/o string rep loss (fellows)
+
+2010-06-09 (bug fixes) platform: several fixes for 64 bit systems (kupries)
+=> platform 1.0.9
+
+2010-06-16 (bug fix)[3016135] [clock format] in he_IL locale (nijtmans)
+
+2010-06-18 (bug fix)[3017997] Add .cmd to file extensions for [exec] (fellows)
+
+2010-06-28 (bug fix)[3019634] support errno.h changes in MSVC++ 2010 (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-07-02 (enhancement) -errorcode for [expr] domain errors (fellows)
+
+2010-07-28 (bug fix)[3037525] crash deleting vars @ callframe pop (sofer)
+
+2010-08-04 (bug fix)[3034840] mem corrupt when refchan loses interp (kupries)
+
+2010-08-04 (enhancement) Win [load] use LOAD_WITH_ALTERED_SEARCH_PATH (hobbs)
+
+2010-08-04 (platform support) panic on detection of win9x system (hobbs)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-08-10 (fix) Handle non-null-terminated bytearrys in glob matching (hobbs)
+
+2010-08-11 (fix) copy-paste bug in [yield] implementation (sofer, goth)
+
+2010-08-11 (platform) Drop pre-aix 4.2 support, ldAix (hobbs)
+
+2010-08-14 (frq)[2819611] changed signatures of hash fnctions, delete-file, and get-native-path (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-08-15 (bug fix)[3045010] tweaked error message for wrong#args of lambda's (fellows)
+
+2010-08-18 (bug fix)[3004191] fixed safe [glob] (fellows)
+
+2010-08-21 (patch)[3034251] genStubs steal features of ttkGenStubs (nijtmans)
+
+2010-08-26 (bug fix)[1230554] configure, OSF-1 problems, windows manifest issues (hobbs)
+
+2010-08-30 (bug fix) [3046594,3047235,3048771] reimplemented tailcall (sofer)
+
+2010-08-31 fixed manifest handling on windows (hobbs, kupries)
+
+2010-08-31 windows makefile and stub changes (nijtmans)
+
+2010-09-01 (bug fix)[3057639] compiled lappend trace consistency (hobbs,kupries)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-09-01 fixed safe glob handling of -directory (kupries)
+
+2010-09-02 fixed safe glob handling of -join (kupries)
+
+2010-09-08 (bug fix)[3059922] build with mingw on amd64 (porter, mescalinum)
+
+2010-09-15 (bug fix)[3067036] stop hang in bytearray append (fellows)
+
+2010-09-22 unified set of link libraries between mingw and vc (nijtmans)
+
+2010-09-22 (bug fix)[3072640] protect writes to ::error* variables (sofer)
+
+2010-09-23 fix leak of return options [catch $err m constant] (porter, hobbs)
+
+2010-09-24 (bugfix)[3056775] fixed race condition in windows sockets (kupries)
+
+2010-09-24 (performance) string eq/cmp (hobbs)
+
+2010-09-26 (patch)[3072080] rewritten NRE core (sofer)
+
+2010-09-28 (new feature)[TIP 162] implementation of ipv6 sockets (max)
+
+2010-10-02 (bug fix)[3079830] properly invalidate string rep of dicts (fellows)
+
+2010-10-06 (bug fix)[3081065] fix writing to freed Tcl_Obj (porter)
+
+2010-10-08 fix in ipv6 code on windows (nijtmans)
+
+2010-10-09 fixed overallocation of execution stack (sofer)
+
+2010-10-11 windows unicode changes (nijtmans)
+
+2010-10-12 (bug fix)[3084338] fixed meamleak in ipv6 code (max)
+
+2010-10-13 (bug fix)[467523,983660] alt fix allows empty literal share (porter)
+
+2010-10-15 (bugfix)[3085863] updated unicode tables (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2010-10-16 refactored implementation of dict iteration (fellows)
+
+2010-10-17 (patch)[2995655] report inner contexts on error stack (ferrieux)
+
+2010-10-19 (bug fix)[3081008] fixed bytearray zlib interaction (fellows)
+
+2010-10-19 improved crc, appending to bytearray (fellows)
+
+2010-10-20 improved compilation of [dict for] (fellows)
+
+2010-10-26 Added private support to disable reverse dns (max)
+
+2010-10-26 Prevent crashes when querying socket options (fellows, max)
+
+2010-10-28 (bug fix)[3093120] prevent freeaddrinfo(NULL) (porter, virden)
+
+2010-10-29 (bug fix)[2905784] stop cycle waste in short [after] (ferrieux)
+
+2010-11-01 tzdata updated to Olson's tzdata2010o (kenny)
+
+2010-11-04 (bug fix)[3099086] Clarified docs of var substitution (fellows)
+
+2010-11-04 improved install targets (cassof)
+
+2010-11-04 improved testing of sockets (max)
+
+2010-11-05 (frq)[491789] setargv/unicode cmdline for MSVC (nijtmans)
+
+2010-11-09 (bug fix)[3105999] fixed memleak in OO var resolver (fellows)
+
+2010-11-15 (TIP 378)[3081184] improved TIP 280 performance (kupries)
+
+2010-11-16 (platform) VS 2005 SP1 MSVC compiler (nijtmans)
+
+2010-11-18 (bug fix)[3111059] leak in [namespace delete] w coroutines (sofer)
+
+2010-11-28 [3120139,3105247] Tcl_PrintDouble improvements (kenny)
+
+2010-11-29 (new cmd) [tcl::unsupported::inject] (ferrieux,sofer)
+
+2010-11-30 (enhancement) Restore TclFormatInt for performance (hobbs)
+
+2010-12-09 (new feature) [file] is now a [namespace ensemble] (fellows)
+
+2010-12-19 (bug fix) [fcopy -size 1 -command] asynchronous (ferrieux)
+
+2010-12-12 (platform) OpenBSD build improvements (cassoff)
+
+2010-12-17 (platform) Revisions to support rpm 4.4.2 (cassoff)
+
+2010-12-27 (bug fix) crash in [lsort] w multiple -index options (fellows)
+
+2010-12-30 (bug fix)[3142026] GrowEvaluationStack OBOE (harder,sofer)
+
+2011-01-18 (bug fix)[3001438] [info frame -1] crash (mccormack,fellows)
+
+2011-03-01 (performance)[3168398] optimize [interp cancel] (mistachkin)
+
+2011-03-05 (bug fix)[3185009] crash in OO variables (danckaert,fellows)
+
+2011-03-05 (new cmd) [tcl::unsupported::assemble] (ugurlu,kenny)
+
+2011-03-06 (bug fix)[3200987,3192636] parser buffer overruns (porter)
+
+2011-03-08 (bug fix)[3202905] failed intrep release of interp result (mccormack)
+
+2011-03-09 (bug fix)[3202171] repair [namespace inscope] optimizer (porter)
+
+2011-03-10 (new version) better tcltest reporting from child interps (fellows)
+=> tcltest 2.3.3
+
+2011-03-10 (new feature) [namespace] is now a [namespace ensemble] (fellows)
+
+2011-03-12 (interface) reduce casting by ckalloc(), ckfree() callers (fellows)
+
+2011-03-14 (bug fix) Fixes from libtommath 0.42.0 release (fellows)
+
+2011-03-21 (bug fix)[3216070] [load] extension from embed Tcl apps (nijtmans)
+ ***POTENTIAL INCOMPATIBILITY***
+
+2011-03-27 (performance) NRE: LIST lset foreach benchmark (twylite)
+
+2011-04-11 (bug fix)[3282869] coroutine + eval + locals crash (ferrieux,sofer)
+
+2011-04-13 (bug fix)[2662380] crash when variable append trace unsets (sofer)
+
+2011-04-13 (bug fix)[3285375] Buffer overflow in [concat] (porter)
+
+2011-05-02 (internals change) revised TclFindElement() interface (porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2011-05-05 (enhancement) dict->list w/o string rep generation (porter)
+
+2011-05-10 (bug fix)[3173086] Crash parsing long lists (rogers,porter)
+
+2011-05-24 (enhancement) msgcat internal improvements (fellows)
+=> msgcat 1.4.4
+
+2011-05-25 (TIP 381) [info object|class call] [self call] [nextto] (fellows)
+
+2011-05-31 (bug fix)[3293874] let lists grow all the way to the limit (porter)
+
+2011-06-02 (bug fix)[3185407] cmd resolution epoch flaw (nadkarni,fellows)
+
+2011-06-13 (bug fix)[3315098] mem leak generating double string rep (neumann)
+
+2011-06-22 (new feature) DEB_HOST_MULTIARCH support (kupries)
+=> platform 1.0.10
+
+2011-07-15 (bug fix)[3357771] Prevent circular refs in bytecode (porter)
+
+2011-07-28 tzdata updated to Olson's tzdata2011h (porter)
+
+2011-08-01 (bug fix)[3383616] memleak exposed by XOTcl (neumann,sofer)
+
+Many more Tcl built-in command errors now set an -errorcode.
+
+--- Released 8.6b2, August 8, 2011 --- See ChangeLog for details ---
+
+2011-07-02 (bug fix)[3349507] correct double(1[string repeat 0 23]) (kenny)
+
+2011-07-19 (bug fix)[3371644] Tcl_ConvertElement() segfault (sader, ferrieux)
+
+2011-07-21 (bug fix)[3372130] hypot(.) segfault (nijtmans)
+
+2011-08-12 (bug fix)[3389764] memleaks due to reference cycles in dup'd paths
+
+2011-08-15 (bug fix)[3390272] leak of [info script] value (porter)
+
+2011-08-17 (bug fix)[3393150] bignum leaks in Tcl_Get*() routines (porter)
+
+2011-08-18 (bug fix)[3393714] [string toupper] overflow (nijtmans)
+
+2011-08-30 (bug fix)[3398794] panic in interp limit setting (gavlian,fellows)
+
+2011-09-08 (bug fix)[3401704] revised expr parser to permit function names
+like "nano()" instead of parsing as "nan o()" with missing op (duquette,porter)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2011-09-10 (bug fix)[3400658] wrong num args msg with TclOO (rsooltan,fellows)
+
+2011-09-13 (bug fix)[3390638] solaris studio cc workaround (kechel,porter)
+
+2011-09-13 (bug fix)[3405652] DTrace workaround (michelson,porter)
+
+2011-09-16 (bug fix)[3391977] -headers overrides -type (ziegenhagen,fellows)
+=> http 2.8.3
+
+2011-09-16 (TIP 388) New \Uhhhhhhhh syntax (nijtmans)
+
+2011-10-06 (enhancement) bytecode compile [dict with] (fellows)
+
+2011-10-11 (bug fix)[2935503] [file stat] returns bad mode (nadkarni,nijtmans)
+
+2011-10-20 (bug fix)[3418547] cmd lits and custom resolvers (soberning,fellows)
+
+2011-10-31 (bug fix)[3414754] EIAS violation in fs paths (porter)
+
+2011-11-22 (bug fix)[3354324] Win: [file mtime] sets wrong time (nijtmans)
+
+2011-11-30 (bug fix)[967195] Simply args passed to child processes (nijtmans)
+=> tcltest 2.3.4
+
+2011-12-07 (bug fix)[3444754] fix [string tolower \u01C5] (nijtmans)
+
+2011-12-11 (update)[3457031] Update [[:print:]] to Unicode 6.0 (nijtmans)
+
+2011-12-24 (bug fix)[3464428] fix [string is graph \u0120] (nijtmans)
+
+2012-01-08 (bug fix)[3470928] zoneinfo trouble with Windhoek data file (kenny)
+
+2012-01-13 (bug fix)[3472316] fix retrieval of socket error (fellows)
+
+2012-01-21 (bug fix)[3475667] [regexp] buffer read overflow (sebres)
+
+2012-01-22 (bug fix)[3475264] [dict exists] return 0, not error (fellows)
+
+2012-01-25 (bug fix)[3474460] [oo::copy] var resolution list (fellows)
+
+2012-01-26 (bug fix)[3475569,3479689] mem corrupt in fs path (sebres,porter)
+
+2012-01-30 (enhancement) improve bytecode compile of [catch] (fellows)
+
+2012-02-02 (bug fix)[2974459,2879351,1951574,1852572,1661378,1613456] Fix
+problems where [file *able] would return false results on Win/Samba (porter)
+
+2012-02-06 (bug fix)[3484621] bump bytecode epoch on exec traces (kuhn,sofer)
+
+2012-02-15 (bug fix)[3487626] crash compiling [dict for] (fellows)
+
+2012-02-15 (enhancement) bytecode compile [lrange],[lreplace] (fellows)
+
+2012-02-17 (bug fix)[2233954] compile problem on AIX & Android (nijtmans)
+
+2012-02-29 (bug fix)[3466099] BOM in Unicode (nijtmans)
+
+2012-03-07 (bug fix)[3498327] RFC 3986 compliance (kupries)
+
+2012-03-26 (TIP 380) New builtin class [oo::Slot] (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2012-03-27 (TIP 397) <cloned> method to extend [oo::copy] (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2012-03-27 (TIP 395) New subcommand [string is entier] (fellows)
+
+2012-04-02 (TIP 396) New command [yieldto] (fellows)
+
+2012-04-04 (bug fix)[3514761] crash combining objects and ensembles (fellows)
+
+2012-04-09 (bug fix)[2712377] [info vars] and oo variables (fellows)
+
+2012-04-09 (bug fix)[3396896] no dups in oo var lists (fellows)
+
+2012-04-11 (bug fix)[3448512] [clock scan 1958-01-01] fail on Win (nijtmans)
+
+2012-04-15 (bug fix)[3517696] fix flush of zlib chan xform (fellows)
+
+2012-04-18 tzdata updated to Olson's tzdata2012c (kenny)
+
+2012-04-28 (TIP 398) exit non-blocking chan without flush (ferrieux)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2012-05-02 (enhancement) Better use of Intel cpuid instruction (nijtmans)
+
+2012-05-03 (bug fix)[3428753] Unbreak synchronous [socket -async] (porter)
+
+2012-05-10 (bug fix)[2812981] force consistent config of Tcl+pkgs (ferrieux)
+
+2012-05-10 (bug fix)[473946] correct send of special characters (nijtmans)
+
+2012-05-17 (bug fix)[3445787] fix [file] ensemble in Safe Base (fellows)
+
+2012-05-17 (bug fix)[2964715] fix [glob] in Safe Base (fellows)
+
+2012-05-17 (bug fix)[3106532] proper [switch -indexvar] values (fellows)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2012-05-21 (TIP 106) New -binary option to [dde execute|poke] (oehlmann)
+=> dde 1.4.0
+
+2012-05-23 (bug fix)[3525907] [zlib push decompress] & [chan event]
+(fellows,ferrieux,kupries)
+
+2012-05-28 (bug fix)[3529949] Protect ~ paths in Safe Base (fellows)
+
+2012-06-21 (bug fix)[3362446] [registry keys] failure (nijtmans)
+=> registry 1.3.0
+
+2012-06-25 (bug fix)[3537605] [encoding dirs a b] error message (fellows)
+
+2012-06-25 (bug fix)[3024359] crash when multi-thread concurrent [file system]
+and Tcl_FSMountsChanged(). (porter)
+
+2012-06-29 (bug fix)[3536888] fix locale guessing (oehlmann,nijtmans)
+
+2012-07-05 (bug fix)[1189293] make "<<" redirect binary safe (porter)
+
+2012-07-08 (bug fix)[3531209] accept IPv6 URLs (max)
+=> http 2.8.4
+
+2012-07-24 (bug fix) stop mem corruption in stacked channel events (max,porter)
+
+2012-07-25 (bug fix)[3546275] [auto_execok] search match [exec] (danckaert)
+
+2012-07-27 (update)[3464401] Support Unicode 6.2 (nijtmans)
+
+2012-08-20 (bug fix)[3559678] [file normalize] EIAS failure (phao,dgp)
+
+2012-08-25 (bug fix)[3561330] Ukranian translation of "March" (teterin)
+
+2012-09-07 (TIP 404) New msgcat commands [mcflset], [mcflmset] (oehlmann)
+=> msgcat 1.5.0
+
+Many revisions to better support a Cygwin environment (nijtmans)
+
+Dropped support for OS X versions less than 10.4 (Tiger) (fellows)
+
+--- Released 8.6b3, September 18, 2012 --- See ChangeLog for details ---
+
+2012-09-20 (enhancement) full Unicode support (nijtmans)
+=> dde 1.4.0
+
+2012-09-20 (enhancement) update bundled zlib to 1.2.7 (nijtmans)
+
+2012-10-03 (bug fix) exit panic on stacked std channel (griffin,porter)
+
+2012-10-14 (bug fix) [tcl::Bgerror] crash on non-dict options (nijtmans)
+
+2012-10-16 (TIP 400) New [zlib] options to set compression dict (fellows)
+
+2012-10-16 (TIP 405) New commands [lmap] and [dict map] (fellows)
+
+2012-10-24 (enhancement) [dict unset] now bytecompiled (fellows)
+
+2012-11-05 (TIP 413) Revisions to default [string trim*] trimset (nijtmans)
+ *** POTENTIAL INCOMPATIBILITY ***
+
+2012-11-05 (enhancement) Now bytecompiled: [array exists], [array set],
+[array unset], [dict create], [dict exists], [dict merge], [format],
+[info commands], [info coroutine], [info level], [info object],
+[namespace current], [namespace code], [namespace qualifiers], [namespace tail],
+[namespace which], [regsub], [self], [string first], [string last],
+[string map], [string range], [tailcall], [yield]. (fellows)
+
+2012-11-06 (bug fix)[3581754] avoid multiple callback on keep-alive (fellows)
+=> http 2.8.5
+
+2012-11-07 tzdata updated to Olson's tzdata2012i (kenny)
+
+2012-11-13 (bug fix)[3567063] thread fp settings from master (mistachkin)
+
+2012-11-14 (bug fix)[2933003] tempfile creation in $TMPDIR (fellows)
+
+2012-11-15 (TIP 416) New [load] options -global and -lazy (nijtmans)
+
+2012-11-20 (bug fix)[3033307] base64 trail whitespace (kovalenko,goth)
+
+2012-12-03 (bug fix) [configure] query broke init from argv (porter)
+=> tcltest 2.3.5
+
+2012-12-13 (bug fix)[3595576] crash: [catch {} -> noSuchNs::var] (sofer,porter)
+
+2012-12-13 (bug fix) crash: [zlib gunzip $data -header noSuchNs::var] (porter)
+
+--- Released 8.6.0, December 20, 2012 --- See ChangeLog for details ---
+
+2012-12-22 (bug fix)[3598150] DString to Tcl_Obj memleak (afredd)
+
+2012-12-27 (bug fix)[3598580] Tcl_ListObjReplace() refcount fix (nijtmans)
+
+2013-01-04 (bug fix) memleak in [format] compiler (fellows)
+
+2013-01-08 (bug fix)[3092089,3587096] [file normalize] on junction points
+
+2013-01-09 (bug fix)[3599395] status line processing (nijtmans)
+2013-01-23 (bug fix)[2911139] repair async connection management (fellows)
+=> http 2.8.6
+
+2013-01-26 (bug fix)[3601804] Darwin segfault platformCPUID (nijtmans)
+
+2013-01-28 (enhancement) improve ensemble bytecode (fellows)
+
+2013-01-30 (enhancement) selected script code improvements (fradin)
+=> tcltest 2.3.6
+
+2013-01-30 (bug fix)[3599098] update to handle glibc banner changes (kupries)
+=> platform 1.0.11
+
+2013-01-31 (bug fix)[3598282] make install DESTDIR support (cassoff)
+
+2013-02-05 (bug fix)[3603434] [file normalize a:/] flaw in VFS (porter,griffin)
+
+2013-02-09 (bug fix)[3603695] $obj varname resolution rules (venable,fellows)
+
+2013-02-11 (bug fix)[3603553] zlib flushing errors (vampiera,fellows)
+
+2013-02-14 (bug fix)[3604576] msgcat use of Windows registry (oehlmann,nijtmans)
+=> msgcat 1.5.1
+
+2013-02-19 (bug fix)[2438181] report errors in trace handlers (yorick)
+
+2013-02-21 (bug fix)[3605447] unbreak [namespace export -clear] (porter)
+
+2013-02-23 (bug fix)[3599194] fallback IPv6 routines (afredd,max)
+
+2013-02-27 (bug fix)[3606139] stop crash in [regexp] (lane)
+
+2013-03-03 (bug fix)[3606258] major serial port update (english)
+
+2013-03-06 (bug fix)[3606683] [regexp (((((a)*)*)*)*)* {}] hangs
+(grathwohl,lane,porter)
+
+2013-03-12 (enhancement) better build support for Debian arch (shadura)
+
+2013-03-19 (bug fix)[2893771] [file stat] on locked files (thoyts,nijtmans)
+
+2013-03-21 (bug fix)[2102614] [auto_mkindex] ensemble support (griffin)
+
+2013-03-27 Tcl_Zlib*() routines tolerate NULL interps (porter
+
+2013-04-04 (bug fix) Support URLs with query but no path (max)
+=> http 2.8.7
+
+2013-04-08 (bug fix)[3610026] regexp crash on color overflow (linnakangas)
+
+2013-04-29 (enhancement) [array set] compile improvement (fellows)
+
+2013-04-30 (enhancement) broaden glibc version detection (kupries)
+=> platform 1.0.12
+
+2013-05-06 (platform support) Cygwin64 (nijtmans)
+
+2013-05-15 (enhancement) Improved [list {*}...] compile (fellows)
+
+2013-05-16 (platform support) mingw-4.0 (nijtmans)
+
+2013-05-19 (platform support) FreeBSD updates (cerutti)
+
+2013-05-20 (bug fix)[3613567] access error temp file creation (keene)
+
+2013-05-20 (bug fix)[3613569] temp file open fail can crash [load] (keene)
+
+2013-05-22 (bug fix)[3613609] [lsort -nocase] failed on non-ASCII (fellows)
+
+2013-05-28 (bug fix)[3036566] Use language packs (Vista+) locale (oehlmann)
+=> msgcat 1.5.2
+
+2013-05-29 (bug fix)[3614102] [apply {{} {list [if 1]}}] stack woes (porter)
+
+2013-06-03 Restored lost performance appending to long strings (elby,porter)
+
+2013-06-05 (bug fix)[2835313] [while 1 {foo [continue]}] crash (fellows)
+
+2013-06-17 (bug fix)[a876646] [:cntrl:] includes \x00 to \x1f (nijtmans)
+
+2013-06-27 (bug fix)[983509] missing encodings for config values (nijtmans)
+
+2013-06-27 (bug fix)[34538b] apply DST in 2099 (lang)
+
+2013-07-02 (bug fix)[32afa6] corrected dirent64 check (griffin)
+
+2013-07-06 tzdata updated to Olson's tzdata2013d (kenny)
+
+2013-07-10 (bug fix)[86fb5e] [info frame] in compiled ensembles (porter)
+
+2013-07-18 (bug fix)[1c17fb] revisd syntax errorinfo that shows error (porter)
+
+2013-07-26 (bug fix)[6585b2] regexp {(\w).*?\1} abb (lane)
+
+2013-07-29 [string is space \u202f] => 1 (nijtmans)
+
+2013-08-01 [a0bc85] Limited support for fork with threads (for Rivet) (nijtmans)
+
+2013-08-01 (bug fix)[1905562] RE recursion limit increased to support
+reported usage of large expressions (porter)
+
+2013-08-02 (bug fix)[9d6162] superclass slot empty crash (vdgoot,fellows)2013-08-02 (bug fix)[9d6162] superclass slot empty crash (vdgoot,fellows)
+
+2013-08-03 (enhancement)[3611643] [auto_mkindex] support TclOO (fellows)
+
+2013-08-14 (bug fix)[a16752] Missing command delete callbacks (porter)
+
+2013-08-15 (bug fix)[3610404] reresolve traced forwards (porter)
+
+2013-08-15 Errors from execution traces become errors of the command (porter)
+
+2013-08-23 (bug fix)[8ff0cb9] Tcl_NR*Eval*() schedule only, as doc'd (porter)
+
+2013-08-29 (bug fix)[2486550] enable [interp invokehidden {} yield] (porter)
+
+2013-09-01 (bug fix)[b98fa55] [binary decode] fail on whitespace (reche,fellows)
+
+2013-09-07 (bug fix)[86ceb4] have tm path favor first provider (neumann,porter)
+
+2013-09-09 (bug fix)[3609693] copied object member variable confusion (fellows)
+=> TclOO 1.0.1
+
+2013-09-17 (bug fix)[2152292] [binary encode uuencode] corrected (fellows)
+
+2013-09-19 (bug fix)[3487626] segfaults in [dict] compilers (porter)
+
+2013-09-19 (bug fix)[31661d2] mem leak in [lreplace] (ade,porter)
+
+Many optmizations, improvements, and tightened stack management in bytecode.
+
+--- Released 8.6.1, Septemer 20, 2013 --- http://core.tcl.tk/tcl/ for details
diff --git a/compat/README b/compat/README
index 38b9b05..9af4285 100644
--- a/compat/README
+++ b/compat/README
@@ -4,5 +4,3 @@ systems. Typically, files from this directory are used to compile
Tcl when a system doesn't contain the corresponding files or when
they are known to be incorrect. When the whole world becomes POSIX-
compliant this directory should be unnecessary.
-
-RCS: @(#) $Id: README,v 1.2 1998/09/14 18:39:44 stanton Exp $
diff --git a/compat/dirent.h b/compat/dirent.h
index 1368018..fa6222a 100644
--- a/compat/dirent.h
+++ b/compat/dirent.h
@@ -9,8 +9,6 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: dirent.h,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
#ifndef _DIRENT
diff --git a/compat/dirent2.h b/compat/dirent2.h
index 7c2406c..5be08ba 100644
--- a/compat/dirent2.h
+++ b/compat/dirent2.h
@@ -9,17 +9,11 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: dirent2.h,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
#ifndef _DIRENT
#define _DIRENT
-#ifndef _TCL
-#include <tcl.h>
-#endif
-
/*
* Dirent structure, which holds information about a single
* directory entry.
@@ -52,8 +46,8 @@ typedef struct _dirdesc {
* Procedures defined for reading directories:
*/
-extern void closedir _ANSI_ARGS_((DIR *dirp));
-extern DIR * opendir _ANSI_ARGS_((char *name));
-extern struct dirent * readdir _ANSI_ARGS_((DIR *dirp));
+extern void closedir (DIR *dirp);
+extern DIR * opendir (char *name);
+extern struct dirent * readdir (DIR *dirp);
#endif /* _DIRENT */
diff --git a/compat/dlfcn.h b/compat/dlfcn.h
index 1dee078..fb27ea0 100644
--- a/compat/dlfcn.h
+++ b/compat/dlfcn.h
@@ -1,4 +1,4 @@
-/*
+/*
* dlfcn.h --
*
* This file provides a replacement for the header file "dlfcn.h"
@@ -16,12 +16,9 @@
* this software, provided that the author is not construed to be liable
* for any results of using the software, alterations are clearly marked
* as such, and this notice is not modified.
- *
- * RCS: @(#) $Id: dlfcn.h,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
/*
- * @(#)dlfcn.h 1.4 revision of 95/04/25 09:36:52
* This is an unpublished work copyright (c) 1992 HELIOS Software GmbH
* 30159 Hannover, Germany
*/
@@ -29,10 +26,6 @@
#ifndef __dlfcn_h__
#define __dlfcn_h__
-#ifndef _TCL
-#include <tcl.h>
-#endif
-
#ifdef __cplusplus
extern "C" {
#endif
@@ -49,14 +42,14 @@ extern "C" {
* that contains functions to be called to initialize and terminate.
*/
struct dl_info {
- void (*init) _ANSI_ARGS_((void));
- void (*fini) _ANSI_ARGS_((void));
+ void (*init) (void);
+ void (*fini) (void);
};
-VOID *dlopen _ANSI_ARGS_((const char *path, int mode));
-VOID *dlsym _ANSI_ARGS_((void *handle, const char *symbol));
-char *dlerror _ANSI_ARGS_((void));
-int dlclose _ANSI_ARGS_((void *handle));
+void *dlopen (const char *path, int mode);
+void *dlsym (void *handle, const char *symbol);
+char *dlerror (void);
+int dlclose (void *handle);
#ifdef __cplusplus
}
diff --git a/compat/fake-rfc2553.c b/compat/fake-rfc2553.c
new file mode 100644
index 0000000..3b91041
--- /dev/null
+++ b/compat/fake-rfc2553.c
@@ -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 */
diff --git a/compat/fake-rfc2553.h b/compat/fake-rfc2553.h
new file mode 100644
index 0000000..cc26f55
--- /dev/null
+++ b/compat/fake-rfc2553.h
@@ -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 */
diff --git a/compat/fixstrtod.c b/compat/fixstrtod.c
index 165b7d1..91f309e 100644
--- a/compat/fixstrtod.c
+++ b/compat/fixstrtod.c
@@ -9,8 +9,6 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: fixstrtod.c,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
#include <stdio.h>
@@ -22,12 +20,12 @@
* somes systems (e.g. SunOS 4.1.4) stdlib.h doesn't declare strtod.
*/
-extern double strtod();
+extern double strtod(char *, char **);
double
-fixstrtod(string, endPtr)
- char *string;
- char **endPtr;
+fixstrtod(
+ char *string,
+ char **endPtr)
{
double d;
d = strtod(string, endPtr);
diff --git a/compat/float.h b/compat/float.h
index 049f4a8..411edbf 100644
--- a/compat/float.h
+++ b/compat/float.h
@@ -11,6 +11,4 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: float.h,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
diff --git a/compat/gettod.c b/compat/gettod.c
index 9fc0ca5..28e1432 100644
--- a/compat/gettod.c
+++ b/compat/gettod.c
@@ -8,22 +8,20 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: gettod.c,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
-#include "tcl.h"
#include "tclPort.h"
#include <sys/timeb.h>
#undef timezone
int
-gettimeofday(tp, tz)
-struct timeval *tp;
-struct timezone *tz;
+gettimeofday(
+ struct timeval *tp,
+ struct timezone *tz)
{
struct timeb t;
+
ftime(&t);
tp->tv_sec = t.time;
tp->tv_usec = t. millitm * 1000;
diff --git a/compat/limits.h b/compat/limits.h
index 96b0b50..2cb082b 100644
--- a/compat/limits.h
+++ b/compat/limits.h
@@ -12,8 +12,6 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: limits.h,v 1.2 1998/09/14 18:39:44 stanton Exp $
*/
#define LONG_MIN 0x80000000
diff --git a/compat/memcmp.c b/compat/memcmp.c
index 09a5724..c4e25a8 100644
--- a/compat/memcmp.c
+++ b/compat/memcmp.c
@@ -1,26 +1,21 @@
-/*
+/*
* memcmp.c --
*
* Source code for the "memcmp" library routine.
*
* Copyright (c) 1998 Sun Microsystems, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * SCCS: @(#) memcmp.c 1.2 98/01/19 10:48:58
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
-#include "tcl.h"
#include "tclPort.h"
/*
- * Here is the prototype just in case it is not included
- * in tclPort.h.
+ * Here is the prototype just in case it is not included in tclPort.h.
*/
-int memcmp _ANSI_ARGS_((CONST VOID *s1,
- CONST VOID *s2, size_t n));
+int memcmp(const void *s1, const void *s2, size_t n);
/*
*----------------------------------------------------------------------
@@ -30,11 +25,10 @@ int memcmp _ANSI_ARGS_((CONST VOID *s1,
* Compares two bytes sequences.
*
* Results:
- * compares its arguments, looking at the first n
- * bytes (each interpreted as an unsigned char), and returns
- * an integer less than, equal to, or greater than 0, accord-
- * ing as s1 is less than, equal to, or
- * greater than s2 when taken to be unsigned 8 bit numbers.
+ * Compares its arguments, looking at the first n bytes (each interpreted
+ * as an unsigned char), and returns an integer less than, equal to, or
+ * greater than 0, according as s1 is less than, equal to, or greater
+ * than s2 when taken to be unsigned 8 bit numbers.
*
* Side effects:
* None.
@@ -43,19 +37,28 @@ int memcmp _ANSI_ARGS_((CONST VOID *s1,
*/
int
-memcmp(s1, s2, n)
- CONST VOID *s1; /* First string. */
- CONST VOID *s2; /* Second string. */
- size_t n; /* Length to compare. */
+memcmp(
+ const void *s1, /* First string. */
+ const void *s2, /* Second string. */
+ size_t n) /* Length to compare. */
{
- unsigned char u1, u2;
+ 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;
- for ( ; n-- ; s1++, s2++) {
- u1 = * (unsigned char *) s1;
- u2 = * (unsigned char *) s2;
- if ( u1 != u2) {
+ if (u1 != u2) {
return (u1-u2);
}
}
return 0;
}
+
+/*
+ * Local Variables:
+ * mode: c
+ * c-basic-offset: 4
+ * fill-column: 78
+ * End:
+ */
diff --git a/compat/mkstemp.c b/compat/mkstemp.c
new file mode 100644
index 0000000..eaa0b66
--- /dev/null
+++ b/compat/mkstemp.c
@@ -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;
+}
diff --git a/compat/opendir.c b/compat/opendir.c
index 8eec7db..a18f96b 100644
--- a/compat/opendir.c
+++ b/compat/opendir.c
@@ -1,43 +1,42 @@
/*
* opendir.c --
*
- * This file provides dirent-style directory-reading procedures
- * for V7 Unix systems that don't have such procedures. The
- * origin of this code is unclear, but it seems to have come
- * originally from Larry Wall.
- *
- *
- * RCS: @(#) $Id: opendir.c,v 1.2 1998/09/14 18:39:44 stanton Exp $
+ * This file provides dirent-style directory-reading procedures for V7
+ * Unix systems that don't have such procedures. The origin of this code
+ * is unclear, but it seems to have come originally from Larry Wall.
*/
#include "tclInt.h"
-#include "tclPort.h"
#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.
*/
+
DIR *
-opendir(name)
-char *name;
+opendir(
+ char *name)
{
- register DIR *dirp;
- register int fd;
- char *myname;
+ register DIR *dirp;
+ register int fd;
+ char *myname;
- myname = ((*name == '\0') ? "." : name);
- if ((fd = open(myname, 0, 0)) == -1)
- return NULL;
- if ((dirp = (DIR *)ckalloc(sizeof(DIR))) == NULL) {
- close (fd);
- return NULL;
- }
- dirp->dd_fd = fd;
- dirp->dd_loc = 0;
- return dirp;
+ myname = ((*name == '\0') ? "." : name);
+ if ((fd = open(myname, 0, 0)) == -1) {
+ return NULL;
+ }
+ dirp = (DIR *) ckalloc(sizeof(DIR));
+ if (dirp == NULL) {
+ /* unreachable? */
+ close(fd);
+ return NULL;
+ }
+ dirp->dd_fd = fd;
+ dirp->dd_loc = 0;
+ return dirp;
}
/*
@@ -46,63 +45,66 @@ char *name;
#ifndef pyr
#define ODIRSIZ 14
-struct olddirect {
- ino_t od_ino;
- char od_name[ODIRSIZ];
+struct olddirect {
+ ino_t od_ino;
+ char od_name[ODIRSIZ];
};
#else /* a Pyramid in the ATT universe */
#define ODIRSIZ 248
-struct olddirect {
- long od_ino;
- short od_fill1, od_fill2;
- char od_name[ODIRSIZ];
+struct olddirect {
+ long od_ino;
+ short od_fill1, od_fill2;
+ char od_name[ODIRSIZ];
};
#endif
/*
* get next entry in a directory.
*/
+
struct dirent *
-readdir(dirp)
-register DIR *dirp;
+readdir(
+ register DIR *dirp)
{
- register struct olddirect *dp;
- static struct dirent dir;
+ register struct olddirect *dp;
+ static struct dirent dir;
- for (;;) {
- if (dirp->dd_loc == 0) {
- dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf,
- DIRBLKSIZ);
- if (dirp->dd_size <= 0)
- return NULL;
- }
- if (dirp->dd_loc >= dirp->dd_size) {
- dirp->dd_loc = 0;
- continue;
- }
- dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc);
- dirp->dd_loc += sizeof(struct olddirect);
- if (dp->od_ino == 0)
- continue;
- dir.d_ino = dp->od_ino;
- strncpy(dir.d_name, dp->od_name, ODIRSIZ);
- dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */
- dir.d_namlen = strlen(dir.d_name);
- dir.d_reclen = DIRSIZ(&dir);
- return (&dir);
+ for (;;) {
+ if (dirp->dd_loc == 0) {
+ dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf, DIRBLKSIZ);
+ if (dirp->dd_size <= 0) {
+ return NULL;
+ }
+ }
+ if (dirp->dd_loc >= dirp->dd_size) {
+ dirp->dd_loc = 0;
+ continue;
}
+ dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc);
+ dirp->dd_loc += sizeof(struct olddirect);
+ if (dp->od_ino == 0) {
+ continue;
+ }
+ dir.d_ino = dp->od_ino;
+ strncpy(dir.d_name, dp->od_name, ODIRSIZ);
+ dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */
+ dir.d_namlen = strlen(dir.d_name);
+ dir.d_reclen = DIRSIZ(&dir);
+ return &dir;
+ }
}
/*
* close a directory.
*/
+
void
-closedir(dirp)
-register DIR *dirp;
+closedir(
+ register DIR *dirp)
{
- close(dirp->dd_fd);
- dirp->dd_fd = -1;
- dirp->dd_loc = 0;
- ckfree((char *) dirp);
+ close(dirp->dd_fd);
+ dirp->dd_fd = -1;
+ dirp->dd_loc = 0;
+ ckfree((char *) dirp);
}
diff --git a/compat/stdlib.h b/compat/stdlib.h
index 6edeeae..0ad4c1d 100644
--- a/compat/stdlib.h
+++ b/compat/stdlib.h
@@ -1,45 +1,36 @@
/*
* stdlib.h --
*
- * Declares facilities exported by the "stdlib" portion of
- * the C library. This file isn't complete in the ANSI-C
- * sense; it only declares things that are needed by Tcl.
- * This file is needed even on many systems with their own
- * stdlib.h (e.g. SunOS) because not all stdlib.h files
- * declare all the procedures needed here (such as strtod).
+ * Declares facilities exported by the "stdlib" portion of the C library.
+ * This file isn't complete in the ANSI-C sense; it only declares things
+ * that are needed by Tcl. This file is needed even on many systems with
+ * their own stdlib.h (e.g. SunOS) because not all stdlib.h files declare
+ * all the procedures needed here (such as strtod).
*
* Copyright (c) 1991 The Regents of the University of California.
* Copyright (c) 1994-1998 Sun Microsystems, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: stdlib.h,v 1.3 1999/04/16 00:46:30 stanton Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#ifndef _STDLIB
#define _STDLIB
-#include <tcl.h>
-
-extern void abort _ANSI_ARGS_((void));
-extern double atof _ANSI_ARGS_((CONST char *string));
-extern int atoi _ANSI_ARGS_((CONST char *string));
-extern long atol _ANSI_ARGS_((CONST char *string));
-extern char * calloc _ANSI_ARGS_((unsigned int numElements,
- unsigned int size));
-extern void exit _ANSI_ARGS_((int status));
-extern int free _ANSI_ARGS_((char *blockPtr));
-extern char * getenv _ANSI_ARGS_((CONST char *name));
-extern char * malloc _ANSI_ARGS_((unsigned int numBytes));
-extern void qsort _ANSI_ARGS_((VOID *base, int n, int size,
- int (*compar)(CONST VOID *element1, CONST VOID
- *element2)));
-extern char * realloc _ANSI_ARGS_((char *ptr, unsigned int numBytes));
-extern double strtod _ANSI_ARGS_((CONST char *string, char **endPtr));
-extern long strtol _ANSI_ARGS_((CONST char *string, char **endPtr,
- int base));
-extern unsigned long strtoul _ANSI_ARGS_((CONST char *string,
- char **endPtr, int base));
+extern void abort(void);
+extern double atof(const char *string);
+extern int atoi(const char *string);
+extern long atol(const char *string);
+extern char * calloc(unsigned int numElements, unsigned int size);
+extern void exit(int status);
+extern int free(char *blockPtr);
+extern char * getenv(const char *name);
+extern char * malloc(unsigned int numBytes);
+extern void qsort(void *base, int n, int size, int (*compar)(
+ const void *element1, const void *element2));
+extern char * realloc(char *ptr, unsigned int numBytes);
+extern double strtod(const char *string, char **endPtr);
+extern long strtol(const char *string, char **endPtr, int base);
+extern unsigned long strtoul(const char *string, char **endPtr, int base);
#endif /* _STDLIB */
diff --git a/compat/strftime.c b/compat/strftime.c
deleted file mode 100644
index 609c193..0000000
--- a/compat/strftime.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
- * strftime.c --
- *
- * This file contains a modified version of the BSD 4.4 strftime
- * function.
- *
- * This file is a modified version of the strftime.c file from the BSD 4.4
- * source. See the copyright notice below for details on redistribution
- * restrictions. The "license.terms" file does not apply to this file.
- *
- * Changes 2002 Copyright (c) 2002 ActiveState Corporation.
- *
- * RCS: @(#) $Id: strftime.c,v 1.10.2.2 2004/09/08 18:32:20 kennykb Exp $
- */
-
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University 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 REGENTS 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 REGENTS 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.
- */
-
-#if defined(LIBC_SCCS)
-static char *rcsid = "$Id: strftime.c,v 1.10.2.2 2004/09/08 18:32:20 kennykb Exp $";
-#endif /* LIBC_SCCS */
-
-#include <time.h>
-#include <string.h>
-#include <locale.h>
-#include "tclInt.h"
-#include "tclPort.h"
-
-#define TM_YEAR_BASE 1900
-#define IsLeapYear(x) ((x % 4 == 0) && (x % 100 != 0 || x % 400 == 0))
-
-typedef struct {
- const char *abday[7];
- const char *day[7];
- const char *abmon[12];
- const char *mon[12];
- const char *am_pm[2];
- const char *d_t_fmt;
- const char *d_fmt;
- const char *t_fmt;
- const char *t_fmt_ampm;
-} _TimeLocale;
-
-/*
- * This is the C locale default. On Windows, if we wanted to make this
- * localized, we would use GetLocaleInfo to get the correct values.
- * It may be acceptable to do localization of month/day names, as the
- * numerical values would be considered the locale-independent versions.
- */
-static const _TimeLocale _DefaultTimeLocale =
-{
- {
- "Sun","Mon","Tue","Wed","Thu","Fri","Sat",
- },
- {
- "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
- "Friday", "Saturday"
- },
- {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
- },
- {
- "January", "February", "March", "April", "May", "June", "July",
- "August", "September", "October", "November", "December"
- },
- {
- "AM", "PM"
- },
- "%a %b %d %H:%M:%S %Y",
- "%m/%d/%y",
- "%H:%M:%S",
- "%I:%M:%S %p"
-};
-
-static const _TimeLocale *_CurrentTimeLocale = &_DefaultTimeLocale;
-
-static int isGMT;
-static size_t gsize;
-static char *pt;
-static int _add _ANSI_ARGS_((const char* str));
-static int _conv _ANSI_ARGS_((int n, int digits, int pad));
-static int _secs _ANSI_ARGS_((const struct tm *t));
-static size_t _fmt _ANSI_ARGS_((const char *format,
- const struct tm *t));
-static int ISO8601Week _ANSI_ARGS_((CONST struct tm* t, int *year ));
-
-size_t
-TclpStrftime(s, maxsize, format, t, useGMT)
- char *s;
- size_t maxsize;
- const char *format;
- const struct tm *t;
- int useGMT;
-{
- if (format[0] == '%' && format[1] == 'Q') {
- /* Format as a stardate */
- sprintf(s, "Stardate %2d%03d.%01d",
- (((t->tm_year + TM_YEAR_BASE) + 377) - 2323),
- (((t->tm_yday + 1) * 1000) /
- (365 + IsLeapYear((t->tm_year + TM_YEAR_BASE)))),
- (((t->tm_hour * 60) + t->tm_min)/144));
- return(strlen(s));
- }
-
- isGMT = useGMT;
- /*
- * We may be able to skip this for useGMT, but it should be harmless.
- * -- hobbs
- */
- tzset();
-
- pt = s;
- if ((gsize = maxsize) < 1)
- return(0);
- if (_fmt(format, t)) {
- *pt = '\0';
- return(maxsize - gsize);
- }
- return(0);
-}
-
-#define SUN_WEEK(t) (((t)->tm_yday + 7 - \
- ((t)->tm_wday)) / 7)
-#define MON_WEEK(t) (((t)->tm_yday + 7 - \
- ((t)->tm_wday ? (t)->tm_wday - 1 : 6)) / 7)
-
-static size_t
-_fmt(format, t)
- const char *format;
- const struct tm *t;
-{
-#ifdef WIN32
-#define BUF_SIZ 256
- TCHAR buf[BUF_SIZ];
- SYSTEMTIME syst = {
- t->tm_year + 1900,
- t->tm_mon + 1,
- t->tm_wday,
- t->tm_mday,
- t->tm_hour,
- t->tm_min,
- t->tm_sec,
- 0,
- };
-#endif
- for (; *format; ++format) {
- if (*format == '%') {
- ++format;
- if (*format == 'E') {
- /* Alternate Era */
- ++format;
- } else if (*format == 'O') {
- /* Alternate numeric symbols */
- ++format;
- }
- switch(*format) {
- case '\0':
- --format;
- break;
- case 'A':
- if (t->tm_wday < 0 || t->tm_wday > 6)
- return(0);
- if (!_add(_CurrentTimeLocale->day[t->tm_wday]))
- return(0);
- continue;
- case 'a':
- if (t->tm_wday < 0 || t->tm_wday > 6)
- return(0);
- if (!_add(_CurrentTimeLocale->abday[t->tm_wday]))
- return(0);
- continue;
- case 'B':
- if (t->tm_mon < 0 || t->tm_mon > 11)
- return(0);
- if (!_add(_CurrentTimeLocale->mon[t->tm_mon]))
- return(0);
- continue;
- case 'b':
- case 'h':
- if (t->tm_mon < 0 || t->tm_mon > 11)
- return(0);
- if (!_add(_CurrentTimeLocale->abmon[t->tm_mon]))
- return(0);
- continue;
- case 'C':
- if (!_conv((t->tm_year + TM_YEAR_BASE) / 100,
- 2, '0'))
- return(0);
- continue;
- case 'D':
- if (!_fmt("%m/%d/%y", t))
- return(0);
- continue;
- case 'd':
- if (!_conv(t->tm_mday, 2, '0'))
- return(0);
- continue;
- case 'e':
- if (!_conv(t->tm_mday, 2, ' '))
- return(0);
- continue;
- case 'g':
- {
- int year;
- ISO8601Week( t, &year );
- if ( !_conv( year%100, 2, '0' ) ) {
- return( 0 );
- }
- continue;
- }
- case 'G':
- {
- int year;
- ISO8601Week( t, &year );
- if ( !_conv( year, 4, '0' ) ) {
- return( 0 );
- }
- continue;
- }
- case 'H':
- if (!_conv(t->tm_hour, 2, '0'))
- return(0);
- continue;
- case 'I':
- if (!_conv(t->tm_hour % 12 ?
- t->tm_hour % 12 : 12, 2, '0'))
- return(0);
- continue;
- case 'j':
- if (!_conv(t->tm_yday + 1, 3, '0'))
- return(0);
- continue;
- case 'k':
- if (!_conv(t->tm_hour, 2, ' '))
- return(0);
- continue;
- case 'l':
- if (!_conv(t->tm_hour % 12 ?
- t->tm_hour % 12: 12, 2, ' '))
- return(0);
- continue;
- case 'M':
- if (!_conv(t->tm_min, 2, '0'))
- return(0);
- continue;
- case 'm':
- if (!_conv(t->tm_mon + 1, 2, '0'))
- return(0);
- continue;
- case 'n':
- if (!_add("\n"))
- return(0);
- continue;
- case 'p':
- if (!_add(_CurrentTimeLocale->am_pm[t->tm_hour >= 12]))
- return(0);
- continue;
- case 'R':
- if (!_fmt("%H:%M", t))
- return(0);
- continue;
- case 'r':
- if (!_fmt(_CurrentTimeLocale->t_fmt_ampm, t))
- return(0);
- continue;
- case 'S':
- if (!_conv(t->tm_sec, 2, '0'))
- return(0);
- continue;
- case 's':
- if (!_secs(t))
- return(0);
- continue;
- case 'T':
- if (!_fmt("%H:%M:%S", t))
- return(0);
- continue;
- case 't':
- if (!_add("\t"))
- return(0);
- continue;
- case 'U':
- if (!_conv(SUN_WEEK(t), 2, '0'))
- return(0);
- continue;
- case 'u':
- if (!_conv(t->tm_wday ? t->tm_wday : 7, 1, '0'))
- return(0);
- continue;
- case 'V':
- {
- int week = ISO8601Week( t, NULL );
- if (!_conv(week, 2, '0'))
- return(0);
- continue;
- }
- case 'W':
- if (!_conv(MON_WEEK(t), 2, '0'))
- return(0);
- continue;
- case 'w':
- if (!_conv(t->tm_wday, 1, '0'))
- return(0);
- continue;
-#ifdef WIN32
- /*
- * To properly handle the localized time routines on Windows,
- * we must make use of the special localized calls.
- */
- case 'c':
- if (!GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE,
- &syst, NULL, buf, BUF_SIZ) || !_add(buf)
- || !_add(" ")) {
- return(0);
- }
- /*
- * %c is created with LONGDATE + " " + TIME on Windows,
- * so continue to %X case here.
- */
- case 'X':
- if (!GetTimeFormat(LOCALE_USER_DEFAULT, 0,
- &syst, NULL, buf, BUF_SIZ) || !_add(buf)) {
- return(0);
- }
- continue;
- case 'x':
- if (!GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE,
- &syst, NULL, buf, BUF_SIZ) || !_add(buf)) {
- return(0);
- }
- continue;
-#else
- case 'c':
- if (!_fmt(_CurrentTimeLocale->d_t_fmt, t))
- return(0);
- continue;
- case 'x':
- if (!_fmt(_CurrentTimeLocale->d_fmt, t))
- return(0);
- continue;
- case 'X':
- if (!_fmt(_CurrentTimeLocale->t_fmt, t))
- return(0);
- continue;
-#endif
- case 'y':
- if (!_conv((t->tm_year + TM_YEAR_BASE) % 100,
- 2, '0'))
- return(0);
- continue;
- case 'Y':
- if (!_conv((t->tm_year + TM_YEAR_BASE), 4, '0'))
- return(0);
- continue;
- case 'Z': {
- char *name = (isGMT ? "GMT" : TclpGetTZName(t->tm_isdst));
- if (name && !_add(name)) {
- return 0;
- }
- continue;
- }
- case '%':
- /*
- * X311J/88-090 (4.12.3.5): if conversion char is
- * undefined, behavior is undefined. Print out the
- * character itself as printf(3) does.
- */
- default:
- break;
- }
- }
- if (!gsize--)
- return(0);
- *pt++ = *format;
- }
- return(gsize);
-}
-
-static int
-_secs(t)
- const struct tm *t;
-{
- static char buf[15];
- register time_t s;
- register char *p;
- struct tm tmp;
-
- /* Make a copy, mktime(3) modifies the tm struct. */
- tmp = *t;
- s = mktime(&tmp);
- for (p = buf + sizeof(buf) - 2; s > 0 && p > buf; s /= 10)
- *p-- = (char)(s % 10 + '0');
- return(_add(++p));
-}
-
-static int
-_conv(n, digits, pad)
- int n, digits;
- int pad;
-{
- static char buf[10];
- register char *p;
-
- p = buf + sizeof( buf ) - 1;
- *p-- = '\0';
- if ( n == 0 ) {
- *p-- = '0'; --digits;
- } else {
- for (; n > 0 && p > buf; n /= 10, --digits)
- *p-- = (char)(n % 10 + '0');
- }
- while (p > buf && digits-- > 0)
- *p-- = (char) pad;
- return(_add(++p));
-}
-
-static int
-_add(str)
- const char *str;
-{
- for (;; ++pt, --gsize) {
- if (!gsize)
- return(0);
- if (!(*pt = *str++))
- return(1);
- }
-}
-
-static int
-ISO8601Week( t, year )
- CONST struct tm* t;
- int* year;
-{
- /* Find the day-of-year of the Thursday in
- * the week in question. */
-
- int ydayThursday;
- int week;
- if ( t->tm_wday == 0 ) {
- ydayThursday = t->tm_yday - 3;
- } else {
- ydayThursday = t->tm_yday - t->tm_wday + 4;
- }
-
- if ( ydayThursday < 0 ) {
-
- /* This is the last week of the previous year. */
- if ( IsLeapYear(( t->tm_year + TM_YEAR_BASE - 1 )) ) {
- ydayThursday += 366;
- } else {
- ydayThursday += 365;
- }
- week = ydayThursday / 7 + 1;
- if ( year != NULL ) {
- *year = t->tm_year + 1899;
- }
-
- } else if ( ( IsLeapYear(( t -> tm_year + TM_YEAR_BASE ))
- && ydayThursday >= 366 )
- || ( !IsLeapYear(( t -> tm_year
- + TM_YEAR_BASE ))
- && ydayThursday >= 365 ) ) {
-
- /* This is week 1 of the following year */
-
- week = 1;
- if ( year != NULL ) {
- *year = t->tm_year + 1901;
- }
-
- } else {
-
- week = ydayThursday / 7 + 1;
- if ( year != NULL ) {
- *year = t->tm_year + 1900;
- }
-
- }
-
- return week;
-
-}
diff --git a/compat/string.h b/compat/string.h
index 37e5140..42be10c 100644
--- a/compat/string.h
+++ b/compat/string.h
@@ -6,66 +6,52 @@
* Copyright (c) 1991-1993 The Regents of the University of California.
* Copyright (c) 1994-1996 Sun Microsystems, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: string.h,v 1.4 2000/07/18 18:16:17 ericm Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#ifndef _STRING
#define _STRING
-#include <tcl.h>
-
/*
- * The following #include is needed to define size_t. (This used to
- * include sys/stdtypes.h but that doesn't exist on older versions
- * of SunOS, e.g. 4.0.2, so I'm trying sys/types.h now.... hopefully
- * it exists everywhere)
+ * The following #include is needed to define size_t. (This used to include
+ * sys/stdtypes.h but that doesn't exist on older versions of SunOS, e.g.
+ * 4.0.2, so I'm trying sys/types.h now.... hopefully it exists everywhere)
*/
-#ifndef MAC_TCL
#include <sys/types.h>
-#endif
-extern char * memchr _ANSI_ARGS_((CONST VOID *s, int c, size_t n));
-extern int memcmp _ANSI_ARGS_((CONST VOID *s1, CONST VOID *s2,
- size_t n));
-extern char * memcpy _ANSI_ARGS_((VOID *t, CONST VOID *f, size_t n));
+#ifdef __APPLE__
+extern void * memchr(const void *s, int c, size_t n);
+#else
+extern char * memchr(const void *s, int c, size_t n);
+#endif
+extern int memcmp(const void *s1, const void *s2, size_t n);
+extern char * memcpy(void *t, const void *f, size_t n);
#ifdef NO_MEMMOVE
-#define memmove(d, s, n) bcopy ((s), (d), (n))
+#define memmove(d,s,n) (bcopy((s), (d), (n)))
#else
-extern char * memmove _ANSI_ARGS_((VOID *t, CONST VOID *f,
- size_t n));
+extern char * memmove(void *t, const void *f, size_t n);
#endif
-extern char * memset _ANSI_ARGS_((VOID *s, int c, size_t n));
+extern char * memset(void *s, int c, size_t n);
-extern int strcasecmp _ANSI_ARGS_((CONST char *s1,
- CONST char *s2));
-extern char * strcat _ANSI_ARGS_((char *dst, CONST char *src));
-extern char * strchr _ANSI_ARGS_((CONST char *string, int c));
-extern int strcmp _ANSI_ARGS_((CONST char *s1, CONST char *s2));
-extern char * strcpy _ANSI_ARGS_((char *dst, CONST char *src));
-extern size_t strcspn _ANSI_ARGS_((CONST char *string,
- CONST char *chars));
-extern char * strdup _ANSI_ARGS_((CONST char *string));
-extern char * strerror _ANSI_ARGS_((int error));
-extern size_t strlen _ANSI_ARGS_((CONST char *string));
-extern int strncasecmp _ANSI_ARGS_((CONST char *s1,
- CONST char *s2, size_t n));
-extern char * strncat _ANSI_ARGS_((char *dst, CONST char *src,
- size_t numChars));
-extern int strncmp _ANSI_ARGS_((CONST char *s1, CONST char *s2,
- size_t nChars));
-extern char * strncpy _ANSI_ARGS_((char *dst, CONST char *src,
- size_t numChars));
-extern char * strpbrk _ANSI_ARGS_((CONST char *string,
- CONST char *chars));
-extern char * strrchr _ANSI_ARGS_((CONST char *string, int c));
-extern size_t strspn _ANSI_ARGS_((CONST char *string,
- CONST char *chars));
-extern char * strstr _ANSI_ARGS_((CONST char *string,
- CONST char *substring));
-extern char * strtok _ANSI_ARGS_((char *s, CONST char *delim));
+extern int strcasecmp(const char *s1, const char *s2);
+extern char * strcat(char *dst, const char *src);
+extern char * strchr(const char *string, int c);
+extern int strcmp(const char *s1, const char *s2);
+extern char * strcpy(char *dst, const char *src);
+extern size_t strcspn(const char *string, const char *chars);
+extern char * strdup(const char *string);
+extern char * strerror(int error);
+extern size_t strlen(const char *string);
+extern int strncasecmp(const char *s1, const char *s2, size_t n);
+extern char * strncat(char *dst, const char *src, size_t numChars);
+extern int strncmp(const char *s1, const char *s2, size_t nChars);
+extern char * strncpy(char *dst, const char *src, size_t numChars);
+extern char * strpbrk(const char *string, const char *chars);
+extern char * strrchr(const char *string, int c);
+extern size_t strspn(const char *string, const char *chars);
+extern char * strstr(const char *string, const char *substring);
+extern char * strtok(char *s, const char *delim);
#endif /* _STRING */
diff --git a/compat/strncasecmp.c b/compat/strncasecmp.c
index ca2bf91..299715d 100644
--- a/compat/strncasecmp.c
+++ b/compat/strncasecmp.c
@@ -6,21 +6,19 @@
* Copyright (c) 1988-1993 The Regents of the University of California.
* Copyright (c) 1995-1996 Sun Microsystems, Inc.
*
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: strncasecmp.c,v 1.2 1998/09/14 18:39:45 stanton Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#include "tclPort.h"
/*
- * This array is designed for mapping upper and lower case letter
- * together for a case independent comparison. The mappings are
- * based upon ASCII character sequences.
+ * This array is designed for mapping upper and lower case letter together for
+ * a case independent comparison. The mappings are based upon ASCII character
+ * 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,
@@ -56,14 +54,11 @@ static unsigned char charmap[] = {
};
/*
- * Here are the prototypes just in case they are not included
- * in tclPort.h.
+ * Here are the prototypes just in case they are not included in tclPort.h.
*/
-int strncasecmp _ANSI_ARGS_((CONST char *s1,
- CONST char *s2, size_t n));
-int strcasecmp _ANSI_ARGS_((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);
/*
*----------------------------------------------------------------------
@@ -73,9 +68,8 @@ int strcasecmp _ANSI_ARGS_((CONST char *s1,
* Compares two strings, ignoring case differences.
*
* Results:
- * Compares two null-terminated strings s1 and s2, returning -1, 0,
- * or 1 if s1 is lexicographically less than, equal to, or greater
- * than s2.
+ * Compares two null-terminated strings s1 and s2, returning -1, 0, or 1
+ * if s1 is lexicographically less than, equal to, or greater than s2.
*
* Side effects:
* None.
@@ -84,9 +78,9 @@ int strcasecmp _ANSI_ARGS_((CONST char *s1,
*/
int
-strcasecmp(s1, s2)
- CONST char *s1; /* First string. */
- CONST char *s2; /* Second string. */
+strcasecmp(
+ const char *s1, /* First string. */
+ const char *s2) /* Second string. */
{
unsigned char u1, u2;
@@ -108,9 +102,9 @@ strcasecmp(s1, s2)
* Compares two strings, ignoring case differences.
*
* Results:
- * Compares up to length chars of s1 and s2, returning -1, 0, or 1
- * if s1 is lexicographically less than, equal to, or greater
- * than s2 over those characters.
+ * Compares up to length chars of s1 and s2, returning -1, 0, or 1 if s1
+ * is lexicographically less than, equal to, or greater than s2 over
+ * those characters.
*
* Side effects:
* None.
@@ -119,10 +113,10 @@ strcasecmp(s1, s2)
*/
int
-strncasecmp(s1, s2, length)
- CONST char *s1; /* First string. */
- CONST char *s2; /* Second string. */
- size_t length; /* Maximum number of characters to compare
+strncasecmp(
+ 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). */
{
diff --git a/compat/strstr.c b/compat/strstr.c
index c83c209..6698c9f 100644
--- a/compat/strstr.c
+++ b/compat/strstr.c
@@ -6,12 +6,15 @@
* Copyright (c) 1988-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.
- *
- * RCS: @(#) $Id: strstr.c,v 1.3 2002/01/26 01:10:08 dgp Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
+#include "tcl.h"
+#ifndef NULL
+#define NULL 0
+#endif
+
/*
*----------------------------------------------------------------------
*
@@ -20,12 +23,10 @@
* Locate the first instance of a substring in a string.
*
* Results:
- * If string contains substring, the return value is the
- * location of the first matching instance of substring
- * in string. If string doesn't contain substring, the
- * return value is 0. Matching is done on an exact
- * character-for-character basis with no wildcards or special
- * characters.
+ * If string contains substring, the return value is the location of the
+ * first matching instance of substring in string. If string doesn't
+ * contain substring, the return value is 0. Matching is done on an exact
+ * character-for-character basis with no wildcards or special characters.
*
* Side effects:
* None.
@@ -34,15 +35,16 @@
*/
char *
-strstr(string, substring)
- register char *string; /* String to search. */
- char *substring; /* Substring to try to find in string. */
+strstr(
+ register char *string, /* String to search. */
+ char *substring) /* Substring to try to find in string. */
{
register char *a, *b;
- /* First scan quickly through the two strings looking for a
- * single-character match. When it's found, then compare the
- * rest of the substring.
+ /*
+ * First scan quickly through the two strings looking for a
+ * single-character match. When it's found, then compare the rest of the
+ * substring.
*/
b = substring;
diff --git a/compat/strtod.c b/compat/strtod.c
index 063e175..cb9f76d 100644
--- a/compat/strtod.c
+++ b/compat/strtod.c
@@ -8,13 +8,9 @@
*
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: strtod.c,v 1.6 2002/02/25 14:26:12 dgp Exp $
*/
#include "tclInt.h"
-#include "tclPort.h"
-#include <ctype.h>
#ifndef TRUE
#define TRUE 1
@@ -24,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,
@@ -63,41 +59,41 @@ static double powersOf10[] = { /* Table giving binary powers of 10. Entry */
*/
double
-strtod(string, endPtr)
- 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 part of the mantissa, and X
- * is the exponent. Either of the signs
- * may be "+", "-", or omitted. Either I
- * or F may be omitted, or both. The decimal
- * point isn't necessary unless F is present.
- * The "E" may actually be an "e". E and X
- * may both be omitted (but not just one).
- */
- char **endPtr; /* If non-NULL, store terminating character's
+strtod(
+ 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
+ * part of the mantissa, and X is the
+ * exponent. Either of the signs may be "+",
+ * "-", or omitted. Either I or F may be
+ * omitted, or both. The decimal point isn't
+ * necessary unless F is present. The "E" may
+ * actually be an "e". E and X may both be
+ * omitted (but not just one). */
+ char **endPtr) /* If non-NULL, store terminating character's
* 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
- * part. Under normal circumstatnces, it is
+ * part. Under normal circumstatnces, it is
* the negative of the number of digits in F.
* However, if I is very long, the last digits
* of I get dropped (otherwise a long I with a
* large negative exponent could cause an
- * unnecessary overflow on I alone). In this
+ * unnecessary overflow on I alone). In this
* case, fracExp is incremented one for each
* dropped digit. */
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 string. */
+ const char *pExp; /* Temporarily holds location of exponent in
+ * string. */
/*
* Strip off leading blanks and check for a sign.
@@ -136,10 +132,10 @@ strtod(string, endPtr)
}
/*
- * Now suck up the digits in the mantissa. Use two integers to
- * collect 9 digits each (this is faster than using floating-point).
- * If the mantissa has more than 18 digits, ignore the extras, since
- * they can't affect the value anyway.
+ * Now suck up the digits in the mantissa. Use two integers to collect 9
+ * digits each (this is faster than using floating-point). If the mantissa
+ * has more than 18 digits, ignore the extras, since they can't affect the
+ * value anyway.
*/
pExp = p;
@@ -147,7 +143,7 @@ strtod(string, endPtr)
if (decPt < 0) {
decPt = mantSize;
} else {
- mantSize -= 1; /* One of the digits was the point. */
+ mantSize -= 1; /* One of the digits was the point. */
}
if (mantSize > 18) {
fracExp = decPt - 18;
@@ -161,9 +157,9 @@ strtod(string, endPtr)
goto done;
} else {
int frac1, frac2;
+
frac1 = 0;
- for ( ; mantSize > 9; mantSize -= 1)
- {
+ for ( ; mantSize > 9; mantSize -= 1) {
c = *p;
p += 1;
if (c == '.') {
@@ -173,8 +169,7 @@ strtod(string, endPtr)
frac1 = 10*frac1 + (c - '0');
}
frac2 = 0;
- for (; mantSize > 0; mantSize -= 1)
- {
+ for (; mantSize > 0; mantSize -= 1) {
c = *p;
p += 1;
if (c == '.') {
@@ -218,10 +213,9 @@ strtod(string, endPtr)
}
/*
- * Generate a floating-point number that represents the exponent.
- * Do this by processing the exponent one bit at a time to combine
- * many powers of 2 of 10. Then combine the exponent with the
- * fraction.
+ * Generate a floating-point number that represents the exponent. Do this
+ * 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) {
@@ -235,7 +229,7 @@ strtod(string, endPtr)
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;
}
@@ -246,7 +240,7 @@ strtod(string, endPtr)
fraction *= dblExp;
}
-done:
+ done:
if (endPtr != NULL) {
*endPtr = (char *) p;
}
diff --git a/compat/strtol.c b/compat/strtol.c
index 78b0d59..b111d97 100644
--- a/compat/strtol.c
+++ b/compat/strtol.c
@@ -6,16 +6,11 @@
* Copyright (c) 1988 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.
- *
- * RCS: @(#) $Id: strtol.c,v 1.4 2002/02/25 16:23:26 dgp Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
-#include <ctype.h>
#include "tclInt.h"
-#include "tclPort.h"
-
/*
*----------------------------------------------------------------------
@@ -25,11 +20,10 @@
* Convert an ASCII string into an integer.
*
* Results:
- * The return value is the integer equivalent of string. If endPtr
- * is non-NULL, then *endPtr is filled in with the character
- * after the last one that was part of the integer. If string
- * doesn't contain a valid integer value, then zero is returned
- * and *endPtr is set to string.
+ * The return value is the integer equivalent of string. If endPtr is
+ * non-NULL, then *endPtr is filled in with the character after the last
+ * one that was part of the integer. If string doesn't contain a valid
+ * integer value, then zero is returned and *endPtr is set to string.
*
* Side effects:
* None.
@@ -38,22 +32,20 @@
*/
long int
-strtol(string, endPtr, base)
- 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.
- */
- char **endPtr; /* Where to store address of terminating
+strtol(
+ 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. */
+ char **endPtr, /* Where to store address of terminating
* character, or NULL. */
- int base; /* Base for conversion. Must be less
- * than 37. If 0, then the base is chosen
- * from the leading characters of string:
- * "0x" means hex, "0" means octal, anything
- * else means decimal.
- */
+ int base) /* Base for conversion. Must be less than 37.
+ * If 0, then the base is chosen from the
+ * leading characters of string: "0x" means
+ * hex, "0" means octal, anything else means
+ * decimal. */
{
- register CONST char *p;
+ register const char *p;
long result;
/*
diff --git a/compat/strtoll.c b/compat/strtoll.c
deleted file mode 100644
index ca00fd0..0000000
--- a/compat/strtoll.c
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * strtoll.c --
- *
- * Source code for the "strtoll" library procedure.
- *
- * Copyright (c) 1988 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.
- *
- * RCS: @(#) $Id: strtoll.c,v 1.5 2002/02/24 02:53:25 dgp Exp $
- */
-
-#include "tcl.h"
-#include "tclPort.h"
-#include <ctype.h>
-
-#define TCL_WIDEINT_MAX (((Tcl_WideUInt)Tcl_LongAsWide(-1))>>1)
-
-
-/*
- *----------------------------------------------------------------------
- *
- * strtoll --
- *
- * Convert an ASCII string into an integer.
- *
- * Results:
- * The return value is the integer equivalent of string. If endPtr
- * is non-NULL, then *endPtr is filled in with the character
- * after the last one that was part of the integer. If string
- * doesn't contain a valid integer value, then zero is returned
- * and *endPtr is set to string.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
-#if TCL_WIDE_INT_IS_LONG
-long long
-#else
-Tcl_WideInt
-#endif
-strtoll(string, endPtr, base)
- 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.
- */
- char **endPtr; /* Where to store address of terminating
- * character, or NULL. */
- int base; /* Base for conversion. Must be less
- * than 37. If 0, then the base is chosen
- * from the leading characters of string:
- * "0x" means hex, "0" means octal, anything
- * else means decimal.
- */
-{
- register CONST char *p;
- Tcl_WideInt result = Tcl_LongAsWide(0);
- Tcl_WideUInt uwResult;
-
- /*
- * Skip any leading blanks.
- */
-
- p = string;
- while (isspace(UCHAR(*p))) {
- p += 1;
- }
-
- /*
- * Check for a sign.
- */
-
- errno = 0;
- if (*p == '-') {
- p += 1;
- uwResult = strtoull(p, endPtr, base);
- if (errno != ERANGE) {
- if (uwResult > TCL_WIDEINT_MAX+1) {
- errno = ERANGE;
- return Tcl_LongAsWide(-1);
- } else if (uwResult > TCL_WIDEINT_MAX) {
- return ~((Tcl_WideInt)TCL_WIDEINT_MAX);
- } else {
- result = -((Tcl_WideInt) uwResult);
- }
- }
- } else {
- if (*p == '+') {
- p += 1;
- }
- uwResult = strtoull(p, endPtr, base);
- if (errno != ERANGE) {
- if (uwResult > TCL_WIDEINT_MAX) {
- errno = ERANGE;
- return Tcl_LongAsWide(-1);
- } else {
- result = uwResult;
- }
- }
- }
- if ((result == 0) && (endPtr != 0) && (*endPtr == p)) {
- *endPtr = (char *) string;
- }
- return result;
-}
diff --git a/compat/strtoul.c b/compat/strtoul.c
index 912e252..d572c2b 100644
--- a/compat/strtoul.c
+++ b/compat/strtoul.c
@@ -6,22 +6,19 @@
* Copyright (c) 1988 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.
- *
- * RCS: @(#) $Id: strtoul.c,v 1.5 2002/02/25 10:36:32 dkf Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
#include "tclInt.h"
-#include "tclPort.h"
/*
- * The table below is used to convert from ASCII digits to a
- * numerical equivalent. It maps from '0' through 'z' to integers
- * (100 for non-digit characters).
+ * The table below is used to convert from ASCII digits to a numerical
+ * equivalent. It maps from '0' through 'z' to integers (100 for non-digit
+ * 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' */
@@ -40,11 +37,10 @@ static char cvtIn[] = {
* Convert an ASCII string into an integer.
*
* Results:
- * The return value is the integer equivalent of string. If endPtr
- * is non-NULL, then *endPtr is filled in with the character
- * after the last one that was part of the integer. If string
- * doesn't contain a valid integer value, then zero is returned
- * and *endPtr is set to string.
+ * The return value is the integer equivalent of string. If endPtr is
+ * non-NULL, then *endPtr is filled in with the character after the last
+ * one that was part of the integer. If string doesn't contain a valid
+ * integer value, then zero is returned and *endPtr is set to string.
*
* Side effects:
* None.
@@ -53,22 +49,20 @@ static char cvtIn[] = {
*/
unsigned long int
-strtoul(string, endPtr, base)
- 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.
- */
- char **endPtr; /* Where to store address of terminating
+strtoul(
+ 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. */
+ char **endPtr, /* Where to store address of terminating
* character, or NULL. */
- int base; /* Base for conversion. Must be less
- * than 37. If 0, then the base is chosen
- * from the leading characters of string:
- * "0x" means hex, "0" means octal, anything
- * else means decimal.
- */
+ int base) /* Base for conversion. Must be less than 37.
+ * If 0, then the base is chosen from the
+ * leading characters of string: "0x" means
+ * 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;
@@ -93,31 +87,29 @@ strtoul(string, endPtr, base)
}
/*
- * If no base was provided, pick one from the leading characters
- * of the string.
+ * If no base was provided, pick one from the leading characters of the
+ * string.
*/
- if (base == 0)
- {
+ if (base == 0) {
if (*p == '0') {
p += 1;
if ((*p == 'x') || (*p == 'X')) {
p += 1;
base = 16;
} else {
-
/*
- * Must set anyDigits here, otherwise "0" produces a
- * "no digits" error.
+ * Must set anyDigits here, otherwise "0" produces a "no
+ * digits" error.
*/
anyDigits = 1;
base = 8;
}
+ } else {
+ base = 10;
}
- else base = 10;
} else if (base == 16) {
-
/*
* Skip a leading "0x" from hex numbers.
*/
@@ -128,12 +120,13 @@ strtoul(string, endPtr, base)
}
/*
- * Sorry this code is so messy, but speed seems important. Do
- * different things for base 8, 10, 16, and other.
+ * Sorry this code is so messy, but speed seems important. Do different
+ * things for base 8, 10, 16, and other.
*/
if (base == 8) {
unsigned long maxres = ULONG_MAX >> 3;
+
for ( ; ; p += 1) {
digit = *p - '0';
if (digit > 7) {
@@ -147,6 +140,7 @@ strtoul(string, endPtr, base)
}
} else if (base == 10) {
unsigned long maxres = ULONG_MAX / 10;
+
for ( ; ; p += 1) {
digit = *p - '0';
if (digit > 9) {
@@ -160,6 +154,7 @@ strtoul(string, endPtr, base)
}
} else if (base == 16) {
unsigned long maxres = ULONG_MAX >> 4;
+
for ( ; ; p += 1) {
digit = *p - '0';
if (digit > ('z' - '0')) {
@@ -175,8 +170,9 @@ strtoul(string, endPtr, base)
result += digit;
anyDigits = 1;
}
- } else if ( base >= 2 && base <= 36 ) {
+ } else if (base >= 2 && base <= 36) {
unsigned long maxres = ULONG_MAX / base;
+
for ( ; ; p += 1) {
digit = *p - '0';
if (digit > ('z' - '0')) {
diff --git a/compat/strtoull.c b/compat/strtoull.c
deleted file mode 100644
index 00eca3c..0000000
--- a/compat/strtoull.c
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * strtoull.c --
- *
- * Source code for the "strtoull" library procedure.
- *
- * Copyright (c) 1988 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.
- *
- * RCS: @(#) $Id: strtoull.c,v 1.5 2002/02/24 02:53:25 dgp Exp $
- */
-
-#include "tcl.h"
-#include "tclPort.h"
-#include <ctype.h>
-
-/*
- * The table below is used to convert from ASCII digits to a
- * numerical equivalent. It maps from '0' through 'z' to integers
- * (100 for non-digit characters).
- */
-
-static 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' */
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35,
- 100, 100, 100, 100, 100, 100, /* punctuation */
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, /* 'a' - 'z' */
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35};
-
-
-/*
- *----------------------------------------------------------------------
- *
- * strtoull --
- *
- * Convert an ASCII string into an integer.
- *
- * Results:
- * The return value is the integer equivalent of string. If endPtr
- * is non-NULL, then *endPtr is filled in with the character
- * after the last one that was part of the integer. If string
- * doesn't contain a valid integer value, then zero is returned
- * and *endPtr is set to string.
- *
- * Side effects:
- * None.
- *
- *----------------------------------------------------------------------
- */
-
-#if TCL_WIDE_INT_IS_LONG
-unsigned long long
-#else
-Tcl_WideUInt
-#endif
-strtoull(string, endPtr, base)
- 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.
- */
- char **endPtr; /* Where to store address of terminating
- * character, or NULL. */
- int base; /* Base for conversion. Must be less
- * than 37. If 0, then the base is chosen
- * from the leading characters of string:
- * "0x" means hex, "0" means octal, anything
- * else means decimal.
- */
-{
- register CONST char *p;
- register Tcl_WideUInt result = 0;
- register unsigned digit;
- register Tcl_WideUInt shifted;
- int anyDigits = 0, negative = 0;
-
- /*
- * Skip any leading blanks.
- */
-
- p = string;
- while (isspace(UCHAR(*p))) { /* INTL: locale-dependent */
- p += 1;
- }
-
- /*
- * Check for a sign.
- */
-
- if (*p == '-') {
- p += 1;
- negative = 1;
- } else {
- if (*p == '+') {
- p += 1;
- }
- }
-
- /*
- * If no base was provided, pick one from the leading characters
- * of the string.
- */
-
- if (base == 0) {
- if (*p == '0') {
- p += 1;
- if (*p == 'x' || *p == 'X') {
- p += 1;
- base = 16;
- } else {
-
- /*
- * Must set anyDigits here, otherwise "0" produces a
- * "no digits" error.
- */
-
- anyDigits = 1;
- base = 8;
- }
- } else {
- base = 10;
- }
- } else if (base == 16) {
-
- /*
- * Skip a leading "0x" from hex numbers.
- */
-
- if ((p[0] == '0') && (p[1] == 'x' || *p == 'X')) {
- p += 2;
- }
- }
-
- /*
- * Sorry this code is so messy, but speed seems important. Do
- * different things for base 8, 10, 16, and other.
- */
-
- if (base == 8) {
- for ( ; ; p += 1) {
- digit = *p - '0';
- if (digit > 7) {
- break;
- }
- shifted = result << 3;
- if ((shifted >> 3) != result) {
- goto overflow;
- }
- result = shifted + digit;
- if ( result < shifted ) {
- goto overflow;
- }
- anyDigits = 1;
- }
- } else if (base == 10) {
- for ( ; ; p += 1) {
- digit = *p - '0';
- if (digit > 9) {
- break;
- }
- shifted = 10 * result;
- if ((shifted / 10) != result) {
- goto overflow;
- }
- result = shifted + digit;
- if ( result < shifted ) {
- goto overflow;
- }
- anyDigits = 1;
- }
- } else if (base == 16) {
- for ( ; ; p += 1) {
- digit = *p - '0';
- if (digit > ('z' - '0')) {
- break;
- }
- digit = cvtIn[digit];
- if (digit > 15) {
- break;
- }
- shifted = result << 4;
- if ((shifted >> 4) != result) {
- goto overflow;
- }
- result = shifted + digit;
- if ( result < shifted ) {
- goto overflow;
- }
- anyDigits = 1;
- }
- } else if ( base >= 2 && base <= 36 ) {
- for ( ; ; p += 1) {
- digit = *p - '0';
- if (digit > ('z' - '0')) {
- break;
- }
- digit = cvtIn[digit];
- if (digit >= (unsigned) base) {
- break;
- }
- shifted = result * base;
- if ((shifted/base) != result) {
- goto overflow;
- }
- result = shifted + digit;
- if ( result < shifted ) {
- goto overflow;
- }
- anyDigits = 1;
- }
- }
-
- /*
- * Negate if we found a '-' earlier.
- */
-
- if (negative) {
- result = (Tcl_WideUInt)(-((Tcl_WideInt)result));
- }
-
- /*
- * See if there were any digits at all.
- */
-
- if (!anyDigits) {
- p = string;
- }
-
- if (endPtr != 0) {
- *endPtr = (char *) p;
- }
-
- return result;
-
- /*
- * On overflow generate the right output
- */
-
- overflow:
- errno = ERANGE;
- if (endPtr != 0) {
- for ( ; ; p += 1) {
- digit = *p - '0';
- if (digit > ('z' - '0')) {
- break;
- }
- digit = cvtIn[digit];
- if (digit >= (unsigned) base) {
- break;
- }
- }
- *endPtr = (char *) p;
- }
- return (Tcl_WideUInt)Tcl_LongAsWide(-1);
-}
diff --git a/compat/tclErrno.h b/compat/tclErrno.h
deleted file mode 100644
index bcbc984..0000000
--- a/compat/tclErrno.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * tclErrno.h --
- *
- * This header file contains the various POSIX errno definitions that
- * are used by Tcl. This file is derived from the spec POSIX 2.4 and
- * previous implementations for Berkeley UNIX.
- *
- * Copyright (c) 1982, 1986, 1989 Regents of the University of California.
- * Copyright (c) 1996 Sun Microsystems, Inc.
- *
- * See the file "license.terms" for information on usage and redistribution
- * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
- *
- * RCS: @(#) $Id: tclErrno.h,v 1.3 2002/06/07 08:50:22 dkf Exp $
- */
-
-extern int errno; /* global error number */
-
-#define EPERM 1 /* Operation not permitted */
-#define ENOENT 2 /* No such file or directory */
-#define ESRCH 3 /* No such process */
-#define EINTR 4 /* Interrupted system call */
-#define EIO 5 /* Input/output error */
-#define ENXIO 6 /* Device not configured */
-#define E2BIG 7 /* Argument list too long */
-#define ENOEXEC 8 /* Exec format error */
-#define EBADF 9 /* Bad file descriptor */
-#define ECHILD 10 /* No child processes */
-#define EDEADLK 11 /* Resource deadlock avoided */
- /* 11 was EAGAIN */
-#define ENOMEM 12 /* Cannot allocate memory */
-#define EACCES 13 /* Permission denied */
-#define EFAULT 14 /* Bad address */
-#define ENOTBLK 15 /* Block device required */
-#define EBUSY 16 /* Device busy */
-#define EEXIST 17 /* File exists */
-#define EXDEV 18 /* Cross-device link */
-#define ENODEV 19 /* Operation not supported by device */
-#define ENOTDIR 20 /* Not a directory */
-#define EISDIR 21 /* Is a directory */
-#define EINVAL 22 /* Invalid argument */
-#define ENFILE 23 /* Too many open files in system */
-#define EMFILE 24 /* Too many open files */
-#define ENOTTY 25 /* Inappropriate ioctl for device */
-#define ETXTBSY 26 /* Text file busy */
-#define EFBIG 27 /* File too large */
-#define ENOSPC 28 /* No space left on device */
-#define ESPIPE 29 /* Illegal seek */
-#define EROFS 30 /* Read-only file system */
-#define EMLINK 31 /* Too many links */
-#define EPIPE 32 /* Broken pipe */
-#define EDOM 33 /* Numerical argument out of domain */
-#define ERANGE 34 /* Result too large */
-#define EAGAIN 35 /* Resource temporarily unavailable */
-#define EWOULDBLOCK EAGAIN /* Operation would block */
-#define EINPROGRESS 36 /* Operation now in progress */
-#define EALREADY 37 /* Operation already in progress */
-#define ENOTSOCK 38 /* Socket operation on non-socket */
-#define EDESTADDRREQ 39 /* Destination address required */
-#define EMSGSIZE 40 /* Message too long */
-#define EPROTOTYPE 41 /* Protocol wrong type for socket */
-#define ENOPROTOOPT 42 /* Protocol not available */
-#define EPROTONOSUPPORT 43 /* Protocol not supported */
-#define ESOCKTNOSUPPORT 44 /* Socket type not supported */
-#define EOPNOTSUPP 45 /* Operation not supported on socket */
-#define EPFNOSUPPORT 46 /* Protocol family not supported */
-#define EAFNOSUPPORT 47 /* Address family not supported by protocol family */
-#define EADDRINUSE 48 /* Address already in use */
-#define EADDRNOTAVAIL 49 /* Can't assign requested address */
-#define ENETDOWN 50 /* Network is down */
-#define ENETUNREACH 51 /* Network is unreachable */
-#define ENETRESET 52 /* Network dropped connection on reset */
-#define ECONNABORTED 53 /* Software caused connection abort */
-#define ECONNRESET 54 /* Connection reset by peer */
-#define ENOBUFS 55 /* No buffer space available */
-#define EISCONN 56 /* Socket is already connected */
-#define ENOTCONN 57 /* Socket is not connected */
-#define ESHUTDOWN 58 /* Can't send after socket shutdown */
-#define ETOOMANYREFS 59 /* Too many references: can't splice */
-#define ETIMEDOUT 60 /* Connection timed out */
-#define ECONNREFUSED 61 /* Connection refused */
-#define ELOOP 62 /* Too many levels of symbolic links */
-#define ENAMETOOLONG 63 /* File name too long */
-#define EHOSTDOWN 64 /* Host is down */
-#define EHOSTUNREACH 65 /* No route to host */
-#define ENOTEMPTY 66 /* Directory not empty */
-#define EPROCLIM 67 /* Too many processes */
-#define EUSERS 68 /* Too many users */
-#define EDQUOT 69 /* Disc quota exceeded */
-#define ESTALE 70 /* Stale NFS file handle */
-#define EREMOTE 71 /* Too many levels of remote in path */
-#define EBADRPC 72 /* RPC struct is bad */
-#define ERPCMISMATCH 73 /* RPC version wrong */
-#define EPROGUNAVAIL 74 /* RPC prog. not avail */
-#define EPROGMISMATCH 75 /* Program version wrong */
-#define EPROCUNAVAIL 76 /* Bad procedure for program */
-#define ENOLCK 77 /* No locks available */
-#define ENOSYS 78 /* Function not implemented */
-#define EOVERFLOW 79 /* Value too large to be stored in data type */
diff --git a/compat/tmpnam.c b/compat/tmpnam.c
deleted file mode 100644
index 89bfc6a..0000000
--- a/compat/tmpnam.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (c) 1988 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific written prior permission. This software
- * is provided ``as is'' without express or implied warranty.
- *
- * RCS: @(#) $Id: tmpnam.c,v 1.2 1998/09/14 18:39:45 stanton Exp $
- */
-
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <stdio.h>
-
-/*
- * Use /tmp instead of /usr/tmp, because L_tmpname is only 14 chars
- * on some machines (like NeXT machines) and /usr/tmp will cause
- * buffer overflows.
- */
-
-#ifdef P_tmpdir
-# undef P_tmpdir
-#endif
-#define P_tmpdir "/tmp"
-
-char *
-tmpnam(s)
- char *s;
-{
- static char name[50];
- char *mktemp();
-
- if (!s)
- s = name;
- (void)sprintf(s, "%s/XXXXXX", P_tmpdir);
- return(mktemp(s));
-}
diff --git a/compat/unistd.h b/compat/unistd.h
index 0b791e0..2de5bd0 100644
--- a/compat/unistd.h
+++ b/compat/unistd.h
@@ -1,84 +1,76 @@
/*
* unistd.h --
*
- * Macros, CONSTants and prototypes for Posix conformance.
+ * Macros, constants and prototypes for Posix conformance.
*
- * Copyright 1989 Regents of the University of California
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, provided that the above copyright
- * notice appear in all copies. The University of California
- * makes no representations about the suitability of this
- * software for any purpose. It is provided "as is" without
- * express or implied warranty.
- *
- * RCS: @(#) $Id: unistd.h,v 1.2 1998/09/14 18:39:45 stanton Exp $
+ * Copyright 1989 Regents of the University of California Permission to use,
+ * copy, modify, and distribute this software and its documentation for any
+ * purpose and without fee is hereby granted, provided that the above
+ * copyright notice appear in all copies. The University of California makes
+ * no representations about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
*/
#ifndef _UNISTD
#define _UNISTD
#include <sys/types.h>
-#ifndef _TCL
-# include "tcl.h"
-#endif
#ifndef NULL
#define NULL 0
#endif
/*
- * Strict POSIX stuff goes here. Extensions go down below, in the
- * ifndef _POSIX_SOURCE section.
+ * Strict POSIX stuff goes here. Extensions go down below, in the ifndef
+ * _POSIX_SOURCE section.
*/
-extern void _exit _ANSI_ARGS_((int status));
-extern int access _ANSI_ARGS_((CONST char *path, int mode));
-extern int chdir _ANSI_ARGS_((CONST char *path));
-extern int chown _ANSI_ARGS_((CONST char *path, uid_t owner, gid_t group));
-extern int close _ANSI_ARGS_((int fd));
-extern int dup _ANSI_ARGS_((int oldfd));
-extern int dup2 _ANSI_ARGS_((int oldfd, int newfd));
-extern int execl _ANSI_ARGS_((CONST char *path, ...));
-extern int execle _ANSI_ARGS_((CONST char *path, ...));
-extern int execlp _ANSI_ARGS_((CONST char *file, ...));
-extern int execv _ANSI_ARGS_((CONST char *path, char **argv));
-extern int execve _ANSI_ARGS_((CONST char *path, char **argv, char **envp));
-extern int execvp _ANSI_ARGS_((CONST char *file, char **argv));
-extern pid_t fork _ANSI_ARGS_((void));
-extern char *getcwd _ANSI_ARGS_((char *buf, size_t size));
-extern gid_t getegid _ANSI_ARGS_((void));
-extern uid_t geteuid _ANSI_ARGS_((void));
-extern gid_t getgid _ANSI_ARGS_((void));
-extern int getgroups _ANSI_ARGS_((int bufSize, int *buffer));
-extern pid_t getpid _ANSI_ARGS_((void));
-extern uid_t getuid _ANSI_ARGS_((void));
-extern int isatty _ANSI_ARGS_((int fd));
-extern long lseek _ANSI_ARGS_((int fd, long offset, int whence));
-extern int pipe _ANSI_ARGS_((int *fildes));
-extern int read _ANSI_ARGS_((int fd, char *buf, size_t size));
-extern int setgid _ANSI_ARGS_((gid_t group));
-extern int setuid _ANSI_ARGS_((uid_t user));
-extern unsigned sleep _ANSI_ARGS_ ((unsigned seconds));
-extern char *ttyname _ANSI_ARGS_((int fd));
-extern int unlink _ANSI_ARGS_((CONST char *path));
-extern int write _ANSI_ARGS_((int fd, CONST char *buf, size_t size));
+extern void _exit(int status);
+extern int access(const char *path, int mode);
+extern int chdir(const char *path);
+extern int chown(const char *path, uid_t owner, gid_t group);
+extern int close(int fd);
+extern int dup(int oldfd);
+extern int dup2(int oldfd, int newfd);
+extern int execl(const char *path, ...);
+extern int execle(const char *path, ...);
+extern int execlp(const char *file, ...);
+extern int execv(const char *path, char **argv);
+extern int execve(const char *path, char **argv, char **envp);
+extern int execvpw(const char *file, char **argv);
+extern pid_t fork(void);
+extern char * getcwd(char *buf, size_t size);
+extern gid_t getegid(void);
+extern uid_t geteuid(void);
+extern gid_t getgid(void);
+extern int getgroups(int bufSize, int *buffer);
+extern pid_t getpid(void);
+extern uid_t getuid(void);
+extern int isatty(int fd);
+extern long lseek(int fd, long offset, int whence);
+extern int pipe(int *fildes);
+extern int read(int fd, char *buf, size_t size);
+extern int setgid(gid_t group);
+extern int setuid(uid_t user);
+extern unsigned sleep(unsigned seconds);
+extern char * ttyname(int fd);
+extern int unlink(const char *path);
+extern int write(int fd, const char *buf, size_t size);
#ifndef _POSIX_SOURCE
-extern char *crypt _ANSI_ARGS_((CONST char *, CONST char *));
-extern int fchown _ANSI_ARGS_((int fd, uid_t owner, gid_t group));
-extern int flock _ANSI_ARGS_((int fd, int operation));
-extern int ftruncate _ANSI_ARGS_((int fd, unsigned long length));
-extern int ioctl _ANSI_ARGS_((int fd, int request, ...));
-extern int readlink _ANSI_ARGS_((CONST char *path, char *buf, int bufsize));
-extern int setegid _ANSI_ARGS_((gid_t group));
-extern int seteuid _ANSI_ARGS_((uid_t user));
-extern int setreuid _ANSI_ARGS_((int ruid, int euid));
-extern int symlink _ANSI_ARGS_((CONST char *, CONST char *));
-extern int ttyslot _ANSI_ARGS_((void));
-extern int truncate _ANSI_ARGS_((CONST char *path, unsigned long length));
-extern int vfork _ANSI_ARGS_((void));
+extern char * crypt(const char *, const char *);
+extern int fchown(int fd, uid_t owner, gid_t group);
+extern int flock(int fd, int operation);
+extern int ftruncate(int fd, unsigned long length);
+extern int ioctl(int fd, int request, ...);
+extern int readlink(const char *path, char *buf, int bufsize);
+extern int setegid(gid_t group);
+extern int seteuidw(uid_t user);
+extern int setreuid(int ruid, int euid);
+extern int symlink(const char *, const char *);
+extern int ttyslot(void);
+extern int truncate(const char *path, unsigned long length);
+extern int vfork(void);
#endif /* _POSIX_SOURCE */
#endif /* _UNISTD */
-
diff --git a/compat/waitpid.c b/compat/waitpid.c
index 00113cf..8f65799 100644
--- a/compat/waitpid.c
+++ b/compat/waitpid.c
@@ -1,21 +1,17 @@
/*
* waitpid.c --
*
- * This procedure emulates the POSIX waitpid kernel call on
- * BSD systems that don't have waitpid but do have wait3.
- * This code is based on a prototype version written by
- * Mark Diekhans and Karl Lehenbauer.
+ * This procedure emulates the POSIX waitpid kernel call on BSD systems
+ * that don't have waitpid but do have wait3. This code is based on a
+ * prototype version written by Mark Diekhans and Karl Lehenbauer.
*
* 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.
- *
- * RCS: @(#) $Id: waitpid.c,v 1.3 2000/01/11 22:08:50 hobbs Exp $
+ * See the file "license.terms" for information on usage and redistribution of
+ * this file, and for a DISCLAIMER OF ALL WARRANTIES.
*/
-#include "tclInt.h"
#include "tclPort.h"
#ifndef pid_t
@@ -23,40 +19,37 @@
#endif
/*
- * A linked list of the following structures is used to keep track
- * of processes for which we received notification from the kernel,
- * but the application hasn't waited for them yet (this can happen
- * because wait may not return the process we really want). We
- * save the information here until the application finally does
- * wait for the process.
+ * A linked list of the following structures is used to keep track of
+ * processes for which we received notification from the kernel, but the
+ * application hasn't waited for them yet (this can happen because wait may
+ * not return the process we really want). We save the information here until
+ * the application finally does wait for the process.
*/
typedef struct WaitInfo {
- pid_t pid; /* Pid of process that exited. */
- WAIT_STATUS_TYPE status; /* Status returned when child exited
- * or suspended. */
- struct WaitInfo *nextPtr; /* Next in list of exited processes. */
+ pid_t pid; /* Pid of process that exited. */
+ WAIT_STATUS_TYPE status; /* Status returned when child exited or
+ * suspended. */
+ struct WaitInfo *nextPtr; /* Next in list of exited processes. */
} WaitInfo;
-static WaitInfo *deadList = NULL; /* First in list of all dead
- * processes. */
+static WaitInfo *deadList = NULL;
+ /* First in list of all dead processes. */
/*
*----------------------------------------------------------------------
*
* waitpid --
*
- * This procedure emulates the functionality of the POSIX
- * waitpid kernel call, using the BSD wait3 kernel call.
- * Note: it doesn't emulate absolutely all of the waitpid
- * functionality, in that it doesn't support pid's of 0
- * or < -1.
+ * This procedure emulates the functionality of the POSIX waitpid kernel
+ * call, using the BSD wait3 kernel call. Note: it doesn't emulate
+ * absolutely all of the waitpid functionality, in that it doesn't
+ * support pid's of 0 or < -1.
*
* Results:
- * -1 is returned if there is an error in the wait kernel call.
- * Otherwise the pid of an exited or suspended process is
- * returned and *statusPtr is set to the status value of the
- * process.
+ * -1 is returned if there is an error in the wait kernel call. Otherwise
+ * the pid of an exited or suspended process is returned and *statusPtr
+ * is set to the status value of the process.
*
* Side effects:
* None.
@@ -69,12 +62,12 @@ static WaitInfo *deadList = NULL; /* First in list of all dead
#endif
pid_t
-waitpid(pid, statusPtr, options)
- pid_t pid; /* The pid to wait on. Must be -1 or
- * greater than zero. */
- int *statusPtr; /* Where to store wait status for the
+waitpid(
+ pid_t pid, /* The pid to wait on. Must be -1 or greater
+ * than zero. */
+ int *statusPtr, /* Where to store wait status for the
* process. */
- int options; /* OR'ed combination of WNOHANG and
+ int options) /* OR'ed combination of WNOHANG and
* WUNTRACED. */
{
register WaitInfo *waitPtr, *prevPtr;
@@ -87,9 +80,9 @@ waitpid(pid, statusPtr, options)
}
/*
- * See if there's a suitable process that has already stopped or
- * exited. If so, remove it from the list of exited processes and
- * return its information.
+ * See if there's a suitable process that has already stopped or exited.
+ * If so, remove it from the list of exited processes and return its
+ * information.
*/
for (waitPtr = deadList, prevPtr = NULL; waitPtr != NULL;
@@ -112,12 +105,12 @@ waitpid(pid, statusPtr, options)
}
/*
- * Wait for any process to stop or exit. If it's an acceptable one
- * then return it to the caller; otherwise store information about it
- * in the list of exited processes and try again. On systems that
- * have only wait but not wait3, there are several situations we can't
- * handle, but we do the best we can (e.g. can still handle some
- * combinations of options by invoking wait instead of wait3).
+ * Wait for any process to stop or exit. If it's an acceptable one then
+ * return it to the caller; otherwise store information about it in the
+ * list of exited processes and try again. On systems that have only wait
+ * but not wait3, there are several situations we can't handle, but we do
+ * the best we can (e.g. can still handle some combinations of options by
+ * invoking wait instead of wait3).
*/
while (1) {
@@ -150,13 +143,13 @@ waitpid(pid, statusPtr, options)
return result;
/*
- * Can't return this info to caller. Save it in the list of
- * stopped or exited processes. Tricky point: first check for
- * an existing entry for the process and overwrite it if it
- * exists (e.g. a previously stopped process might now be dead).
+ * Can't return this info to caller. Save it in the list of stopped or
+ * exited processes. Tricky point: first check for an existing entry
+ * for the process and overwrite it if it exists (e.g. a previously
+ * stopped process might now be dead).
*/
- saveInfo:
+ saveInfo:
for (waitPtr = deadList; waitPtr != NULL; waitPtr = waitPtr->nextPtr) {
if (waitPtr->pid == result) {
waitPtr->status = status;
@@ -169,6 +162,7 @@ waitpid(pid, statusPtr, options)
waitPtr->nextPtr = deadList;
deadList = waitPtr;
- waitAgain: continue;
+ waitAgain:
+ continue;
}
}
diff --git a/compat/zlib/CMakeLists.txt b/compat/zlib/CMakeLists.txt
new file mode 100644
index 0000000..0c0247c
--- /dev/null
+++ b/compat/zlib/CMakeLists.txt
@@ -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.8")
+
+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()
diff --git a/compat/zlib/ChangeLog b/compat/zlib/ChangeLog
new file mode 100644
index 0000000..f22aaba
--- /dev/null
+++ b/compat/zlib/ChangeLog
@@ -0,0 +1,1472 @@
+
+ ChangeLog file for zlib
+
+Changes in 1.2.8 (28 Apr 2013)
+- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
+- Do not force Z_CONST for C++
+- Clean up contrib/vstudio [Ro§]
+- Correct spelling error in zlib.h
+- Fix mixed line endings in contrib/vstudio
+
+Changes in 1.2.7.3 (13 Apr 2013)
+- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc
+
+Changes in 1.2.7.2 (13 Apr 2013)
+- Change check for a four-byte type back to hexadecimal
+- Fix typo in win32/Makefile.msc
+- Add casts in gzwrite.c for pointer differences
+
+Changes in 1.2.7.1 (24 Mar 2013)
+- Replace use of unsafe string functions with snprintf if available
+- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
+- Fix gzgetc undefine when Z_PREFIX set [Turk]
+- Eliminate use of mktemp in Makefile (not always available)
+- Fix bug in 'F' mode for gzopen()
+- Add inflateGetDictionary() function
+- Correct comment in deflate.h
+- Use _snprintf for snprintf in Microsoft C
+- On Darwin, only use /usr/bin/libtool if libtool is not Apple
+- Delete "--version" file if created by "ar --version" [Richard G.]
+- Fix configure check for veracity of compiler error return codes
+- Fix CMake compilation of static lib for MSVC2010 x64
+- Remove unused variable in infback9.c
+- Fix argument checks in gzlog_compress() and gzlog_write()
+- Clean up the usage of z_const and respect const usage within zlib
+- Clean up examples/gzlog.[ch] comparisons of different types
+- Avoid shift equal to bits in type (caused endless loop)
+- Fix unintialized value bug in gzputc() introduced by const patches
+- Fix memory allocation error in examples/zran.c [Nor]
+- Fix bug where gzopen(), gzclose() would write an empty file
+- Fix bug in gzclose() when gzwrite() runs out of memory
+- Check for input buffer malloc failure in examples/gzappend.c
+- Add note to contrib/blast to use binary mode in stdio
+- Fix comparisons of differently signed integers in contrib/blast
+- Check for invalid code length codes in contrib/puff
+- Fix serious but very rare decompression bug in inftrees.c
+- Update inflateBack() comments, since inflate() can be faster
+- Use underscored I/O function names for WINAPI_FAMILY
+- Add _tr_flush_bits to the external symbols prefixed by --zprefix
+- Add contrib/vstudio/vc10 pre-build step for static only
+- Quote --version-script argument in CMakeLists.txt
+- Don't specify --version-script on Apple platforms in CMakeLists.txt
+- Fix casting error in contrib/testzlib/testzlib.c
+- Fix types in contrib/minizip to match result of get_crc_table()
+- Simplify contrib/vstudio/vc10 with 'd' suffix
+- Add TOP support to win32/Makefile.msc
+- Suport i686 and amd64 assembler builds in CMakeLists.txt
+- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
+- Add vc11 and vc12 build files to contrib/vstudio
+- Add gzvprintf() as an undocumented function in zlib
+- Fix configure for Sun shell
+- Remove runtime check in configure for four-byte integer type
+- Add casts and consts to ease user conversion to C++
+- Add man pages for minizip and miniunzip
+- In Makefile uninstall, don't rm if preceding cd fails
+- Do not return Z_BUF_ERROR if deflateParam() has nothing to write
+
+Changes in 1.2.7 (2 May 2012)
+- Replace use of memmove() with a simple copy for portability
+- Test for existence of strerror
+- Restore gzgetc_ for backward compatibility with 1.2.6
+- Fix build with non-GNU make on Solaris
+- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
+- Include unistd.h for Watcom C
+- Use __WATCOMC__ instead of __WATCOM__
+- Do not use the visibility attribute if NO_VIZ defined
+- Improve the detection of no hidden visibility attribute
+- Avoid using __int64 for gcc or solo compilation
+- Cast to char * in gzprintf to avoid warnings [Zinser]
+- Fix make_vms.com for VAX [Zinser]
+- Don't use library or built-in byte swaps
+- Simplify test and use of gcc hidden attribute
+- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
+- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
+- Fix bug in test/minigzip.c for configure --solo
+- Fix contrib/vstudio project link errors [Mohanathas]
+- Add ability to choose the builder in make_vms.com [Schweda]
+- Add DESTDIR support to mingw32 win32/Makefile.gcc
+- Fix comments in win32/Makefile.gcc for proper usage
+- Allow overriding the default install locations for cmake
+- Generate and install the pkg-config file with cmake
+- Build both a static and a shared version of zlib with cmake
+- Include version symbols for cmake builds
+- If using cmake with MSVC, add the source directory to the includes
+- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
+- Move obsolete emx makefile to old [Truta]
+- Allow the use of -Wundef when compiling or using zlib
+- Avoid the use of the -u option with mktemp
+- Improve inflate() documentation on the use of Z_FINISH
+- Recognize clang as gcc
+- Add gzopen_w() in Windows for wide character path names
+- Rename zconf.h in CMakeLists.txt to move it out of the way
+- Add source directory in CMakeLists.txt for building examples
+- Look in build directory for zlib.pc in CMakeLists.txt
+- Remove gzflags from zlibvc.def in vc9 and vc10
+- Fix contrib/minizip compilation in the MinGW environment
+- Update ./configure for Solaris, support --64 [Mooney]
+- Remove -R. from Solaris shared build (possible security issue)
+- Avoid race condition for parallel make (-j) running example
+- Fix type mismatch between get_crc_table() and crc_table
+- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
+- Fix the path to zlib.map in CMakeLists.txt
+- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
+- Add instructions to win32/Makefile.gcc for shared install [Torri]
+
+Changes in 1.2.6.1 (12 Feb 2012)
+- Avoid the use of the Objective-C reserved name "id"
+- Include io.h in gzguts.h for Microsoft compilers
+- Fix problem with ./configure --prefix and gzgetc macro
+- Include gz_header definition when compiling zlib solo
+- Put gzflags() functionality back in zutil.c
+- Avoid library header include in crc32.c for Z_SOLO
+- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
+- Minor cleanup in contrib/minizip/zip.c [Vollant]
+- Update make_vms.com [Zinser]
+- Remove unnecessary gzgetc_ function
+- Use optimized byte swap operations for Microsoft and GNU [Snyder]
+- Fix minor typo in zlib.h comments [Rzesniowiecki]
+
+Changes in 1.2.6 (29 Jan 2012)
+- Update the Pascal interface in contrib/pascal
+- Fix function numbers for gzgetc_ in zlibvc.def files
+- Fix configure.ac for contrib/minizip [Schiffer]
+- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
+- Have ./configure use the compiler return code for error indication
+- Fix CMakeLists.txt for cross compilation [McClure]
+- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
+- Fix compilation of contrib/minizip on FreeBSD [Marquez]
+- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
+- Include io.h for Turbo C / Borland C on all platforms [Truta]
+- Make version explicit in contrib/minizip/configure.ac [Bosmans]
+- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
+- Minor cleanup up contrib/minizip/unzip.c [Vollant]
+- Fix bug when compiling minizip with C++ [Vollant]
+- Protect for long name and extra fields in contrib/minizip [Vollant]
+- Avoid some warnings in contrib/minizip [Vollant]
+- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
+- Add missing libs to minizip linker command
+- Add support for VPATH builds in contrib/minizip
+- Add an --enable-demos option to contrib/minizip/configure
+- Add the generation of configure.log by ./configure
+- Exit when required parameters not provided to win32/Makefile.gcc
+- Have gzputc return the character written instead of the argument
+- Use the -m option on ldconfig for BSD systems [Tobias]
+- Correct in zlib.map when deflateResetKeep was added
+
+Changes in 1.2.5.3 (15 Jan 2012)
+- Restore gzgetc function for binary compatibility
+- Do not use _lseeki64 under Borland C++ [Truta]
+- Update win32/Makefile.msc to build test/*.c [Truta]
+- Remove old/visualc6 given CMakefile and other alternatives
+- Update AS400 build files and documentation [Monnerat]
+- Update win32/Makefile.gcc to build test/*.c [Truta]
+- Permit stronger flushes after Z_BLOCK flushes
+- Avoid extraneous empty blocks when doing empty flushes
+- Permit Z_NULL arguments to deflatePending
+- Allow deflatePrime() to insert bits in the middle of a stream
+- Remove second empty static block for Z_PARTIAL_FLUSH
+- Write out all of the available bits when using Z_BLOCK
+- Insert the first two strings in the hash table after a flush
+
+Changes in 1.2.5.2 (17 Dec 2011)
+- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
+- use relative symlinks for shared libs
+- Avoid searching past window for Z_RLE strategy
+- Assure that high-water mark initialization is always applied in deflate
+- Add assertions to fill_window() in deflate.c to match comments
+- Update python link in README
+- Correct spelling error in gzread.c
+- Fix bug in gzgets() for a concatenated empty gzip stream
+- Correct error in comment for gz_make()
+- Change gzread() and related to ignore junk after gzip streams
+- Allow gzread() and related to continue after gzclearerr()
+- Allow gzrewind() and gzseek() after a premature end-of-file
+- Simplify gzseek() now that raw after gzip is ignored
+- Change gzgetc() to a macro for speed (~40% speedup in testing)
+- Fix gzclose() to return the actual error last encountered
+- Always add large file support for windows
+- Include zconf.h for windows large file support
+- Include zconf.h.cmakein for windows large file support
+- Update zconf.h.cmakein on make distclean
+- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
+- Clarify how gzopen() appends in zlib.h comments
+- Correct documentation of gzdirect() since junk at end now ignored
+- Add a transparent write mode to gzopen() when 'T' is in the mode
+- Update python link in zlib man page
+- Get inffixed.h and MAKEFIXED result to match
+- Add a ./config --solo option to make zlib subset with no libary use
+- Add undocumented inflateResetKeep() function for CAB file decoding
+- Add --cover option to ./configure for gcc coverage testing
+- Add #define ZLIB_CONST option to use const in the z_stream interface
+- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
+- Note behavior of uncompress() to provide as much data as it can
+- Add files in contrib/minizip to aid in building libminizip
+- Split off AR options in Makefile.in and configure
+- Change ON macro to Z_ARG to avoid application conflicts
+- Facilitate compilation with Borland C++ for pragmas and vsnprintf
+- Include io.h for Turbo C / Borland C++
+- Move example.c and minigzip.c to test/
+- Simplify incomplete code table filling in inflate_table()
+- Remove code from inflate.c and infback.c that is impossible to execute
+- Test the inflate code with full coverage
+- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
+- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
+- Fix gzwrite.c to accommodate reduced memory zlib compilation
+- Have inflate() with Z_FINISH avoid the allocation of a window
+- Do not set strm->adler when doing raw inflate
+- Fix gzeof() to behave just like feof() when read is not past end of file
+- Fix bug in gzread.c when end-of-file is reached
+- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
+- Document gzread() capability to read concurrently written files
+- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]
+
+Changes in 1.2.5.1 (10 Sep 2011)
+- Update FAQ entry on shared builds (#13)
+- Avoid symbolic argument to chmod in Makefile.in
+- Fix bug and add consts in contrib/puff [Oberhumer]
+- Update contrib/puff/zeros.raw test file to have all block types
+- Add full coverage test for puff in contrib/puff/Makefile
+- Fix static-only-build install in Makefile.in
+- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
+- Add libz.a dependency to shared in Makefile.in for parallel builds
+- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
+- Replace $(...) with `...` in configure for non-bash sh [Bowler]
+- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
+- Add solaris* to Linux* in configure to allow gcc use [Groffen]
+- Add *bsd* to Linux* case in configure [Bar-Lev]
+- Add inffast.obj to dependencies in win32/Makefile.msc
+- Correct spelling error in deflate.h [Kohler]
+- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
+- Add test to configure for GNU C looking for gcc in output of $cc -v
+- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
+- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
+- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
+- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
+- Make stronger test in zconf.h to include unistd.h for LFS
+- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
+- Fix zlib.h LFS support when Z_PREFIX used
+- Add updated as400 support (removed from old) [Monnerat]
+- Avoid deflate sensitivity to volatile input data
+- Avoid division in adler32_combine for NO_DIVIDE
+- Clarify the use of Z_FINISH with deflateBound() amount of space
+- Set binary for output file in puff.c
+- Use u4 type for crc_table to avoid conversion warnings
+- Apply casts in zlib.h to avoid conversion warnings
+- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
+- Improve inflateSync() documentation to note indeterminancy
+- Add deflatePending() function to return the amount of pending output
+- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
+- Add a check in configure for stdarg.h, use for gzprintf()
+- Check that pointers fit in ints when gzprint() compiled old style
+- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
+- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
+- Add debug records in assmebler code [Londer]
+- Update RFC references to use http://tools.ietf.org/html/... [Li]
+- Add --archs option, use of libtool to configure for Mac OS X [Borstel]
+
+Changes in 1.2.5 (19 Apr 2010)
+- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev]
+- Default to libdir as sharedlibdir in configure [Nieder]
+- Update copyright dates on modified source files
+- Update trees.c to be able to generate modified trees.h
+- Exit configure for MinGW, suggesting win32/Makefile.gcc
+- Check for NULL path in gz_open [Homurlu]
+
+Changes in 1.2.4.5 (18 Apr 2010)
+- Set sharedlibdir in configure [Torok]
+- Set LDFLAGS in Makefile.in [Bar-Lev]
+- Avoid mkdir objs race condition in Makefile.in [Bowler]
+- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays
+- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C
+- Don't use hidden attribute when it is a warning generator (e.g. Solaris)
+
+Changes in 1.2.4.4 (18 Apr 2010)
+- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok]
+- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty
+- Try to use bash or ksh regardless of functionality of /bin/sh
+- Fix configure incompatibility with NetBSD sh
+- Remove attempt to run under bash or ksh since have better NetBSD fix
+- Fix win32/Makefile.gcc for MinGW [Bar-Lev]
+- Add diagnostic messages when using CROSS_PREFIX in configure
+- Added --sharedlibdir option to configure [Weigelt]
+- Use hidden visibility attribute when available [Frysinger]
+
+Changes in 1.2.4.3 (10 Apr 2010)
+- Only use CROSS_PREFIX in configure for ar and ranlib if they exist
+- Use CROSS_PREFIX for nm [Bar-Lev]
+- Assume _LARGEFILE64_SOURCE defined is equivalent to true
+- Avoid use of undefined symbols in #if with && and ||
+- Make *64 prototypes in gzguts.h consistent with functions
+- Add -shared load option for MinGW in configure [Bowler]
+- Move z_off64_t to public interface, use instead of off64_t
+- Remove ! from shell test in configure (not portable to Solaris)
+- Change +0 macro tests to -0 for possibly increased portability
+
+Changes in 1.2.4.2 (9 Apr 2010)
+- Add consistent carriage returns to readme.txt's in masmx86 and masmx64
+- Really provide prototypes for *64 functions when building without LFS
+- Only define unlink() in minigzip.c if unistd.h not included
+- Update README to point to contrib/vstudio project files
+- Move projects/vc6 to old/ and remove projects/
+- Include stdlib.h in minigzip.c for setmode() definition under WinCE
+- Clean up assembler builds in win32/Makefile.msc [Rowe]
+- Include sys/types.h for Microsoft for off_t definition
+- Fix memory leak on error in gz_open()
+- Symbolize nm as $NM in configure [Weigelt]
+- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt]
+- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined
+- Fix bug in gzeof() to take into account unused input data
+- Avoid initialization of structures with variables in puff.c
+- Updated win32/README-WIN32.txt [Rowe]
+
+Changes in 1.2.4.1 (28 Mar 2010)
+- Remove the use of [a-z] constructs for sed in configure [gentoo 310225]
+- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech]
+- Restore "for debugging" comment on sprintf() in gzlib.c
+- Remove fdopen for MVS from gzguts.h
+- Put new README-WIN32.txt in win32 [Rowe]
+- Add check for shell to configure and invoke another shell if needed
+- Fix big fat stinking bug in gzseek() on uncompressed files
+- Remove vestigial F_OPEN64 define in zutil.h
+- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE
+- Avoid errors on non-LFS systems when applications define LFS macros
+- Set EXE to ".exe" in configure for MINGW [Kahle]
+- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill]
+- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev]
+- Add DLL install in win32/makefile.gcc [Bar-Lev]
+- Allow Linux* or linux* from uname in configure [Bar-Lev]
+- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev]
+- Add cross-compilation prefixes to configure [Bar-Lev]
+- Match type exactly in gz_load() invocation in gzread.c
+- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func
+- Provide prototypes for *64 functions when building zlib without LFS
+- Don't use -lc when linking shared library on MinGW
+- Remove errno.h check in configure and vestigial errno code in zutil.h
+
+Changes in 1.2.4 (14 Mar 2010)
+- Fix VER3 extraction in configure for no fourth subversion
+- Update zlib.3, add docs to Makefile.in to make .pdf out of it
+- Add zlib.3.pdf to distribution
+- Don't set error code in gzerror() if passed pointer is NULL
+- Apply destination directory fixes to CMakeLists.txt [Lowman]
+- Move #cmakedefine's to a new zconf.in.cmakein
+- Restore zconf.h for builds that don't use configure or cmake
+- Add distclean to dummy Makefile for convenience
+- Update and improve INDEX, README, and FAQ
+- Update CMakeLists.txt for the return of zconf.h [Lowman]
+- Update contrib/vstudio/vc9 and vc10 [Vollant]
+- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc
+- Apply license and readme changes to contrib/asm686 [Raiter]
+- Check file name lengths and add -c option in minigzip.c [Li]
+- Update contrib/amd64 and contrib/masmx86/ [Vollant]
+- Avoid use of "eof" parameter in trees.c to not shadow library variable
+- Update make_vms.com for removal of zlibdefs.h [Zinser]
+- Update assembler code and vstudio projects in contrib [Vollant]
+- Remove outdated assembler code contrib/masm686 and contrib/asm586
+- Remove old vc7 and vc8 from contrib/vstudio
+- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe]
+- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open()
+- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant]
+- Remove *64 functions from win32/zlib.def (they're not 64-bit yet)
+- Fix bug in void-returning vsprintf() case in gzwrite.c
+- Fix name change from inflate.h in contrib/inflate86/inffas86.c
+- Check if temporary file exists before removing in make_vms.com [Zinser]
+- Fix make install and uninstall for --static option
+- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta]
+- Update readme.txt in contrib/masmx64 and masmx86 to assemble
+
+Changes in 1.2.3.9 (21 Feb 2010)
+- Expunge gzio.c
+- Move as400 build information to old
+- Fix updates in contrib/minizip and contrib/vstudio
+- Add const to vsnprintf test in configure to avoid warnings [Weigelt]
+- Delete zconf.h (made by configure) [Weigelt]
+- Change zconf.in.h to zconf.h.in per convention [Weigelt]
+- Check for NULL buf in gzgets()
+- Return empty string for gzgets() with len == 1 (like fgets())
+- Fix description of gzgets() in zlib.h for end-of-file, NULL return
+- Update minizip to 1.1 [Vollant]
+- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c
+- Note in zlib.h that gzerror() should be used to distinguish from EOF
+- Remove use of snprintf() from gzlib.c
+- Fix bug in gzseek()
+- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant]
+- Fix zconf.h generation in CMakeLists.txt [Lowman]
+- Improve comments in zconf.h where modified by configure
+
+Changes in 1.2.3.8 (13 Feb 2010)
+- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer]
+- Use z_off64_t in gz_zero() and gz_skip() to match state->skip
+- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t)
+- Revert to Makefile.in from 1.2.3.6 (live with the clutter)
+- Fix missing error return in gzflush(), add zlib.h note
+- Add *64 functions to zlib.map [Levin]
+- Fix signed/unsigned comparison in gz_comp()
+- Use SFLAGS when testing shared linking in configure
+- Add --64 option to ./configure to use -m64 with gcc
+- Fix ./configure --help to correctly name options
+- Have make fail if a test fails [Levin]
+- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson]
+- Remove assembler object files from contrib
+
+Changes in 1.2.3.7 (24 Jan 2010)
+- Always gzopen() with O_LARGEFILE if available
+- Fix gzdirect() to work immediately after gzopen() or gzdopen()
+- Make gzdirect() more precise when the state changes while reading
+- Improve zlib.h documentation in many places
+- Catch memory allocation failure in gz_open()
+- Complete close operation if seek forward in gzclose_w() fails
+- Return Z_ERRNO from gzclose_r() if close() fails
+- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL
+- Return zero for gzwrite() errors to match zlib.h description
+- Return -1 on gzputs() error to match zlib.h description
+- Add zconf.in.h to allow recovery from configure modification [Weigelt]
+- Fix static library permissions in Makefile.in [Weigelt]
+- Avoid warnings in configure tests that hide functionality [Weigelt]
+- Add *BSD and DragonFly to Linux case in configure [gentoo 123571]
+- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212]
+- Avoid access of uninitialized data for first inflateReset2 call [Gomes]
+- Keep object files in subdirectories to reduce the clutter somewhat
+- Remove default Makefile and zlibdefs.h, add dummy Makefile
+- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_
+- Remove zlibdefs.h completely -- modify zconf.h instead
+
+Changes in 1.2.3.6 (17 Jan 2010)
+- Avoid void * arithmetic in gzread.c and gzwrite.c
+- Make compilers happier with const char * for gz_error message
+- Avoid unused parameter warning in inflate.c
+- Avoid signed-unsigned comparison warning in inflate.c
+- Indent #pragma's for traditional C
+- Fix usage of strwinerror() in glib.c, change to gz_strwinerror()
+- Correct email address in configure for system options
+- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser]
+- Update zlib.map [Brown]
+- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok]
+- Apply various fixes to CMakeLists.txt [Lowman]
+- Add checks on len in gzread() and gzwrite()
+- Add error message for no more room for gzungetc()
+- Remove zlib version check in gzwrite()
+- Defer compression of gzprintf() result until need to
+- Use snprintf() in gzdopen() if available
+- Remove USE_MMAP configuration determination (only used by minigzip)
+- Remove examples/pigz.c (available separately)
+- Update examples/gun.c to 1.6
+
+Changes in 1.2.3.5 (8 Jan 2010)
+- Add space after #if in zutil.h for some compilers
+- Fix relatively harmless bug in deflate_fast() [Exarevsky]
+- Fix same problem in deflate_slow()
+- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown]
+- Add deflate_rle() for faster Z_RLE strategy run-length encoding
+- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding
+- Change name of "write" variable in inffast.c to avoid library collisions
+- Fix premature EOF from gzread() in gzio.c [Brown]
+- Use zlib header window size if windowBits is 0 in inflateInit2()
+- Remove compressBound() call in deflate.c to avoid linking compress.o
+- Replace use of errno in gz* with functions, support WinCE [Alves]
+- Provide alternative to perror() in minigzip.c for WinCE [Alves]
+- Don't use _vsnprintf on later versions of MSVC [Lowman]
+- Add CMake build script and input file [Lowman]
+- Update contrib/minizip to 1.1 [Svensson, Vollant]
+- Moved nintendods directory from contrib to .
+- Replace gzio.c with a new set of routines with the same functionality
+- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above
+- Update contrib/minizip to 1.1b
+- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h
+
+Changes in 1.2.3.4 (21 Dec 2009)
+- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility
+- Update comments in configure and Makefile.in for default --shared
+- Fix test -z's in configure [Marquess]
+- Build examplesh and minigzipsh when not testing
+- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h
+- Import LDFLAGS from the environment in configure
+- Fix configure to populate SFLAGS with discovered CFLAGS options
+- Adapt make_vms.com to the new Makefile.in [Zinser]
+- Add zlib2ansi script for C++ compilation [Marquess]
+- Add _FILE_OFFSET_BITS=64 test to make test (when applicable)
+- Add AMD64 assembler code for longest match to contrib [Teterin]
+- Include options from $SFLAGS when doing $LDSHARED
+- Simplify 64-bit file support by introducing z_off64_t type
+- Make shared object files in objs directory to work around old Sun cc
+- Use only three-part version number for Darwin shared compiles
+- Add rc option to ar in Makefile.in for when ./configure not run
+- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4*
+- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile
+- Protect against _FILE_OFFSET_BITS being defined when compiling zlib
+- Rename Makefile.in targets allstatic to static and allshared to shared
+- Fix static and shared Makefile.in targets to be independent
+- Correct error return bug in gz_open() by setting state [Brown]
+- Put spaces before ;;'s in configure for better sh compatibility
+- Add pigz.c (parallel implementation of gzip) to examples/
+- Correct constant in crc32.c to UL [Leventhal]
+- Reject negative lengths in crc32_combine()
+- Add inflateReset2() function to work like inflateEnd()/inflateInit2()
+- Include sys/types.h for _LARGEFILE64_SOURCE [Brown]
+- Correct typo in doc/algorithm.txt [Janik]
+- Fix bug in adler32_combine() [Zhu]
+- Catch missing-end-of-block-code error in all inflates and in puff
+ Assures that random input to inflate eventually results in an error
+- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/
+- Update ENOUGH and its usage to reflect discovered bounds
+- Fix gzerror() error report on empty input file [Brown]
+- Add ush casts in trees.c to avoid pedantic runtime errors
+- Fix typo in zlib.h uncompress() description [Reiss]
+- Correct inflate() comments with regard to automatic header detection
+- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays)
+- Put new version of gzlog (2.0) in examples with interruption recovery
+- Add puff compile option to permit invalid distance-too-far streams
+- Add puff TEST command options, ability to read piped input
+- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but
+ _LARGEFILE64_SOURCE not defined
+- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart
+- Fix deflateSetDictionary() to use all 32K for output consistency
+- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h)
+- Clear bytes after deflate lookahead to avoid use of uninitialized data
+- Change a limit in inftrees.c to be more transparent to Coverity Prevent
+- Update win32/zlib.def with exported symbols from zlib.h
+- Correct spelling errors in zlib.h [Willem, Sobrado]
+- Allow Z_BLOCK for deflate() to force a new block
+- Allow negative bits in inflatePrime() to delete existing bit buffer
+- Add Z_TREES flush option to inflate() to return at end of trees
+- Add inflateMark() to return current state information for random access
+- Add Makefile for NintendoDS to contrib [Costa]
+- Add -w in configure compile tests to avoid spurious warnings [Beucler]
+- Fix typos in zlib.h comments for deflateSetDictionary()
+- Fix EOF detection in transparent gzread() [Maier]
+
+Changes in 1.2.3.3 (2 October 2006)
+- Make --shared the default for configure, add a --static option
+- Add compile option to permit invalid distance-too-far streams
+- Add inflateUndermine() function which is required to enable above
+- Remove use of "this" variable name for C++ compatibility [Marquess]
+- Add testing of shared library in make test, if shared library built
+- Use ftello() and fseeko() if available instead of ftell() and fseek()
+- Provide two versions of all functions that use the z_off_t type for
+ binary compatibility -- a normal version and a 64-bit offset version,
+ per the Large File Support Extension when _LARGEFILE64_SOURCE is
+ defined; use the 64-bit versions by default when _FILE_OFFSET_BITS
+ is defined to be 64
+- Add a --uname= option to configure to perhaps help with cross-compiling
+
+Changes in 1.2.3.2 (3 September 2006)
+- Turn off silly Borland warnings [Hay]
+- Use off64_t and define _LARGEFILE64_SOURCE when present
+- Fix missing dependency on inffixed.h in Makefile.in
+- Rig configure --shared to build both shared and static [Teredesai, Truta]
+- Remove zconf.in.h and instead create a new zlibdefs.h file
+- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant]
+- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt]
+
+Changes in 1.2.3.1 (16 August 2006)
+- Add watcom directory with OpenWatcom make files [Daniel]
+- Remove #undef of FAR in zconf.in.h for MVS [Fedtke]
+- Update make_vms.com [Zinser]
+- Use -fPIC for shared build in configure [Teredesai, Nicholson]
+- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen]
+- Use fdopen() (not _fdopen()) for Interix in zutil.h [BŠck]
+- Add some FAQ entries about the contrib directory
+- Update the MVS question in the FAQ
+- Avoid extraneous reads after EOF in gzio.c [Brown]
+- Correct spelling of "successfully" in gzio.c [Randers-Pehrson]
+- Add comments to zlib.h about gzerror() usage [Brown]
+- Set extra flags in gzip header in gzopen() like deflate() does
+- Make configure options more compatible with double-dash conventions
+ [Weigelt]
+- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen]
+- Fix uninstall target in Makefile.in [Truta]
+- Add pkgconfig support [Weigelt]
+- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt]
+- Replace set_data_type() with a more accurate detect_data_type() in
+ trees.c, according to the txtvsbin.txt document [Truta]
+- Swap the order of #include <stdio.h> and #include "zlib.h" in
+ gzio.c, example.c and minigzip.c [Truta]
+- Shut up annoying VS2005 warnings about standard C deprecation [Rowe,
+ Truta] (where?)
+- Fix target "clean" from win32/Makefile.bor [Truta]
+- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe]
+- Update zlib www home address in win32/DLL_FAQ.txt [Truta]
+- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove]
+- Enable browse info in the "Debug" and "ASM Debug" configurations in
+ the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta]
+- Add pkgconfig support [Weigelt]
+- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h,
+ for use in win32/zlib1.rc [Polushin, Rowe, Truta]
+- Add a document that explains the new text detection scheme to
+ doc/txtvsbin.txt [Truta]
+- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta]
+- Move algorithm.txt into doc/ [Truta]
+- Synchronize FAQ with website
+- Fix compressBound(), was low for some pathological cases [Fearnley]
+- Take into account wrapper variations in deflateBound()
+- Set examples/zpipe.c input and output to binary mode for Windows
+- Update examples/zlib_how.html with new zpipe.c (also web site)
+- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems
+ that gcc became pickier in 4.0)
+- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain
+ un-versioned, the patch adds versioning only for symbols introduced in
+ zlib-1.2.0 or later. It also declares as local those symbols which are
+ not designed to be exported." [Levin]
+- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure
+- Do not initialize global static by default in trees.c, add a response
+ NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess]
+- Don't use strerror() in gzio.c under WinCE [Yakimov]
+- Don't use errno.h in zutil.h under WinCE [Yakimov]
+- Move arguments for AR to its usage to allow replacing ar [Marot]
+- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson]
+- Improve inflateInit() and inflateInit2() documentation
+- Fix structure size comment in inflate.h
+- Change configure help option from --h* to --help [Santos]
+
+Changes in 1.2.3 (18 July 2005)
+- Apply security vulnerability fixes to contrib/infback9 as well
+- Clean up some text files (carriage returns, trailing space)
+- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant]
+
+Changes in 1.2.2.4 (11 July 2005)
+- Add inflatePrime() function for starting inflation at bit boundary
+- Avoid some Visual C warnings in deflate.c
+- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit
+ compile
+- Fix some spelling errors in comments [Betts]
+- Correct inflateInit2() error return documentation in zlib.h
+- Add zran.c example of compressed data random access to examples
+ directory, shows use of inflatePrime()
+- Fix cast for assignments to strm->state in inflate.c and infback.c
+- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer]
+- Move declarations of gf2 functions to right place in crc32.c [Oberhumer]
+- Add cast in trees.c t avoid a warning [Oberhumer]
+- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer]
+- Update make_vms.com [Zinser]
+- Initialize state->write in inflateReset() since copied in inflate_fast()
+- Be more strict on incomplete code sets in inflate_table() and increase
+ ENOUGH and MAXD -- this repairs a possible security vulnerability for
+ invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for
+ discovering the vulnerability and providing test cases.
+- Add ia64 support to configure for HP-UX [Smith]
+- Add error return to gzread() for format or i/o error [Levin]
+- Use malloc.h for OS/2 [Necasek]
+
+Changes in 1.2.2.3 (27 May 2005)
+- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile
+- Typecast fread() return values in gzio.c [Vollant]
+- Remove trailing space in minigzip.c outmode (VC++ can't deal with it)
+- Fix crc check bug in gzread() after gzungetc() [Heiner]
+- Add the deflateTune() function to adjust internal compression parameters
+- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack)
+- Remove an incorrect assertion in examples/zpipe.c
+- Add C++ wrapper in infback9.h [Donais]
+- Fix bug in inflateCopy() when decoding fixed codes
+- Note in zlib.h how much deflateSetDictionary() actually uses
+- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used)
+- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer]
+- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer]
+- Add gzdirect() function to indicate transparent reads
+- Update contrib/minizip [Vollant]
+- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer]
+- Add casts in crc32.c to avoid warnings [Oberhumer]
+- Add contrib/masmx64 [Vollant]
+- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant]
+
+Changes in 1.2.2.2 (30 December 2004)
+- Replace structure assignments in deflate.c and inflate.c with zmemcpy to
+ avoid implicit memcpy calls (portability for no-library compilation)
+- Increase sprintf() buffer size in gzdopen() to allow for large numbers
+- Add INFLATE_STRICT to check distances against zlib header
+- Improve WinCE errno handling and comments [Chang]
+- Remove comment about no gzip header processing in FAQ
+- Add Z_FIXED strategy option to deflateInit2() to force fixed trees
+- Add updated make_vms.com [Coghlan], update README
+- Create a new "examples" directory, move gzappend.c there, add zpipe.c,
+ fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html.
+- Add FAQ entry and comments in deflate.c on uninitialized memory access
+- Add Solaris 9 make options in configure [Gilbert]
+- Allow strerror() usage in gzio.c for STDC
+- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer]
+- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant]
+- Use z_off_t for adler32_combine() and crc32_combine() lengths
+- Make adler32() much faster for small len
+- Use OS_CODE in deflate() default gzip header
+
+Changes in 1.2.2.1 (31 October 2004)
+- Allow inflateSetDictionary() call for raw inflate
+- Fix inflate header crc check bug for file names and comments
+- Add deflateSetHeader() and gz_header structure for custom gzip headers
+- Add inflateGetheader() to retrieve gzip headers
+- Add crc32_combine() and adler32_combine() functions
+- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list
+- Use zstreamp consistently in zlib.h (inflate_back functions)
+- Remove GUNZIP condition from definition of inflate_mode in inflate.h
+ and in contrib/inflate86/inffast.S [Truta, Anderson]
+- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson]
+- Update projects/README.projects and projects/visualc6 [Truta]
+- Update win32/DLL_FAQ.txt [Truta]
+- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta]
+- Deprecate Z_ASCII; use Z_TEXT instead [Truta]
+- Use a new algorithm for setting strm->data_type in trees.c [Truta]
+- Do not define an exit() prototype in zutil.c unless DEBUG defined
+- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta]
+- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate()
+- Fix Darwin build version identification [Peterson]
+
+Changes in 1.2.2 (3 October 2004)
+- Update zlib.h comments on gzip in-memory processing
+- Set adler to 1 in inflateReset() to support Java test suite [Walles]
+- Add contrib/dotzlib [Ravn]
+- Update win32/DLL_FAQ.txt [Truta]
+- Update contrib/minizip [Vollant]
+- Move contrib/visual-basic.txt to old/ [Truta]
+- Fix assembler builds in projects/visualc6/ [Truta]
+
+Changes in 1.2.1.2 (9 September 2004)
+- Update INDEX file
+- Fix trees.c to update strm->data_type (no one ever noticed!)
+- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown]
+- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE)
+- Add limited multitasking protection to DYNAMIC_CRC_TABLE
+- Add NO_vsnprintf for VMS in zutil.h [Mozilla]
+- Don't declare strerror() under VMS [Mozilla]
+- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize
+- Update contrib/ada [Anisimkov]
+- Update contrib/minizip [Vollant]
+- Fix configure to not hardcode directories for Darwin [Peterson]
+- Fix gzio.c to not return error on empty files [Brown]
+- Fix indentation; update version in contrib/delphi/ZLib.pas and
+ contrib/pascal/zlibpas.pas [Truta]
+- Update mkasm.bat in contrib/masmx86 [Truta]
+- Update contrib/untgz [Truta]
+- Add projects/README.projects [Truta]
+- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta]
+- Update win32/DLL_FAQ.txt [Truta]
+- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta]
+- Remove an unnecessary assignment to curr in inftrees.c [Truta]
+- Add OS/2 to exe builds in configure [Poltorak]
+- Remove err dummy parameter in zlib.h [Kientzle]
+
+Changes in 1.2.1.1 (9 January 2004)
+- Update email address in README
+- Several FAQ updates
+- Fix a big fat bug in inftrees.c that prevented decoding valid
+ dynamic blocks with only literals and no distance codes --
+ Thanks to "Hot Emu" for the bug report and sample file
+- Add a note to puff.c on no distance codes case.
+
+Changes in 1.2.1 (17 November 2003)
+- Remove a tab in contrib/gzappend/gzappend.c
+- Update some interfaces in contrib for new zlib functions
+- Update zlib version number in some contrib entries
+- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta]
+- Support shared libraries on Hurd and KFreeBSD [Brown]
+- Fix error in NO_DIVIDE option of adler32.c
+
+Changes in 1.2.0.8 (4 November 2003)
+- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas
+- Add experimental NO_DIVIDE #define in adler32.c
+ - Possibly faster on some processors (let me know if it is)
+- Correct Z_BLOCK to not return on first inflate call if no wrap
+- Fix strm->data_type on inflate() return to correctly indicate EOB
+- Add deflatePrime() function for appending in the middle of a byte
+- Add contrib/gzappend for an example of appending to a stream
+- Update win32/DLL_FAQ.txt [Truta]
+- Delete Turbo C comment in README [Truta]
+- Improve some indentation in zconf.h [Truta]
+- Fix infinite loop on bad input in configure script [Church]
+- Fix gzeof() for concatenated gzip files [Johnson]
+- Add example to contrib/visual-basic.txt [Michael B.]
+- Add -p to mkdir's in Makefile.in [vda]
+- Fix configure to properly detect presence or lack of printf functions
+- Add AS400 support [Monnerat]
+- Add a little Cygwin support [Wilson]
+
+Changes in 1.2.0.7 (21 September 2003)
+- Correct some debug formats in contrib/infback9
+- Cast a type in a debug statement in trees.c
+- Change search and replace delimiter in configure from % to # [Beebe]
+- Update contrib/untgz to 0.2 with various fixes [Truta]
+- Add build support for Amiga [Nikl]
+- Remove some directories in old that have been updated to 1.2
+- Add dylib building for Mac OS X in configure and Makefile.in
+- Remove old distribution stuff from Makefile
+- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X
+- Update links in README
+
+Changes in 1.2.0.6 (13 September 2003)
+- Minor FAQ updates
+- Update contrib/minizip to 1.00 [Vollant]
+- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta]
+- Update POSTINC comment for 68060 [Nikl]
+- Add contrib/infback9 with deflate64 decoding (unsupported)
+- For MVS define NO_vsnprintf and undefine FAR [van Burik]
+- Add pragma for fdopen on MVS [van Burik]
+
+Changes in 1.2.0.5 (8 September 2003)
+- Add OF to inflateBackEnd() declaration in zlib.h
+- Remember start when using gzdopen in the middle of a file
+- Use internal off_t counters in gz* functions to properly handle seeks
+- Perform more rigorous check for distance-too-far in inffast.c
+- Add Z_BLOCK flush option to return from inflate at block boundary
+- Set strm->data_type on return from inflate
+ - Indicate bits unused, if at block boundary, and if in last block
+- Replace size_t with ptrdiff_t in crc32.c, and check for correct size
+- Add condition so old NO_DEFLATE define still works for compatibility
+- FAQ update regarding the Windows DLL [Truta]
+- INDEX update: add qnx entry, remove aix entry [Truta]
+- Install zlib.3 into mandir [Wilson]
+- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta]
+- Adapt the zlib interface to the new DLL convention guidelines [Truta]
+- Introduce ZLIB_WINAPI macro to allow the export of functions using
+ the WINAPI calling convention, for Visual Basic [Vollant, Truta]
+- Update msdos and win32 scripts and makefiles [Truta]
+- Export symbols by name, not by ordinal, in win32/zlib.def [Truta]
+- Add contrib/ada [Anisimkov]
+- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta]
+- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant]
+- Add contrib/masm686 [Truta]
+- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm
+ [Truta, Vollant]
+- Update contrib/delphi; rename to contrib/pascal; add example [Truta]
+- Remove contrib/delphi2; add a new contrib/delphi [Truta]
+- Avoid inclusion of the nonstandard <memory.h> in contrib/iostream,
+ and fix some method prototypes [Truta]
+- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip
+ [Truta]
+- Avoid the use of backslash (\) in contrib/minizip [Vollant]
+- Fix file time handling in contrib/untgz; update makefiles [Truta]
+- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines
+ [Vollant]
+- Remove contrib/vstudio/vc15_16 [Vollant]
+- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta]
+- Update README.contrib [Truta]
+- Invert the assignment order of match_head and s->prev[...] in
+ INSERT_STRING [Truta]
+- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings
+ [Truta]
+- Compare function pointers with 0, not with NULL or Z_NULL [Truta]
+- Fix prototype of syncsearch in inflate.c [Truta]
+- Introduce ASMINF macro to be enabled when using an ASM implementation
+ of inflate_fast [Truta]
+- Change NO_DEFLATE to NO_GZCOMPRESS [Truta]
+- Modify test_gzio in example.c to take a single file name as a
+ parameter [Truta]
+- Exit the example.c program if gzopen fails [Truta]
+- Add type casts around strlen in example.c [Truta]
+- Remove casting to sizeof in minigzip.c; give a proper type
+ to the variable compared with SUFFIX_LEN [Truta]
+- Update definitions of STDC and STDC99 in zconf.h [Truta]
+- Synchronize zconf.h with the new Windows DLL interface [Truta]
+- Use SYS16BIT instead of __32BIT__ to distinguish between
+ 16- and 32-bit platforms [Truta]
+- Use far memory allocators in small 16-bit memory models for
+ Turbo C [Truta]
+- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in
+ zlibCompileFlags [Truta]
+- Cygwin has vsnprintf [Wilson]
+- In Windows16, OS_CODE is 0, as in MSDOS [Truta]
+- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson]
+
+Changes in 1.2.0.4 (10 August 2003)
+- Minor FAQ updates
+- Be more strict when checking inflateInit2's windowBits parameter
+- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well
+- Add gzip wrapper option to deflateInit2 using windowBits
+- Add updated QNX rule in configure and qnx directory [Bonnefoy]
+- Make inflate distance-too-far checks more rigorous
+- Clean up FAR usage in inflate
+- Add casting to sizeof() in gzio.c and minigzip.c
+
+Changes in 1.2.0.3 (19 July 2003)
+- Fix silly error in gzungetc() implementation [Vollant]
+- Update contrib/minizip and contrib/vstudio [Vollant]
+- Fix printf format in example.c
+- Correct cdecl support in zconf.in.h [Anisimkov]
+- Minor FAQ updates
+
+Changes in 1.2.0.2 (13 July 2003)
+- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons
+- Attempt to avoid warnings in crc32.c for pointer-int conversion
+- Add AIX to configure, remove aix directory [Bakker]
+- Add some casts to minigzip.c
+- Improve checking after insecure sprintf() or vsprintf() calls
+- Remove #elif's from crc32.c
+- Change leave label to inf_leave in inflate.c and infback.c to avoid
+ library conflicts
+- Remove inflate gzip decoding by default--only enable gzip decoding by
+ special request for stricter backward compatibility
+- Add zlibCompileFlags() function to return compilation information
+- More typecasting in deflate.c to avoid warnings
+- Remove leading underscore from _Capital #defines [Truta]
+- Fix configure to link shared library when testing
+- Add some Windows CE target adjustments [Mai]
+- Remove #define ZLIB_DLL in zconf.h [Vollant]
+- Add zlib.3 [Rodgers]
+- Update RFC URL in deflate.c and algorithm.txt [Mai]
+- Add zlib_dll_FAQ.txt to contrib [Truta]
+- Add UL to some constants [Truta]
+- Update minizip and vstudio [Vollant]
+- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h
+- Expand use of NO_DUMMY_DECL to avoid all dummy structures
+- Added iostream3 to contrib [Schwardt]
+- Replace rewind() with fseek() for WinCE [Truta]
+- Improve setting of zlib format compression level flags
+ - Report 0 for huffman and rle strategies and for level == 0 or 1
+ - Report 2 only for level == 6
+- Only deal with 64K limit when necessary at compile time [Truta]
+- Allow TOO_FAR check to be turned off at compile time [Truta]
+- Add gzclearerr() function [Souza]
+- Add gzungetc() function
+
+Changes in 1.2.0.1 (17 March 2003)
+- Add Z_RLE strategy for run-length encoding [Truta]
+ - When Z_RLE requested, restrict matches to distance one
+ - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE
+- Correct FASTEST compilation to allow level == 0
+- Clean up what gets compiled for FASTEST
+- Incorporate changes to zconf.in.h [Vollant]
+ - Refine detection of Turbo C need for dummy returns
+ - Refine ZLIB_DLL compilation
+ - Include additional header file on VMS for off_t typedef
+- Try to use _vsnprintf where it supplants vsprintf [Vollant]
+- Add some casts in inffast.c
+- Enchance comments in zlib.h on what happens if gzprintf() tries to
+ write more than 4095 bytes before compression
+- Remove unused state from inflateBackEnd()
+- Remove exit(0) from minigzip.c, example.c
+- Get rid of all those darn tabs
+- Add "check" target to Makefile.in that does the same thing as "test"
+- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in
+- Update contrib/inflate86 [Anderson]
+- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant]
+- Add msdos and win32 directories with makefiles [Truta]
+- More additions and improvements to the FAQ
+
+Changes in 1.2.0 (9 March 2003)
+- New and improved inflate code
+ - About 20% faster
+ - Does not allocate 32K window unless and until needed
+ - Automatically detects and decompresses gzip streams
+ - Raw inflate no longer needs an extra dummy byte at end
+ - Added inflateBack functions using a callback interface--even faster
+ than inflate, useful for file utilities (gzip, zip)
+ - Added inflateCopy() function to record state for random access on
+ externally generated deflate streams (e.g. in gzip files)
+ - More readable code (I hope)
+- New and improved crc32()
+ - About 50% faster, thanks to suggestions from Rodney Brown
+- Add deflateBound() and compressBound() functions
+- Fix memory leak in deflateInit2()
+- Permit setting dictionary for raw deflate (for parallel deflate)
+- Fix const declaration for gzwrite()
+- Check for some malloc() failures in gzio.c
+- Fix bug in gzopen() on single-byte file 0x1f
+- Fix bug in gzread() on concatenated file with 0x1f at end of buffer
+ and next buffer doesn't start with 0x8b
+- Fix uncompress() to return Z_DATA_ERROR on truncated input
+- Free memory at end of example.c
+- Remove MAX #define in trees.c (conflicted with some libraries)
+- Fix static const's in deflate.c, gzio.c, and zutil.[ch]
+- Declare malloc() and free() in gzio.c if STDC not defined
+- Use malloc() instead of calloc() in zutil.c if int big enough
+- Define STDC for AIX
+- Add aix/ with approach for compiling shared library on AIX
+- Add HP-UX support for shared libraries in configure
+- Add OpenUNIX support for shared libraries in configure
+- Use $cc instead of gcc to build shared library
+- Make prefix directory if needed when installing
+- Correct Macintosh avoidance of typedef Byte in zconf.h
+- Correct Turbo C memory allocation when under Linux
+- Use libz.a instead of -lz in Makefile (assure use of compiled library)
+- Update configure to check for snprintf or vsnprintf functions and their
+ return value, warn during make if using an insecure function
+- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that
+ is lost when library is used--resolution is to build new zconf.h
+- Documentation improvements (in zlib.h):
+ - Document raw deflate and inflate
+ - Update RFCs URL
+ - Point out that zlib and gzip formats are different
+ - Note that Z_BUF_ERROR is not fatal
+ - Document string limit for gzprintf() and possible buffer overflow
+ - Note requirement on avail_out when flushing
+ - Note permitted values of flush parameter of inflate()
+- Add some FAQs (and even answers) to the FAQ
+- Add contrib/inflate86/ for x86 faster inflate
+- Add contrib/blast/ for PKWare Data Compression Library decompression
+- Add contrib/puff/ simple inflate for deflate format description
+
+Changes in 1.1.4 (11 March 2002)
+- ZFREE was repeated on same allocation on some error conditions.
+ This creates a security problem described in
+ http://www.zlib.org/advisory-2002-03-11.txt
+- Returned incorrect error (Z_MEM_ERROR) on some invalid data
+- Avoid accesses before window for invalid distances with inflate window
+ less than 32K.
+- force windowBits > 8 to avoid a bug in the encoder for a window size
+ of 256 bytes. (A complete fix will be available in 1.1.5).
+
+Changes in 1.1.3 (9 July 1998)
+- fix "an inflate input buffer bug that shows up on rare but persistent
+ occasions" (Mark)
+- fix gzread and gztell for concatenated .gz files (Didier Le Botlan)
+- fix gzseek(..., SEEK_SET) in write mode
+- fix crc check after a gzeek (Frank Faubert)
+- fix miniunzip when the last entry in a zip file is itself a zip file
+ (J Lillge)
+- add contrib/asm586 and contrib/asm686 (Brian Raiter)
+ See http://www.muppetlabs.com/~breadbox/software/assembly.html
+- add support for Delphi 3 in contrib/delphi (Bob Dellaca)
+- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti)
+- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren)
+- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks)
+- added a FAQ file
+
+- Support gzdopen on Mac with Metrowerks (Jason Linhart)
+- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart)
+- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young)
+- avoid some warnings with Borland C (Tom Tanner)
+- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant)
+- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant)
+- allow several arguments to configure (Tim Mooney, Frodo Looijaard)
+- use libdir and includedir in Makefile.in (Tim Mooney)
+- support shared libraries on OSF1 V4 (Tim Mooney)
+- remove so_locations in "make clean" (Tim Mooney)
+- fix maketree.c compilation error (Glenn, Mark)
+- Python interface to zlib now in Python 1.5 (Jeremy Hylton)
+- new Makefile.riscos (Rich Walker)
+- initialize static descriptors in trees.c for embedded targets (Nick Smith)
+- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith)
+- add the OS/2 files in Makefile.in too (Andrew Zabolotny)
+- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane)
+- fix maketree.c to allow clean compilation of inffixed.h (Mark)
+- fix parameter check in deflateCopy (Gunther Nikl)
+- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler)
+- Many portability patches by Christian Spieler:
+ . zutil.c, zutil.h: added "const" for zmem*
+ . Make_vms.com: fixed some typos
+ . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists
+ . msdos/Makefile.msc: remove "default rtl link library" info from obj files
+ . msdos/Makefile.*: use model-dependent name for the built zlib library
+ . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc:
+ new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT)
+- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane)
+- replace __far with _far for better portability (Christian Spieler, Tom Lane)
+- fix test for errno.h in configure (Tim Newsham)
+
+Changes in 1.1.2 (19 March 98)
+- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant)
+ See http://www.winimage.com/zLibDll/unzip.html
+- preinitialize the inflate tables for fixed codes, to make the code
+ completely thread safe (Mark)
+- some simplifications and slight speed-up to the inflate code (Mark)
+- fix gzeof on non-compressed files (Allan Schrum)
+- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs)
+- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn)
+- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny)
+- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori)
+- do not wrap extern "C" around system includes (Tom Lane)
+- mention zlib binding for TCL in README (Andreas Kupries)
+- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert)
+- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson)
+- allow "configure --prefix $HOME" (Tim Mooney)
+- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson)
+- move Makefile.sas to amiga/Makefile.sas
+
+Changes in 1.1.1 (27 Feb 98)
+- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson)
+- remove block truncation heuristic which had very marginal effect for zlib
+ (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the
+ compression ratio on some files. This also allows inlining _tr_tally for
+ matches in deflate_slow.
+- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier)
+
+Changes in 1.1.0 (24 Feb 98)
+- do not return STREAM_END prematurely in inflate (John Bowler)
+- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler)
+- compile with -DFASTEST to get compression code optimized for speed only
+- in minigzip, try mmap'ing the input file first (Miguel Albrecht)
+- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain
+ on Sun but significant on HP)
+
+- add a pointer to experimental unzip library in README (Gilles Vollant)
+- initialize variable gcc in configure (Chris Herborth)
+
+Changes in 1.0.9 (17 Feb 1998)
+- added gzputs and gzgets functions
+- do not clear eof flag in gzseek (Mark Diekhans)
+- fix gzseek for files in transparent mode (Mark Diekhans)
+- do not assume that vsprintf returns the number of bytes written (Jens Krinke)
+- replace EXPORT with ZEXPORT to avoid conflict with other programs
+- added compress2 in zconf.h, zlib.def, zlib.dnt
+- new asm code from Gilles Vollant in contrib/asm386
+- simplify the inflate code (Mark):
+ . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new()
+ . ZALLOC the length list in inflate_trees_fixed() instead of using stack
+ . ZALLOC the value area for huft_build() instead of using stack
+ . Simplify Z_FINISH check in inflate()
+
+- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8
+- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi)
+- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with
+ the declaration of FAR (Gilles VOllant)
+- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann)
+- read_buf buf parameter of type Bytef* instead of charf*
+- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout)
+- do not redeclare unlink in minigzip.c for WIN32 (John Bowler)
+- fix check for presence of directories in "make install" (Ian Willis)
+
+Changes in 1.0.8 (27 Jan 1998)
+- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant)
+- fix gzgetc and gzputc for big endian systems (Markus Oberhumer)
+- added compress2() to allow setting the compression level
+- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong)
+- use constant arrays for the static trees in trees.c instead of computing
+ them at run time (thanks to Ken Raeburn for this suggestion). To create
+ trees.h, compile with GEN_TREES_H and run "make test".
+- check return code of example in "make test" and display result
+- pass minigzip command line options to file_compress
+- simplifying code of inflateSync to avoid gcc 2.8 bug
+
+- support CC="gcc -Wall" in configure -s (QingLong)
+- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn)
+- fix test for shared library support to avoid compiler warnings
+- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant)
+- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit)
+- do not use fdopen for Metrowerks on Mac (Brad Pettit))
+- add checks for gzputc and gzputc in example.c
+- avoid warnings in gzio.c and deflate.c (Andreas Kleinert)
+- use const for the CRC table (Ken Raeburn)
+- fixed "make uninstall" for shared libraries
+- use Tracev instead of Trace in infblock.c
+- in example.c use correct compressed length for test_sync
+- suppress +vnocompatwarnings in configure for HPUX (not always supported)
+
+Changes in 1.0.7 (20 Jan 1998)
+- fix gzseek which was broken in write mode
+- return error for gzseek to negative absolute position
+- fix configure for Linux (Chun-Chung Chen)
+- increase stack space for MSC (Tim Wegner)
+- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant)
+- define EXPORTVA for gzprintf (Gilles Vollant)
+- added man page zlib.3 (Rick Rodgers)
+- for contrib/untgz, fix makedir() and improve Makefile
+
+- check gzseek in write mode in example.c
+- allocate extra buffer for seeks only if gzseek is actually called
+- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant)
+- add inflateSyncPoint in zconf.h
+- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def
+
+Changes in 1.0.6 (19 Jan 1998)
+- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and
+ gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code)
+- Fix a deflate bug occurring only with compression level 0 (thanks to
+ Andy Buckler for finding this one).
+- In minigzip, pass transparently also the first byte for .Z files.
+- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress()
+- check Z_FINISH in inflate (thanks to Marc Schluper)
+- Implement deflateCopy (thanks to Adam Costello)
+- make static libraries by default in configure, add --shared option.
+- move MSDOS or Windows specific files to directory msdos
+- suppress the notion of partial flush to simplify the interface
+ (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4)
+- suppress history buffer provided by application to simplify the interface
+ (this feature was not implemented anyway in 1.0.4)
+- next_in and avail_in must be initialized before calling inflateInit or
+ inflateInit2
+- add EXPORT in all exported functions (for Windows DLL)
+- added Makefile.nt (thanks to Stephen Williams)
+- added the unsupported "contrib" directory:
+ contrib/asm386/ by Gilles Vollant <info@winimage.com>
+ 386 asm code replacing longest_match().
+ contrib/iostream/ by Kevin Ruland <kevin@rodin.wustl.edu>
+ A C++ I/O streams interface to the zlib gz* functions
+ contrib/iostream2/ by Tyge Løvset <Tyge.Lovset@cmr.no>
+ Another C++ I/O streams interface
+ contrib/untgz/ by "Pedro A. Aranda Guti\irrez" <paag@tid.es>
+ A very simple tar.gz file extractor using zlib
+ contrib/visual-basic.txt by Carlos Rios <c_rios@sonda.cl>
+ How to use compress(), uncompress() and the gz* functions from VB.
+- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression
+ level) in minigzip (thanks to Tom Lane)
+
+- use const for rommable constants in deflate
+- added test for gzseek and gztell in example.c
+- add undocumented function inflateSyncPoint() (hack for Paul Mackerras)
+- add undocumented function zError to convert error code to string
+ (for Tim Smithers)
+- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code.
+- Use default memcpy for Symantec MSDOS compiler.
+- Add EXPORT keyword for check_func (needed for Windows DLL)
+- add current directory to LD_LIBRARY_PATH for "make test"
+- create also a link for libz.so.1
+- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura)
+- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX)
+- added -soname for Linux in configure (Chun-Chung Chen,
+- assign numbers to the exported functions in zlib.def (for Windows DLL)
+- add advice in zlib.h for best usage of deflateSetDictionary
+- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn)
+- allow compilation with ANSI keywords only enabled for TurboC in large model
+- avoid "versionString"[0] (Borland bug)
+- add NEED_DUMMY_RETURN for Borland
+- use variable z_verbose for tracing in debug mode (L. Peter Deutsch).
+- allow compilation with CC
+- defined STDC for OS/2 (David Charlap)
+- limit external names to 8 chars for MVS (Thomas Lund)
+- in minigzip.c, use static buffers only for 16-bit systems
+- fix suffix check for "minigzip -d foo.gz"
+- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee)
+- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau)
+- added makelcc.bat for lcc-win32 (Tom St Denis)
+- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe)
+- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion.
+- check for unistd.h in configure (for off_t)
+- remove useless check parameter in inflate_blocks_free
+- avoid useless assignment of s->check to itself in inflate_blocks_new
+- do not flush twice in gzclose (thanks to Ken Raeburn)
+- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h
+- use NO_ERRNO_H instead of enumeration of operating systems with errno.h
+- work around buggy fclose on pipes for HP/UX
+- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson)
+- fix configure if CC is already equal to gcc
+
+Changes in 1.0.5 (3 Jan 98)
+- Fix inflate to terminate gracefully when fed corrupted or invalid data
+- Use const for rommable constants in inflate
+- Eliminate memory leaks on error conditions in inflate
+- Removed some vestigial code in inflate
+- Update web address in README
+
+Changes in 1.0.4 (24 Jul 96)
+- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF
+ bit, so the decompressor could decompress all the correct data but went
+ on to attempt decompressing extra garbage data. This affected minigzip too.
+- zlibVersion and gzerror return const char* (needed for DLL)
+- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno)
+- use z_error only for DEBUG (avoid problem with DLLs)
+
+Changes in 1.0.3 (2 Jul 96)
+- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS
+ small and medium models; this makes the library incompatible with previous
+ versions for these models. (No effect in large model or on other systems.)
+- return OK instead of BUF_ERROR if previous deflate call returned with
+ avail_out as zero but there is nothing to do
+- added memcmp for non STDC compilers
+- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly)
+- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO)
+- better check for 16-bit mode MSC (avoids problem with Symantec)
+
+Changes in 1.0.2 (23 May 96)
+- added Windows DLL support
+- added a function zlibVersion (for the DLL support)
+- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model)
+- Bytef is define's instead of typedef'd only for Borland C
+- avoid reading uninitialized memory in example.c
+- mention in README that the zlib format is now RFC1950
+- updated Makefile.dj2
+- added algorithm.doc
+
+Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion]
+- fix array overlay in deflate.c which sometimes caused bad compressed data
+- fix inflate bug with empty stored block
+- fix MSDOS medium model which was broken in 0.99
+- fix deflateParams() which could generated bad compressed data.
+- Bytef is define'd instead of typedef'ed (work around Borland bug)
+- added an INDEX file
+- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32),
+ Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas)
+- speed up adler32 for modern machines without auto-increment
+- added -ansi for IRIX in configure
+- static_init_done in trees.c is an int
+- define unlink as delete for VMS
+- fix configure for QNX
+- add configure branch for SCO and HPUX
+- avoid many warnings (unused variables, dead assignments, etc...)
+- no fdopen for BeOS
+- fix the Watcom fix for 32 bit mode (define FAR as empty)
+- removed redefinition of Byte for MKWERKS
+- work around an MWKERKS bug (incorrect merge of all .h files)
+
+Changes in 0.99 (27 Jan 96)
+- allow preset dictionary shared between compressor and decompressor
+- allow compression level 0 (no compression)
+- add deflateParams in zlib.h: allow dynamic change of compression level
+ and compression strategy.
+- test large buffers and deflateParams in example.c
+- add optional "configure" to build zlib as a shared library
+- suppress Makefile.qnx, use configure instead
+- fixed deflate for 64-bit systems (detected on Cray)
+- fixed inflate_blocks for 64-bit systems (detected on Alpha)
+- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2)
+- always return Z_BUF_ERROR when deflate() has nothing to do
+- deflateInit and inflateInit are now macros to allow version checking
+- prefix all global functions and types with z_ with -DZ_PREFIX
+- make falloc completely reentrant (inftrees.c)
+- fixed very unlikely race condition in ct_static_init
+- free in reverse order of allocation to help memory manager
+- use zlib-1.0/* instead of zlib/* inside the tar.gz
+- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith
+ -Wconversion -Wstrict-prototypes -Wmissing-prototypes"
+- allow gzread on concatenated .gz files
+- deflateEnd now returns Z_DATA_ERROR if it was premature
+- deflate is finally (?) fully deterministic (no matches beyond end of input)
+- Document Z_SYNC_FLUSH
+- add uninstall in Makefile
+- Check for __cpluplus in zlib.h
+- Better test in ct_align for partial flush
+- avoid harmless warnings for Borland C++
+- initialize hash_head in deflate.c
+- avoid warning on fdopen (gzio.c) for HP cc -Aa
+- include stdlib.h for STDC compilers
+- include errno.h for Cray
+- ignore error if ranlib doesn't exist
+- call ranlib twice for NeXTSTEP
+- use exec_prefix instead of prefix for libz.a
+- renamed ct_* as _tr_* to avoid conflict with applications
+- clear z->msg in inflateInit2 before any error return
+- initialize opaque in example.c, gzio.c, deflate.c and inflate.c
+- fixed typo in zconf.h (_GNUC__ => __GNUC__)
+- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode)
+- fix typo in Make_vms.com (f$trnlnm -> f$getsyi)
+- in fcalloc, normalize pointer if size > 65520 bytes
+- don't use special fcalloc for 32 bit Borland C++
+- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc...
+- use Z_BINARY instead of BINARY
+- document that gzclose after gzdopen will close the file
+- allow "a" as mode in gzopen.
+- fix error checking in gzread
+- allow skipping .gz extra-field on pipes
+- added reference to Perl interface in README
+- put the crc table in FAR data (I dislike more and more the medium model :)
+- added get_crc_table
+- added a dimension to all arrays (Borland C can't count).
+- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast
+- guard against multiple inclusion of *.h (for precompiled header on Mac)
+- Watcom C pretends to be Microsoft C small model even in 32 bit mode.
+- don't use unsized arrays to avoid silly warnings by Visual C++:
+ warning C4746: 'inflate_mask' : unsized array treated as '__far'
+ (what's wrong with far data in far model?).
+- define enum out of inflate_blocks_state to allow compilation with C++
+
+Changes in 0.95 (16 Aug 95)
+- fix MSDOS small and medium model (now easier to adapt to any compiler)
+- inlined send_bits
+- fix the final (:-) bug for deflate with flush (output was correct but
+ not completely flushed in rare occasions).
+- default window size is same for compression and decompression
+ (it's now sufficient to set MAX_WBITS in zconf.h).
+- voidp -> voidpf and voidnp -> voidp (for consistency with other
+ typedefs and because voidnp was not near in large model).
+
+Changes in 0.94 (13 Aug 95)
+- support MSDOS medium model
+- fix deflate with flush (could sometimes generate bad output)
+- fix deflateReset (zlib header was incorrectly suppressed)
+- added support for VMS
+- allow a compression level in gzopen()
+- gzflush now calls fflush
+- For deflate with flush, flush even if no more input is provided.
+- rename libgz.a as libz.a
+- avoid complex expression in infcodes.c triggering Turbo C bug
+- work around a problem with gcc on Alpha (in INSERT_STRING)
+- don't use inline functions (problem with some gcc versions)
+- allow renaming of Byte, uInt, etc... with #define.
+- avoid warning about (unused) pointer before start of array in deflate.c
+- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c
+- avoid reserved word 'new' in trees.c
+
+Changes in 0.93 (25 June 95)
+- temporarily disable inline functions
+- make deflate deterministic
+- give enough lookahead for PARTIAL_FLUSH
+- Set binary mode for stdin/stdout in minigzip.c for OS/2
+- don't even use signed char in inflate (not portable enough)
+- fix inflate memory leak for segmented architectures
+
+Changes in 0.92 (3 May 95)
+- don't assume that char is signed (problem on SGI)
+- Clear bit buffer when starting a stored block
+- no memcpy on Pyramid
+- suppressed inftest.c
+- optimized fill_window, put longest_match inline for gcc
+- optimized inflate on stored blocks.
+- untabify all sources to simplify patches
+
+Changes in 0.91 (2 May 95)
+- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h
+- Document the memory requirements in zconf.h
+- added "make install"
+- fix sync search logic in inflateSync
+- deflate(Z_FULL_FLUSH) now works even if output buffer too short
+- after inflateSync, don't scare people with just "lo world"
+- added support for DJGPP
+
+Changes in 0.9 (1 May 95)
+- don't assume that zalloc clears the allocated memory (the TurboC bug
+ was Mark's bug after all :)
+- let again gzread copy uncompressed data unchanged (was working in 0.71)
+- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented
+- added a test of inflateSync in example.c
+- moved MAX_WBITS to zconf.h because users might want to change that.
+- document explicitly that zalloc(64K) on MSDOS must return a normalized
+ pointer (zero offset)
+- added Makefiles for Microsoft C, Turbo C, Borland C++
+- faster crc32()
+
+Changes in 0.8 (29 April 95)
+- added fast inflate (inffast.c)
+- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this
+ is incompatible with previous versions of zlib which returned Z_OK.
+- work around a TurboC compiler bug (bad code for b << 0, see infutil.h)
+ (actually that was not a compiler bug, see 0.81 above)
+- gzread no longer reads one extra byte in certain cases
+- In gzio destroy(), don't reference a freed structure
+- avoid many warnings for MSDOS
+- avoid the ERROR symbol which is used by MS Windows
+
+Changes in 0.71 (14 April 95)
+- Fixed more MSDOS compilation problems :( There is still a bug with
+ TurboC large model.
+
+Changes in 0.7 (14 April 95)
+- Added full inflate support.
+- Simplified the crc32() interface. The pre- and post-conditioning
+ (one's complement) is now done inside crc32(). WARNING: this is
+ incompatible with previous versions; see zlib.h for the new usage.
+
+Changes in 0.61 (12 April 95)
+- workaround for a bug in TurboC. example and minigzip now work on MSDOS.
+
+Changes in 0.6 (11 April 95)
+- added minigzip.c
+- added gzdopen to reopen a file descriptor as gzFile
+- added transparent reading of non-gziped files in gzread.
+- fixed bug in gzread (don't read crc as data)
+- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose).
+- don't allocate big arrays in the stack (for MSDOS)
+- fix some MSDOS compilation problems
+
+Changes in 0.5:
+- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but
+ not yet Z_FULL_FLUSH.
+- support decompression but only in a single step (forced Z_FINISH)
+- added opaque object for zalloc and zfree.
+- added deflateReset and inflateReset
+- added a variable zlib_version for consistency checking.
+- renamed the 'filter' parameter of deflateInit2 as 'strategy'.
+ Added Z_FILTERED and Z_HUFFMAN_ONLY constants.
+
+Changes in 0.4:
+- avoid "zip" everywhere, use zlib instead of ziplib.
+- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush
+ if compression method == 8.
+- added adler32 and crc32
+- renamed deflateOptions as deflateInit2, call one or the other but not both
+- added the method parameter for deflateInit2.
+- added inflateInit2
+- simplied considerably deflateInit and inflateInit by not supporting
+ user-provided history buffer. This is supported only in deflateInit2
+ and inflateInit2.
+
+Changes in 0.3:
+- prefix all macro names with Z_
+- use Z_FINISH instead of deflateEnd to finish compression.
+- added Z_HUFFMAN_ONLY
+- added gzerror()
diff --git a/compat/zlib/FAQ b/compat/zlib/FAQ
new file mode 100644
index 0000000..99b7cf9
--- /dev/null
+++ b/compat/zlib/FAQ
@@ -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.
diff --git a/compat/zlib/INDEX b/compat/zlib/INDEX
new file mode 100644
index 0000000..2ba0641
--- /dev/null
+++ b/compat/zlib/INDEX
@@ -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
diff --git a/compat/zlib/Makefile b/compat/zlib/Makefile
new file mode 100644
index 0000000..6bba86c
--- /dev/null
+++ b/compat/zlib/Makefile
@@ -0,0 +1,5 @@
+all:
+ -@echo "Please use ./configure first. Thank you."
+
+distclean:
+ make -f Makefile.in distclean
diff --git a/compat/zlib/Makefile.in b/compat/zlib/Makefile.in
new file mode 100644
index 0000000..c61aa30
--- /dev/null
+++ b/compat/zlib/Makefile.in
@@ -0,0 +1,288 @@
+# Makefile for zlib
+# Copyright (C) 1995-2013 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 -DDEBUG
+#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.8
+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
+
+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: test/infcover.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ 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: test/example.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/example.c
+
+minigzip.o: test/minigzip.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -c -o $@ test/minigzip.c
+
+example64.o: test/example.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/example.c
+
+minigzip64.o: test/minigzip.c zlib.h zconf.h
+ $(CC) $(CFLAGS) -I. -D_FILE_OFFSET_BITS=64 -c -o $@ test/minigzip.c
+
+.SUFFIXES: .lo
+
+.c.lo:
+ -@mkdir objs 2>/dev/null || test -d objs
+ $(CC) $(SFLAGS) -DPIC -c -o objs/$*.o $<
+ -@mv objs/$*.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
+ cp $(STATICLIB) $(DESTDIR)$(libdir)
+ chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB)
+ -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1
+ -@if test -n "$(SHAREDLIBV)"; then \
+ 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
+ cp zlib.3 $(DESTDIR)$(man3dir)
+ chmod 644 $(DESTDIR)$(man3dir)/zlib.3
+ 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
+ cp 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: zlib.3
+ groff -mandoc -f H -T ps zlib.3 | ps2pdf - zlib.3.pdf
+
+zconf.h.cmakein: 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 zconf.h.in > zconf.h.cmakein &&\
+ touch -r zconf.h.in zconf.h.cmakein &&\
+ rm $$TEMPFILE
+
+zconf: zconf.h.in
+ cp -p 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
+ -@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 Makefile.in Makefile
+
+tags:
+ etags *.[ch]
+
+depend:
+ makedepend -- $(CFLAGS) -- *.[ch]
+
+# DO NOT DELETE THIS LINE -- make depend depends on it.
+
+adler32.o zutil.o: zutil.h zlib.h zconf.h
+gzclose.o gzlib.o gzread.o gzwrite.o: zlib.h zconf.h gzguts.h
+compress.o example.o minigzip.o uncompr.o: zlib.h zconf.h
+crc32.o: zutil.h zlib.h zconf.h crc32.h
+deflate.o: deflate.h zutil.h zlib.h zconf.h
+infback.o inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
+inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+inftrees.o: zutil.h zlib.h zconf.h inftrees.h
+trees.o: deflate.h zutil.h zlib.h zconf.h trees.h
+
+adler32.lo zutil.lo: zutil.h zlib.h zconf.h
+gzclose.lo gzlib.lo gzread.lo gzwrite.lo: zlib.h zconf.h gzguts.h
+compress.lo example.lo minigzip.lo uncompr.lo: zlib.h zconf.h
+crc32.lo: zutil.h zlib.h zconf.h crc32.h
+deflate.lo: deflate.h zutil.h zlib.h zconf.h
+infback.lo inflate.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h inffixed.h
+inffast.lo: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h
+inftrees.lo: zutil.h zlib.h zconf.h inftrees.h
+trees.lo: deflate.h zutil.h zlib.h zconf.h trees.h
diff --git a/compat/zlib/README b/compat/zlib/README
new file mode 100644
index 0000000..5ca9d12
--- /dev/null
+++ b/compat/zlib/README
@@ -0,0 +1,115 @@
+ZLIB DATA COMPRESSION LIBRARY
+
+zlib 1.2.8 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.8 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-2013 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.
diff --git a/compat/zlib/adler32.c b/compat/zlib/adler32.c
new file mode 100644
index 0000000..a868f07
--- /dev/null
+++ b/compat/zlib/adler32.c
@@ -0,0 +1,179 @@
+/* adler32.c -- compute the Adler-32 checksum of a data stream
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/* @(#) $Id$ */
+
+#include "zutil.h"
+
+#define local static
+
+local uLong adler32_combine_ OF((uLong adler1, uLong adler2, z_off64_t len2));
+
+#define BASE 65521 /* 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(adler, buf, len)
+ uLong adler;
+ const Bytef *buf;
+ uInt 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);
+}
+
+/* ========================================================================= */
+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 >= (BASE << 1)) sum2 -= (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);
+}
diff --git a/compat/zlib/amiga/Makefile.pup b/compat/zlib/amiga/Makefile.pup
new file mode 100644
index 0000000..8940c12
--- /dev/null
+++ b/compat/zlib/amiga/Makefile.pup
@@ -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
diff --git a/compat/zlib/amiga/Makefile.sas b/compat/zlib/amiga/Makefile.sas
new file mode 100644
index 0000000..749e291
--- /dev/null
+++ b/compat/zlib/amiga/Makefile.sas
@@ -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
diff --git a/compat/zlib/as400/bndsrc b/compat/zlib/as400/bndsrc
new file mode 100644
index 0000000..98814fd
--- /dev/null
+++ b/compat/zlib/as400/bndsrc
@@ -0,0 +1,215 @@
+STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB')
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.1.3 entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("adler32")
+
+/********************************************************************/
+/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("compress")
+ EXPORT SYMBOL("compress2")
+
+/********************************************************************/
+/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("crc32")
+ EXPORT SYMBOL("get_crc_table")
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("deflate")
+ EXPORT SYMBOL("deflateEnd")
+ EXPORT SYMBOL("deflateSetDictionary")
+ EXPORT SYMBOL("deflateCopy")
+ EXPORT SYMBOL("deflateReset")
+ EXPORT SYMBOL("deflateParams")
+ EXPORT SYMBOL("deflatePrime")
+ EXPORT SYMBOL("deflateInit_")
+ EXPORT SYMBOL("deflateInit2_")
+
+/********************************************************************/
+/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzopen")
+ EXPORT SYMBOL("gzdopen")
+ EXPORT SYMBOL("gzsetparams")
+ EXPORT SYMBOL("gzread")
+ EXPORT SYMBOL("gzwrite")
+ EXPORT SYMBOL("gzprintf")
+ EXPORT SYMBOL("gzputs")
+ EXPORT SYMBOL("gzgets")
+ EXPORT SYMBOL("gzputc")
+ EXPORT SYMBOL("gzgetc")
+ EXPORT SYMBOL("gzflush")
+ EXPORT SYMBOL("gzseek")
+ EXPORT SYMBOL("gzrewind")
+ EXPORT SYMBOL("gztell")
+ EXPORT SYMBOL("gzeof")
+ EXPORT SYMBOL("gzclose")
+ EXPORT SYMBOL("gzerror")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflate")
+ EXPORT SYMBOL("inflateEnd")
+ EXPORT SYMBOL("inflateSetDictionary")
+ EXPORT SYMBOL("inflateSync")
+ EXPORT SYMBOL("inflateReset")
+ EXPORT SYMBOL("inflateInit_")
+ EXPORT SYMBOL("inflateInit2_")
+ EXPORT SYMBOL("inflateSyncPoint")
+
+/********************************************************************/
+/* *MODULE UNCOMPR ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("uncompress")
+
+/********************************************************************/
+/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("zlibVersion")
+ EXPORT SYMBOL("zError")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.1 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE COMPRESS ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("compressBound")
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("deflateBound")
+
+/********************************************************************/
+/* *MODULE GZIO ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzungetc")
+ EXPORT SYMBOL("gzclearerr")
+
+/********************************************************************/
+/* *MODULE INFBACK ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateBack")
+ EXPORT SYMBOL("inflateBackEnd")
+ EXPORT SYMBOL("inflateBackInit_")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateCopy")
+
+/********************************************************************/
+/* *MODULE ZUTIL ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("zlibCompileFlags")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.5 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE ADLER32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("adler32_combine")
+ EXPORT SYMBOL("adler32_combine64")
+
+/********************************************************************/
+/* *MODULE CRC32 ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("crc32_combine")
+ EXPORT SYMBOL("crc32_combine64")
+
+/********************************************************************/
+/* *MODULE GZLIB ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzbuffer")
+ EXPORT SYMBOL("gzoffset")
+ EXPORT SYMBOL("gzoffset64")
+ EXPORT SYMBOL("gzopen64")
+ EXPORT SYMBOL("gzseek64")
+ EXPORT SYMBOL("gztell64")
+
+/********************************************************************/
+/* *MODULE GZREAD ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzclose_r")
+
+/********************************************************************/
+/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzclose_w")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateMark")
+ EXPORT SYMBOL("inflatePrime")
+ EXPORT SYMBOL("inflateReset2")
+ EXPORT SYMBOL("inflateUndermine")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.6 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE DEFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("deflateResetKeep")
+ EXPORT SYMBOL("deflatePending")
+
+/********************************************************************/
+/* *MODULE GZWRITE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("gzgetc_")
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateResetKeep")
+
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+/* Version 1.2.8 additional entry points. */
+/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
+
+/********************************************************************/
+/* *MODULE INFLATE ZLIB 01/02/01 00:15:09 */
+/********************************************************************/
+
+ EXPORT SYMBOL("inflateGetDictionary")
+
+ENDPGMEXP
diff --git a/compat/zlib/as400/compile.clp b/compat/zlib/as400/compile.clp
new file mode 100644
index 0000000..e3f47c6
--- /dev/null
+++ b/compat/zlib/as400/compile.clp
@@ -0,0 +1,110 @@
+/******************************************************************************/
+/* */
+/* ZLIB */
+/* */
+/* Compile sources into modules and link them into a service program. */
+/* */
+/******************************************************************************/
+
+ PGM
+
+/* Configuration adjustable parameters. */
+
+ DCL VAR(&SRCLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('ZLIB') /* Source library. */
+ DCL VAR(&SRCFILE) TYPE(*CHAR) LEN(10) +
+ VALUE('SOURCES') /* Source member file. */
+ DCL VAR(&CTLFILE) TYPE(*CHAR) LEN(10) +
+ VALUE('TOOLS') /* Control member file. */
+
+ DCL VAR(&MODLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('ZLIB') /* Module library. */
+
+ DCL VAR(&SRVLIB) TYPE(*CHAR) LEN(10) +
+ VALUE('LGPL') /* Service program library. */
+
+ DCL VAR(&CFLAGS) TYPE(*CHAR) +
+ VALUE('OPTIMIZE(40)') /* Compile options. */
+
+ DCL VAR(&TGTRLS) TYPE(*CHAR) +
+ VALUE('V5R3M0') /* Target release. */
+
+
+/* Working storage. */
+
+ DCL VAR(&CMDLEN) TYPE(*DEC) LEN(15 5) VALUE(300) /* Command length. */
+ DCL VAR(&CMD) TYPE(*CHAR) LEN(512)
+ DCL VAR(&FIXDCMD) TYPE(*CHAR) LEN(512)
+
+
+/* Compile sources into modules. */
+
+ CHGVAR VAR(&FIXDCMD) VALUE('CRTCMOD' *BCAT &CFLAGS *BCAT +
+ 'SYSIFCOPT(*IFS64IO)' *BCAT +
+ 'DEFINE(''_LARGEFILE64_SOURCE''' *BCAT +
+ '''_LFS64_LARGEFILE=1'') TGTRLS(' *TCAT &TGTRLS *TCAT +
+ ') SRCFILE(' *TCAT &SRCLIB *TCAT '/' *TCAT +
+ &SRCFILE *TCAT ') MODULE(' *TCAT &MODLIB *TCAT '/')
+
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ADLER32)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'COMPRESS)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'CRC32)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'DEFLATE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZCLOSE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZLIB)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZREAD)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'GZWRITE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFBACK)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFFAST)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFLATE)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'INFTREES)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'TREES)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'UNCOMPR)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+ CHGVAR VAR(&CMD) VALUE(&FIXDCMD *TCAT 'ZUTIL)')
+ CALL PGM(QCMDEXC) PARM(&CMD &CMDLEN)
+
+
+/* Link modules into a service program. */
+
+ CRTSRVPGM SRVPGM(&SRVLIB/ZLIB) +
+ MODULE(&MODLIB/ADLER32 &MODLIB/COMPRESS +
+ &MODLIB/CRC32 &MODLIB/DEFLATE +
+ &MODLIB/GZCLOSE &MODLIB/GZLIB +
+ &MODLIB/GZREAD &MODLIB/GZWRITE +
+ &MODLIB/INFBACK &MODLIB/INFFAST +
+ &MODLIB/INFLATE &MODLIB/INFTREES +
+ &MODLIB/TREES &MODLIB/UNCOMPR +
+ &MODLIB/ZUTIL) +
+ SRCFILE(&SRCLIB/&CTLFILE) SRCMBR(BNDSRC) +
+ TEXT('ZLIB 1.2.8') TGTRLS(&TGTRLS)
+
+ ENDPGM
diff --git a/compat/zlib/as400/readme.txt b/compat/zlib/as400/readme.txt
new file mode 100644
index 0000000..7b5d93b
--- /dev/null
+++ b/compat/zlib/as400/readme.txt
@@ -0,0 +1,115 @@
+ ZLIB version 1.2.8 for AS400 installation instructions
+
+I) From an AS400 *SAVF file:
+
+1) Unpacking archive to an AS400 save file
+
+On the AS400:
+
+_ Create the ZLIB AS400 library:
+
+ CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+_ Create a work save file, for example:
+
+ CRTSAVF FILE(ZLIB/ZLIBSAVF)
+
+On a PC connected to the target AS400:
+
+_ Unpack the save file image to a PC file "ZLIBSAVF"
+_ Upload this file into the save file on the AS400, for example
+ using ftp in BINARY mode.
+
+
+2) Populating the ZLIB AS400 source library
+
+On the AS400:
+
+_ Extract the saved objects into the ZLIB AS400 library using:
+
+RSTOBJ OBJ(*ALL) SAVLIB(ZLIB) DEV(*SAVF) SAVF(ZLIB/ZLIBSAVF) RSTLIB(ZLIB)
+
+
+3) Customize installation:
+
+_ Edit CL member ZLIB/TOOLS(COMPILE) and change parameters if needed,
+ according to the comments.
+
+_ Compile this member with:
+
+ CRTCLPGM PGM(ZLIB/COMPILE) SRCFILE(ZLIB/TOOLS) SRCMBR(COMPILE)
+
+
+4) Compile and generate the service program:
+
+_ This can now be done by executing:
+
+ CALL PGM(ZLIB/COMPILE)
+
+
+
+II) From the original source distribution:
+
+1) On the AS400, create the source library:
+
+ CRTLIB LIB(ZLIB) TYPE(*PROD) TEXT('ZLIB compression API library')
+
+2) Create the source files:
+
+ CRTSRCPF FILE(ZLIB/SOURCES) RCDLEN(112) TEXT('ZLIB library modules')
+ CRTSRCPF FILE(ZLIB/H) RCDLEN(112) TEXT('ZLIB library includes')
+ CRTSRCPF FILE(ZLIB/TOOLS) RCDLEN(112) TEXT('ZLIB library control utilities')
+
+3) From the machine hosting the distribution files, upload them (with
+ FTP in text mode, for example) according to the following table:
+
+ Original AS400 AS400 AS400 AS400
+ file file member type description
+ SOURCES Original ZLIB C subprogram sources
+ adler32.c ADLER32 C ZLIB - Compute the Adler-32 checksum of a dta strm
+ compress.c COMPRESS C ZLIB - Compress a memory buffer
+ crc32.c CRC32 C ZLIB - Compute the CRC-32 of a data stream
+ deflate.c DEFLATE C ZLIB - Compress data using the deflation algorithm
+ gzclose.c GZCLOSE C ZLIB - Close .gz files
+ gzlib.c GZLIB C ZLIB - Miscellaneous .gz files IO support
+ gzread.c GZREAD C ZLIB - Read .gz files
+ gzwrite.c GZWRITE C ZLIB - Write .gz files
+ infback.c INFBACK C ZLIB - Inflate using a callback interface
+ inffast.c INFFAST C ZLIB - Fast proc. literals & length/distance pairs
+ inflate.c INFLATE C ZLIB - Interface to inflate modules
+ inftrees.c INFTREES C ZLIB - Generate Huffman trees for efficient decode
+ trees.c TREES C ZLIB - Output deflated data using Huffman coding
+ uncompr.c UNCOMPR C ZLIB - Decompress a memory buffer
+ zutil.c ZUTIL C ZLIB - Target dependent utility functions
+ H Original ZLIB C and ILE/RPG include files
+ crc32.h CRC32 C ZLIB - CRC32 tables
+ deflate.h DEFLATE C ZLIB - Internal compression state
+ gzguts.h GZGUTS C ZLIB - Definitions for the gzclose module
+ inffast.h INFFAST C ZLIB - Header to use inffast.c
+ inffixed.h INFFIXED C ZLIB - Table for decoding fixed codes
+ inflate.h INFLATE C ZLIB - Internal inflate state definitions
+ inftrees.h INFTREES C ZLIB - Header to use inftrees.c
+ trees.h TREES C ZLIB - Created automatically with -DGEN_TREES_H
+ zconf.h ZCONF C ZLIB - Compression library configuration
+ zlib.h ZLIB C ZLIB - Compression library C user interface
+ as400/zlib.inc ZLIB.INC RPGLE ZLIB - Compression library ILE RPG user interface
+ zutil.h ZUTIL C ZLIB - Internal interface and configuration
+ TOOLS Building source software & AS/400 README
+ as400/bndsrc BNDSRC Entry point exportation list
+ as400/compile.clp COMPILE CLP Compile sources & generate service program
+ as400/readme.txt README TXT Installation instructions
+
+4) Continue as in I)3).
+
+
+
+
+Notes: For AS400 ILE RPG programmers, a /copy member defining the ZLIB
+ API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC).
+ Please read comments in this member for more information.
+
+ Remember that most foreign textual data are ASCII coded: this
+ implementation does not handle conversion from/to ASCII, so
+ text data code conversions must be done explicitely.
+
+ Mainly for the reason above, always open zipped files in binary mode.
diff --git a/compat/zlib/as400/zlib.inc b/compat/zlib/as400/zlib.inc
new file mode 100644
index 0000000..7341a6d
--- /dev/null
+++ b/compat/zlib/as400/zlib.inc
@@ -0,0 +1,451 @@
+ * ZLIB.INC - Interface to the general purpose compression library
+ *
+ * ILE RPG400 version by Patrick Monnerat, DATASPHERE.
+ * Version 1.2.8
+ *
+ *
+ * WARNING:
+ * Procedures inflateInit(), inflateInit2(), deflateInit(),
+ * deflateInit2() and inflateBackInit() need to be called with
+ * two additional arguments:
+ * the package version string and the stream control structure.
+ * size. This is needed because RPG lacks some macro feature.
+ * Call these procedures as:
+ * inflateInit(...: ZLIB_VERSION: %size(z_stream))
+ *
+ /if not defined(ZLIB_H_)
+ /define ZLIB_H_
+ *
+ **************************************************************************
+ * Constants
+ **************************************************************************
+ *
+ * Versioning information.
+ *
+ D ZLIB_VERSION C '1.2.8'
+ D ZLIB_VERNUM C X'1280'
+ D ZLIB_VER_MAJOR C 1
+ D ZLIB_VER_MINOR C 2
+ D ZLIB_VER_REVISION...
+ D C 8
+ D ZLIB_VER_SUBREVISION...
+ D C 0
+ *
+ * Other equates.
+ *
+ D Z_NO_FLUSH C 0
+ D Z_PARTIAL_FLUSH...
+ D C 1
+ D Z_SYNC_FLUSH C 2
+ D Z_FULL_FLUSH C 3
+ D Z_FINISH C 4
+ D Z_BLOCK C 5
+ D Z_TREES C 6
+ *
+ D Z_OK C 0
+ D Z_STREAM_END C 1
+ D Z_NEED_DICT C 2
+ D Z_ERRNO C -1
+ D Z_STREAM_ERROR C -2
+ D Z_DATA_ERROR C -3
+ D Z_MEM_ERROR C -4
+ D Z_BUF_ERROR C -5
+ DZ_VERSION_ERROR C -6
+ *
+ D Z_NO_COMPRESSION...
+ D C 0
+ D Z_BEST_SPEED C 1
+ D Z_BEST_COMPRESSION...
+ D C 9
+ D Z_DEFAULT_COMPRESSION...
+ D C -1
+ *
+ D Z_FILTERED C 1
+ D Z_HUFFMAN_ONLY C 2
+ D Z_RLE C 3
+ D Z_DEFAULT_STRATEGY...
+ D C 0
+ *
+ D Z_BINARY C 0
+ D Z_ASCII C 1
+ D Z_UNKNOWN C 2
+ *
+ D Z_DEFLATED C 8
+ *
+ D Z_NULL C 0
+ *
+ **************************************************************************
+ * Types
+ **************************************************************************
+ *
+ D z_streamp S * Stream struct ptr
+ D gzFile S * File pointer
+ D z_off_t S 10i 0 Stream offsets
+ D z_off64_t S 20i 0 Stream offsets
+ *
+ **************************************************************************
+ * Structures
+ **************************************************************************
+ *
+ * The GZIP encode/decode stream support structure.
+ *
+ D z_stream DS align based(z_streamp)
+ D zs_next_in * Next input byte
+ D zs_avail_in 10U 0 Byte cnt at next_in
+ D zs_total_in 10U 0 Total bytes read
+ D zs_next_out * Output buffer ptr
+ D zs_avail_out 10U 0 Room left @ next_out
+ D zs_total_out 10U 0 Total bytes written
+ D zs_msg * Last errmsg or null
+ D zs_state * Internal state
+ D zs_zalloc * procptr Int. state allocator
+ D zs_free * procptr Int. state dealloc.
+ D zs_opaque * Private alloc. data
+ D zs_data_type 10i 0 ASC/BIN best guess
+ D zs_adler 10u 0 Uncompr. adler32 val
+ D 10U 0 Reserved
+ D 10U 0 Ptr. alignment
+ *
+ **************************************************************************
+ * Utility function prototypes
+ **************************************************************************
+ *
+ D compress PR 10I 0 extproc('compress')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10u 0 value Source length
+ *
+ D compress2 PR 10I 0 extproc('compress2')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10U 0 value Source length
+ D level 10I 0 value Compression level
+ *
+ D compressBound PR 10U 0 extproc('compressBound')
+ D sourceLen 10U 0 value
+ *
+ D uncompress PR 10I 0 extproc('uncompress')
+ D dest 65535 options(*varsize) Destination buffer
+ D destLen 10U 0 Destination length
+ D source 65535 const options(*varsize) Source buffer
+ D sourceLen 10U 0 value Source length
+ *
+ /if not defined(LARGE_FILES)
+ D gzopen PR extproc('gzopen')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ /else
+ D gzopen PR extproc('gzopen64')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ *
+ D gzopen64 PR extproc('gzopen64')
+ D like(gzFile)
+ D path * value options(*string) File pathname
+ D mode * value options(*string) Open mode
+ /endif
+ *
+ D gzdopen PR extproc('gzdopen')
+ D like(gzFile)
+ D fd 10I 0 value File descriptor
+ D mode * value options(*string) Open mode
+ *
+ D gzbuffer PR 10I 0 extproc('gzbuffer')
+ D file value like(gzFile) File pointer
+ D size 10U 0 value
+ *
+ D gzsetparams PR 10I 0 extproc('gzsetparams')
+ D file value like(gzFile) File pointer
+ D level 10I 0 value
+ D strategy 10I 0 value
+ *
+ D gzread PR 10I 0 extproc('gzread')
+ D file value like(gzFile) File pointer
+ D buf 65535 options(*varsize) Buffer
+ D len 10u 0 value Buffer length
+ *
+ D gzwrite PR 10I 0 extproc('gzwrite')
+ D file value like(gzFile) File pointer
+ D buf 65535 const options(*varsize) Buffer
+ D len 10u 0 value Buffer length
+ *
+ D gzputs PR 10I 0 extproc('gzputs')
+ D file value like(gzFile) File pointer
+ D s * value options(*string) String to output
+ *
+ D gzgets PR * extproc('gzgets')
+ D file value like(gzFile) File pointer
+ D buf 65535 options(*varsize) Read buffer
+ D len 10i 0 value Buffer length
+ *
+ D gzputc PR 10i 0 extproc('gzputc')
+ D file value like(gzFile) File pointer
+ D c 10I 0 value Character to write
+ *
+ D gzgetc PR 10i 0 extproc('gzgetc')
+ D file value like(gzFile) File pointer
+ *
+ D gzgetc_ PR 10i 0 extproc('gzgetc_')
+ D file value like(gzFile) File pointer
+ *
+ D gzungetc PR 10i 0 extproc('gzungetc')
+ D c 10I 0 value Character to push
+ D file value like(gzFile) File pointer
+ *
+ D gzflush PR 10i 0 extproc('gzflush')
+ D file value like(gzFile) File pointer
+ D flush 10I 0 value Type of flush
+ *
+ /if not defined(LARGE_FILES)
+ D gzseek PR extproc('gzseek')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off_t) Offset
+ D whence 10i 0 value Origin
+ /else
+ D gzseek PR extproc('gzseek64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off_t) Offset
+ D whence 10i 0 value Origin
+ *
+ D gzseek64 PR extproc('gzseek64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ D offset value like(z_off64_t) Offset
+ D whence 10i 0 value Origin
+ /endif
+ *
+ D gzrewind PR 10i 0 extproc('gzrewind')
+ D file value like(gzFile) File pointer
+ *
+ /if not defined(LARGE_FILES)
+ D gztell PR extproc('gztell')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ /else
+ D gztell PR extproc('gztell64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ *
+ D gztell64 PR extproc('gztell64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ /endif
+ *
+ /if not defined(LARGE_FILES)
+ D gzoffset PR extproc('gzoffset')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ /else
+ D gzoffset PR extproc('gzoffset64')
+ D like(z_off_t)
+ D file value like(gzFile) File pointer
+ *
+ D gzoffset64 PR extproc('gzoffset64')
+ D like(z_off64_t)
+ D file value like(gzFile) File pointer
+ /endif
+ *
+ D gzeof PR 10i 0 extproc('gzeof')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose_r PR 10i 0 extproc('gzclose_r')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose_w PR 10i 0 extproc('gzclose_w')
+ D file value like(gzFile) File pointer
+ *
+ D gzclose PR 10i 0 extproc('gzclose')
+ D file value like(gzFile) File pointer
+ *
+ D gzerror PR * extproc('gzerror') Error string
+ D file value like(gzFile) File pointer
+ D errnum 10I 0 Error code
+ *
+ D gzclearerr PR extproc('gzclearerr')
+ D file value like(gzFile) File pointer
+ *
+ **************************************************************************
+ * Basic function prototypes
+ **************************************************************************
+ *
+ D zlibVersion PR * extproc('zlibVersion') Version string
+ *
+ D deflateInit PR 10I 0 extproc('deflateInit_') Init. compression
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D deflate PR 10I 0 extproc('deflate') Compress data
+ D strm like(z_stream) Compression stream
+ D flush 10I 0 value Flush type required
+ *
+ D deflateEnd PR 10I 0 extproc('deflateEnd') Termin. compression
+ D strm like(z_stream) Compression stream
+ *
+ D inflateInit PR 10I 0 extproc('inflateInit_') Init. expansion
+ D strm like(z_stream) Expansion stream
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflate PR 10I 0 extproc('inflate') Expand data
+ D strm like(z_stream) Expansion stream
+ D flush 10I 0 value Flush type required
+ *
+ D inflateEnd PR 10I 0 extproc('inflateEnd') Termin. expansion
+ D strm like(z_stream) Expansion stream
+ *
+ **************************************************************************
+ * Advanced function prototypes
+ **************************************************************************
+ *
+ D deflateInit2 PR 10I 0 extproc('deflateInit2_') Init. compression
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D method 10I 0 value Compression method
+ D windowBits 10I 0 value log2(window size)
+ D memLevel 10I 0 value Mem/cmpress tradeoff
+ D strategy 10I 0 value Compression stategy
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D deflateSetDictionary...
+ D PR 10I 0 extproc('deflateSetDictionary') Init. dictionary
+ D strm like(z_stream) Compression stream
+ D dictionary 65535 const options(*varsize) Dictionary bytes
+ D dictLength 10U 0 value Dictionary length
+ *
+ D deflateCopy PR 10I 0 extproc('deflateCopy') Compress strm 2 strm
+ D dest like(z_stream) Destination stream
+ D source like(z_stream) Source stream
+ *
+ D deflateReset PR 10I 0 extproc('deflateReset') End and init. stream
+ D strm like(z_stream) Compression stream
+ *
+ D deflateParams PR 10I 0 extproc('deflateParams') Change level & strat
+ D strm like(z_stream) Compression stream
+ D level 10I 0 value Compression level
+ D strategy 10I 0 value Compression stategy
+ *
+ D deflateBound PR 10U 0 extproc('deflateBound') Change level & strat
+ D strm like(z_stream) Compression stream
+ D sourcelen 10U 0 value Compression level
+ *
+ D deflatePending PR 10I 0 extproc('deflatePending') Change level & strat
+ D strm like(z_stream) Compression stream
+ D pending 10U 0 Pending bytes
+ D bits 10I 0 Pending bits
+ *
+ D deflatePrime PR 10I 0 extproc('deflatePrime') Change level & strat
+ D strm like(z_stream) Compression stream
+ D bits 10I 0 value # of bits to insert
+ D value 10I 0 value Bits to insert
+ *
+ D inflateInit2 PR 10I 0 extproc('inflateInit2_') Init. expansion
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value log2(window size)
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflateSetDictionary...
+ D PR 10I 0 extproc('inflateSetDictionary') Init. dictionary
+ D strm like(z_stream) Expansion stream
+ D dictionary 65535 const options(*varsize) Dictionary bytes
+ D dictLength 10U 0 value Dictionary length
+ *
+ D inflateGetDictionary...
+ D PR 10I 0 extproc('inflateGetDictionary') Get dictionary
+ D strm like(z_stream) Expansion stream
+ D dictionary 65535 options(*varsize) Dictionary bytes
+ D dictLength 10U 0 Dictionary length
+ *
+ D inflateSync PR 10I 0 extproc('inflateSync') Sync. expansion
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateCopy PR 10I 0 extproc('inflateCopy')
+ D dest like(z_stream) Destination stream
+ D source like(z_stream) Source stream
+ *
+ D inflateReset PR 10I 0 extproc('inflateReset') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateReset2 PR 10I 0 extproc('inflateReset2') End and init. stream
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value Log2(buffer size)
+ *
+ D inflatePrime PR 10I 0 extproc('inflatePrime') Insert bits
+ D strm like(z_stream) Expansion stream
+ D bits 10I 0 value Bit count
+ D value 10I 0 value Bits to insert
+ *
+ D inflateMark PR 10I 0 extproc('inflateMark') Get inflate info
+ D strm like(z_stream) Expansion stream
+ *
+ D inflateBackInit...
+ D PR 10I 0 extproc('inflateBackInit_')
+ D strm like(z_stream) Expansion stream
+ D windowBits 10I 0 value Log2(buffer size)
+ D window 65535 options(*varsize) Buffer
+ D version * value options(*string) Version string
+ D stream_size 10i 0 value Stream struct. size
+ *
+ D inflateBack PR 10I 0 extproc('inflateBack')
+ D strm like(z_stream) Expansion stream
+ D in * value procptr Input function
+ D in_desc * value Input descriptor
+ D out * value procptr Output function
+ D out_desc * value Output descriptor
+ *
+ D inflateBackEnd PR 10I 0 extproc('inflateBackEnd')
+ D strm like(z_stream) Expansion stream
+ *
+ D zlibCompileFlags...
+ D PR 10U 0 extproc('zlibCompileFlags')
+ *
+ **************************************************************************
+ * Checksum function prototypes
+ **************************************************************************
+ *
+ D adler32 PR 10U 0 extproc('adler32') New checksum
+ D adler 10U 0 value Old checksum
+ D buf 65535 const options(*varsize) Bytes to accumulate
+ D len 10U 0 value Buffer length
+ *
+ D crc32 PR 10U 0 extproc('crc32') New checksum
+ D crc 10U 0 value Old checksum
+ D buf 65535 const options(*varsize) Bytes to accumulate
+ D len 10U 0 value Buffer length
+ *
+ **************************************************************************
+ * Miscellaneous function prototypes
+ **************************************************************************
+ *
+ D zError PR * extproc('zError') Error string
+ D err 10I 0 value Error code
+ *
+ D inflateSyncPoint...
+ D PR 10I 0 extproc('inflateSyncPoint')
+ D strm like(z_stream) Expansion stream
+ *
+ D get_crc_table PR * extproc('get_crc_table') Ptr to ulongs
+ *
+ D inflateUndermine...
+ D PR 10I 0 extproc('inflateUndermine')
+ D strm like(z_stream) Expansion stream
+ D arg 10I 0 value Error code
+ *
+ D inflateResetKeep...
+ D PR 10I 0 extproc('inflateResetKeep') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ D deflateResetKeep...
+ D PR 10I 0 extproc('deflateResetKeep') End and init. stream
+ D strm like(z_stream) Expansion stream
+ *
+ /endif
diff --git a/compat/zlib/compress.c b/compat/zlib/compress.c
new file mode 100644
index 0000000..6e97626
--- /dev/null
+++ b/compat/zlib/compress.c
@@ -0,0 +1,80 @@
+/* compress.c -- compress a memory buffer
+ * Copyright (C) 1995-2005 Jean-loup Gailly.
+ * 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;
+
+ stream.next_in = (z_const Bytef *)source;
+ stream.avail_in = (uInt)sourceLen;
+#ifdef MAXSEG_64K
+ /* Check for source > 64K on 16-bit machine: */
+ if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
+#endif
+ stream.next_out = dest;
+ stream.avail_out = (uInt)*destLen;
+ if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
+
+ stream.zalloc = (alloc_func)0;
+ stream.zfree = (free_func)0;
+ stream.opaque = (voidpf)0;
+
+ err = deflateInit(&stream, level);
+ if (err != Z_OK) return err;
+
+ err = deflate(&stream, Z_FINISH);
+ if (err != Z_STREAM_END) {
+ deflateEnd(&stream);
+ return err == Z_OK ? Z_BUF_ERROR : err;
+ }
+ *destLen = stream.total_out;
+
+ err = deflateEnd(&stream);
+ return 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;
+}
diff --git a/compat/zlib/configure b/compat/zlib/configure
new file mode 100755
index 0000000..b77a8a8
--- /dev/null
+++ b/compat/zlib/configure
@@ -0,0 +1,831 @@
+#!/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
+
+# 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' < zlib.h`
+VER3=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\\.[0-9]*\).*/\1/p' < zlib.h`
+VER2=`sed -n -e '/VERSION "/s/.*"\([0-9]*\\.[0-9]*\)\\..*/\1/p' < zlib.h`
+VER1=`sed -n -e '/VERSION "/s/.*"\([0-9]*\)\\..*/\1/p' < 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
+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 ;;
+ *)
+ 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 ;;
+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} ${ARCHS}"
+ SFLAGS="${CFLAGS--O3} -fPIC"
+ LDFLAGS="${LDFLAGS} ${ARCHS}"
+ if test $build64 -eq 1; then
+ CFLAGS="${CFLAGS} -m64"
+ SFLAGS="${SFLAGS} -m64"
+ fi
+ if test "${ZLIBGCCWARN}" = "YES"; 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 -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,zlib.map"} ;;
+ *BSD | *bsd* | DragonFly)
+ LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,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
+ ;;
+ 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 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 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 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 < 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#
+/^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 < 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
diff --git a/compat/zlib/contrib/README.contrib b/compat/zlib/contrib/README.contrib
new file mode 100644
index 0000000..c66349b
--- /dev/null
+++ b/compat/zlib/contrib/README.contrib
@@ -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/unzip.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
diff --git a/compat/zlib/contrib/ada/buffer_demo.adb b/compat/zlib/contrib/ada/buffer_demo.adb
new file mode 100644
index 0000000..46b8638
--- /dev/null
+++ b/compat/zlib/contrib/ada/buffer_demo.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/mtest.adb b/compat/zlib/contrib/ada/mtest.adb
new file mode 100644
index 0000000..c4dfd08
--- /dev/null
+++ b/compat/zlib/contrib/ada/mtest.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/read.adb b/compat/zlib/contrib/ada/read.adb
new file mode 100644
index 0000000..1f2efbf
--- /dev/null
+++ b/compat/zlib/contrib/ada/read.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/readme.txt b/compat/zlib/contrib/ada/readme.txt
new file mode 100644
index 0000000..ce4d2ca
--- /dev/null
+++ b/compat/zlib/contrib/ada/readme.txt
@@ -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>
diff --git a/compat/zlib/contrib/ada/test.adb b/compat/zlib/contrib/ada/test.adb
new file mode 100644
index 0000000..90773ac
--- /dev/null
+++ b/compat/zlib/contrib/ada/test.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/zlib-streams.adb b/compat/zlib/contrib/ada/zlib-streams.adb
new file mode 100644
index 0000000..b6497ba
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib-streams.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/zlib-streams.ads b/compat/zlib/contrib/ada/zlib-streams.ads
new file mode 100644
index 0000000..f0193c6b
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib-streams.ads
@@ -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 untill necessary, becouse 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
+ -- becouse 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 becouse all data could be
+ -- processed in the write operation.
+
+ Back : Stream_Access;
+ Reader : Filter_Type;
+ Writer : Filter_Type;
+ end record;
+
+end ZLib.Streams;
diff --git a/compat/zlib/contrib/ada/zlib-thin.adb b/compat/zlib/contrib/ada/zlib-thin.adb
new file mode 100644
index 0000000..0ca4a71
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib-thin.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/zlib-thin.ads b/compat/zlib/contrib/ada/zlib-thin.ads
new file mode 100644
index 0000000..d4407eb
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib-thin.ads
@@ -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, becouse 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;
diff --git a/compat/zlib/contrib/ada/zlib.adb b/compat/zlib/contrib/ada/zlib.adb
new file mode 100644
index 0000000..8b6fd68
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib.adb
@@ -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;
diff --git a/compat/zlib/contrib/ada/zlib.ads b/compat/zlib/contrib/ada/zlib.ads
new file mode 100644
index 0000000..79ffc40
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib.ads
@@ -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;
diff --git a/compat/zlib/contrib/ada/zlib.gpr b/compat/zlib/contrib/ada/zlib.gpr
new file mode 100644
index 0000000..296b22a
--- /dev/null
+++ b/compat/zlib/contrib/ada/zlib.gpr
@@ -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;
diff --git a/compat/zlib/contrib/amd64/amd64-match.S b/compat/zlib/contrib/amd64/amd64-match.S
new file mode 100644
index 0000000..81d4a1c
--- /dev/null
+++ b/compat/zlib/contrib/amd64/amd64-match.S
@@ -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
diff --git a/compat/zlib/contrib/asm686/README.686 b/compat/zlib/contrib/asm686/README.686
new file mode 100644
index 0000000..a0bf3be
--- /dev/null
+++ b/compat/zlib/contrib/asm686/README.686
@@ -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
diff --git a/compat/zlib/contrib/asm686/match.S b/compat/zlib/contrib/asm686/match.S
new file mode 100644
index 0000000..fa42109
--- /dev/null
+++ b/compat/zlib/contrib/asm686/match.S
@@ -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
diff --git a/compat/zlib/contrib/blast/Makefile b/compat/zlib/contrib/blast/Makefile
new file mode 100644
index 0000000..9be80ba
--- /dev/null
+++ b/compat/zlib/contrib/blast/Makefile
@@ -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
diff --git a/compat/zlib/contrib/blast/README b/compat/zlib/contrib/blast/README
new file mode 100644
index 0000000..e3a60b3
--- /dev/null
+++ b/compat/zlib/contrib/blast/README
@@ -0,0 +1,4 @@
+Read blast.h for purpose and usage.
+
+Mark Adler
+madler@alumni.caltech.edu
diff --git a/compat/zlib/contrib/blast/blast.c b/compat/zlib/contrib/blast/blast.c
new file mode 100644
index 0000000..69ef0fe
--- /dev/null
+++ b/compat/zlib/contrib/blast/blast.c
@@ -0,0 +1,446 @@
+/* blast.c
+ * Copyright (C) 2003, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in blast.h
+ * version 1.2, 24 Oct 2012
+ *
+ * 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
+ */
+
+#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 th 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)
+{
+ struct state s; /* input/output state */
+ int err; /* return value */
+
+ /* initialize input state */
+ s.infun = infun;
+ s.inhow = inhow;
+ 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 */
+
+ /* 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, n;
+
+ /* decompress to stdout */
+ ret = blast(inf, stdin, outf, stdout);
+ if (ret != 0) fprintf(stderr, "blast error: %d\n", ret);
+
+ /* see if there are any leftover bytes */
+ n = 0;
+ while (getchar() != EOF) n++;
+ if (n) fprintf(stderr, "blast warning: %d unused bytes of input\n", n);
+
+ /* return blast() error code */
+ return ret;
+}
+#endif
diff --git a/compat/zlib/contrib/blast/blast.h b/compat/zlib/contrib/blast/blast.h
new file mode 100644
index 0000000..658cfd3
--- /dev/null
+++ b/compat/zlib/contrib/blast/blast.h
@@ -0,0 +1,75 @@
+/* blast.h -- interface for blast.c
+ Copyright (C) 2003, 2012 Mark Adler
+ version 1.2, 24 Oct 2012
+
+ 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);
+/* 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.
+ *
+ * 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.
+ *
+ * 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.
+ */
diff --git a/compat/zlib/contrib/blast/test.pk b/compat/zlib/contrib/blast/test.pk
new file mode 100644
index 0000000..be10b2b
--- /dev/null
+++ b/compat/zlib/contrib/blast/test.pk
Binary files differ
diff --git a/compat/zlib/contrib/blast/test.txt b/compat/zlib/contrib/blast/test.txt
new file mode 100644
index 0000000..bfdf1c5
--- /dev/null
+++ b/compat/zlib/contrib/blast/test.txt
@@ -0,0 +1 @@
+AIAIAIAIAIAIA \ No newline at end of file
diff --git a/compat/zlib/contrib/delphi/ZLib.pas b/compat/zlib/contrib/delphi/ZLib.pas
new file mode 100644
index 0000000..a579974
--- /dev/null
+++ b/compat/zlib/contrib/delphi/ZLib.pas
@@ -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.8';
+
+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.
diff --git a/compat/zlib/contrib/delphi/ZLibConst.pas b/compat/zlib/contrib/delphi/ZLibConst.pas
new file mode 100644
index 0000000..cdfe136
--- /dev/null
+++ b/compat/zlib/contrib/delphi/ZLibConst.pas
@@ -0,0 +1,11 @@
+unit ZLibConst;
+
+interface
+
+resourcestring
+ sTargetBufferTooSmall = 'ZLib error: target buffer may be too small';
+ sInvalidStreamOp = 'Invalid stream operation';
+
+implementation
+
+end.
diff --git a/compat/zlib/contrib/delphi/readme.txt b/compat/zlib/contrib/delphi/readme.txt
new file mode 100644
index 0000000..2dc9a8b
--- /dev/null
+++ b/compat/zlib/contrib/delphi/readme.txt
@@ -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>
diff --git a/compat/zlib/contrib/delphi/zlibd32.mak b/compat/zlib/contrib/delphi/zlibd32.mak
new file mode 100644
index 0000000..9bb00b7
--- /dev/null
+++ b/compat/zlib/contrib/delphi/zlibd32.mak
@@ -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
+
diff --git a/compat/zlib/contrib/dotzlib/DotZLib.build b/compat/zlib/contrib/dotzlib/DotZLib.build
new file mode 100644
index 0000000..7f90d6b
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib.build
@@ -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> \ No newline at end of file
diff --git a/compat/zlib/contrib/dotzlib/DotZLib.chm b/compat/zlib/contrib/dotzlib/DotZLib.chm
new file mode 100644
index 0000000..f214a44
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib.chm
Binary files differ
diff --git a/compat/zlib/contrib/dotzlib/DotZLib.sln b/compat/zlib/contrib/dotzlib/DotZLib.sln
new file mode 100644
index 0000000..ac45ca0
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib.sln
@@ -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
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs b/compat/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
new file mode 100644
index 0000000..0491bfc
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs
@@ -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("")]
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/compat/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
new file mode 100644
index 0000000..788b2fc
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs
@@ -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
+
+} \ No newline at end of file
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs b/compat/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
new file mode 100644
index 0000000..c1cab3a
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs
@@ -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;
+ }
+
+ }
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/CodecBase.cs b/compat/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
new file mode 100644
index 0000000..42e6da3
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/CodecBase.cs
@@ -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
+
+ }
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/Deflater.cs b/compat/zlib/contrib/dotzlib/DotZLib/Deflater.cs
new file mode 100644
index 0000000..c247792
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/Deflater.cs
@@ -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); }
+
+ }
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.cs b/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
new file mode 100644
index 0000000..be184b4
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.cs
@@ -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
+
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj b/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
new file mode 100644
index 0000000..71eeb85
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj
@@ -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>
+
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/GZipStream.cs b/compat/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
new file mode 100644
index 0000000..b161300
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/GZipStream.cs
@@ -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
+ }
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/Inflater.cs b/compat/zlib/contrib/dotzlib/DotZLib/Inflater.cs
new file mode 100644
index 0000000..8ed5451
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/Inflater.cs
@@ -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); }
+
+
+ }
+}
diff --git a/compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs b/compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
new file mode 100644
index 0000000..b273d54
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/DotZLib/UnitTests.cs
@@ -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.8", 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
diff --git a/compat/zlib/contrib/dotzlib/LICENSE_1_0.txt b/compat/zlib/contrib/dotzlib/LICENSE_1_0.txt
new file mode 100644
index 0000000..30aac2c
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/LICENSE_1_0.txt
@@ -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. \ No newline at end of file
diff --git a/compat/zlib/contrib/dotzlib/readme.txt b/compat/zlib/contrib/dotzlib/readme.txt
new file mode 100644
index 0000000..b239572
--- /dev/null
+++ b/compat/zlib/contrib/dotzlib/readme.txt
@@ -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)
diff --git a/compat/zlib/contrib/gcc_gvmat64/gvmat64.S b/compat/zlib/contrib/gcc_gvmat64/gvmat64.S
new file mode 100644
index 0000000..dd858dd
--- /dev/null
+++ b/compat/zlib/contrib/gcc_gvmat64/gvmat64.S
@@ -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
+
+
diff --git a/compat/zlib/contrib/infback9/README b/compat/zlib/contrib/infback9/README
new file mode 100644
index 0000000..e75ed13
--- /dev/null
+++ b/compat/zlib/contrib/infback9/README
@@ -0,0 +1 @@
+See infback9.h for what this is and how to use it.
diff --git a/compat/zlib/contrib/infback9/infback9.c b/compat/zlib/contrib/infback9/infback9.c
new file mode 100644
index 0000000..05fb3e3
--- /dev/null
+++ b/compat/zlib/contrib/infback9/infback9.c
@@ -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;
+}
diff --git a/compat/zlib/contrib/infback9/infback9.h b/compat/zlib/contrib/infback9/infback9.h
new file mode 100644
index 0000000..1073c0a
--- /dev/null
+++ b/compat/zlib/contrib/infback9/infback9.h
@@ -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
diff --git a/compat/zlib/contrib/infback9/inffix9.h b/compat/zlib/contrib/infback9/inffix9.h
new file mode 100644
index 0000000..ee5671d
--- /dev/null
+++ b/compat/zlib/contrib/infback9/inffix9.h
@@ -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}
+ };
diff --git a/compat/zlib/contrib/infback9/inflate9.h b/compat/zlib/contrib/infback9/inflate9.h
new file mode 100644
index 0000000..ee9a793
--- /dev/null
+++ b/compat/zlib/contrib/infback9/inflate9.h
@@ -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 */
+};
diff --git a/compat/zlib/contrib/infback9/inftree9.c b/compat/zlib/contrib/infback9/inftree9.c
new file mode 100644
index 0000000..4a73ad2
--- /dev/null
+++ b/compat/zlib/contrib/infback9/inftree9.c
@@ -0,0 +1,324 @@
+/* inftree9.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 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.8 Copyright 1995-2013 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, 72, 78};
+ 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;
+}
diff --git a/compat/zlib/contrib/infback9/inftree9.h b/compat/zlib/contrib/infback9/inftree9.h
new file mode 100644
index 0000000..5ab21f0
--- /dev/null
+++ b/compat/zlib/contrib/infback9/inftree9.h
@@ -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));
diff --git a/compat/zlib/contrib/inflate86/inffas86.c b/compat/zlib/contrib/inflate86/inffas86.c
new file mode 100644
index 0000000..7292f67
--- /dev/null
+++ b/compat/zlib/contrib/inflate86/inffas86.c
@@ -0,0 +1,1157 @@
+/* inffas86.c is a hand tuned assembler version of
+ *
+ * inffast.c -- fast decoding
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also
+ * slightly quicker on x86 systems because, instead of using rep movsb to copy
+ * data, it uses rep movsw, which moves data in 2-byte chunks instead of single
+ * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates
+ * from http://fedora.linux.duke.edu/fc1_x86_64
+ * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with
+ * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version,
+ * when decompressing mozilla-source-1.3.tar.gz.
+ *
+ * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+ * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+ * the moment. I have successfully compiled and tested this code with gcc2.96,
+ * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+ * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+ * enabled. I will attempt to merge the MMX code into this version. Newer
+ * versions of this and inffast.S can be found at
+ * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* Mark Adler's comments from inffast.c: */
+
+/*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state->mode == LEN
+ strm->avail_in >= 6
+ strm->avail_out >= 258
+ start >= strm->avail_out
+ state->bits < 8
+
+ On return, state->mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm->avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+void inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ struct inffast_ar {
+/* 64 32 x86 x86_64 */
+/* ar offset register */
+/* 0 0 */ void *esp; /* esp save */
+/* 8 4 */ void *ebp; /* ebp save */
+/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */
+/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */
+/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */
+/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */
+/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */
+/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */
+/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */
+/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */
+/* 80 40 */ unsigned long hold; /* edx rdx local strm->hold */
+/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */
+/* 92 48 */ unsigned wsize; /* window size */
+/* 96 52 */ unsigned write; /* window write index */
+/*100 56 */ unsigned lmask; /* r12 mask for lcode */
+/*104 60 */ unsigned dmask; /* r13 mask for dcode */
+/*108 64 */ unsigned len; /* r14 match length */
+/*112 68 */ unsigned dist; /* r15 match distance */
+/*116 72 */ unsigned status; /* set when state chng*/
+ } ar;
+
+#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )
+#define PAD_AVAIL_IN 6
+#define PAD_AVAIL_OUT 258
+#else
+#define PAD_AVAIL_IN 5
+#define PAD_AVAIL_OUT 257
+#endif
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+ ar.in = strm->next_in;
+ ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);
+ ar.out = strm->next_out;
+ ar.beg = ar.out - (start - strm->avail_out);
+ ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);
+ ar.wsize = state->wsize;
+ ar.write = state->wnext;
+ ar.window = state->window;
+ ar.hold = state->hold;
+ ar.bits = state->bits;
+ ar.lcode = state->lencode;
+ ar.dcode = state->distcode;
+ ar.lmask = (1U << state->lenbits) - 1;
+ ar.dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+
+ /* align in on 1/2 hold size boundary */
+ while (((unsigned long)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {
+ ar.hold += (unsigned long)*ar.in++ << ar.bits;
+ ar.bits += 8;
+ }
+
+#if defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )
+ __asm__ __volatile__ (
+" leaq %0, %%rax\n"
+" movq %%rbp, 8(%%rax)\n" /* save regs rbp and rsp */
+" movq %%rsp, (%%rax)\n"
+" movq %%rax, %%rsp\n" /* make rsp point to &ar */
+" movq 16(%%rsp), %%rsi\n" /* rsi = in */
+" movq 32(%%rsp), %%rdi\n" /* rdi = out */
+" movq 24(%%rsp), %%r9\n" /* r9 = last */
+" movq 48(%%rsp), %%r10\n" /* r10 = end */
+" movq 64(%%rsp), %%rbp\n" /* rbp = lcode */
+" movq 72(%%rsp), %%r11\n" /* r11 = dcode */
+" movq 80(%%rsp), %%rdx\n" /* rdx = hold */
+" movl 88(%%rsp), %%ebx\n" /* ebx = bits */
+" movl 100(%%rsp), %%r12d\n" /* r12d = lmask */
+" movl 104(%%rsp), %%r13d\n" /* r13d = dmask */
+ /* r14d = len */
+ /* r15d = dist */
+" cld\n"
+" cmpq %%rdi, %%r10\n"
+" je .L_one_time\n" /* if only one decode left */
+" cmpq %%rsi, %%r9\n"
+" je .L_one_time\n"
+" jmp .L_do_loop\n"
+
+".L_one_time:\n"
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_length_code_one_time\n"
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+" jmp .L_get_length_code_one_time\n"
+
+".align 32,0x90\n"
+".L_while_test:\n"
+" cmpq %%rdi, %%r10\n"
+" jbe .L_break_loop\n"
+" cmpq %%rsi, %%r9\n"
+" jbe .L_break_loop\n"
+
+".L_do_loop:\n"
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_length_code\n" /* if (32 < bits) */
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+
+".L_get_length_code:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" movq %%r12, %%r8\n" /* r8 = lmask */
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+
+".L_get_length_code_one_time:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%rbp,%%r8,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+".L_dolen:\n"
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_length_base:\n"
+" movl %%eax, %%r14d\n" /* len = this */
+" shrl $16, %%r14d\n" /* len = this.val */
+" movb %%al, %%cl\n"
+
+" testb $16, %%al\n"
+" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_decode_distance\n" /* if (!op) */
+
+".L_add_bits_to_len:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrq %%cl, %%rdx\n"
+" addl %%eax, %%r14d\n" /* len += hold & mask[op] */
+
+".L_decode_distance:\n"
+" movq %%r13, %%r8\n" /* r8 = dmask */
+" cmpb $32, %%bl\n"
+" ja .L_get_distance_code\n" /* if (32 < bits) */
+
+" lodsl\n" /* eax = *(uint *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $32, %%bl\n" /* bits += 32 */
+" shlq %%cl, %%rax\n"
+" orq %%rax, %%rdx\n" /* hold |= *((uint *)in)++ << bits */
+
+".L_get_distance_code:\n"
+" andq %%rdx, %%r8\n" /* r8 &= hold */
+" movl (%%r11,%%r8,4), %%eax\n" /* eax = dcode[hold & dmask] */
+
+".L_dodist:\n"
+" movl %%eax, %%r15d\n" /* dist = this */
+" shrl $16, %%r15d\n" /* dist = this.val */
+" movb %%ah, %%cl\n"
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrq %%cl, %%rdx\n" /* hold >>= this.bits */
+" movb %%al, %%cl\n" /* cl = this.op */
+
+" testb $16, %%al\n" /* if ((op & 16) == 0) */
+" jz .L_test_for_second_level_dist\n"
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_check_dist_one\n"
+
+".L_add_bits_to_dist:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n" /* (1 << op) - 1 */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrq %%cl, %%rdx\n"
+" addl %%eax, %%r15d\n" /* dist += hold & ((1 << op) - 1) */
+
+".L_check_window:\n"
+" movq %%rsi, %%r8\n" /* save in so from can use it's reg */
+" movq %%rdi, %%rax\n"
+" subq 40(%%rsp), %%rax\n" /* nbytes = out - beg */
+
+" cmpl %%r15d, %%eax\n"
+" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */
+
+" movl %%r14d, %%ecx\n" /* ecx = len */
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+
+" sarl %%ecx\n"
+" jnc .L_copy_two\n" /* if len % 2 == 0 */
+
+" rep movsw\n"
+" movb (%%rsi), %%al\n"
+" movb %%al, (%%rdi)\n"
+" incq %%rdi\n"
+
+" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */
+" jmp .L_while_test\n"
+
+".L_copy_two:\n"
+" rep movsw\n"
+" movq %%r8, %%rsi\n" /* move in back to %rsi, toss from */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_check_dist_one:\n"
+" cmpl $1, %%r15d\n" /* if dist 1, is a memset */
+" jne .L_check_window\n"
+" cmpq %%rdi, 40(%%rsp)\n" /* if out == beg, outside window */
+" je .L_check_window\n"
+
+" movl %%r14d, %%ecx\n" /* ecx = len */
+" movb -1(%%rdi), %%al\n"
+" movb %%al, %%ah\n"
+
+" sarl %%ecx\n"
+" jnc .L_set_two\n"
+" movb %%al, (%%rdi)\n"
+" incq %%rdi\n"
+
+".L_set_two:\n"
+" rep stosw\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_length:\n"
+" testb $64, %%al\n"
+" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%r14d, %%eax\n" /* eax += len */
+" movl (%%rbp,%%rax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/
+" jmp .L_dolen\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_dist:\n"
+" testb $64, %%al\n"
+" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%r15d, %%eax\n" /* eax += dist */
+" movl (%%r11,%%rax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/
+" jmp .L_dodist\n"
+
+".align 32,0x90\n"
+".L_clip_window:\n"
+" movl %%eax, %%ecx\n" /* ecx = nbytes */
+" movl 92(%%rsp), %%eax\n" /* eax = wsize, prepare for dist cmp */
+" negl %%ecx\n" /* nbytes = -nbytes */
+
+" cmpl %%r15d, %%eax\n"
+" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */
+
+" addl %%r15d, %%ecx\n" /* nbytes = dist - nbytes */
+" cmpl $0, 96(%%rsp)\n"
+" jne .L_wrap_around_window\n" /* if (write != 0) */
+
+" movq 56(%%rsp), %%rsi\n" /* from = window */
+" subl %%ecx, %%eax\n" /* eax -= nbytes */
+" addq %%rax, %%rsi\n" /* from += wsize - nbytes */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%r14d\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* eax -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = &out[ -dist ] */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_wrap_around_window:\n"
+" movl 96(%%rsp), %%eax\n" /* eax = write */
+" cmpl %%eax, %%ecx\n"
+" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */
+
+" movl 92(%%rsp), %%esi\n" /* from = wsize */
+" addq 56(%%rsp), %%rsi\n" /* from += window */
+" addq %%rax, %%rsi\n" /* from += write */
+" subq %%rcx, %%rsi\n" /* from -= nbytes */
+" subl %%eax, %%ecx\n" /* nbytes -= write */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq 56(%%rsp), %%rsi\n" /* from = window */
+" movl 96(%%rsp), %%ecx\n" /* nbytes = write */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_contiguous_in_window:\n"
+" movq 56(%%rsp), %%rsi\n" /* rsi = window */
+" addq %%rax, %%rsi\n"
+" subq %%rcx, %%rsi\n" /* from += write - nbytes */
+
+" movl %%r14d, %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movq %%rdi, %%rsi\n"
+" subq %%r15, %%rsi\n" /* from = out - dist */
+" jmp .L_do_copy\n" /* if (nbytes >= len) */
+
+".align 32,0x90\n"
+".L_do_copy:\n"
+" movl %%eax, %%ecx\n" /* ecx = len */
+" rep movsb\n"
+
+" movq %%r8, %%rsi\n" /* move in back to %esi, toss from */
+" jmp .L_while_test\n"
+
+".L_test_for_end_of_block:\n"
+" testb $32, %%al\n"
+" jz .L_invalid_literal_length_code\n"
+" movl $1, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_literal_length_code:\n"
+" movl $2, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_code:\n"
+" movl $3, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_too_far:\n"
+" movl $4, 116(%%rsp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_break_loop:\n"
+" movl $0, 116(%%rsp)\n"
+
+".L_break_loop_with_status:\n"
+/* put in, out, bits, and hold back into ar and pop esp */
+" movq %%rsi, 16(%%rsp)\n" /* in */
+" movq %%rdi, 32(%%rsp)\n" /* out */
+" movl %%ebx, 88(%%rsp)\n" /* bits */
+" movq %%rdx, 80(%%rsp)\n" /* hold */
+" movq (%%rsp), %%rax\n" /* restore rbp and rsp */
+" movq 8(%%rsp), %%rbp\n"
+" movq %%rax, %%rsp\n"
+ :
+ : "m" (ar)
+ : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",
+ "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
+ );
+#elif ( defined( __GNUC__ ) || defined( __ICC ) ) && defined( __i386 )
+ __asm__ __volatile__ (
+" leal %0, %%eax\n"
+" movl %%esp, (%%eax)\n" /* save esp, ebp */
+" movl %%ebp, 4(%%eax)\n"
+" movl %%eax, %%esp\n"
+" movl 8(%%esp), %%esi\n" /* esi = in */
+" movl 16(%%esp), %%edi\n" /* edi = out */
+" movl 40(%%esp), %%edx\n" /* edx = hold */
+" movl 44(%%esp), %%ebx\n" /* ebx = bits */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+
+" cld\n"
+" jmp .L_do_loop\n"
+
+".align 32,0x90\n"
+".L_while_test:\n"
+" cmpl %%edi, 24(%%esp)\n" /* out < end */
+" jbe .L_break_loop\n"
+" cmpl %%esi, 12(%%esp)\n" /* in < last */
+" jbe .L_break_loop\n"
+
+".L_do_loop:\n"
+" cmpb $15, %%bl\n"
+" ja .L_get_length_code\n" /* if (15 < bits) */
+
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+
+".L_get_length_code:\n"
+" movl 56(%%esp), %%eax\n" /* eax = lmask */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[hold & lmask] */
+
+".L_dolen:\n"
+" movb %%ah, %%cl\n" /* cl = this.bits */
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrl %%cl, %%edx\n" /* hold >>= this.bits */
+
+" testb %%al, %%al\n"
+" jnz .L_test_for_length_base\n" /* if (op != 0) 45.7% */
+
+" shrl $16, %%eax\n" /* output this.val char */
+" stosb\n"
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_length_base:\n"
+" movl %%eax, %%ecx\n" /* len = this */
+" shrl $16, %%ecx\n" /* len = this.val */
+" movl %%ecx, 64(%%esp)\n" /* save len */
+" movb %%al, %%cl\n"
+
+" testb $16, %%al\n"
+" jz .L_test_for_second_level_length\n" /* if ((op & 16) == 0) 8% */
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_decode_distance\n" /* if (!op) */
+" cmpb %%cl, %%bl\n"
+" jae .L_add_bits_to_len\n" /* if (op <= bits) */
+
+" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+" movb %%ch, %%cl\n" /* move op back to ecx */
+
+".L_add_bits_to_len:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrl %%cl, %%edx\n"
+" addl %%eax, 64(%%esp)\n" /* len += hold & mask[op] */
+
+".L_decode_distance:\n"
+" cmpb $15, %%bl\n"
+" ja .L_get_distance_code\n" /* if (15 < bits) */
+
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+
+".L_get_distance_code:\n"
+" movl 60(%%esp), %%eax\n" /* eax = dmask */
+" movl 36(%%esp), %%ecx\n" /* ecx = dcode */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" movl (%%ecx,%%eax,4), %%eax\n"/* eax = dcode[hold & dmask] */
+
+".L_dodist:\n"
+" movl %%eax, %%ebp\n" /* dist = this */
+" shrl $16, %%ebp\n" /* dist = this.val */
+" movb %%ah, %%cl\n"
+" subb %%ah, %%bl\n" /* bits -= this.bits */
+" shrl %%cl, %%edx\n" /* hold >>= this.bits */
+" movb %%al, %%cl\n" /* cl = this.op */
+
+" testb $16, %%al\n" /* if ((op & 16) == 0) */
+" jz .L_test_for_second_level_dist\n"
+" andb $15, %%cl\n" /* op &= 15 */
+" jz .L_check_dist_one\n"
+" cmpb %%cl, %%bl\n"
+" jae .L_add_bits_to_dist\n" /* if (op <= bits) 97.6% */
+
+" movb %%cl, %%ch\n" /* stash op in ch, freeing cl */
+" xorl %%eax, %%eax\n"
+" lodsw\n" /* al = *(ushort *)in++ */
+" movb %%bl, %%cl\n" /* cl = bits, needs it for shifting */
+" addb $16, %%bl\n" /* bits += 16 */
+" shll %%cl, %%eax\n"
+" orl %%eax, %%edx\n" /* hold |= *((ushort *)in)++ << bits */
+" movb %%ch, %%cl\n" /* move op back to ecx */
+
+".L_add_bits_to_dist:\n"
+" subb %%cl, %%bl\n"
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n" /* (1 << op) - 1 */
+" andl %%edx, %%eax\n" /* eax &= hold */
+" shrl %%cl, %%edx\n"
+" addl %%eax, %%ebp\n" /* dist += hold & ((1 << op) - 1) */
+
+".L_check_window:\n"
+" movl %%esi, 8(%%esp)\n" /* save in so from can use it's reg */
+" movl %%edi, %%eax\n"
+" subl 20(%%esp), %%eax\n" /* nbytes = out - beg */
+
+" cmpl %%ebp, %%eax\n"
+" jb .L_clip_window\n" /* if (dist > nbytes) 4.2% */
+
+" movl 64(%%esp), %%ecx\n" /* ecx = len */
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+
+" sarl %%ecx\n"
+" jnc .L_copy_two\n" /* if len % 2 == 0 */
+
+" rep movsw\n"
+" movb (%%esi), %%al\n"
+" movb %%al, (%%edi)\n"
+" incl %%edi\n"
+
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".L_copy_two:\n"
+" rep movsw\n"
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_check_dist_one:\n"
+" cmpl $1, %%ebp\n" /* if dist 1, is a memset */
+" jne .L_check_window\n"
+" cmpl %%edi, 20(%%esp)\n"
+" je .L_check_window\n" /* out == beg, if outside window */
+
+" movl 64(%%esp), %%ecx\n" /* ecx = len */
+" movb -1(%%edi), %%al\n"
+" movb %%al, %%ah\n"
+
+" sarl %%ecx\n"
+" jnc .L_set_two\n"
+" movb %%al, (%%edi)\n"
+" incl %%edi\n"
+
+".L_set_two:\n"
+" rep stosw\n"
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_length:\n"
+" testb $64, %%al\n"
+" jnz .L_test_for_end_of_block\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl 64(%%esp), %%eax\n" /* eax += len */
+" movl (%%ebp,%%eax,4), %%eax\n" /* eax = lcode[val+(hold&mask[op])]*/
+" jmp .L_dolen\n"
+
+".align 32,0x90\n"
+".L_test_for_second_level_dist:\n"
+" testb $64, %%al\n"
+" jnz .L_invalid_distance_code\n" /* if ((op & 64) != 0) */
+
+" xorl %%eax, %%eax\n"
+" incl %%eax\n"
+" shll %%cl, %%eax\n"
+" decl %%eax\n"
+" andl %%edx, %%eax\n" /* eax &= hold */
+" addl %%ebp, %%eax\n" /* eax += dist */
+" movl 36(%%esp), %%ecx\n" /* ecx = dcode */
+" movl (%%ecx,%%eax,4), %%eax\n" /* eax = dcode[val+(hold&mask[op])]*/
+" jmp .L_dodist\n"
+
+".align 32,0x90\n"
+".L_clip_window:\n"
+" movl %%eax, %%ecx\n"
+" movl 48(%%esp), %%eax\n" /* eax = wsize */
+" negl %%ecx\n" /* nbytes = -nbytes */
+" movl 28(%%esp), %%esi\n" /* from = window */
+
+" cmpl %%ebp, %%eax\n"
+" jb .L_invalid_distance_too_far\n" /* if (dist > wsize) */
+
+" addl %%ebp, %%ecx\n" /* nbytes = dist - nbytes */
+" cmpl $0, 52(%%esp)\n"
+" jne .L_wrap_around_window\n" /* if (write != 0) */
+
+" subl %%ecx, %%eax\n"
+" addl %%eax, %%esi\n" /* from += wsize - nbytes */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_wrap_around_window:\n"
+" movl 52(%%esp), %%eax\n" /* eax = write */
+" cmpl %%eax, %%ecx\n"
+" jbe .L_contiguous_in_window\n" /* if (write >= nbytes) */
+
+" addl 48(%%esp), %%esi\n" /* from += wsize */
+" addl %%eax, %%esi\n" /* from += write */
+" subl %%ecx, %%esi\n" /* from -= nbytes */
+" subl %%eax, %%ecx\n" /* nbytes -= write */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl 28(%%esp), %%esi\n" /* from = window */
+" movl 52(%%esp), %%ecx\n" /* nbytes = write */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n"
+
+".align 32,0x90\n"
+".L_contiguous_in_window:\n"
+" addl %%eax, %%esi\n"
+" subl %%ecx, %%esi\n" /* from += write - nbytes */
+
+" movl 64(%%esp), %%eax\n" /* eax = len */
+" cmpl %%ecx, %%eax\n"
+" jbe .L_do_copy\n" /* if (nbytes >= len) */
+
+" subl %%ecx, %%eax\n" /* len -= nbytes */
+" rep movsb\n"
+" movl %%edi, %%esi\n"
+" subl %%ebp, %%esi\n" /* from = out - dist */
+" jmp .L_do_copy\n" /* if (nbytes >= len) */
+
+".align 32,0x90\n"
+".L_do_copy:\n"
+" movl %%eax, %%ecx\n"
+" rep movsb\n"
+
+" movl 8(%%esp), %%esi\n" /* move in back to %esi, toss from */
+" movl 32(%%esp), %%ebp\n" /* ebp = lcode */
+" jmp .L_while_test\n"
+
+".L_test_for_end_of_block:\n"
+" testb $32, %%al\n"
+" jz .L_invalid_literal_length_code\n"
+" movl $1, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_literal_length_code:\n"
+" movl $2, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_code:\n"
+" movl $3, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_invalid_distance_too_far:\n"
+" movl 8(%%esp), %%esi\n"
+" movl $4, 72(%%esp)\n"
+" jmp .L_break_loop_with_status\n"
+
+".L_break_loop:\n"
+" movl $0, 72(%%esp)\n"
+
+".L_break_loop_with_status:\n"
+/* put in, out, bits, and hold back into ar and pop esp */
+" movl %%esi, 8(%%esp)\n" /* save in */
+" movl %%edi, 16(%%esp)\n" /* save out */
+" movl %%ebx, 44(%%esp)\n" /* save bits */
+" movl %%edx, 40(%%esp)\n" /* save hold */
+" movl 4(%%esp), %%ebp\n" /* restore esp, ebp */
+" movl (%%esp), %%esp\n"
+ :
+ : "m" (ar)
+ : "memory", "%eax", "%ebx", "%ecx", "%edx", "%esi", "%edi"
+ );
+#elif defined( _MSC_VER ) && ! defined( _M_AMD64 )
+ __asm {
+ lea eax, ar
+ mov [eax], esp /* save esp, ebp */
+ mov [eax+4], ebp
+ mov esp, eax
+ mov esi, [esp+8] /* esi = in */
+ mov edi, [esp+16] /* edi = out */
+ mov edx, [esp+40] /* edx = hold */
+ mov ebx, [esp+44] /* ebx = bits */
+ mov ebp, [esp+32] /* ebp = lcode */
+
+ cld
+ jmp L_do_loop
+
+ALIGN 4
+L_while_test:
+ cmp [esp+24], edi
+ jbe L_break_loop
+ cmp [esp+12], esi
+ jbe L_break_loop
+
+L_do_loop:
+ cmp bl, 15
+ ja L_get_length_code /* if (15 < bits) */
+
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+
+L_get_length_code:
+ mov eax, [esp+56] /* eax = lmask */
+ and eax, edx /* eax &= hold */
+ mov eax, [ebp+eax*4] /* eax = lcode[hold & lmask] */
+
+L_dolen:
+ mov cl, ah /* cl = this.bits */
+ sub bl, ah /* bits -= this.bits */
+ shr edx, cl /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base /* if (op != 0) 45.7% */
+
+ shr eax, 16 /* output this.val char */
+ stosb
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_length_base:
+ mov ecx, eax /* len = this */
+ shr ecx, 16 /* len = this.val */
+ mov [esp+64], ecx /* save len */
+ mov cl, al
+
+ test al, 16
+ jz L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+ and cl, 15 /* op &= 15 */
+ jz L_decode_distance /* if (!op) */
+ cmp bl, cl
+ jae L_add_bits_to_len /* if (op <= bits) */
+
+ mov ch, cl /* stash op in ch, freeing cl */
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+ mov cl, ch /* move op back to ecx */
+
+L_add_bits_to_len:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ shr edx, cl
+ add [esp+64], eax /* len += hold & mask[op] */
+
+L_decode_distance:
+ cmp bl, 15
+ ja L_get_distance_code /* if (15 < bits) */
+
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+
+L_get_distance_code:
+ mov eax, [esp+60] /* eax = dmask */
+ mov ecx, [esp+36] /* ecx = dcode */
+ and eax, edx /* eax &= hold */
+ mov eax, [ecx+eax*4]/* eax = dcode[hold & dmask] */
+
+L_dodist:
+ mov ebp, eax /* dist = this */
+ shr ebp, 16 /* dist = this.val */
+ mov cl, ah
+ sub bl, ah /* bits -= this.bits */
+ shr edx, cl /* hold >>= this.bits */
+ mov cl, al /* cl = this.op */
+
+ test al, 16 /* if ((op & 16) == 0) */
+ jz L_test_for_second_level_dist
+ and cl, 15 /* op &= 15 */
+ jz L_check_dist_one
+ cmp bl, cl
+ jae L_add_bits_to_dist /* if (op <= bits) 97.6% */
+
+ mov ch, cl /* stash op in ch, freeing cl */
+ xor eax, eax
+ lodsw /* al = *(ushort *)in++ */
+ mov cl, bl /* cl = bits, needs it for shifting */
+ add bl, 16 /* bits += 16 */
+ shl eax, cl
+ or edx, eax /* hold |= *((ushort *)in)++ << bits */
+ mov cl, ch /* move op back to ecx */
+
+L_add_bits_to_dist:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax /* (1 << op) - 1 */
+ and eax, edx /* eax &= hold */
+ shr edx, cl
+ add ebp, eax /* dist += hold & ((1 << op) - 1) */
+
+L_check_window:
+ mov [esp+8], esi /* save in so from can use it's reg */
+ mov eax, edi
+ sub eax, [esp+20] /* nbytes = out - beg */
+
+ cmp eax, ebp
+ jb L_clip_window /* if (dist > nbytes) 4.2% */
+
+ mov ecx, [esp+64] /* ecx = len */
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+
+ sar ecx, 1
+ jnc L_copy_two
+
+ rep movsw
+ mov al, [esi]
+ mov [edi], al
+ inc edi
+
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+L_copy_two:
+ rep movsw
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp ebp, 1 /* if dist 1, is a memset */
+ jne L_check_window
+ cmp [esp+20], edi
+ je L_check_window /* out == beg, if outside window */
+
+ mov ecx, [esp+64] /* ecx = len */
+ mov al, [edi-1]
+ mov ah, al
+
+ sar ecx, 1
+ jnc L_set_two
+ mov [edi], al /* memset out with from[-1] */
+ inc edi
+
+L_set_two:
+ rep stosw
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+ test al, 64
+ jnz L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ add eax, [esp+64] /* eax += len */
+ mov eax, [ebp+eax*4] /* eax = lcode[val+(hold&mask[op])]*/
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+ test al, 64
+ jnz L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx /* eax &= hold */
+ add eax, ebp /* eax += dist */
+ mov ecx, [esp+36] /* ecx = dcode */
+ mov eax, [ecx+eax*4] /* eax = dcode[val+(hold&mask[op])]*/
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+ mov ecx, eax
+ mov eax, [esp+48] /* eax = wsize */
+ neg ecx /* nbytes = -nbytes */
+ mov esi, [esp+28] /* from = window */
+
+ cmp eax, ebp
+ jb L_invalid_distance_too_far /* if (dist > wsize) */
+
+ add ecx, ebp /* nbytes = dist - nbytes */
+ cmp dword ptr [esp+52], 0
+ jne L_wrap_around_window /* if (write != 0) */
+
+ sub eax, ecx
+ add esi, eax /* from += wsize - nbytes */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_wrap_around_window:
+ mov eax, [esp+52] /* eax = write */
+ cmp ecx, eax
+ jbe L_contiguous_in_window /* if (write >= nbytes) */
+
+ add esi, [esp+48] /* from += wsize */
+ add esi, eax /* from += write */
+ sub esi, ecx /* from -= nbytes */
+ sub ecx, eax /* nbytes -= write */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, [esp+28] /* from = window */
+ mov ecx, [esp+52] /* nbytes = write */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_contiguous_in_window:
+ add esi, eax
+ sub esi, ecx /* from += write - nbytes */
+
+ mov eax, [esp+64] /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy /* if (nbytes >= len) */
+
+ sub eax, ecx /* len -= nbytes */
+ rep movsb
+ mov esi, edi
+ sub esi, ebp /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_do_copy:
+ mov ecx, eax
+ rep movsb
+
+ mov esi, [esp+8] /* move in back to %esi, toss from */
+ mov ebp, [esp+32] /* ebp = lcode */
+ jmp L_while_test
+
+L_test_for_end_of_block:
+ test al, 32
+ jz L_invalid_literal_length_code
+ mov dword ptr [esp+72], 1
+ jmp L_break_loop_with_status
+
+L_invalid_literal_length_code:
+ mov dword ptr [esp+72], 2
+ jmp L_break_loop_with_status
+
+L_invalid_distance_code:
+ mov dword ptr [esp+72], 3
+ jmp L_break_loop_with_status
+
+L_invalid_distance_too_far:
+ mov esi, [esp+4]
+ mov dword ptr [esp+72], 4
+ jmp L_break_loop_with_status
+
+L_break_loop:
+ mov dword ptr [esp+72], 0
+
+L_break_loop_with_status:
+/* put in, out, bits, and hold back into ar and pop esp */
+ mov [esp+8], esi /* save in */
+ mov [esp+16], edi /* save out */
+ mov [esp+44], ebx /* save bits */
+ mov [esp+40], edx /* save hold */
+ mov ebp, [esp+4] /* restore esp, ebp */
+ mov esp, [esp]
+ }
+#else
+#error "x86 architecture not defined"
+#endif
+
+ if (ar.status > 1) {
+ if (ar.status == 2)
+ strm->msg = "invalid literal/length code";
+ else if (ar.status == 3)
+ strm->msg = "invalid distance code";
+ else
+ strm->msg = "invalid distance too far back";
+ state->mode = BAD;
+ }
+ else if ( ar.status == 1 ) {
+ state->mode = TYPE;
+ }
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ ar.len = ar.bits >> 3;
+ ar.in -= ar.len;
+ ar.bits -= ar.len << 3;
+ ar.hold &= (1U << ar.bits) - 1;
+
+ /* update state and return */
+ strm->next_in = ar.in;
+ strm->next_out = ar.out;
+ strm->avail_in = (unsigned)(ar.in < ar.last ?
+ PAD_AVAIL_IN + (ar.last - ar.in) :
+ PAD_AVAIL_IN - (ar.in - ar.last));
+ strm->avail_out = (unsigned)(ar.out < ar.end ?
+ PAD_AVAIL_OUT + (ar.end - ar.out) :
+ PAD_AVAIL_OUT - (ar.out - ar.end));
+ state->hold = ar.hold;
+ state->bits = ar.bits;
+ return;
+}
+
diff --git a/compat/zlib/contrib/inflate86/inffast.S b/compat/zlib/contrib/inflate86/inffast.S
new file mode 100644
index 0000000..2245a29
--- /dev/null
+++ b/compat/zlib/contrib/inflate86/inffast.S
@@ -0,0 +1,1368 @@
+/*
+ * inffast.S is a hand tuned assembler version of:
+ *
+ * inffast.c -- fast decoding
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * This version (Jan-23-2003) of inflate_fast was coded and tested under
+ * GNU/Linux on a pentium 3, using the gcc-3.2 compiler distribution. On that
+ * machine, I found that gzip style archives decompressed about 20% faster than
+ * the gcc-3.2 -O3 -fomit-frame-pointer compiled version. Your results will
+ * depend on how large of a buffer is used for z_stream.next_in & next_out
+ * (8K-32K worked best for my 256K cpu cache) and how much overhead there is in
+ * stream processing I/O and crc32/addler32. In my case, this routine used
+ * 70% of the cpu time and crc32 used 20%.
+ *
+ * I am confident that this version will work in the general case, but I have
+ * not tested a wide variety of datasets or a wide variety of platforms.
+ *
+ * Jan-24-2003 -- Added -DUSE_MMX define for slightly faster inflating.
+ * It should be a runtime flag instead of compile time flag...
+ *
+ * Jan-26-2003 -- Added runtime check for MMX support with cpuid instruction.
+ * With -DUSE_MMX, only MMX code is compiled. With -DNO_MMX, only non-MMX code
+ * is compiled. Without either option, runtime detection is enabled. Runtime
+ * detection should work on all modern cpus and the recomended algorithm (flip
+ * ID bit on eflags and then use the cpuid instruction) is used in many
+ * multimedia applications. Tested under win2k with gcc-2.95 and gas-2.12
+ * distributed with cygwin3. Compiling with gcc-2.95 -c inffast.S -o
+ * inffast.obj generates a COFF object which can then be linked with MSVC++
+ * compiled code. Tested under FreeBSD 4.7 with gcc-2.95.
+ *
+ * Jan-28-2003 -- Tested Athlon XP... MMX mode is slower than no MMX (and
+ * slower than compiler generated code). Adjusted cpuid check to use the MMX
+ * code only for Pentiums < P4 until I have more data on the P4. Speed
+ * improvment is only about 15% on the Athlon when compared with code generated
+ * with MSVC++. Not sure yet, but I think the P4 will also be slower using the
+ * MMX mode because many of it's x86 ALU instructions execute in .5 cycles and
+ * have less latency than MMX ops. Added code to buffer the last 11 bytes of
+ * the input stream since the MMX code grabs bits in chunks of 32, which
+ * differs from the inffast.c algorithm. I don't think there would have been
+ * read overruns where a page boundary was crossed (a segfault), but there
+ * could have been overruns when next_in ends on unaligned memory (unintialized
+ * memory read).
+ *
+ * Mar-13-2003 -- P4 MMX is slightly slower than P4 NO_MMX. I created a C
+ * version of the non-MMX code so that it doesn't depend on zstrm and zstate
+ * structure offsets which are hard coded in this file. This was last tested
+ * with zlib-1.2.0 which is currently in beta testing, newer versions of this
+ * and inffas86.c can be found at http://www.eetbeetee.com/zlib/ and
+ * http://www.charm.net/~christop/zlib/
+ */
+
+
+/*
+ * if you have underscore linking problems (_inflate_fast undefined), try
+ * using -DGAS_COFF
+ */
+#if ! defined( GAS_COFF ) && ! defined( GAS_ELF )
+
+#if defined( WIN32 ) || defined( __CYGWIN__ )
+#define GAS_COFF /* windows object format */
+#else
+#define GAS_ELF
+#endif
+
+#endif /* ! GAS_COFF && ! GAS_ELF */
+
+
+#if defined( GAS_COFF )
+
+/* coff externals have underscores */
+#define inflate_fast _inflate_fast
+#define inflate_fast_use_mmx _inflate_fast_use_mmx
+
+#endif /* GAS_COFF */
+
+
+.file "inffast.S"
+
+.globl inflate_fast
+
+.text
+.align 4,0
+.L_invalid_literal_length_code_msg:
+.string "invalid literal/length code"
+
+.align 4,0
+.L_invalid_distance_code_msg:
+.string "invalid distance code"
+
+.align 4,0
+.L_invalid_distance_too_far_msg:
+.string "invalid distance too far back"
+
+#if ! defined( NO_MMX )
+.align 4,0
+.L_mask: /* mask[N] = ( 1 << N ) - 1 */
+.long 0
+.long 1
+.long 3
+.long 7
+.long 15
+.long 31
+.long 63
+.long 127
+.long 255
+.long 511
+.long 1023
+.long 2047
+.long 4095
+.long 8191
+.long 16383
+.long 32767
+.long 65535
+.long 131071
+.long 262143
+.long 524287
+.long 1048575
+.long 2097151
+.long 4194303
+.long 8388607
+.long 16777215
+.long 33554431
+.long 67108863
+.long 134217727
+.long 268435455
+.long 536870911
+.long 1073741823
+.long 2147483647
+.long 4294967295
+#endif /* NO_MMX */
+
+.text
+
+/*
+ * struct z_stream offsets, in zlib.h
+ */
+#define next_in_strm 0 /* strm->next_in */
+#define avail_in_strm 4 /* strm->avail_in */
+#define next_out_strm 12 /* strm->next_out */
+#define avail_out_strm 16 /* strm->avail_out */
+#define msg_strm 24 /* strm->msg */
+#define state_strm 28 /* strm->state */
+
+/*
+ * struct inflate_state offsets, in inflate.h
+ */
+#define mode_state 0 /* state->mode */
+#define wsize_state 32 /* state->wsize */
+#define write_state 40 /* state->write */
+#define window_state 44 /* state->window */
+#define hold_state 48 /* state->hold */
+#define bits_state 52 /* state->bits */
+#define lencode_state 68 /* state->lencode */
+#define distcode_state 72 /* state->distcode */
+#define lenbits_state 76 /* state->lenbits */
+#define distbits_state 80 /* state->distbits */
+
+/*
+ * inflate_fast's activation record
+ */
+#define local_var_size 64 /* how much local space for vars */
+#define strm_sp 88 /* first arg: z_stream * (local_var_size + 24) */
+#define start_sp 92 /* second arg: unsigned int (local_var_size + 28) */
+
+/*
+ * offsets for local vars on stack
+ */
+#define out 60 /* unsigned char* */
+#define window 56 /* unsigned char* */
+#define wsize 52 /* unsigned int */
+#define write 48 /* unsigned int */
+#define in 44 /* unsigned char* */
+#define beg 40 /* unsigned char* */
+#define buf 28 /* char[ 12 ] */
+#define len 24 /* unsigned int */
+#define last 20 /* unsigned char* */
+#define end 16 /* unsigned char* */
+#define dcode 12 /* code* */
+#define lcode 8 /* code* */
+#define dmask 4 /* unsigned int */
+#define lmask 0 /* unsigned int */
+
+/*
+ * typedef enum inflate_mode consts, in inflate.h
+ */
+#define INFLATE_MODE_TYPE 11 /* state->mode flags enum-ed in inflate.h */
+#define INFLATE_MODE_BAD 26
+
+
+#if ! defined( USE_MMX ) && ! defined( NO_MMX )
+
+#define RUN_TIME_MMX
+
+#define CHECK_MMX 1
+#define DO_USE_MMX 2
+#define DONT_USE_MMX 3
+
+.globl inflate_fast_use_mmx
+
+.data
+
+.align 4,0
+inflate_fast_use_mmx: /* integer flag for run time control 1=check,2=mmx,3=no */
+.long CHECK_MMX
+
+#if defined( GAS_ELF )
+/* elf info */
+.type inflate_fast_use_mmx,@object
+.size inflate_fast_use_mmx,4
+#endif
+
+#endif /* RUN_TIME_MMX */
+
+#if defined( GAS_COFF )
+/* coff info: scl 2 = extern, type 32 = function */
+.def inflate_fast; .scl 2; .type 32; .endef
+#endif
+
+.text
+
+.align 32,0x90
+inflate_fast:
+ pushl %edi
+ pushl %esi
+ pushl %ebp
+ pushl %ebx
+ pushf /* save eflags (strm_sp, state_sp assumes this is 32 bits) */
+ subl $local_var_size, %esp
+ cld
+
+#define strm_r %esi
+#define state_r %edi
+
+ movl strm_sp(%esp), strm_r
+ movl state_strm(strm_r), state_r
+
+ /* in = strm->next_in;
+ * out = strm->next_out;
+ * last = in + strm->avail_in - 11;
+ * beg = out - (start - strm->avail_out);
+ * end = out + (strm->avail_out - 257);
+ */
+ movl avail_in_strm(strm_r), %edx
+ movl next_in_strm(strm_r), %eax
+
+ addl %eax, %edx /* avail_in += next_in */
+ subl $11, %edx /* avail_in -= 11 */
+
+ movl %eax, in(%esp)
+ movl %edx, last(%esp)
+
+ movl start_sp(%esp), %ebp
+ movl avail_out_strm(strm_r), %ecx
+ movl next_out_strm(strm_r), %ebx
+
+ subl %ecx, %ebp /* start -= avail_out */
+ negl %ebp /* start = -start */
+ addl %ebx, %ebp /* start += next_out */
+
+ subl $257, %ecx /* avail_out -= 257 */
+ addl %ebx, %ecx /* avail_out += out */
+
+ movl %ebx, out(%esp)
+ movl %ebp, beg(%esp)
+ movl %ecx, end(%esp)
+
+ /* wsize = state->wsize;
+ * write = state->write;
+ * window = state->window;
+ * hold = state->hold;
+ * bits = state->bits;
+ * lcode = state->lencode;
+ * dcode = state->distcode;
+ * lmask = ( 1 << state->lenbits ) - 1;
+ * dmask = ( 1 << state->distbits ) - 1;
+ */
+
+ movl lencode_state(state_r), %eax
+ movl distcode_state(state_r), %ecx
+
+ movl %eax, lcode(%esp)
+ movl %ecx, dcode(%esp)
+
+ movl $1, %eax
+ movl lenbits_state(state_r), %ecx
+ shll %cl, %eax
+ decl %eax
+ movl %eax, lmask(%esp)
+
+ movl $1, %eax
+ movl distbits_state(state_r), %ecx
+ shll %cl, %eax
+ decl %eax
+ movl %eax, dmask(%esp)
+
+ movl wsize_state(state_r), %eax
+ movl write_state(state_r), %ecx
+ movl window_state(state_r), %edx
+
+ movl %eax, wsize(%esp)
+ movl %ecx, write(%esp)
+ movl %edx, window(%esp)
+
+ movl hold_state(state_r), %ebp
+ movl bits_state(state_r), %ebx
+
+#undef strm_r
+#undef state_r
+
+#define in_r %esi
+#define from_r %esi
+#define out_r %edi
+
+ movl in(%esp), in_r
+ movl last(%esp), %ecx
+ cmpl in_r, %ecx
+ ja .L_align_long /* if in < last */
+
+ addl $11, %ecx /* ecx = &in[ avail_in ] */
+ subl in_r, %ecx /* ecx = avail_in */
+ movl $12, %eax
+ subl %ecx, %eax /* eax = 12 - avail_in */
+ leal buf(%esp), %edi
+ rep movsb /* memcpy( buf, in, avail_in ) */
+ movl %eax, %ecx
+ xorl %eax, %eax
+ rep stosb /* memset( &buf[ avail_in ], 0, 12 - avail_in ) */
+ leal buf(%esp), in_r /* in = buf */
+ movl in_r, last(%esp) /* last = in, do just one iteration */
+ jmp .L_is_aligned
+
+ /* align in_r on long boundary */
+.L_align_long:
+ testl $3, in_r
+ jz .L_is_aligned
+ xorl %eax, %eax
+ movb (in_r), %al
+ incl in_r
+ movl %ebx, %ecx
+ addl $8, %ebx
+ shll %cl, %eax
+ orl %eax, %ebp
+ jmp .L_align_long
+
+.L_is_aligned:
+ movl out(%esp), out_r
+
+#if defined( NO_MMX )
+ jmp .L_do_loop
+#endif
+
+#if defined( USE_MMX )
+ jmp .L_init_mmx
+#endif
+
+/*** Runtime MMX check ***/
+
+#if defined( RUN_TIME_MMX )
+.L_check_mmx:
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ je .L_init_mmx
+ ja .L_do_loop /* > 2 */
+
+ pushl %eax
+ pushl %ebx
+ pushl %ecx
+ pushl %edx
+ pushf
+ movl (%esp), %eax /* copy eflags to eax */
+ xorl $0x200000, (%esp) /* try toggling ID bit of eflags (bit 21)
+ * to see if cpu supports cpuid...
+ * ID bit method not supported by NexGen but
+ * bios may load a cpuid instruction and
+ * cpuid may be disabled on Cyrix 5-6x86 */
+ popf
+ pushf
+ popl %edx /* copy new eflags to edx */
+ xorl %eax, %edx /* test if ID bit is flipped */
+ jz .L_dont_use_mmx /* not flipped if zero */
+ xorl %eax, %eax
+ cpuid
+ cmpl $0x756e6547, %ebx /* check for GenuineIntel in ebx,ecx,edx */
+ jne .L_dont_use_mmx
+ cmpl $0x6c65746e, %ecx
+ jne .L_dont_use_mmx
+ cmpl $0x49656e69, %edx
+ jne .L_dont_use_mmx
+ movl $1, %eax
+ cpuid /* get cpu features */
+ shrl $8, %eax
+ andl $15, %eax
+ cmpl $6, %eax /* check for Pentium family, is 0xf for P4 */
+ jne .L_dont_use_mmx
+ testl $0x800000, %edx /* test if MMX feature is set (bit 23) */
+ jnz .L_use_mmx
+ jmp .L_dont_use_mmx
+.L_use_mmx:
+ movl $DO_USE_MMX, inflate_fast_use_mmx
+ jmp .L_check_mmx_pop
+.L_dont_use_mmx:
+ movl $DONT_USE_MMX, inflate_fast_use_mmx
+.L_check_mmx_pop:
+ popl %edx
+ popl %ecx
+ popl %ebx
+ popl %eax
+ jmp .L_check_mmx
+#endif
+
+
+/*** Non-MMX code ***/
+
+#if defined ( NO_MMX ) || defined( RUN_TIME_MMX )
+
+#define hold_r %ebp
+#define bits_r %bl
+#define bitslong_r %ebx
+
+.align 32,0x90
+.L_while_test:
+ /* while (in < last && out < end)
+ */
+ cmpl out_r, end(%esp)
+ jbe .L_break_loop /* if (out >= end) */
+
+ cmpl in_r, last(%esp)
+ jbe .L_break_loop
+
+.L_do_loop:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+ *
+ * do {
+ * if (bits < 15) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * this = lcode[hold & lmask]
+ */
+ cmpb $15, bits_r
+ ja .L_get_length_code /* if (15 < bits) */
+
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+
+.L_get_length_code:
+ movl lmask(%esp), %edx /* edx = lmask */
+ movl lcode(%esp), %ecx /* ecx = lcode */
+ andl hold_r, %edx /* edx &= hold */
+ movl (%ecx,%edx,4), %eax /* eax = lcode[hold & lmask] */
+
+.L_dolen:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out
+ *
+ * dolen:
+ * bits -= this.bits;
+ * hold >>= this.bits
+ */
+ movb %ah, %cl /* cl = this.bits */
+ subb %ah, bits_r /* bits -= this.bits */
+ shrl %cl, hold_r /* hold >>= this.bits */
+
+ /* check if op is a literal
+ * if (op == 0) {
+ * PUP(out) = this.val;
+ * }
+ */
+ testb %al, %al
+ jnz .L_test_for_length_base /* if (op != 0) 45.7% */
+
+ shrl $16, %eax /* output this.val char */
+ stosb
+ jmp .L_while_test
+
+.L_test_for_length_base:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = len
+ *
+ * else if (op & 16) {
+ * len = this.val
+ * op &= 15
+ * if (op) {
+ * if (op > bits) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * len += hold & mask[op];
+ * bits -= op;
+ * hold >>= op;
+ * }
+ */
+#define len_r %edx
+ movl %eax, len_r /* len = this */
+ shrl $16, len_r /* len = this.val */
+ movb %al, %cl
+
+ testb $16, %al
+ jz .L_test_for_second_level_length /* if ((op & 16) == 0) 8% */
+ andb $15, %cl /* op &= 15 */
+ jz .L_save_len /* if (!op) */
+ cmpb %cl, bits_r
+ jae .L_add_bits_to_len /* if (op <= bits) */
+
+ movb %cl, %ch /* stash op in ch, freeing cl */
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+ movb %ch, %cl /* move op back to ecx */
+
+.L_add_bits_to_len:
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ subb %cl, bits_r
+ andl hold_r, %eax /* eax &= hold */
+ shrl %cl, hold_r
+ addl %eax, len_r /* len += hold & mask[op] */
+
+.L_save_len:
+ movl len_r, len(%esp) /* save len */
+#undef len_r
+
+.L_decode_distance:
+ /* regs: %esi = in, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ *
+ * if (bits < 15) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * this = dcode[hold & dmask];
+ * dodist:
+ * bits -= this.bits;
+ * hold >>= this.bits;
+ * op = this.op;
+ */
+
+ cmpb $15, bits_r
+ ja .L_get_distance_code /* if (15 < bits) */
+
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+
+.L_get_distance_code:
+ movl dmask(%esp), %edx /* edx = dmask */
+ movl dcode(%esp), %ecx /* ecx = dcode */
+ andl hold_r, %edx /* edx &= hold */
+ movl (%ecx,%edx,4), %eax /* eax = dcode[hold & dmask] */
+
+#define dist_r %edx
+.L_dodist:
+ movl %eax, dist_r /* dist = this */
+ shrl $16, dist_r /* dist = this.val */
+ movb %ah, %cl
+ subb %ah, bits_r /* bits -= this.bits */
+ shrl %cl, hold_r /* hold >>= this.bits */
+
+ /* if (op & 16) {
+ * dist = this.val
+ * op &= 15
+ * if (op > bits) {
+ * hold |= *((unsigned short *)in)++ << bits;
+ * bits += 16
+ * }
+ * dist += hold & mask[op];
+ * bits -= op;
+ * hold >>= op;
+ */
+ movb %al, %cl /* cl = this.op */
+
+ testb $16, %al /* if ((op & 16) == 0) */
+ jz .L_test_for_second_level_dist
+ andb $15, %cl /* op &= 15 */
+ jz .L_check_dist_one
+ cmpb %cl, bits_r
+ jae .L_add_bits_to_dist /* if (op <= bits) 97.6% */
+
+ movb %cl, %ch /* stash op in ch, freeing cl */
+ xorl %eax, %eax
+ lodsw /* al = *(ushort *)in++ */
+ movb bits_r, %cl /* cl = bits, needs it for shifting */
+ addb $16, bits_r /* bits += 16 */
+ shll %cl, %eax
+ orl %eax, hold_r /* hold |= *((ushort *)in)++ << bits */
+ movb %ch, %cl /* move op back to ecx */
+
+.L_add_bits_to_dist:
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax /* (1 << op) - 1 */
+ subb %cl, bits_r
+ andl hold_r, %eax /* eax &= hold */
+ shrl %cl, hold_r
+ addl %eax, dist_r /* dist += hold & ((1 << op) - 1) */
+ jmp .L_check_window
+
+.L_check_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes
+ *
+ * nbytes = out - beg;
+ * if (dist <= nbytes) {
+ * from = out - dist;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--len > 0) {
+ * }
+ */
+
+ movl in_r, in(%esp) /* save in so from can use it's reg */
+ movl out_r, %eax
+ subl beg(%esp), %eax /* nbytes = out - beg */
+
+ cmpl dist_r, %eax
+ jb .L_clip_window /* if (dist > nbytes) 4.2% */
+
+ movl len(%esp), %ecx
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+ subl $3, %ecx
+ movb (from_r), %al
+ movb %al, (out_r)
+ movb 1(from_r), %al
+ movb 2(from_r), %dl
+ addl $3, from_r
+ movb %al, 1(out_r)
+ movb %dl, 2(out_r)
+ addl $3, out_r
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ jmp .L_while_test
+
+.align 16,0x90
+.L_check_dist_one:
+ cmpl $1, dist_r
+ jne .L_check_window
+ cmpl out_r, beg(%esp)
+ je .L_check_window
+
+ decl out_r
+ movl len(%esp), %ecx
+ movb (out_r), %al
+ subl $3, %ecx
+
+ movb %al, 1(out_r)
+ movb %al, 2(out_r)
+ movb %al, 3(out_r)
+ addl $4, out_r
+ rep stosb
+
+ jmp .L_while_test
+
+.align 16,0x90
+.L_test_for_second_level_length:
+ /* else if ((op & 64) == 0) {
+ * this = lcode[this.val + (hold & mask[op])];
+ * }
+ */
+ testb $64, %al
+ jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ andl hold_r, %eax /* eax &= hold */
+ addl %edx, %eax /* eax += this.val */
+ movl lcode(%esp), %edx /* edx = lcode */
+ movl (%edx,%eax,4), %eax /* eax = lcode[val + (hold&mask[op])] */
+ jmp .L_dolen
+
+.align 16,0x90
+.L_test_for_second_level_dist:
+ /* else if ((op & 64) == 0) {
+ * this = dcode[this.val + (hold & mask[op])];
+ * }
+ */
+ testb $64, %al
+ jnz .L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ movl $1, %eax
+ shll %cl, %eax
+ decl %eax
+ andl hold_r, %eax /* eax &= hold */
+ addl %edx, %eax /* eax += this.val */
+ movl dcode(%esp), %edx /* edx = dcode */
+ movl (%edx,%eax,4), %eax /* eax = dcode[val + (hold&mask[op])] */
+ jmp .L_dodist
+
+.align 16,0x90
+.L_clip_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes
+ *
+ * else {
+ * if (dist > wsize) {
+ * invalid distance
+ * }
+ * from = window;
+ * nbytes = dist - nbytes;
+ * if (write == 0) {
+ * from += wsize - nbytes;
+ */
+#define nbytes_r %ecx
+ movl %eax, nbytes_r
+ movl wsize(%esp), %eax /* prepare for dist compare */
+ negl nbytes_r /* nbytes = -nbytes */
+ movl window(%esp), from_r /* from = window */
+
+ cmpl dist_r, %eax
+ jb .L_invalid_distance_too_far /* if (dist > wsize) */
+
+ addl dist_r, nbytes_r /* nbytes = dist - nbytes */
+ cmpl $0, write(%esp)
+ jne .L_wrap_around_window /* if (write != 0) */
+
+ subl nbytes_r, %eax
+ addl %eax, from_r /* from += wsize - nbytes */
+
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = len
+ *
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ */
+#define len_r %eax
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+.L_wrap_around_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = write, %eax = len
+ *
+ * else if (write < nbytes) {
+ * from += wsize + write - nbytes;
+ * nbytes -= write;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = window;
+ * nbytes = write;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while(--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ * }
+ */
+#define write_r %eax
+ movl write(%esp), write_r
+ cmpl write_r, nbytes_r
+ jbe .L_contiguous_in_window /* if (write >= nbytes) */
+
+ addl wsize(%esp), from_r
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += wsize + write - nbytes */
+ subl write_r, nbytes_r /* nbytes -= write */
+#undef write_r
+
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl window(%esp), from_r /* from = window */
+ movl write(%esp), nbytes_r /* nbytes = write */
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1
+
+.L_contiguous_in_window:
+ /* regs: %esi = from, %ebp = hold, %bl = bits, %edi = out, %edx = dist
+ * %ecx = nbytes, %eax = write, %eax = len
+ *
+ * else {
+ * from += write - nbytes;
+ * if (nbytes < len) {
+ * len -= nbytes;
+ * do {
+ * PUP(out) = PUP(from);
+ * } while (--nbytes);
+ * from = out - dist;
+ * }
+ * }
+ */
+#define write_r %eax
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += write - nbytes */
+#undef write_r
+
+ movl len(%esp), len_r
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1 /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+.L_do_copy1:
+ /* regs: %esi = from, %esi = in, %ebp = hold, %bl = bits, %edi = out
+ * %eax = len
+ *
+ * while (len > 0) {
+ * PUP(out) = PUP(from);
+ * len--;
+ * }
+ * }
+ * } while (in < last && out < end);
+ */
+#undef nbytes_r
+#define in_r %esi
+ movl len_r, %ecx
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ jmp .L_while_test
+
+#undef len_r
+#undef dist_r
+
+#endif /* NO_MMX || RUN_TIME_MMX */
+
+
+/*** MMX code ***/
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+.align 32,0x90
+.L_init_mmx:
+ emms
+
+#undef bits_r
+#undef bitslong_r
+#define bitslong_r %ebp
+#define hold_mm %mm0
+ movd %ebp, hold_mm
+ movl %ebx, bitslong_r
+
+#define used_mm %mm1
+#define dmask2_mm %mm2
+#define lmask2_mm %mm3
+#define lmask_mm %mm4
+#define dmask_mm %mm5
+#define tmp_mm %mm6
+
+ movd lmask(%esp), lmask_mm
+ movq lmask_mm, lmask2_mm
+ movd dmask(%esp), dmask_mm
+ movq dmask_mm, dmask2_mm
+ pxor used_mm, used_mm
+ movl lcode(%esp), %ebx /* ebx = lcode */
+ jmp .L_do_loop_mmx
+
+.align 32,0x90
+.L_while_test_mmx:
+ /* while (in < last && out < end)
+ */
+ cmpl out_r, end(%esp)
+ jbe .L_break_loop /* if (out >= end) */
+
+ cmpl in_r, last(%esp)
+ jbe .L_break_loop
+
+.L_do_loop_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+
+ cmpl $32, bitslong_r
+ ja .L_get_length_code_mmx /* if (32 < bits) */
+
+ movd bitslong_r, tmp_mm
+ movd (in_r), %mm7
+ addl $4, in_r
+ psllq tmp_mm, %mm7
+ addl $32, bitslong_r
+ por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */
+
+.L_get_length_code_mmx:
+ pand hold_mm, lmask_mm
+ movd lmask_mm, %eax
+ movq lmask2_mm, lmask_mm
+ movl (%ebx,%eax,4), %eax /* eax = lcode[hold & lmask] */
+
+.L_dolen_mmx:
+ movzbl %ah, %ecx /* ecx = this.bits */
+ movd %ecx, used_mm
+ subl %ecx, bitslong_r /* bits -= this.bits */
+
+ testb %al, %al
+ jnz .L_test_for_length_base_mmx /* if (op != 0) 45.7% */
+
+ shrl $16, %eax /* output this.val char */
+ stosb
+ jmp .L_while_test_mmx
+
+.L_test_for_length_base_mmx:
+#define len_r %edx
+ movl %eax, len_r /* len = this */
+ shrl $16, len_r /* len = this.val */
+
+ testb $16, %al
+ jz .L_test_for_second_level_length_mmx /* if ((op & 16) == 0) 8% */
+ andl $15, %eax /* op &= 15 */
+ jz .L_decode_distance_mmx /* if (!op) */
+
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd %eax, used_mm
+ movd hold_mm, %ecx
+ subl %eax, bitslong_r
+ andl .L_mask(,%eax,4), %ecx
+ addl %ecx, len_r /* len += hold & mask[op] */
+
+.L_decode_distance_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+
+ cmpl $32, bitslong_r
+ ja .L_get_dist_code_mmx /* if (32 < bits) */
+
+ movd bitslong_r, tmp_mm
+ movd (in_r), %mm7
+ addl $4, in_r
+ psllq tmp_mm, %mm7
+ addl $32, bitslong_r
+ por %mm7, hold_mm /* hold_mm |= *((uint *)in)++ << bits */
+
+.L_get_dist_code_mmx:
+ movl dcode(%esp), %ebx /* ebx = dcode */
+ pand hold_mm, dmask_mm
+ movd dmask_mm, %eax
+ movq dmask2_mm, dmask_mm
+ movl (%ebx,%eax,4), %eax /* eax = dcode[hold & lmask] */
+
+.L_dodist_mmx:
+#define dist_r %ebx
+ movzbl %ah, %ecx /* ecx = this.bits */
+ movl %eax, dist_r
+ shrl $16, dist_r /* dist = this.val */
+ subl %ecx, bitslong_r /* bits -= this.bits */
+ movd %ecx, used_mm
+
+ testb $16, %al /* if ((op & 16) == 0) */
+ jz .L_test_for_second_level_dist_mmx
+ andl $15, %eax /* op &= 15 */
+ jz .L_check_dist_one_mmx
+
+.L_add_bits_to_dist_mmx:
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd %eax, used_mm /* save bit length of current op */
+ movd hold_mm, %ecx /* get the next bits on input stream */
+ subl %eax, bitslong_r /* bits -= op bits */
+ andl .L_mask(,%eax,4), %ecx /* ecx = hold & mask[op] */
+ addl %ecx, dist_r /* dist += hold & mask[op] */
+
+.L_check_window_mmx:
+ movl in_r, in(%esp) /* save in so from can use it's reg */
+ movl out_r, %eax
+ subl beg(%esp), %eax /* nbytes = out - beg */
+
+ cmpl dist_r, %eax
+ jb .L_clip_window_mmx /* if (dist > nbytes) 4.2% */
+
+ movl len_r, %ecx
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+ subl $3, %ecx
+ movb (from_r), %al
+ movb %al, (out_r)
+ movb 1(from_r), %al
+ movb 2(from_r), %dl
+ addl $3, from_r
+ movb %al, 1(out_r)
+ movb %dl, 2(out_r)
+ addl $3, out_r
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+.align 16,0x90
+.L_check_dist_one_mmx:
+ cmpl $1, dist_r
+ jne .L_check_window_mmx
+ cmpl out_r, beg(%esp)
+ je .L_check_window_mmx
+
+ decl out_r
+ movl len_r, %ecx
+ movb (out_r), %al
+ subl $3, %ecx
+
+ movb %al, 1(out_r)
+ movb %al, 2(out_r)
+ movb %al, 3(out_r)
+ addl $4, out_r
+ rep stosb
+
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+.align 16,0x90
+.L_test_for_second_level_length_mmx:
+ testb $64, %al
+ jnz .L_test_for_end_of_block /* if ((op & 64) != 0) */
+
+ andl $15, %eax
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ecx
+ andl .L_mask(,%eax,4), %ecx
+ addl len_r, %ecx
+ movl (%ebx,%ecx,4), %eax /* eax = lcode[hold & lmask] */
+ jmp .L_dolen_mmx
+
+.align 16,0x90
+.L_test_for_second_level_dist_mmx:
+ testb $64, %al
+ jnz .L_invalid_distance_code /* if ((op & 64) != 0) */
+
+ andl $15, %eax
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ecx
+ andl .L_mask(,%eax,4), %ecx
+ movl dcode(%esp), %eax /* ecx = dcode */
+ addl dist_r, %ecx
+ movl (%eax,%ecx,4), %eax /* eax = lcode[hold & lmask] */
+ jmp .L_dodist_mmx
+
+.align 16,0x90
+.L_clip_window_mmx:
+#define nbytes_r %ecx
+ movl %eax, nbytes_r
+ movl wsize(%esp), %eax /* prepare for dist compare */
+ negl nbytes_r /* nbytes = -nbytes */
+ movl window(%esp), from_r /* from = window */
+
+ cmpl dist_r, %eax
+ jb .L_invalid_distance_too_far /* if (dist > wsize) */
+
+ addl dist_r, nbytes_r /* nbytes = dist - nbytes */
+ cmpl $0, write(%esp)
+ jne .L_wrap_around_window_mmx /* if (write != 0) */
+
+ subl nbytes_r, %eax
+ addl %eax, from_r /* from += wsize - nbytes */
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+.L_wrap_around_window_mmx:
+#define write_r %eax
+ movl write(%esp), write_r
+ cmpl write_r, nbytes_r
+ jbe .L_contiguous_in_window_mmx /* if (write >= nbytes) */
+
+ addl wsize(%esp), from_r
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += wsize + write - nbytes */
+ subl write_r, nbytes_r /* nbytes -= write */
+#undef write_r
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl window(%esp), from_r /* from = window */
+ movl write(%esp), nbytes_r /* nbytes = write */
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+ jmp .L_do_copy1_mmx
+
+.L_contiguous_in_window_mmx:
+#define write_r %eax
+ addl write_r, from_r
+ subl nbytes_r, from_r /* from += write - nbytes */
+#undef write_r
+
+ cmpl nbytes_r, len_r
+ jbe .L_do_copy1_mmx /* if (nbytes >= len) */
+
+ subl nbytes_r, len_r /* len -= nbytes */
+ rep movsb
+ movl out_r, from_r
+ subl dist_r, from_r /* from = out - dist */
+
+.L_do_copy1_mmx:
+#undef nbytes_r
+#define in_r %esi
+ movl len_r, %ecx
+ rep movsb
+
+ movl in(%esp), in_r /* move in back to %esi, toss from */
+ movl lcode(%esp), %ebx /* move lcode back to %ebx, toss dist */
+ jmp .L_while_test_mmx
+
+#undef hold_r
+#undef bitslong_r
+
+#endif /* USE_MMX || RUN_TIME_MMX */
+
+
+/*** USE_MMX, NO_MMX, and RUNTIME_MMX from here on ***/
+
+.L_invalid_distance_code:
+ /* else {
+ * strm->msg = "invalid distance code";
+ * state->mode = BAD;
+ * }
+ */
+ movl $.L_invalid_distance_code_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_test_for_end_of_block:
+ /* else if (op & 32) {
+ * state->mode = TYPE;
+ * break;
+ * }
+ */
+ testb $32, %al
+ jz .L_invalid_literal_length_code /* if ((op & 32) == 0) */
+
+ movl $0, %ecx
+ movl $INFLATE_MODE_TYPE, %edx
+ jmp .L_update_stream_state
+
+.L_invalid_literal_length_code:
+ /* else {
+ * strm->msg = "invalid literal/length code";
+ * state->mode = BAD;
+ * }
+ */
+ movl $.L_invalid_literal_length_code_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_invalid_distance_too_far:
+ /* strm->msg = "invalid distance too far back";
+ * state->mode = BAD;
+ */
+ movl in(%esp), in_r /* from_r has in's reg, put in back */
+ movl $.L_invalid_distance_too_far_msg, %ecx
+ movl $INFLATE_MODE_BAD, %edx
+ jmp .L_update_stream_state
+
+.L_update_stream_state:
+ /* set strm->msg = %ecx, strm->state->mode = %edx */
+ movl strm_sp(%esp), %eax
+ testl %ecx, %ecx /* if (msg != NULL) */
+ jz .L_skip_msg
+ movl %ecx, msg_strm(%eax) /* strm->msg = msg */
+.L_skip_msg:
+ movl state_strm(%eax), %eax /* state = strm->state */
+ movl %edx, mode_state(%eax) /* state->mode = edx (BAD | TYPE) */
+ jmp .L_break_loop
+
+.align 32,0x90
+.L_break_loop:
+
+/*
+ * Regs:
+ *
+ * bits = %ebp when mmx, and in %ebx when non-mmx
+ * hold = %hold_mm when mmx, and in %ebp when non-mmx
+ * in = %esi
+ * out = %edi
+ */
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+#if defined( RUN_TIME_MMX )
+
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ jne .L_update_next_in
+
+#endif /* RUN_TIME_MMX */
+
+ movl %ebp, %ebx
+
+.L_update_next_in:
+
+#endif
+
+#define strm_r %eax
+#define state_r %edx
+
+ /* len = bits >> 3;
+ * in -= len;
+ * bits -= len << 3;
+ * hold &= (1U << bits) - 1;
+ * state->hold = hold;
+ * state->bits = bits;
+ * strm->next_in = in;
+ * strm->next_out = out;
+ */
+ movl strm_sp(%esp), strm_r
+ movl %ebx, %ecx
+ movl state_strm(strm_r), state_r
+ shrl $3, %ecx
+ subl %ecx, in_r
+ shll $3, %ecx
+ subl %ecx, %ebx
+ movl out_r, next_out_strm(strm_r)
+ movl %ebx, bits_state(state_r)
+ movl %ebx, %ecx
+
+ leal buf(%esp), %ebx
+ cmpl %ebx, last(%esp)
+ jne .L_buf_not_used /* if buf != last */
+
+ subl %ebx, in_r /* in -= buf */
+ movl next_in_strm(strm_r), %ebx
+ movl %ebx, last(%esp) /* last = strm->next_in */
+ addl %ebx, in_r /* in += strm->next_in */
+ movl avail_in_strm(strm_r), %ebx
+ subl $11, %ebx
+ addl %ebx, last(%esp) /* last = &strm->next_in[ avail_in - 11 ] */
+
+.L_buf_not_used:
+ movl in_r, next_in_strm(strm_r)
+
+ movl $1, %ebx
+ shll %cl, %ebx
+ decl %ebx
+
+#if defined( USE_MMX ) || defined( RUN_TIME_MMX )
+
+#if defined( RUN_TIME_MMX )
+
+ cmpl $DO_USE_MMX, inflate_fast_use_mmx
+ jne .L_update_hold
+
+#endif /* RUN_TIME_MMX */
+
+ psrlq used_mm, hold_mm /* hold_mm >>= last bit length */
+ movd hold_mm, %ebp
+
+ emms
+
+.L_update_hold:
+
+#endif /* USE_MMX || RUN_TIME_MMX */
+
+ andl %ebx, %ebp
+ movl %ebp, hold_state(state_r)
+
+#define last_r %ebx
+
+ /* strm->avail_in = in < last ? 11 + (last - in) : 11 - (in - last) */
+ movl last(%esp), last_r
+ cmpl in_r, last_r
+ jbe .L_last_is_smaller /* if (in >= last) */
+
+ subl in_r, last_r /* last -= in */
+ addl $11, last_r /* last += 11 */
+ movl last_r, avail_in_strm(strm_r)
+ jmp .L_fixup_out
+.L_last_is_smaller:
+ subl last_r, in_r /* in -= last */
+ negl in_r /* in = -in */
+ addl $11, in_r /* in += 11 */
+ movl in_r, avail_in_strm(strm_r)
+
+#undef last_r
+#define end_r %ebx
+
+.L_fixup_out:
+ /* strm->avail_out = out < end ? 257 + (end - out) : 257 - (out - end)*/
+ movl end(%esp), end_r
+ cmpl out_r, end_r
+ jbe .L_end_is_smaller /* if (out >= end) */
+
+ subl out_r, end_r /* end -= out */
+ addl $257, end_r /* end += 257 */
+ movl end_r, avail_out_strm(strm_r)
+ jmp .L_done
+.L_end_is_smaller:
+ subl end_r, out_r /* out -= end */
+ negl out_r /* out = -out */
+ addl $257, out_r /* out += 257 */
+ movl out_r, avail_out_strm(strm_r)
+
+#undef end_r
+#undef strm_r
+#undef state_r
+
+.L_done:
+ addl $local_var_size, %esp
+ popf
+ popl %ebx
+ popl %ebp
+ popl %esi
+ popl %edi
+ ret
+
+#if defined( GAS_ELF )
+/* elf info */
+.type inflate_fast,@function
+.size inflate_fast,.-inflate_fast
+#endif
diff --git a/compat/zlib/contrib/iostream/test.cpp b/compat/zlib/contrib/iostream/test.cpp
new file mode 100644
index 0000000..7d265b3
--- /dev/null
+++ b/compat/zlib/contrib/iostream/test.cpp
@@ -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;
+
+}
diff --git a/compat/zlib/contrib/iostream/zfstream.cpp b/compat/zlib/contrib/iostream/zfstream.cpp
new file mode 100644
index 0000000..d0cd85f
--- /dev/null
+++ b/compat/zlib/contrib/iostream/zfstream.cpp
@@ -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() { }
diff --git a/compat/zlib/contrib/iostream/zfstream.h b/compat/zlib/contrib/iostream/zfstream.h
new file mode 100644
index 0000000..ed79098
--- /dev/null
+++ b/compat/zlib/contrib/iostream/zfstream.h
@@ -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
diff --git a/compat/zlib/contrib/iostream2/zstream.h b/compat/zlib/contrib/iostream2/zstream.h
new file mode 100644
index 0000000..43d2332
--- /dev/null
+++ b/compat/zlib/contrib/iostream2/zstream.h
@@ -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
diff --git a/compat/zlib/contrib/iostream2/zstream_test.cpp b/compat/zlib/contrib/iostream2/zstream_test.cpp
new file mode 100644
index 0000000..6273f62
--- /dev/null
+++ b/compat/zlib/contrib/iostream2/zstream_test.cpp
@@ -0,0 +1,25 @@
+#include "zstream.h"
+#include <math.h>
+#include <stdlib.h>
+#include <iomanip.h>
+
+void main() {
+ char h[256] = "Hello";
+ char* g = "Goodbye";
+ ozstream out("temp.gz");
+ out < "This works well" < h < g;
+ out.close();
+
+ izstream in("temp.gz"); // read it back
+ char *x = read_string(in), *y = new char[256], z[256];
+ in > y > z;
+ in.close();
+ cout << x << endl << y << endl << z << endl;
+
+ out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results
+ out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl;
+ out << z << endl << y << endl << x << endl;
+ out << 1.1234567890123456789 << endl;
+
+ delete[] x; delete[] y;
+}
diff --git a/compat/zlib/contrib/iostream3/README b/compat/zlib/contrib/iostream3/README
new file mode 100644
index 0000000..f7b319a
--- /dev/null
+++ b/compat/zlib/contrib/iostream3/README
@@ -0,0 +1,35 @@
+These classes provide a C++ stream interface to the zlib library. It allows you
+to do things like:
+
+ gzofstream outf("blah.gz");
+ outf << "These go into the gzip file " << 123 << endl;
+
+It does this by deriving a specialized stream buffer for gzipped files, which is
+the way Stroustrup would have done it. :->
+
+The gzifstream and gzofstream classes were originally written by Kevin Ruland
+and made available in the zlib contrib/iostream directory. The older version still
+compiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of
+this version.
+
+The new classes are as standard-compliant as possible, closely following the
+approach of the standard library's fstream classes. It compiles under gcc versions
+3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard
+library naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs
+from the previous one in the following respects:
+- added showmanyc
+- added setbuf, with support for unbuffered output via setbuf(0,0)
+- a few bug fixes of stream behavior
+- gzipped output file opened with default compression level instead of maximum level
+- setcompressionlevel()/strategy() members replaced by single setcompression()
+
+The code is provided "as is", with the permission to use, copy, modify, distribute
+and sell it for any purpose without fee.
+
+Ludwig Schwardt
+<schwardt@sun.ac.za>
+
+DSP Lab
+Electrical & Electronic Engineering Department
+University of Stellenbosch
+South Africa
diff --git a/compat/zlib/contrib/iostream3/TODO b/compat/zlib/contrib/iostream3/TODO
new file mode 100644
index 0000000..7032f97
--- /dev/null
+++ b/compat/zlib/contrib/iostream3/TODO
@@ -0,0 +1,17 @@
+Possible upgrades to gzfilebuf:
+
+- The ability to do putback (e.g. putbackfail)
+
+- The ability to seek (zlib supports this, but could be slow/tricky)
+
+- Simultaneous read/write access (does it make sense?)
+
+- Support for ios_base::ate open mode
+
+- Locale support?
+
+- Check public interface to see which calls give problems
+ (due to dependence on library internals)
+
+- Override operator<<(ostream&, gzfilebuf*) to allow direct copying
+ of stream buffer to stream ( i.e. os << is.rdbuf(); )
diff --git a/compat/zlib/contrib/iostream3/test.cc b/compat/zlib/contrib/iostream3/test.cc
new file mode 100644
index 0000000..9423533
--- /dev/null
+++ b/compat/zlib/contrib/iostream3/test.cc
@@ -0,0 +1,50 @@
+/*
+ * Test program for gzifstream and gzofstream
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ */
+
+#include "zfstream.h"
+#include <iostream> // for cout
+
+int main() {
+
+ gzofstream outf;
+ gzifstream inf;
+ char buf[80];
+
+ outf.open("test1.txt.gz");
+ outf << "The quick brown fox sidestepped the lazy canine\n"
+ << 1.3 << "\nPlan " << 9 << std::endl;
+ outf.close();
+ std::cout << "Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\n"
+ << "The quick brown fox sidestepped the lazy canine\n"
+ << 1.3 << "\nPlan " << 9 << std::endl;
+
+ std::cout << "\nReading 'test1.txt.gz' (buffered) produces:\n";
+ inf.open("test1.txt.gz");
+ while (inf.getline(buf,80,'\n')) {
+ std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
+ }
+ inf.close();
+
+ outf.rdbuf()->pubsetbuf(0,0);
+ outf.open("test2.txt.gz");
+ outf << setcompression(Z_NO_COMPRESSION)
+ << "The quick brown fox sidestepped the lazy canine\n"
+ << 1.3 << "\nPlan " << 9 << std::endl;
+ outf.close();
+ std::cout << "\nWrote the same message to 'test2.txt.gz' in uncompressed form";
+
+ std::cout << "\nReading 'test2.txt.gz' (unbuffered) produces:\n";
+ inf.rdbuf()->pubsetbuf(0,0);
+ inf.open("test2.txt.gz");
+ while (inf.getline(buf,80,'\n')) {
+ std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n";
+ }
+ inf.close();
+
+ return 0;
+
+}
diff --git a/compat/zlib/contrib/iostream3/zfstream.cc b/compat/zlib/contrib/iostream3/zfstream.cc
new file mode 100644
index 0000000..94eb933
--- /dev/null
+++ b/compat/zlib/contrib/iostream3/zfstream.cc
@@ -0,0 +1,479 @@
+/*
+ * A C++ I/O streams interface to the zlib gz* functions
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ *
+ * This version is standard-compliant and compatible with gcc 3.x.
+ */
+
+#include "zfstream.h"
+#include <cstring> // for strcpy, strcat, strlen (mode strings)
+#include <cstdio> // for BUFSIZ
+
+// Internal buffer sizes (default and "unbuffered" versions)
+#define BIGBUFSIZE BUFSIZ
+#define SMALLBUFSIZE 1
+
+/*****************************************************************************/
+
+// Default constructor
+gzfilebuf::gzfilebuf()
+: file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false),
+ buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true)
+{
+ // No buffers to start with
+ this->disable_buffer();
+}
+
+// Destructor
+gzfilebuf::~gzfilebuf()
+{
+ // Sync output buffer and close only if responsible for file
+ // (i.e. attached streams should be left open at this stage)
+ this->sync();
+ if (own_fd)
+ this->close();
+ // Make sure internal buffer is deallocated
+ this->disable_buffer();
+}
+
+// Set compression level and strategy
+int
+gzfilebuf::setcompression(int comp_level,
+ int comp_strategy)
+{
+ return gzsetparams(file, comp_level, comp_strategy);
+}
+
+// Open gzipped file
+gzfilebuf*
+gzfilebuf::open(const char *name,
+ std::ios_base::openmode mode)
+{
+ // Fail if file already open
+ if (this->is_open())
+ return NULL;
+ // Don't support simultaneous read/write access (yet)
+ if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
+ return NULL;
+
+ // Build mode string for gzopen and check it [27.8.1.3.2]
+ char char_mode[6] = "\0\0\0\0\0";
+ if (!this->open_mode(mode, char_mode))
+ return NULL;
+
+ // Attempt to open file
+ if ((file = gzopen(name, char_mode)) == NULL)
+ return NULL;
+
+ // On success, allocate internal buffer and set flags
+ this->enable_buffer();
+ io_mode = mode;
+ own_fd = true;
+ return this;
+}
+
+// Attach to gzipped file
+gzfilebuf*
+gzfilebuf::attach(int fd,
+ std::ios_base::openmode mode)
+{
+ // Fail if file already open
+ if (this->is_open())
+ return NULL;
+ // Don't support simultaneous read/write access (yet)
+ if ((mode & std::ios_base::in) && (mode & std::ios_base::out))
+ return NULL;
+
+ // Build mode string for gzdopen and check it [27.8.1.3.2]
+ char char_mode[6] = "\0\0\0\0\0";
+ if (!this->open_mode(mode, char_mode))
+ return NULL;
+
+ // Attempt to attach to file
+ if ((file = gzdopen(fd, char_mode)) == NULL)
+ return NULL;
+
+ // On success, allocate internal buffer and set flags
+ this->enable_buffer();
+ io_mode = mode;
+ own_fd = false;
+ return this;
+}
+
+// Close gzipped file
+gzfilebuf*
+gzfilebuf::close()
+{
+ // Fail immediately if no file is open
+ if (!this->is_open())
+ return NULL;
+ // Assume success
+ gzfilebuf* retval = this;
+ // Attempt to sync and close gzipped file
+ if (this->sync() == -1)
+ retval = NULL;
+ if (gzclose(file) < 0)
+ retval = NULL;
+ // File is now gone anyway (postcondition [27.8.1.3.8])
+ file = NULL;
+ own_fd = false;
+ // Destroy internal buffer if it exists
+ this->disable_buffer();
+ return retval;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Convert int open mode to mode string
+bool
+gzfilebuf::open_mode(std::ios_base::openmode mode,
+ char* c_mode) const
+{
+ bool testb = mode & std::ios_base::binary;
+ bool testi = mode & std::ios_base::in;
+ bool testo = mode & std::ios_base::out;
+ bool testt = mode & std::ios_base::trunc;
+ bool testa = mode & std::ios_base::app;
+
+ // Check for valid flag combinations - see [27.8.1.3.2] (Table 92)
+ // Original zfstream hardcoded the compression level to maximum here...
+ // Double the time for less than 1% size improvement seems
+ // excessive though - keeping it at the default level
+ // To change back, just append "9" to the next three mode strings
+ if (!testi && testo && !testt && !testa)
+ strcpy(c_mode, "w");
+ if (!testi && testo && !testt && testa)
+ strcpy(c_mode, "a");
+ if (!testi && testo && testt && !testa)
+ strcpy(c_mode, "w");
+ if (testi && !testo && !testt && !testa)
+ strcpy(c_mode, "r");
+ // No read/write mode yet
+// if (testi && testo && !testt && !testa)
+// strcpy(c_mode, "r+");
+// if (testi && testo && testt && !testa)
+// strcpy(c_mode, "w+");
+
+ // Mode string should be empty for invalid combination of flags
+ if (strlen(c_mode) == 0)
+ return false;
+ if (testb)
+ strcat(c_mode, "b");
+ return true;
+}
+
+// Determine number of characters in internal get buffer
+std::streamsize
+gzfilebuf::showmanyc()
+{
+ // Calls to underflow will fail if file not opened for reading
+ if (!this->is_open() || !(io_mode & std::ios_base::in))
+ return -1;
+ // Make sure get area is in use
+ if (this->gptr() && (this->gptr() < this->egptr()))
+ return std::streamsize(this->egptr() - this->gptr());
+ else
+ return 0;
+}
+
+// Fill get area from gzipped file
+gzfilebuf::int_type
+gzfilebuf::underflow()
+{
+ // If something is left in the get area by chance, return it
+ // (this shouldn't normally happen, as underflow is only supposed
+ // to be called when gptr >= egptr, but it serves as error check)
+ if (this->gptr() && (this->gptr() < this->egptr()))
+ return traits_type::to_int_type(*(this->gptr()));
+
+ // If the file hasn't been opened for reading, produce error
+ if (!this->is_open() || !(io_mode & std::ios_base::in))
+ return traits_type::eof();
+
+ // Attempt to fill internal buffer from gzipped file
+ // (buffer must be guaranteed to exist...)
+ int bytes_read = gzread(file, buffer, buffer_size);
+ // Indicates error or EOF
+ if (bytes_read <= 0)
+ {
+ // Reset get area
+ this->setg(buffer, buffer, buffer);
+ return traits_type::eof();
+ }
+ // Make all bytes read from file available as get area
+ this->setg(buffer, buffer, buffer + bytes_read);
+
+ // Return next character in get area
+ return traits_type::to_int_type(*(this->gptr()));
+}
+
+// Write put area to gzipped file
+gzfilebuf::int_type
+gzfilebuf::overflow(int_type c)
+{
+ // Determine whether put area is in use
+ if (this->pbase())
+ {
+ // Double-check pointer range
+ if (this->pptr() > this->epptr() || this->pptr() < this->pbase())
+ return traits_type::eof();
+ // Add extra character to buffer if not EOF
+ if (!traits_type::eq_int_type(c, traits_type::eof()))
+ {
+ *(this->pptr()) = traits_type::to_char_type(c);
+ this->pbump(1);
+ }
+ // Number of characters to write to file
+ int bytes_to_write = this->pptr() - this->pbase();
+ // Overflow doesn't fail if nothing is to be written
+ if (bytes_to_write > 0)
+ {
+ // If the file hasn't been opened for writing, produce error
+ if (!this->is_open() || !(io_mode & std::ios_base::out))
+ return traits_type::eof();
+ // If gzipped file won't accept all bytes written to it, fail
+ if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write)
+ return traits_type::eof();
+ // Reset next pointer to point to pbase on success
+ this->pbump(-bytes_to_write);
+ }
+ }
+ // Write extra character to file if not EOF
+ else if (!traits_type::eq_int_type(c, traits_type::eof()))
+ {
+ // If the file hasn't been opened for writing, produce error
+ if (!this->is_open() || !(io_mode & std::ios_base::out))
+ return traits_type::eof();
+ // Impromptu char buffer (allows "unbuffered" output)
+ char_type last_char = traits_type::to_char_type(c);
+ // If gzipped file won't accept this character, fail
+ if (gzwrite(file, &last_char, 1) != 1)
+ return traits_type::eof();
+ }
+
+ // If you got here, you have succeeded (even if c was EOF)
+ // The return value should therefore be non-EOF
+ if (traits_type::eq_int_type(c, traits_type::eof()))
+ return traits_type::not_eof(c);
+ else
+ return c;
+}
+
+// Assign new buffer
+std::streambuf*
+gzfilebuf::setbuf(char_type* p,
+ std::streamsize n)
+{
+ // First make sure stuff is sync'ed, for safety
+ if (this->sync() == -1)
+ return NULL;
+ // If buffering is turned off on purpose via setbuf(0,0), still allocate one...
+ // "Unbuffered" only really refers to put [27.8.1.4.10], while get needs at
+ // least a buffer of size 1 (very inefficient though, therefore make it bigger?)
+ // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems)
+ if (!p || !n)
+ {
+ // Replace existing buffer (if any) with small internal buffer
+ this->disable_buffer();
+ buffer = NULL;
+ buffer_size = 0;
+ own_buffer = true;
+ this->enable_buffer();
+ }
+ else
+ {
+ // Replace existing buffer (if any) with external buffer
+ this->disable_buffer();
+ buffer = p;
+ buffer_size = n;
+ own_buffer = false;
+ this->enable_buffer();
+ }
+ return this;
+}
+
+// Write put area to gzipped file (i.e. ensures that put area is empty)
+int
+gzfilebuf::sync()
+{
+ return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0;
+}
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+// Allocate internal buffer
+void
+gzfilebuf::enable_buffer()
+{
+ // If internal buffer required, allocate one
+ if (own_buffer && !buffer)
+ {
+ // Check for buffered vs. "unbuffered"
+ if (buffer_size > 0)
+ {
+ // Allocate internal buffer
+ buffer = new char_type[buffer_size];
+ // Get area starts empty and will be expanded by underflow as need arises
+ this->setg(buffer, buffer, buffer);
+ // Setup entire internal buffer as put area.
+ // The one-past-end pointer actually points to the last element of the buffer,
+ // so that overflow(c) can safely add the extra character c to the sequence.
+ // These pointers remain in place for the duration of the buffer
+ this->setp(buffer, buffer + buffer_size - 1);
+ }
+ else
+ {
+ // Even in "unbuffered" case, (small?) get buffer is still required
+ buffer_size = SMALLBUFSIZE;
+ buffer = new char_type[buffer_size];
+ this->setg(buffer, buffer, buffer);
+ // "Unbuffered" means no put buffer
+ this->setp(0, 0);
+ }
+ }
+ else
+ {
+ // If buffer already allocated, reset buffer pointers just to make sure no
+ // stale chars are lying around
+ this->setg(buffer, buffer, buffer);
+ this->setp(buffer, buffer + buffer_size - 1);
+ }
+}
+
+// Destroy internal buffer
+void
+gzfilebuf::disable_buffer()
+{
+ // If internal buffer exists, deallocate it
+ if (own_buffer && buffer)
+ {
+ // Preserve unbuffered status by zeroing size
+ if (!this->pbase())
+ buffer_size = 0;
+ delete[] buffer;
+ buffer = NULL;
+ this->setg(0, 0, 0);
+ this->setp(0, 0);
+ }
+ else
+ {
+ // Reset buffer pointers to initial state if external buffer exists
+ this->setg(buffer, buffer, buffer);
+ if (buffer)
+ this->setp(buffer, buffer + buffer_size - 1);
+ else
+ this->setp(0, 0);
+ }
+}
+
+/*****************************************************************************/
+
+// Default constructor initializes stream buffer
+gzifstream::gzifstream()
+: std::istream(NULL), sb()
+{ this->init(&sb); }
+
+// Initialize stream buffer and open file
+gzifstream::gzifstream(const char* name,
+ std::ios_base::openmode mode)
+: std::istream(NULL), sb()
+{
+ this->init(&sb);
+ this->open(name, mode);
+}
+
+// Initialize stream buffer and attach to file
+gzifstream::gzifstream(int fd,
+ std::ios_base::openmode mode)
+: std::istream(NULL), sb()
+{
+ this->init(&sb);
+ this->attach(fd, mode);
+}
+
+// Open file and go into fail() state if unsuccessful
+void
+gzifstream::open(const char* name,
+ std::ios_base::openmode mode)
+{
+ if (!sb.open(name, mode | std::ios_base::in))
+ this->setstate(std::ios_base::failbit);
+ else
+ this->clear();
+}
+
+// Attach to file and go into fail() state if unsuccessful
+void
+gzifstream::attach(int fd,
+ std::ios_base::openmode mode)
+{
+ if (!sb.attach(fd, mode | std::ios_base::in))
+ this->setstate(std::ios_base::failbit);
+ else
+ this->clear();
+}
+
+// Close file
+void
+gzifstream::close()
+{
+ if (!sb.close())
+ this->setstate(std::ios_base::failbit);
+}
+
+/*****************************************************************************/
+
+// Default constructor initializes stream buffer
+gzofstream::gzofstream()
+: std::ostream(NULL), sb()
+{ this->init(&sb); }
+
+// Initialize stream buffer and open file
+gzofstream::gzofstream(const char* name,
+ std::ios_base::openmode mode)
+: std::ostream(NULL), sb()
+{
+ this->init(&sb);
+ this->open(name, mode);
+}
+
+// Initialize stream buffer and attach to file
+gzofstream::gzofstream(int fd,
+ std::ios_base::openmode mode)
+: std::ostream(NULL), sb()
+{
+ this->init(&sb);
+ this->attach(fd, mode);
+}
+
+// Open file and go into fail() state if unsuccessful
+void
+gzofstream::open(const char* name,
+ std::ios_base::openmode mode)
+{
+ if (!sb.open(name, mode | std::ios_base::out))
+ this->setstate(std::ios_base::failbit);
+ else
+ this->clear();
+}
+
+// Attach to file and go into fail() state if unsuccessful
+void
+gzofstream::attach(int fd,
+ std::ios_base::openmode mode)
+{
+ if (!sb.attach(fd, mode | std::ios_base::out))
+ this->setstate(std::ios_base::failbit);
+ else
+ this->clear();
+}
+
+// Close file
+void
+gzofstream::close()
+{
+ if (!sb.close())
+ this->setstate(std::ios_base::failbit);
+}
diff --git a/compat/zlib/contrib/iostream3/zfstream.h b/compat/zlib/contrib/iostream3/zfstream.h
new file mode 100644
index 0000000..8574479
--- /dev/null
+++ b/compat/zlib/contrib/iostream3/zfstream.h
@@ -0,0 +1,466 @@
+/*
+ * A C++ I/O streams interface to the zlib gz* functions
+ *
+ * by Ludwig Schwardt <schwardt@sun.ac.za>
+ * original version by Kevin Ruland <kevin@rodin.wustl.edu>
+ *
+ * This version is standard-compliant and compatible with gcc 3.x.
+ */
+
+#ifndef ZFSTREAM_H
+#define ZFSTREAM_H
+
+#include <istream> // not iostream, since we don't need cin/cout
+#include <ostream>
+#include "zlib.h"
+
+/*****************************************************************************/
+
+/**
+ * @brief Gzipped file stream buffer class.
+ *
+ * This class implements basic_filebuf for gzipped files. It doesn't yet support
+ * seeking (allowed by zlib but slow/limited), putback and read/write access
+ * (tricky). Otherwise, it attempts to be a drop-in replacement for the standard
+ * file streambuf.
+*/
+class gzfilebuf : public std::streambuf
+{
+public:
+ // Default constructor.
+ gzfilebuf();
+
+ // Destructor.
+ virtual
+ ~gzfilebuf();
+
+ /**
+ * @brief Set compression level and strategy on the fly.
+ * @param comp_level Compression level (see zlib.h for allowed values)
+ * @param comp_strategy Compression strategy (see zlib.h for allowed values)
+ * @return Z_OK on success, Z_STREAM_ERROR otherwise.
+ *
+ * Unfortunately, these parameters cannot be modified separately, as the
+ * previous zfstream version assumed. Since the strategy is seldom changed,
+ * it can default and setcompression(level) then becomes like the old
+ * setcompressionlevel(level).
+ */
+ int
+ setcompression(int comp_level,
+ int comp_strategy = Z_DEFAULT_STRATEGY);
+
+ /**
+ * @brief Check if file is open.
+ * @return True if file is open.
+ */
+ bool
+ is_open() const { return (file != NULL); }
+
+ /**
+ * @brief Open gzipped file.
+ * @param name File name.
+ * @param mode Open mode flags.
+ * @return @c this on success, NULL on failure.
+ */
+ gzfilebuf*
+ open(const char* name,
+ std::ios_base::openmode mode);
+
+ /**
+ * @brief Attach to already open gzipped file.
+ * @param fd File descriptor.
+ * @param mode Open mode flags.
+ * @return @c this on success, NULL on failure.
+ */
+ gzfilebuf*
+ attach(int fd,
+ std::ios_base::openmode mode);
+
+ /**
+ * @brief Close gzipped file.
+ * @return @c this on success, NULL on failure.
+ */
+ gzfilebuf*
+ close();
+
+protected:
+ /**
+ * @brief Convert ios open mode int to mode string used by zlib.
+ * @return True if valid mode flag combination.
+ */
+ bool
+ open_mode(std::ios_base::openmode mode,
+ char* c_mode) const;
+
+ /**
+ * @brief Number of characters available in stream buffer.
+ * @return Number of characters.
+ *
+ * This indicates number of characters in get area of stream buffer.
+ * These characters can be read without accessing the gzipped file.
+ */
+ virtual std::streamsize
+ showmanyc();
+
+ /**
+ * @brief Fill get area from gzipped file.
+ * @return First character in get area on success, EOF on error.
+ *
+ * This actually reads characters from gzipped file to stream
+ * buffer. Always buffered.
+ */
+ virtual int_type
+ underflow();
+
+ /**
+ * @brief Write put area to gzipped file.
+ * @param c Extra character to add to buffer contents.
+ * @return Non-EOF on success, EOF on error.
+ *
+ * This actually writes characters in stream buffer to
+ * gzipped file. With unbuffered output this is done one
+ * character at a time.
+ */
+ virtual int_type
+ overflow(int_type c = traits_type::eof());
+
+ /**
+ * @brief Installs external stream buffer.
+ * @param p Pointer to char buffer.
+ * @param n Size of external buffer.
+ * @return @c this on success, NULL on failure.
+ *
+ * Call setbuf(0,0) to enable unbuffered output.
+ */
+ virtual std::streambuf*
+ setbuf(char_type* p,
+ std::streamsize n);
+
+ /**
+ * @brief Flush stream buffer to file.
+ * @return 0 on success, -1 on error.
+ *
+ * This calls underflow(EOF) to do the job.
+ */
+ virtual int
+ sync();
+
+//
+// Some future enhancements
+//
+// virtual int_type uflow();
+// virtual int_type pbackfail(int_type c = traits_type::eof());
+// virtual pos_type
+// seekoff(off_type off,
+// std::ios_base::seekdir way,
+// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);
+// virtual pos_type
+// seekpos(pos_type sp,
+// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out);
+
+private:
+ /**
+ * @brief Allocate internal buffer.
+ *
+ * This function is safe to call multiple times. It will ensure
+ * that a proper internal buffer exists if it is required. If the
+ * buffer already exists or is external, the buffer pointers will be
+ * reset to their original state.
+ */
+ void
+ enable_buffer();
+
+ /**
+ * @brief Destroy internal buffer.
+ *
+ * This function is safe to call multiple times. It will ensure
+ * that the internal buffer is deallocated if it exists. In any
+ * case, it will also reset the buffer pointers.
+ */
+ void
+ disable_buffer();
+
+ /**
+ * Underlying file pointer.
+ */
+ gzFile file;
+
+ /**
+ * Mode in which file was opened.
+ */
+ std::ios_base::openmode io_mode;
+
+ /**
+ * @brief True if this object owns file descriptor.
+ *
+ * This makes the class responsible for closing the file
+ * upon destruction.
+ */
+ bool own_fd;
+
+ /**
+ * @brief Stream buffer.
+ *
+ * For simplicity this remains allocated on the free store for the
+ * entire life span of the gzfilebuf object, unless replaced by setbuf.
+ */
+ char_type* buffer;
+
+ /**
+ * @brief Stream buffer size.
+ *
+ * Defaults to system default buffer size (typically 8192 bytes).
+ * Modified by setbuf.
+ */
+ std::streamsize buffer_size;
+
+ /**
+ * @brief True if this object owns stream buffer.
+ *
+ * This makes the class responsible for deleting the buffer
+ * upon destruction.
+ */
+ bool own_buffer;
+};
+
+/*****************************************************************************/
+
+/**
+ * @brief Gzipped file input stream class.
+ *
+ * This class implements ifstream for gzipped files. Seeking and putback
+ * is not supported yet.
+*/
+class gzifstream : public std::istream
+{
+public:
+ // Default constructor
+ gzifstream();
+
+ /**
+ * @brief Construct stream on gzipped file to be opened.
+ * @param name File name.
+ * @param mode Open mode flags (forced to contain ios::in).
+ */
+ explicit
+ gzifstream(const char* name,
+ std::ios_base::openmode mode = std::ios_base::in);
+
+ /**
+ * @brief Construct stream on already open gzipped file.
+ * @param fd File descriptor.
+ * @param mode Open mode flags (forced to contain ios::in).
+ */
+ explicit
+ gzifstream(int fd,
+ std::ios_base::openmode mode = std::ios_base::in);
+
+ /**
+ * Obtain underlying stream buffer.
+ */
+ gzfilebuf*
+ rdbuf() const
+ { return const_cast<gzfilebuf*>(&sb); }
+
+ /**
+ * @brief Check if file is open.
+ * @return True if file is open.
+ */
+ bool
+ is_open() { return sb.is_open(); }
+
+ /**
+ * @brief Open gzipped file.
+ * @param name File name.
+ * @param mode Open mode flags (forced to contain ios::in).
+ *
+ * Stream will be in state good() if file opens successfully;
+ * otherwise in state fail(). This differs from the behavior of
+ * ifstream, which never sets the state to good() and therefore
+ * won't allow you to reuse the stream for a second file unless
+ * you manually clear() the state. The choice is a matter of
+ * convenience.
+ */
+ void
+ open(const char* name,
+ std::ios_base::openmode mode = std::ios_base::in);
+
+ /**
+ * @brief Attach to already open gzipped file.
+ * @param fd File descriptor.
+ * @param mode Open mode flags (forced to contain ios::in).
+ *
+ * Stream will be in state good() if attach succeeded; otherwise
+ * in state fail().
+ */
+ void
+ attach(int fd,
+ std::ios_base::openmode mode = std::ios_base::in);
+
+ /**
+ * @brief Close gzipped file.
+ *
+ * Stream will be in state fail() if close failed.
+ */
+ void
+ close();
+
+private:
+ /**
+ * Underlying stream buffer.
+ */
+ gzfilebuf sb;
+};
+
+/*****************************************************************************/
+
+/**
+ * @brief Gzipped file output stream class.
+ *
+ * This class implements ofstream for gzipped files. Seeking and putback
+ * is not supported yet.
+*/
+class gzofstream : public std::ostream
+{
+public:
+ // Default constructor
+ gzofstream();
+
+ /**
+ * @brief Construct stream on gzipped file to be opened.
+ * @param name File name.
+ * @param mode Open mode flags (forced to contain ios::out).
+ */
+ explicit
+ gzofstream(const char* name,
+ std::ios_base::openmode mode = std::ios_base::out);
+
+ /**
+ * @brief Construct stream on already open gzipped file.
+ * @param fd File descriptor.
+ * @param mode Open mode flags (forced to contain ios::out).
+ */
+ explicit
+ gzofstream(int fd,
+ std::ios_base::openmode mode = std::ios_base::out);
+
+ /**
+ * Obtain underlying stream buffer.
+ */
+ gzfilebuf*
+ rdbuf() const
+ { return const_cast<gzfilebuf*>(&sb); }
+
+ /**
+ * @brief Check if file is open.
+ * @return True if file is open.
+ */
+ bool
+ is_open() { return sb.is_open(); }
+
+ /**
+ * @brief Open gzipped file.
+ * @param name File name.
+ * @param mode Open mode flags (forced to contain ios::out).
+ *
+ * Stream will be in state good() if file opens successfully;
+ * otherwise in state fail(). This differs from the behavior of
+ * ofstream, which never sets the state to good() and therefore
+ * won't allow you to reuse the stream for a second file unless
+ * you manually clear() the state. The choice is a matter of
+ * convenience.
+ */
+ void
+ open(const char* name,
+ std::ios_base::openmode mode = std::ios_base::out);
+
+ /**
+ * @brief Attach to already open gzipped file.
+ * @param fd File descriptor.
+ * @param mode Open mode flags (forced to contain ios::out).
+ *
+ * Stream will be in state good() if attach succeeded; otherwise
+ * in state fail().
+ */
+ void
+ attach(int fd,
+ std::ios_base::openmode mode = std::ios_base::out);
+
+ /**
+ * @brief Close gzipped file.
+ *
+ * Stream will be in state fail() if close failed.
+ */
+ void
+ close();
+
+private:
+ /**
+ * Underlying stream buffer.
+ */
+ gzfilebuf sb;
+};
+
+/*****************************************************************************/
+
+/**
+ * @brief Gzipped file output stream manipulator class.
+ *
+ * This class defines a two-argument manipulator for gzofstream. It is used
+ * as base for the setcompression(int,int) manipulator.
+*/
+template<typename T1, typename T2>
+ class gzomanip2
+ {
+ public:
+ // Allows insertor to peek at internals
+ template <typename Ta, typename Tb>
+ friend gzofstream&
+ operator<<(gzofstream&,
+ const gzomanip2<Ta,Tb>&);
+
+ // Constructor
+ gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2),
+ T1 v1,
+ T2 v2);
+ private:
+ // Underlying manipulator function
+ gzofstream&
+ (*func)(gzofstream&, T1, T2);
+
+ // Arguments for manipulator function
+ T1 val1;
+ T2 val2;
+ };
+
+/*****************************************************************************/
+
+// Manipulator function thunks through to stream buffer
+inline gzofstream&
+setcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY)
+{
+ (gzs.rdbuf())->setcompression(l, s);
+ return gzs;
+}
+
+// Manipulator constructor stores arguments
+template<typename T1, typename T2>
+ inline
+ gzomanip2<T1,T2>::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2),
+ T1 v1,
+ T2 v2)
+ : func(f), val1(v1), val2(v2)
+ { }
+
+// Insertor applies underlying manipulator function to stream
+template<typename T1, typename T2>
+ inline gzofstream&
+ operator<<(gzofstream& s, const gzomanip2<T1,T2>& m)
+ { return (*m.func)(s, m.val1, m.val2); }
+
+// Insert this onto stream to simplify setting of compression level
+inline gzomanip2<int,int>
+setcompression(int l, int s = Z_DEFAULT_STRATEGY)
+{ return gzomanip2<int,int>(&setcompression, l, s); }
+
+#endif // ZFSTREAM_H
diff --git a/compat/zlib/contrib/masmx64/bld_ml64.bat b/compat/zlib/contrib/masmx64/bld_ml64.bat
new file mode 100644
index 0000000..8f9343d
--- /dev/null
+++ b/compat/zlib/contrib/masmx64/bld_ml64.bat
@@ -0,0 +1,2 @@
+ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
+ml64.exe /Flgvmat64 /c /Zi gvmat64.asm
diff --git a/compat/zlib/contrib/masmx64/gvmat64.asm b/compat/zlib/contrib/masmx64/gvmat64.asm
new file mode 100644
index 0000000..9879c28
--- /dev/null
+++ b/compat/zlib/contrib/masmx64/gvmat64.asm
@@ -0,0 +1,553 @@
+;uInt longest_match_x64(
+; deflate_state *s,
+; IPos cur_match); /* current match */
+
+; gvmat64.asm -- 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)
+; 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 infozip Zip, I use option:
+; ml64.exe /Flgvmat64 /c /Zi /DINFOZIP gvmat64.asm
+;
+; to compile this file for zLib, I use option:
+; ml64.exe /Flgvmat64 /c /Zi gvmat64.asm
+; Be carrefull to adapt zlib1222add below to your version of zLib
+; (if you use a version of zLib before 1.0.4 or after 1.2.2.2, change
+; value of zlib1222add later)
+;
+; This file compile with Microsoft Macro Assembler (x64) for AMD64
+;
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
+;
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
+;
+
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; /* current match */
+.code
+longest_match PROC
+
+
+;LocalVarsSize equ 88
+ LocalVarsSize equ 72
+
+; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12
+; free register : r14,r15
+; register can be saved : rsp
+
+ chainlenwmask equ rsp + 8 - LocalVarsSize ; high word: current chain len
+ ; low word: s->wmask
+;window equ rsp + xx - LocalVarsSize ; local copy of s->window ; stored in r10
+;windowbestlen equ rsp + xx - LocalVarsSize ; s->window + bestlen , use r10+r11
+;scanstart equ rsp + xx - LocalVarsSize ; first two bytes of string ; stored in r12w
+;scanend equ rsp + xx - LocalVarsSize ; last two bytes of string use ebx
+;scanalign equ rsp + xx - LocalVarsSize ; dword-misalignment of string r13
+;bestlen equ rsp + xx - LocalVarsSize ; size of best match so far -> r11d
+;scan equ rsp + xx - LocalVarsSize ; ptr to string wanting match -> r9
+IFDEF INFOZIP
+ELSE
+ nicematch equ (rsp + 16 - LocalVarsSize) ; a good enough match size
+ENDIF
+
+save_rdi equ rsp + 24 - LocalVarsSize
+save_rsi equ rsp + 32 - LocalVarsSize
+save_rbx equ rsp + 40 - LocalVarsSize
+save_rbp equ rsp + 48 - LocalVarsSize
+save_r12 equ rsp + 56 - LocalVarsSize
+save_r13 equ rsp + 64 - LocalVarsSize
+;save_r14 equ rsp + 72 - LocalVarsSize
+;save_r15 equ rsp + 80 - LocalVarsSize
+
+
+; summary of register usage
+; scanend ebx
+; scanendw bx
+; chainlenwmask edx
+; curmatch rsi
+; curmatchd esi
+; windowbestlen r8
+; scanalign r9
+; scanalignd r9d
+; window r10
+; bestlen r11
+; bestlend r11d
+; scanstart r12d
+; scanstartw r12w
+; scan r13
+; nicematch r14d
+; limit r15
+; limitd r15d
+; prev rcx
+
+; 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
+
+
+ MAX_MATCH equ 258
+ MIN_MATCH equ 3
+ MIN_LOOKAHEAD equ (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").
+
+
+IFDEF INFOZIP
+
+_DATA SEGMENT
+COMM window_size:DWORD
+; WMask ; 7fff
+COMM window:BYTE:010040H
+COMM prev:WORD:08000H
+; MatchLen : unused
+; PrevMatch : unused
+COMM strstart:DWORD
+COMM match_start:DWORD
+; Lookahead : ignore
+COMM prev_length:DWORD ; PrevLen
+COMM max_chain_length:DWORD
+COMM good_match:DWORD
+COMM nice_match:DWORD
+prev_ad equ OFFSET prev
+window_ad equ OFFSET window
+nicematch equ nice_match
+_DATA ENDS
+WMask equ 07fffh
+
+ELSE
+
+ IFNDEF zlib1222add
+ zlib1222add equ 8
+ ENDIF
+dsWSize equ 56+zlib1222add+(zlib1222add/2)
+dsWMask equ 64+zlib1222add+(zlib1222add/2)
+dsWindow equ 72+zlib1222add
+dsPrev equ 88+zlib1222add
+dsMatchLen equ 128+zlib1222add
+dsPrevMatch equ 132+zlib1222add
+dsStrStart equ 140+zlib1222add
+dsMatchStart equ 144+zlib1222add
+dsLookahead equ 148+zlib1222add
+dsPrevLen equ 152+zlib1222add
+dsMaxChainLen equ 156+zlib1222add
+dsGoodMatch equ 172+zlib1222add
+dsNiceMatch equ 176+zlib1222add
+
+window_size equ [ rcx + dsWSize]
+WMask equ [ rcx + dsWMask]
+window_ad equ [ rcx + dsWindow]
+prev_ad equ [ rcx + dsPrev]
+strstart equ [ rcx + dsStrStart]
+match_start equ [ rcx + dsMatchStart]
+Lookahead equ [ rcx + dsLookahead] ; 0ffffffffh on infozip
+prev_length equ [ rcx + dsPrevLen]
+max_chain_length equ [ rcx + dsMaxChainLen]
+good_match equ [ rcx + dsGoodMatch]
+nice_match equ [ rcx + dsNiceMatch]
+ENDIF
+
+; parameter 1 in r8(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.
+
+
+
+;;; 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.
+
+; parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match)
+
+; this clear high 32 bits of r8, which can be garbage in both r8 and rdx
+
+ mov [save_rdi],rdi
+ mov [save_rsi],rsi
+ mov [save_rbx],rbx
+ mov [save_rbp],rbp
+IFDEF INFOZIP
+ mov r8d,ecx
+ELSE
+ mov r8d,edx
+ENDIF
+ 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;
+
+IFDEF INFOZIP
+ mov [chainlenwmask], ebx
+; on infozip nice_match = [nice_match]
+ELSE
+ mov eax, nice_match
+ mov [chainlenwmask], ebx
+ mov r10d, Lookahead
+ cmp r10d, eax
+ cmovnl r10d, eax
+ mov [nicematch],r10d
+ENDIF
+
+;;; 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;
+IFDEF INFOZIP
+ mov eax,07efah ; MAX_DIST = (WSIZE-MIN_LOOKAHEAD) (0x8000-(3+8+1))
+ELSE
+ mov eax, window_size
+ sub eax, MIN_LOOKAHEAD
+ENDIF
+ 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, 00010000h
+ js LeaveNow
+
+LoopEntry1:
+ cmp bx,word ptr [rsi + r8 - 1]
+ jz LookupLoopIsZero
+
+LookupLoop2:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry2:
+ cmp bx,word ptr [rsi + r8 - 1]
+ jz LookupLoopIsZero
+
+LookupLoop4:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry4:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ jnz LookupLoop1
+ jmp LookupLoopIsZero
+
+
+;;; 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
+
+LookupLoop:
+ and r8d, edx
+
+ movzx r8d, word ptr [rdi + r8*2]
+ cmp r8d, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+
+LoopEntry:
+
+ cmp bx,word ptr [rsi + r8 - 1]
+ jnz LookupLoop1
+LookupLoopIsZero:
+ cmp r12w, word ptr [r10 + r8]
+ jnz LookupLoop1
+
+
+;;; 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, 0fffffffffffffef8h; -(MAX_MATCH_8)
+ lea rsi, [rsi + r13 + 0108h] ;MAX_MATCH_8]
+ lea rdi, [r9 + r13 + 0108h] ;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
+
+ jnz short LoopCmps
+ jmp short LenMaximum
+LeaveLoopCmps16: add rdx,8
+LeaveLoopCmps8: add rdx,8
+LeaveLoopCmps:
+
+ test eax, 0000FFFFh
+ jnz LenLower
+
+ test eax,0ffffffffh
+
+ jnz LenLower32
+
+ add rdx,4
+ shr rax,32
+ or ax,ax
+ jnz LenLower
+
+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
+ 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.
+;///////////////////////////////////
+
+ cmp eax, r11d
+ jg LongerMatch
+
+ lea rsi,[r10+r11]
+
+ mov rdi, prev_ad
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; 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]
+ jge LeaveNow
+
+ lea rsi,[r10+rax]
+
+ movzx ebx, word ptr [r9 + rax - 1]
+ mov rdi, prev_ad
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; 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:
+IFDEF INFOZIP
+ mov eax,r11d
+ELSE
+ mov eax, Lookahead
+ cmp r11d, eax
+ cmovng eax, r11d
+ENDIF
+
+;;; 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
+longest_match ENDP
+
+match_init PROC
+ ret 0
+match_init ENDP
+
+
+END
diff --git a/compat/zlib/contrib/masmx64/inffas8664.c b/compat/zlib/contrib/masmx64/inffas8664.c
new file mode 100644
index 0000000..e8af06f
--- /dev/null
+++ b/compat/zlib/contrib/masmx64/inffas8664.c
@@ -0,0 +1,186 @@
+/* inffas8664.c is a hand tuned assembler version of inffast.c - fast decoding
+ * version for AMD64 on Windows using Microsoft C compiler
+ *
+ * Copyright (C) 1995-2003 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+ * Please use the copyright conditions above.
+ *
+ * 2005 - Adaptation to Microsoft C Compiler for AMD64 by Gilles Vollant
+ *
+ * inffas8664.c call function inffas8664fnc in inffasx64.asm
+ * inffasx64.asm is automatically convert from AMD64 portion of inffas86.c
+ *
+ * Dec-29-2003 -- I added AMD64 inflate asm support. This version is also
+ * slightly quicker on x86 systems because, instead of using rep movsb to copy
+ * data, it uses rep movsw, which moves data in 2-byte chunks instead of single
+ * bytes. I've tested the AMD64 code on a Fedora Core 1 + the x86_64 updates
+ * from http://fedora.linux.duke.edu/fc1_x86_64
+ * which is running on an Athlon 64 3000+ / Gigabyte GA-K8VT800M system with
+ * 1GB ram. The 64-bit version is about 4% faster than the 32-bit version,
+ * when decompressing mozilla-source-1.3.tar.gz.
+ *
+ * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+ * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+ * the moment. I have successfully compiled and tested this code with gcc2.96,
+ * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+ * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+ * enabled. I will attempt to merge the MMX code into this version. Newer
+ * versions of this and inffast.S can be found at
+ * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+ *
+ */
+
+#include <stdio.h>
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* Mark Adler's comments from inffast.c: */
+
+/*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state->mode == LEN
+ strm->avail_in >= 6
+ strm->avail_out >= 258
+ start >= strm->avail_out
+ state->bits < 8
+
+ On return, state->mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm->avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+
+
+
+ typedef struct inffast_ar {
+/* 64 32 x86 x86_64 */
+/* ar offset register */
+/* 0 0 */ void *esp; /* esp save */
+/* 8 4 */ void *ebp; /* ebp save */
+/* 16 8 */ unsigned char FAR *in; /* esi rsi local strm->next_in */
+/* 24 12 */ unsigned char FAR *last; /* r9 while in < last */
+/* 32 16 */ unsigned char FAR *out; /* edi rdi local strm->next_out */
+/* 40 20 */ unsigned char FAR *beg; /* inflate()'s init next_out */
+/* 48 24 */ unsigned char FAR *end; /* r10 while out < end */
+/* 56 28 */ unsigned char FAR *window;/* size of window, wsize!=0 */
+/* 64 32 */ code const FAR *lcode; /* ebp rbp local strm->lencode */
+/* 72 36 */ code const FAR *dcode; /* r11 local strm->distcode */
+/* 80 40 */ size_t /*unsigned long */hold; /* edx rdx local strm->hold */
+/* 88 44 */ unsigned bits; /* ebx rbx local strm->bits */
+/* 92 48 */ unsigned wsize; /* window size */
+/* 96 52 */ unsigned write; /* window write index */
+/*100 56 */ unsigned lmask; /* r12 mask for lcode */
+/*104 60 */ unsigned dmask; /* r13 mask for dcode */
+/*108 64 */ unsigned len; /* r14 match length */
+/*112 68 */ unsigned dist; /* r15 match distance */
+/*116 72 */ unsigned status; /* set when state chng*/
+ } type_ar;
+#ifdef ASMINF
+
+void inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ type_ar ar;
+ void inffas8664fnc(struct inffast_ar * par);
+
+
+
+#if (defined( __GNUC__ ) && defined( __amd64__ ) && ! defined( __i386 )) || (defined(_MSC_VER) && defined(_M_AMD64))
+#define PAD_AVAIL_IN 6
+#define PAD_AVAIL_OUT 258
+#else
+#define PAD_AVAIL_IN 5
+#define PAD_AVAIL_OUT 257
+#endif
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+
+ ar.in = strm->next_in;
+ ar.last = ar.in + (strm->avail_in - PAD_AVAIL_IN);
+ ar.out = strm->next_out;
+ ar.beg = ar.out - (start - strm->avail_out);
+ ar.end = ar.out + (strm->avail_out - PAD_AVAIL_OUT);
+ ar.wsize = state->wsize;
+ ar.write = state->wnext;
+ ar.window = state->window;
+ ar.hold = state->hold;
+ ar.bits = state->bits;
+ ar.lcode = state->lencode;
+ ar.dcode = state->distcode;
+ ar.lmask = (1U << state->lenbits) - 1;
+ ar.dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+
+ /* align in on 1/2 hold size boundary */
+ while (((size_t)(void *)ar.in & (sizeof(ar.hold) / 2 - 1)) != 0) {
+ ar.hold += (unsigned long)*ar.in++ << ar.bits;
+ ar.bits += 8;
+ }
+
+ inffas8664fnc(&ar);
+
+ if (ar.status > 1) {
+ if (ar.status == 2)
+ strm->msg = "invalid literal/length code";
+ else if (ar.status == 3)
+ strm->msg = "invalid distance code";
+ else
+ strm->msg = "invalid distance too far back";
+ state->mode = BAD;
+ }
+ else if ( ar.status == 1 ) {
+ state->mode = TYPE;
+ }
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ ar.len = ar.bits >> 3;
+ ar.in -= ar.len;
+ ar.bits -= ar.len << 3;
+ ar.hold &= (1U << ar.bits) - 1;
+
+ /* update state and return */
+ strm->next_in = ar.in;
+ strm->next_out = ar.out;
+ strm->avail_in = (unsigned)(ar.in < ar.last ?
+ PAD_AVAIL_IN + (ar.last - ar.in) :
+ PAD_AVAIL_IN - (ar.in - ar.last));
+ strm->avail_out = (unsigned)(ar.out < ar.end ?
+ PAD_AVAIL_OUT + (ar.end - ar.out) :
+ PAD_AVAIL_OUT - (ar.out - ar.end));
+ state->hold = (unsigned long)ar.hold;
+ state->bits = ar.bits;
+ return;
+}
+
+#endif
diff --git a/compat/zlib/contrib/masmx64/inffasx64.asm b/compat/zlib/contrib/masmx64/inffasx64.asm
new file mode 100644
index 0000000..60a8d89
--- /dev/null
+++ b/compat/zlib/contrib/masmx64/inffasx64.asm
@@ -0,0 +1,396 @@
+; inffasx64.asm is a hand tuned assembler version of inffast.c - fast decoding
+; version for AMD64 on Windows using Microsoft C compiler
+;
+; inffasx64.asm is automatically convert from AMD64 portion of inffas86.c
+; inffasx64.asm is called by inffas8664.c, which contain more info.
+
+
+; to compile this file, I use option
+; ml64.exe /Flinffasx64 /c /Zi inffasx64.asm
+; with Microsoft Macro Assembler (x64) for AMD64
+;
+
+; This file compile with Microsoft Macro Assembler (x64) for AMD64
+;
+; ml64.exe is given with Visual Studio 2005/2008/2010 and Windows WDK
+;
+; (you can get Windows WDK with ml64 for AMD64 from
+; http://www.microsoft.com/whdc/Devtools/wdk/default.mspx for low price)
+;
+
+
+.code
+inffas8664fnc PROC
+
+; 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, r-9, r10, and r11, which are scratch.
+
+
+ mov [rsp-8],rsi
+ mov [rsp-16],rdi
+ mov [rsp-24],r12
+ mov [rsp-32],r13
+ mov [rsp-40],r14
+ mov [rsp-48],r15
+ mov [rsp-56],rbx
+
+ mov rax,rcx
+
+ mov [rax+8], rbp ; /* save regs rbp and rsp */
+ mov [rax], rsp
+
+ mov rsp, rax ; /* make rsp point to &ar */
+
+ mov rsi, [rsp+16] ; /* rsi = in */
+ mov rdi, [rsp+32] ; /* rdi = out */
+ mov r9, [rsp+24] ; /* r9 = last */
+ mov r10, [rsp+48] ; /* r10 = end */
+ mov rbp, [rsp+64] ; /* rbp = lcode */
+ mov r11, [rsp+72] ; /* r11 = dcode */
+ mov rdx, [rsp+80] ; /* rdx = hold */
+ mov ebx, [rsp+88] ; /* ebx = bits */
+ mov r12d, [rsp+100] ; /* r12d = lmask */
+ mov r13d, [rsp+104] ; /* r13d = dmask */
+ ; /* r14d = len */
+ ; /* r15d = dist */
+
+
+ cld
+ cmp r10, rdi
+ je L_one_time ; /* if only one decode left */
+ cmp r9, rsi
+
+ jne L_do_loop
+
+
+L_one_time:
+ mov r8, r12 ; /* r8 = lmask */
+ cmp bl, 32
+ ja L_get_length_code_one_time
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+ jmp L_get_length_code_one_time
+
+ALIGN 4
+L_while_test:
+ cmp r10, rdi
+ jbe L_break_loop
+ cmp r9, rsi
+ jbe L_break_loop
+
+L_do_loop:
+ mov r8, r12 ; /* r8 = lmask */
+ cmp bl, 32
+ ja L_get_length_code ; /* if (32 < bits) */
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+
+L_get_length_code:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */
+
+ mov cl, ah ; /* cl = this.bits */
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */
+
+ mov r8, r12 ; /* r8 = lmask */
+ shr eax, 16 ; /* output this.val char */
+ stosb
+
+L_get_length_code_one_time:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [rbp+r8*4] ; /* eax = lcode[hold & lmask] */
+
+L_dolen:
+ mov cl, ah ; /* cl = this.bits */
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+
+ test al, al
+ jnz L_test_for_length_base ; /* if (op != 0) 45.7% */
+
+ shr eax, 16 ; /* output this.val char */
+ stosb
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_length_base:
+ mov r14d, eax ; /* len = this */
+ shr r14d, 16 ; /* len = this.val */
+ mov cl, al
+
+ test al, 16
+ jz L_test_for_second_level_length ; /* if ((op & 16) == 0) 8% */
+ and cl, 15 ; /* op &= 15 */
+ jz L_decode_distance ; /* if (!op) */
+
+L_add_bits_to_len:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ shr rdx, cl
+ add r14d, eax ; /* len += hold & mask[op] */
+
+L_decode_distance:
+ mov r8, r13 ; /* r8 = dmask */
+ cmp bl, 32
+ ja L_get_distance_code ; /* if (32 < bits) */
+
+ lodsd ; /* eax = *(uint *)in++ */
+ mov cl, bl ; /* cl = bits, needs it for shifting */
+ add bl, 32 ; /* bits += 32 */
+ shl rax, cl
+ or rdx, rax ; /* hold |= *((uint *)in)++ << bits */
+
+L_get_distance_code:
+ and r8, rdx ; /* r8 &= hold */
+ mov eax, [r11+r8*4] ; /* eax = dcode[hold & dmask] */
+
+L_dodist:
+ mov r15d, eax ; /* dist = this */
+ shr r15d, 16 ; /* dist = this.val */
+ mov cl, ah
+ sub bl, ah ; /* bits -= this.bits */
+ shr rdx, cl ; /* hold >>= this.bits */
+ mov cl, al ; /* cl = this.op */
+
+ test al, 16 ; /* if ((op & 16) == 0) */
+ jz L_test_for_second_level_dist
+ and cl, 15 ; /* op &= 15 */
+ jz L_check_dist_one
+
+L_add_bits_to_dist:
+ sub bl, cl
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax ; /* (1 << op) - 1 */
+ and eax, edx ; /* eax &= hold */
+ shr rdx, cl
+ add r15d, eax ; /* dist += hold & ((1 << op) - 1) */
+
+L_check_window:
+ mov r8, rsi ; /* save in so from can use it's reg */
+ mov rax, rdi
+ sub rax, [rsp+40] ; /* nbytes = out - beg */
+
+ cmp eax, r15d
+ jb L_clip_window ; /* if (dist > nbytes) 4.2% */
+
+ mov ecx, r14d ; /* ecx = len */
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+
+ sar ecx, 1
+ jnc L_copy_two ; /* if len % 2 == 0 */
+
+ rep movsw
+ mov al, [rsi]
+ mov [rdi], al
+ inc rdi
+
+ mov rsi, r8 ; /* move in back to %rsi, toss from */
+ jmp L_while_test
+
+L_copy_two:
+ rep movsw
+ mov rsi, r8 ; /* move in back to %rsi, toss from */
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp r15d, 1 ; /* if dist 1, is a memset */
+ jne L_check_window
+ cmp [rsp+40], rdi ; /* if out == beg, outside window */
+ je L_check_window
+
+ mov ecx, r14d ; /* ecx = len */
+ mov al, [rdi-1]
+ mov ah, al
+
+ sar ecx, 1
+ jnc L_set_two
+ mov [rdi], al
+ inc rdi
+
+L_set_two:
+ rep stosw
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+ test al, 64
+ jnz L_test_for_end_of_block ; /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ add eax, r14d ; /* eax += len */
+ mov eax, [rbp+rax*4] ; /* eax = lcode[val+(hold&mask[op])]*/
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+ test al, 64
+ jnz L_invalid_distance_code ; /* if ((op & 64) != 0) */
+
+ xor eax, eax
+ inc eax
+ shl eax, cl
+ dec eax
+ and eax, edx ; /* eax &= hold */
+ add eax, r15d ; /* eax += dist */
+ mov eax, [r11+rax*4] ; /* eax = dcode[val+(hold&mask[op])]*/
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+ mov ecx, eax ; /* ecx = nbytes */
+ mov eax, [rsp+92] ; /* eax = wsize, prepare for dist cmp */
+ neg ecx ; /* nbytes = -nbytes */
+
+ cmp eax, r15d
+ jb L_invalid_distance_too_far ; /* if (dist > wsize) */
+
+ add ecx, r15d ; /* nbytes = dist - nbytes */
+ cmp dword ptr [rsp+96], 0
+ jne L_wrap_around_window ; /* if (write != 0) */
+
+ mov rsi, [rsp+56] ; /* from = window */
+ sub eax, ecx ; /* eax -= nbytes */
+ add rsi, rax ; /* from += wsize - nbytes */
+
+ mov eax, r14d ; /* eax = len */
+ cmp r14d, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* eax -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = &out[ -dist ] */
+ jmp L_do_copy
+
+ALIGN 4
+L_wrap_around_window:
+ mov eax, [rsp+96] ; /* eax = write */
+ cmp ecx, eax
+ jbe L_contiguous_in_window ; /* if (write >= nbytes) */
+
+ mov esi, [rsp+92] ; /* from = wsize */
+ add rsi, [rsp+56] ; /* from += window */
+ add rsi, rax ; /* from += write */
+ sub rsi, rcx ; /* from -= nbytes */
+ sub ecx, eax ; /* nbytes -= write */
+
+ mov eax, r14d ; /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, [rsp+56] ; /* from = window */
+ mov ecx, [rsp+96] ; /* nbytes = write */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+ jmp L_do_copy
+
+ALIGN 4
+L_contiguous_in_window:
+ mov rsi, [rsp+56] ; /* rsi = window */
+ add rsi, rax
+ sub rsi, rcx ; /* from += write - nbytes */
+
+ mov eax, r14d ; /* eax = len */
+ cmp eax, ecx
+ jbe L_do_copy ; /* if (nbytes >= len) */
+
+ sub eax, ecx ; /* len -= nbytes */
+ rep movsb
+ mov rsi, rdi
+ sub rsi, r15 ; /* from = out - dist */
+ jmp L_do_copy ; /* if (nbytes >= len) */
+
+ALIGN 4
+L_do_copy:
+ mov ecx, eax ; /* ecx = len */
+ rep movsb
+
+ mov rsi, r8 ; /* move in back to %esi, toss from */
+ jmp L_while_test
+
+L_test_for_end_of_block:
+ test al, 32
+ jz L_invalid_literal_length_code
+ mov dword ptr [rsp+116], 1
+ jmp L_break_loop_with_status
+
+L_invalid_literal_length_code:
+ mov dword ptr [rsp+116], 2
+ jmp L_break_loop_with_status
+
+L_invalid_distance_code:
+ mov dword ptr [rsp+116], 3
+ jmp L_break_loop_with_status
+
+L_invalid_distance_too_far:
+ mov dword ptr [rsp+116], 4
+ jmp L_break_loop_with_status
+
+L_break_loop:
+ mov dword ptr [rsp+116], 0
+
+L_break_loop_with_status:
+; /* put in, out, bits, and hold back into ar and pop esp */
+ mov [rsp+16], rsi ; /* in */
+ mov [rsp+32], rdi ; /* out */
+ mov [rsp+88], ebx ; /* bits */
+ mov [rsp+80], rdx ; /* hold */
+
+ mov rax, [rsp] ; /* restore rbp and rsp */
+ mov rbp, [rsp+8]
+ mov rsp, rax
+
+
+
+ mov rsi,[rsp-8]
+ mov rdi,[rsp-16]
+ mov r12,[rsp-24]
+ mov r13,[rsp-32]
+ mov r14,[rsp-40]
+ mov r15,[rsp-48]
+ mov rbx,[rsp-56]
+
+ ret 0
+; :
+; : "m" (ar)
+; : "memory", "%rax", "%rbx", "%rcx", "%rdx", "%rsi", "%rdi",
+; "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15"
+; );
+
+inffas8664fnc ENDP
+;_TEXT ENDS
+END
diff --git a/compat/zlib/contrib/masmx64/readme.txt b/compat/zlib/contrib/masmx64/readme.txt
new file mode 100644
index 0000000..2da6733
--- /dev/null
+++ b/compat/zlib/contrib/masmx64/readme.txt
@@ -0,0 +1,31 @@
+Summary
+-------
+This directory contains ASM implementations of the functions
+longest_match() and inflate_fast(), for 64 bits x86 (both AMD64 and Intel EM64t),
+for use with Microsoft Macro Assembler (x64) for AMD64 and Microsoft C++ 64 bits.
+
+gvmat64.asm is written by Gilles Vollant (2005), by using Brian Raiter 686/32 bits
+ assembly optimized version from Jean-loup Gailly original longest_match function
+
+inffasx64.asm and inffas8664.c were written by Chris Anderson, by optimizing
+ original function from Mark Adler
+
+Use instructions
+----------------
+Assemble the .asm files using MASM and put the object files into the zlib source
+directory. You can also get object files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
+
+define ASMV and ASMINF in your project. Include inffas8664.c in your source tree,
+and inffasx64.obj and gvmat64.obj as object to link.
+
+
+Build instructions
+------------------
+run bld_64.bat with Microsoft Macro Assembler (x64) for AMD64 (ml64.exe)
+
+ml64.exe is given with Visual Studio 2005, Windows 2003 server DDK
+
+You can get Windows 2003 server DDK with ml64 and cl for AMD64 from
+ http://www.microsoft.com/whdc/devtools/ddk/default.mspx for low price)
diff --git a/compat/zlib/contrib/masmx86/bld_ml32.bat b/compat/zlib/contrib/masmx86/bld_ml32.bat
new file mode 100644
index 0000000..e1b86bf
--- /dev/null
+++ b/compat/zlib/contrib/masmx86/bld_ml32.bat
@@ -0,0 +1,2 @@
+ml /coff /Zi /c /Flmatch686.lst match686.asm
+ml /coff /Zi /c /Flinffas32.lst inffas32.asm
diff --git a/compat/zlib/contrib/masmx86/inffas32.asm b/compat/zlib/contrib/masmx86/inffas32.asm
new file mode 100644
index 0000000..03d20f8
--- /dev/null
+++ b/compat/zlib/contrib/masmx86/inffas32.asm
@@ -0,0 +1,1080 @@
+;/* inffas32.asm is a hand tuned assembler version of inffast.c -- fast decoding
+; *
+; * inffas32.asm is derivated from inffas86.c, with translation of assembly code
+; *
+; * Copyright (C) 1995-2003 Mark Adler
+; * For conditions of distribution and use, see copyright notice in zlib.h
+; *
+; * Copyright (C) 2003 Chris Anderson <christop@charm.net>
+; * Please use the copyright conditions above.
+; *
+; * Mar-13-2003 -- Most of this is derived from inffast.S which is derived from
+; * the gcc -S output of zlib-1.2.0/inffast.c. Zlib-1.2.0 is in beta release at
+; * the moment. I have successfully compiled and tested this code with gcc2.96,
+; * gcc3.2, icc5.0, msvc6.0. It is very close to the speed of inffast.S
+; * compiled with gcc -DNO_MMX, but inffast.S is still faster on the P3 with MMX
+; * enabled. I will attempt to merge the MMX code into this version. Newer
+; * versions of this and inffast.S can be found at
+; * http://www.eetbeetee.com/zlib/ and http://www.charm.net/~christop/zlib/
+; *
+; * 2005 : modification by Gilles Vollant
+; */
+; For Visual C++ 4.x and higher and ML 6.x and higher
+; ml.exe is in directory \MASM611C of Win95 DDK
+; ml.exe is also distributed in http://www.masm32.com/masmdl.htm
+; and in VC++2003 toolkit at http://msdn.microsoft.com/visualc/vctoolkit2003/
+;
+;
+; compile with command line option
+; ml /coff /Zi /c /Flinffas32.lst inffas32.asm
+
+; if you define NO_GZIP (see inflate.h), compile with
+; ml /coff /Zi /c /Flinffas32.lst /DNO_GUNZIP inffas32.asm
+
+
+; zlib122sup is 0 fort zlib 1.2.2.1 and lower
+; zlib122sup is 8 fort zlib 1.2.2.2 and more (with addition of dmax and head
+; in inflate_state in inflate.h)
+zlib1222sup equ 8
+
+
+IFDEF GUNZIP
+ INFLATE_MODE_TYPE equ 11
+ INFLATE_MODE_BAD equ 26
+ELSE
+ IFNDEF NO_GUNZIP
+ INFLATE_MODE_TYPE equ 11
+ INFLATE_MODE_BAD equ 26
+ ELSE
+ INFLATE_MODE_TYPE equ 3
+ INFLATE_MODE_BAD equ 17
+ ENDIF
+ENDIF
+
+
+; 75 "inffast.S"
+;FILE "inffast.S"
+
+;;;GLOBAL _inflate_fast
+
+;;;SECTION .text
+
+
+
+ .586p
+ .mmx
+
+ name inflate_fast_x86
+ .MODEL FLAT
+
+_DATA segment
+inflate_fast_use_mmx:
+ dd 1
+
+
+_TEXT segment
+
+
+
+ALIGN 4
+ db 'Fast decoding Code from Chris Anderson'
+ db 0
+
+ALIGN 4
+invalid_literal_length_code_msg:
+ db 'invalid literal/length code'
+ db 0
+
+ALIGN 4
+invalid_distance_code_msg:
+ db 'invalid distance code'
+ db 0
+
+ALIGN 4
+invalid_distance_too_far_msg:
+ db 'invalid distance too far back'
+ db 0
+
+
+ALIGN 4
+inflate_fast_mask:
+dd 0
+dd 1
+dd 3
+dd 7
+dd 15
+dd 31
+dd 63
+dd 127
+dd 255
+dd 511
+dd 1023
+dd 2047
+dd 4095
+dd 8191
+dd 16383
+dd 32767
+dd 65535
+dd 131071
+dd 262143
+dd 524287
+dd 1048575
+dd 2097151
+dd 4194303
+dd 8388607
+dd 16777215
+dd 33554431
+dd 67108863
+dd 134217727
+dd 268435455
+dd 536870911
+dd 1073741823
+dd 2147483647
+dd 4294967295
+
+
+mode_state equ 0 ;/* state->mode */
+wsize_state equ (32+zlib1222sup) ;/* state->wsize */
+write_state equ (36+4+zlib1222sup) ;/* state->write */
+window_state equ (40+4+zlib1222sup) ;/* state->window */
+hold_state equ (44+4+zlib1222sup) ;/* state->hold */
+bits_state equ (48+4+zlib1222sup) ;/* state->bits */
+lencode_state equ (64+4+zlib1222sup) ;/* state->lencode */
+distcode_state equ (68+4+zlib1222sup) ;/* state->distcode */
+lenbits_state equ (72+4+zlib1222sup) ;/* state->lenbits */
+distbits_state equ (76+4+zlib1222sup) ;/* state->distbits */
+
+
+;;SECTION .text
+; 205 "inffast.S"
+;GLOBAL inflate_fast_use_mmx
+
+;SECTION .data
+
+
+; GLOBAL inflate_fast_use_mmx:object
+;.size inflate_fast_use_mmx, 4
+; 226 "inffast.S"
+;SECTION .text
+
+ALIGN 4
+_inflate_fast proc near
+.FPO (16, 4, 0, 0, 1, 0)
+ push edi
+ push esi
+ push ebp
+ push ebx
+ pushfd
+ sub esp,64
+ cld
+
+
+
+
+ mov esi, [esp+88]
+ mov edi, [esi+28]
+
+
+
+
+
+
+
+ mov edx, [esi+4]
+ mov eax, [esi+0]
+
+ add edx,eax
+ sub edx,11
+
+ mov [esp+44],eax
+ mov [esp+20],edx
+
+ mov ebp, [esp+92]
+ mov ecx, [esi+16]
+ mov ebx, [esi+12]
+
+ sub ebp,ecx
+ neg ebp
+ add ebp,ebx
+
+ sub ecx,257
+ add ecx,ebx
+
+ mov [esp+60],ebx
+ mov [esp+40],ebp
+ mov [esp+16],ecx
+; 285 "inffast.S"
+ mov eax, [edi+lencode_state]
+ mov ecx, [edi+distcode_state]
+
+ mov [esp+8],eax
+ mov [esp+12],ecx
+
+ mov eax,1
+ mov ecx, [edi+lenbits_state]
+ shl eax,cl
+ dec eax
+ mov [esp+0],eax
+
+ mov eax,1
+ mov ecx, [edi+distbits_state]
+ shl eax,cl
+ dec eax
+ mov [esp+4],eax
+
+ mov eax, [edi+wsize_state]
+ mov ecx, [edi+write_state]
+ mov edx, [edi+window_state]
+
+ mov [esp+52],eax
+ mov [esp+48],ecx
+ mov [esp+56],edx
+
+ mov ebp, [edi+hold_state]
+ mov ebx, [edi+bits_state]
+; 321 "inffast.S"
+ mov esi, [esp+44]
+ mov ecx, [esp+20]
+ cmp ecx,esi
+ ja L_align_long
+
+ add ecx,11
+ sub ecx,esi
+ mov eax,12
+ sub eax,ecx
+ lea edi, [esp+28]
+ rep movsb
+ mov ecx,eax
+ xor eax,eax
+ rep stosb
+ lea esi, [esp+28]
+ mov [esp+20],esi
+ jmp L_is_aligned
+
+
+L_align_long:
+ test esi,3
+ jz L_is_aligned
+ xor eax,eax
+ mov al, [esi]
+ inc esi
+ mov ecx,ebx
+ add ebx,8
+ shl eax,cl
+ or ebp,eax
+ jmp L_align_long
+
+L_is_aligned:
+ mov edi, [esp+60]
+; 366 "inffast.S"
+L_check_mmx:
+ cmp dword ptr [inflate_fast_use_mmx],2
+ je L_init_mmx
+ ja L_do_loop
+
+ push eax
+ push ebx
+ push ecx
+ push edx
+ pushfd
+ mov eax, [esp]
+ xor dword ptr [esp],0200000h
+
+
+
+
+ popfd
+ pushfd
+ pop edx
+ xor edx,eax
+ jz L_dont_use_mmx
+ xor eax,eax
+ cpuid
+ cmp ebx,0756e6547h
+ jne L_dont_use_mmx
+ cmp ecx,06c65746eh
+ jne L_dont_use_mmx
+ cmp edx,049656e69h
+ jne L_dont_use_mmx
+ mov eax,1
+ cpuid
+ shr eax,8
+ and eax,15
+ cmp eax,6
+ jne L_dont_use_mmx
+ test edx,0800000h
+ jnz L_use_mmx
+ jmp L_dont_use_mmx
+L_use_mmx:
+ mov dword ptr [inflate_fast_use_mmx],2
+ jmp L_check_mmx_pop
+L_dont_use_mmx:
+ mov dword ptr [inflate_fast_use_mmx],3
+L_check_mmx_pop:
+ pop edx
+ pop ecx
+ pop ebx
+ pop eax
+ jmp L_check_mmx
+; 426 "inffast.S"
+ALIGN 4
+L_do_loop:
+; 437 "inffast.S"
+ cmp bl,15
+ ja L_get_length_code
+
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+
+L_get_length_code:
+ mov edx, [esp+0]
+ mov ecx, [esp+8]
+ and edx,ebp
+ mov eax, [ecx+edx*4]
+
+L_dolen:
+
+
+
+
+
+
+ mov cl,ah
+ sub bl,ah
+ shr ebp,cl
+
+
+
+
+
+
+ test al,al
+ jnz L_test_for_length_base
+
+ shr eax,16
+ stosb
+
+L_while_test:
+
+
+ cmp [esp+16],edi
+ jbe L_break_loop
+
+ cmp [esp+20],esi
+ ja L_do_loop
+ jmp L_break_loop
+
+L_test_for_length_base:
+; 502 "inffast.S"
+ mov edx,eax
+ shr edx,16
+ mov cl,al
+
+ test al,16
+ jz L_test_for_second_level_length
+ and cl,15
+ jz L_save_len
+ cmp bl,cl
+ jae L_add_bits_to_len
+
+ mov ch,cl
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+ mov cl,ch
+
+L_add_bits_to_len:
+ mov eax,1
+ shl eax,cl
+ dec eax
+ sub bl,cl
+ and eax,ebp
+ shr ebp,cl
+ add edx,eax
+
+L_save_len:
+ mov [esp+24],edx
+
+
+L_decode_distance:
+; 549 "inffast.S"
+ cmp bl,15
+ ja L_get_distance_code
+
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+
+L_get_distance_code:
+ mov edx, [esp+4]
+ mov ecx, [esp+12]
+ and edx,ebp
+ mov eax, [ecx+edx*4]
+
+
+L_dodist:
+ mov edx,eax
+ shr edx,16
+ mov cl,ah
+ sub bl,ah
+ shr ebp,cl
+; 584 "inffast.S"
+ mov cl,al
+
+ test al,16
+ jz L_test_for_second_level_dist
+ and cl,15
+ jz L_check_dist_one
+ cmp bl,cl
+ jae L_add_bits_to_dist
+
+ mov ch,cl
+ xor eax,eax
+ lodsw
+ mov cl,bl
+ add bl,16
+ shl eax,cl
+ or ebp,eax
+ mov cl,ch
+
+L_add_bits_to_dist:
+ mov eax,1
+ shl eax,cl
+ dec eax
+ sub bl,cl
+ and eax,ebp
+ shr ebp,cl
+ add edx,eax
+ jmp L_check_window
+
+L_check_window:
+; 625 "inffast.S"
+ mov [esp+44],esi
+ mov eax,edi
+ sub eax, [esp+40]
+
+ cmp eax,edx
+ jb L_clip_window
+
+ mov ecx, [esp+24]
+ mov esi,edi
+ sub esi,edx
+
+ sub ecx,3
+ mov al, [esi]
+ mov [edi],al
+ mov al, [esi+1]
+ mov dl, [esi+2]
+ add esi,3
+ mov [edi+1],al
+ mov [edi+2],dl
+ add edi,3
+ rep movsb
+
+ mov esi, [esp+44]
+ jmp L_while_test
+
+ALIGN 4
+L_check_dist_one:
+ cmp edx,1
+ jne L_check_window
+ cmp [esp+40],edi
+ je L_check_window
+
+ dec edi
+ mov ecx, [esp+24]
+ mov al, [edi]
+ sub ecx,3
+
+ mov [edi+1],al
+ mov [edi+2],al
+ mov [edi+3],al
+ add edi,4
+ rep stosb
+
+ jmp L_while_test
+
+ALIGN 4
+L_test_for_second_level_length:
+
+
+
+
+ test al,64
+ jnz L_test_for_end_of_block
+
+ mov eax,1
+ shl eax,cl
+ dec eax
+ and eax,ebp
+ add eax,edx
+ mov edx, [esp+8]
+ mov eax, [edx+eax*4]
+ jmp L_dolen
+
+ALIGN 4
+L_test_for_second_level_dist:
+
+
+
+
+ test al,64
+ jnz L_invalid_distance_code
+
+ mov eax,1
+ shl eax,cl
+ dec eax
+ and eax,ebp
+ add eax,edx
+ mov edx, [esp+12]
+ mov eax, [edx+eax*4]
+ jmp L_dodist
+
+ALIGN 4
+L_clip_window:
+; 721 "inffast.S"
+ mov ecx,eax
+ mov eax, [esp+52]
+ neg ecx
+ mov esi, [esp+56]
+
+ cmp eax,edx
+ jb L_invalid_distance_too_far
+
+ add ecx,edx
+ cmp dword ptr [esp+48],0
+ jne L_wrap_around_window
+
+ sub eax,ecx
+ add esi,eax
+; 749 "inffast.S"
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+L_wrap_around_window:
+; 793 "inffast.S"
+ mov eax, [esp+48]
+ cmp ecx,eax
+ jbe L_contiguous_in_window
+
+ add esi, [esp+52]
+ add esi,eax
+ sub esi,ecx
+ sub ecx,eax
+
+
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi, [esp+56]
+ mov ecx, [esp+48]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+ jmp L_do_copy1
+
+L_contiguous_in_window:
+; 836 "inffast.S"
+ add esi,eax
+ sub esi,ecx
+
+
+ mov eax, [esp+24]
+ cmp eax,ecx
+ jbe L_do_copy1
+
+ sub eax,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,edx
+
+L_do_copy1:
+; 862 "inffast.S"
+ mov ecx,eax
+ rep movsb
+
+ mov esi, [esp+44]
+ jmp L_while_test
+; 878 "inffast.S"
+ALIGN 4
+L_init_mmx:
+ emms
+
+
+
+
+
+ movd mm0,ebp
+ mov ebp,ebx
+; 896 "inffast.S"
+ movd mm4,dword ptr [esp+0]
+ movq mm3,mm4
+ movd mm5,dword ptr [esp+4]
+ movq mm2,mm5
+ pxor mm1,mm1
+ mov ebx, [esp+8]
+ jmp L_do_loop_mmx
+
+ALIGN 4
+L_do_loop_mmx:
+ psrlq mm0,mm1
+
+ cmp ebp,32
+ ja L_get_length_code_mmx
+
+ movd mm6,ebp
+ movd mm7,dword ptr [esi]
+ add esi,4
+ psllq mm7,mm6
+ add ebp,32
+ por mm0,mm7
+
+L_get_length_code_mmx:
+ pand mm4,mm0
+ movd eax,mm4
+ movq mm4,mm3
+ mov eax, [ebx+eax*4]
+
+L_dolen_mmx:
+ movzx ecx,ah
+ movd mm1,ecx
+ sub ebp,ecx
+
+ test al,al
+ jnz L_test_for_length_base_mmx
+
+ shr eax,16
+ stosb
+
+L_while_test_mmx:
+
+
+ cmp [esp+16],edi
+ jbe L_break_loop
+
+ cmp [esp+20],esi
+ ja L_do_loop_mmx
+ jmp L_break_loop
+
+L_test_for_length_base_mmx:
+
+ mov edx,eax
+ shr edx,16
+
+ test al,16
+ jz L_test_for_second_level_length_mmx
+ and eax,15
+ jz L_decode_distance_mmx
+
+ psrlq mm0,mm1
+ movd mm1,eax
+ movd ecx,mm0
+ sub ebp,eax
+ and ecx, [inflate_fast_mask+eax*4]
+ add edx,ecx
+
+L_decode_distance_mmx:
+ psrlq mm0,mm1
+
+ cmp ebp,32
+ ja L_get_dist_code_mmx
+
+ movd mm6,ebp
+ movd mm7,dword ptr [esi]
+ add esi,4
+ psllq mm7,mm6
+ add ebp,32
+ por mm0,mm7
+
+L_get_dist_code_mmx:
+ mov ebx, [esp+12]
+ pand mm5,mm0
+ movd eax,mm5
+ movq mm5,mm2
+ mov eax, [ebx+eax*4]
+
+L_dodist_mmx:
+
+ movzx ecx,ah
+ mov ebx,eax
+ shr ebx,16
+ sub ebp,ecx
+ movd mm1,ecx
+
+ test al,16
+ jz L_test_for_second_level_dist_mmx
+ and eax,15
+ jz L_check_dist_one_mmx
+
+L_add_bits_to_dist_mmx:
+ psrlq mm0,mm1
+ movd mm1,eax
+ movd ecx,mm0
+ sub ebp,eax
+ and ecx, [inflate_fast_mask+eax*4]
+ add ebx,ecx
+
+L_check_window_mmx:
+ mov [esp+44],esi
+ mov eax,edi
+ sub eax, [esp+40]
+
+ cmp eax,ebx
+ jb L_clip_window_mmx
+
+ mov ecx,edx
+ mov esi,edi
+ sub esi,ebx
+
+ sub ecx,3
+ mov al, [esi]
+ mov [edi],al
+ mov al, [esi+1]
+ mov dl, [esi+2]
+ add esi,3
+ mov [edi+1],al
+ mov [edi+2],dl
+ add edi,3
+ rep movsb
+
+ mov esi, [esp+44]
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+
+ALIGN 4
+L_check_dist_one_mmx:
+ cmp ebx,1
+ jne L_check_window_mmx
+ cmp [esp+40],edi
+ je L_check_window_mmx
+
+ dec edi
+ mov ecx,edx
+ mov al, [edi]
+ sub ecx,3
+
+ mov [edi+1],al
+ mov [edi+2],al
+ mov [edi+3],al
+ add edi,4
+ rep stosb
+
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+
+ALIGN 4
+L_test_for_second_level_length_mmx:
+ test al,64
+ jnz L_test_for_end_of_block
+
+ and eax,15
+ psrlq mm0,mm1
+ movd ecx,mm0
+ and ecx, [inflate_fast_mask+eax*4]
+ add ecx,edx
+ mov eax, [ebx+ecx*4]
+ jmp L_dolen_mmx
+
+ALIGN 4
+L_test_for_second_level_dist_mmx:
+ test al,64
+ jnz L_invalid_distance_code
+
+ and eax,15
+ psrlq mm0,mm1
+ movd ecx,mm0
+ and ecx, [inflate_fast_mask+eax*4]
+ mov eax, [esp+12]
+ add ecx,ebx
+ mov eax, [eax+ecx*4]
+ jmp L_dodist_mmx
+
+ALIGN 4
+L_clip_window_mmx:
+
+ mov ecx,eax
+ mov eax, [esp+52]
+ neg ecx
+ mov esi, [esp+56]
+
+ cmp eax,ebx
+ jb L_invalid_distance_too_far
+
+ add ecx,ebx
+ cmp dword ptr [esp+48],0
+ jne L_wrap_around_window_mmx
+
+ sub eax,ecx
+ add esi,eax
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+L_wrap_around_window_mmx:
+
+ mov eax, [esp+48]
+ cmp ecx,eax
+ jbe L_contiguous_in_window_mmx
+
+ add esi, [esp+52]
+ add esi,eax
+ sub esi,ecx
+ sub ecx,eax
+
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi, [esp+56]
+ mov ecx, [esp+48]
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+ jmp L_do_copy1_mmx
+
+L_contiguous_in_window_mmx:
+
+ add esi,eax
+ sub esi,ecx
+
+
+ cmp edx,ecx
+ jbe L_do_copy1_mmx
+
+ sub edx,ecx
+ rep movsb
+ mov esi,edi
+ sub esi,ebx
+
+L_do_copy1_mmx:
+
+
+ mov ecx,edx
+ rep movsb
+
+ mov esi, [esp+44]
+ mov ebx, [esp+8]
+ jmp L_while_test_mmx
+; 1174 "inffast.S"
+L_invalid_distance_code:
+
+
+
+
+
+ mov ecx, invalid_distance_code_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_test_for_end_of_block:
+
+
+
+
+
+ test al,32
+ jz L_invalid_literal_length_code
+
+ mov ecx,0
+ mov edx,INFLATE_MODE_TYPE
+ jmp L_update_stream_state
+
+L_invalid_literal_length_code:
+
+
+
+
+
+ mov ecx, invalid_literal_length_code_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_invalid_distance_too_far:
+
+
+
+ mov esi, [esp+44]
+ mov ecx, invalid_distance_too_far_msg
+ mov edx,INFLATE_MODE_BAD
+ jmp L_update_stream_state
+
+L_update_stream_state:
+
+ mov eax, [esp+88]
+ test ecx,ecx
+ jz L_skip_msg
+ mov [eax+24],ecx
+L_skip_msg:
+ mov eax, [eax+28]
+ mov [eax+mode_state],edx
+ jmp L_break_loop
+
+ALIGN 4
+L_break_loop:
+; 1243 "inffast.S"
+ cmp dword ptr [inflate_fast_use_mmx],2
+ jne L_update_next_in
+
+
+
+ mov ebx,ebp
+
+L_update_next_in:
+; 1266 "inffast.S"
+ mov eax, [esp+88]
+ mov ecx,ebx
+ mov edx, [eax+28]
+ shr ecx,3
+ sub esi,ecx
+ shl ecx,3
+ sub ebx,ecx
+ mov [eax+12],edi
+ mov [edx+bits_state],ebx
+ mov ecx,ebx
+
+ lea ebx, [esp+28]
+ cmp [esp+20],ebx
+ jne L_buf_not_used
+
+ sub esi,ebx
+ mov ebx, [eax+0]
+ mov [esp+20],ebx
+ add esi,ebx
+ mov ebx, [eax+4]
+ sub ebx,11
+ add [esp+20],ebx
+
+L_buf_not_used:
+ mov [eax+0],esi
+
+ mov ebx,1
+ shl ebx,cl
+ dec ebx
+
+
+
+
+
+ cmp dword ptr [inflate_fast_use_mmx],2
+ jne L_update_hold
+
+
+
+ psrlq mm0,mm1
+ movd ebp,mm0
+
+ emms
+
+L_update_hold:
+
+
+
+ and ebp,ebx
+ mov [edx+hold_state],ebp
+
+
+
+
+ mov ebx, [esp+20]
+ cmp ebx,esi
+ jbe L_last_is_smaller
+
+ sub ebx,esi
+ add ebx,11
+ mov [eax+4],ebx
+ jmp L_fixup_out
+L_last_is_smaller:
+ sub esi,ebx
+ neg esi
+ add esi,11
+ mov [eax+4],esi
+
+
+
+
+L_fixup_out:
+
+ mov ebx, [esp+16]
+ cmp ebx,edi
+ jbe L_end_is_smaller
+
+ sub ebx,edi
+ add ebx,257
+ mov [eax+16],ebx
+ jmp L_done
+L_end_is_smaller:
+ sub edi,ebx
+ neg edi
+ add edi,257
+ mov [eax+16],edi
+
+
+
+
+
+L_done:
+ add esp,64
+ popfd
+ pop ebx
+ pop ebp
+ pop esi
+ pop edi
+ ret
+_inflate_fast endp
+
+_TEXT ends
+end
diff --git a/compat/zlib/contrib/masmx86/match686.asm b/compat/zlib/contrib/masmx86/match686.asm
new file mode 100644
index 0000000..3b09212
--- /dev/null
+++ b/compat/zlib/contrib/masmx86/match686.asm
@@ -0,0 +1,479 @@
+; match686.asm -- Asm portion of the optimized longest_match for 32 bits x86
+; Copyright (C) 1995-1996 Jean-loup Gailly, Brian Raiter and Gilles Vollant.
+; File written by Gilles Vollant, by converting match686.S from Brian Raiter
+; for MASM. This is as assembly version of longest_match
+; from Jean-loup Gailly in deflate.c
+;
+; http://www.zlib.net
+; http://www.winimage.com/zLibDll
+; http://www.muppetlabs.com/~breadbox/software/assembly.html
+;
+; For Visual C++ 4.x and higher and ML 6.x and higher
+; ml.exe is distributed in
+; http://www.microsoft.com/downloads/details.aspx?FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+;
+; this file contain two implementation of longest_match
+;
+; this longest_match was written by Brian raiter (1998), optimized for Pentium Pro
+; (and the faster known version of match_init on modern Core 2 Duo and AMD Phenom)
+;
+; for using an assembly version of longest_match, you need define ASMV in project
+;
+; compile the asm file running
+; ml /coff /Zi /c /Flmatch686.lst match686.asm
+; and do not include match686.obj in your project
+;
+; note: contrib of zLib 1.2.3 and earlier contained both a deprecated version for
+; Pentium (prior Pentium Pro) and this version for Pentium Pro and modern processor
+; with autoselect (with cpu detection code)
+; if you want support the old pentium optimization, you can still use these version
+;
+; this file is not optimized for old pentium, but it compatible with all x86 32 bits
+; processor (starting 80386)
+;
+;
+; see below : zlib1222add must be adjuster if you use a zlib version < 1.2.2.2
+
+;uInt longest_match(s, cur_match)
+; deflate_state *s;
+; IPos cur_match; /* current match */
+
+ NbStack equ 76
+ cur_match equ dword ptr[esp+NbStack-0]
+ str_s equ dword ptr[esp+NbStack-4]
+; 5 dword on top (ret,ebp,esi,edi,ebx)
+ adrret equ dword ptr[esp+NbStack-8]
+ pushebp equ dword ptr[esp+NbStack-12]
+ pushedi equ dword ptr[esp+NbStack-16]
+ pushesi equ dword ptr[esp+NbStack-20]
+ pushebx equ dword ptr[esp+NbStack-24]
+
+ chain_length equ dword ptr [esp+NbStack-28]
+ limit equ dword ptr [esp+NbStack-32]
+ best_len equ dword ptr [esp+NbStack-36]
+ window equ dword ptr [esp+NbStack-40]
+ prev equ dword ptr [esp+NbStack-44]
+ scan_start equ word ptr [esp+NbStack-48]
+ wmask equ dword ptr [esp+NbStack-52]
+ match_start_ptr equ dword ptr [esp+NbStack-56]
+ nice_match equ dword ptr [esp+NbStack-60]
+ scan equ dword ptr [esp+NbStack-64]
+
+ windowlen equ dword ptr [esp+NbStack-68]
+ match_start equ dword ptr [esp+NbStack-72]
+ strend equ dword ptr [esp+NbStack-76]
+ NbStackAdd equ (NbStack-24)
+
+ .386p
+
+ name gvmatch
+ .MODEL FLAT
+
+
+
+; 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").
+
+ zlib1222add equ 8
+
+; Note : these value are good with a 8 bytes boundary pack structure
+ dep_chain_length equ 74h+zlib1222add
+ dep_window equ 30h+zlib1222add
+ dep_strstart equ 64h+zlib1222add
+ dep_prev_length equ 70h+zlib1222add
+ dep_nice_match equ 88h+zlib1222add
+ dep_w_size equ 24h+zlib1222add
+ dep_prev equ 38h+zlib1222add
+ dep_w_mask equ 2ch+zlib1222add
+ dep_good_match equ 84h+zlib1222add
+ dep_match_start equ 68h+zlib1222add
+ dep_lookahead equ 6ch+zlib1222add
+
+
+_TEXT segment
+
+IFDEF NOUNDERLINE
+ public longest_match
+ public match_init
+ELSE
+ public _longest_match
+ public _match_init
+ENDIF
+
+ MAX_MATCH equ 258
+ MIN_MATCH equ 3
+ MIN_LOOKAHEAD equ (MAX_MATCH+MIN_MATCH+1)
+
+
+
+MAX_MATCH equ 258
+MIN_MATCH equ 3
+MIN_LOOKAHEAD equ (MAX_MATCH + MIN_MATCH + 1)
+MAX_MATCH_8_ equ ((MAX_MATCH + 7) AND 0FFF0h)
+
+
+;;; stack frame offsets
+
+chainlenwmask equ esp + 0 ; high word: current chain len
+ ; low word: s->wmask
+window equ esp + 4 ; local copy of s->window
+windowbestlen equ esp + 8 ; s->window + bestlen
+scanstart equ esp + 16 ; first two bytes of string
+scanend equ esp + 12 ; last two bytes of string
+scanalign equ esp + 20 ; dword-misalignment of string
+nicematch equ esp + 24 ; a good enough match size
+bestlen equ esp + 28 ; size of best match so far
+scan equ esp + 32 ; ptr to string wanting match
+
+LocalVarsSize equ 36
+; saved ebx byte esp + 36
+; saved edi byte esp + 40
+; saved esi byte esp + 44
+; saved ebp byte esp + 48
+; return address byte esp + 52
+deflatestate equ esp + 56 ; the function arguments
+curmatch equ esp + 60
+
+;;; 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.)
+
+dsWSize equ 36+zlib1222add
+dsWMask equ 44+zlib1222add
+dsWindow equ 48+zlib1222add
+dsPrev equ 56+zlib1222add
+dsMatchLen equ 88+zlib1222add
+dsPrevMatch equ 92+zlib1222add
+dsStrStart equ 100+zlib1222add
+dsMatchStart equ 104+zlib1222add
+dsLookahead equ 108+zlib1222add
+dsPrevLen equ 112+zlib1222add
+dsMaxChainLen equ 116+zlib1222add
+dsGoodMatch equ 132+zlib1222add
+dsNiceMatch equ 136+zlib1222add
+
+
+;;; match686.asm -- Pentium-Pro-optimized version of longest_match()
+;;; Written for zlib 1.1.2
+;;; Copyright (C) 1998 Brian Raiter <breadbox@muppetlabs.com>
+;;; You can look at http://www.muppetlabs.com/~breadbox/software/assembly.html
+;;;
+;;
+;; 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.
+;;
+
+;GLOBAL _longest_match, _match_init
+
+
+;SECTION .text
+
+;;; uInt longest_match(deflate_state *deflatestate, IPos curmatch)
+
+;_longest_match:
+ IFDEF NOUNDERLINE
+ longest_match proc near
+ ELSE
+ _longest_match proc near
+ ENDIF
+.FPO (9, 4, 0, 0, 1, 0)
+
+;;; Save registers that the compiler may be using, and adjust esp to
+;;; make room for our stack frame.
+
+ push ebp
+ push edi
+ push esi
+ push ebx
+ sub esp, LocalVarsSize
+
+;;; 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.
+
+ mov edx, [deflatestate]
+ mov ecx, [curmatch]
+
+;;; uInt wmask = s->w_mask;
+;;; unsigned chain_length = s->max_chain_length;
+;;; if (s->prev_length >= s->good_match) {
+;;; chain_length >>= 2;
+;;; }
+
+ mov eax, [edx + dsPrevLen]
+ mov ebx, [edx + dsGoodMatch]
+ cmp eax, ebx
+ mov eax, [edx + dsWMask]
+ mov ebx, [edx + dsMaxChainLen]
+ 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
+ mov [chainlenwmask], ebx
+
+;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ mov eax, [edx + dsNiceMatch]
+ mov ebx, [edx + dsLookahead]
+ cmp ebx, eax
+ jl LookaheadLess
+ mov ebx, eax
+LookaheadLess: mov [nicematch], ebx
+
+;;; register Bytef *scan = s->window + s->strstart;
+
+ mov esi, [edx + dsWindow]
+ mov [window], esi
+ mov ebp, [edx + dsStrStart]
+ lea edi, [esi + ebp]
+ mov [scan], edi
+
+;;; Determine how many bytes the scan ptr is off from being
+;;; dword-aligned.
+
+ mov eax, edi
+ neg eax
+ and eax, 3
+ mov [scanalign], eax
+
+;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+;;; s->strstart - (IPos)MAX_DIST(s) : NIL;
+
+ mov eax, [edx + dsWSize]
+ sub eax, MIN_LOOKAHEAD
+ sub ebp, eax
+ jg LimitPositive
+ xor ebp, ebp
+LimitPositive:
+
+;;; int best_len = s->prev_length;
+
+ mov eax, [edx + dsPrevLen]
+ mov [bestlen], eax
+
+;;; Store the sum of s->window + best_len in esi locally, and in esi.
+
+ add esi, eax
+ mov [windowbestlen], esi
+
+;;; register ush scan_start = *(ushf*)scan;
+;;; register ush scan_end = *(ushf*)(scan+best_len-1);
+;;; Posf *prev = s->prev;
+
+ movzx ebx, word ptr [edi]
+ mov [scanstart], ebx
+ movzx ebx, word ptr [edi + eax - 1]
+ mov [scanend], ebx
+ mov edi, [edx + dsPrev]
+
+;;; Jump into the main loop.
+
+ mov edx, [chainlenwmask]
+ jmp short LoopEntry
+
+align 4
+
+;;; 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:
+ and ecx, edx
+ movzx ecx, word ptr [edi + ecx*2]
+ cmp ecx, ebp
+ jbe LeaveNow
+ sub edx, 00010000h
+ js LeaveNow
+LoopEntry: movzx eax, word ptr [esi + ecx - 1]
+ cmp eax, ebx
+ jnz LookupLoop
+ mov eax, [window]
+ movzx eax, word ptr [eax + ecx]
+ cmp eax, [scanstart]
+ jnz LookupLoop
+
+;;; 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).
+
+ mov esi, [window]
+ mov edi, [scan]
+ add esi, ecx
+ mov eax, [scanalign]
+ mov edx, 0fffffef8h; -(MAX_MATCH_8)
+ lea edi, [edi + eax + 0108h] ;MAX_MATCH_8]
+ lea esi, [esi + eax + 0108h] ;MAX_MATCH_8]
+
+;;; 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:
+ mov eax, [esi + edx]
+ xor eax, [edi + edx]
+ jnz LeaveLoopCmps
+ mov eax, [esi + edx + 4]
+ xor eax, [edi + edx + 4]
+ jnz LeaveLoopCmps4
+ add edx, 8
+ jnz LoopCmps
+ jmp short LenMaximum
+LeaveLoopCmps4: add edx, 4
+LeaveLoopCmps: test eax, 0000FFFFh
+ jnz LenLower
+ add edx, 2
+ shr eax, 16
+LenLower: sub al, 1
+ adc edx, 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 eax, [edi + edx]
+ mov edi, [scan]
+ sub eax, edi
+ cmp eax, MAX_MATCH
+ 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.
+
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ cmp eax, ebx
+ jg LongerMatch
+ mov esi, [windowbestlen]
+ mov edi, [edx + dsPrev]
+ mov ebx, [scanend]
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; s->match_start = cur_match;
+;;; best_len = len;
+;;; if (len >= nice_match) break;
+;;; scan_end = *(ushf*)(scan+best_len-1);
+
+LongerMatch: mov ebx, [nicematch]
+ mov [bestlen], eax
+ mov [edx + dsMatchStart], ecx
+ cmp eax, ebx
+ jge LeaveNow
+ mov esi, [window]
+ add esi, eax
+ mov [windowbestlen], esi
+ movzx ebx, word ptr [edi + eax - 1]
+ mov edi, [edx + dsPrev]
+ mov [scanend], ebx
+ mov edx, [chainlenwmask]
+ jmp LookupLoop
+
+;;; Accept the current string, with the maximum possible length.
+
+LenMaximum: mov edx, [deflatestate]
+ mov dword ptr [bestlen], MAX_MATCH
+ mov [edx + dsMatchStart], ecx
+
+;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+;;; return s->lookahead;
+
+LeaveNow:
+ mov edx, [deflatestate]
+ mov ebx, [bestlen]
+ mov eax, [edx + dsLookahead]
+ cmp ebx, eax
+ jg LookaheadRet
+ mov eax, ebx
+LookaheadRet:
+
+;;; Restore the stack and return from whence we came.
+
+ add esp, LocalVarsSize
+ pop ebx
+ pop esi
+ pop edi
+ pop ebp
+
+ ret
+; please don't remove this string !
+; Your can freely use match686 in any free or commercial app if you don't remove the string in the binary!
+ db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998",0dh,0ah
+
+
+ IFDEF NOUNDERLINE
+ longest_match endp
+ ELSE
+ _longest_match endp
+ ENDIF
+
+ IFDEF NOUNDERLINE
+ match_init proc near
+ ret
+ match_init endp
+ ELSE
+ _match_init proc near
+ ret
+ _match_init endp
+ ENDIF
+
+
+_TEXT ends
+end
diff --git a/compat/zlib/contrib/masmx86/readme.txt b/compat/zlib/contrib/masmx86/readme.txt
new file mode 100644
index 0000000..3271f72
--- /dev/null
+++ b/compat/zlib/contrib/masmx86/readme.txt
@@ -0,0 +1,27 @@
+
+Summary
+-------
+This directory contains ASM implementations of the functions
+longest_match() and inflate_fast().
+
+
+Use instructions
+----------------
+Assemble using MASM, and copy the object files into the zlib source
+directory, then run the appropriate makefile, as suggested below. You can
+donwload MASM from here:
+
+ http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=7a1c9da0-0510-44a2-b042-7ef370530c64
+
+You can also get objects files here:
+
+ http://www.winimage.com/zLibDll/zlib124_masm_obj.zip
+
+Build instructions
+------------------
+* With Microsoft C and MASM:
+nmake -f win32/Makefile.msc LOC="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj"
+
+* With Borland C and TASM:
+make -f win32/Makefile.bor LOCAL_ZLIB="-DASMV -DASMINF" OBJA="match686.obj inffas32.obj" OBJPA="+match686c.obj+match686.obj+inffas32.obj"
+
diff --git a/compat/zlib/contrib/minizip/Makefile b/compat/zlib/contrib/minizip/Makefile
new file mode 100644
index 0000000..84eaad2
--- /dev/null
+++ b/compat/zlib/contrib/minizip/Makefile
@@ -0,0 +1,25 @@
+CC=cc
+CFLAGS=-O -I../..
+
+UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a
+ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a
+
+.c.o:
+ $(CC) -c $(CFLAGS) $*.c
+
+all: miniunz minizip
+
+miniunz: $(UNZ_OBJS)
+ $(CC) $(CFLAGS) -o $@ $(UNZ_OBJS)
+
+minizip: $(ZIP_OBJS)
+ $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS)
+
+test: miniunz minizip
+ ./minizip test readme.txt
+ ./miniunz -l test.zip
+ mv readme.txt readme.old
+ ./miniunz test.zip
+
+clean:
+ /bin/rm -f *.o *~ minizip miniunz
diff --git a/compat/zlib/contrib/minizip/Makefile.am b/compat/zlib/contrib/minizip/Makefile.am
new file mode 100644
index 0000000..d343011
--- /dev/null
+++ b/compat/zlib/contrib/minizip/Makefile.am
@@ -0,0 +1,45 @@
+lib_LTLIBRARIES = libminizip.la
+
+if COND_DEMOS
+bin_PROGRAMS = miniunzip minizip
+endif
+
+zlib_top_srcdir = $(top_srcdir)/../..
+zlib_top_builddir = $(top_builddir)/../..
+
+AM_CPPFLAGS = -I$(zlib_top_srcdir)
+AM_LDFLAGS = -L$(zlib_top_builddir)
+
+if WIN32
+iowin32_src = iowin32.c
+iowin32_h = iowin32.h
+endif
+
+libminizip_la_SOURCES = \
+ ioapi.c \
+ mztools.c \
+ unzip.c \
+ zip.c \
+ ${iowin32_src}
+
+libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz
+
+minizip_includedir = $(includedir)/minizip
+minizip_include_HEADERS = \
+ crypt.h \
+ ioapi.h \
+ mztools.h \
+ unzip.h \
+ zip.h \
+ ${iowin32_h}
+
+pkgconfigdir = $(libdir)/pkgconfig
+pkgconfig_DATA = minizip.pc
+
+EXTRA_PROGRAMS = miniunzip minizip
+
+miniunzip_SOURCES = miniunz.c
+miniunzip_LDADD = libminizip.la
+
+minizip_SOURCES = minizip.c
+minizip_LDADD = libminizip.la -lz
diff --git a/compat/zlib/contrib/minizip/MiniZip64_Changes.txt b/compat/zlib/contrib/minizip/MiniZip64_Changes.txt
new file mode 100644
index 0000000..13a1bd9
--- /dev/null
+++ b/compat/zlib/contrib/minizip/MiniZip64_Changes.txt
@@ -0,0 +1,6 @@
+
+MiniZip 1.1 was derrived from MiniZip at version 1.01f
+
+Change in 1.0 (Okt 2009)
+ - **TODO - Add history**
+
diff --git a/compat/zlib/contrib/minizip/MiniZip64_info.txt b/compat/zlib/contrib/minizip/MiniZip64_info.txt
new file mode 100644
index 0000000..57d7152
--- /dev/null
+++ b/compat/zlib/contrib/minizip/MiniZip64_info.txt
@@ -0,0 +1,74 @@
+MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson
+
+Introduction
+---------------------
+MiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html )
+
+When adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0.
+All possible work was done for compatibility.
+
+
+Background
+---------------------
+When adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64
+support for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ )
+
+That was used as a starting point. And after that ZIP64 support was added to zip.c
+some refactoring and code cleanup was also done.
+
+
+Changed from MiniZip 1.0 to MiniZip 1.1
+---------------------------------------
+* Added ZIP64 support for unzip ( by Even Rouault )
+* Added ZIP64 support for zip ( by Mathias Svensson )
+* Reverted some changed that Even Rouault did.
+* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users.
+* Added unzip patch for BZIP Compression method (patch create by Daniel Borca)
+* Added BZIP Compress method for zip
+* Did some refactoring and code cleanup
+
+
+Credits
+
+ Gilles Vollant - Original MiniZip author
+ Even Rouault - ZIP64 unzip Support
+ Daniel Borca - BZip Compression method support in unzip
+ Mathias Svensson - ZIP64 zip support
+ Mathias Svensson - BZip Compression method support in zip
+
+ Resources
+
+ ZipLayout http://result42.com/projects/ZipFileLayout
+ Command line tool for Windows that shows the layout and information of the headers in a zip archive.
+ Used when debugging and validating the creation of zip files using MiniZip64
+
+
+ ZIP App Note http://www.pkware.com/documents/casestudies/APPNOTE.TXT
+ Zip File specification
+
+
+Notes.
+ * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined.
+
+License
+----------------------------------------------------------
+ Condition of use and distribution are the same than zlib :
+
+ 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.
+
+----------------------------------------------------------
+
diff --git a/compat/zlib/contrib/minizip/configure.ac b/compat/zlib/contrib/minizip/configure.ac
new file mode 100644
index 0000000..827a4e0
--- /dev/null
+++ b/compat/zlib/contrib/minizip/configure.ac
@@ -0,0 +1,32 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_INIT([minizip], [1.2.8], [bugzilla.redhat.com])
+AC_CONFIG_SRCDIR([minizip.c])
+AM_INIT_AUTOMAKE([foreign])
+LT_INIT
+
+AC_MSG_CHECKING([whether to build example programs])
+AC_ARG_ENABLE([demos], AC_HELP_STRING([--enable-demos], [build example programs]))
+AM_CONDITIONAL([COND_DEMOS], [test "$enable_demos" = yes])
+if test "$enable_demos" = yes
+then
+ AC_MSG_RESULT([yes])
+else
+ AC_MSG_RESULT([no])
+fi
+
+case "${host}" in
+ *-mingw* | mingw*)
+ WIN32="yes"
+ ;;
+ *)
+ ;;
+esac
+AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"])
+
+
+AC_SUBST([HAVE_UNISTD_H], [0])
+AC_CHECK_HEADER([unistd.h], [HAVE_UNISTD_H=1], [])
+AC_CONFIG_FILES([Makefile minizip.pc])
+AC_OUTPUT
diff --git a/compat/zlib/contrib/minizip/crypt.h b/compat/zlib/contrib/minizip/crypt.h
new file mode 100644
index 0000000..1e9e820
--- /dev/null
+++ b/compat/zlib/contrib/minizip/crypt.h
@@ -0,0 +1,131 @@
+/* crypt.h -- base code for crypt/uncrypt ZIPfile
+
+
+ Version 1.01e, February 12th, 2005
+
+ Copyright (C) 1998-2005 Gilles Vollant
+
+ This code is a modified version of crypting code in Infozip distribution
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+
+ If you don't need crypting in your application, just define symbols
+ NOCRYPT and NOUNCRYPT.
+
+ This code support the "Traditional PKWARE Encryption".
+
+ The new AES encryption added on Zip format by Winzip (see the page
+ http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong
+ Encryption is not supported.
+*/
+
+#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8))
+
+/***********************************************************************
+ * Return the next byte in the pseudo-random sequence
+ */
+static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab)
+{
+ unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an
+ * unpredictable manner on 16-bit systems; not a problem
+ * with any known compiler so far, though */
+
+ temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2;
+ return (int)(((temp * (temp ^ 1)) >> 8) & 0xff);
+}
+
+/***********************************************************************
+ * Update the encryption keys with the next byte of plain text
+ */
+static int update_keys(unsigned long* pkeys,const z_crc_t* pcrc_32_tab,int c)
+{
+ (*(pkeys+0)) = CRC32((*(pkeys+0)), c);
+ (*(pkeys+1)) += (*(pkeys+0)) & 0xff;
+ (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1;
+ {
+ register int keyshift = (int)((*(pkeys+1)) >> 24);
+ (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift);
+ }
+ return c;
+}
+
+
+/***********************************************************************
+ * Initialize the encryption keys and the random header according to
+ * the given password.
+ */
+static void init_keys(const char* passwd,unsigned long* pkeys,const z_crc_t* pcrc_32_tab)
+{
+ *(pkeys+0) = 305419896L;
+ *(pkeys+1) = 591751049L;
+ *(pkeys+2) = 878082192L;
+ while (*passwd != '\0') {
+ update_keys(pkeys,pcrc_32_tab,(int)*passwd);
+ passwd++;
+ }
+}
+
+#define zdecode(pkeys,pcrc_32_tab,c) \
+ (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab)))
+
+#define zencode(pkeys,pcrc_32_tab,c,t) \
+ (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), t^(c))
+
+#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+
+#define RAND_HEAD_LEN 12
+ /* "last resort" source for second part of crypt seed pattern */
+# ifndef ZCR_SEED2
+# define ZCR_SEED2 3141592654UL /* use PI as default pattern */
+# endif
+
+static int crypthead(const char* passwd, /* password string */
+ unsigned char* buf, /* where to write header */
+ int bufSize,
+ unsigned long* pkeys,
+ const z_crc_t* pcrc_32_tab,
+ unsigned long crcForCrypting)
+{
+ int n; /* index in random header */
+ int t; /* temporary */
+ int c; /* random byte */
+ unsigned char header[RAND_HEAD_LEN-2]; /* random header */
+ static unsigned calls = 0; /* ensure different random header each time */
+
+ if (bufSize<RAND_HEAD_LEN)
+ return 0;
+
+ /* First generate RAND_HEAD_LEN-2 random bytes. We encrypt the
+ * output of rand() to get less predictability, since rand() is
+ * often poorly implemented.
+ */
+ if (++calls == 1)
+ {
+ srand((unsigned)(time(NULL) ^ ZCR_SEED2));
+ }
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ c = (rand() >> 7) & 0xff;
+ header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t);
+ }
+ /* Encrypt random header (last two bytes is high word of crc) */
+ init_keys(passwd, pkeys, pcrc_32_tab);
+ for (n = 0; n < RAND_HEAD_LEN-2; n++)
+ {
+ buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t);
+ }
+ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t);
+ buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t);
+ return n;
+}
+
+#endif
diff --git a/compat/zlib/contrib/minizip/ioapi.c b/compat/zlib/contrib/minizip/ioapi.c
new file mode 100644
index 0000000..7f5c191
--- /dev/null
+++ b/compat/zlib/contrib/minizip/ioapi.c
@@ -0,0 +1,247 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS)))
+ #define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#if defined(__APPLE__) || defined(IOAPI_NO_64)
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
+#include "ioapi.h"
+
+voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode)
+{
+ if (pfilefunc->zfile_func64.zopen64_file != NULL)
+ return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode);
+ else
+ {
+ return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode);
+ }
+}
+
+long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin)
+{
+ if (pfilefunc->zfile_func64.zseek64_file != NULL)
+ return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin);
+ else
+ {
+ uLong offsetTruncated = (uLong)offset;
+ if (offsetTruncated != offset)
+ return -1;
+ else
+ return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin);
+ }
+}
+
+ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream)
+{
+ if (pfilefunc->zfile_func64.zseek64_file != NULL)
+ return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream);
+ else
+ {
+ uLong tell_uLong = (*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream);
+ if ((tell_uLong) == MAXU32)
+ return (ZPOS64_T)-1;
+ else
+ return tell_uLong;
+ }
+}
+
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32)
+{
+ p_filefunc64_32->zfile_func64.zopen64_file = NULL;
+ p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file;
+ p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+ p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file;
+ p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file;
+ p_filefunc64_32->zfile_func64.ztell64_file = NULL;
+ p_filefunc64_32->zfile_func64.zseek64_file = NULL;
+ p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file;
+ p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file;
+ p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque;
+ p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file;
+ p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file;
+}
+
+
+
+static voidpf ZCALLBACK fopen_file_func OF((voidpf opaque, const char* filename, int mode));
+static uLong ZCALLBACK fread_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+static uLong ZCALLBACK fwrite_file_func OF((voidpf opaque, voidpf stream, const void* buf,uLong size));
+static ZPOS64_T ZCALLBACK ftell64_file_func OF((voidpf opaque, voidpf stream));
+static long ZCALLBACK fseek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+static int ZCALLBACK fclose_file_func OF((voidpf opaque, voidpf stream));
+static int ZCALLBACK ferror_file_func OF((voidpf opaque, voidpf stream));
+
+static voidpf ZCALLBACK fopen_file_func (voidpf opaque, const char* filename, int mode)
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ mode_fopen = "rb";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ mode_fopen = "r+b";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ mode_fopen = "wb";
+
+ if ((filename!=NULL) && (mode_fopen != NULL))
+ file = fopen(filename, mode_fopen);
+ return file;
+}
+
+static voidpf ZCALLBACK fopen64_file_func (voidpf opaque, const void* filename, int mode)
+{
+ FILE* file = NULL;
+ const char* mode_fopen = NULL;
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ mode_fopen = "rb";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ mode_fopen = "r+b";
+ else
+ if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ mode_fopen = "wb";
+
+ if ((filename!=NULL) && (mode_fopen != NULL))
+ file = FOPEN_FUNC((const char*)filename, mode_fopen);
+ return file;
+}
+
+
+static uLong ZCALLBACK fread_file_func (voidpf opaque, voidpf stream, void* buf, uLong size)
+{
+ uLong ret;
+ ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+static uLong ZCALLBACK fwrite_file_func (voidpf opaque, voidpf stream, const void* buf, uLong size)
+{
+ uLong ret;
+ ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream);
+ return ret;
+}
+
+static long ZCALLBACK ftell_file_func (voidpf opaque, voidpf stream)
+{
+ long ret;
+ ret = ftell((FILE *)stream);
+ return ret;
+}
+
+
+static ZPOS64_T ZCALLBACK ftell64_file_func (voidpf opaque, voidpf stream)
+{
+ ZPOS64_T ret;
+ ret = FTELLO_FUNC((FILE *)stream);
+ return ret;
+}
+
+static long ZCALLBACK fseek_file_func (voidpf opaque, voidpf stream, uLong offset, int origin)
+{
+ int fseek_origin=0;
+ long ret;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ fseek_origin = SEEK_CUR;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ fseek_origin = SEEK_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ fseek_origin = SEEK_SET;
+ break;
+ default: return -1;
+ }
+ ret = 0;
+ if (fseek((FILE *)stream, offset, fseek_origin) != 0)
+ ret = -1;
+ return ret;
+}
+
+static long ZCALLBACK fseek64_file_func (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin)
+{
+ int fseek_origin=0;
+ long ret;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ fseek_origin = SEEK_CUR;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ fseek_origin = SEEK_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ fseek_origin = SEEK_SET;
+ break;
+ default: return -1;
+ }
+ ret = 0;
+
+ if(FSEEKO_FUNC((FILE *)stream, offset, fseek_origin) != 0)
+ ret = -1;
+
+ return ret;
+}
+
+
+static int ZCALLBACK fclose_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = fclose((FILE *)stream);
+ return ret;
+}
+
+static int ZCALLBACK ferror_file_func (voidpf opaque, voidpf stream)
+{
+ int ret;
+ ret = ferror((FILE *)stream);
+ return ret;
+}
+
+void fill_fopen_filefunc (pzlib_filefunc_def)
+ zlib_filefunc_def* pzlib_filefunc_def;
+{
+ pzlib_filefunc_def->zopen_file = fopen_file_func;
+ pzlib_filefunc_def->zread_file = fread_file_func;
+ pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+ pzlib_filefunc_def->ztell_file = ftell_file_func;
+ pzlib_filefunc_def->zseek_file = fseek_file_func;
+ pzlib_filefunc_def->zclose_file = fclose_file_func;
+ pzlib_filefunc_def->zerror_file = ferror_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+void fill_fopen64_filefunc (zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = fopen64_file_func;
+ pzlib_filefunc_def->zread_file = fread_file_func;
+ pzlib_filefunc_def->zwrite_file = fwrite_file_func;
+ pzlib_filefunc_def->ztell64_file = ftell64_file_func;
+ pzlib_filefunc_def->zseek64_file = fseek64_file_func;
+ pzlib_filefunc_def->zclose_file = fclose_file_func;
+ pzlib_filefunc_def->zerror_file = ferror_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
diff --git a/compat/zlib/contrib/minizip/ioapi.h b/compat/zlib/contrib/minizip/ioapi.h
new file mode 100644
index 0000000..8dcbdb0
--- /dev/null
+++ b/compat/zlib/contrib/minizip/ioapi.h
@@ -0,0 +1,208 @@
+/* ioapi.h -- IO base function header for compress/uncompress .zip
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ Changes
+
+ Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this)
+ Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux.
+ More if/def section may be needed to support other platforms
+ Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows.
+ (but you should use iowin32.c for windows instead)
+
+*/
+
+#ifndef _ZLIBIOAPI64_H
+#define _ZLIBIOAPI64_H
+
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
+
+ // Linux needs this to support file operation on files larger then 4+GB
+ // But might need better if/def to select just the platforms that needs them.
+
+ #ifndef __USE_FILE_OFFSET64
+ #define __USE_FILE_OFFSET64
+ #endif
+ #ifndef __USE_LARGEFILE64
+ #define __USE_LARGEFILE64
+ #endif
+ #ifndef _LARGEFILE64_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #endif
+ #ifndef _FILE_OFFSET_BIT
+ #define _FILE_OFFSET_BIT 64
+ #endif
+
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "zlib.h"
+
+#if defined(USE_FILE32API)
+#define fopen64 fopen
+#define ftello64 ftell
+#define fseeko64 fseek
+#else
+#ifdef __FreeBSD__
+#define fopen64 fopen
+#define ftello64 ftello
+#define fseeko64 fseeko
+#endif
+#ifdef _MSC_VER
+ #define fopen64 fopen
+ #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC)))
+ #define ftello64 _ftelli64
+ #define fseeko64 _fseeki64
+ #else // old MSC
+ #define ftello64 ftell
+ #define fseeko64 fseek
+ #endif
+#endif
+#endif
+
+/*
+#ifndef ZPOS64_T
+ #ifdef _WIN32
+ #define ZPOS64_T fpos_t
+ #else
+ #include <stdint.h>
+ #define ZPOS64_T uint64_t
+ #endif
+#endif
+*/
+
+#ifdef HAVE_MINIZIP64_CONF_H
+#include "mz64conf.h"
+#endif
+
+/* a type choosen by DEFINE */
+#ifdef HAVE_64BIT_INT_CUSTOM
+typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T;
+#else
+#ifdef HAS_STDINT_H
+#include "stdint.h"
+typedef uint64_t ZPOS64_T;
+#else
+
+/* Maximum unsigned 32-bit value used as placeholder for zip64 */
+#define MAXU32 0xffffffff
+
+#if defined(_MSC_VER) || defined(__BORLANDC__)
+typedef unsigned __int64 ZPOS64_T;
+#else
+typedef unsigned long long int ZPOS64_T;
+#endif
+#endif
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#define ZLIB_FILEFUNC_SEEK_CUR (1)
+#define ZLIB_FILEFUNC_SEEK_END (2)
+#define ZLIB_FILEFUNC_SEEK_SET (0)
+
+#define ZLIB_FILEFUNC_MODE_READ (1)
+#define ZLIB_FILEFUNC_MODE_WRITE (2)
+#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3)
+
+#define ZLIB_FILEFUNC_MODE_EXISTING (4)
+#define ZLIB_FILEFUNC_MODE_CREATE (8)
+
+
+#ifndef ZCALLBACK
+ #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK)
+ #define ZCALLBACK CALLBACK
+ #else
+ #define ZCALLBACK
+ #endif
+#endif
+
+
+
+
+typedef voidpf (ZCALLBACK *open_file_func) OF((voidpf opaque, const char* filename, int mode));
+typedef uLong (ZCALLBACK *read_file_func) OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+typedef uLong (ZCALLBACK *write_file_func) OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+typedef int (ZCALLBACK *close_file_func) OF((voidpf opaque, voidpf stream));
+typedef int (ZCALLBACK *testerror_file_func) OF((voidpf opaque, voidpf stream));
+
+typedef long (ZCALLBACK *tell_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek_file_func) OF((voidpf opaque, voidpf stream, uLong offset, int origin));
+
+
+/* here is the "old" 32 bits structure structure */
+typedef struct zlib_filefunc_def_s
+{
+ open_file_func zopen_file;
+ read_file_func zread_file;
+ write_file_func zwrite_file;
+ tell_file_func ztell_file;
+ seek_file_func zseek_file;
+ close_file_func zclose_file;
+ testerror_file_func zerror_file;
+ voidpf opaque;
+} zlib_filefunc_def;
+
+typedef ZPOS64_T (ZCALLBACK *tell64_file_func) OF((voidpf opaque, voidpf stream));
+typedef long (ZCALLBACK *seek64_file_func) OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+typedef voidpf (ZCALLBACK *open64_file_func) OF((voidpf opaque, const void* filename, int mode));
+
+typedef struct zlib_filefunc64_def_s
+{
+ open64_file_func zopen64_file;
+ read_file_func zread_file;
+ write_file_func zwrite_file;
+ tell64_file_func ztell64_file;
+ seek64_file_func zseek64_file;
+ close_file_func zclose_file;
+ testerror_file_func zerror_file;
+ voidpf opaque;
+} zlib_filefunc64_def;
+
+void fill_fopen64_filefunc OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_fopen_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+
+/* now internal definition, only for zip.c and unzip.h */
+typedef struct zlib_filefunc64_32_def_s
+{
+ zlib_filefunc64_def zfile_func64;
+ open_file_func zopen32_file;
+ tell_file_func ztell32_file;
+ seek_file_func zseek32_file;
+} zlib_filefunc64_32_def;
+
+
+#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
+#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size))
+//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream))
+//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode))
+#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream))
+#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream))
+
+voidpf call_zopen64 OF((const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode));
+long call_zseek64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin));
+ZPOS64_T call_ztell64 OF((const zlib_filefunc64_32_def* pfilefunc,voidpf filestream));
+
+void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32);
+
+#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode)))
+#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream)))
+#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode)))
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/compat/zlib/contrib/minizip/iowin32.c b/compat/zlib/contrib/minizip/iowin32.c
new file mode 100644
index 0000000..a46d96c
--- /dev/null
+++ b/compat/zlib/contrib/minizip/iowin32.c
@@ -0,0 +1,461 @@
+/* iowin32.c -- IO base function header for compress/uncompress .zip
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#include <stdlib.h>
+
+#include "zlib.h"
+#include "ioapi.h"
+#include "iowin32.h"
+
+#ifndef INVALID_HANDLE_VALUE
+#define INVALID_HANDLE_VALUE (0xFFFFFFFF)
+#endif
+
+#ifndef INVALID_SET_FILE_POINTER
+#define INVALID_SET_FILE_POINTER ((DWORD)-1)
+#endif
+
+
+#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API)))
+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
+#define IOWIN32_USING_WINRT_API 1
+#endif
+#endif
+
+voidpf ZCALLBACK win32_open_file_func OF((voidpf opaque, const char* filename, int mode));
+uLong ZCALLBACK win32_read_file_func OF((voidpf opaque, voidpf stream, void* buf, uLong size));
+uLong ZCALLBACK win32_write_file_func OF((voidpf opaque, voidpf stream, const void* buf, uLong size));
+ZPOS64_T ZCALLBACK win32_tell64_file_func OF((voidpf opaque, voidpf stream));
+long ZCALLBACK win32_seek64_file_func OF((voidpf opaque, voidpf stream, ZPOS64_T offset, int origin));
+int ZCALLBACK win32_close_file_func OF((voidpf opaque, voidpf stream));
+int ZCALLBACK win32_error_file_func OF((voidpf opaque, voidpf stream));
+
+typedef struct
+{
+ HANDLE hf;
+ int error;
+} WIN32FILE_IOWIN;
+
+
+static void win32_translate_open_mode(int mode,
+ DWORD* lpdwDesiredAccess,
+ DWORD* lpdwCreationDisposition,
+ DWORD* lpdwShareMode,
+ DWORD* lpdwFlagsAndAttributes)
+{
+ *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0;
+
+ if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ)
+ {
+ *lpdwDesiredAccess = GENERIC_READ;
+ *lpdwCreationDisposition = OPEN_EXISTING;
+ *lpdwShareMode = FILE_SHARE_READ;
+ }
+ else if (mode & ZLIB_FILEFUNC_MODE_EXISTING)
+ {
+ *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+ *lpdwCreationDisposition = OPEN_EXISTING;
+ }
+ else if (mode & ZLIB_FILEFUNC_MODE_CREATE)
+ {
+ *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ;
+ *lpdwCreationDisposition = CREATE_ALWAYS;
+ }
+}
+
+static voidpf win32_build_iowin(HANDLE hFile)
+{
+ voidpf ret=NULL;
+
+ if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE))
+ {
+ WIN32FILE_IOWIN w32fiow;
+ w32fiow.hf = hFile;
+ w32fiow.error = 0;
+ ret = malloc(sizeof(WIN32FILE_IOWIN));
+
+ if (ret==NULL)
+ CloseHandle(hFile);
+ else
+ *((WIN32FILE_IOWIN*)ret) = w32fiow;
+ }
+ return ret;
+}
+
+voidpf ZCALLBACK win32_open64_file_func (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#endif
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open64_file_funcA (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open64_file_funcW (voidpf opaque,const void* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCWSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+voidpf ZCALLBACK win32_open_file_func (voidpf opaque,const char* filename,int mode)
+{
+ const char* mode_fopen = NULL;
+ DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ;
+ HANDLE hFile = NULL;
+
+ win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes);
+
+#ifdef IOWIN32_USING_WINRT_API
+#ifdef UNICODE
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ {
+ WCHAR filenameW[FILENAME_MAX + 0x200 + 1];
+ MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200);
+ hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL);
+ }
+#endif
+#else
+ if ((filename!=NULL) && (dwDesiredAccess != 0))
+ hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL);
+#endif
+
+ return win32_build_iowin(hFile);
+}
+
+
+uLong ZCALLBACK win32_read_file_func (voidpf opaque, voidpf stream, void* buf,uLong size)
+{
+ uLong ret=0;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ if (hFile != NULL)
+ {
+ if (!ReadFile(hFile, buf, size, &ret, NULL))
+ {
+ DWORD dwErr = GetLastError();
+ if (dwErr == ERROR_HANDLE_EOF)
+ dwErr = 0;
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ }
+ }
+
+ return ret;
+}
+
+
+uLong ZCALLBACK win32_write_file_func (voidpf opaque,voidpf stream,const void* buf,uLong size)
+{
+ uLong ret=0;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+
+ if (hFile != NULL)
+ {
+ if (!WriteFile(hFile, buf, size, &ret, NULL))
+ {
+ DWORD dwErr = GetLastError();
+ if (dwErr == ERROR_HANDLE_EOF)
+ dwErr = 0;
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ }
+ }
+
+ return ret;
+}
+
+static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod)
+{
+#ifdef IOWIN32_USING_WINRT_API
+ return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod);
+#else
+ LONG lHigh = pos.HighPart;
+ DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, FILE_CURRENT);
+ BOOL fOk = TRUE;
+ if (dwNewPos == 0xFFFFFFFF)
+ if (GetLastError() != NO_ERROR)
+ fOk = FALSE;
+ if ((newPos != NULL) && (fOk))
+ {
+ newPos->LowPart = dwNewPos;
+ newPos->HighPart = lHigh;
+ }
+ return fOk;
+#endif
+}
+
+long ZCALLBACK win32_tell_file_func (voidpf opaque,voidpf stream)
+{
+ long ret=-1;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ if (hFile != NULL)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = 0;
+
+ if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=(long)pos.LowPart;
+ }
+ return ret;
+}
+
+ZPOS64_T ZCALLBACK win32_tell64_file_func (voidpf opaque, voidpf stream)
+{
+ ZPOS64_T ret= (ZPOS64_T)-1;
+ HANDLE hFile = NULL;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ if (hFile)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = 0;
+
+ if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = (ZPOS64_T)-1;
+ }
+ else
+ ret=pos.QuadPart;
+ }
+ return ret;
+}
+
+
+long ZCALLBACK win32_seek_file_func (voidpf opaque,voidpf stream,uLong offset,int origin)
+{
+ DWORD dwMoveMethod=0xFFFFFFFF;
+ HANDLE hFile = NULL;
+
+ long ret=-1;
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ dwMoveMethod = FILE_CURRENT;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ dwMoveMethod = FILE_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ dwMoveMethod = FILE_BEGIN;
+ break;
+ default: return -1;
+ }
+
+ if (hFile != NULL)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = offset;
+ if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=0;
+ }
+ return ret;
+}
+
+long ZCALLBACK win32_seek64_file_func (voidpf opaque, voidpf stream,ZPOS64_T offset,int origin)
+{
+ DWORD dwMoveMethod=0xFFFFFFFF;
+ HANDLE hFile = NULL;
+ long ret=-1;
+
+ if (stream!=NULL)
+ hFile = ((WIN32FILE_IOWIN*)stream)->hf;
+
+ switch (origin)
+ {
+ case ZLIB_FILEFUNC_SEEK_CUR :
+ dwMoveMethod = FILE_CURRENT;
+ break;
+ case ZLIB_FILEFUNC_SEEK_END :
+ dwMoveMethod = FILE_END;
+ break;
+ case ZLIB_FILEFUNC_SEEK_SET :
+ dwMoveMethod = FILE_BEGIN;
+ break;
+ default: return -1;
+ }
+
+ if (hFile)
+ {
+ LARGE_INTEGER pos;
+ pos.QuadPart = offset;
+ if (!MySetFilePointerEx(hFile, pos, NULL, FILE_CURRENT))
+ {
+ DWORD dwErr = GetLastError();
+ ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr;
+ ret = -1;
+ }
+ else
+ ret=0;
+ }
+ return ret;
+}
+
+int ZCALLBACK win32_close_file_func (voidpf opaque, voidpf stream)
+{
+ int ret=-1;
+
+ if (stream!=NULL)
+ {
+ HANDLE hFile;
+ hFile = ((WIN32FILE_IOWIN*)stream) -> hf;
+ if (hFile != NULL)
+ {
+ CloseHandle(hFile);
+ ret=0;
+ }
+ free(stream);
+ }
+ return ret;
+}
+
+int ZCALLBACK win32_error_file_func (voidpf opaque,voidpf stream)
+{
+ int ret=-1;
+ if (stream!=NULL)
+ {
+ ret = ((WIN32FILE_IOWIN*)stream) -> error;
+ }
+ return ret;
+}
+
+void fill_win32_filefunc (zlib_filefunc_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen_file = win32_open_file_func;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell_file = win32_tell_file_func;
+ pzlib_filefunc_def->zseek_file = win32_seek_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_func;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+
+void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
+
+
+void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW;
+ pzlib_filefunc_def->zread_file = win32_read_file_func;
+ pzlib_filefunc_def->zwrite_file = win32_write_file_func;
+ pzlib_filefunc_def->ztell64_file = win32_tell64_file_func;
+ pzlib_filefunc_def->zseek64_file = win32_seek64_file_func;
+ pzlib_filefunc_def->zclose_file = win32_close_file_func;
+ pzlib_filefunc_def->zerror_file = win32_error_file_func;
+ pzlib_filefunc_def->opaque = NULL;
+}
diff --git a/compat/zlib/contrib/minizip/iowin32.h b/compat/zlib/contrib/minizip/iowin32.h
new file mode 100644
index 0000000..0ca0969
--- /dev/null
+++ b/compat/zlib/contrib/minizip/iowin32.h
@@ -0,0 +1,28 @@
+/* iowin32.h -- IO base function header for compress/uncompress .zip
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+*/
+
+#include <windows.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void fill_win32_filefunc OF((zlib_filefunc_def* pzlib_filefunc_def));
+void fill_win32_filefunc64 OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64A OF((zlib_filefunc64_def* pzlib_filefunc_def));
+void fill_win32_filefunc64W OF((zlib_filefunc64_def* pzlib_filefunc_def));
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/compat/zlib/contrib/minizip/make_vms.com b/compat/zlib/contrib/minizip/make_vms.com
new file mode 100644
index 0000000..9ac13a9
--- /dev/null
+++ b/compat/zlib/contrib/minizip/make_vms.com
@@ -0,0 +1,25 @@
+$ if f$search("ioapi.h_orig") .eqs. "" then copy ioapi.h ioapi.h_orig
+$ open/write zdef vmsdefs.h
+$ copy sys$input: zdef
+$ deck
+#define unix
+#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from
+#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator
+#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord
+#define Write_EndOfCentralDirectoryRecord Write_EoDRecord
+$ eod
+$ close zdef
+$ copy vmsdefs.h,ioapi.h_orig ioapi.h
+$ cc/include=[--]/prefix=all ioapi.c
+$ cc/include=[--]/prefix=all miniunz.c
+$ cc/include=[--]/prefix=all unzip.c
+$ cc/include=[--]/prefix=all minizip.c
+$ cc/include=[--]/prefix=all zip.c
+$ link miniunz,unzip,ioapi,[--]libz.olb/lib
+$ link minizip,zip,ioapi,[--]libz.olb/lib
+$ mcr []minizip test minizip_info.txt
+$ mcr []miniunz -l test.zip
+$ rename minizip_info.txt; minizip_info.txt_old
+$ mcr []miniunz test.zip
+$ delete test.zip;*
+$exit
diff --git a/compat/zlib/contrib/minizip/miniunz.c b/compat/zlib/contrib/minizip/miniunz.c
new file mode 100644
index 0000000..3d65401
--- /dev/null
+++ b/compat/zlib/contrib/minizip/miniunz.c
@@ -0,0 +1,660 @@
+/*
+ miniunz.c
+ Version 1.1, February 14h, 2010
+ sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+*/
+
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
+ #ifndef __USE_FILE_OFFSET64
+ #define __USE_FILE_OFFSET64
+ #endif
+ #ifndef __USE_LARGEFILE64
+ #define __USE_LARGEFILE64
+ #endif
+ #ifndef _LARGEFILE64_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #endif
+ #ifndef _FILE_OFFSET_BIT
+ #define _FILE_OFFSET_BIT 64
+ #endif
+#endif
+
+#ifdef __APPLE__
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <utime.h>
+#endif
+
+
+#include "unzip.h"
+
+#define CASESENSITIVITY (0)
+#define WRITEBUFFERSIZE (8192)
+#define MAXFILENAME (256)
+
+#ifdef _WIN32
+#define USEWIN32IOAPI
+#include "iowin32.h"
+#endif
+/*
+ mini unzip, demo of unzip package
+
+ usage :
+ Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir]
+
+ list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT
+ if it exists
+*/
+
+
+/* change_file_date : change the date/time of a file
+ filename : the filename of the file where date/time must be modified
+ dosdate : the new date at the MSDos format (4 bytes)
+ tmu_date : the SAME new date at the tm_unz format */
+void change_file_date(filename,dosdate,tmu_date)
+ const char *filename;
+ uLong dosdate;
+ tm_unz tmu_date;
+{
+#ifdef _WIN32
+ HANDLE hFile;
+ FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite;
+
+ hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE,
+ 0,NULL,OPEN_EXISTING,0,NULL);
+ GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite);
+ DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal);
+ LocalFileTimeToFileTime(&ftLocal,&ftm);
+ SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
+ CloseHandle(hFile);
+#else
+#ifdef unix || __APPLE__
+ struct utimbuf ut;
+ struct tm newdate;
+ newdate.tm_sec = tmu_date.tm_sec;
+ newdate.tm_min=tmu_date.tm_min;
+ newdate.tm_hour=tmu_date.tm_hour;
+ newdate.tm_mday=tmu_date.tm_mday;
+ newdate.tm_mon=tmu_date.tm_mon;
+ if (tmu_date.tm_year > 1900)
+ newdate.tm_year=tmu_date.tm_year - 1900;
+ else
+ newdate.tm_year=tmu_date.tm_year ;
+ newdate.tm_isdst=-1;
+
+ ut.actime=ut.modtime=mktime(&newdate);
+ utime(filename,&ut);
+#endif
+#endif
+}
+
+
+/* mymkdir and change_file_date are not 100 % portable
+ As I don't know well Unix, I wait feedback for the unix portion */
+
+int mymkdir(dirname)
+ const char* dirname;
+{
+ int ret=0;
+#ifdef _WIN32
+ ret = _mkdir(dirname);
+#elif unix
+ ret = mkdir (dirname,0775);
+#elif __APPLE__
+ ret = mkdir (dirname,0775);
+#endif
+ return ret;
+}
+
+int makedir (newdir)
+ char *newdir;
+{
+ char *buffer ;
+ char *p;
+ int len = (int)strlen(newdir);
+
+ if (len <= 0)
+ return 0;
+
+ buffer = (char*)malloc(len+1);
+ if (buffer==NULL)
+ {
+ printf("Error allocating memory\n");
+ return UNZ_INTERNALERROR;
+ }
+ strcpy(buffer,newdir);
+
+ if (buffer[len-1] == '/') {
+ buffer[len-1] = '\0';
+ }
+ if (mymkdir(buffer) == 0)
+ {
+ free(buffer);
+ return 1;
+ }
+
+ p = buffer+1;
+ while (1)
+ {
+ char hold;
+
+ while(*p && *p != '\\' && *p != '/')
+ p++;
+ hold = *p;
+ *p = 0;
+ if ((mymkdir(buffer) == -1) && (errno == ENOENT))
+ {
+ printf("couldn't create directory %s\n",buffer);
+ free(buffer);
+ return 0;
+ }
+ if (hold == 0)
+ break;
+ *p++ = hold;
+ }
+ free(buffer);
+ return 1;
+}
+
+void do_banner()
+{
+ printf("MiniUnz 1.01b, demo of zLib + Unz package written by Gilles Vollant\n");
+ printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n");
+}
+
+void do_help()
+{
+ printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \
+ " -e Extract without pathname (junk paths)\n" \
+ " -x Extract with pathname\n" \
+ " -v list files\n" \
+ " -l list files\n" \
+ " -d directory to extract into\n" \
+ " -o overwrite files without prompting\n" \
+ " -p extract crypted file using password\n\n");
+}
+
+void Display64BitsSize(ZPOS64_T n, int size_char)
+{
+ /* to avoid compatibility problem , we do here the conversion */
+ char number[21];
+ int offset=19;
+ int pos_string = 19;
+ number[20]=0;
+ for (;;) {
+ number[offset]=(char)((n%10)+'0');
+ if (number[offset] != '0')
+ pos_string=offset;
+ n/=10;
+ if (offset==0)
+ break;
+ offset--;
+ }
+ {
+ int size_display_string = 19-pos_string;
+ while (size_char > size_display_string)
+ {
+ size_char--;
+ printf(" ");
+ }
+ }
+
+ printf("%s",&number[pos_string]);
+}
+
+int do_list(uf)
+ unzFile uf;
+{
+ uLong i;
+ unz_global_info64 gi;
+ int err;
+
+ err = unzGetGlobalInfo64(uf,&gi);
+ if (err!=UNZ_OK)
+ printf("error %d with zipfile in unzGetGlobalInfo \n",err);
+ printf(" Length Method Size Ratio Date Time CRC-32 Name\n");
+ printf(" ------ ------ ---- ----- ---- ---- ------ ----\n");
+ for (i=0;i<gi.number_entry;i++)
+ {
+ char filename_inzip[256];
+ unz_file_info64 file_info;
+ uLong ratio=0;
+ const char *string_method;
+ char charCrypt=' ';
+ err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
+ break;
+ }
+ if (file_info.uncompressed_size>0)
+ ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size);
+
+ /* display a '*' if the file is crypted */
+ if ((file_info.flag & 1) != 0)
+ charCrypt='*';
+
+ if (file_info.compression_method==0)
+ string_method="Stored";
+ else
+ if (file_info.compression_method==Z_DEFLATED)
+ {
+ uInt iLevel=(uInt)((file_info.flag & 0x6)/2);
+ if (iLevel==0)
+ string_method="Defl:N";
+ else if (iLevel==1)
+ string_method="Defl:X";
+ else if ((iLevel==2) || (iLevel==3))
+ string_method="Defl:F"; /* 2:fast , 3 : extra fast*/
+ }
+ else
+ if (file_info.compression_method==Z_BZIP2ED)
+ {
+ string_method="BZip2 ";
+ }
+ else
+ string_method="Unkn. ";
+
+ Display64BitsSize(file_info.uncompressed_size,7);
+ printf(" %6s%c",string_method,charCrypt);
+ Display64BitsSize(file_info.compressed_size,7);
+ printf(" %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n",
+ ratio,
+ (uLong)file_info.tmu_date.tm_mon + 1,
+ (uLong)file_info.tmu_date.tm_mday,
+ (uLong)file_info.tmu_date.tm_year % 100,
+ (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min,
+ (uLong)file_info.crc,filename_inzip);
+ if ((i+1)<gi.number_entry)
+ {
+ err = unzGoToNextFile(uf);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGoToNextFile\n",err);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+
+int do_extract_currentfile(uf,popt_extract_without_path,popt_overwrite,password)
+ unzFile uf;
+ const int* popt_extract_without_path;
+ int* popt_overwrite;
+ const char* password;
+{
+ char filename_inzip[256];
+ char* filename_withoutpath;
+ char* p;
+ int err=UNZ_OK;
+ FILE *fout=NULL;
+ void* buf;
+ uInt size_buf;
+
+ unz_file_info64 file_info;
+ uLong ratio=0;
+ err = unzGetCurrentFileInfo64(uf,&file_info,filename_inzip,sizeof(filename_inzip),NULL,0,NULL,0);
+
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGetCurrentFileInfo\n",err);
+ return err;
+ }
+
+ size_buf = WRITEBUFFERSIZE;
+ buf = (void*)malloc(size_buf);
+ if (buf==NULL)
+ {
+ printf("Error allocating memory\n");
+ return UNZ_INTERNALERROR;
+ }
+
+ p = filename_withoutpath = filename_inzip;
+ while ((*p) != '\0')
+ {
+ if (((*p)=='/') || ((*p)=='\\'))
+ filename_withoutpath = p+1;
+ p++;
+ }
+
+ if ((*filename_withoutpath)=='\0')
+ {
+ if ((*popt_extract_without_path)==0)
+ {
+ printf("creating directory: %s\n",filename_inzip);
+ mymkdir(filename_inzip);
+ }
+ }
+ else
+ {
+ const char* write_filename;
+ int skip=0;
+
+ if ((*popt_extract_without_path)==0)
+ write_filename = filename_inzip;
+ else
+ write_filename = filename_withoutpath;
+
+ err = unzOpenCurrentFilePassword(uf,password);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzOpenCurrentFilePassword\n",err);
+ }
+
+ if (((*popt_overwrite)==0) && (err==UNZ_OK))
+ {
+ char rep=0;
+ FILE* ftestexist;
+ ftestexist = FOPEN_FUNC(write_filename,"rb");
+ if (ftestexist!=NULL)
+ {
+ fclose(ftestexist);
+ do
+ {
+ char answer[128];
+ int ret;
+
+ printf("The file %s exists. Overwrite ? [y]es, [n]o, [A]ll: ",write_filename);
+ ret = scanf("%1s",answer);
+ if (ret != 1)
+ {
+ exit(EXIT_FAILURE);
+ }
+ rep = answer[0] ;
+ if ((rep>='a') && (rep<='z'))
+ rep -= 0x20;
+ }
+ while ((rep!='Y') && (rep!='N') && (rep!='A'));
+ }
+
+ if (rep == 'N')
+ skip = 1;
+
+ if (rep == 'A')
+ *popt_overwrite=1;
+ }
+
+ if ((skip==0) && (err==UNZ_OK))
+ {
+ fout=FOPEN_FUNC(write_filename,"wb");
+ /* some zipfile don't contain directory alone before file */
+ if ((fout==NULL) && ((*popt_extract_without_path)==0) &&
+ (filename_withoutpath!=(char*)filename_inzip))
+ {
+ char c=*(filename_withoutpath-1);
+ *(filename_withoutpath-1)='\0';
+ makedir(write_filename);
+ *(filename_withoutpath-1)=c;
+ fout=FOPEN_FUNC(write_filename,"wb");
+ }
+
+ if (fout==NULL)
+ {
+ printf("error opening %s\n",write_filename);
+ }
+ }
+
+ if (fout!=NULL)
+ {
+ printf(" extracting: %s\n",write_filename);
+
+ do
+ {
+ err = unzReadCurrentFile(uf,buf,size_buf);
+ if (err<0)
+ {
+ printf("error %d with zipfile in unzReadCurrentFile\n",err);
+ break;
+ }
+ if (err>0)
+ if (fwrite(buf,err,1,fout)!=1)
+ {
+ printf("error in writing extracted file\n");
+ err=UNZ_ERRNO;
+ break;
+ }
+ }
+ while (err>0);
+ if (fout)
+ fclose(fout);
+
+ if (err==0)
+ change_file_date(write_filename,file_info.dosDate,
+ file_info.tmu_date);
+ }
+
+ if (err==UNZ_OK)
+ {
+ err = unzCloseCurrentFile (uf);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzCloseCurrentFile\n",err);
+ }
+ }
+ else
+ unzCloseCurrentFile(uf); /* don't lose the error */
+ }
+
+ free(buf);
+ return err;
+}
+
+
+int do_extract(uf,opt_extract_without_path,opt_overwrite,password)
+ unzFile uf;
+ int opt_extract_without_path;
+ int opt_overwrite;
+ const char* password;
+{
+ uLong i;
+ unz_global_info64 gi;
+ int err;
+ FILE* fout=NULL;
+
+ err = unzGetGlobalInfo64(uf,&gi);
+ if (err!=UNZ_OK)
+ printf("error %d with zipfile in unzGetGlobalInfo \n",err);
+
+ for (i=0;i<gi.number_entry;i++)
+ {
+ if (do_extract_currentfile(uf,&opt_extract_without_path,
+ &opt_overwrite,
+ password) != UNZ_OK)
+ break;
+
+ if ((i+1)<gi.number_entry)
+ {
+ err = unzGoToNextFile(uf);
+ if (err!=UNZ_OK)
+ {
+ printf("error %d with zipfile in unzGoToNextFile\n",err);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int do_extract_onefile(uf,filename,opt_extract_without_path,opt_overwrite,password)
+ unzFile uf;
+ const char* filename;
+ int opt_extract_without_path;
+ int opt_overwrite;
+ const char* password;
+{
+ int err = UNZ_OK;
+ if (unzLocateFile(uf,filename,CASESENSITIVITY)!=UNZ_OK)
+ {
+ printf("file %s not found in the zipfile\n",filename);
+ return 2;
+ }
+
+ if (do_extract_currentfile(uf,&opt_extract_without_path,
+ &opt_overwrite,
+ password) == UNZ_OK)
+ return 0;
+ else
+ return 1;
+}
+
+
+int main(argc,argv)
+ int argc;
+ char *argv[];
+{
+ const char *zipfilename=NULL;
+ const char *filename_to_extract=NULL;
+ const char *password=NULL;
+ char filename_try[MAXFILENAME+16] = "";
+ int i;
+ int ret_value=0;
+ int opt_do_list=0;
+ int opt_do_extract=1;
+ int opt_do_extract_withoutpath=0;
+ int opt_overwrite=0;
+ int opt_extractdir=0;
+ const char *dirname=NULL;
+ unzFile uf=NULL;
+
+ do_banner();
+ if (argc==1)
+ {
+ do_help();
+ return 0;
+ }
+ else
+ {
+ for (i=1;i<argc;i++)
+ {
+ if ((*argv[i])=='-')
+ {
+ const char *p=argv[i]+1;
+
+ while ((*p)!='\0')
+ {
+ char c=*(p++);;
+ if ((c=='l') || (c=='L'))
+ opt_do_list = 1;
+ if ((c=='v') || (c=='V'))
+ opt_do_list = 1;
+ if ((c=='x') || (c=='X'))
+ opt_do_extract = 1;
+ if ((c=='e') || (c=='E'))
+ opt_do_extract = opt_do_extract_withoutpath = 1;
+ if ((c=='o') || (c=='O'))
+ opt_overwrite=1;
+ if ((c=='d') || (c=='D'))
+ {
+ opt_extractdir=1;
+ dirname=argv[i+1];
+ }
+
+ if (((c=='p') || (c=='P')) && (i+1<argc))
+ {
+ password=argv[i+1];
+ i++;
+ }
+ }
+ }
+ else
+ {
+ if (zipfilename == NULL)
+ zipfilename = argv[i];
+ else if ((filename_to_extract==NULL) && (!opt_extractdir))
+ filename_to_extract = argv[i] ;
+ }
+ }
+ }
+
+ if (zipfilename!=NULL)
+ {
+
+# ifdef USEWIN32IOAPI
+ zlib_filefunc64_def ffunc;
+# endif
+
+ strncpy(filename_try, zipfilename,MAXFILENAME-1);
+ /* strncpy doesnt append the trailing NULL, of the string is too long. */
+ filename_try[ MAXFILENAME ] = '\0';
+
+# ifdef USEWIN32IOAPI
+ fill_win32_filefunc64A(&ffunc);
+ uf = unzOpen2_64(zipfilename,&ffunc);
+# else
+ uf = unzOpen64(zipfilename);
+# endif
+ if (uf==NULL)
+ {
+ strcat(filename_try,".zip");
+# ifdef USEWIN32IOAPI
+ uf = unzOpen2_64(filename_try,&ffunc);
+# else
+ uf = unzOpen64(filename_try);
+# endif
+ }
+ }
+
+ if (uf==NULL)
+ {
+ printf("Cannot open %s or %s.zip\n",zipfilename,zipfilename);
+ return 1;
+ }
+ printf("%s opened\n",filename_try);
+
+ if (opt_do_list==1)
+ ret_value = do_list(uf);
+ else if (opt_do_extract==1)
+ {
+#ifdef _WIN32
+ if (opt_extractdir && _chdir(dirname))
+#else
+ if (opt_extractdir && chdir(dirname))
+#endif
+ {
+ printf("Error changing into %s, aborting\n", dirname);
+ exit(-1);
+ }
+
+ if (filename_to_extract == NULL)
+ ret_value = do_extract(uf, opt_do_extract_withoutpath, opt_overwrite, password);
+ else
+ ret_value = do_extract_onefile(uf, filename_to_extract, opt_do_extract_withoutpath, opt_overwrite, password);
+ }
+
+ unzClose(uf);
+
+ return ret_value;
+}
diff --git a/compat/zlib/contrib/minizip/miniunzip.1 b/compat/zlib/contrib/minizip/miniunzip.1
new file mode 100644
index 0000000..111ac69
--- /dev/null
+++ b/compat/zlib/contrib/minizip/miniunzip.1
@@ -0,0 +1,63 @@
+.\" Hey, EMACS: -*- nroff -*-
+.TH miniunzip 1 "Nov 7, 2001"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+miniunzip - uncompress and examine ZIP archives
+.SH SYNOPSIS
+.B miniunzip
+.RI [ -exvlo ]
+zipfile [ files_to_extract ] [-d tempdir]
+.SH DESCRIPTION
+.B minizip
+is a simple tool which allows the extraction of compressed file
+archives in the ZIP format used by the MS-DOS utility PKZIP. It was
+written as a demonstration of the
+.IR zlib (3)
+library and therefore lack many of the features of the
+.IR unzip (1)
+program.
+.SH OPTIONS
+A number of options are supported. With the exception of
+.BI \-d\ tempdir
+these must be supplied before any
+other arguments and are:
+.TP
+.BI \-l\ ,\ \-\-v
+List the files in the archive without extracting them.
+.TP
+.B \-o
+Overwrite files without prompting for confirmation.
+.TP
+.B \-x
+Extract files (default).
+.PP
+The
+.I zipfile
+argument is the name of the archive to process. The next argument can be used
+to specify a single file to extract from the archive.
+
+Lastly, the following option can be specified at the end of the command-line:
+.TP
+.BI \-d\ tempdir
+Extract the archive in the directory
+.I tempdir
+rather than the current directory.
+.SH SEE ALSO
+.BR minizip (1),
+.BR zlib (3),
+.BR unzip (1).
+.SH AUTHOR
+This program was written by Gilles Vollant. This manual page was
+written by Mark Brown <broonie@sirena.org.uk>. The -d tempdir option
+was added by Dirk Eddelbuettel <edd@debian.org>.
diff --git a/compat/zlib/contrib/minizip/minizip.1 b/compat/zlib/contrib/minizip/minizip.1
new file mode 100644
index 0000000..1154484
--- /dev/null
+++ b/compat/zlib/contrib/minizip/minizip.1
@@ -0,0 +1,46 @@
+.\" Hey, EMACS: -*- nroff -*-
+.TH minizip 1 "May 2, 2001"
+.\" Please adjust this date whenever revising the manpage.
+.\"
+.\" Some roff macros, for reference:
+.\" .nh disable hyphenation
+.\" .hy enable hyphenation
+.\" .ad l left justify
+.\" .ad b justify to both left and right margins
+.\" .nf disable filling
+.\" .fi enable filling
+.\" .br insert line break
+.\" .sp <n> insert n+1 empty lines
+.\" for manpage-specific macros, see man(7)
+.SH NAME
+minizip - create ZIP archives
+.SH SYNOPSIS
+.B minizip
+.RI [ -o ]
+zipfile [ " files" ... ]
+.SH DESCRIPTION
+.B minizip
+is a simple tool which allows the creation of compressed file archives
+in the ZIP format used by the MS-DOS utility PKZIP. It was written as
+a demonstration of the
+.IR zlib (3)
+library and therefore lack many of the features of the
+.IR zip (1)
+program.
+.SH OPTIONS
+The first argument supplied is the name of the ZIP archive to create or
+.RI -o
+in which case it is ignored and the second argument treated as the
+name of the ZIP file. If the ZIP file already exists it will be
+overwritten.
+.PP
+Subsequent arguments specify a list of files to place in the ZIP
+archive. If none are specified then an empty archive will be created.
+.SH SEE ALSO
+.BR miniunzip (1),
+.BR zlib (3),
+.BR zip (1).
+.SH AUTHOR
+This program was written by Gilles Vollant. This manual page was
+written by Mark Brown <broonie@sirena.org.uk>.
+
diff --git a/compat/zlib/contrib/minizip/minizip.c b/compat/zlib/contrib/minizip/minizip.c
new file mode 100644
index 0000000..4288962
--- /dev/null
+++ b/compat/zlib/contrib/minizip/minizip.c
@@ -0,0 +1,520 @@
+/*
+ minizip.c
+ Version 1.1, February 14h, 2010
+ sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+*/
+
+
+#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__))
+ #ifndef __USE_FILE_OFFSET64
+ #define __USE_FILE_OFFSET64
+ #endif
+ #ifndef __USE_LARGEFILE64
+ #define __USE_LARGEFILE64
+ #endif
+ #ifndef _LARGEFILE64_SOURCE
+ #define _LARGEFILE64_SOURCE
+ #endif
+ #ifndef _FILE_OFFSET_BIT
+ #define _FILE_OFFSET_BIT 64
+ #endif
+#endif
+
+#ifdef __APPLE__
+// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions
+#define FOPEN_FUNC(filename, mode) fopen(filename, mode)
+#define FTELLO_FUNC(stream) ftello(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin)
+#else
+#define FOPEN_FUNC(filename, mode) fopen64(filename, mode)
+#define FTELLO_FUNC(stream) ftello64(stream)
+#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin)
+#endif
+
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <direct.h>
+# include <io.h>
+#else
+# include <unistd.h>
+# include <utime.h>
+# include <sys/types.h>
+# include <sys/stat.h>
+#endif
+
+#include "zip.h"
+
+#ifdef _WIN32
+ #define USEWIN32IOAPI
+ #include "iowin32.h"
+#endif
+
+
+
+#define WRITEBUFFERSIZE (16384)
+#define MAXFILENAME (256)
+
+#ifdef _WIN32
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ int ret = 0;
+ {
+ FILETIME ftLocal;
+ HANDLE hFind;
+ WIN32_FIND_DATAA ff32;
+
+ hFind = FindFirstFileA(f,&ff32);
+ if (hFind != INVALID_HANDLE_VALUE)
+ {
+ FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal);
+ FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0);
+ FindClose(hFind);
+ ret = 1;
+ }
+ }
+ return ret;
+}
+#else
+#ifdef unix || __APPLE__
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ int ret=0;
+ struct stat s; /* results of stat() */
+ struct tm* filedate;
+ time_t tm_t=0;
+
+ if (strcmp(f,"-")!=0)
+ {
+ char name[MAXFILENAME+1];
+ int len = strlen(f);
+ if (len > MAXFILENAME)
+ len = MAXFILENAME;
+
+ strncpy(name, f,MAXFILENAME-1);
+ /* strncpy doesnt append the trailing NULL, of the string is too long. */
+ name[ MAXFILENAME ] = '\0';
+
+ if (name[len - 1] == '/')
+ name[len - 1] = '\0';
+ /* not all systems allow stat'ing a file with / appended */
+ if (stat(name,&s)==0)
+ {
+ tm_t = s.st_mtime;
+ ret = 1;
+ }
+ }
+ filedate = localtime(&tm_t);
+
+ tmzip->tm_sec = filedate->tm_sec;
+ tmzip->tm_min = filedate->tm_min;
+ tmzip->tm_hour = filedate->tm_hour;
+ tmzip->tm_mday = filedate->tm_mday;
+ tmzip->tm_mon = filedate->tm_mon ;
+ tmzip->tm_year = filedate->tm_year;
+
+ return ret;
+}
+#else
+uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+ uLong *dt; /* dostime */
+{
+ return 0;
+}
+#endif
+#endif
+
+
+
+
+int check_exist_file(filename)
+ const char* filename;
+{
+ FILE* ftestexist;
+ int ret = 1;
+ ftestexist = FOPEN_FUNC(filename,"rb");
+ if (ftestexist==NULL)
+ ret = 0;
+ else
+ fclose(ftestexist);
+ return ret;
+}
+
+void do_banner()
+{
+ printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n");
+ printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n");
+}
+
+void do_help()
+{
+ printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \
+ " -o Overwrite existing file.zip\n" \
+ " -a Append to existing file.zip\n" \
+ " -0 Store only\n" \
+ " -1 Compress faster\n" \
+ " -9 Compress better\n\n" \
+ " -j exclude path. store only the file name.\n\n");
+}
+
+/* calculate the CRC32 of a file,
+ because to encrypt a file, we need known the CRC32 of the file before */
+int getFileCrc(const char* filenameinzip,void*buf,unsigned long size_buf,unsigned long* result_crc)
+{
+ unsigned long calculate_crc=0;
+ int err=ZIP_OK;
+ FILE * fin = FOPEN_FUNC(filenameinzip,"rb");
+
+ unsigned long size_read = 0;
+ unsigned long total_read = 0;
+ if (fin==NULL)
+ {
+ err = ZIP_ERRNO;
+ }
+
+ if (err == ZIP_OK)
+ do
+ {
+ err = ZIP_OK;
+ size_read = (int)fread(buf,1,size_buf,fin);
+ if (size_read < size_buf)
+ if (feof(fin)==0)
+ {
+ printf("error in reading %s\n",filenameinzip);
+ err = ZIP_ERRNO;
+ }
+
+ if (size_read>0)
+ calculate_crc = crc32(calculate_crc,buf,size_read);
+ total_read += size_read;
+
+ } while ((err == ZIP_OK) && (size_read>0));
+
+ if (fin)
+ fclose(fin);
+
+ *result_crc=calculate_crc;
+ printf("file %s crc %lx\n", filenameinzip, calculate_crc);
+ return err;
+}
+
+int isLargeFile(const char* filename)
+{
+ int largeFile = 0;
+ ZPOS64_T pos = 0;
+ FILE* pFile = FOPEN_FUNC(filename, "rb");
+
+ if(pFile != NULL)
+ {
+ int n = FSEEKO_FUNC(pFile, 0, SEEK_END);
+ pos = FTELLO_FUNC(pFile);
+
+ printf("File : %s is %lld bytes\n", filename, pos);
+
+ if(pos >= 0xffffffff)
+ largeFile = 1;
+
+ fclose(pFile);
+ }
+
+ return largeFile;
+}
+
+int main(argc,argv)
+ int argc;
+ char *argv[];
+{
+ int i;
+ int opt_overwrite=0;
+ int opt_compress_level=Z_DEFAULT_COMPRESSION;
+ int opt_exclude_path=0;
+ int zipfilenamearg = 0;
+ char filename_try[MAXFILENAME+16];
+ int zipok;
+ int err=0;
+ int size_buf=0;
+ void* buf=NULL;
+ const char* password=NULL;
+
+
+ do_banner();
+ if (argc==1)
+ {
+ do_help();
+ return 0;
+ }
+ else
+ {
+ for (i=1;i<argc;i++)
+ {
+ if ((*argv[i])=='-')
+ {
+ const char *p=argv[i]+1;
+
+ while ((*p)!='\0')
+ {
+ char c=*(p++);;
+ if ((c=='o') || (c=='O'))
+ opt_overwrite = 1;
+ if ((c=='a') || (c=='A'))
+ opt_overwrite = 2;
+ if ((c>='0') && (c<='9'))
+ opt_compress_level = c-'0';
+ if ((c=='j') || (c=='J'))
+ opt_exclude_path = 1;
+
+ if (((c=='p') || (c=='P')) && (i+1<argc))
+ {
+ password=argv[i+1];
+ i++;
+ }
+ }
+ }
+ else
+ {
+ if (zipfilenamearg == 0)
+ {
+ zipfilenamearg = i ;
+ }
+ }
+ }
+ }
+
+ size_buf = WRITEBUFFERSIZE;
+ buf = (void*)malloc(size_buf);
+ if (buf==NULL)
+ {
+ printf("Error allocating memory\n");
+ return ZIP_INTERNALERROR;
+ }
+
+ if (zipfilenamearg==0)
+ {
+ zipok=0;
+ }
+ else
+ {
+ int i,len;
+ int dot_found=0;
+
+ zipok = 1 ;
+ strncpy(filename_try, argv[zipfilenamearg],MAXFILENAME-1);
+ /* strncpy doesnt append the trailing NULL, of the string is too long. */
+ filename_try[ MAXFILENAME ] = '\0';
+
+ len=(int)strlen(filename_try);
+ for (i=0;i<len;i++)
+ if (filename_try[i]=='.')
+ dot_found=1;
+
+ if (dot_found==0)
+ strcat(filename_try,".zip");
+
+ if (opt_overwrite==2)
+ {
+ /* if the file don't exist, we not append file */
+ if (check_exist_file(filename_try)==0)
+ opt_overwrite=1;
+ }
+ else
+ if (opt_overwrite==0)
+ if (check_exist_file(filename_try)!=0)
+ {
+ char rep=0;
+ do
+ {
+ char answer[128];
+ int ret;
+ printf("The file %s exists. Overwrite ? [y]es, [n]o, [a]ppend : ",filename_try);
+ ret = scanf("%1s",answer);
+ if (ret != 1)
+ {
+ exit(EXIT_FAILURE);
+ }
+ rep = answer[0] ;
+ if ((rep>='a') && (rep<='z'))
+ rep -= 0x20;
+ }
+ while ((rep!='Y') && (rep!='N') && (rep!='A'));
+ if (rep=='N')
+ zipok = 0;
+ if (rep=='A')
+ opt_overwrite = 2;
+ }
+ }
+
+ if (zipok==1)
+ {
+ zipFile zf;
+ int errclose;
+# ifdef USEWIN32IOAPI
+ zlib_filefunc64_def ffunc;
+ fill_win32_filefunc64A(&ffunc);
+ zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc);
+# else
+ zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0);
+# endif
+
+ if (zf == NULL)
+ {
+ printf("error opening %s\n",filename_try);
+ err= ZIP_ERRNO;
+ }
+ else
+ printf("creating %s\n",filename_try);
+
+ for (i=zipfilenamearg+1;(i<argc) && (err==ZIP_OK);i++)
+ {
+ if (!((((*(argv[i]))=='-') || ((*(argv[i]))=='/')) &&
+ ((argv[i][1]=='o') || (argv[i][1]=='O') ||
+ (argv[i][1]=='a') || (argv[i][1]=='A') ||
+ (argv[i][1]=='p') || (argv[i][1]=='P') ||
+ ((argv[i][1]>='0') || (argv[i][1]<='9'))) &&
+ (strlen(argv[i]) == 2)))
+ {
+ FILE * fin;
+ int size_read;
+ const char* filenameinzip = argv[i];
+ const char *savefilenameinzip;
+ zip_fileinfo zi;
+ unsigned long crcFile=0;
+ int zip64 = 0;
+
+ zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour =
+ zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0;
+ zi.dosDate = 0;
+ zi.internal_fa = 0;
+ zi.external_fa = 0;
+ filetime(filenameinzip,&zi.tmz_date,&zi.dosDate);
+
+/*
+ err = zipOpenNewFileInZip(zf,filenameinzip,&zi,
+ NULL,0,NULL,0,NULL / * comment * /,
+ (opt_compress_level != 0) ? Z_DEFLATED : 0,
+ opt_compress_level);
+*/
+ if ((password != NULL) && (err==ZIP_OK))
+ err = getFileCrc(filenameinzip,buf,size_buf,&crcFile);
+
+ zip64 = isLargeFile(filenameinzip);
+
+ /* The path name saved, should not include a leading slash. */
+ /*if it did, windows/xp and dynazip couldn't read the zip file. */
+ savefilenameinzip = filenameinzip;
+ while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' )
+ {
+ savefilenameinzip++;
+ }
+
+ /*should the zip file contain any path at all?*/
+ if( opt_exclude_path )
+ {
+ const char *tmpptr;
+ const char *lastslash = 0;
+ for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++)
+ {
+ if( *tmpptr == '\\' || *tmpptr == '/')
+ {
+ lastslash = tmpptr;
+ }
+ }
+ if( lastslash != NULL )
+ {
+ savefilenameinzip = lastslash+1; // base filename follows last slash.
+ }
+ }
+
+ /**/
+ err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi,
+ NULL,0,NULL,0,NULL /* comment*/,
+ (opt_compress_level != 0) ? Z_DEFLATED : 0,
+ opt_compress_level,0,
+ /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ password,crcFile, zip64);
+
+ if (err != ZIP_OK)
+ printf("error in opening %s in zipfile\n",filenameinzip);
+ else
+ {
+ fin = FOPEN_FUNC(filenameinzip,"rb");
+ if (fin==NULL)
+ {
+ err=ZIP_ERRNO;
+ printf("error in opening %s for reading\n",filenameinzip);
+ }
+ }
+
+ if (err == ZIP_OK)
+ do
+ {
+ err = ZIP_OK;
+ size_read = (int)fread(buf,1,size_buf,fin);
+ if (size_read < size_buf)
+ if (feof(fin)==0)
+ {
+ printf("error in reading %s\n",filenameinzip);
+ err = ZIP_ERRNO;
+ }
+
+ if (size_read>0)
+ {
+ err = zipWriteInFileInZip (zf,buf,size_read);
+ if (err<0)
+ {
+ printf("error in writing %s in the zipfile\n",
+ filenameinzip);
+ }
+
+ }
+ } while ((err == ZIP_OK) && (size_read>0));
+
+ if (fin)
+ fclose(fin);
+
+ if (err<0)
+ err=ZIP_ERRNO;
+ else
+ {
+ err = zipCloseFileInZip(zf);
+ if (err!=ZIP_OK)
+ printf("error in closing %s in the zipfile\n",
+ filenameinzip);
+ }
+ }
+ }
+ errclose = zipClose(zf,NULL);
+ if (errclose != ZIP_OK)
+ printf("error in closing %s\n",filename_try);
+ }
+ else
+ {
+ do_help();
+ }
+
+ free(buf);
+ return 0;
+}
diff --git a/compat/zlib/contrib/minizip/minizip.pc.in b/compat/zlib/contrib/minizip/minizip.pc.in
new file mode 100644
index 0000000..69b5b7f
--- /dev/null
+++ b/compat/zlib/contrib/minizip/minizip.pc.in
@@ -0,0 +1,12 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@/minizip
+
+Name: minizip
+Description: Minizip zip file manipulation library
+Requires:
+Version: @PACKAGE_VERSION@
+Libs: -L${libdir} -lminizip
+Libs.private: -lz
+Cflags: -I${includedir}
diff --git a/compat/zlib/contrib/minizip/mztools.c b/compat/zlib/contrib/minizip/mztools.c
new file mode 100644
index 0000000..96891c2
--- /dev/null
+++ b/compat/zlib/contrib/minizip/mztools.c
@@ -0,0 +1,291 @@
+/*
+ Additional tools for Minizip
+ Code: Xavier Roche '2004
+ License: Same as ZLIB (www.gzip.org)
+*/
+
+/* Code */
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+#include "unzip.h"
+
+#define READ_8(adr) ((unsigned char)*(adr))
+#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) )
+#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) )
+
+#define WRITE_8(buff, n) do { \
+ *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \
+} while(0)
+#define WRITE_16(buff, n) do { \
+ WRITE_8((unsigned char*)(buff), n); \
+ WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \
+} while(0)
+#define WRITE_32(buff, n) do { \
+ WRITE_16((unsigned char*)(buff), (n) & 0xffff); \
+ WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \
+} while(0)
+
+extern int ZEXPORT unzRepair(file, fileOut, fileOutTmp, nRecovered, bytesRecovered)
+const char* file;
+const char* fileOut;
+const char* fileOutTmp;
+uLong* nRecovered;
+uLong* bytesRecovered;
+{
+ int err = Z_OK;
+ FILE* fpZip = fopen(file, "rb");
+ FILE* fpOut = fopen(fileOut, "wb");
+ FILE* fpOutCD = fopen(fileOutTmp, "wb");
+ if (fpZip != NULL && fpOut != NULL) {
+ int entries = 0;
+ uLong totalBytes = 0;
+ char header[30];
+ char filename[1024];
+ char extra[1024];
+ int offset = 0;
+ int offsetCD = 0;
+ while ( fread(header, 1, 30, fpZip) == 30 ) {
+ int currentOffset = offset;
+
+ /* File entry */
+ if (READ_32(header) == 0x04034b50) {
+ unsigned int version = READ_16(header + 4);
+ unsigned int gpflag = READ_16(header + 6);
+ unsigned int method = READ_16(header + 8);
+ unsigned int filetime = READ_16(header + 10);
+ unsigned int filedate = READ_16(header + 12);
+ unsigned int crc = READ_32(header + 14); /* crc */
+ unsigned int cpsize = READ_32(header + 18); /* compressed size */
+ unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */
+ unsigned int fnsize = READ_16(header + 26); /* file name length */
+ unsigned int extsize = READ_16(header + 28); /* extra field length */
+ filename[0] = extra[0] = '\0';
+
+ /* Header */
+ if (fwrite(header, 1, 30, fpOut) == 30) {
+ offset += 30;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+
+ /* Filename */
+ if (fnsize > 0) {
+ if (fnsize < sizeof(filename)) {
+ if (fread(filename, 1, fnsize, fpZip) == fnsize) {
+ if (fwrite(filename, 1, fnsize, fpOut) == fnsize) {
+ offset += fnsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ break;
+ }
+
+ /* Extra field */
+ if (extsize > 0) {
+ if (extsize < sizeof(extra)) {
+ if (fread(extra, 1, extsize, fpZip) == extsize) {
+ if (fwrite(extra, 1, extsize, fpOut) == extsize) {
+ offset += extsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Data */
+ {
+ int dataSize = cpsize;
+ if (dataSize == 0) {
+ dataSize = uncpsize;
+ }
+ if (dataSize > 0) {
+ char* data = malloc(dataSize);
+ if (data != NULL) {
+ if ((int)fread(data, 1, dataSize, fpZip) == dataSize) {
+ if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) {
+ offset += dataSize;
+ totalBytes += dataSize;
+ } else {
+ err = Z_ERRNO;
+ }
+ } else {
+ err = Z_ERRNO;
+ }
+ free(data);
+ if (err != Z_OK) {
+ break;
+ }
+ } else {
+ err = Z_MEM_ERROR;
+ break;
+ }
+ }
+ }
+
+ /* Central directory entry */
+ {
+ char header[46];
+ char* comment = "";
+ int comsize = (int) strlen(comment);
+ WRITE_32(header, 0x02014b50);
+ WRITE_16(header + 4, version);
+ WRITE_16(header + 6, version);
+ WRITE_16(header + 8, gpflag);
+ WRITE_16(header + 10, method);
+ WRITE_16(header + 12, filetime);
+ WRITE_16(header + 14, filedate);
+ WRITE_32(header + 16, crc);
+ WRITE_32(header + 20, cpsize);
+ WRITE_32(header + 24, uncpsize);
+ WRITE_16(header + 28, fnsize);
+ WRITE_16(header + 30, extsize);
+ WRITE_16(header + 32, comsize);
+ WRITE_16(header + 34, 0); /* disk # */
+ WRITE_16(header + 36, 0); /* int attrb */
+ WRITE_32(header + 38, 0); /* ext attrb */
+ WRITE_32(header + 42, currentOffset);
+ /* Header */
+ if (fwrite(header, 1, 46, fpOutCD) == 46) {
+ offsetCD += 46;
+
+ /* Filename */
+ if (fnsize > 0) {
+ if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) {
+ offsetCD += fnsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ break;
+ }
+
+ /* Extra field */
+ if (extsize > 0) {
+ if (fwrite(extra, 1, extsize, fpOutCD) == extsize) {
+ offsetCD += extsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Comment field */
+ if (comsize > 0) {
+ if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) {
+ offsetCD += comsize;
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+
+ } else {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+
+ /* Success */
+ entries++;
+
+ } else {
+ break;
+ }
+ }
+
+ /* Final central directory */
+ {
+ int entriesZip = entries;
+ char header[22];
+ char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools";
+ int comsize = (int) strlen(comment);
+ if (entriesZip > 0xffff) {
+ entriesZip = 0xffff;
+ }
+ WRITE_32(header, 0x06054b50);
+ WRITE_16(header + 4, 0); /* disk # */
+ WRITE_16(header + 6, 0); /* disk # */
+ WRITE_16(header + 8, entriesZip); /* hack */
+ WRITE_16(header + 10, entriesZip); /* hack */
+ WRITE_32(header + 12, offsetCD); /* size of CD */
+ WRITE_32(header + 16, offset); /* offset to CD */
+ WRITE_16(header + 20, comsize); /* comment */
+
+ /* Header */
+ if (fwrite(header, 1, 22, fpOutCD) == 22) {
+
+ /* Comment field */
+ if (comsize > 0) {
+ if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) {
+ err = Z_ERRNO;
+ }
+ }
+
+ } else {
+ err = Z_ERRNO;
+ }
+ }
+
+ /* Final merge (file + central directory) */
+ fclose(fpOutCD);
+ if (err == Z_OK) {
+ fpOutCD = fopen(fileOutTmp, "rb");
+ if (fpOutCD != NULL) {
+ int nRead;
+ char buffer[8192];
+ while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) {
+ if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) {
+ err = Z_ERRNO;
+ break;
+ }
+ }
+ fclose(fpOutCD);
+ }
+ }
+
+ /* Close */
+ fclose(fpZip);
+ fclose(fpOut);
+
+ /* Wipe temporary file */
+ (void)remove(fileOutTmp);
+
+ /* Number of recovered entries */
+ if (err == Z_OK) {
+ if (nRecovered != NULL) {
+ *nRecovered = entries;
+ }
+ if (bytesRecovered != NULL) {
+ *bytesRecovered = totalBytes;
+ }
+ }
+ } else {
+ err = Z_STREAM_ERROR;
+ }
+ return err;
+}
diff --git a/compat/zlib/contrib/minizip/mztools.h b/compat/zlib/contrib/minizip/mztools.h
new file mode 100644
index 0000000..a49a426
--- /dev/null
+++ b/compat/zlib/contrib/minizip/mztools.h
@@ -0,0 +1,37 @@
+/*
+ Additional tools for Minizip
+ Code: Xavier Roche '2004
+ License: Same as ZLIB (www.gzip.org)
+*/
+
+#ifndef _zip_tools_H
+#define _zip_tools_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#include "unzip.h"
+
+/* Repair a ZIP file (missing central directory)
+ file: file to recover
+ fileOut: output file after recovery
+ fileOutTmp: temporary file name used for recovery
+*/
+extern int ZEXPORT unzRepair(const char* file,
+ const char* fileOut,
+ const char* fileOutTmp,
+ uLong* nRecovered,
+ uLong* bytesRecovered);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif
diff --git a/compat/zlib/contrib/minizip/unzip.c b/compat/zlib/contrib/minizip/unzip.c
new file mode 100644
index 0000000..9093504
--- /dev/null
+++ b/compat/zlib/contrib/minizip/unzip.c
@@ -0,0 +1,2125 @@
+/* unzip.c -- IO for uncompress .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+
+ ------------------------------------------------------------------------------------
+ Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of
+ compatibility with older software. The following is from the original crypt.c.
+ Code woven in by Terry Thorsen 1/2003.
+
+ Copyright (c) 1990-2000 Info-ZIP. All rights reserved.
+
+ See the accompanying file LICENSE, version 2000-Apr-09 or later
+ (the contents of which are also included in zip.h) for terms of use.
+ If, for some reason, all these files are missing, the Info-ZIP license
+ also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html
+
+ crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h]
+
+ The encryption/decryption parts of this source code (as opposed to the
+ non-echoing password parts) were originally written in Europe. The
+ whole source package can be freely distributed, including from the USA.
+ (Prior to January 2000, re-export from the US was a violation of US law.)
+
+ This encryption code is a direct transcription of the algorithm from
+ Roger Schlafly, described by Phil Katz in the file appnote.txt. This
+ file (appnote.txt) is distributed with the PKZIP program (even in the
+ version without encryption capabilities).
+
+ ------------------------------------------------------------------------------------
+
+ Changes in unzip.c
+
+ 2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos
+ 2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz*
+ 2007-2008 - Even Rouault - Remove old C style function prototypes
+ 2007-2008 - Even Rouault - Add unzip support for ZIP64
+
+ Copyright (C) 2007-2008 Even Rouault
+
+
+ Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again).
+ Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G
+ should only read the compressed/uncompressed size from the Zip64 format if
+ the size from normal header was 0xFFFFFFFF
+ Oct-2009 - Mathias Svensson - Applied some bug fixes from paches recived from Gilles Vollant
+ Oct-2009 - Mathias Svensson - Applied support to unzip files with compression mathod BZIP2 (bzip2 lib is required)
+ Patch created by Daniel Borca
+
+ Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+ Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef NOUNCRYPT
+ #define NOUNCRYPT
+#endif
+
+#include "zlib.h"
+#include "unzip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+
+#ifndef CASESENSITIVITYDEFAULT_NO
+# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES)
+# define CASESENSITIVITYDEFAULT_NO
+# endif
+#endif
+
+
+#ifndef UNZ_BUFSIZE
+#define UNZ_BUFSIZE (16384)
+#endif
+
+#ifndef UNZ_MAXFILENAMEINZIP
+#define UNZ_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+
+
+const char unz_copyright[] =
+ " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+/* unz_file_info_interntal contain internal info about a file in zipfile*/
+typedef struct unz_file_info64_internal_s
+{
+ ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */
+} unz_file_info64_internal;
+
+
+/* file_in_zip_read_info_s contain internal information about a file in zipfile,
+ when reading and decompress it */
+typedef struct
+{
+ char *read_buffer; /* internal buffer for compressed data */
+ z_stream stream; /* zLib stream structure for inflate */
+
+#ifdef HAVE_BZIP2
+ bz_stream bstream; /* bzLib stream structure for bziped */
+#endif
+
+ ZPOS64_T pos_in_zipfile; /* position in byte on the zipfile, for fseek*/
+ uLong stream_initialised; /* flag set if stream structure is initialised*/
+
+ ZPOS64_T offset_local_extrafield;/* offset of the local extra field */
+ uInt size_local_extrafield;/* size of the local extra field */
+ ZPOS64_T pos_local_extrafield; /* position in the local extra field in read*/
+ ZPOS64_T total_out_64;
+
+ uLong crc32; /* crc32 of all data uncompressed */
+ uLong crc32_wait; /* crc32 we must obtain after decompress all */
+ ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */
+ ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/
+ zlib_filefunc64_32_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ uLong compression_method; /* compression method (0==store) */
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ int raw;
+} file_in_zip64_read_info_s;
+
+
+/* unz64_s contain internal information about the zipfile
+*/
+typedef struct
+{
+ zlib_filefunc64_32_def z_filefunc;
+ int is64bitOpenFunction;
+ voidpf filestream; /* io structore of the zipfile */
+ unz_global_info64 gi; /* public global information */
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+ ZPOS64_T num_file; /* number of the current file in the zipfile*/
+ ZPOS64_T pos_in_central_dir; /* pos of the current file in the central dir*/
+ ZPOS64_T current_file_ok; /* flag about the usability of the current file*/
+ ZPOS64_T central_pos; /* position of the beginning of the central dir*/
+
+ ZPOS64_T size_central_dir; /* size of the central directory */
+ ZPOS64_T offset_central_dir; /* offset of start of central directory with
+ respect to the starting disk number */
+
+ unz_file_info64 cur_file_info; /* public info about the current file in zip*/
+ unz_file_info64_internal cur_file_info_internal; /* private info about it*/
+ file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current
+ file if we are decompressing it */
+ int encrypted;
+
+ int isZip64;
+
+# ifndef NOUNCRYPT
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
+ const z_crc_t* pcrc_32_tab;
+# endif
+} unz64_s;
+
+
+#ifndef NOUNCRYPT
+#include "crypt.h"
+#endif
+
+/* ===========================================================================
+ Read a byte from a gz_stream; update next_in and avail_in. Return EOF
+ for end of file.
+ IN assertion: the stream s has been sucessfully opened for reading.
+*/
+
+
+local int unz64local_getByte OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ int *pi));
+
+local int unz64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi)
+{
+ unsigned char c;
+ int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+ if (err==1)
+ {
+ *pi = (int)c;
+ return UNZ_OK;
+ }
+ else
+ {
+ if (ZERROR64(*pzlib_filefunc_def,filestream))
+ return UNZ_ERRNO;
+ else
+ return UNZ_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int unz64local_getShort OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX));
+
+local int unz64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ uLong *pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((uLong)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int unz64local_getLong64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX));
+
+
+local int unz64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream,
+ ZPOS64_T *pX)
+{
+ ZPOS64_T x ;
+ int i = 0;
+ int err;
+
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (ZPOS64_T)i;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<8;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<16;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<24;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<32;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<40;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<48;
+
+ if (err==UNZ_OK)
+ err = unz64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x |= ((ZPOS64_T)i)<<56;
+
+ if (err==UNZ_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+/* My own strcmpi / strcasecmp */
+local int strcmpcasenosensitive_internal (const char* fileName1, const char* fileName2)
+{
+ for (;;)
+ {
+ char c1=*(fileName1++);
+ char c2=*(fileName2++);
+ if ((c1>='a') && (c1<='z'))
+ c1 -= 0x20;
+ if ((c2>='a') && (c2<='z'))
+ c2 -= 0x20;
+ if (c1=='\0')
+ return ((c2=='\0') ? 0 : -1);
+ if (c2=='\0')
+ return 1;
+ if (c1<c2)
+ return -1;
+ if (c1>c2)
+ return 1;
+ }
+}
+
+
+#ifdef CASESENSITIVITYDEFAULT_NO
+#define CASESENSITIVITYDEFAULTVALUE 2
+#else
+#define CASESENSITIVITYDEFAULTVALUE 1
+#endif
+
+#ifndef STRCMPCASENOSENTIVEFUNCTION
+#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal
+#endif
+
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+
+*/
+extern int ZEXPORT unzStringFileNameCompare (const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity)
+
+{
+ if (iCaseSensitivity==0)
+ iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE;
+
+ if (iCaseSensitivity==1)
+ return strcmp(fileName1,fileName2);
+
+ return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2);
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+
+/*
+ Locate the Central directory 64 of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T unz64local_SearchCentralDir64 OF((
+ const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream));
+
+local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def,
+ voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+ uLong uL;
+ ZPOS64_T relativeOffset;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ if (uPosFound == 0)
+ return 0;
+
+ /* Zip64 end of central directory locator */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ /* number of the disk with the start of the zip64 end of central directory */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+ if (uL != 0)
+ return 0;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK)
+ return 0;
+
+ /* total number of disks */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+ if (uL != 1)
+ return 0;
+
+ /* Goto end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature */
+ if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK)
+ return 0;
+
+ if (uL != 0x06064b50)
+ return 0;
+
+ return relativeOffset;
+}
+
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer
+ "zlib/zlib114.zip".
+ If the zipfile cannot be opened (file doesn't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+*/
+local unzFile unzOpenInternal (const void *path,
+ zlib_filefunc64_32_def* pzlib_filefunc64_32_def,
+ int is64bitOpenFunction)
+{
+ unz64_s us;
+ unz64_s *s;
+ ZPOS64_T central_pos;
+ uLong uL;
+
+ uLong number_disk; /* number of the current dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning ZIP, unsupported, always 0*/
+ ZPOS64_T number_entry_CD; /* total number of entries in
+ the central dir
+ (same than number_entry on nospan) */
+
+ int err=UNZ_OK;
+
+ if (unz_copyright[0]!=' ')
+ return NULL;
+
+ us.z_filefunc.zseek32_file = NULL;
+ us.z_filefunc.ztell32_file = NULL;
+ if (pzlib_filefunc64_32_def==NULL)
+ fill_fopen64_filefunc(&us.z_filefunc.zfile_func64);
+ else
+ us.z_filefunc = *pzlib_filefunc64_32_def;
+ us.is64bitOpenFunction = is64bitOpenFunction;
+
+
+
+ us.filestream = ZOPEN64(us.z_filefunc,
+ path,
+ ZLIB_FILEFUNC_MODE_READ |
+ ZLIB_FILEFUNC_MODE_EXISTING);
+ if (us.filestream==NULL)
+ return NULL;
+
+ central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream);
+ if (central_pos)
+ {
+ uLong uS;
+ ZPOS64_T uL64;
+
+ us.isZip64 = 1;
+
+ if (ZSEEK64(us.z_filefunc, us.filestream,
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* size of zip64 end of central directory record */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* version made by */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* version needed to extract */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of this disk */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central directory on this disk */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central directory */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if ((number_entry_CD!=us.gi.number_entry) ||
+ (number_disk_with_CD!=0) ||
+ (number_disk!=0))
+ err=UNZ_BADZIPFILE;
+
+ /* size of the central directory */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ us.gi.size_comment = 0;
+ }
+ else
+ {
+ central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream);
+ if (central_pos==0)
+ err=UNZ_ERRNO;
+
+ us.isZip64 = 0;
+
+ if (ZSEEK64(us.z_filefunc, us.filestream,
+ central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+ /* the signature, already checked */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of this disk */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* total number of entries in the central dir on this disk */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.gi.number_entry = uL;
+
+ /* total number of entries in the central dir */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ number_entry_CD = uL;
+
+ if ((number_entry_CD!=us.gi.number_entry) ||
+ (number_disk_with_CD!=0) ||
+ (number_disk!=0))
+ err=UNZ_BADZIPFILE;
+
+ /* size of the central directory */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.size_central_dir = uL;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ us.offset_central_dir = uL;
+
+ /* zipfile comment length */
+ if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if ((central_pos<us.offset_central_dir+us.size_central_dir) &&
+ (err==UNZ_OK))
+ err=UNZ_BADZIPFILE;
+
+ if (err!=UNZ_OK)
+ {
+ ZCLOSE64(us.z_filefunc, us.filestream);
+ return NULL;
+ }
+
+ us.byte_before_the_zipfile = central_pos -
+ (us.offset_central_dir+us.size_central_dir);
+ us.central_pos = central_pos;
+ us.pfile_in_zip_read = NULL;
+ us.encrypted = 0;
+
+
+ s=(unz64_s*)ALLOC(sizeof(unz64_s));
+ if( s != NULL)
+ {
+ *s=us;
+ unzGoToFirstFile((unzFile)s);
+ }
+ return (unzFile)s;
+}
+
+
+extern unzFile ZEXPORT unzOpen2 (const char *path,
+ zlib_filefunc_def* pzlib_filefunc32_def)
+{
+ if (pzlib_filefunc32_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+ return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 0);
+ }
+ else
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen2_64 (const void *path,
+ zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ if (pzlib_filefunc_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+ zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+ zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+ return unzOpenInternal(path, &zlib_filefunc64_32_def_fill, 1);
+ }
+ else
+ return unzOpenInternal(path, NULL, 1);
+}
+
+extern unzFile ZEXPORT unzOpen (const char *path)
+{
+ return unzOpenInternal(path, NULL, 0);
+}
+
+extern unzFile ZEXPORT unzOpen64 (const void *path)
+{
+ return unzOpenInternal(path, NULL, 1);
+}
+
+/*
+ Close a ZipFile opened with unzOpen.
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+ these files MUST be closed with unzCloseCurrentFile before call unzClose.
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzClose (unzFile file)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ if (s->pfile_in_zip_read!=NULL)
+ unzCloseCurrentFile(file);
+
+ ZCLOSE64(s->z_filefunc, s->filestream);
+ TRYFREE(s);
+ return UNZ_OK;
+}
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+extern int ZEXPORT unzGetGlobalInfo64 (unzFile file, unz_global_info64* pglobal_info)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ *pglobal_info=s->gi;
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetGlobalInfo (unzFile file, unz_global_info* pglobal_info32)
+{
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ /* to do : check if number_entry is not truncated */
+ pglobal_info32->number_entry = (uLong)s->gi.number_entry;
+ pglobal_info32->size_comment = s->gi.size_comment;
+ return UNZ_OK;
+}
+/*
+ Translate date/time from Dos format to tm_unz (readable more easilty)
+*/
+local void unz64local_DosDateToTmuDate (ZPOS64_T ulDosDate, tm_unz* ptm)
+{
+ ZPOS64_T uDate;
+ uDate = (ZPOS64_T)(ulDosDate>>16);
+ ptm->tm_mday = (uInt)(uDate&0x1f) ;
+ ptm->tm_mon = (uInt)((((uDate)&0x1E0)/0x20)-1) ;
+ ptm->tm_year = (uInt)(((uDate&0x0FE00)/0x0200)+1980) ;
+
+ ptm->tm_hour = (uInt) ((ulDosDate &0xF800)/0x800);
+ ptm->tm_min = (uInt) ((ulDosDate&0x7E0)/0x20) ;
+ ptm->tm_sec = (uInt) (2*(ulDosDate&0x1f)) ;
+}
+
+/*
+ Get Info about the current file in the zipfile, with internal only info
+*/
+local int unz64local_GetCurrentFileInfoInternal OF((unzFile file,
+ unz_file_info64 *pfile_info,
+ unz_file_info64_internal
+ *pfile_info_internal,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+local int unz64local_GetCurrentFileInfoInternal (unzFile file,
+ unz_file_info64 *pfile_info,
+ unz_file_info64_internal
+ *pfile_info_internal,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize)
+{
+ unz64_s* s;
+ unz_file_info64 file_info;
+ unz_file_info64_internal file_info_internal;
+ int err=UNZ_OK;
+ uLong uMagic;
+ long lSeek=0;
+ uLong uL;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (ZSEEK64(s->z_filefunc, s->filestream,
+ s->pos_in_central_dir+s->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=UNZ_ERRNO;
+
+
+ /* we check the magic */
+ if (err==UNZ_OK)
+ {
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x02014b50)
+ err=UNZ_BADZIPFILE;
+ }
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date);
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info.compressed_size = uL;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info.uncompressed_size = uL;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ // relative offset of local header
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ file_info_internal.offset_curfile = uL;
+
+ lSeek+=file_info.size_filename;
+ if ((err==UNZ_OK) && (szFileName!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_filename<fileNameBufferSize)
+ {
+ *(szFileName+file_info.size_filename)='\0';
+ uSizeRead = file_info.size_filename;
+ }
+ else
+ uSizeRead = fileNameBufferSize;
+
+ if ((file_info.size_filename>0) && (fileNameBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek -= uSizeRead;
+ }
+
+ // Read extrafield
+ if ((err==UNZ_OK) && (extraField!=NULL))
+ {
+ ZPOS64_T uSizeRead ;
+ if (file_info.size_file_extra<extraFieldBufferSize)
+ uSizeRead = file_info.size_file_extra;
+ else
+ uSizeRead = extraFieldBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+
+ lSeek += file_info.size_file_extra - (uLong)uSizeRead;
+ }
+ else
+ lSeek += file_info.size_file_extra;
+
+
+ if ((err==UNZ_OK) && (file_info.size_file_extra != 0))
+ {
+ uLong acc = 0;
+
+ // since lSeek now points to after the extra field we need to move back
+ lSeek -= file_info.size_file_extra;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ while(acc < file_info.size_file_extra)
+ {
+ uLong headerId;
+ uLong dataSize;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ /* ZIP64 extra fields */
+ if (headerId == 0x0001)
+ {
+ uLong uL;
+
+ if(file_info.uncompressed_size == MAXU32)
+ {
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info.compressed_size == MAXU32)
+ {
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info_internal.offset_curfile == MAXU32)
+ {
+ /* Relative Header offset */
+ if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ if(file_info.disk_num_start == MAXU32)
+ {
+ /* Disk Start Number */
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK)
+ err=UNZ_ERRNO;
+ }
+
+ }
+ else
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0)
+ err=UNZ_ERRNO;
+ }
+
+ acc += 2 + 2 + dataSize;
+ }
+ }
+
+ if ((err==UNZ_OK) && (szComment!=NULL))
+ {
+ uLong uSizeRead ;
+ if (file_info.size_file_comment<commentBufferSize)
+ {
+ *(szComment+file_info.size_file_comment)='\0';
+ uSizeRead = file_info.size_file_comment;
+ }
+ else
+ uSizeRead = commentBufferSize;
+
+ if (lSeek!=0)
+ {
+ if (ZSEEK64(s->z_filefunc, s->filestream,lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0)
+ lSeek=0;
+ else
+ err=UNZ_ERRNO;
+ }
+
+ if ((file_info.size_file_comment>0) && (commentBufferSize>0))
+ if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead)
+ err=UNZ_ERRNO;
+ lSeek+=file_info.size_file_comment - uSizeRead;
+ }
+ else
+ lSeek+=file_info.size_file_comment;
+
+
+ if ((err==UNZ_OK) && (pfile_info!=NULL))
+ *pfile_info=file_info;
+
+ if ((err==UNZ_OK) && (pfile_info_internal!=NULL))
+ *pfile_info_internal=file_info_internal;
+
+ return err;
+}
+
+
+
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem.
+*/
+extern int ZEXPORT unzGetCurrentFileInfo64 (unzFile file,
+ unz_file_info64 * pfile_info,
+ char * szFileName, uLong fileNameBufferSize,
+ void *extraField, uLong extraFieldBufferSize,
+ char* szComment, uLong commentBufferSize)
+{
+ return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL,
+ szFileName,fileNameBufferSize,
+ extraField,extraFieldBufferSize,
+ szComment,commentBufferSize);
+}
+
+extern int ZEXPORT unzGetCurrentFileInfo (unzFile file,
+ unz_file_info * pfile_info,
+ char * szFileName, uLong fileNameBufferSize,
+ void *extraField, uLong extraFieldBufferSize,
+ char* szComment, uLong commentBufferSize)
+{
+ int err;
+ unz_file_info64 file_info64;
+ err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL,
+ szFileName,fileNameBufferSize,
+ extraField,extraFieldBufferSize,
+ szComment,commentBufferSize);
+ if ((err==UNZ_OK) && (pfile_info != NULL))
+ {
+ pfile_info->version = file_info64.version;
+ pfile_info->version_needed = file_info64.version_needed;
+ pfile_info->flag = file_info64.flag;
+ pfile_info->compression_method = file_info64.compression_method;
+ pfile_info->dosDate = file_info64.dosDate;
+ pfile_info->crc = file_info64.crc;
+
+ pfile_info->size_filename = file_info64.size_filename;
+ pfile_info->size_file_extra = file_info64.size_file_extra;
+ pfile_info->size_file_comment = file_info64.size_file_comment;
+
+ pfile_info->disk_num_start = file_info64.disk_num_start;
+ pfile_info->internal_fa = file_info64.internal_fa;
+ pfile_info->external_fa = file_info64.external_fa;
+
+ pfile_info->tmu_date = file_info64.tmu_date,
+
+
+ pfile_info->compressed_size = (uLong)file_info64.compressed_size;
+ pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size;
+
+ }
+ return err;
+}
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+extern int ZEXPORT unzGoToFirstFile (unzFile file)
+{
+ int err=UNZ_OK;
+ unz64_s* s;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ s->pos_in_central_dir=s->offset_central_dir;
+ s->num_file=0;
+ err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+extern int ZEXPORT unzGoToNextFile (unzFile file)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */
+ if (s->num_file+1==s->gi.number_entry)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename +
+ s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ;
+ s->num_file++;
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+extern int ZEXPORT unzLocateFile (unzFile file, const char *szFileName, int iCaseSensitivity)
+{
+ unz64_s* s;
+ int err;
+
+ /* We remember the 'current' position in the file so that we can jump
+ * back there if we fail.
+ */
+ unz_file_info64 cur_file_infoSaved;
+ unz_file_info64_internal cur_file_info_internalSaved;
+ ZPOS64_T num_fileSaved;
+ ZPOS64_T pos_in_central_dirSaved;
+
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+
+ if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP)
+ return UNZ_PARAMERROR;
+
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ /* Save the current state */
+ num_fileSaved = s->num_file;
+ pos_in_central_dirSaved = s->pos_in_central_dir;
+ cur_file_infoSaved = s->cur_file_info;
+ cur_file_info_internalSaved = s->cur_file_info_internal;
+
+ err = unzGoToFirstFile(file);
+
+ while (err == UNZ_OK)
+ {
+ char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1];
+ err = unzGetCurrentFileInfo64(file,NULL,
+ szCurrentFileName,sizeof(szCurrentFileName)-1,
+ NULL,0,NULL,0);
+ if (err == UNZ_OK)
+ {
+ if (unzStringFileNameCompare(szCurrentFileName,
+ szFileName,iCaseSensitivity)==0)
+ return UNZ_OK;
+ err = unzGoToNextFile(file);
+ }
+ }
+
+ /* We failed, so restore the state of the 'current file' to where we
+ * were.
+ */
+ s->num_file = num_fileSaved ;
+ s->pos_in_central_dir = pos_in_central_dirSaved ;
+ s->cur_file_info = cur_file_infoSaved;
+ s->cur_file_info_internal = cur_file_info_internalSaved;
+ return err;
+}
+
+
+/*
+///////////////////////////////////////////
+// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net)
+// I need random access
+//
+// Further optimization could be realized by adding an ability
+// to cache the directory in memory. The goal being a single
+// comprehensive file read to put the file I need in a memory.
+*/
+
+/*
+typedef struct unz_file_pos_s
+{
+ ZPOS64_T pos_in_zip_directory; // offset in file
+ ZPOS64_T num_of_file; // # of file
+} unz_file_pos;
+*/
+
+extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos)
+{
+ unz64_s* s;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_END_OF_LIST_OF_FILE;
+
+ file_pos->pos_in_zip_directory = s->pos_in_central_dir;
+ file_pos->num_of_file = s->num_file;
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzGetFilePos(
+ unzFile file,
+ unz_file_pos* file_pos)
+{
+ unz64_file_pos file_pos64;
+ int err = unzGetFilePos64(file,&file_pos64);
+ if (err==UNZ_OK)
+ {
+ file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory;
+ file_pos->num_of_file = (uLong)file_pos64.num_of_file;
+ }
+ return err;
+}
+
+extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL || file_pos==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ /* jump to the right spot */
+ s->pos_in_central_dir = file_pos->pos_in_zip_directory;
+ s->num_file = file_pos->num_of_file;
+
+ /* set the current file */
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ /* return results */
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+extern int ZEXPORT unzGoToFilePos(
+ unzFile file,
+ unz_file_pos* file_pos)
+{
+ unz64_file_pos file_pos64;
+ if (file_pos == NULL)
+ return UNZ_PARAMERROR;
+
+ file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory;
+ file_pos64.num_of_file = file_pos->num_of_file;
+ return unzGoToFilePos64(file,&file_pos64);
+}
+
+/*
+// Unzip Helper Functions - should be here?
+///////////////////////////////////////////
+*/
+
+/*
+ Read the local header of the current zipfile
+ Check the coherency of the local header and info in the end of central
+ directory about this file
+ store in *piSizeVar the size of extra info in local header
+ (filename and size of extra field data)
+*/
+local int unz64local_CheckCurrentFileCoherencyHeader (unz64_s* s, uInt* piSizeVar,
+ ZPOS64_T * poffset_local_extrafield,
+ uInt * psize_local_extrafield)
+{
+ uLong uMagic,uData,uFlags;
+ uLong size_filename;
+ uLong size_extra_field;
+ int err=UNZ_OK;
+
+ *piSizeVar = 0;
+ *poffset_local_extrafield = 0;
+ *psize_local_extrafield = 0;
+
+ if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile +
+ s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+
+ if (err==UNZ_OK)
+ {
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if (uMagic!=0x04034b50)
+ err=UNZ_BADZIPFILE;
+ }
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+/*
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion))
+ err=UNZ_BADZIPFILE;
+*/
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK)
+ err=UNZ_ERRNO;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method))
+ err=UNZ_BADZIPFILE;
+
+ if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+ (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */
+ err=UNZ_ERRNO;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */
+ err=UNZ_ERRNO;
+ else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */
+ err=UNZ_ERRNO;
+ else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0))
+ err=UNZ_BADZIPFILE;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK)
+ err=UNZ_ERRNO;
+ else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename))
+ err=UNZ_BADZIPFILE;
+
+ *piSizeVar += (uInt)size_filename;
+
+ if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK)
+ err=UNZ_ERRNO;
+ *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile +
+ SIZEZIPLOCALHEADER + size_filename;
+ *psize_local_extrafield = (uInt)size_extra_field;
+
+ *piSizeVar += (uInt)size_extra_field;
+
+ return err;
+}
+
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error and the file is opened, the return value is UNZ_OK.
+*/
+extern int ZEXPORT unzOpenCurrentFile3 (unzFile file, int* method,
+ int* level, int raw, const char* password)
+{
+ int err=UNZ_OK;
+ uInt iSizeVar;
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ ZPOS64_T offset_local_extrafield; /* offset of the local extra field */
+ uInt size_local_extrafield; /* size of the local extra field */
+# ifndef NOUNCRYPT
+ char source[12];
+# else
+ if (password != NULL)
+ return UNZ_PARAMERROR;
+# endif
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return UNZ_PARAMERROR;
+
+ if (s->pfile_in_zip_read != NULL)
+ unzCloseCurrentFile(file);
+
+ if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK)
+ return UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s));
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_INTERNALERROR;
+
+ pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE);
+ pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield;
+ pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield;
+ pfile_in_zip_read_info->pos_local_extrafield=0;
+ pfile_in_zip_read_info->raw=raw;
+
+ if (pfile_in_zip_read_info->read_buffer==NULL)
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return UNZ_INTERNALERROR;
+ }
+
+ pfile_in_zip_read_info->stream_initialised=0;
+
+ if (method!=NULL)
+ *method = (int)s->cur_file_info.compression_method;
+
+ if (level!=NULL)
+ {
+ *level = 6;
+ switch (s->cur_file_info.flag & 0x06)
+ {
+ case 6 : *level = 1; break;
+ case 4 : *level = 2; break;
+ case 2 : *level = 9; break;
+ }
+ }
+
+ if ((s->cur_file_info.compression_method!=0) &&
+/* #ifdef HAVE_BZIP2 */
+ (s->cur_file_info.compression_method!=Z_BZIP2ED) &&
+/* #endif */
+ (s->cur_file_info.compression_method!=Z_DEFLATED))
+
+ err=UNZ_BADZIPFILE;
+
+ pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc;
+ pfile_in_zip_read_info->crc32=0;
+ pfile_in_zip_read_info->total_out_64=0;
+ pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method;
+ pfile_in_zip_read_info->filestream=s->filestream;
+ pfile_in_zip_read_info->z_filefunc=s->z_filefunc;
+ pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile;
+
+ pfile_in_zip_read_info->stream.total_out = 0;
+
+ if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw))
+ {
+#ifdef HAVE_BZIP2
+ pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0;
+ pfile_in_zip_read_info->bstream.bzfree = (free_func)0;
+ pfile_in_zip_read_info->bstream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->bstream.state = (voidpf)0;
+
+ pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+ pfile_in_zip_read_info->stream.zfree = (free_func)0;
+ pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->stream.next_in = (voidpf)0;
+ pfile_in_zip_read_info->stream.avail_in = 0;
+
+ err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0);
+ if (err == Z_OK)
+ pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED;
+ else
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return err;
+ }
+#else
+ pfile_in_zip_read_info->raw=1;
+#endif
+ }
+ else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw))
+ {
+ pfile_in_zip_read_info->stream.zalloc = (alloc_func)0;
+ pfile_in_zip_read_info->stream.zfree = (free_func)0;
+ pfile_in_zip_read_info->stream.opaque = (voidpf)0;
+ pfile_in_zip_read_info->stream.next_in = 0;
+ pfile_in_zip_read_info->stream.avail_in = 0;
+
+ err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS);
+ if (err == Z_OK)
+ pfile_in_zip_read_info->stream_initialised=Z_DEFLATED;
+ else
+ {
+ TRYFREE(pfile_in_zip_read_info);
+ return err;
+ }
+ /* windowBits is passed < 0 to tell that there is no zlib header.
+ * Note that in this case inflate *requires* an extra "dummy" byte
+ * after the compressed stream in order to complete decompression and
+ * return Z_STREAM_END.
+ * In unzip, i don't wait absolutely Z_STREAM_END because I known the
+ * size of both compressed and uncompressed data
+ */
+ }
+ pfile_in_zip_read_info->rest_read_compressed =
+ s->cur_file_info.compressed_size ;
+ pfile_in_zip_read_info->rest_read_uncompressed =
+ s->cur_file_info.uncompressed_size ;
+
+
+ pfile_in_zip_read_info->pos_in_zipfile =
+ s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER +
+ iSizeVar;
+
+ pfile_in_zip_read_info->stream.avail_in = (uInt)0;
+
+ s->pfile_in_zip_read = pfile_in_zip_read_info;
+ s->encrypted = 0;
+
+# ifndef NOUNCRYPT
+ if (password != NULL)
+ {
+ int i;
+ s->pcrc_32_tab = get_crc_table();
+ init_keys(password,s->keys,s->pcrc_32_tab);
+ if (ZSEEK64(s->z_filefunc, s->filestream,
+ s->pfile_in_zip_read->pos_in_zipfile +
+ s->pfile_in_zip_read->byte_before_the_zipfile,
+ SEEK_SET)!=0)
+ return UNZ_INTERNALERROR;
+ if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12)
+ return UNZ_INTERNALERROR;
+
+ for (i = 0; i<12; i++)
+ zdecode(s->keys,s->pcrc_32_tab,source[i]);
+
+ s->pfile_in_zip_read->pos_in_zipfile+=12;
+ s->encrypted=1;
+ }
+# endif
+
+
+ return UNZ_OK;
+}
+
+extern int ZEXPORT unzOpenCurrentFile (unzFile file)
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL);
+}
+
+extern int ZEXPORT unzOpenCurrentFilePassword (unzFile file, const char* password)
+{
+ return unzOpenCurrentFile3(file, NULL, NULL, 0, password);
+}
+
+extern int ZEXPORT unzOpenCurrentFile2 (unzFile file, int* method, int* level, int raw)
+{
+ return unzOpenCurrentFile3(file, method, level, raw, NULL);
+}
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64( unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ s=(unz64_s*)file;
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+ if (pfile_in_zip_read_info==NULL)
+ return 0; //UNZ_PARAMERROR;
+ return pfile_in_zip_read_info->pos_in_zipfile +
+ pfile_in_zip_read_info->byte_before_the_zipfile;
+}
+
+/** Addition for GDAL : END */
+
+/*
+ Read bytes from the current file.
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+extern int ZEXPORT unzReadCurrentFile (unzFile file, voidp buf, unsigned len)
+{
+ int err=UNZ_OK;
+ uInt iRead = 0;
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if (pfile_in_zip_read_info->read_buffer == NULL)
+ return UNZ_END_OF_LIST_OF_FILE;
+ if (len==0)
+ return 0;
+
+ pfile_in_zip_read_info->stream.next_out = (Bytef*)buf;
+
+ pfile_in_zip_read_info->stream.avail_out = (uInt)len;
+
+ if ((len>pfile_in_zip_read_info->rest_read_uncompressed) &&
+ (!(pfile_in_zip_read_info->raw)))
+ pfile_in_zip_read_info->stream.avail_out =
+ (uInt)pfile_in_zip_read_info->rest_read_uncompressed;
+
+ if ((len>pfile_in_zip_read_info->rest_read_compressed+
+ pfile_in_zip_read_info->stream.avail_in) &&
+ (pfile_in_zip_read_info->raw))
+ pfile_in_zip_read_info->stream.avail_out =
+ (uInt)pfile_in_zip_read_info->rest_read_compressed+
+ pfile_in_zip_read_info->stream.avail_in;
+
+ while (pfile_in_zip_read_info->stream.avail_out>0)
+ {
+ if ((pfile_in_zip_read_info->stream.avail_in==0) &&
+ (pfile_in_zip_read_info->rest_read_compressed>0))
+ {
+ uInt uReadThis = UNZ_BUFSIZE;
+ if (pfile_in_zip_read_info->rest_read_compressed<uReadThis)
+ uReadThis = (uInt)pfile_in_zip_read_info->rest_read_compressed;
+ if (uReadThis == 0)
+ return UNZ_EOF;
+ if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->pos_in_zipfile +
+ pfile_in_zip_read_info->byte_before_the_zipfile,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+ if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->read_buffer,
+ uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+
+
+# ifndef NOUNCRYPT
+ if(s->encrypted)
+ {
+ uInt i;
+ for(i=0;i<uReadThis;i++)
+ pfile_in_zip_read_info->read_buffer[i] =
+ zdecode(s->keys,s->pcrc_32_tab,
+ pfile_in_zip_read_info->read_buffer[i]);
+ }
+# endif
+
+
+ pfile_in_zip_read_info->pos_in_zipfile += uReadThis;
+
+ pfile_in_zip_read_info->rest_read_compressed-=uReadThis;
+
+ pfile_in_zip_read_info->stream.next_in =
+ (Bytef*)pfile_in_zip_read_info->read_buffer;
+ pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis;
+ }
+
+ if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw))
+ {
+ uInt uDoCopy,i ;
+
+ if ((pfile_in_zip_read_info->stream.avail_in == 0) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ return (iRead==0) ? UNZ_EOF : iRead;
+
+ if (pfile_in_zip_read_info->stream.avail_out <
+ pfile_in_zip_read_info->stream.avail_in)
+ uDoCopy = pfile_in_zip_read_info->stream.avail_out ;
+ else
+ uDoCopy = pfile_in_zip_read_info->stream.avail_in ;
+
+ for (i=0;i<uDoCopy;i++)
+ *(pfile_in_zip_read_info->stream.next_out+i) =
+ *(pfile_in_zip_read_info->stream.next_in+i);
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy;
+
+ pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,
+ pfile_in_zip_read_info->stream.next_out,
+ uDoCopy);
+ pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy;
+ pfile_in_zip_read_info->stream.avail_in -= uDoCopy;
+ pfile_in_zip_read_info->stream.avail_out -= uDoCopy;
+ pfile_in_zip_read_info->stream.next_out += uDoCopy;
+ pfile_in_zip_read_info->stream.next_in += uDoCopy;
+ pfile_in_zip_read_info->stream.total_out += uDoCopy;
+ iRead += uDoCopy;
+ }
+ else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED)
+ {
+#ifdef HAVE_BZIP2
+ uLong uTotalOutBefore,uTotalOutAfter;
+ const Bytef *bufBefore;
+ uLong uOutThis;
+
+ pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in;
+ pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in;
+ pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in;
+ pfile_in_zip_read_info->bstream.total_in_hi32 = 0;
+ pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out;
+ pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out;
+ pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out;
+ pfile_in_zip_read_info->bstream.total_out_hi32 = 0;
+
+ uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32;
+ bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out;
+
+ err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream);
+
+ uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32;
+ uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+ pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis));
+ pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis;
+ iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in;
+ pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in;
+ pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32;
+ pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out;
+ pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out;
+ pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32;
+
+ if (err==BZ_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=BZ_OK)
+ break;
+#endif
+ } // end Z_BZIP2ED
+ else
+ {
+ ZPOS64_T uTotalOutBefore,uTotalOutAfter;
+ const Bytef *bufBefore;
+ ZPOS64_T uOutThis;
+ int flush=Z_SYNC_FLUSH;
+
+ uTotalOutBefore = pfile_in_zip_read_info->stream.total_out;
+ bufBefore = pfile_in_zip_read_info->stream.next_out;
+
+ /*
+ if ((pfile_in_zip_read_info->rest_read_uncompressed ==
+ pfile_in_zip_read_info->stream.avail_out) &&
+ (pfile_in_zip_read_info->rest_read_compressed == 0))
+ flush = Z_FINISH;
+ */
+ err=inflate(&pfile_in_zip_read_info->stream,flush);
+
+ if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL))
+ err = Z_DATA_ERROR;
+
+ uTotalOutAfter = pfile_in_zip_read_info->stream.total_out;
+ uOutThis = uTotalOutAfter-uTotalOutBefore;
+
+ pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis;
+
+ pfile_in_zip_read_info->crc32 =
+ crc32(pfile_in_zip_read_info->crc32,bufBefore,
+ (uInt)(uOutThis));
+
+ pfile_in_zip_read_info->rest_read_uncompressed -=
+ uOutThis;
+
+ iRead += (uInt)(uTotalOutAfter - uTotalOutBefore);
+
+ if (err==Z_STREAM_END)
+ return (iRead==0) ? UNZ_EOF : iRead;
+ if (err!=Z_OK)
+ break;
+ }
+ }
+
+ if (err==Z_OK)
+ return iRead;
+ return err;
+}
+
+
+/*
+ Give the current position in uncompressed data
+*/
+extern z_off_t ZEXPORT unztell (unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ return (z_off_t)pfile_in_zip_read_info->stream.total_out;
+}
+
+extern ZPOS64_T ZEXPORT unztell64 (unzFile file)
+{
+
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return (ZPOS64_T)-1;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return (ZPOS64_T)-1;
+
+ return pfile_in_zip_read_info->total_out_64;
+}
+
+
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+extern int ZEXPORT unzeof (unzFile file)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ if (pfile_in_zip_read_info->rest_read_uncompressed == 0)
+ return 1;
+ else
+ return 0;
+}
+
+
+
+/*
+Read extra field from the current file (opened by unzOpenCurrentFile)
+This is the local-header version of the extra field (sometimes, there is
+more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field that can be read
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+extern int ZEXPORT unzGetLocalExtrafield (unzFile file, voidp buf, unsigned len)
+{
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ uInt read_now;
+ ZPOS64_T size_to_read;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+ size_to_read = (pfile_in_zip_read_info->size_local_extrafield -
+ pfile_in_zip_read_info->pos_local_extrafield);
+
+ if (buf==NULL)
+ return (int)size_to_read;
+
+ if (len>size_to_read)
+ read_now = (uInt)size_to_read;
+ else
+ read_now = (uInt)len ;
+
+ if (read_now==0)
+ return 0;
+
+ if (ZSEEK64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ pfile_in_zip_read_info->offset_local_extrafield +
+ pfile_in_zip_read_info->pos_local_extrafield,
+ ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (ZREAD64(pfile_in_zip_read_info->z_filefunc,
+ pfile_in_zip_read_info->filestream,
+ buf,read_now)!=read_now)
+ return UNZ_ERRNO;
+
+ return (int)read_now;
+}
+
+/*
+ Close the file in zip opened with unzOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+extern int ZEXPORT unzCloseCurrentFile (unzFile file)
+{
+ int err=UNZ_OK;
+
+ unz64_s* s;
+ file_in_zip64_read_info_s* pfile_in_zip_read_info;
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ pfile_in_zip_read_info=s->pfile_in_zip_read;
+
+ if (pfile_in_zip_read_info==NULL)
+ return UNZ_PARAMERROR;
+
+
+ if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) &&
+ (!pfile_in_zip_read_info->raw))
+ {
+ if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait)
+ err=UNZ_CRCERROR;
+ }
+
+
+ TRYFREE(pfile_in_zip_read_info->read_buffer);
+ pfile_in_zip_read_info->read_buffer = NULL;
+ if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED)
+ inflateEnd(&pfile_in_zip_read_info->stream);
+#ifdef HAVE_BZIP2
+ else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED)
+ BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream);
+#endif
+
+
+ pfile_in_zip_read_info->stream_initialised = 0;
+ TRYFREE(pfile_in_zip_read_info);
+
+ s->pfile_in_zip_read=NULL;
+
+ return err;
+}
+
+
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+extern int ZEXPORT unzGetGlobalComment (unzFile file, char * szComment, uLong uSizeBuf)
+{
+ unz64_s* s;
+ uLong uReadThis ;
+ if (file==NULL)
+ return (int)UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ uReadThis = uSizeBuf;
+ if (uReadThis>s->gi.size_comment)
+ uReadThis = s->gi.size_comment;
+
+ if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return UNZ_ERRNO;
+
+ if (uReadThis>0)
+ {
+ *szComment='\0';
+ if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis)
+ return UNZ_ERRNO;
+ }
+
+ if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment))
+ *(szComment+s->gi.size_comment)='\0';
+ return (int)uReadThis;
+}
+
+/* Additions by RX '2004 */
+extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file)
+{
+ unz64_s* s;
+
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+ if (!s->current_file_ok)
+ return 0;
+ if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff)
+ if (s->num_file==s->gi.number_entry)
+ return 0;
+ return s->pos_in_central_dir;
+}
+
+extern uLong ZEXPORT unzGetOffset (unzFile file)
+{
+ ZPOS64_T offset64;
+
+ if (file==NULL)
+ return 0; //UNZ_PARAMERROR;
+ offset64 = unzGetOffset64(file);
+ return (uLong)offset64;
+}
+
+extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos)
+{
+ unz64_s* s;
+ int err;
+
+ if (file==NULL)
+ return UNZ_PARAMERROR;
+ s=(unz64_s*)file;
+
+ s->pos_in_central_dir = pos;
+ s->num_file = s->gi.number_entry; /* hack */
+ err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info,
+ &s->cur_file_info_internal,
+ NULL,0,NULL,0,NULL,0);
+ s->current_file_ok = (err == UNZ_OK);
+ return err;
+}
+
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos)
+{
+ return unzSetOffset64(file,pos);
+}
diff --git a/compat/zlib/contrib/minizip/unzip.h b/compat/zlib/contrib/minizip/unzip.h
new file mode 100644
index 0000000..2104e39
--- /dev/null
+++ b/compat/zlib/contrib/minizip/unzip.h
@@ -0,0 +1,437 @@
+/* unzip.h -- IO for uncompress .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications of Unzip for Zip64
+ Copyright (C) 2007-2008 Even Rouault
+
+ Modifications for Zip64 support on both zip and unzip
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ ---------------------------------------------------------------------------------
+
+ Condition of use and distribution are the same than zlib :
+
+ 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.
+
+ ---------------------------------------------------------------------------------
+
+ Changes
+
+ See header of unzip64.c
+
+*/
+
+#ifndef _unz64_H
+#define _unz64_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+ from (void*) without cast */
+typedef struct TagunzFile__ { int unused; } unzFile__;
+typedef unzFile__ *unzFile;
+#else
+typedef voidp unzFile;
+#endif
+
+
+#define UNZ_OK (0)
+#define UNZ_END_OF_LIST_OF_FILE (-100)
+#define UNZ_ERRNO (Z_ERRNO)
+#define UNZ_EOF (0)
+#define UNZ_PARAMERROR (-102)
+#define UNZ_BADZIPFILE (-103)
+#define UNZ_INTERNALERROR (-104)
+#define UNZ_CRCERROR (-105)
+
+/* tm_unz contain date/time info */
+typedef struct tm_unz_s
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt tm_year; /* years - [1980..2044] */
+} tm_unz;
+
+/* unz_global_info structure contain global data about the ZIPfile
+ These data comes from the end of central dir */
+typedef struct unz_global_info64_s
+{
+ ZPOS64_T number_entry; /* total number of entries in
+ the central dir on this disk */
+ uLong size_comment; /* size of the global comment of the zipfile */
+} unz_global_info64;
+
+typedef struct unz_global_info_s
+{
+ uLong number_entry; /* total number of entries in
+ the central dir on this disk */
+ uLong size_comment; /* size of the global comment of the zipfile */
+} unz_global_info;
+
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_info64_s
+{
+ uLong version; /* version made by 2 bytes */
+ uLong version_needed; /* version needed to extract 2 bytes */
+ uLong flag; /* general purpose bit flag 2 bytes */
+ uLong compression_method; /* compression method 2 bytes */
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
+ uLong crc; /* crc-32 4 bytes */
+ ZPOS64_T compressed_size; /* compressed size 8 bytes */
+ ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */
+ uLong size_filename; /* filename length 2 bytes */
+ uLong size_file_extra; /* extra field length 2 bytes */
+ uLong size_file_comment; /* file comment length 2 bytes */
+
+ uLong disk_num_start; /* disk number start 2 bytes */
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+
+ tm_unz tmu_date;
+} unz_file_info64;
+
+typedef struct unz_file_info_s
+{
+ uLong version; /* version made by 2 bytes */
+ uLong version_needed; /* version needed to extract 2 bytes */
+ uLong flag; /* general purpose bit flag 2 bytes */
+ uLong compression_method; /* compression method 2 bytes */
+ uLong dosDate; /* last mod file date in Dos fmt 4 bytes */
+ uLong crc; /* crc-32 4 bytes */
+ uLong compressed_size; /* compressed size 4 bytes */
+ uLong uncompressed_size; /* uncompressed size 4 bytes */
+ uLong size_filename; /* filename length 2 bytes */
+ uLong size_file_extra; /* extra field length 2 bytes */
+ uLong size_file_comment; /* file comment length 2 bytes */
+
+ uLong disk_num_start; /* disk number start 2 bytes */
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+
+ tm_unz tmu_date;
+} unz_file_info;
+
+extern int ZEXPORT unzStringFileNameCompare OF ((const char* fileName1,
+ const char* fileName2,
+ int iCaseSensitivity));
+/*
+ Compare two filename (fileName1,fileName2).
+ If iCaseSenisivity = 1, comparision is case sensitivity (like strcmp)
+ If iCaseSenisivity = 2, comparision is not case sensitivity (like strcmpi
+ or strcasecmp)
+ If iCaseSenisivity = 0, case sensitivity is defaut of your operating system
+ (like 1 on Unix, 2 on Windows)
+*/
+
+
+extern unzFile ZEXPORT unzOpen OF((const char *path));
+extern unzFile ZEXPORT unzOpen64 OF((const void *path));
+/*
+ Open a Zip file. path contain the full pathname (by example,
+ on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer
+ "zlib/zlib113.zip".
+ If the zipfile cannot be opened (file don't exist or in not valid), the
+ return value is NULL.
+ Else, the return value is a unzFile Handle, usable with other function
+ of this unzip package.
+ the "64" function take a const void* pointer, because the path is just the
+ value passed to the open64_file_func callback.
+ Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path
+ is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char*
+ does not describe the reality
+*/
+
+
+extern unzFile ZEXPORT unzOpen2 OF((const char *path,
+ zlib_filefunc_def* pzlib_filefunc_def));
+/*
+ Open a Zip file, like unzOpen, but provide a set of file low level API
+ for read/write the zip file (see ioapi.h)
+*/
+
+extern unzFile ZEXPORT unzOpen2_64 OF((const void *path,
+ zlib_filefunc64_def* pzlib_filefunc_def));
+/*
+ Open a Zip file, like unz64Open, but provide a set of file low level API
+ for read/write the zip file (see ioapi.h)
+*/
+
+extern int ZEXPORT unzClose OF((unzFile file));
+/*
+ Close a ZipFile opened with unzOpen.
+ If there is files inside the .Zip opened with unzOpenCurrentFile (see later),
+ these files MUST be closed with unzCloseCurrentFile before call unzClose.
+ return UNZ_OK if there is no problem. */
+
+extern int ZEXPORT unzGetGlobalInfo OF((unzFile file,
+ unz_global_info *pglobal_info));
+
+extern int ZEXPORT unzGetGlobalInfo64 OF((unzFile file,
+ unz_global_info64 *pglobal_info));
+/*
+ Write info about the ZipFile in the *pglobal_info structure.
+ No preparation of the structure is needed
+ return UNZ_OK if there is no problem. */
+
+
+extern int ZEXPORT unzGetGlobalComment OF((unzFile file,
+ char *szComment,
+ uLong uSizeBuf));
+/*
+ Get the global comment string of the ZipFile, in the szComment buffer.
+ uSizeBuf is the size of the szComment buffer.
+ return the number of byte copied or an error code <0
+*/
+
+
+/***************************************************************************/
+/* Unzip package allow you browse the directory of the zipfile */
+
+extern int ZEXPORT unzGoToFirstFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the first file.
+ return UNZ_OK if there is no problem
+*/
+
+extern int ZEXPORT unzGoToNextFile OF((unzFile file));
+/*
+ Set the current file of the zipfile to the next file.
+ return UNZ_OK if there is no problem
+ return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest.
+*/
+
+extern int ZEXPORT unzLocateFile OF((unzFile file,
+ const char *szFileName,
+ int iCaseSensitivity));
+/*
+ Try locate the file szFileName in the zipfile.
+ For the iCaseSensitivity signification, see unzStringFileNameCompare
+
+ return value :
+ UNZ_OK if the file is found. It becomes the current file.
+ UNZ_END_OF_LIST_OF_FILE if the file is not found
+*/
+
+
+/* ****************************************** */
+/* Ryan supplied functions */
+/* unz_file_info contain information about a file in the zipfile */
+typedef struct unz_file_pos_s
+{
+ uLong pos_in_zip_directory; /* offset in zip file directory */
+ uLong num_of_file; /* # of file */
+} unz_file_pos;
+
+extern int ZEXPORT unzGetFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos(
+ unzFile file,
+ unz_file_pos* file_pos);
+
+typedef struct unz64_file_pos_s
+{
+ ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */
+ ZPOS64_T num_of_file; /* # of file */
+} unz64_file_pos;
+
+extern int ZEXPORT unzGetFilePos64(
+ unzFile file,
+ unz64_file_pos* file_pos);
+
+extern int ZEXPORT unzGoToFilePos64(
+ unzFile file,
+ const unz64_file_pos* file_pos);
+
+/* ****************************************** */
+
+extern int ZEXPORT unzGetCurrentFileInfo64 OF((unzFile file,
+ unz_file_info64 *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+
+extern int ZEXPORT unzGetCurrentFileInfo OF((unzFile file,
+ unz_file_info *pfile_info,
+ char *szFileName,
+ uLong fileNameBufferSize,
+ void *extraField,
+ uLong extraFieldBufferSize,
+ char *szComment,
+ uLong commentBufferSize));
+/*
+ Get Info about the current file
+ if pfile_info!=NULL, the *pfile_info structure will contain somes info about
+ the current file
+ if szFileName!=NULL, the filemane string will be copied in szFileName
+ (fileNameBufferSize is the size of the buffer)
+ if extraField!=NULL, the extra field information will be copied in extraField
+ (extraFieldBufferSize is the size of the buffer).
+ This is the Central-header version of the extra field
+ if szComment!=NULL, the comment string of the file will be copied in szComment
+ (commentBufferSize is the size of the buffer)
+*/
+
+
+/** Addition for GDAL : START */
+
+extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64 OF((unzFile file));
+
+/** Addition for GDAL : END */
+
+
+/***************************************************************************/
+/* for reading the content of the current zipfile, you can open it, read data
+ from it, and close it (you can close it before reading all the file)
+ */
+
+extern int ZEXPORT unzOpenCurrentFile OF((unzFile file));
+/*
+ Open for reading data the current file in the zipfile.
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFilePassword OF((unzFile file,
+ const char* password));
+/*
+ Open for reading data the current file in the zipfile.
+ password is a crypting password
+ If there is no error, the return value is UNZ_OK.
+*/
+
+extern int ZEXPORT unzOpenCurrentFile2 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+extern int ZEXPORT unzOpenCurrentFile3 OF((unzFile file,
+ int* method,
+ int* level,
+ int raw,
+ const char* password));
+/*
+ Same than unzOpenCurrentFile, but open for read raw the file (not uncompress)
+ if raw==1
+ *method will receive method of compression, *level will receive level of
+ compression
+ note : you can set level parameter as NULL (if you did not want known level,
+ but you CANNOT set method parameter as NULL
+*/
+
+
+extern int ZEXPORT unzCloseCurrentFile OF((unzFile file));
+/*
+ Close the file in zip opened with unzOpenCurrentFile
+ Return UNZ_CRCERROR if all the file was read but the CRC is not good
+*/
+
+extern int ZEXPORT unzReadCurrentFile OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read bytes from the current file (opened by unzOpenCurrentFile)
+ buf contain buffer where data must be copied
+ len the size of buf.
+
+ return the number of byte copied if somes bytes are copied
+ return 0 if the end of file was reached
+ return <0 with error code if there is an error
+ (UNZ_ERRNO for IO error, or zLib error for uncompress error)
+*/
+
+extern z_off_t ZEXPORT unztell OF((unzFile file));
+
+extern ZPOS64_T ZEXPORT unztell64 OF((unzFile file));
+/*
+ Give the current position in uncompressed data
+*/
+
+extern int ZEXPORT unzeof OF((unzFile file));
+/*
+ return 1 if the end of file was reached, 0 elsewhere
+*/
+
+extern int ZEXPORT unzGetLocalExtrafield OF((unzFile file,
+ voidp buf,
+ unsigned len));
+/*
+ Read extra field from the current file (opened by unzOpenCurrentFile)
+ This is the local-header version of the extra field (sometimes, there is
+ more info in the local-header version than in the central-header)
+
+ if buf==NULL, it return the size of the local extra field
+
+ if buf!=NULL, len is the size of the buffer, the extra header is copied in
+ buf.
+ the return value is the number of bytes copied in buf, or (if <0)
+ the error code
+*/
+
+/***************************************************************************/
+
+/* Get the current file offset */
+extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file);
+extern uLong ZEXPORT unzGetOffset (unzFile file);
+
+/* Set the current file offset */
+extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos);
+extern int ZEXPORT unzSetOffset (unzFile file, uLong pos);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _unz64_H */
diff --git a/compat/zlib/contrib/minizip/zip.c b/compat/zlib/contrib/minizip/zip.c
new file mode 100644
index 0000000..ea54853
--- /dev/null
+++ b/compat/zlib/contrib/minizip/zip.c
@@ -0,0 +1,2007 @@
+/* zip.c -- IO on .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ Changes
+ Oct-2009 - Mathias Svensson - Remove old C style function prototypes
+ Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives
+ Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions.
+ Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data
+ It is used when recreting zip archive with RAW when deleting items from a zip.
+ ZIP64 data is automaticly added to items that needs it, and existing ZIP64 data need to be removed.
+ Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required)
+ Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer
+
+*/
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "zlib.h"
+#include "zip.h"
+
+#ifdef STDC
+# include <stddef.h>
+# include <string.h>
+# include <stdlib.h>
+#endif
+#ifdef NO_ERRNO_H
+ extern int errno;
+#else
+# include <errno.h>
+#endif
+
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+#ifndef VERSIONMADEBY
+# define VERSIONMADEBY (0x0) /* platform depedent */
+#endif
+
+#ifndef Z_BUFSIZE
+#define Z_BUFSIZE (64*1024) //(16384)
+#endif
+
+#ifndef Z_MAXFILENAMEINZIP
+#define Z_MAXFILENAMEINZIP (256)
+#endif
+
+#ifndef ALLOC
+# define ALLOC(size) (malloc(size))
+#endif
+#ifndef TRYFREE
+# define TRYFREE(p) {if (p) free(p);}
+#endif
+
+/*
+#define SIZECENTRALDIRITEM (0x2e)
+#define SIZEZIPLOCALHEADER (0x1e)
+*/
+
+/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */
+
+
+// NOT sure that this work on ALL platform
+#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32))
+
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
+
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
+
+#ifndef DEF_MEM_LEVEL
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+#endif
+const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll";
+
+
+#define SIZEDATA_INDATABLOCK (4096-(4*4))
+
+#define LOCALHEADERMAGIC (0x04034b50)
+#define CENTRALHEADERMAGIC (0x02014b50)
+#define ENDHEADERMAGIC (0x06054b50)
+#define ZIP64ENDHEADERMAGIC (0x6064b50)
+#define ZIP64ENDLOCHEADERMAGIC (0x7064b50)
+
+#define FLAG_LOCALHEADER_OFFSET (0x06)
+#define CRC_LOCALHEADER_OFFSET (0x0e)
+
+#define SIZECENTRALHEADER (0x2e) /* 46 */
+
+typedef struct linkedlist_datablock_internal_s
+{
+ struct linkedlist_datablock_internal_s* next_datablock;
+ uLong avail_in_this_block;
+ uLong filled_in_this_block;
+ uLong unused; /* for future use and alignement */
+ unsigned char data[SIZEDATA_INDATABLOCK];
+} linkedlist_datablock_internal;
+
+typedef struct linkedlist_data_s
+{
+ linkedlist_datablock_internal* first_block;
+ linkedlist_datablock_internal* last_block;
+} linkedlist_data;
+
+
+typedef struct
+{
+ z_stream stream; /* zLib stream structure for inflate */
+#ifdef HAVE_BZIP2
+ bz_stream bstream; /* bzLib stream structure for bziped */
+#endif
+
+ int stream_initialised; /* 1 is stream is initialised */
+ uInt pos_in_buffered_data; /* last written byte in buffered_data */
+
+ ZPOS64_T pos_local_header; /* offset of the local header of the file
+ currenty writing */
+ char* central_header; /* central header data for the current file */
+ uLong size_centralExtra;
+ uLong size_centralheader; /* size of the central header for cur file */
+ uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */
+ uLong flag; /* flag of the file currently writing */
+
+ int method; /* compression method of file currenty wr.*/
+ int raw; /* 1 for directly writing raw data */
+ Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/
+ uLong dosDate;
+ uLong crc32;
+ int encrypt;
+ int zip64; /* Add ZIP64 extened information in the extra field */
+ ZPOS64_T pos_zip64extrainfo;
+ ZPOS64_T totalCompressedData;
+ ZPOS64_T totalUncompressedData;
+#ifndef NOCRYPT
+ unsigned long keys[3]; /* keys defining the pseudo-random sequence */
+ const z_crc_t* pcrc_32_tab;
+ int crypt_header_size;
+#endif
+} curfile64_info;
+
+typedef struct
+{
+ zlib_filefunc64_32_def z_filefunc;
+ voidpf filestream; /* io structore of the zipfile */
+ linkedlist_data central_dir;/* datablock with central dir in construction*/
+ int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/
+ curfile64_info ci; /* info on the file curretly writing */
+
+ ZPOS64_T begin_pos; /* position of the beginning of the zipfile */
+ ZPOS64_T add_position_when_writting_offset;
+ ZPOS64_T number_entry;
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ char *globalcomment;
+#endif
+
+} zip64_internal;
+
+
+#ifndef NOCRYPT
+#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED
+#include "crypt.h"
+#endif
+
+local linkedlist_datablock_internal* allocate_new_datablock()
+{
+ linkedlist_datablock_internal* ldi;
+ ldi = (linkedlist_datablock_internal*)
+ ALLOC(sizeof(linkedlist_datablock_internal));
+ if (ldi!=NULL)
+ {
+ ldi->next_datablock = NULL ;
+ ldi->filled_in_this_block = 0 ;
+ ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ;
+ }
+ return ldi;
+}
+
+local void free_datablock(linkedlist_datablock_internal* ldi)
+{
+ while (ldi!=NULL)
+ {
+ linkedlist_datablock_internal* ldinext = ldi->next_datablock;
+ TRYFREE(ldi);
+ ldi = ldinext;
+ }
+}
+
+local void init_linkedlist(linkedlist_data* ll)
+{
+ ll->first_block = ll->last_block = NULL;
+}
+
+local void free_linkedlist(linkedlist_data* ll)
+{
+ free_datablock(ll->first_block);
+ ll->first_block = ll->last_block = NULL;
+}
+
+
+local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len)
+{
+ linkedlist_datablock_internal* ldi;
+ const unsigned char* from_copy;
+
+ if (ll==NULL)
+ return ZIP_INTERNALERROR;
+
+ if (ll->last_block == NULL)
+ {
+ ll->first_block = ll->last_block = allocate_new_datablock();
+ if (ll->first_block == NULL)
+ return ZIP_INTERNALERROR;
+ }
+
+ ldi = ll->last_block;
+ from_copy = (unsigned char*)buf;
+
+ while (len>0)
+ {
+ uInt copy_this;
+ uInt i;
+ unsigned char* to_copy;
+
+ if (ldi->avail_in_this_block==0)
+ {
+ ldi->next_datablock = allocate_new_datablock();
+ if (ldi->next_datablock == NULL)
+ return ZIP_INTERNALERROR;
+ ldi = ldi->next_datablock ;
+ ll->last_block = ldi;
+ }
+
+ if (ldi->avail_in_this_block < len)
+ copy_this = (uInt)ldi->avail_in_this_block;
+ else
+ copy_this = (uInt)len;
+
+ to_copy = &(ldi->data[ldi->filled_in_this_block]);
+
+ for (i=0;i<copy_this;i++)
+ *(to_copy+i)=*(from_copy+i);
+
+ ldi->filled_in_this_block += copy_this;
+ ldi->avail_in_this_block -= copy_this;
+ from_copy += copy_this ;
+ len -= copy_this;
+ }
+ return ZIP_OK;
+}
+
+
+
+/****************************************************************************/
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+/* ===========================================================================
+ Inputs a long in LSB order to the given file
+ nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T)
+*/
+
+local int zip64local_putValue OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte));
+local int zip64local_putValue (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte)
+{
+ unsigned char buf[8];
+ int n;
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = (unsigned char)(x & 0xff);
+ x >>= 8;
+ }
+ if (x != 0)
+ { /* data overflow - hack for ZIP64 (X Roche) */
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = 0xff;
+ }
+ }
+
+ if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,nbByte)!=(uLong)nbByte)
+ return ZIP_ERRNO;
+ else
+ return ZIP_OK;
+}
+
+local void zip64local_putValue_inmemory OF((void* dest, ZPOS64_T x, int nbByte));
+local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte)
+{
+ unsigned char* buf=(unsigned char*)dest;
+ int n;
+ for (n = 0; n < nbByte; n++) {
+ buf[n] = (unsigned char)(x & 0xff);
+ x >>= 8;
+ }
+
+ if (x != 0)
+ { /* data overflow - hack for ZIP64 */
+ for (n = 0; n < nbByte; n++)
+ {
+ buf[n] = 0xff;
+ }
+ }
+}
+
+/****************************************************************************/
+
+
+local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm)
+{
+ uLong year = (uLong)ptm->tm_year;
+ if (year>=1980)
+ year-=1980;
+ else if (year>=80)
+ year-=80;
+ return
+ (uLong) (((ptm->tm_mday) + (32 * (ptm->tm_mon+1)) + (512 * year)) << 16) |
+ ((ptm->tm_sec/2) + (32* ptm->tm_min) + (2048 * (uLong)ptm->tm_hour));
+}
+
+
+/****************************************************************************/
+
+local int zip64local_getByte OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int *pi));
+
+local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def,voidpf filestream,int* pi)
+{
+ unsigned char c;
+ int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1);
+ if (err==1)
+ {
+ *pi = (int)c;
+ return ZIP_OK;
+ }
+ else
+ {
+ if (ZERROR64(*pzlib_filefunc_def,filestream))
+ return ZIP_ERRNO;
+ else
+ return ZIP_EOF;
+ }
+}
+
+
+/* ===========================================================================
+ Reads a long in LSB order from the given gz_stream. Sets
+*/
+local int zip64local_getShort OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getShort (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int zip64local_getLong OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong *pX));
+
+local int zip64local_getLong (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX)
+{
+ uLong x ;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (uLong)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<8;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<16;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((uLong)i)<<24;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+ return err;
+}
+
+local int zip64local_getLong64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX));
+
+
+local int zip64local_getLong64 (const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX)
+{
+ ZPOS64_T x;
+ int i = 0;
+ int err;
+
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x = (ZPOS64_T)i;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<8;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<16;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<24;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<32;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<40;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<48;
+
+ if (err==ZIP_OK)
+ err = zip64local_getByte(pzlib_filefunc_def,filestream,&i);
+ x += ((ZPOS64_T)i)<<56;
+
+ if (err==ZIP_OK)
+ *pX = x;
+ else
+ *pX = 0;
+
+ return err;
+}
+
+#ifndef BUFREADCOMMENT
+#define BUFREADCOMMENT (0x400)
+#endif
+/*
+ Locate the Central directory of a zipfile (at the end, just before
+ the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos ;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) &&
+ ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+ TRYFREE(buf);
+ return uPosFound;
+}
+
+/*
+Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before
+the global comment)
+*/
+local ZPOS64_T zip64local_SearchCentralDir64 OF((const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream));
+
+local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream)
+{
+ unsigned char* buf;
+ ZPOS64_T uSizeFile;
+ ZPOS64_T uBackRead;
+ ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */
+ ZPOS64_T uPosFound=0;
+ uLong uL;
+ ZPOS64_T relativeOffset;
+
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0)
+ return 0;
+
+ uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream);
+
+ if (uMaxBack>uSizeFile)
+ uMaxBack = uSizeFile;
+
+ buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4);
+ if (buf==NULL)
+ return 0;
+
+ uBackRead = 4;
+ while (uBackRead<uMaxBack)
+ {
+ uLong uReadSize;
+ ZPOS64_T uReadPos;
+ int i;
+ if (uBackRead+BUFREADCOMMENT>uMaxBack)
+ uBackRead = uMaxBack;
+ else
+ uBackRead+=BUFREADCOMMENT;
+ uReadPos = uSizeFile-uBackRead ;
+
+ uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ?
+ (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos);
+ if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ break;
+
+ if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize)
+ break;
+
+ for (i=(int)uReadSize-3; (i--)>0;)
+ {
+ // Signature "0x07064b50" Zip64 end of central directory locater
+ if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07))
+ {
+ uPosFound = uReadPos+i;
+ break;
+ }
+ }
+
+ if (uPosFound!=0)
+ break;
+ }
+
+ TRYFREE(buf);
+ if (uPosFound == 0)
+ return 0;
+
+ /* Zip64 end of central directory locator */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+
+ /* number of the disk with the start of the zip64 end of central directory */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+ if (uL != 0)
+ return 0;
+
+ /* relative offset of the zip64 end of central directory record */
+ if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK)
+ return 0;
+
+ /* total number of disks */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+ if (uL != 1)
+ return 0;
+
+ /* Goto Zip64 end of central directory record */
+ if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ return 0;
+
+ /* the signature */
+ if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK)
+ return 0;
+
+ if (uL != 0x06064b50) // signature of 'Zip64 end of central directory'
+ return 0;
+
+ return relativeOffset;
+}
+
+int LoadCentralDirectoryRecord(zip64_internal* pziinit)
+{
+ int err=ZIP_OK;
+ ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/
+
+ ZPOS64_T size_central_dir; /* size of the central directory */
+ ZPOS64_T offset_central_dir; /* offset of start of central directory */
+ ZPOS64_T central_pos;
+ uLong uL;
+
+ uLong number_disk; /* number of the current dist, used for
+ spaning ZIP, unsupported, always 0*/
+ uLong number_disk_with_CD; /* number the the disk with central dir, used
+ for spaning ZIP, unsupported, always 0*/
+ ZPOS64_T number_entry;
+ ZPOS64_T number_entry_CD; /* total number of entries in
+ the central dir
+ (same than number_entry on nospan) */
+ uLong VersionMadeBy;
+ uLong VersionNeeded;
+ uLong size_comment;
+
+ int hasZIP64Record = 0;
+
+ // check first if we find a ZIP64 record
+ central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream);
+ if(central_pos > 0)
+ {
+ hasZIP64Record = 1;
+ }
+ else if(central_pos == 0)
+ {
+ central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream);
+ }
+
+/* disable to allow appending to empty ZIP archive
+ if (central_pos==0)
+ err=ZIP_ERRNO;
+*/
+
+ if(hasZIP64Record)
+ {
+ ZPOS64_T sizeEndOfCentralDirectory;
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* size of zip64 end of central directory record */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* version made by */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* version needed to extract */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of this disk */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central directory on this disk */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central directory */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+ err=ZIP_BADZIPFILE;
+
+ /* size of the central directory */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* offset of start of central directory with respect to the
+ starting disk number */
+ if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ // TODO..
+ // read the comment from the standard central header.
+ size_comment = 0;
+ }
+ else
+ {
+ // Read End of central Directory info
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err=ZIP_ERRNO;
+
+ /* the signature, already checked */
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of this disk */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* number of the disk with the start of the central directory */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK)
+ err=ZIP_ERRNO;
+
+ /* total number of entries in the central dir on this disk */
+ number_entry = 0;
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ number_entry = uL;
+
+ /* total number of entries in the central dir */
+ number_entry_CD = 0;
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ number_entry_CD = uL;
+
+ if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0))
+ err=ZIP_BADZIPFILE;
+
+ /* size of the central directory */
+ size_central_dir = 0;
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ size_central_dir = uL;
+
+ /* offset of start of central directory with respect to the starting disk number */
+ offset_central_dir = 0;
+ if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ else
+ offset_central_dir = uL;
+
+
+ /* zipfile global comment length */
+ if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK)
+ err=ZIP_ERRNO;
+ }
+
+ if ((central_pos<offset_central_dir+size_central_dir) &&
+ (err==ZIP_OK))
+ err=ZIP_BADZIPFILE;
+
+ if (err!=ZIP_OK)
+ {
+ ZCLOSE64(pziinit->z_filefunc, pziinit->filestream);
+ return ZIP_ERRNO;
+ }
+
+ if (size_comment>0)
+ {
+ pziinit->globalcomment = (char*)ALLOC(size_comment+1);
+ if (pziinit->globalcomment)
+ {
+ size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment);
+ pziinit->globalcomment[size_comment]=0;
+ }
+ }
+
+ byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir);
+ pziinit->add_position_when_writting_offset = byte_before_the_zipfile;
+
+ {
+ ZPOS64_T size_central_dir_to_read = size_central_dir;
+ size_t buf_size = SIZEDATA_INDATABLOCK;
+ void* buf_read = (void*)ALLOC(buf_size);
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ while ((size_central_dir_to_read>0) && (err==ZIP_OK))
+ {
+ ZPOS64_T read_this = SIZEDATA_INDATABLOCK;
+ if (read_this > size_central_dir_to_read)
+ read_this = size_central_dir_to_read;
+
+ if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this)
+ err=ZIP_ERRNO;
+
+ if (err==ZIP_OK)
+ err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this);
+
+ size_central_dir_to_read-=read_this;
+ }
+ TRYFREE(buf_read);
+ }
+ pziinit->begin_pos = byte_before_the_zipfile;
+ pziinit->number_entry = number_entry_CD;
+
+ if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0)
+ err=ZIP_ERRNO;
+
+ return err;
+}
+
+
+#endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+
+/************************************************************/
+extern zipFile ZEXPORT zipOpen3 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def)
+{
+ zip64_internal ziinit;
+ zip64_internal* zi;
+ int err=ZIP_OK;
+
+ ziinit.z_filefunc.zseek32_file = NULL;
+ ziinit.z_filefunc.ztell32_file = NULL;
+ if (pzlib_filefunc64_32_def==NULL)
+ fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64);
+ else
+ ziinit.z_filefunc = *pzlib_filefunc64_32_def;
+
+ ziinit.filestream = ZOPEN64(ziinit.z_filefunc,
+ pathname,
+ (append == APPEND_STATUS_CREATE) ?
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) :
+ (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING));
+
+ if (ziinit.filestream == NULL)
+ return NULL;
+
+ if (append == APPEND_STATUS_CREATEAFTER)
+ ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END);
+
+ ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream);
+ ziinit.in_opened_file_inzip = 0;
+ ziinit.ci.stream_initialised = 0;
+ ziinit.number_entry = 0;
+ ziinit.add_position_when_writting_offset = 0;
+ init_linkedlist(&(ziinit.central_dir));
+
+
+
+ zi = (zip64_internal*)ALLOC(sizeof(zip64_internal));
+ if (zi==NULL)
+ {
+ ZCLOSE64(ziinit.z_filefunc,ziinit.filestream);
+ return NULL;
+ }
+
+ /* now we add file in a zipfile */
+# ifndef NO_ADDFILEINEXISTINGZIP
+ ziinit.globalcomment = NULL;
+ if (append == APPEND_STATUS_ADDINZIP)
+ {
+ // Read and Cache Central Directory Records
+ err = LoadCentralDirectoryRecord(&ziinit);
+ }
+
+ if (globalcomment)
+ {
+ *globalcomment = ziinit.globalcomment;
+ }
+# endif /* !NO_ADDFILEINEXISTINGZIP*/
+
+ if (err != ZIP_OK)
+ {
+# ifndef NO_ADDFILEINEXISTINGZIP
+ TRYFREE(ziinit.globalcomment);
+# endif /* !NO_ADDFILEINEXISTINGZIP*/
+ TRYFREE(zi);
+ return NULL;
+ }
+ else
+ {
+ *zi = ziinit;
+ return (zipFile)zi;
+ }
+}
+
+extern zipFile ZEXPORT zipOpen2 (const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def)
+{
+ if (pzlib_filefunc32_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def);
+ return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+ }
+ else
+ return zipOpen3(pathname, append, globalcomment, NULL);
+}
+
+extern zipFile ZEXPORT zipOpen2_64 (const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def)
+{
+ if (pzlib_filefunc_def != NULL)
+ {
+ zlib_filefunc64_32_def zlib_filefunc64_32_def_fill;
+ zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def;
+ zlib_filefunc64_32_def_fill.ztell32_file = NULL;
+ zlib_filefunc64_32_def_fill.zseek32_file = NULL;
+ return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill);
+ }
+ else
+ return zipOpen3(pathname, append, globalcomment, NULL);
+}
+
+
+
+extern zipFile ZEXPORT zipOpen (const char* pathname, int append)
+{
+ return zipOpen3((const void*)pathname,append,NULL,NULL);
+}
+
+extern zipFile ZEXPORT zipOpen64 (const void* pathname, int append)
+{
+ return zipOpen3(pathname,append,NULL,NULL);
+}
+
+int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local)
+{
+ /* write the local header */
+ int err;
+ uInt size_filename = (uInt)strlen(filename);
+ uInt size_extrafield = size_extrafield_local;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4);
+
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2);
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2);
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4);
+
+ // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */
+ }
+ if (err==ZIP_OK)
+ {
+ if(zi->ci.zip64)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2);
+
+ if(zi->ci.zip64)
+ {
+ size_extrafield += 20;
+ }
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2);
+
+ if ((err==ZIP_OK) && (size_filename > 0))
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename)
+ err = ZIP_ERRNO;
+ }
+
+ if ((err==ZIP_OK) && (size_extrafield_local > 0))
+ {
+ if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local)
+ err = ZIP_ERRNO;
+ }
+
+
+ if ((err==ZIP_OK) && (zi->ci.zip64))
+ {
+ // write the Zip64 extended info
+ short HeaderID = 1;
+ short DataSize = 16;
+ ZPOS64_T CompressedSize = 0;
+ ZPOS64_T UncompressedSize = 0;
+
+ // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file)
+ zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)HeaderID,2);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (short)DataSize,2);
+
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8);
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8);
+ }
+
+ return err;
+}
+
+/*
+ NOTE.
+ When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped
+ before calling this function it can be done with zipRemoveExtraInfoBlock
+
+ It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize
+ unnecessary allocations.
+ */
+extern int ZEXPORT zipOpenNewFileInZip4_64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting,
+ uLong versionMadeBy, uLong flagBase, int zip64)
+{
+ zip64_internal* zi;
+ uInt size_filename;
+ uInt size_comment;
+ uInt i;
+ int err = ZIP_OK;
+
+# ifdef NOCRYPT
+ (crcForCrypting);
+ if (password != NULL)
+ return ZIP_PARAMERROR;
+# endif
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+
+#ifdef HAVE_BZIP2
+ if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED))
+ return ZIP_PARAMERROR;
+#else
+ if ((method!=0) && (method!=Z_DEFLATED))
+ return ZIP_PARAMERROR;
+#endif
+
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 1)
+ {
+ err = zipCloseFileInZip (file);
+ if (err != ZIP_OK)
+ return err;
+ }
+
+ if (filename==NULL)
+ filename="-";
+
+ if (comment==NULL)
+ size_comment = 0;
+ else
+ size_comment = (uInt)strlen(comment);
+
+ size_filename = (uInt)strlen(filename);
+
+ if (zipfi == NULL)
+ zi->ci.dosDate = 0;
+ else
+ {
+ if (zipfi->dosDate != 0)
+ zi->ci.dosDate = zipfi->dosDate;
+ else
+ zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date);
+ }
+
+ zi->ci.flag = flagBase;
+ if ((level==8) || (level==9))
+ zi->ci.flag |= 2;
+ if (level==2)
+ zi->ci.flag |= 4;
+ if (level==1)
+ zi->ci.flag |= 6;
+ if (password != NULL)
+ zi->ci.flag |= 1;
+
+ zi->ci.crc32 = 0;
+ zi->ci.method = method;
+ zi->ci.encrypt = 0;
+ zi->ci.stream_initialised = 0;
+ zi->ci.pos_in_buffered_data = 0;
+ zi->ci.raw = raw;
+ zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment;
+ zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data
+
+ zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree);
+
+ zi->ci.size_centralExtra = size_extrafield_global;
+ zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4);
+ /* version info */
+ zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4);
+ zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/
+ zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/
+ zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/
+ zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2);
+ zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/
+
+ if (zipfi==NULL)
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2);
+
+ if (zipfi==NULL)
+ zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4);
+
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4);
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writting_offset,4);
+
+ for (i=0;i<size_filename;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+i) = *(filename+i);
+
+ for (i=0;i<size_extrafield_global;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+i) =
+ *(((const char*)extrafield_global)+i);
+
+ for (i=0;i<size_comment;i++)
+ *(zi->ci.central_header+SIZECENTRALHEADER+size_filename+
+ size_extrafield_global+i) = *(comment+i);
+ if (zi->ci.central_header == NULL)
+ return ZIP_INTERNALERROR;
+
+ zi->ci.zip64 = zip64;
+ zi->ci.totalCompressedData = 0;
+ zi->ci.totalUncompressedData = 0;
+ zi->ci.pos_zip64extrainfo = 0;
+
+ err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local);
+
+#ifdef HAVE_BZIP2
+ zi->ci.bstream.avail_in = (uInt)0;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ zi->ci.bstream.total_in_hi32 = 0;
+ zi->ci.bstream.total_in_lo32 = 0;
+ zi->ci.bstream.total_out_hi32 = 0;
+ zi->ci.bstream.total_out_lo32 = 0;
+#endif
+
+ zi->ci.stream.avail_in = (uInt)0;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ zi->ci.stream.total_in = 0;
+ zi->ci.stream.total_out = 0;
+ zi->ci.stream.data_type = Z_BINARY;
+
+#ifdef HAVE_BZIP2
+ if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+#else
+ if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+#endif
+ {
+ if(zi->ci.method == Z_DEFLATED)
+ {
+ zi->ci.stream.zalloc = (alloc_func)0;
+ zi->ci.stream.zfree = (free_func)0;
+ zi->ci.stream.opaque = (voidpf)0;
+
+ if (windowBits>0)
+ windowBits = -windowBits;
+
+ err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy);
+
+ if (err==Z_OK)
+ zi->ci.stream_initialised = Z_DEFLATED;
+ }
+ else if(zi->ci.method == Z_BZIP2ED)
+ {
+#ifdef HAVE_BZIP2
+ // Init BZip stuff here
+ zi->ci.bstream.bzalloc = 0;
+ zi->ci.bstream.bzfree = 0;
+ zi->ci.bstream.opaque = (voidpf)0;
+
+ err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35);
+ if(err == BZ_OK)
+ zi->ci.stream_initialised = Z_BZIP2ED;
+#endif
+ }
+
+ }
+
+# ifndef NOCRYPT
+ zi->ci.crypt_header_size = 0;
+ if ((err==Z_OK) && (password != NULL))
+ {
+ unsigned char bufHead[RAND_HEAD_LEN];
+ unsigned int sizeHead;
+ zi->ci.encrypt = 1;
+ zi->ci.pcrc_32_tab = get_crc_table();
+ /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/
+
+ sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting);
+ zi->ci.crypt_header_size = sizeHead;
+
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead)
+ err = ZIP_ERRNO;
+ }
+# endif
+
+ if (err==Z_OK)
+ zi->in_opened_file_inzip = 1;
+ return err;
+}
+
+extern int ZEXPORT zipOpenNewFileInZip4 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting,
+ uLong versionMadeBy, uLong flagBase)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, versionMadeBy, flagBase, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw,
+ int windowBits,int memLevel, int strategy,
+ const char* password, uLong crcForCrypting, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ windowBits, memLevel, strategy,
+ password, crcForCrypting, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void* extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int raw, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, raw,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip64 (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void*extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level, int zip64)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, 0,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, zip64);
+}
+
+extern int ZEXPORT zipOpenNewFileInZip (zipFile file, const char* filename, const zip_fileinfo* zipfi,
+ const void* extrafield_local, uInt size_extrafield_local,
+ const void*extrafield_global, uInt size_extrafield_global,
+ const char* comment, int method, int level)
+{
+ return zipOpenNewFileInZip4_64 (file, filename, zipfi,
+ extrafield_local, size_extrafield_local,
+ extrafield_global, size_extrafield_global,
+ comment, method, level, 0,
+ -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY,
+ NULL, 0, VERSIONMADEBY, 0, 0);
+}
+
+local int zip64FlushWriteBuffer(zip64_internal* zi)
+{
+ int err=ZIP_OK;
+
+ if (zi->ci.encrypt != 0)
+ {
+#ifndef NOCRYPT
+ uInt i;
+ int t;
+ for (i=0;i<zi->ci.pos_in_buffered_data;i++)
+ zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t);
+#endif
+ }
+
+ if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data)
+ err = ZIP_ERRNO;
+
+ zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data;
+
+#ifdef HAVE_BZIP2
+ if(zi->ci.method == Z_BZIP2ED)
+ {
+ zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32;
+ zi->ci.bstream.total_in_lo32 = 0;
+ zi->ci.bstream.total_in_hi32 = 0;
+ }
+ else
+#endif
+ {
+ zi->ci.totalUncompressedData += zi->ci.stream.total_in;
+ zi->ci.stream.total_in = 0;
+ }
+
+
+ zi->ci.pos_in_buffered_data = 0;
+
+ return err;
+}
+
+extern int ZEXPORT zipWriteInFileInZip (zipFile file,const void* buf,unsigned int len)
+{
+ zip64_internal* zi;
+ int err=ZIP_OK;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 0)
+ return ZIP_PARAMERROR;
+
+ zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len);
+
+#ifdef HAVE_BZIP2
+ if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw))
+ {
+ zi->ci.bstream.next_in = (void*)buf;
+ zi->ci.bstream.avail_in = len;
+ err = BZ_RUN_OK;
+
+ while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0))
+ {
+ if (zi->ci.bstream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ }
+
+
+ if(err != BZ_RUN_OK)
+ break;
+
+ if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+ uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32;
+// uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32;
+ err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN);
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ;
+ }
+ }
+
+ if(err == BZ_RUN_OK)
+ err = ZIP_OK;
+ }
+ else
+#endif
+ {
+ zi->ci.stream.next_in = (Bytef*)buf;
+ zi->ci.stream.avail_in = len;
+
+ while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0))
+ {
+ if (zi->ci.stream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ }
+
+
+ if(err != ZIP_OK)
+ break;
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ uLong uTotalOutBefore = zi->ci.stream.total_out;
+ err=deflate(&zi->ci.stream, Z_NO_FLUSH);
+ if(uTotalOutBefore > zi->ci.stream.total_out)
+ {
+ int bBreak = 0;
+ bBreak++;
+ }
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+ }
+ else
+ {
+ uInt copy_this,i;
+ if (zi->ci.stream.avail_in < zi->ci.stream.avail_out)
+ copy_this = zi->ci.stream.avail_in;
+ else
+ copy_this = zi->ci.stream.avail_out;
+
+ for (i = 0; i < copy_this; i++)
+ *(((char*)zi->ci.stream.next_out)+i) =
+ *(((const char*)zi->ci.stream.next_in)+i);
+ {
+ zi->ci.stream.avail_in -= copy_this;
+ zi->ci.stream.avail_out-= copy_this;
+ zi->ci.stream.next_in+= copy_this;
+ zi->ci.stream.next_out+= copy_this;
+ zi->ci.stream.total_in+= copy_this;
+ zi->ci.stream.total_out+= copy_this;
+ zi->ci.pos_in_buffered_data += copy_this;
+ }
+ }
+ }// while(...)
+ }
+
+ return err;
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw (zipFile file, uLong uncompressed_size, uLong crc32)
+{
+ return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32);
+}
+
+extern int ZEXPORT zipCloseFileInZipRaw64 (zipFile file, ZPOS64_T uncompressed_size, uLong crc32)
+{
+ zip64_internal* zi;
+ ZPOS64_T compressed_size;
+ uLong invalidValue = 0xffffffff;
+ short datasize = 0;
+ int err=ZIP_OK;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 0)
+ return ZIP_PARAMERROR;
+ zi->ci.stream.avail_in = 0;
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ while (err==ZIP_OK)
+ {
+ uLong uTotalOutBefore;
+ if (zi->ci.stream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.stream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.stream.next_out = zi->ci.buffered_data;
+ }
+ uTotalOutBefore = zi->ci.stream.total_out;
+ err=deflate(&zi->ci.stream, Z_FINISH);
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ;
+ }
+ }
+ else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+#ifdef HAVE_BZIP2
+ err = BZ_FINISH_OK;
+ while (err==BZ_FINISH_OK)
+ {
+ uLong uTotalOutBefore;
+ if (zi->ci.bstream.avail_out == 0)
+ {
+ if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE;
+ zi->ci.bstream.next_out = (char*)zi->ci.buffered_data;
+ }
+ uTotalOutBefore = zi->ci.bstream.total_out_lo32;
+ err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH);
+ if(err == BZ_STREAM_END)
+ err = Z_STREAM_END;
+
+ zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore);
+ }
+
+ if(err == BZ_FINISH_OK)
+ err = ZIP_OK;
+#endif
+ }
+
+ if (err==Z_STREAM_END)
+ err=ZIP_OK; /* this is normal */
+
+ if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK))
+ {
+ if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO)
+ err = ZIP_ERRNO;
+ }
+
+ if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw))
+ {
+ int tmp_err = deflateEnd(&zi->ci.stream);
+ if (err == ZIP_OK)
+ err = tmp_err;
+ zi->ci.stream_initialised = 0;
+ }
+#ifdef HAVE_BZIP2
+ else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw))
+ {
+ int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream);
+ if (err==ZIP_OK)
+ err = tmperr;
+ zi->ci.stream_initialised = 0;
+ }
+#endif
+
+ if (!zi->ci.raw)
+ {
+ crc32 = (uLong)zi->ci.crc32;
+ uncompressed_size = zi->ci.totalUncompressedData;
+ }
+ compressed_size = zi->ci.totalCompressedData;
+
+# ifndef NOCRYPT
+ compressed_size += zi->ci.crypt_header_size;
+# endif
+
+ // update Current Item crc and sizes,
+ if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff)
+ {
+ /*version Made by*/
+ zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2);
+ /*version needed*/
+ zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2);
+
+ }
+
+ zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/
+
+
+ if(compressed_size >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/
+
+ /// set internal file attributes field
+ if (zi->ci.stream.data_type == Z_ASCII)
+ zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2);
+
+ if(uncompressed_size >= 0xffffffff)
+ zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/
+ else
+ zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/
+
+ // Add ZIP64 extra info field for uncompressed size
+ if(uncompressed_size >= 0xffffffff)
+ datasize += 8;
+
+ // Add ZIP64 extra info field for compressed size
+ if(compressed_size >= 0xffffffff)
+ datasize += 8;
+
+ // Add ZIP64 extra info field for relative offset to local file header of current file
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ datasize += 8;
+
+ if(datasize > 0)
+ {
+ char* p = NULL;
+
+ if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree)
+ {
+ // we can not write more data to the buffer that we have room for.
+ return ZIP_BADZIPFILE;
+ }
+
+ p = zi->ci.central_header + zi->ci.size_centralheader;
+
+ // Add Extra Information Header for 'ZIP64 information'
+ zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID
+ p += 2;
+ zip64local_putValue_inmemory(p, datasize, 2); // DataSize
+ p += 2;
+
+ if(uncompressed_size >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, uncompressed_size, 8);
+ p += 8;
+ }
+
+ if(compressed_size >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, compressed_size, 8);
+ p += 8;
+ }
+
+ if(zi->ci.pos_local_header >= 0xffffffff)
+ {
+ zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8);
+ p += 8;
+ }
+
+ // Update how much extra free space we got in the memory buffer
+ // and increase the centralheader size so the new ZIP64 fields are included
+ // ( 4 below is the size of HeaderID and DataSize field )
+ zi->ci.size_centralExtraFree -= datasize + 4;
+ zi->ci.size_centralheader += datasize + 4;
+
+ // Update the extra info size field
+ zi->ci.size_centralExtra += datasize + 4;
+ zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2);
+ }
+
+ if (err==ZIP_OK)
+ err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader);
+
+ free(zi->ci.central_header);
+
+ if (err==ZIP_OK)
+ {
+ // Update the LocalFileHeader with the new values.
+
+ ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+
+ if (err==ZIP_OK)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */
+
+ if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff )
+ {
+ if(zi->ci.pos_zip64extrainfo > 0)
+ {
+ // Update the size in the ZIP64 extended field.
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+
+ if (err==ZIP_OK) /* compressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8);
+
+ if (err==ZIP_OK) /* uncompressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8);
+ }
+ else
+ err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal
+ }
+ else
+ {
+ if (err==ZIP_OK) /* compressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4);
+
+ if (err==ZIP_OK) /* uncompressed size, unknown */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4);
+ }
+
+ if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0)
+ err = ZIP_ERRNO;
+ }
+
+ zi->number_entry ++;
+ zi->in_opened_file_inzip = 0;
+
+ return err;
+}
+
+extern int ZEXPORT zipCloseFileInZip (zipFile file)
+{
+ return zipCloseFileInZipRaw (file,0,0);
+}
+
+int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip)
+{
+ int err = ZIP_OK;
+ ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writting_offset;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4);
+
+ /*num disks*/
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ /*relative offset*/
+ if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8);
+
+ /*total disks*/ /* Do not support spawning of disk so always say 1 here*/
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4);
+
+ return err;
+}
+
+int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+ int err = ZIP_OK;
+
+ uLong Zip64DataSize = 44;
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4);
+
+ if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ?
+
+ if (err==ZIP_OK) /* version made by */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ if (err==ZIP_OK) /* version needed */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);
+
+ if (err==ZIP_OK) /* number of this disk */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir */
+ err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8);
+
+ if (err==ZIP_OK) /* size of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8);
+
+ if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+ {
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8);
+ }
+ return err;
+}
+int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip)
+{
+ int err = ZIP_OK;
+
+ /*signature*/
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4);
+
+ if (err==ZIP_OK) /* number of this disk */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ if (err==ZIP_OK) /* number of the disk with the start of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2);
+
+ if (err==ZIP_OK) /* total number of entries in the central dir on this disk */
+ {
+ {
+ if(zi->number_entry >= 0xFFFF)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+ }
+ }
+
+ if (err==ZIP_OK) /* total number of entries in the central dir */
+ {
+ if(zi->number_entry >= 0xFFFF)
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2);
+ }
+
+ if (err==ZIP_OK) /* size of the central directory */
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4);
+
+ if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */
+ {
+ ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+ if(pos >= 0xffffffff)
+ {
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4);
+ }
+ else
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writting_offset),4);
+ }
+
+ return err;
+}
+
+int Write_GlobalComment(zip64_internal* zi, const char* global_comment)
+{
+ int err = ZIP_OK;
+ uInt size_global_comment = 0;
+
+ if(global_comment != NULL)
+ size_global_comment = (uInt)strlen(global_comment);
+
+ err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2);
+
+ if (err == ZIP_OK && size_global_comment > 0)
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment)
+ err = ZIP_ERRNO;
+ }
+ return err;
+}
+
+extern int ZEXPORT zipClose (zipFile file, const char* global_comment)
+{
+ zip64_internal* zi;
+ int err = 0;
+ uLong size_centraldir = 0;
+ ZPOS64_T centraldir_pos_inzip;
+ ZPOS64_T pos;
+
+ if (file == NULL)
+ return ZIP_PARAMERROR;
+
+ zi = (zip64_internal*)file;
+
+ if (zi->in_opened_file_inzip == 1)
+ {
+ err = zipCloseFileInZip (file);
+ }
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ if (global_comment==NULL)
+ global_comment = zi->globalcomment;
+#endif
+
+ centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream);
+
+ if (err==ZIP_OK)
+ {
+ linkedlist_datablock_internal* ldi = zi->central_dir.first_block;
+ while (ldi!=NULL)
+ {
+ if ((err==ZIP_OK) && (ldi->filled_in_this_block>0))
+ {
+ if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block)
+ err = ZIP_ERRNO;
+ }
+
+ size_centraldir += ldi->filled_in_this_block;
+ ldi = ldi->next_datablock;
+ }
+ }
+ free_linkedlist(&(zi->central_dir));
+
+ pos = centraldir_pos_inzip - zi->add_position_when_writting_offset;
+ if(pos >= 0xffffffff || zi->number_entry > 0xFFFF)
+ {
+ ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream);
+ Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos);
+ }
+
+ if (err==ZIP_OK)
+ err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip);
+
+ if(err == ZIP_OK)
+ err = Write_GlobalComment(zi, global_comment);
+
+ if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0)
+ if (err == ZIP_OK)
+ err = ZIP_ERRNO;
+
+#ifndef NO_ADDFILEINEXISTINGZIP
+ TRYFREE(zi->globalcomment);
+#endif
+ TRYFREE(zi);
+
+ return err;
+}
+
+extern int ZEXPORT zipRemoveExtraInfoBlock (char* pData, int* dataLen, short sHeader)
+{
+ char* p = pData;
+ int size = 0;
+ char* pNewHeader;
+ char* pTmp;
+ short header;
+ short dataSize;
+
+ int retVal = ZIP_OK;
+
+ if(pData == NULL || *dataLen < 4)
+ return ZIP_PARAMERROR;
+
+ pNewHeader = (char*)ALLOC(*dataLen);
+ pTmp = pNewHeader;
+
+ while(p < (pData + *dataLen))
+ {
+ header = *(short*)p;
+ dataSize = *(((short*)p)+1);
+
+ if( header == sHeader ) // Header found.
+ {
+ p += dataSize + 4; // skip it. do not copy to temp buffer
+ }
+ else
+ {
+ // Extra Info block should not be removed, So copy it to the temp buffer.
+ memcpy(pTmp, p, dataSize + 4);
+ p += dataSize + 4;
+ size += dataSize + 4;
+ }
+
+ }
+
+ if(size < *dataLen)
+ {
+ // clean old extra info block.
+ memset(pData,0, *dataLen);
+
+ // copy the new extra info block over the old
+ if(size > 0)
+ memcpy(pData, pNewHeader, size);
+
+ // set the new extra info size
+ *dataLen = size;
+
+ retVal = ZIP_OK;
+ }
+ else
+ retVal = ZIP_ERRNO;
+
+ TRYFREE(pNewHeader);
+
+ return retVal;
+}
diff --git a/compat/zlib/contrib/minizip/zip.h b/compat/zlib/contrib/minizip/zip.h
new file mode 100644
index 0000000..8aaebb6
--- /dev/null
+++ b/compat/zlib/contrib/minizip/zip.h
@@ -0,0 +1,362 @@
+/* zip.h -- IO on .zip files using zlib
+ Version 1.1, February 14h, 2010
+ part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html )
+
+ Modifications for Zip64 support
+ Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com )
+
+ For more info read MiniZip_info.txt
+
+ ---------------------------------------------------------------------------
+
+ Condition of use and distribution are the same than zlib :
+
+ 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.
+
+ ---------------------------------------------------------------------------
+
+ Changes
+
+ See header of zip.h
+
+*/
+
+#ifndef _zip12_H
+#define _zip12_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//#define HAVE_BZIP2
+
+#ifndef _ZLIB_H
+#include "zlib.h"
+#endif
+
+#ifndef _ZLIBIOAPI_H
+#include "ioapi.h"
+#endif
+
+#ifdef HAVE_BZIP2
+#include "bzlib.h"
+#endif
+
+#define Z_BZIP2ED 12
+
+#if defined(STRICTZIP) || defined(STRICTZIPUNZIP)
+/* like the STRICT of WIN32, we define a pointer that cannot be converted
+ from (void*) without cast */
+typedef struct TagzipFile__ { int unused; } zipFile__;
+typedef zipFile__ *zipFile;
+#else
+typedef voidp zipFile;
+#endif
+
+#define ZIP_OK (0)
+#define ZIP_EOF (0)
+#define ZIP_ERRNO (Z_ERRNO)
+#define ZIP_PARAMERROR (-102)
+#define ZIP_BADZIPFILE (-103)
+#define ZIP_INTERNALERROR (-104)
+
+#ifndef DEF_MEM_LEVEL
+# if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+# else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+# endif
+#endif
+/* default memLevel */
+
+/* tm_zip contain date/time info */
+typedef struct tm_zip_s
+{
+ uInt tm_sec; /* seconds after the minute - [0,59] */
+ uInt tm_min; /* minutes after the hour - [0,59] */
+ uInt tm_hour; /* hours since midnight - [0,23] */
+ uInt tm_mday; /* day of the month - [1,31] */
+ uInt tm_mon; /* months since January - [0,11] */
+ uInt tm_year; /* years - [1980..2044] */
+} tm_zip;
+
+typedef struct
+{
+ tm_zip tmz_date; /* date in understandable format */
+ uLong dosDate; /* if dos_date == 0, tmu_date is used */
+/* uLong flag; */ /* general purpose bit flag 2 bytes */
+
+ uLong internal_fa; /* internal file attributes 2 bytes */
+ uLong external_fa; /* external file attributes 4 bytes */
+} zip_fileinfo;
+
+typedef const char* zipcharpc;
+
+
+#define APPEND_STATUS_CREATE (0)
+#define APPEND_STATUS_CREATEAFTER (1)
+#define APPEND_STATUS_ADDINZIP (2)
+
+extern zipFile ZEXPORT zipOpen OF((const char *pathname, int append));
+extern zipFile ZEXPORT zipOpen64 OF((const void *pathname, int append));
+/*
+ Create a zipfile.
+ pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on
+ an Unix computer "zlib/zlib113.zip".
+ if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip
+ will be created at the end of the file.
+ (useful if the file contain a self extractor code)
+ if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will
+ add files in existing zip (be sure you don't add file that doesn't exist)
+ If the zipfile cannot be opened, the return value is NULL.
+ Else, the return value is a zipFile Handle, usable with other function
+ of this zip package.
+*/
+
+/* Note : there is no delete function into a zipfile.
+ If you want delete file into a zipfile, you must open a zipfile, and create another
+ Of couse, you can use RAW reading and writing to copy the file you did not want delte
+*/
+
+extern zipFile ZEXPORT zipOpen2 OF((const char *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc_def* pzlib_filefunc_def));
+
+extern zipFile ZEXPORT zipOpen2_64 OF((const void *pathname,
+ int append,
+ zipcharpc* globalcomment,
+ zlib_filefunc64_def* pzlib_filefunc_def));
+
+extern int ZEXPORT zipOpenNewFileInZip OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level));
+
+extern int ZEXPORT zipOpenNewFileInZip64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int zip64));
+
+/*
+ Open a file in the ZIP for writing.
+ filename : the filename in zip (if NULL, '-' without quote will be used
+ *zipfi contain supplemental information
+ if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local
+ contains the extrafield data the the local header
+ if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global
+ contains the extrafield data the the local header
+ if comment != NULL, comment contain the comment string
+ method contain the compression method (0 for store, Z_DEFLATED for deflate)
+ level contain the level of compression (can be Z_DEFAULT_COMPRESSION)
+ zip64 is set to 1 if a zip64 extended information block should be added to the local file header.
+ this MUST be '1' if the uncompressed size is >= 0xffffffff.
+
+*/
+
+
+extern int ZEXPORT zipOpenNewFileInZip2 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw));
+
+
+extern int ZEXPORT zipOpenNewFileInZip2_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int zip64));
+/*
+ Same than zipOpenNewFileInZip, except if raw=1, we write raw file
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip3 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting));
+
+extern int ZEXPORT zipOpenNewFileInZip3_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ int zip64
+ ));
+
+/*
+ Same than zipOpenNewFileInZip2, except
+ windowBits,memLevel,,strategy : see parameter strategy in deflateInit2
+ password : crypting password (NULL for no crypting)
+ crcForCrypting : crc of file to compress (needed for crypting)
+ */
+
+extern int ZEXPORT zipOpenNewFileInZip4 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ uLong versionMadeBy,
+ uLong flagBase
+ ));
+
+
+extern int ZEXPORT zipOpenNewFileInZip4_64 OF((zipFile file,
+ const char* filename,
+ const zip_fileinfo* zipfi,
+ const void* extrafield_local,
+ uInt size_extrafield_local,
+ const void* extrafield_global,
+ uInt size_extrafield_global,
+ const char* comment,
+ int method,
+ int level,
+ int raw,
+ int windowBits,
+ int memLevel,
+ int strategy,
+ const char* password,
+ uLong crcForCrypting,
+ uLong versionMadeBy,
+ uLong flagBase,
+ int zip64
+ ));
+/*
+ Same than zipOpenNewFileInZip4, except
+ versionMadeBy : value for Version made by field
+ flag : value for flag field (compression level info will be added)
+ */
+
+
+extern int ZEXPORT zipWriteInFileInZip OF((zipFile file,
+ const void* buf,
+ unsigned len));
+/*
+ Write data in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZip OF((zipFile file));
+/*
+ Close the current file in the zipfile
+*/
+
+extern int ZEXPORT zipCloseFileInZipRaw OF((zipFile file,
+ uLong uncompressed_size,
+ uLong crc32));
+
+extern int ZEXPORT zipCloseFileInZipRaw64 OF((zipFile file,
+ ZPOS64_T uncompressed_size,
+ uLong crc32));
+
+/*
+ Close the current file in the zipfile, for file opened with
+ parameter raw=1 in zipOpenNewFileInZip2
+ uncompressed_size and crc32 are value for the uncompressed size
+*/
+
+extern int ZEXPORT zipClose OF((zipFile file,
+ const char* global_comment));
+/*
+ Close the zipfile
+*/
+
+
+extern int ZEXPORT zipRemoveExtraInfoBlock OF((char* pData, int* dataLen, short sHeader));
+/*
+ zipRemoveExtraInfoBlock - Added by Mathias Svensson
+
+ Remove extra information block from a extra information data for the local file header or central directory header
+
+ It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode.
+
+ 0x0001 is the signature header for the ZIP64 extra information blocks
+
+ usage.
+ Remove ZIP64 Extra information from a central director extra field data
+ zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001);
+
+ Remove ZIP64 Extra information from a Local File Header extra field data
+ zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001);
+*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _zip64_H */
diff --git a/compat/zlib/contrib/pascal/example.pas b/compat/zlib/contrib/pascal/example.pas
new file mode 100644
index 0000000..5518b36
--- /dev/null
+++ b/compat/zlib/contrib/pascal/example.pas
@@ -0,0 +1,599 @@
+(* example.c -- usage example of the zlib compression library
+ * Copyright (C) 1995-2003 Jean-loup Gailly.
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Pascal translation
+ * Copyright (C) 1998 by Jacques Nomssi Nzali.
+ * For conditions of distribution and use, see copyright notice in readme.txt
+ *
+ * Adaptation to the zlibpas interface
+ * Copyright (C) 2003 by Cosmin Truta.
+ * For conditions of distribution and use, see copyright notice in readme.txt
+ *)
+
+program example;
+
+{$DEFINE TEST_COMPRESS}
+{DO NOT $DEFINE TEST_GZIO}
+{$DEFINE TEST_DEFLATE}
+{$DEFINE TEST_INFLATE}
+{$DEFINE TEST_FLUSH}
+{$DEFINE TEST_SYNC}
+{$DEFINE TEST_DICT}
+
+uses SysUtils, zlibpas;
+
+const TESTFILE = 'foo.gz';
+
+(* "hello world" would be more standard, but the repeated "hello"
+ * stresses the compression code better, sorry...
+ *)
+const hello: PChar = 'hello, hello!';
+
+const dictionary: PChar = 'hello';
+
+var dictId: LongInt; (* Adler32 value of the dictionary *)
+
+procedure CHECK_ERR(err: Integer; msg: String);
+begin
+ if err <> Z_OK then
+ begin
+ WriteLn(msg, ' error: ', err);
+ Halt(1);
+ end;
+end;
+
+procedure EXIT_ERR(const msg: String);
+begin
+ WriteLn('Error: ', msg);
+ Halt(1);
+end;
+
+(* ===========================================================================
+ * Test compress and uncompress
+ *)
+{$IFDEF TEST_COMPRESS}
+procedure test_compress(compr: Pointer; comprLen: LongInt;
+ uncompr: Pointer; uncomprLen: LongInt);
+var err: Integer;
+ len: LongInt;
+begin
+ len := StrLen(hello)+1;
+
+ err := compress(compr, comprLen, hello, len);
+ CHECK_ERR(err, 'compress');
+
+ StrCopy(PChar(uncompr), 'garbage');
+
+ err := uncompress(uncompr, uncomprLen, compr, comprLen);
+ CHECK_ERR(err, 'uncompress');
+
+ if StrComp(PChar(uncompr), hello) <> 0 then
+ EXIT_ERR('bad uncompress')
+ else
+ WriteLn('uncompress(): ', PChar(uncompr));
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test read/write of .gz files
+ *)
+{$IFDEF TEST_GZIO}
+procedure test_gzio(const fname: PChar; (* compressed file name *)
+ uncompr: Pointer;
+ uncomprLen: LongInt);
+var err: Integer;
+ len: Integer;
+ zfile: gzFile;
+ pos: LongInt;
+begin
+ len := StrLen(hello)+1;
+
+ zfile := gzopen(fname, 'wb');
+ if zfile = NIL then
+ begin
+ WriteLn('gzopen error');
+ Halt(1);
+ end;
+ gzputc(zfile, 'h');
+ if gzputs(zfile, 'ello') <> 4 then
+ begin
+ WriteLn('gzputs err: ', gzerror(zfile, err));
+ Halt(1);
+ end;
+ {$IFDEF GZ_FORMAT_STRING}
+ if gzprintf(zfile, ', %s!', 'hello') <> 8 then
+ begin
+ WriteLn('gzprintf err: ', gzerror(zfile, err));
+ Halt(1);
+ end;
+ {$ELSE}
+ if gzputs(zfile, ', hello!') <> 8 then
+ begin
+ WriteLn('gzputs err: ', gzerror(zfile, err));
+ Halt(1);
+ end;
+ {$ENDIF}
+ gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *)
+ gzclose(zfile);
+
+ zfile := gzopen(fname, 'rb');
+ if zfile = NIL then
+ begin
+ WriteLn('gzopen error');
+ Halt(1);
+ end;
+
+ StrCopy(PChar(uncompr), 'garbage');
+
+ if gzread(zfile, uncompr, uncomprLen) <> len then
+ begin
+ WriteLn('gzread err: ', gzerror(zfile, err));
+ Halt(1);
+ end;
+ if StrComp(PChar(uncompr), hello) <> 0 then
+ begin
+ WriteLn('bad gzread: ', PChar(uncompr));
+ Halt(1);
+ end
+ else
+ WriteLn('gzread(): ', PChar(uncompr));
+
+ pos := gzseek(zfile, -8, SEEK_CUR);
+ if (pos <> 6) or (gztell(zfile) <> pos) then
+ begin
+ WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile));
+ Halt(1);
+ end;
+
+ if gzgetc(zfile) <> ' ' then
+ begin
+ WriteLn('gzgetc error');
+ Halt(1);
+ end;
+
+ if gzungetc(' ', zfile) <> ' ' then
+ begin
+ WriteLn('gzungetc error');
+ Halt(1);
+ end;
+
+ gzgets(zfile, PChar(uncompr), uncomprLen);
+ uncomprLen := StrLen(PChar(uncompr));
+ if uncomprLen <> 7 then (* " hello!" *)
+ begin
+ WriteLn('gzgets err after gzseek: ', gzerror(zfile, err));
+ Halt(1);
+ end;
+ if StrComp(PChar(uncompr), hello + 6) <> 0 then
+ begin
+ WriteLn('bad gzgets after gzseek');
+ Halt(1);
+ end
+ else
+ WriteLn('gzgets() after gzseek: ', PChar(uncompr));
+
+ gzclose(zfile);
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test deflate with small buffers
+ *)
+{$IFDEF TEST_DEFLATE}
+procedure test_deflate(compr: Pointer; comprLen: LongInt);
+var c_stream: z_stream; (* compression stream *)
+ err: Integer;
+ len: LongInt;
+begin
+ len := StrLen(hello)+1;
+
+ c_stream.zalloc := NIL;
+ c_stream.zfree := NIL;
+ c_stream.opaque := NIL;
+
+ err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);
+ CHECK_ERR(err, 'deflateInit');
+
+ c_stream.next_in := hello;
+ c_stream.next_out := compr;
+
+ while (c_stream.total_in <> len) and
+ (c_stream.total_out < comprLen) do
+ begin
+ c_stream.avail_out := 1; { force small buffers }
+ c_stream.avail_in := 1;
+ err := deflate(c_stream, Z_NO_FLUSH);
+ CHECK_ERR(err, 'deflate');
+ end;
+
+ (* Finish the stream, still forcing small buffers: *)
+ while TRUE do
+ begin
+ c_stream.avail_out := 1;
+ err := deflate(c_stream, Z_FINISH);
+ if err = Z_STREAM_END then
+ break;
+ CHECK_ERR(err, 'deflate');
+ end;
+
+ err := deflateEnd(c_stream);
+ CHECK_ERR(err, 'deflateEnd');
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test inflate with small buffers
+ *)
+{$IFDEF TEST_INFLATE}
+procedure test_inflate(compr: Pointer; comprLen : LongInt;
+ uncompr: Pointer; uncomprLen : LongInt);
+var err: Integer;
+ d_stream: z_stream; (* decompression stream *)
+begin
+ StrCopy(PChar(uncompr), 'garbage');
+
+ d_stream.zalloc := NIL;
+ d_stream.zfree := NIL;
+ d_stream.opaque := NIL;
+
+ d_stream.next_in := compr;
+ d_stream.avail_in := 0;
+ d_stream.next_out := uncompr;
+
+ err := inflateInit(d_stream);
+ CHECK_ERR(err, 'inflateInit');
+
+ while (d_stream.total_out < uncomprLen) and
+ (d_stream.total_in < comprLen) do
+ begin
+ d_stream.avail_out := 1; (* force small buffers *)
+ d_stream.avail_in := 1;
+ err := inflate(d_stream, Z_NO_FLUSH);
+ if err = Z_STREAM_END then
+ break;
+ CHECK_ERR(err, 'inflate');
+ end;
+
+ err := inflateEnd(d_stream);
+ CHECK_ERR(err, 'inflateEnd');
+
+ if StrComp(PChar(uncompr), hello) <> 0 then
+ EXIT_ERR('bad inflate')
+ else
+ WriteLn('inflate(): ', PChar(uncompr));
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test deflate with large buffers and dynamic change of compression level
+ *)
+{$IFDEF TEST_DEFLATE}
+procedure test_large_deflate(compr: Pointer; comprLen: LongInt;
+ uncompr: Pointer; uncomprLen: LongInt);
+var c_stream: z_stream; (* compression stream *)
+ err: Integer;
+begin
+ c_stream.zalloc := NIL;
+ c_stream.zfree := NIL;
+ c_stream.opaque := NIL;
+
+ err := deflateInit(c_stream, Z_BEST_SPEED);
+ CHECK_ERR(err, 'deflateInit');
+
+ c_stream.next_out := compr;
+ c_stream.avail_out := Integer(comprLen);
+
+ (* At this point, uncompr is still mostly zeroes, so it should compress
+ * very well:
+ *)
+ c_stream.next_in := uncompr;
+ c_stream.avail_in := Integer(uncomprLen);
+ err := deflate(c_stream, Z_NO_FLUSH);
+ CHECK_ERR(err, 'deflate');
+ if c_stream.avail_in <> 0 then
+ EXIT_ERR('deflate not greedy');
+
+ (* Feed in already compressed data and switch to no compression: *)
+ deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY);
+ c_stream.next_in := compr;
+ c_stream.avail_in := Integer(comprLen div 2);
+ err := deflate(c_stream, Z_NO_FLUSH);
+ CHECK_ERR(err, 'deflate');
+
+ (* Switch back to compressing mode: *)
+ deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED);
+ c_stream.next_in := uncompr;
+ c_stream.avail_in := Integer(uncomprLen);
+ err := deflate(c_stream, Z_NO_FLUSH);
+ CHECK_ERR(err, 'deflate');
+
+ err := deflate(c_stream, Z_FINISH);
+ if err <> Z_STREAM_END then
+ EXIT_ERR('deflate should report Z_STREAM_END');
+
+ err := deflateEnd(c_stream);
+ CHECK_ERR(err, 'deflateEnd');
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test inflate with large buffers
+ *)
+{$IFDEF TEST_INFLATE}
+procedure test_large_inflate(compr: Pointer; comprLen: LongInt;
+ uncompr: Pointer; uncomprLen: LongInt);
+var err: Integer;
+ d_stream: z_stream; (* decompression stream *)
+begin
+ StrCopy(PChar(uncompr), 'garbage');
+
+ d_stream.zalloc := NIL;
+ d_stream.zfree := NIL;
+ d_stream.opaque := NIL;
+
+ d_stream.next_in := compr;
+ d_stream.avail_in := Integer(comprLen);
+
+ err := inflateInit(d_stream);
+ CHECK_ERR(err, 'inflateInit');
+
+ while TRUE do
+ begin
+ d_stream.next_out := uncompr; (* discard the output *)
+ d_stream.avail_out := Integer(uncomprLen);
+ err := inflate(d_stream, Z_NO_FLUSH);
+ if err = Z_STREAM_END then
+ break;
+ CHECK_ERR(err, 'large inflate');
+ end;
+
+ err := inflateEnd(d_stream);
+ CHECK_ERR(err, 'inflateEnd');
+
+ if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then
+ begin
+ WriteLn('bad large inflate: ', d_stream.total_out);
+ Halt(1);
+ end
+ else
+ WriteLn('large_inflate(): OK');
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test deflate with full flush
+ *)
+{$IFDEF TEST_FLUSH}
+procedure test_flush(compr: Pointer; var comprLen : LongInt);
+var c_stream: z_stream; (* compression stream *)
+ err: Integer;
+ len: Integer;
+begin
+ len := StrLen(hello)+1;
+
+ c_stream.zalloc := NIL;
+ c_stream.zfree := NIL;
+ c_stream.opaque := NIL;
+
+ err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION);
+ CHECK_ERR(err, 'deflateInit');
+
+ c_stream.next_in := hello;
+ c_stream.next_out := compr;
+ c_stream.avail_in := 3;
+ c_stream.avail_out := Integer(comprLen);
+ err := deflate(c_stream, Z_FULL_FLUSH);
+ CHECK_ERR(err, 'deflate');
+
+ Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *)
+ c_stream.avail_in := len - 3;
+
+ err := deflate(c_stream, Z_FINISH);
+ if err <> Z_STREAM_END then
+ CHECK_ERR(err, 'deflate');
+
+ err := deflateEnd(c_stream);
+ CHECK_ERR(err, 'deflateEnd');
+
+ comprLen := c_stream.total_out;
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test inflateSync()
+ *)
+{$IFDEF TEST_SYNC}
+procedure test_sync(compr: Pointer; comprLen: LongInt;
+ uncompr: Pointer; uncomprLen : LongInt);
+var err: Integer;
+ d_stream: z_stream; (* decompression stream *)
+begin
+ StrCopy(PChar(uncompr), 'garbage');
+
+ d_stream.zalloc := NIL;
+ d_stream.zfree := NIL;
+ d_stream.opaque := NIL;
+
+ d_stream.next_in := compr;
+ d_stream.avail_in := 2; (* just read the zlib header *)
+
+ err := inflateInit(d_stream);
+ CHECK_ERR(err, 'inflateInit');
+
+ d_stream.next_out := uncompr;
+ d_stream.avail_out := Integer(uncomprLen);
+
+ inflate(d_stream, Z_NO_FLUSH);
+ CHECK_ERR(err, 'inflate');
+
+ d_stream.avail_in := Integer(comprLen-2); (* read all compressed data *)
+ err := inflateSync(d_stream); (* but skip the damaged part *)
+ CHECK_ERR(err, 'inflateSync');
+
+ err := inflate(d_stream, Z_FINISH);
+ if err <> Z_DATA_ERROR then
+ EXIT_ERR('inflate should report DATA_ERROR');
+ (* Because of incorrect adler32 *)
+
+ err := inflateEnd(d_stream);
+ CHECK_ERR(err, 'inflateEnd');
+
+ WriteLn('after inflateSync(): hel', PChar(uncompr));
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test deflate with preset dictionary
+ *)
+{$IFDEF TEST_DICT}
+procedure test_dict_deflate(compr: Pointer; comprLen: LongInt);
+var c_stream: z_stream; (* compression stream *)
+ err: Integer;
+begin
+ c_stream.zalloc := NIL;
+ c_stream.zfree := NIL;
+ c_stream.opaque := NIL;
+
+ err := deflateInit(c_stream, Z_BEST_COMPRESSION);
+ CHECK_ERR(err, 'deflateInit');
+
+ err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary));
+ CHECK_ERR(err, 'deflateSetDictionary');
+
+ dictId := c_stream.adler;
+ c_stream.next_out := compr;
+ c_stream.avail_out := Integer(comprLen);
+
+ c_stream.next_in := hello;
+ c_stream.avail_in := StrLen(hello)+1;
+
+ err := deflate(c_stream, Z_FINISH);
+ if err <> Z_STREAM_END then
+ EXIT_ERR('deflate should report Z_STREAM_END');
+
+ err := deflateEnd(c_stream);
+ CHECK_ERR(err, 'deflateEnd');
+end;
+{$ENDIF}
+
+(* ===========================================================================
+ * Test inflate with a preset dictionary
+ *)
+{$IFDEF TEST_DICT}
+procedure test_dict_inflate(compr: Pointer; comprLen: LongInt;
+ uncompr: Pointer; uncomprLen: LongInt);
+var err: Integer;
+ d_stream: z_stream; (* decompression stream *)
+begin
+ StrCopy(PChar(uncompr), 'garbage');
+
+ d_stream.zalloc := NIL;
+ d_stream.zfree := NIL;
+ d_stream.opaque := NIL;
+
+ d_stream.next_in := compr;
+ d_stream.avail_in := Integer(comprLen);
+
+ err := inflateInit(d_stream);
+ CHECK_ERR(err, 'inflateInit');
+
+ d_stream.next_out := uncompr;
+ d_stream.avail_out := Integer(uncomprLen);
+
+ while TRUE do
+ begin
+ err := inflate(d_stream, Z_NO_FLUSH);
+ if err = Z_STREAM_END then
+ break;
+ if err = Z_NEED_DICT then
+ begin
+ if d_stream.adler <> dictId then
+ EXIT_ERR('unexpected dictionary');
+ err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary));
+ end;
+ CHECK_ERR(err, 'inflate with dict');
+ end;
+
+ err := inflateEnd(d_stream);
+ CHECK_ERR(err, 'inflateEnd');
+
+ if StrComp(PChar(uncompr), hello) <> 0 then
+ EXIT_ERR('bad inflate with dict')
+ else
+ WriteLn('inflate with dictionary: ', PChar(uncompr));
+end;
+{$ENDIF}
+
+var compr, uncompr: Pointer;
+ comprLen, uncomprLen: LongInt;
+
+begin
+ if zlibVersion^ <> ZLIB_VERSION[1] then
+ EXIT_ERR('Incompatible zlib version');
+
+ WriteLn('zlib version: ', zlibVersion);
+ WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags]));
+
+ comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *)
+ uncomprLen := comprLen;
+ GetMem(compr, comprLen);
+ GetMem(uncompr, uncomprLen);
+ if (compr = NIL) or (uncompr = NIL) then
+ EXIT_ERR('Out of memory');
+ (* compr and uncompr are cleared to avoid reading uninitialized
+ * data and to ensure that uncompr compresses well.
+ *)
+ FillChar(compr^, comprLen, 0);
+ FillChar(uncompr^, uncomprLen, 0);
+
+ {$IFDEF TEST_COMPRESS}
+ WriteLn('** Testing compress');
+ test_compress(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+
+ {$IFDEF TEST_GZIO}
+ WriteLn('** Testing gzio');
+ if ParamCount >= 1 then
+ test_gzio(ParamStr(1), uncompr, uncomprLen)
+ else
+ test_gzio(TESTFILE, uncompr, uncomprLen);
+ {$ENDIF}
+
+ {$IFDEF TEST_DEFLATE}
+ WriteLn('** Testing deflate with small buffers');
+ test_deflate(compr, comprLen);
+ {$ENDIF}
+ {$IFDEF TEST_INFLATE}
+ WriteLn('** Testing inflate with small buffers');
+ test_inflate(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+
+ {$IFDEF TEST_DEFLATE}
+ WriteLn('** Testing deflate with large buffers');
+ test_large_deflate(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+ {$IFDEF TEST_INFLATE}
+ WriteLn('** Testing inflate with large buffers');
+ test_large_inflate(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+
+ {$IFDEF TEST_FLUSH}
+ WriteLn('** Testing deflate with full flush');
+ test_flush(compr, comprLen);
+ {$ENDIF}
+ {$IFDEF TEST_SYNC}
+ WriteLn('** Testing inflateSync');
+ test_sync(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+ comprLen := uncomprLen;
+
+ {$IFDEF TEST_DICT}
+ WriteLn('** Testing deflate and inflate with preset dictionary');
+ test_dict_deflate(compr, comprLen);
+ test_dict_inflate(compr, comprLen, uncompr, uncomprLen);
+ {$ENDIF}
+
+ FreeMem(compr, comprLen);
+ FreeMem(uncompr, uncomprLen);
+end.
diff --git a/compat/zlib/contrib/pascal/readme.txt b/compat/zlib/contrib/pascal/readme.txt
new file mode 100644
index 0000000..60e87c8
--- /dev/null
+++ b/compat/zlib/contrib/pascal/readme.txt
@@ -0,0 +1,76 @@
+
+This directory contains a Pascal (Delphi, Kylix) interface to the
+zlib data compression library.
+
+
+Directory listing
+=================
+
+zlibd32.mak makefile for Borland C++
+example.pas usage example of zlib
+zlibpas.pas the Pascal interface to zlib
+readme.txt this file
+
+
+Compatibility notes
+===================
+
+- Although the name "zlib" would have been more normal for the
+ zlibpas unit, this name is already taken by Borland's ZLib unit.
+ This is somehow unfortunate, because that unit is not a genuine
+ interface to the full-fledged zlib functionality, but a suite of
+ class wrappers around zlib streams. Other essential features,
+ such as checksums, are missing.
+ It would have been more appropriate for that unit to have a name
+ like "ZStreams", or something similar.
+
+- The C and zlib-supplied types int, uInt, long, uLong, etc. are
+ translated directly into Pascal types of similar sizes (Integer,
+ LongInt, etc.), to avoid namespace pollution. In particular,
+ there is no conversion of unsigned int into a Pascal unsigned
+ integer. The Word type is non-portable and has the same size
+ (16 bits) both in a 16-bit and in a 32-bit environment, unlike
+ Integer. Even if there is a 32-bit Cardinal type, there is no
+ real need for unsigned int in zlib under a 32-bit environment.
+
+- Except for the callbacks, the zlib function interfaces are
+ assuming the calling convention normally used in Pascal
+ (__pascal for DOS and Windows16, __fastcall for Windows32).
+ Since the cdecl keyword is used, the old Turbo Pascal does
+ not work with this interface.
+
+- The gz* function interfaces are not translated, to avoid
+ interfacing problems with the C runtime library. Besides,
+ gzprintf(gzFile file, const char *format, ...)
+ cannot be translated into Pascal.
+
+
+Legal issues
+============
+
+The zlibpas interface is:
+ Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler.
+ Copyright (C) 1998 by Bob Dellaca.
+ Copyright (C) 2003 by Cosmin Truta.
+
+The example program is:
+ Copyright (C) 1995-2003 by Jean-loup Gailly.
+ Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali.
+ Copyright (C) 2003 by Cosmin Truta.
+
+ 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.
+
diff --git a/compat/zlib/contrib/pascal/zlibd32.mak b/compat/zlib/contrib/pascal/zlibd32.mak
new file mode 100644
index 0000000..9bb00b7
--- /dev/null
+++ b/compat/zlib/contrib/pascal/zlibd32.mak
@@ -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
+
diff --git a/compat/zlib/contrib/pascal/zlibpas.pas b/compat/zlib/contrib/pascal/zlibpas.pas
new file mode 100644
index 0000000..e6a0782
--- /dev/null
+++ b/compat/zlib/contrib/pascal/zlibpas.pas
@@ -0,0 +1,276 @@
+(* zlibpas -- Pascal interface to the zlib data compression library
+ *
+ * Copyright (C) 2003 Cosmin Truta.
+ * Derived from original sources by Bob Dellaca.
+ * For conditions of distribution and use, see copyright notice in readme.txt
+ *)
+
+unit zlibpas;
+
+interface
+
+const
+ ZLIB_VERSION = '1.2.8';
+ ZLIB_VERNUM = $1280;
+
+type
+ alloc_func = function(opaque: Pointer; items, size: Integer): Pointer;
+ cdecl;
+ free_func = procedure(opaque, address: Pointer);
+ cdecl;
+
+ in_func = function(opaque: Pointer; var buf: PByte): Integer;
+ cdecl;
+ out_func = function(opaque: Pointer; buf: PByte; size: Integer): Integer;
+ cdecl;
+
+ z_streamp = ^z_stream;
+ z_stream = 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 there *)
+ 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 *)
+ state: Pointer; (* not visible by applications *)
+
+ zalloc: alloc_func; (* used to allocate the internal state *)
+ zfree: free_func; (* used to free the internal state *)
+ opaque: 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;
+
+ gz_headerp = ^gz_header;
+ gz_header = packed record
+ text: Integer; (* true if compressed data believed to be text *)
+ time: LongInt; (* modification time *)
+ xflags: Integer; (* extra flags (not used when writing a gzip file) *)
+ os: Integer; (* operating system *)
+ extra: PChar; (* pointer to extra field or Z_NULL if none *)
+ extra_len: Integer; (* extra field length (valid if extra != Z_NULL) *)
+ extra_max: Integer; (* space at extra (only when reading header) *)
+ name: PChar; (* pointer to zero-terminated file name or Z_NULL *)
+ name_max: Integer; (* space at name (only when reading header) *)
+ comment: PChar; (* pointer to zero-terminated comment or Z_NULL *)
+ comm_max: Integer; (* space at comment (only when reading header) *)
+ hcrc: Integer; (* true if there was or will be a header crc *)
+ done: Integer; (* true when done reading gzip header *)
+ end;
+
+(* constants *)
+const
+ Z_NO_FLUSH = 0;
+ Z_PARTIAL_FLUSH = 1;
+ Z_SYNC_FLUSH = 2;
+ Z_FULL_FLUSH = 3;
+ Z_FINISH = 4;
+ Z_BLOCK = 5;
+ Z_TREES = 6;
+
+ 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_FIXED = 4;
+ Z_DEFAULT_STRATEGY = 0;
+
+ Z_BINARY = 0;
+ Z_TEXT = 1;
+ Z_ASCII = 1;
+ Z_UNKNOWN = 2;
+
+ Z_DEFLATED = 8;
+
+(* basic functions *)
+function zlibVersion: PChar;
+function deflateInit(var strm: z_stream; level: Integer): Integer;
+function deflate(var strm: z_stream; flush: Integer): Integer;
+function deflateEnd(var strm: z_stream): Integer;
+function inflateInit(var strm: z_stream): Integer;
+function inflate(var strm: z_stream; flush: Integer): Integer;
+function inflateEnd(var strm: z_stream): Integer;
+
+(* advanced functions *)
+function deflateInit2(var strm: z_stream; level, method, windowBits,
+ memLevel, strategy: Integer): Integer;
+function deflateSetDictionary(var strm: z_stream; const dictionary: PChar;
+ dictLength: Integer): Integer;
+function deflateCopy(var dest, source: z_stream): Integer;
+function deflateReset(var strm: z_stream): Integer;
+function deflateParams(var strm: z_stream; level, strategy: Integer): Integer;
+function deflateTune(var strm: z_stream; good_length, max_lazy, nice_length, max_chain: Integer): Integer;
+function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt;
+function deflatePending(var strm: z_stream; var pending: Integer; var bits: Integer): Integer;
+function deflatePrime(var strm: z_stream; bits, value: Integer): Integer;
+function deflateSetHeader(var strm: z_stream; head: gz_header): Integer;
+function inflateInit2(var strm: z_stream; windowBits: Integer): Integer;
+function inflateSetDictionary(var strm: z_stream; const dictionary: PChar;
+ dictLength: Integer): Integer;
+function inflateSync(var strm: z_stream): Integer;
+function inflateCopy(var dest, source: z_stream): Integer;
+function inflateReset(var strm: z_stream): Integer;
+function inflateReset2(var strm: z_stream; windowBits: Integer): Integer;
+function inflatePrime(var strm: z_stream; bits, value: Integer): Integer;
+function inflateMark(var strm: z_stream): LongInt;
+function inflateGetHeader(var strm: z_stream; var head: gz_header): Integer;
+function inflateBackInit(var strm: z_stream;
+ windowBits: Integer; window: PChar): Integer;
+function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer;
+ out_fn: out_func; out_desc: Pointer): Integer;
+function inflateBackEnd(var strm: z_stream): Integer;
+function zlibCompileFlags: LongInt;
+
+(* utility functions *)
+function compress(dest: PChar; var destLen: LongInt;
+ const source: PChar; sourceLen: LongInt): Integer;
+function compress2(dest: PChar; var destLen: LongInt;
+ const source: PChar; sourceLen: LongInt;
+ level: Integer): Integer;
+function compressBound(sourceLen: LongInt): LongInt;
+function uncompress(dest: PChar; var destLen: LongInt;
+ const source: PChar; sourceLen: LongInt): Integer;
+
+(* checksum functions *)
+function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt;
+function adler32_combine(adler1, adler2, len2: LongInt): LongInt;
+function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt;
+function crc32_combine(crc1, crc2, len2: LongInt): LongInt;
+
+(* various hacks, don't look :) *)
+function deflateInit_(var strm: z_stream; level: Integer;
+ const version: PChar; stream_size: Integer): Integer;
+function inflateInit_(var strm: z_stream; const version: PChar;
+ stream_size: Integer): Integer;
+function deflateInit2_(var strm: z_stream;
+ level, method, windowBits, memLevel, strategy: Integer;
+ const version: PChar; stream_size: Integer): Integer;
+function inflateInit2_(var strm: z_stream; windowBits: Integer;
+ const version: PChar; stream_size: Integer): Integer;
+function inflateBackInit_(var strm: z_stream;
+ windowBits: Integer; window: PChar;
+ const version: PChar; stream_size: Integer): Integer;
+
+
+implementation
+
+{$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}
+
+function adler32; external;
+function adler32_combine; external;
+function compress; external;
+function compress2; external;
+function compressBound; external;
+function crc32; external;
+function crc32_combine; external;
+function deflate; external;
+function deflateBound; external;
+function deflateCopy; external;
+function deflateEnd; external;
+function deflateInit_; external;
+function deflateInit2_; external;
+function deflateParams; external;
+function deflatePending; external;
+function deflatePrime; external;
+function deflateReset; external;
+function deflateSetDictionary; external;
+function deflateSetHeader; external;
+function deflateTune; external;
+function inflate; external;
+function inflateBack; external;
+function inflateBackEnd; external;
+function inflateBackInit_; external;
+function inflateCopy; external;
+function inflateEnd; external;
+function inflateGetHeader; external;
+function inflateInit_; external;
+function inflateInit2_; external;
+function inflateMark; external;
+function inflatePrime; external;
+function inflateReset; external;
+function inflateReset2; external;
+function inflateSetDictionary; external;
+function inflateSync; external;
+function uncompress; external;
+function zlibCompileFlags; external;
+function zlibVersion; external;
+
+function deflateInit(var strm: z_stream; level: Integer): Integer;
+begin
+ Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream));
+end;
+
+function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel,
+ strategy: Integer): Integer;
+begin
+ Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+ ZLIB_VERSION, sizeof(z_stream));
+end;
+
+function inflateInit(var strm: z_stream): Integer;
+begin
+ Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream));
+end;
+
+function inflateInit2(var strm: z_stream; windowBits: Integer): Integer;
+begin
+ Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream));
+end;
+
+function inflateBackInit(var strm: z_stream;
+ windowBits: Integer; window: PChar): Integer;
+begin
+ Result := inflateBackInit_(strm, windowBits, window,
+ ZLIB_VERSION, sizeof(z_stream));
+end;
+
+function _malloc(Size: Integer): Pointer; cdecl;
+begin
+ GetMem(Result, 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;
+
+end.
diff --git a/compat/zlib/contrib/puff/Makefile b/compat/zlib/contrib/puff/Makefile
new file mode 100644
index 0000000..0e2594c
--- /dev/null
+++ b/compat/zlib/contrib/puff/Makefile
@@ -0,0 +1,42 @@
+CFLAGS=-O
+
+puff: puff.o pufftest.o
+
+puff.o: puff.h
+
+pufftest.o: puff.h
+
+test: puff
+ puff zeros.raw
+
+puft: puff.c puff.h pufftest.o
+ cc -fprofile-arcs -ftest-coverage -o puft puff.c pufftest.o
+
+# puff full coverage test (should say 100%)
+cov: puft
+ @rm -f *.gcov *.gcda
+ @puft -w zeros.raw 2>&1 | cat > /dev/null
+ @echo '04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2
+ @echo '00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2
+ @echo '00 00 00 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 254
+ @echo '00 01 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2
+ @echo '01 01 00 fe ff 0a' | xxd -r -p | puft -f 2>&1 | cat > /dev/null
+ @echo '02 7e ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246
+ @echo '02' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2
+ @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2
+ @echo '04 80 49 92 24 49 92 24 71 ff ff 93 11 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 249
+ @echo '04 c0 81 08 00 00 00 00 20 7f eb 0b 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246
+ @echo '0b 00 00' | xxd -r -p | puft -f 2>&1 | cat > /dev/null
+ @echo '1a 07' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246
+ @echo '0c c0 81 00 00 00 00 00 90 ff 6b 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 245
+ @puft -f zeros.raw 2>&1 | cat > /dev/null
+ @echo 'fc 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 253
+ @echo '04 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 252
+ @echo '04 00 24 49' | xxd -r -p | puft 2> /dev/null || test $$? -eq 251
+ @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 84' | xxd -r -p | puft 2> /dev/null || test $$? -eq 248
+ @echo '04 00 24 e9 ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 250
+ @echo '04 00 24 e9 ff 6d' | xxd -r -p | puft 2> /dev/null || test $$? -eq 247
+ @gcov -n puff.c
+
+clean:
+ rm -f puff puft *.o *.gc*
diff --git a/compat/zlib/contrib/puff/README b/compat/zlib/contrib/puff/README
new file mode 100644
index 0000000..bbc4cb5
--- /dev/null
+++ b/compat/zlib/contrib/puff/README
@@ -0,0 +1,63 @@
+Puff -- A Simple Inflate
+3 Mar 2003
+Mark Adler
+madler@alumni.caltech.edu
+
+What this is --
+
+puff.c provides the routine puff() to decompress the deflate data format. It
+does so more slowly than zlib, but the code is about one-fifth the size of the
+inflate code in zlib, and written to be very easy to read.
+
+Why I wrote this --
+
+puff.c was written to document the deflate format unambiguously, by virtue of
+being working C code. It is meant to supplement RFC 1951, which formally
+describes the deflate format. I have received many questions on details of the
+deflate format, and I hope that reading this code will answer those questions.
+puff.c is heavily commented with details of the deflate format, especially
+those little nooks and cranies of the format that might not be obvious from a
+specification.
+
+puff.c may also be useful in applications where code size or memory usage is a
+very limited resource, and speed is not as important.
+
+How to use it --
+
+Well, most likely you should just be reading puff.c and using zlib for actual
+applications, but if you must ...
+
+Include puff.h in your code, which provides this prototype:
+
+int puff(unsigned char *dest, /* pointer to destination pointer */
+ unsigned long *destlen, /* amount of output space */
+ unsigned char *source, /* pointer to source data pointer */
+ unsigned long *sourcelen); /* amount of input available */
+
+Then you can call puff() to decompress a deflate stream that is in memory in
+its entirety at source, to a sufficiently sized block of memory for the
+decompressed data at dest. puff() is the only external symbol in puff.c The
+only C library functions that puff.c needs are setjmp() and longjmp(), which
+are used to simplify error checking in the code to improve readabilty. puff.c
+does no memory allocation, and uses less than 2K bytes off of the stack.
+
+If destlen is not enough space for the uncompressed data, then inflate will
+return an error without writing more than destlen bytes. Note that this means
+that in order to decompress the deflate data successfully, you need to know
+the size of the uncompressed data ahead of time.
+
+If needed, puff() can determine the size of the uncompressed data with no
+output space. This is done by passing dest equal to (unsigned char *)0. Then
+the initial value of *destlen is ignored and *destlen is set to the length of
+the uncompressed data. So if the size of the uncompressed data is not known,
+then two passes of puff() can be used--first to determine the size, and second
+to do the actual inflation after allocating the appropriate memory. Not
+pretty, but it works. (This is one of the reasons you should be using zlib.)
+
+The deflate format is self-terminating. If the deflate stream does not end
+in *sourcelen bytes, puff() will return an error without reading at or past
+endsource.
+
+On return, *sourcelen is updated to the amount of input data consumed, and
+*destlen is updated to the size of the uncompressed data. See the comments
+in puff.c for the possible return codes for puff().
diff --git a/compat/zlib/contrib/puff/puff.c b/compat/zlib/contrib/puff/puff.c
new file mode 100644
index 0000000..ba58483
--- /dev/null
+++ b/compat/zlib/contrib/puff/puff.c
@@ -0,0 +1,840 @@
+/*
+ * puff.c
+ * Copyright (C) 2002-2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in puff.h
+ * version 2.3, 21 Jan 2013
+ *
+ * puff.c is a simple inflate written to be an unambiguous way to specify the
+ * deflate format. It is not written for speed but rather simplicity. As a
+ * side benefit, this code might actually be useful when small code is more
+ * important than speed, such as bootstrap applications. For typical deflate
+ * data, zlib's inflate() is about four times as fast as puff(). zlib's
+ * inflate compiles to around 20K on my machine, whereas puff.c compiles to
+ * around 4K on my machine (a PowerPC using GNU cc). If the faster decode()
+ * function here is used, then puff() is only twice as slow as zlib's
+ * inflate().
+ *
+ * All dynamically allocated memory comes from the stack. The stack required
+ * is less than 2K bytes. This code is compatible with 16-bit int's and
+ * assumes that long's are at least 32 bits. puff.c uses the short data type,
+ * assumed to be 16 bits, for arrays in order to to conserve memory. The code
+ * works whether integers are stored big endian or little endian.
+ *
+ * In the comments below are "Format notes" that describe the inflate process
+ * and document some of the less obvious aspects of the format. This source
+ * code is meant to supplement RFC 1951, which formally describes the deflate
+ * format:
+ *
+ * http://www.zlib.org/rfc-deflate.html
+ */
+
+/*
+ * Change history:
+ *
+ * 1.0 10 Feb 2002 - First version
+ * 1.1 17 Feb 2002 - Clarifications of some comments and notes
+ * - Update puff() dest and source pointers on negative
+ * errors to facilitate debugging deflators
+ * - Remove longest from struct huffman -- not needed
+ * - Simplify offs[] index in construct()
+ * - Add input size and checking, using longjmp() to
+ * maintain easy readability
+ * - Use short data type for large arrays
+ * - Use pointers instead of long to specify source and
+ * destination sizes to avoid arbitrary 4 GB limits
+ * 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!),
+ * but leave simple version for readabilty
+ * - Make sure invalid distances detected if pointers
+ * are 16 bits
+ * - Fix fixed codes table error
+ * - Provide a scanning mode for determining size of
+ * uncompressed data
+ * 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly]
+ * - Add a puff.h file for the interface
+ * - Add braces in puff() for else do [Gailly]
+ * - Use indexes instead of pointers for readability
+ * 1.4 31 Mar 2002 - Simplify construct() code set check
+ * - Fix some comments
+ * - Add FIXLCODES #define
+ * 1.5 6 Apr 2002 - Minor comment fixes
+ * 1.6 7 Aug 2002 - Minor format changes
+ * 1.7 3 Mar 2003 - Added test code for distribution
+ * - Added zlib-like license
+ * 1.8 9 Jan 2004 - Added some comments on no distance codes case
+ * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland]
+ * - Catch missing end-of-block symbol error
+ * 2.0 25 Jul 2008 - Add #define to permit distance too far back
+ * - Add option in TEST code for puff to write the data
+ * - Add option in TEST code to skip input bytes
+ * - Allow TEST code to read from piped stdin
+ * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers
+ * - Avoid unsigned comparisons for even happier compilers
+ * 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer]
+ * - Add const where appropriate [Oberhumer]
+ * - Split if's and ?'s for coverage testing
+ * - Break out test code to separate file
+ * - Move NIL to puff.h
+ * - Allow incomplete code only if single code length is 1
+ * - Add full code coverage test to Makefile
+ * 2.3 21 Jan 2013 - Check for invalid code length codes in dynamic blocks
+ */
+
+#include <setjmp.h> /* for setjmp(), longjmp(), and jmp_buf */
+#include "puff.h" /* prototype for puff() */
+
+#define local static /* for local function definitions */
+
+/*
+ * Maximums for allocations and loops. It is not useful to change these --
+ * they are fixed by the deflate format.
+ */
+#define MAXBITS 15 /* maximum bits in a code */
+#define MAXLCODES 286 /* maximum number of literal/length codes */
+#define MAXDCODES 30 /* maximum number of distance codes */
+#define MAXCODES (MAXLCODES+MAXDCODES) /* maximum codes lengths to read */
+#define FIXLCODES 288 /* number of fixed literal/length codes */
+
+/* input and output state */
+struct state {
+ /* output state */
+ unsigned char *out; /* output buffer */
+ unsigned long outlen; /* available space at out */
+ unsigned long outcnt; /* bytes written to out so far */
+
+ /* input state */
+ const unsigned char *in; /* input buffer */
+ unsigned long inlen; /* available input at in */
+ unsigned long incnt; /* bytes read so far */
+ int bitbuf; /* bit buffer */
+ int bitcnt; /* number of bits in bit buffer */
+
+ /* input limit error return state for bits() and decode() */
+ jmp_buf env;
+};
+
+/*
+ * 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)
+{
+ long val; /* bit accumulator (can use up to 20 bits) */
+
+ /* load at least need bits into val */
+ val = s->bitbuf;
+ while (s->bitcnt < need) {
+ if (s->incnt == s->inlen)
+ longjmp(s->env, 1); /* out of input */
+ val |= (long)(s->in[s->incnt++]) << s->bitcnt; /* load eight bits */
+ s->bitcnt += 8;
+ }
+
+ /* drop need bits and update buffer, always zero to seven bits left */
+ s->bitbuf = (int)(val >> need);
+ s->bitcnt -= need;
+
+ /* return need bits, zeroing the bits above that */
+ return (int)(val & ((1L << need) - 1));
+}
+
+/*
+ * Process a stored block.
+ *
+ * Format notes:
+ *
+ * - After the two-bit stored block type (00), the stored block length and
+ * stored bytes are byte-aligned for fast copying. Therefore any leftover
+ * bits in the byte that has the last bit of the type, as many as seven, are
+ * discarded. The value of the discarded bits are not defined and should not
+ * be checked against any expectation.
+ *
+ * - The second inverted copy of the stored block length does not have to be
+ * checked, but it's probably a good idea to do so anyway.
+ *
+ * - A stored block can have zero length. This is sometimes used to byte-align
+ * subsets of the compressed data for random access or partial recovery.
+ */
+local int stored(struct state *s)
+{
+ unsigned len; /* length of stored block */
+
+ /* discard leftover bits from current byte (assumes s->bitcnt < 8) */
+ s->bitbuf = 0;
+ s->bitcnt = 0;
+
+ /* get length and check against its one's complement */
+ if (s->incnt + 4 > s->inlen)
+ return 2; /* not enough input */
+ len = s->in[s->incnt++];
+ len |= s->in[s->incnt++] << 8;
+ if (s->in[s->incnt++] != (~len & 0xff) ||
+ s->in[s->incnt++] != ((~len >> 8) & 0xff))
+ return -2; /* didn't match complement! */
+
+ /* copy len bytes from in to out */
+ if (s->incnt + len > s->inlen)
+ return 2; /* not enough input */
+ if (s->out != NIL) {
+ if (s->outcnt + len > s->outlen)
+ return 1; /* not enough output space */
+ while (len--)
+ s->out[s->outcnt++] = s->in[s->incnt++];
+ }
+ else { /* just scanning */
+ s->outcnt += len;
+ s->incnt += len;
+ }
+
+ /* done with a valid stored block */
+ return 0;
+}
+
+/*
+ * 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 -10 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. A table-based decoding
+ * scheme (as used in zlib) does not need to do this reversal.
+ *
+ * - The first code for the shortest length is all zeros. Subsequent codes of
+ * the same length are simply integer increments of the previous code. When
+ * moving up a length, a zero bit is appended to the code. For a complete
+ * code, the last code of the longest length will be all ones.
+ *
+ * - Incomplete codes are handled by this decoder, since they are permitted
+ * in the deflate format. See the format notes for fixed() and dynamic().
+ */
+#ifdef SLOW
+local int decode(struct state *s, const 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 */
+
+ code = first = index = 0;
+ for (len = 1; len <= MAXBITS; len++) {
+ code |= bits(s, 1); /* get next bit */
+ count = h->count[len];
+ if (code - count < first) /* if length len, return symbol */
+ return h->symbol[index + (code - first)];
+ index += count; /* else update for next length */
+ first += count;
+ first <<= 1;
+ code <<= 1;
+ }
+ return -10; /* ran out of codes */
+}
+
+/*
+ * A faster version of decode() for real applications of this code. It's not
+ * as readable, but it makes puff() twice as fast. And it only makes the code
+ * a few percent larger.
+ */
+#else /* !SLOW */
+local int decode(struct state *s, const 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;
+ bitbuf >>= 1;
+ count = *next++;
+ if (code - count < first) { /* 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->incnt == s->inlen)
+ longjmp(s->env, 1); /* out of input */
+ bitbuf = s->in[s->incnt++];
+ if (left > 8)
+ left = 8;
+ }
+ return -10; /* ran out of codes */
+}
+#endif /* SLOW */
+
+/*
+ * 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.
+ *
+ * Not used by decode(), but used for error checking, h->count[0] is the number
+ * of the n symbols not in the code. So n - h->count[0] is the number of
+ * codes. This is useful for checking for incomplete codes that have more than
+ * one symbol, which is an error in a dynamic block.
+ *
+ * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS
+ * This is assured by the construction of the length arrays in dynamic() and
+ * fixed() and is not verified by construct().
+ *
+ * Format notes:
+ *
+ * - Permitted and expected examples of incomplete codes are one of the fixed
+ * codes and any code with a single symbol which in deflate is coded as one
+ * bit instead of zero bits. See the format notes for fixed() and dynamic().
+ *
+ * - Within a given code length, the symbols are kept in ascending order for
+ * the code bits definition.
+ */
+local int construct(struct huffman *h, const short *length, 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 */
+
+ /* 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 literal/length and distance codes until an end-of-block code.
+ *
+ * Format notes:
+ *
+ * - Compressed data that is after the block type if fixed or after the code
+ * description if dynamic is a combination of literals and length/distance
+ * pairs terminated by and end-of-block code. Literals are simply Huffman
+ * coded 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.
+ *
+ * - Literals, lengths, and the end-of-block code are combined into a single
+ * code of up to 286 symbols. They are 256 literals (0..255), 29 length
+ * symbols (257..285), and the end-of-block symbol (256).
+ *
+ * - There are 256 possible lengths (3..258), and so 29 symbols are not enough
+ * to represent all of those. Lengths 3..10 and 258 are in fact represented
+ * by just a length symbol. Lengths 11..257 are represented as a symbol and
+ * some number of extra bits that are added as an integer to the base length
+ * of the length symbol. The number of extra bits is determined by the base
+ * length symbol. These are in the static arrays below, lens[] for the base
+ * lengths and lext[] for the corresponding number of extra bits.
+ *
+ * - The reason that 258 gets its own symbol is that the longest length is used
+ * often in highly redundant files. Note that 258 can also be coded as the
+ * base value 227 plus the maximum extra value of 31. While a good deflate
+ * should never do this, it is not an error, and should be decoded properly.
+ *
+ * - If a length is decoded, including its extra bits if any, then it is
+ * followed a distance code. There are up to 30 distance symbols. Again
+ * there are many more possible distances (1..32768), so extra bits are added
+ * to a base value represented by the symbol. The distances 1..4 get their
+ * own symbol, but the rest require extra bits. The base distances and
+ * corresponding number of extra bits are below in the static arrays dist[]
+ * and dext[].
+ *
+ * - 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 258
+ * simply copies the last byte 258 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. You should not use memcpy() since its behavior is not
+ * defined for overlapped arrays. You should not use memmove() or bcopy()
+ * since though their behavior -is- defined for overlapping arrays, it is
+ * defined to do the wrong thing in this case.
+ */
+local int codes(struct state *s,
+ const struct huffman *lencode,
+ const struct huffman *distcode)
+{
+ int symbol; /* decoded symbol */
+ int len; /* length for copy */
+ unsigned dist; /* distance for copy */
+ static const short lens[29] = { /* Size base for length codes 257..285 */
+ 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, 258};
+ static const short lext[29] = { /* Extra bits for length codes 257..285 */
+ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
+ 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0};
+ static const short dists[30] = { /* Offset base for distance codes 0..29 */
+ 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};
+ static const short dext[30] = { /* Extra bits for distance codes 0..29 */
+ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
+ 7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
+ 12, 12, 13, 13};
+
+ /* decode literals and length/distance pairs */
+ do {
+ symbol = decode(s, lencode);
+ if (symbol < 0)
+ return symbol; /* invalid symbol */
+ if (symbol < 256) { /* literal: symbol is the byte */
+ /* write out the literal */
+ if (s->out != NIL) {
+ if (s->outcnt == s->outlen)
+ return 1;
+ s->out[s->outcnt] = symbol;
+ }
+ s->outcnt++;
+ }
+ else if (symbol > 256) { /* length */
+ /* get and compute length */
+ symbol -= 257;
+ if (symbol >= 29)
+ return -10; /* invalid fixed code */
+ len = lens[symbol] + bits(s, lext[symbol]);
+
+ /* get and check distance */
+ symbol = decode(s, distcode);
+ if (symbol < 0)
+ return symbol; /* invalid symbol */
+ dist = dists[symbol] + bits(s, dext[symbol]);
+#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ if (dist > s->outcnt)
+ return -11; /* distance too far back */
+#endif
+
+ /* copy length bytes from distance bytes back */
+ if (s->out != NIL) {
+ if (s->outcnt + len > s->outlen)
+ return 1;
+ while (len--) {
+ s->out[s->outcnt] =
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ dist > s->outcnt ?
+ 0 :
+#endif
+ s->out[s->outcnt - dist];
+ s->outcnt++;
+ }
+ }
+ else
+ s->outcnt += len;
+ }
+ } while (symbol != 256); /* end of block symbol */
+
+ /* done with a valid fixed or dynamic block */
+ return 0;
+}
+
+/*
+ * Process a fixed codes block.
+ *
+ * Format notes:
+ *
+ * - This block type can be useful for compressing small amounts of data for
+ * which the size of the code descriptions in a dynamic block exceeds the
+ * benefit of custom codes for that block. For fixed codes, no bits are
+ * spent on code descriptions. Instead the code lengths for literal/length
+ * codes and distance codes are fixed. The specific lengths for each symbol
+ * can be seen in the "for" loops below.
+ *
+ * - The literal/length code is complete, but has two symbols that are invalid
+ * and should result in an error if received. This cannot be implemented
+ * simply as an incomplete code since those two symbols are in the "middle"
+ * of the code. They are eight bits long and the longest literal/length\
+ * code is nine bits. Therefore the code must be constructed with those
+ * symbols, and the invalid symbols must be detected after decoding.
+ *
+ * - The fixed distance codes also have two invalid symbols that should result
+ * in an error if received. Since all of the distance codes are the same
+ * length, this can be implemented as an incomplete code. Then the invalid
+ * codes are detected while decoding.
+ */
+local int fixed(struct state *s)
+{
+ static int virgin = 1;
+ static short lencnt[MAXBITS+1], lensym[FIXLCODES];
+ static short distcnt[MAXBITS+1], distsym[MAXDCODES];
+ static struct huffman lencode, distcode;
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ int symbol;
+ short lengths[FIXLCODES];
+
+ /* construct lencode and distcode */
+ lencode.count = lencnt;
+ lencode.symbol = lensym;
+ distcode.count = distcnt;
+ distcode.symbol = distsym;
+
+ /* literal/length table */
+ for (symbol = 0; symbol < 144; symbol++)
+ lengths[symbol] = 8;
+ for (; symbol < 256; symbol++)
+ lengths[symbol] = 9;
+ for (; symbol < 280; symbol++)
+ lengths[symbol] = 7;
+ for (; symbol < FIXLCODES; symbol++)
+ lengths[symbol] = 8;
+ construct(&lencode, lengths, FIXLCODES);
+
+ /* distance table */
+ for (symbol = 0; symbol < MAXDCODES; symbol++)
+ lengths[symbol] = 5;
+ construct(&distcode, lengths, MAXDCODES);
+
+ /* do this just once */
+ virgin = 0;
+ }
+
+ /* decode data until end-of-block code */
+ return codes(s, &lencode, &distcode);
+}
+
+/*
+ * Process a dynamic codes block.
+ *
+ * Format notes:
+ *
+ * - A dynamic block starts with a description of the literal/length and
+ * distance codes for that block. New dynamic blocks allow the compressor to
+ * rapidly adapt to changing data with new codes optimized for that data.
+ *
+ * - The codes used by the deflate format are "canonical", which means that
+ * the actual bits of the codes are generated in an unambiguous way simply
+ * from the number of bits in each code. Therefore the code descriptions
+ * are simply a list of code lengths for each symbol.
+ *
+ * - The code lengths are stored in order for the symbols, so lengths are
+ * provided for each of the literal/length symbols, and for each of the
+ * distance symbols.
+ *
+ * - If a symbol is not used in the block, this is represented by a zero as
+ * as the code length. This does not mean a zero-length code, but rather
+ * that no code should be created for this symbol. There is no way in the
+ * deflate format to represent a zero-length code.
+ *
+ * - The maximum number of bits in a code is 15, so the possible lengths for
+ * any code are 1..15.
+ *
+ * - The fact that a length of zero is not permitted for a code has an
+ * interesting consequence. Normally if only one symbol is used for a given
+ * code, then in fact that code could be represented with zero bits. However
+ * in deflate, that code has to be at least one bit. So for example, if
+ * only a single distance base symbol appears in a block, then it will be
+ * represented by a single code of length one, in particular one 0 bit. This
+ * is an incomplete code, since if a 1 bit is received, it has no meaning,
+ * and should result in an error. So incomplete distance codes of one symbol
+ * should be permitted, and the receipt of invalid codes should be handled.
+ *
+ * - It is also possible to have a single literal/length code, but that code
+ * must be the end-of-block code, since every dynamic block has one. This
+ * is not the most efficient way to create an empty block (an empty fixed
+ * block is fewer bits), but it is allowed by the format. So incomplete
+ * literal/length codes of one symbol should also be permitted.
+ *
+ * - If there are only literal codes and no lengths, then there are no distance
+ * codes. This is represented by one distance code with zero bits.
+ *
+ * - The list of up to 286 length/literal lengths and up to 30 distance lengths
+ * are themselves compressed using Huffman codes and run-length encoding. In
+ * the list of code lengths, a 0 symbol means no code, a 1..15 symbol means
+ * that length, and the symbols 16, 17, and 18 are run-length instructions.
+ * Each of 16, 17, and 18 are follwed by extra bits to define the length of
+ * the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10
+ * zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols
+ * are common, hence the special coding for zero lengths.
+ *
+ * - The symbols for 0..18 are Huffman coded, and so that code must be
+ * described first. This is simply a sequence of up to 19 three-bit values
+ * representing no code (0) or the code length for that symbol (1..7).
+ *
+ * - A dynamic block starts with three fixed-size counts from which is computed
+ * the number of literal/length code lengths, the number of distance code
+ * lengths, and the number of code length code lengths (ok, you come up with
+ * a better name!) in the code descriptions. For the literal/length and
+ * distance codes, lengths after those provided are considered zero, i.e. no
+ * code. The code length code lengths are received in a permuted order (see
+ * the order[] array below) to make a short code length code length list more
+ * likely. As it turns out, very short and very long codes are less likely
+ * to be seen in a dynamic code description, hence what may appear initially
+ * to be a peculiar ordering.
+ *
+ * - Given the number of literal/length code lengths (nlen) and distance code
+ * lengths (ndist), then they are treated as one long list of nlen + ndist
+ * code lengths. Therefore run-length coding can and often does cross the
+ * boundary between the two sets of lengths.
+ *
+ * - So to summarize, the code description at the start of a dynamic block is
+ * three counts for the number of code lengths for the literal/length codes,
+ * the distance codes, and the code length codes. This is followed by the
+ * code length code lengths, three bits each. This is used to construct the
+ * code length code which is used to read the remainder of the lengths. Then
+ * the literal/length code lengths and distance lengths are read as a single
+ * set of lengths using the code length codes. Codes are constructed from
+ * the resulting two sets of lengths, and then finally you can start
+ * decoding actual compressed data in the block.
+ *
+ * - For reference, a "typical" size for the code description in a dynamic
+ * block is around 80 bytes.
+ */
+local int dynamic(struct state *s)
+{
+ int nlen, ndist, ncode; /* number of lengths in descriptor */
+ int index; /* index of lengths[] */
+ int err; /* construct() return value */
+ short lengths[MAXCODES]; /* descriptor code lengths */
+ short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */
+ short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */
+ struct huffman lencode, distcode; /* length and distance codes */
+ static const short order[19] = /* permutation of code length codes */
+ {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
+
+ /* construct lencode and distcode */
+ lencode.count = lencnt;
+ lencode.symbol = lensym;
+ distcode.count = distcnt;
+ distcode.symbol = distsym;
+
+ /* get number of lengths in each table, check lengths */
+ nlen = bits(s, 5) + 257;
+ ndist = bits(s, 5) + 1;
+ ncode = bits(s, 4) + 4;
+ if (nlen > MAXLCODES || ndist > MAXDCODES)
+ return -3; /* bad counts */
+
+ /* read code length code lengths (really), missing lengths are zero */
+ for (index = 0; index < ncode; index++)
+ lengths[order[index]] = bits(s, 3);
+ for (; index < 19; index++)
+ lengths[order[index]] = 0;
+
+ /* build huffman table for code lengths codes (use lencode temporarily) */
+ err = construct(&lencode, lengths, 19);
+ if (err != 0) /* require complete code set here */
+ return -4;
+
+ /* read length/literal and distance code length tables */
+ index = 0;
+ while (index < nlen + ndist) {
+ int symbol; /* decoded value */
+ int len; /* last length to repeat */
+
+ symbol = decode(s, &lencode);
+ if (symbol < 0)
+ return symbol; /* invalid symbol */
+ if (symbol < 16) /* length in 0..15 */
+ lengths[index++] = symbol;
+ else { /* repeat instruction */
+ len = 0; /* assume repeating zeros */
+ if (symbol == 16) { /* repeat last length 3..6 times */
+ if (index == 0)
+ return -5; /* no last length! */
+ len = lengths[index - 1]; /* last length */
+ symbol = 3 + bits(s, 2);
+ }
+ else if (symbol == 17) /* repeat zero 3..10 times */
+ symbol = 3 + bits(s, 3);
+ else /* == 18, repeat zero 11..138 times */
+ symbol = 11 + bits(s, 7);
+ if (index + symbol > nlen + ndist)
+ return -6; /* too many lengths! */
+ while (symbol--) /* repeat last or zero symbol times */
+ lengths[index++] = len;
+ }
+ }
+
+ /* check for end-of-block code -- there better be one! */
+ if (lengths[256] == 0)
+ return -9;
+
+ /* build huffman table for literal/length codes */
+ err = construct(&lencode, lengths, nlen);
+ if (err && (err < 0 || nlen != lencode.count[0] + lencode.count[1]))
+ return -7; /* incomplete code ok only for single length 1 code */
+
+ /* build huffman table for distance codes */
+ err = construct(&distcode, lengths + nlen, ndist);
+ if (err && (err < 0 || ndist != distcode.count[0] + distcode.count[1]))
+ return -8; /* incomplete code ok only for single length 1 code */
+
+ /* decode data until end-of-block code */
+ return codes(s, &lencode, &distcode);
+}
+
+/*
+ * Inflate source to dest. On return, destlen and sourcelen are updated to the
+ * size of the uncompressed data and the size of the deflate data respectively.
+ * On success, the return value of puff() is zero. If there is an error in the
+ * source data, i.e. it is not in the deflate 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. In that case, destlen and
+ * sourcelen are not updated to facilitate retrying from the beginning with the
+ * provision of more input data or more output space. In the case of invalid
+ * inflate data (a negative error), the dest and source pointers are updated to
+ * facilitate the debugging of deflators.
+ *
+ * puff() also has a mode to determine the size of the uncompressed output with
+ * no output written. For this dest must be (unsigned char *)0. In this case,
+ * the input value of *destlen is ignored, and on return *destlen is set to the
+ * size of the uncompressed output.
+ *
+ * The return codes are:
+ *
+ * 2: available inflate data did not terminate
+ * 1: output space exhausted before completing inflate
+ * 0: successful inflate
+ * -1: invalid block type (type == 3)
+ * -2: stored block length did not match one's complement
+ * -3: dynamic block code description: too many length or distance codes
+ * -4: dynamic block code description: code lengths codes incomplete
+ * -5: dynamic block code description: repeat lengths with no first length
+ * -6: dynamic block code description: repeat more than specified lengths
+ * -7: dynamic block code description: invalid literal/length code lengths
+ * -8: dynamic block code description: invalid distance code lengths
+ * -9: dynamic block code description: missing end-of-block code
+ * -10: invalid literal/length or distance code in fixed or dynamic block
+ * -11: distance is too far back in fixed or dynamic block
+ *
+ * Format notes:
+ *
+ * - Three bits are read for each block to determine the kind of block and
+ * whether or not it is the last block. Then the block is decoded and the
+ * process repeated if it was not the last block.
+ *
+ * - The leftover bits in the last byte of the deflate data after the last
+ * block (if it was a fixed or dynamic block) are undefined and have no
+ * expected values to check.
+ */
+int puff(unsigned char *dest, /* pointer to destination pointer */
+ unsigned long *destlen, /* amount of output space */
+ const unsigned char *source, /* pointer to source data pointer */
+ unsigned long *sourcelen) /* amount of input available */
+{
+ struct state s; /* input/output state */
+ int last, type; /* block information */
+ int err; /* return value */
+
+ /* initialize output state */
+ s.out = dest;
+ s.outlen = *destlen; /* ignored if dest is NIL */
+ s.outcnt = 0;
+
+ /* initialize input state */
+ s.in = source;
+ s.inlen = *sourcelen;
+ s.incnt = 0;
+ s.bitbuf = 0;
+ s.bitcnt = 0;
+
+ /* 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 do-loop, return error */
+ else {
+ /* process blocks until last block or error */
+ do {
+ last = bits(&s, 1); /* one if last block */
+ type = bits(&s, 2); /* block type 0..3 */
+ err = type == 0 ?
+ stored(&s) :
+ (type == 1 ?
+ fixed(&s) :
+ (type == 2 ?
+ dynamic(&s) :
+ -1)); /* type == 3, invalid */
+ if (err != 0)
+ break; /* return with error */
+ } while (!last);
+ }
+
+ /* update the lengths and return */
+ if (err <= 0) {
+ *destlen = s.outcnt;
+ *sourcelen = s.incnt;
+ }
+ return err;
+}
diff --git a/compat/zlib/contrib/puff/puff.h b/compat/zlib/contrib/puff/puff.h
new file mode 100644
index 0000000..e23a245
--- /dev/null
+++ b/compat/zlib/contrib/puff/puff.h
@@ -0,0 +1,35 @@
+/* puff.h
+ Copyright (C) 2002-2013 Mark Adler, all rights reserved
+ version 2.3, 21 Jan 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
+ */
+
+
+/*
+ * See puff.c for purpose and usage.
+ */
+#ifndef NIL
+# define NIL ((unsigned char *)0) /* for no output option */
+#endif
+
+int puff(unsigned char *dest, /* pointer to destination pointer */
+ unsigned long *destlen, /* amount of output space */
+ const unsigned char *source, /* pointer to source data pointer */
+ unsigned long *sourcelen); /* amount of input available */
diff --git a/compat/zlib/contrib/puff/pufftest.c b/compat/zlib/contrib/puff/pufftest.c
new file mode 100644
index 0000000..7764814
--- /dev/null
+++ b/compat/zlib/contrib/puff/pufftest.c
@@ -0,0 +1,165 @@
+/*
+ * pufftest.c
+ * Copyright (C) 2002-2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in puff.h
+ * version 2.3, 21 Jan 2013
+ */
+
+/* Example of how to use puff().
+
+ Usage: puff [-w] [-f] [-nnn] file
+ ... | puff [-w] [-f] [-nnn]
+
+ where file is the input file with deflate data, nnn is the number of bytes
+ of input to skip before inflating (e.g. to skip a zlib or gzip header), and
+ -w is used to write the decompressed data to stdout. -f is for coverage
+ testing, and causes pufftest to fail with not enough output space (-f does
+ a write like -w, so -w is not required). */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "puff.h"
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include <fcntl.h>
+# include <io.h>
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+
+#define local static
+
+/* Return size times approximately the cube root of 2, keeping the result as 1,
+ 3, or 5 times a power of 2 -- the result is always > size, until the result
+ is the maximum value of an unsigned long, where it remains. This is useful
+ to keep reallocations less than ~33% over the actual data. */
+local size_t bythirds(size_t size)
+{
+ int n;
+ size_t m;
+
+ m = size;
+ for (n = 0; m; n++)
+ m >>= 1;
+ if (n < 3)
+ return size + 1;
+ n -= 3;
+ m = size >> n;
+ m += m == 6 ? 2 : 1;
+ m <<= n;
+ return m > size ? m : (size_t)(-1);
+}
+
+/* Read the input file *name, or stdin if name is NULL, into allocated memory.
+ Reallocate to larger buffers until the entire file is read in. Return a
+ pointer to the allocated data, or NULL if there was a memory allocation
+ failure. *len is the number of bytes of data read from the input file (even
+ if load() returns NULL). If the input file was empty or could not be opened
+ or read, *len is zero. */
+local void *load(const char *name, size_t *len)
+{
+ size_t size;
+ void *buf, *swap;
+ FILE *in;
+
+ *len = 0;
+ buf = malloc(size = 4096);
+ if (buf == NULL)
+ return NULL;
+ in = name == NULL ? stdin : fopen(name, "rb");
+ if (in != NULL) {
+ for (;;) {
+ *len += fread((char *)buf + *len, 1, size - *len, in);
+ if (*len < size) break;
+ size = bythirds(size);
+ if (size == *len || (swap = realloc(buf, size)) == NULL) {
+ free(buf);
+ buf = NULL;
+ break;
+ }
+ buf = swap;
+ }
+ fclose(in);
+ }
+ return buf;
+}
+
+int main(int argc, char **argv)
+{
+ int ret, put = 0, fail = 0;
+ unsigned skip = 0;
+ char *arg, *name = NULL;
+ unsigned char *source = NULL, *dest;
+ size_t len = 0;
+ unsigned long sourcelen, destlen;
+
+ /* process arguments */
+ while (arg = *++argv, --argc)
+ if (arg[0] == '-') {
+ if (arg[1] == 'w' && arg[2] == 0)
+ put = 1;
+ else if (arg[1] == 'f' && arg[2] == 0)
+ fail = 1, put = 1;
+ else if (arg[1] >= '0' && arg[1] <= '9')
+ skip = (unsigned)atoi(arg + 1);
+ else {
+ fprintf(stderr, "invalid option %s\n", arg);
+ return 3;
+ }
+ }
+ else if (name != NULL) {
+ fprintf(stderr, "only one file name allowed\n");
+ return 3;
+ }
+ else
+ name = arg;
+ source = load(name, &len);
+ if (source == NULL) {
+ fprintf(stderr, "memory allocation failure\n");
+ return 4;
+ }
+ if (len == 0) {
+ fprintf(stderr, "could not read %s, or it was empty\n",
+ name == NULL ? "<stdin>" : name);
+ free(source);
+ return 3;
+ }
+ if (skip >= len) {
+ fprintf(stderr, "skip request of %d leaves no input\n", skip);
+ free(source);
+ return 3;
+ }
+
+ /* test inflate data with offset skip */
+ len -= skip;
+ sourcelen = (unsigned long)len;
+ ret = puff(NIL, &destlen, source + skip, &sourcelen);
+ if (ret)
+ fprintf(stderr, "puff() failed with return code %d\n", ret);
+ else {
+ fprintf(stderr, "puff() succeeded uncompressing %lu bytes\n", destlen);
+ if (sourcelen < len) fprintf(stderr, "%lu compressed bytes unused\n",
+ len - sourcelen);
+ }
+
+ /* if requested, inflate again and write decompressd data to stdout */
+ if (put && ret == 0) {
+ if (fail)
+ destlen >>= 1;
+ dest = malloc(destlen);
+ if (dest == NULL) {
+ fprintf(stderr, "memory allocation failure\n");
+ free(source);
+ return 4;
+ }
+ puff(dest, &destlen, source + skip, &sourcelen);
+ SET_BINARY_MODE(stdout);
+ fwrite(dest, 1, destlen, stdout);
+ free(dest);
+ }
+
+ /* clean up */
+ free(source);
+ return ret;
+}
diff --git a/compat/zlib/contrib/puff/zeros.raw b/compat/zlib/contrib/puff/zeros.raw
new file mode 100644
index 0000000..0a90e76
--- /dev/null
+++ b/compat/zlib/contrib/puff/zeros.raw
Binary files differ
diff --git a/compat/zlib/contrib/testzlib/testzlib.c b/compat/zlib/contrib/testzlib/testzlib.c
new file mode 100644
index 0000000..5f659de
--- /dev/null
+++ b/compat/zlib/contrib/testzlib/testzlib.c
@@ -0,0 +1,275 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <windows.h>
+
+#include "zlib.h"
+
+
+void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B)
+{
+ R->HighPart = A.HighPart - B.HighPart;
+ if (A.LowPart >= B.LowPart)
+ R->LowPart = A.LowPart - B.LowPart;
+ else
+ {
+ R->LowPart = A.LowPart - B.LowPart;
+ R->HighPart --;
+ }
+}
+
+#ifdef _M_X64
+// see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc
+unsigned __int64 __rdtsc(void);
+void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
+{
+ // printf("rdtsc = %I64x\n",__rdtsc());
+ pbeginTime64->QuadPart=__rdtsc();
+}
+
+LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
+{
+ LARGE_INTEGER LIres;
+ unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart));
+ LIres.QuadPart=res;
+ // printf("rdtsc = %I64x\n",__rdtsc());
+ return LIres;
+}
+#else
+#ifdef _M_IX86
+void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
+{
+ DWORD dwEdx,dwEax;
+ _asm
+ {
+ rdtsc
+ mov dwEax,eax
+ mov dwEdx,edx
+ }
+ pbeginTime64->LowPart=dwEax;
+ pbeginTime64->HighPart=dwEdx;
+}
+
+void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
+{
+ myGetRDTSC32(pbeginTime64);
+}
+
+LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
+{
+ LARGE_INTEGER LIres,endTime64;
+ myGetRDTSC32(&endTime64);
+
+ LIres.LowPart=LIres.HighPart=0;
+ MyDoMinus64(&LIres,endTime64,beginTime64);
+ return LIres;
+}
+#else
+void myGetRDTSC32(LARGE_INTEGER * pbeginTime64)
+{
+}
+
+void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64)
+{
+}
+
+LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
+{
+ LARGE_INTEGER lr;
+ lr.QuadPart=0;
+ return lr;
+}
+#endif
+#endif
+
+void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf)
+{
+ if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64)))
+ {
+ pbeginTime64->LowPart = GetTickCount();
+ pbeginTime64->HighPart = 0;
+ }
+}
+
+DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf)
+{
+ LARGE_INTEGER endTime64,ticksPerSecond,ticks;
+ DWORDLONG ticksShifted,tickSecShifted;
+ DWORD dwLog=16+0;
+ DWORD dwRet;
+ if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64)))
+ dwRet = (GetTickCount() - beginTime64.LowPart)*1;
+ else
+ {
+ MyDoMinus64(&ticks,endTime64,beginTime64);
+ QueryPerformanceFrequency(&ticksPerSecond);
+
+
+ {
+ ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog);
+ tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog);
+
+ }
+
+ dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted));
+ dwRet *=1;
+ }
+ return dwRet;
+}
+
+int ReadFileMemory(const char* filename,long* plFileSize,unsigned char** pFilePtr)
+{
+ FILE* stream;
+ unsigned char* ptr;
+ int retVal=1;
+ stream=fopen(filename, "rb");
+ if (stream==NULL)
+ return 0;
+
+ fseek(stream,0,SEEK_END);
+
+ *plFileSize=ftell(stream);
+ fseek(stream,0,SEEK_SET);
+ ptr=malloc((*plFileSize)+1);
+ if (ptr==NULL)
+ retVal=0;
+ else
+ {
+ if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize))
+ retVal=0;
+ }
+ fclose(stream);
+ *pFilePtr=ptr;
+ return retVal;
+}
+
+int main(int argc, char *argv[])
+{
+ int BlockSizeCompress=0x8000;
+ int BlockSizeUncompress=0x8000;
+ int cprLevel=Z_DEFAULT_COMPRESSION ;
+ long lFileSize;
+ unsigned char* FilePtr;
+ long lBufferSizeCpr;
+ long lBufferSizeUncpr;
+ long lCompressedSize=0;
+ unsigned char* CprPtr;
+ unsigned char* UncprPtr;
+ long lSizeCpr,lSizeUncpr;
+ DWORD dwGetTick,dwMsecQP;
+ LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc;
+
+ if (argc<=1)
+ {
+ printf("run TestZlib <File> [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n");
+ return 0;
+ }
+
+ if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0)
+ {
+ printf("error reading %s\n",argv[1]);
+ return 1;
+ }
+ else printf("file %s read, %u bytes\n",argv[1],lFileSize);
+
+ if (argc>=3)
+ BlockSizeCompress=atol(argv[2]);
+
+ if (argc>=4)
+ BlockSizeUncompress=atol(argv[3]);
+
+ if (argc>=5)
+ cprLevel=(int)atol(argv[4]);
+
+ lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200;
+ lBufferSizeUncpr = lBufferSizeCpr;
+
+ CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress);
+
+ BeginCountPerfCounter(&li_qp,TRUE);
+ dwGetTick=GetTickCount();
+ BeginCountRdtsc(&li_rdtsc);
+ {
+ z_stream zcpr;
+ int ret=Z_OK;
+ long lOrigToDo = lFileSize;
+ long lOrigDone = 0;
+ int step=0;
+ memset(&zcpr,0,sizeof(z_stream));
+ deflateInit(&zcpr,cprLevel);
+
+ zcpr.next_in = FilePtr;
+ zcpr.next_out = CprPtr;
+
+
+ do
+ {
+ long all_read_before = zcpr.total_in;
+ zcpr.avail_in = min(lOrigToDo,BlockSizeCompress);
+ zcpr.avail_out = BlockSizeCompress;
+ ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH);
+ lOrigDone += (zcpr.total_in-all_read_before);
+ lOrigToDo -= (zcpr.total_in-all_read_before);
+ step++;
+ } while (ret==Z_OK);
+
+ lSizeCpr=zcpr.total_out;
+ deflateEnd(&zcpr);
+ dwGetTick=GetTickCount()-dwGetTick;
+ dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
+ dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
+ printf("total compress size = %u, in %u step\n",lSizeCpr,step);
+ printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
+ printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
+ printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
+ }
+
+ CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr);
+ UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress);
+
+ BeginCountPerfCounter(&li_qp,TRUE);
+ dwGetTick=GetTickCount();
+ BeginCountRdtsc(&li_rdtsc);
+ {
+ z_stream zcpr;
+ int ret=Z_OK;
+ long lOrigToDo = lSizeCpr;
+ long lOrigDone = 0;
+ int step=0;
+ memset(&zcpr,0,sizeof(z_stream));
+ inflateInit(&zcpr);
+
+ zcpr.next_in = CprPtr;
+ zcpr.next_out = UncprPtr;
+
+
+ do
+ {
+ long all_read_before = zcpr.total_in;
+ zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress);
+ zcpr.avail_out = BlockSizeUncompress;
+ ret=inflate(&zcpr,Z_SYNC_FLUSH);
+ lOrigDone += (zcpr.total_in-all_read_before);
+ lOrigToDo -= (zcpr.total_in-all_read_before);
+ step++;
+ } while (ret==Z_OK);
+
+ lSizeUncpr=zcpr.total_out;
+ inflateEnd(&zcpr);
+ dwGetTick=GetTickCount()-dwGetTick;
+ dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE);
+ dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE);
+ printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step);
+ printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.);
+ printf("uncpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.);
+ printf("uncpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart);
+ }
+
+ if (lSizeUncpr==lFileSize)
+ {
+ if (memcmp(FilePtr,UncprPtr,lFileSize)==0)
+ printf("compare ok\n");
+
+ }
+
+ return 0;
+}
diff --git a/compat/zlib/contrib/testzlib/testzlib.txt b/compat/zlib/contrib/testzlib/testzlib.txt
new file mode 100644
index 0000000..62258f1
--- /dev/null
+++ b/compat/zlib/contrib/testzlib/testzlib.txt
@@ -0,0 +1,10 @@
+To build testzLib with Visual Studio 2005:
+
+copy to a directory file from :
+- root of zLib tree
+- contrib/testzlib
+- contrib/masmx86
+- contrib/masmx64
+- contrib/vstudio/vc7
+
+and open testzlib8.sln \ No newline at end of file
diff --git a/compat/zlib/contrib/untgz/Makefile b/compat/zlib/contrib/untgz/Makefile
new file mode 100644
index 0000000..b54266f
--- /dev/null
+++ b/compat/zlib/contrib/untgz/Makefile
@@ -0,0 +1,14 @@
+CC=cc
+CFLAGS=-g
+
+untgz: untgz.o ../../libz.a
+ $(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz
+
+untgz.o: untgz.c ../../zlib.h
+ $(CC) $(CFLAGS) -c -I../.. untgz.c
+
+../../libz.a:
+ cd ../..; ./configure; make
+
+clean:
+ rm -f untgz untgz.o *~
diff --git a/compat/zlib/contrib/untgz/Makefile.msc b/compat/zlib/contrib/untgz/Makefile.msc
new file mode 100644
index 0000000..77b8602
--- /dev/null
+++ b/compat/zlib/contrib/untgz/Makefile.msc
@@ -0,0 +1,17 @@
+CC=cl
+CFLAGS=-MD
+
+untgz.exe: untgz.obj ..\..\zlib.lib
+ $(CC) $(CFLAGS) untgz.obj ..\..\zlib.lib
+
+untgz.obj: untgz.c ..\..\zlib.h
+ $(CC) $(CFLAGS) -c -I..\.. untgz.c
+
+..\..\zlib.lib:
+ cd ..\..
+ $(MAKE) -f win32\makefile.msc
+ cd contrib\untgz
+
+clean:
+ -del untgz.obj
+ -del untgz.exe
diff --git a/compat/zlib/contrib/untgz/untgz.c b/compat/zlib/contrib/untgz/untgz.c
new file mode 100644
index 0000000..2c391e5
--- /dev/null
+++ b/compat/zlib/contrib/untgz/untgz.c
@@ -0,0 +1,674 @@
+/*
+ * untgz.c -- Display contents and extract files from a gzip'd TAR file
+ *
+ * written by Pedro A. Aranda Gutierrez <paag@tid.es>
+ * adaptation to Unix by Jean-loup Gailly <jloup@gzip.org>
+ * various fixes by Cosmin Truta <cosmint@cs.ubbcluj.ro>
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <errno.h>
+
+#include "zlib.h"
+
+#ifdef unix
+# include <unistd.h>
+#else
+# include <direct.h>
+# include <io.h>
+#endif
+
+#ifdef WIN32
+#include <windows.h>
+# ifndef F_OK
+# define F_OK 0
+# endif
+# define mkdir(dirname,mode) _mkdir(dirname)
+# ifdef _MSC_VER
+# define access(path,mode) _access(path,mode)
+# define chmod(path,mode) _chmod(path,mode)
+# define strdup(str) _strdup(str)
+# endif
+#else
+# include <utime.h>
+#endif
+
+
+/* values used in typeflag field */
+
+#define REGTYPE '0' /* regular file */
+#define AREGTYPE '\0' /* regular file */
+#define LNKTYPE '1' /* link */
+#define SYMTYPE '2' /* reserved */
+#define CHRTYPE '3' /* character special */
+#define BLKTYPE '4' /* block special */
+#define DIRTYPE '5' /* directory */
+#define FIFOTYPE '6' /* FIFO special */
+#define CONTTYPE '7' /* reserved */
+
+/* GNU tar extensions */
+
+#define GNUTYPE_DUMPDIR 'D' /* file names from dumped directory */
+#define GNUTYPE_LONGLINK 'K' /* long link name */
+#define GNUTYPE_LONGNAME 'L' /* long file name */
+#define GNUTYPE_MULTIVOL 'M' /* continuation of file from another volume */
+#define GNUTYPE_NAMES 'N' /* file name that does not fit into main hdr */
+#define GNUTYPE_SPARSE 'S' /* sparse file */
+#define GNUTYPE_VOLHDR 'V' /* tape/volume header */
+
+
+/* tar header */
+
+#define BLOCKSIZE 512
+#define SHORTNAMESIZE 100
+
+struct tar_header
+{ /* byte offset */
+ char name[100]; /* 0 */
+ char mode[8]; /* 100 */
+ char uid[8]; /* 108 */
+ char gid[8]; /* 116 */
+ char size[12]; /* 124 */
+ char mtime[12]; /* 136 */
+ char chksum[8]; /* 148 */
+ char typeflag; /* 156 */
+ char linkname[100]; /* 157 */
+ char magic[6]; /* 257 */
+ char version[2]; /* 263 */
+ char uname[32]; /* 265 */
+ char gname[32]; /* 297 */
+ char devmajor[8]; /* 329 */
+ char devminor[8]; /* 337 */
+ char prefix[155]; /* 345 */
+ /* 500 */
+};
+
+union tar_buffer
+{
+ char buffer[BLOCKSIZE];
+ struct tar_header header;
+};
+
+struct attr_item
+{
+ struct attr_item *next;
+ char *fname;
+ int mode;
+ time_t time;
+};
+
+enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID };
+
+char *TGZfname OF((const char *));
+void TGZnotfound OF((const char *));
+
+int getoct OF((char *, int));
+char *strtime OF((time_t *));
+int setfiletime OF((char *, time_t));
+void push_attr OF((struct attr_item **, char *, int, time_t));
+void restore_attr OF((struct attr_item **));
+
+int ExprMatch OF((char *, char *));
+
+int makedir OF((char *));
+int matchname OF((int, int, char **, char *));
+
+void error OF((const char *));
+int tar OF((gzFile, int, int, int, char **));
+
+void help OF((int));
+int main OF((int, char **));
+
+char *prog;
+
+const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL };
+
+/* return the file name of the TGZ archive */
+/* or NULL if it does not exist */
+
+char *TGZfname (const char *arcname)
+{
+ static char buffer[1024];
+ int origlen,i;
+
+ strcpy(buffer,arcname);
+ origlen = strlen(buffer);
+
+ for (i=0; TGZsuffix[i]; i++)
+ {
+ strcpy(buffer+origlen,TGZsuffix[i]);
+ if (access(buffer,F_OK) == 0)
+ return buffer;
+ }
+ return NULL;
+}
+
+
+/* error message for the filename */
+
+void TGZnotfound (const char *arcname)
+{
+ int i;
+
+ fprintf(stderr,"%s: Couldn't find ",prog);
+ for (i=0;TGZsuffix[i];i++)
+ fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n",
+ arcname,
+ TGZsuffix[i]);
+ exit(1);
+}
+
+
+/* convert octal digits to int */
+/* on error return -1 */
+
+int getoct (char *p,int width)
+{
+ int result = 0;
+ char c;
+
+ while (width--)
+ {
+ c = *p++;
+ if (c == 0)
+ break;
+ if (c == ' ')
+ continue;
+ if (c < '0' || c > '7')
+ return -1;
+ result = result * 8 + (c - '0');
+ }
+ return result;
+}
+
+
+/* convert time_t to string */
+/* use the "YYYY/MM/DD hh:mm:ss" format */
+
+char *strtime (time_t *t)
+{
+ struct tm *local;
+ static char result[32];
+
+ local = localtime(t);
+ sprintf(result,"%4d/%02d/%02d %02d:%02d:%02d",
+ local->tm_year+1900, local->tm_mon+1, local->tm_mday,
+ local->tm_hour, local->tm_min, local->tm_sec);
+ return result;
+}
+
+
+/* set file time */
+
+int setfiletime (char *fname,time_t ftime)
+{
+#ifdef WIN32
+ static int isWinNT = -1;
+ SYSTEMTIME st;
+ FILETIME locft, modft;
+ struct tm *loctm;
+ HANDLE hFile;
+ int result;
+
+ loctm = localtime(&ftime);
+ if (loctm == NULL)
+ return -1;
+
+ st.wYear = (WORD)loctm->tm_year + 1900;
+ st.wMonth = (WORD)loctm->tm_mon + 1;
+ st.wDayOfWeek = (WORD)loctm->tm_wday;
+ st.wDay = (WORD)loctm->tm_mday;
+ st.wHour = (WORD)loctm->tm_hour;
+ st.wMinute = (WORD)loctm->tm_min;
+ st.wSecond = (WORD)loctm->tm_sec;
+ st.wMilliseconds = 0;
+ if (!SystemTimeToFileTime(&st, &locft) ||
+ !LocalFileTimeToFileTime(&locft, &modft))
+ return -1;
+
+ if (isWinNT < 0)
+ isWinNT = (GetVersion() < 0x80000000) ? 1 : 0;
+ hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING,
+ (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0),
+ NULL);
+ if (hFile == INVALID_HANDLE_VALUE)
+ return -1;
+ result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1;
+ CloseHandle(hFile);
+ return result;
+#else
+ struct utimbuf settime;
+
+ settime.actime = settime.modtime = ftime;
+ return utime(fname,&settime);
+#endif
+}
+
+
+/* push file attributes */
+
+void push_attr(struct attr_item **list,char *fname,int mode,time_t time)
+{
+ struct attr_item *item;
+
+ item = (struct attr_item *)malloc(sizeof(struct attr_item));
+ if (item == NULL)
+ error("Out of memory");
+ item->fname = strdup(fname);
+ item->mode = mode;
+ item->time = time;
+ item->next = *list;
+ *list = item;
+}
+
+
+/* restore file attributes */
+
+void restore_attr(struct attr_item **list)
+{
+ struct attr_item *item, *prev;
+
+ for (item = *list; item != NULL; )
+ {
+ setfiletime(item->fname,item->time);
+ chmod(item->fname,item->mode);
+ prev = item;
+ item = item->next;
+ free(prev);
+ }
+ *list = NULL;
+}
+
+
+/* match regular expression */
+
+#define ISSPECIAL(c) (((c) == '*') || ((c) == '/'))
+
+int ExprMatch (char *string,char *expr)
+{
+ while (1)
+ {
+ if (ISSPECIAL(*expr))
+ {
+ if (*expr == '/')
+ {
+ if (*string != '\\' && *string != '/')
+ return 0;
+ string ++; expr++;
+ }
+ else if (*expr == '*')
+ {
+ if (*expr ++ == 0)
+ return 1;
+ while (*++string != *expr)
+ if (*string == 0)
+ return 0;
+ }
+ }
+ else
+ {
+ if (*string != *expr)
+ return 0;
+ if (*expr++ == 0)
+ return 1;
+ string++;
+ }
+ }
+}
+
+
+/* recursive mkdir */
+/* abort on ENOENT; ignore other errors like "directory already exists" */
+/* return 1 if OK */
+/* 0 on error */
+
+int makedir (char *newdir)
+{
+ char *buffer = strdup(newdir);
+ char *p;
+ int len = strlen(buffer);
+
+ if (len <= 0) {
+ free(buffer);
+ return 0;
+ }
+ if (buffer[len-1] == '/') {
+ buffer[len-1] = '\0';
+ }
+ if (mkdir(buffer, 0755) == 0)
+ {
+ free(buffer);
+ return 1;
+ }
+
+ p = buffer+1;
+ while (1)
+ {
+ char hold;
+
+ while(*p && *p != '\\' && *p != '/')
+ p++;
+ hold = *p;
+ *p = 0;
+ if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT))
+ {
+ fprintf(stderr,"%s: Couldn't create directory %s\n",prog,buffer);
+ free(buffer);
+ return 0;
+ }
+ if (hold == 0)
+ break;
+ *p++ = hold;
+ }
+ free(buffer);
+ return 1;
+}
+
+
+int matchname (int arg,int argc,char **argv,char *fname)
+{
+ if (arg == argc) /* no arguments given (untgz tgzarchive) */
+ return 1;
+
+ while (arg < argc)
+ if (ExprMatch(fname,argv[arg++]))
+ return 1;
+
+ return 0; /* ignore this for the moment being */
+}
+
+
+/* tar file list or extract */
+
+int tar (gzFile in,int action,int arg,int argc,char **argv)
+{
+ union tar_buffer buffer;
+ int len;
+ int err;
+ int getheader = 1;
+ int remaining = 0;
+ FILE *outfile = NULL;
+ char fname[BLOCKSIZE];
+ int tarmode;
+ time_t tartime;
+ struct attr_item *attributes = NULL;
+
+ if (action == TGZ_LIST)
+ printf(" date time size file\n"
+ " ---------- -------- --------- -------------------------------------\n");
+ while (1)
+ {
+ len = gzread(in, &buffer, BLOCKSIZE);
+ if (len < 0)
+ error(gzerror(in, &err));
+ /*
+ * Always expect complete blocks to process
+ * the tar information.
+ */
+ if (len != BLOCKSIZE)
+ {
+ action = TGZ_INVALID; /* force error exit */
+ remaining = 0; /* force I/O cleanup */
+ }
+
+ /*
+ * If we have to get a tar header
+ */
+ if (getheader >= 1)
+ {
+ /*
+ * if we met the end of the tar
+ * or the end-of-tar block,
+ * we are done
+ */
+ if (len == 0 || buffer.header.name[0] == 0)
+ break;
+
+ tarmode = getoct(buffer.header.mode,8);
+ tartime = (time_t)getoct(buffer.header.mtime,12);
+ if (tarmode == -1 || tartime == (time_t)-1)
+ {
+ buffer.header.name[0] = 0;
+ action = TGZ_INVALID;
+ }
+
+ if (getheader == 1)
+ {
+ strncpy(fname,buffer.header.name,SHORTNAMESIZE);
+ if (fname[SHORTNAMESIZE-1] != 0)
+ fname[SHORTNAMESIZE] = 0;
+ }
+ else
+ {
+ /*
+ * The file name is longer than SHORTNAMESIZE
+ */
+ if (strncmp(fname,buffer.header.name,SHORTNAMESIZE-1) != 0)
+ error("bad long name");
+ getheader = 1;
+ }
+
+ /*
+ * Act according to the type flag
+ */
+ switch (buffer.header.typeflag)
+ {
+ case DIRTYPE:
+ if (action == TGZ_LIST)
+ printf(" %s <dir> %s\n",strtime(&tartime),fname);
+ if (action == TGZ_EXTRACT)
+ {
+ makedir(fname);
+ push_attr(&attributes,fname,tarmode,tartime);
+ }
+ break;
+ case REGTYPE:
+ case AREGTYPE:
+ remaining = getoct(buffer.header.size,12);
+ if (remaining == -1)
+ {
+ action = TGZ_INVALID;
+ break;
+ }
+ if (action == TGZ_LIST)
+ printf(" %s %9d %s\n",strtime(&tartime),remaining,fname);
+ else if (action == TGZ_EXTRACT)
+ {
+ if (matchname(arg,argc,argv,fname))
+ {
+ outfile = fopen(fname,"wb");
+ if (outfile == NULL) {
+ /* try creating directory */
+ char *p = strrchr(fname, '/');
+ if (p != NULL) {
+ *p = '\0';
+ makedir(fname);
+ *p = '/';
+ outfile = fopen(fname,"wb");
+ }
+ }
+ if (outfile != NULL)
+ printf("Extracting %s\n",fname);
+ else
+ fprintf(stderr, "%s: Couldn't create %s",prog,fname);
+ }
+ else
+ outfile = NULL;
+ }
+ getheader = 0;
+ break;
+ case GNUTYPE_LONGLINK:
+ case GNUTYPE_LONGNAME:
+ remaining = getoct(buffer.header.size,12);
+ if (remaining < 0 || remaining >= BLOCKSIZE)
+ {
+ action = TGZ_INVALID;
+ break;
+ }
+ len = gzread(in, fname, BLOCKSIZE);
+ if (len < 0)
+ error(gzerror(in, &err));
+ if (fname[BLOCKSIZE-1] != 0 || (int)strlen(fname) > remaining)
+ {
+ action = TGZ_INVALID;
+ break;
+ }
+ getheader = 2;
+ break;
+ default:
+ if (action == TGZ_LIST)
+ printf(" %s <---> %s\n",strtime(&tartime),fname);
+ break;
+ }
+ }
+ else
+ {
+ unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining;
+
+ if (outfile != NULL)
+ {
+ if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes)
+ {
+ fprintf(stderr,
+ "%s: Error writing %s -- skipping\n",prog,fname);
+ fclose(outfile);
+ outfile = NULL;
+ remove(fname);
+ }
+ }
+ remaining -= bytes;
+ }
+
+ if (remaining == 0)
+ {
+ getheader = 1;
+ if (outfile != NULL)
+ {
+ fclose(outfile);
+ outfile = NULL;
+ if (action != TGZ_INVALID)
+ push_attr(&attributes,fname,tarmode,tartime);
+ }
+ }
+
+ /*
+ * Abandon if errors are found
+ */
+ if (action == TGZ_INVALID)
+ {
+ error("broken archive");
+ break;
+ }
+ }
+
+ /*
+ * Restore file modes and time stamps
+ */
+ restore_attr(&attributes);
+
+ if (gzclose(in) != Z_OK)
+ error("failed gzclose");
+
+ return 0;
+}
+
+
+/* ============================================================ */
+
+void help(int exitval)
+{
+ printf("untgz version 0.2.1\n"
+ " using zlib version %s\n\n",
+ zlibVersion());
+ printf("Usage: untgz file.tgz extract all files\n"
+ " untgz file.tgz fname ... extract selected files\n"
+ " untgz -l file.tgz list archive contents\n"
+ " untgz -h display this help\n");
+ exit(exitval);
+}
+
+void error(const char *msg)
+{
+ fprintf(stderr, "%s: %s\n", prog, msg);
+ exit(1);
+}
+
+
+/* ============================================================ */
+
+#if defined(WIN32) && defined(__GNUC__)
+int _CRT_glob = 0; /* disable argument globbing in MinGW */
+#endif
+
+int main(int argc,char **argv)
+{
+ int action = TGZ_EXTRACT;
+ int arg = 1;
+ char *TGZfile;
+ gzFile *f;
+
+ prog = strrchr(argv[0],'\\');
+ if (prog == NULL)
+ {
+ prog = strrchr(argv[0],'/');
+ if (prog == NULL)
+ {
+ prog = strrchr(argv[0],':');
+ if (prog == NULL)
+ prog = argv[0];
+ else
+ prog++;
+ }
+ else
+ prog++;
+ }
+ else
+ prog++;
+
+ if (argc == 1)
+ help(0);
+
+ if (strcmp(argv[arg],"-l") == 0)
+ {
+ action = TGZ_LIST;
+ if (argc == ++arg)
+ help(0);
+ }
+ else if (strcmp(argv[arg],"-h") == 0)
+ {
+ help(0);
+ }
+
+ if ((TGZfile = TGZfname(argv[arg])) == NULL)
+ TGZnotfound(argv[arg]);
+
+ ++arg;
+ if ((action == TGZ_LIST) && (arg != argc))
+ help(1);
+
+/*
+ * Process the TGZ file
+ */
+ switch(action)
+ {
+ case TGZ_LIST:
+ case TGZ_EXTRACT:
+ f = gzopen(TGZfile,"rb");
+ if (f == NULL)
+ {
+ fprintf(stderr,"%s: Couldn't gzopen %s\n",prog,TGZfile);
+ return 1;
+ }
+ exit(tar(f, action, arg, argc, argv));
+ break;
+
+ default:
+ error("Unknown option");
+ exit(1);
+ }
+
+ return 0;
+}
diff --git a/compat/zlib/contrib/vstudio/readme.txt b/compat/zlib/contrib/vstudio/readme.txt
new file mode 100644
index 0000000..bfdcd9d
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/readme.txt
@@ -0,0 +1,65 @@
+Building instructions for the DLL versions of Zlib 1.2.8
+========================================================
+
+This directory contains projects that build zlib and minizip using
+Microsoft Visual C++ 9.0/10.0.
+
+You don't need to build these projects yourself. You can download the
+binaries from:
+ http://www.winimage.com/zLibDll
+
+More information can be found at this site.
+
+
+
+
+
+Build instructions for Visual Studio 2008 (32 bits or 64 bits)
+--------------------------------------------------------------
+- Uncompress current zlib, including all contrib/* files
+- Compile assembly code (with Visual Studio Command Prompt) by running:
+ bld_ml64.bat (in contrib\masmx64)
+ bld_ml32.bat (in contrib\masmx86)
+- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008
+- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32"
+
+Build instructions for Visual Studio 2010 (32 bits or 64 bits)
+--------------------------------------------------------------
+- Uncompress current zlib, including all contrib/* files
+- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010
+
+Build instructions for Visual Studio 2012 (32 bits or 64 bits)
+--------------------------------------------------------------
+- Uncompress current zlib, including all contrib/* files
+- Open contrib\vstudio\vc11\zlibvc.sln with Microsoft Visual C++ 2012
+
+
+Important
+---------
+- To use zlibwapi.dll in your application, you must define the
+ macro ZLIB_WINAPI when compiling your application's source files.
+
+
+Additional notes
+----------------
+- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built
+ by Gilles Vollant from the zlib 1.1.x sources, and distributed at
+ http://www.winimage.com/zLibDll
+ It uses the WINAPI calling convention for the exported functions, and
+ includes the minizip functionality. If your application needs that
+ particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll.
+
+- The new DLL was renamed because there exist several incompatible
+ versions of zlib.dll on the Internet.
+
+- There is also an official DLL build of zlib, named zlib1.dll. This one
+ is exporting the functions using the CDECL convention. See the file
+ win32\DLL_FAQ.txt found in this zlib distribution.
+
+- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol
+ has a slightly different effect. To avoid compatibility problems, do
+ not define it here.
+
+
+Gilles Vollant
+info@winimage.com
diff --git a/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj b/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj
new file mode 100644
index 0000000..74e15c9
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
new file mode 100644
index 0000000..0b2a3de
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{048af943-022b-4db6-beeb-a54c34774ee2}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c1d600d2-888f-4aea-b73e-8b0dd9befa0c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{0844199a-966b-4f19-81db-1e0125e141b9}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj b/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj
new file mode 100644
index 0000000..917e156
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj
@@ -0,0 +1,307 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
new file mode 100644
index 0000000..dd73cd3
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c0419b40-bf50-40da-b153-ff74215b79de}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{bb87b070-735b-478e-92ce-7383abb2f36c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{f46ab6a6-548f-43cb-ae96-681abb5bd5db}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj b/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj
new file mode 100644
index 0000000..9088d17
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj
@@ -0,0 +1,420 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <RootNamespace>testzlib</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
new file mode 100644
index 0000000..249daa8
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{c1f6a2e3-5da5-4955-8653-310d3efe05a9}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{c2aaffdc-2c95-4d6f-8466-4bec5890af2c}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{c274fe07-05f2-461c-964b-f6341e4e7eb5}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj b/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
new file mode 100644
index 0000000..bcb08ff
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj
@@ -0,0 +1,310 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
new file mode 100644
index 0000000..53a8693
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{fa61a89f-93fc-4c89-b29e-36224b7592f4}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;def;odl;idl;hpj;bat;asm</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{d4b85da0-2ba2-4934-b57f-e2584e3848ee}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;inc</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{e573e075-00bd-4a7d-bd67-a8cc9bfc5aca}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/zlib.rc b/compat/zlib/contrib/vstudio/vc10/zlib.rc
new file mode 100644
index 0000000..73f6476
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,0
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+ FILEFLAGS 0
+ FILEOS VOS_DOS_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0 // not used
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ //language ID = U.S. English, char set = Windows, Multilingual
+
+ BEGIN
+ VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
+ VALUE "FileVersion", "1.2.8\0"
+ VALUE "InternalName", "zlib\0"
+ VALUE "OriginalFilename", "zlibwapi.dll\0"
+ VALUE "ProductName", "ZLib.DLL\0"
+ VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
+ VALUE "LegalCopyright", "(C) 1995-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj b/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
new file mode 100644
index 0000000..b9f2bbe
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj
@@ -0,0 +1,473 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c" />
+ <ClCompile Include="..\..\minizip\zip.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
new file mode 100644
index 0000000..c8c7f7e
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters
@@ -0,0 +1,77 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibvc.def b/compat/zlib/contrib/vstudio/vc10/zlibvc.def
new file mode 100644
index 0000000..6367046
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+VERSION 1.2.8
+
+EXPORTS
+ adler32 @1
+ compress @2
+ crc32 @3
+ deflate @4
+ deflateCopy @5
+ deflateEnd @6
+ deflateInit2_ @7
+ deflateInit_ @8
+ deflateParams @9
+ deflateReset @10
+ deflateSetDictionary @11
+ gzclose @12
+ gzdopen @13
+ gzerror @14
+ gzflush @15
+ gzopen @16
+ gzread @17
+ gzwrite @18
+ inflate @19
+ inflateEnd @20
+ inflateInit2_ @21
+ inflateInit_ @22
+ inflateReset @23
+ inflateSetDictionary @24
+ inflateSync @25
+ uncompress @26
+ zlibVersion @27
+ gzprintf @28
+ gzputc @29
+ gzgetc @30
+ gzseek @31
+ gzrewind @32
+ gztell @33
+ gzeof @34
+ gzsetparams @35
+ zError @36
+ inflateSyncPoint @37
+ get_crc_table @38
+ compress2 @39
+ gzputs @40
+ gzgets @41
+ inflateCopy @42
+ inflateBackInit_ @43
+ inflateBack @44
+ inflateBackEnd @45
+ compressBound @46
+ deflateBound @47
+ gzclearerr @48
+ gzungetc @49
+ zlibCompileFlags @50
+ deflatePrime @51
+ deflatePending @52
+
+ unzOpen @61
+ unzClose @62
+ unzGetGlobalInfo @63
+ unzGetCurrentFileInfo @64
+ unzGoToFirstFile @65
+ unzGoToNextFile @66
+ unzOpenCurrentFile @67
+ unzReadCurrentFile @68
+ unzOpenCurrentFile3 @69
+ unztell @70
+ unzeof @71
+ unzCloseCurrentFile @72
+ unzGetGlobalComment @73
+ unzStringFileNameCompare @74
+ unzLocateFile @75
+ unzGetLocalExtrafield @76
+ unzOpen2 @77
+ unzOpenCurrentFile2 @78
+ unzOpenCurrentFilePassword @79
+
+ zipOpen @80
+ zipOpenNewFileInZip @81
+ zipWriteInFileInZip @82
+ zipCloseFileInZip @83
+ zipClose @84
+ zipOpenNewFileInZip2 @86
+ zipCloseFileInZipRaw @87
+ zipOpen2 @88
+ zipOpenNewFileInZip3 @89
+
+ unzGetFilePos @100
+ unzGoToFilePos @101
+
+ fill_win32_filefunc @110
+
+; zlibwapi v1.2.4 added:
+ fill_win32_filefunc64 @111
+ fill_win32_filefunc64A @112
+ fill_win32_filefunc64W @113
+
+ unzOpen64 @120
+ unzOpen2_64 @121
+ unzGetGlobalInfo64 @122
+ unzGetCurrentFileInfo64 @124
+ unzGetCurrentFileZStreamPos64 @125
+ unztell64 @126
+ unzGetFilePos64 @127
+ unzGoToFilePos64 @128
+
+ zipOpen64 @130
+ zipOpen2_64 @131
+ zipOpenNewFileInZip64 @132
+ zipOpenNewFileInZip2_64 @133
+ zipOpenNewFileInZip3_64 @134
+ zipOpenNewFileInZip4_64 @135
+ zipCloseFileInZipRaw64 @136
+
+; zlib1 v1.2.4 added:
+ adler32_combine @140
+ crc32_combine @142
+ deflateSetHeader @144
+ deflateTune @145
+ gzbuffer @146
+ gzclose_r @147
+ gzclose_w @148
+ gzdirect @149
+ gzoffset @150
+ inflateGetHeader @156
+ inflateMark @157
+ inflatePrime @158
+ inflateReset2 @159
+ inflateUndermine @160
+
+; zlib1 v1.2.6 added:
+ gzgetc_ @161
+ inflateResetKeep @163
+ deflateResetKeep @164
+
+; zlib1 v1.2.7 added:
+ gzopen_w @165
+
+; zlib1 v1.2.8 added:
+ inflateGetDictionary @166
+ gzvprintf @167
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibvc.sln b/compat/zlib/contrib/vstudio/vc10/zlibvc.sln
new file mode 100644
index 0000000..6f6ffd5
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibvc.sln
@@ -0,0 +1,135 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Itanium = Debug|Itanium
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Itanium = Release|Itanium
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium
+ ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
+ ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj b/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
new file mode 100644
index 0000000..6ff9ddb
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj
@@ -0,0 +1,657 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">zlibwapid</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">zlibwapid</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">zlibwapi</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <SubSystem>Windows</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\minizip\iowin32.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h" />
+ <ClInclude Include="..\..\..\infblock.h" />
+ <ClInclude Include="..\..\..\infcodes.h" />
+ <ClInclude Include="..\..\..\inffast.h" />
+ <ClInclude Include="..\..\..\inftrees.h" />
+ <ClInclude Include="..\..\..\infutil.h" />
+ <ClInclude Include="..\..\..\zconf.h" />
+ <ClInclude Include="..\..\..\zlib.h" />
+ <ClInclude Include="..\..\..\zutil.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
new file mode 100644
index 0000000..180b71c
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{07934a85-8b61-443d-a0ee-b2eedb74f3cd}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{1d99675b-433d-4a21-9e50-ed4ab8b19762}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl;fi;fd</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{431c0958-fa71-44d0-9084-2d19d100c0cc}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\compress.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\crc32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\deflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzclose.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzlib.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzread.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\gzwrite.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\infback.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inflate.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inftrees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\ioapi.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\iowin32.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\trees.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\uncompr.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc">
+ <Filter>Source Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infblock.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infcodes.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inffast.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\inftrees.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\infutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zconf.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zlib.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\..\..\zutil.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/miniunz.vcxproj b/compat/zlib/contrib/vstudio/vc11/miniunz.vcxproj
new file mode 100644
index 0000000..8f9f20b
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/miniunz.vcxproj
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694382A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\MiniUnzip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)miniunz.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)miniunz.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\miniunz.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/minizip.vcxproj b/compat/zlib/contrib/vstudio/vc11/minizip.vcxproj
new file mode 100644
index 0000000..c93d9e6
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/minizip.vcxproj
@@ -0,0 +1,311 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\MiniZip$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\$(Configuration)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)minizip.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)minizip.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\minizip\minizip.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/testzlib.vcxproj b/compat/zlib/contrib/vstudio/vc11/testzlib.vcxproj
new file mode 100644
index 0000000..6d55954
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/testzlib.vcxproj
@@ -0,0 +1,426 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}</ProjectGuid>
+ <RootNamespace>testzlib</RootNamespace>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlib$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerOutput>AssemblyAndSourceCode</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <OutputFile>$(OutDir)testzlib.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj b/compat/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
new file mode 100644
index 0000000..9f20c78
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj
@@ -0,0 +1,314 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{C52F9E7B-498A-42BE-8DB4-85A15694366A}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>Unicode</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>Application</ConfigurationType>
+ <CharacterSet>MultiByte</CharacterSet>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\TestZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)testzlib.pdb</ProgramDatabaseFile>
+ <SubSystem>Console</SubSystem>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <OmitFramePointers>true</OmitFramePointers>
+ <AdditionalIncludeDirectories>..\..\..;..\..\minizip;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BasicRuntimeChecks>Default</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <Link>
+ <AdditionalDependencies>ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)testzlibdll.exe</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <SubSystem>Console</SubSystem>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\testzlib\testzlib.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="zlibvc.vcxproj">
+ <Project>{8fd826f8-3739-44e6-8cc8-997122e53b8d}</Project>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/zlib.rc b/compat/zlib/contrib/vstudio/vc11/zlib.rc
new file mode 100644
index 0000000..73f6476
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,0
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+ FILEFLAGS 0
+ FILEOS VOS_DOS_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0 // not used
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ //language ID = U.S. English, char set = Windows, Multilingual
+
+ BEGIN
+ VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
+ VALUE "FileVersion", "1.2.8\0"
+ VALUE "InternalName", "zlib\0"
+ VALUE "OriginalFilename", "zlibwapi.dll\0"
+ VALUE "ProductName", "ZLib.DLL\0"
+ VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
+ VALUE "LegalCopyright", "(C) 1995-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/compat/zlib/contrib/vstudio/vc11/zlibstat.vcxproj b/compat/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
new file mode 100644
index 0000000..806b76a
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/zlibstat.vcxproj
@@ -0,0 +1,464 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibStat$(Configuration)\Tmp\</IntDir>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>OldStyle</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibstat.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Lib>
+ <AdditionalOptions>/MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibstat.lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c" />
+ <ClCompile Include="..\..\minizip\zip.c" />
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc11/zlibvc.def b/compat/zlib/contrib/vstudio/vc11/zlibvc.def
new file mode 100644
index 0000000..6367046
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+VERSION 1.2.8
+
+EXPORTS
+ adler32 @1
+ compress @2
+ crc32 @3
+ deflate @4
+ deflateCopy @5
+ deflateEnd @6
+ deflateInit2_ @7
+ deflateInit_ @8
+ deflateParams @9
+ deflateReset @10
+ deflateSetDictionary @11
+ gzclose @12
+ gzdopen @13
+ gzerror @14
+ gzflush @15
+ gzopen @16
+ gzread @17
+ gzwrite @18
+ inflate @19
+ inflateEnd @20
+ inflateInit2_ @21
+ inflateInit_ @22
+ inflateReset @23
+ inflateSetDictionary @24
+ inflateSync @25
+ uncompress @26
+ zlibVersion @27
+ gzprintf @28
+ gzputc @29
+ gzgetc @30
+ gzseek @31
+ gzrewind @32
+ gztell @33
+ gzeof @34
+ gzsetparams @35
+ zError @36
+ inflateSyncPoint @37
+ get_crc_table @38
+ compress2 @39
+ gzputs @40
+ gzgets @41
+ inflateCopy @42
+ inflateBackInit_ @43
+ inflateBack @44
+ inflateBackEnd @45
+ compressBound @46
+ deflateBound @47
+ gzclearerr @48
+ gzungetc @49
+ zlibCompileFlags @50
+ deflatePrime @51
+ deflatePending @52
+
+ unzOpen @61
+ unzClose @62
+ unzGetGlobalInfo @63
+ unzGetCurrentFileInfo @64
+ unzGoToFirstFile @65
+ unzGoToNextFile @66
+ unzOpenCurrentFile @67
+ unzReadCurrentFile @68
+ unzOpenCurrentFile3 @69
+ unztell @70
+ unzeof @71
+ unzCloseCurrentFile @72
+ unzGetGlobalComment @73
+ unzStringFileNameCompare @74
+ unzLocateFile @75
+ unzGetLocalExtrafield @76
+ unzOpen2 @77
+ unzOpenCurrentFile2 @78
+ unzOpenCurrentFilePassword @79
+
+ zipOpen @80
+ zipOpenNewFileInZip @81
+ zipWriteInFileInZip @82
+ zipCloseFileInZip @83
+ zipClose @84
+ zipOpenNewFileInZip2 @86
+ zipCloseFileInZipRaw @87
+ zipOpen2 @88
+ zipOpenNewFileInZip3 @89
+
+ unzGetFilePos @100
+ unzGoToFilePos @101
+
+ fill_win32_filefunc @110
+
+; zlibwapi v1.2.4 added:
+ fill_win32_filefunc64 @111
+ fill_win32_filefunc64A @112
+ fill_win32_filefunc64W @113
+
+ unzOpen64 @120
+ unzOpen2_64 @121
+ unzGetGlobalInfo64 @122
+ unzGetCurrentFileInfo64 @124
+ unzGetCurrentFileZStreamPos64 @125
+ unztell64 @126
+ unzGetFilePos64 @127
+ unzGoToFilePos64 @128
+
+ zipOpen64 @130
+ zipOpen2_64 @131
+ zipOpenNewFileInZip64 @132
+ zipOpenNewFileInZip2_64 @133
+ zipOpenNewFileInZip3_64 @134
+ zipOpenNewFileInZip4_64 @135
+ zipCloseFileInZipRaw64 @136
+
+; zlib1 v1.2.4 added:
+ adler32_combine @140
+ crc32_combine @142
+ deflateSetHeader @144
+ deflateTune @145
+ gzbuffer @146
+ gzclose_r @147
+ gzclose_w @148
+ gzdirect @149
+ gzoffset @150
+ inflateGetHeader @156
+ inflateMark @157
+ inflatePrime @158
+ inflateReset2 @159
+ inflateUndermine @160
+
+; zlib1 v1.2.6 added:
+ gzgetc_ @161
+ inflateResetKeep @163
+ deflateResetKeep @164
+
+; zlib1 v1.2.7 added:
+ gzopen_w @165
+
+; zlib1 v1.2.8 added:
+ inflateGetDictionary @166
+ gzvprintf @167
diff --git a/compat/zlib/contrib/vstudio/vc11/zlibvc.sln b/compat/zlib/contrib/vstudio/vc11/zlibvc.sln
new file mode 100644
index 0000000..9fcbafd
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/zlibvc.sln
@@ -0,0 +1,117 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 2012
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Itanium = Debug|Itanium
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Itanium = Release|Itanium
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium
+ ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
+ ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/compat/zlib/contrib/vstudio/vc11/zlibvc.vcxproj b/compat/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
new file mode 100644
index 0000000..c65b95f
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc11/zlibvc.vcxproj
@@ -0,0 +1,688 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Itanium">
+ <Configuration>Debug</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Itanium">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|Win32">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="ReleaseWithoutAsm|x64">
+ <Configuration>ReleaseWithoutAsm</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Itanium">
+ <Configuration>Release</Configuration>
+ <Platform>Itanium</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{8FD826F8-3739-44E6-8CC8-997122E53B8D}</ProjectGuid>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <PlatformToolset>v110</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30128.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">x86\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">x64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</GenerateManifest>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ia64\ZlibDll$(Configuration)\Tmp\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</LinkIncremental>
+ <GenerateManifest Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">false</GenerateManifest>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">zlibwapi</TargetName>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">zlibwapi</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/MACHINE:I386 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>..\..\masmx86\match686.obj;..\..\masmx86\inffas32.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx86
+bld_ml32.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\contrib\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>..\..\masmx64\gvmat64.obj;..\..\masmx64\inffasx64.obj;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <PreBuildEvent>
+ <Command>cd ..\..\masmx64
+bld_ml64.bat</Command>
+ </PreBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Itanium</TargetEnvironment>
+ <TypeLibraryName>$(OutDir)zlibvc.tlb</TypeLibraryName>
+ </Midl>
+ <ClCompile>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>..\..\..;..\..\masmx86;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>$(IntDir)zlibvc.pch</PrecompiledHeaderOutputFile>
+ <AssemblerOutput>All</AssemblerOutput>
+ <AssemblerListingLocation>$(IntDir)</AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(OutDir)</ProgramDataBaseFileName>
+ <BrowseInformation>
+ </BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x040c</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)zlibwapi.dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <IgnoreAllDefaultLibraries>false</IgnoreAllDefaultLibraries>
+ <ModuleDefinitionFile>.\zlibvc.def</ModuleDefinitionFile>
+ <ProgramDatabaseFile>$(OutDir)zlibwapi.pdb</ProgramDatabaseFile>
+ <GenerateMapFile>true</GenerateMapFile>
+ <MapFileName>$(OutDir)zlibwapi.map</MapFileName>
+ <SubSystem>Windows</SubSystem>
+ <ImportLibrary>$(OutDir)zlibwapi.lib</ImportLibrary>
+ <TargetMachine>MachineIA64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\..\..\adler32.c" />
+ <ClCompile Include="..\..\..\compress.c" />
+ <ClCompile Include="..\..\..\crc32.c" />
+ <ClCompile Include="..\..\..\deflate.c" />
+ <ClCompile Include="..\..\..\gzclose.c" />
+ <ClCompile Include="..\..\..\gzlib.c" />
+ <ClCompile Include="..\..\..\gzread.c" />
+ <ClCompile Include="..\..\..\gzwrite.c" />
+ <ClCompile Include="..\..\..\infback.c" />
+ <ClCompile Include="..\..\masmx64\inffas8664.c">
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='ReleaseWithoutAsm|Win32'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">true</ExcludedFromBuild>
+ <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+ </ClCompile>
+ <ClCompile Include="..\..\..\inffast.c" />
+ <ClCompile Include="..\..\..\inflate.c" />
+ <ClCompile Include="..\..\..\inftrees.c" />
+ <ClCompile Include="..\..\minizip\ioapi.c" />
+ <ClCompile Include="..\..\minizip\iowin32.c" />
+ <ClCompile Include="..\..\..\trees.c" />
+ <ClCompile Include="..\..\..\uncompr.c" />
+ <ClCompile Include="..\..\minizip\unzip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\minizip\zip.c">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Itanium'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">ZLIB_INTERNAL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="..\..\..\zutil.c" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="zlib.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="zlibvc.def" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="..\..\..\deflate.h" />
+ <ClInclude Include="..\..\..\infblock.h" />
+ <ClInclude Include="..\..\..\infcodes.h" />
+ <ClInclude Include="..\..\..\inffast.h" />
+ <ClInclude Include="..\..\..\inftrees.h" />
+ <ClInclude Include="..\..\..\infutil.h" />
+ <ClInclude Include="..\..\..\zconf.h" />
+ <ClInclude Include="..\..\..\zlib.h" />
+ <ClInclude Include="..\..\..\zutil.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/compat/zlib/contrib/vstudio/vc9/miniunz.vcproj b/compat/zlib/contrib/vstudio/vc9/miniunz.vcproj
new file mode 100644
index 0000000..7da32b9
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/miniunz.vcproj
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="miniunz"
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/miniunz.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="x64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\MiniUnzip$(ConfigurationName)"
+ IntermediateDirectory="ia64\MiniUnzip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/miniunz.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\minizip\miniunz.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/contrib/vstudio/vc9/minizip.vcproj b/compat/zlib/contrib/vstudio/vc9/minizip.vcproj
new file mode 100644
index 0000000..e57e07d
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/minizip.vcproj
@@ -0,0 +1,562 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="minizip"
+ ProjectGUID="{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\MiniZip$(ConfigurationName)"
+ IntermediateDirectory="x86\MiniZip$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\$(ConfigurationName)"
+ IntermediateDirectory="x64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\$(ConfigurationName)"
+ IntermediateDirectory="ia64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/minizip.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\$(ConfigurationName)"
+ IntermediateDirectory="x64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\$(ConfigurationName)"
+ IntermediateDirectory="ia64\$(ConfigurationName)"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/minizip.exe"
+ LinkIncremental="1"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\minizip\minizip.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/contrib/vstudio/vc9/testzlib.vcproj b/compat/zlib/contrib/vstudio/vc9/testzlib.vcproj
new file mode 100644
index 0000000..9cb0bf8
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/testzlib.vcproj
@@ -0,0 +1,852 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="testzlib"
+ ProjectGUID="{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+ RootNamespace="testzlib"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="4"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerOutput="4"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies=""
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ASMV;ASMINF;WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ AssemblerListingLocation="$(IntDir)\"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj"
+ GenerateManifest="false"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\TestZlib$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlib$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ CharacterSet="2"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\.."
+ PreprocessorDefinitions="ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\testzlib\testzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/contrib/vstudio/vc9/testzlibdll.vcproj b/compat/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
new file mode 100644
index 0000000..b1ddde0
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/testzlibdll.vcproj
@@ -0,0 +1,565 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9.00"
+ Name="TestZlibDll"
+ ProjectGUID="{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+ Keyword="Win32Proj"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x86\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllDebug\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="2"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/testzlib.pdb"
+ SubSystem="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="x64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\TestZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\TestZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="1"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ OmitFramePointers="true"
+ AdditionalIncludeDirectories="..\..\..;..\..\minizip"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64"
+ StringPooling="true"
+ BasicRuntimeChecks="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ AssemblerListingLocation="$(IntDir)\"
+ WarningLevel="3"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ia64\ZlibDllRelease\zlibwapi.lib"
+ OutputFile="$(OutDir)/testzlib.exe"
+ LinkIncremental="1"
+ GenerateManifest="false"
+ GenerateDebugInformation="true"
+ SubSystem="1"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;def;odl;idl;hpj;bat;asm"
+ >
+ <File
+ RelativePath="..\..\testzlib\testzlib.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;inc"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/contrib/vstudio/vc9/zlib.rc b/compat/zlib/contrib/vstudio/vc9/zlib.rc
new file mode 100644
index 0000000..73f6476
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/zlib.rc
@@ -0,0 +1,32 @@
+#include <windows.h>
+
+#define IDR_VERSION1 1
+IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE
+ FILEVERSION 1,2,8,0
+ PRODUCTVERSION 1,2,8,0
+ FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
+ FILEFLAGS 0
+ FILEOS VOS_DOS_WINDOWS32
+ FILETYPE VFT_DLL
+ FILESUBTYPE 0 // not used
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904E4"
+ //language ID = U.S. English, char set = Windows, Multilingual
+
+ BEGIN
+ VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0"
+ VALUE "FileVersion", "1.2.8\0"
+ VALUE "InternalName", "zlib\0"
+ VALUE "OriginalFilename", "zlibwapi.dll\0"
+ VALUE "ProductName", "ZLib.DLL\0"
+ VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0"
+ VALUE "LegalCopyright", "(C) 1995-2013 Jean-loup Gailly & Mark Adler\0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0409, 1252
+ END
+END
diff --git a/compat/zlib/contrib/vstudio/vc9/zlibstat.vcproj b/compat/zlib/contrib/vstudio/vc9/zlibstat.vcproj
new file mode 100644
index 0000000..61c76c7
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/zlibstat.vcproj
@@ -0,0 +1,835 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="zlibstat"
+ ProjectGUID="{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ ExceptionHandling="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="1"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ASMV;ASMINF;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:X86 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:AMD64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\ZlibStat$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibStat$(ConfigurationName)\Tmp"
+ ConfigurationType="4"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="2"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibstat.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ AdditionalOptions="/MACHINE:IA64 /NODEFAULTLIB"
+ OutputFile="$(OutDir)\zlibstat.lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzwrite.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\ioapi.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\unzip.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\zip.c"
+ >
+ </File>
+ <File
+ RelativePath=".\zlib.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\zlibvc.def"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/contrib/vstudio/vc9/zlibvc.def b/compat/zlib/contrib/vstudio/vc9/zlibvc.def
new file mode 100644
index 0000000..6367046
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/zlibvc.def
@@ -0,0 +1,143 @@
+LIBRARY
+; zlib data compression and ZIP file I/O library
+
+VERSION 1.2.8
+
+EXPORTS
+ adler32 @1
+ compress @2
+ crc32 @3
+ deflate @4
+ deflateCopy @5
+ deflateEnd @6
+ deflateInit2_ @7
+ deflateInit_ @8
+ deflateParams @9
+ deflateReset @10
+ deflateSetDictionary @11
+ gzclose @12
+ gzdopen @13
+ gzerror @14
+ gzflush @15
+ gzopen @16
+ gzread @17
+ gzwrite @18
+ inflate @19
+ inflateEnd @20
+ inflateInit2_ @21
+ inflateInit_ @22
+ inflateReset @23
+ inflateSetDictionary @24
+ inflateSync @25
+ uncompress @26
+ zlibVersion @27
+ gzprintf @28
+ gzputc @29
+ gzgetc @30
+ gzseek @31
+ gzrewind @32
+ gztell @33
+ gzeof @34
+ gzsetparams @35
+ zError @36
+ inflateSyncPoint @37
+ get_crc_table @38
+ compress2 @39
+ gzputs @40
+ gzgets @41
+ inflateCopy @42
+ inflateBackInit_ @43
+ inflateBack @44
+ inflateBackEnd @45
+ compressBound @46
+ deflateBound @47
+ gzclearerr @48
+ gzungetc @49
+ zlibCompileFlags @50
+ deflatePrime @51
+ deflatePending @52
+
+ unzOpen @61
+ unzClose @62
+ unzGetGlobalInfo @63
+ unzGetCurrentFileInfo @64
+ unzGoToFirstFile @65
+ unzGoToNextFile @66
+ unzOpenCurrentFile @67
+ unzReadCurrentFile @68
+ unzOpenCurrentFile3 @69
+ unztell @70
+ unzeof @71
+ unzCloseCurrentFile @72
+ unzGetGlobalComment @73
+ unzStringFileNameCompare @74
+ unzLocateFile @75
+ unzGetLocalExtrafield @76
+ unzOpen2 @77
+ unzOpenCurrentFile2 @78
+ unzOpenCurrentFilePassword @79
+
+ zipOpen @80
+ zipOpenNewFileInZip @81
+ zipWriteInFileInZip @82
+ zipCloseFileInZip @83
+ zipClose @84
+ zipOpenNewFileInZip2 @86
+ zipCloseFileInZipRaw @87
+ zipOpen2 @88
+ zipOpenNewFileInZip3 @89
+
+ unzGetFilePos @100
+ unzGoToFilePos @101
+
+ fill_win32_filefunc @110
+
+; zlibwapi v1.2.4 added:
+ fill_win32_filefunc64 @111
+ fill_win32_filefunc64A @112
+ fill_win32_filefunc64W @113
+
+ unzOpen64 @120
+ unzOpen2_64 @121
+ unzGetGlobalInfo64 @122
+ unzGetCurrentFileInfo64 @124
+ unzGetCurrentFileZStreamPos64 @125
+ unztell64 @126
+ unzGetFilePos64 @127
+ unzGoToFilePos64 @128
+
+ zipOpen64 @130
+ zipOpen2_64 @131
+ zipOpenNewFileInZip64 @132
+ zipOpenNewFileInZip2_64 @133
+ zipOpenNewFileInZip3_64 @134
+ zipOpenNewFileInZip4_64 @135
+ zipCloseFileInZipRaw64 @136
+
+; zlib1 v1.2.4 added:
+ adler32_combine @140
+ crc32_combine @142
+ deflateSetHeader @144
+ deflateTune @145
+ gzbuffer @146
+ gzclose_r @147
+ gzclose_w @148
+ gzdirect @149
+ gzoffset @150
+ inflateGetHeader @156
+ inflateMark @157
+ inflatePrime @158
+ inflateReset2 @159
+ inflateUndermine @160
+
+; zlib1 v1.2.6 added:
+ gzgetc_ @161
+ inflateResetKeep @163
+ deflateResetKeep @164
+
+; zlib1 v1.2.7 added:
+ gzopen_w @165
+
+; zlib1 v1.2.8 added:
+ inflateGetDictionary @166
+ gzvprintf @167
diff --git a/compat/zlib/contrib/vstudio/vc9/zlibvc.sln b/compat/zlib/contrib/vstudio/vc9/zlibvc.sln
new file mode 100644
index 0000000..b482967
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/zlibvc.sln
@@ -0,0 +1,144 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}"
+ ProjectSection(ProjectDependencies) = postProject
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D}
+ EndProjectSection
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Itanium = Debug|Itanium
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Itanium = Release|Itanium
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium
+ ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32
+ ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64
+ {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32
+ {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/compat/zlib/contrib/vstudio/vc9/zlibvc.vcproj b/compat/zlib/contrib/vstudio/vc9/zlibvc.vcproj
new file mode 100644
index 0000000..c9a8947
--- /dev/null
+++ b/compat/zlib/contrib/vstudio/vc9/zlibvc.vcproj
@@ -0,0 +1,1156 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="zlibvc"
+ ProjectGUID="{8FD826F8-3739-44E6-8CC8-997122E53B8D}"
+ RootNamespace="zlibvc"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ <Platform
+ Name="Itanium"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
+ ExceptionHandling="0"
+ RuntimeLibrary="1"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="false"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ GenerateDebugInformation="true"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="ReleaseWithoutAsm|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="x86\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x86\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="0"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalOptions="/MACHINE:I386"
+ AdditionalDependencies="..\..\masmx86\match686.obj ..\..\masmx86\inffas32.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="x64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="x64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;ASMV;ASMINF;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="..\..\masmx64\gvmat64.obj ..\..\masmx64\inffasx64.obj "
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Itanium"
+ OutputDirectory="ia64\ZlibDll$(ConfigurationName)"
+ IntermediateDirectory="ia64\ZlibDll$(ConfigurationName)\Tmp"
+ ConfigurationType="2"
+ InheritedPropertySheets="UpgradeFromVC70.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="2"
+ TypeLibraryName="$(OutDir)/zlibvc.tlb"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..\..\..;..\..\masmx86"
+ PreprocessorDefinitions="_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="false"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile="$(IntDir)/zlibvc.pch"
+ AssemblerOutput="2"
+ AssemblerListingLocation="$(IntDir)\"
+ ObjectFile="$(IntDir)\"
+ ProgramDataBaseFileName="$(OutDir)\"
+ BrowseInformation="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1036"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\zlibwapi.dll"
+ LinkIncremental="1"
+ SuppressStartupBanner="true"
+ GenerateManifest="false"
+ IgnoreAllDefaultLibraries="false"
+ ModuleDefinitionFile=".\zlibvc.def"
+ ProgramDatabaseFile="$(OutDir)/zlibwapi.pdb"
+ GenerateMapFile="true"
+ MapFileName="$(OutDir)/zlibwapi.map"
+ SubSystem="2"
+ OptimizeForWindows98="1"
+ ImportLibrary="$(OutDir)/zlibwapi.lib"
+ TargetMachine="5"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90"
+ >
+ <File
+ RelativePath="..\..\..\adler32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\compress.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\crc32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\deflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzclose.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzguts.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzlib.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzread.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\gzwrite.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infback.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\masmx64\inffas8664.c"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="ReleaseWithoutAsm|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ ExcludedFromBuild="true"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inflate.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\ioapi.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\iowin32.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\trees.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\uncompr.c"
+ >
+ </File>
+ <File
+ RelativePath="..\..\minizip\unzip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\minizip\zip.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Itanium"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ AdditionalIncludeDirectories=""
+ PreprocessorDefinitions="ZLIB_INTERNAL"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\zlib.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\zlibvc.def"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.c"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl;fi;fd"
+ >
+ <File
+ RelativePath="..\..\..\deflate.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infblock.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infcodes.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inffast.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\inftrees.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\infutil.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zconf.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zlib.h"
+ >
+ </File>
+ <File
+ RelativePath="..\..\..\zutil.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/compat/zlib/crc32.c b/compat/zlib/crc32.c
new file mode 100644
index 0000000..979a719
--- /dev/null
+++ b/compat/zlib/crc32.c
@@ -0,0 +1,425 @@
+/* crc32.c -- compute the CRC-32 of a data stream
+ * Copyright (C) 1995-2006, 2010, 2011, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ *
+ * Thanks to Rodney Brown <rbrown64@csc.com.au> for his contribution of faster
+ * CRC methods: exclusive-oring 32 bits of data at a time, and pre-computing
+ * tables for updating the shift register in one step with three exclusive-ors
+ * instead of four steps with four exclusive-ors. This results in about a
+ * factor of two increase in speed on a Power PC G4 (PPC7455) using gcc -O3.
+ */
+
+/* @(#) $Id$ */
+
+/*
+ Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore
+ protection on the static variables used to control the first-use generation
+ of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should
+ first call get_crc_table() to initialize the tables before allowing more than
+ one thread to use crc32().
+
+ DYNAMIC_CRC_TABLE and MAKECRCH can be #defined to write out crc32.h.
+ */
+
+#ifdef MAKECRCH
+# include <stdio.h>
+# ifndef DYNAMIC_CRC_TABLE
+# define DYNAMIC_CRC_TABLE
+# endif /* !DYNAMIC_CRC_TABLE */
+#endif /* MAKECRCH */
+
+#include "zutil.h" /* for STDC and FAR definitions */
+
+#define local static
+
+/* Definitions for doing the crc four data bytes at a time. */
+#if !defined(NOBYFOUR) && defined(Z_U4)
+# define BYFOUR
+#endif
+#ifdef BYFOUR
+ local unsigned long crc32_little OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+ local unsigned long crc32_big OF((unsigned long,
+ const unsigned char FAR *, unsigned));
+# define TBLS 8
+#else
+# define TBLS 1
+#endif /* BYFOUR */
+
+/* Local functions for crc concatenation */
+local unsigned long gf2_matrix_times OF((unsigned long *mat,
+ unsigned long vec));
+local void gf2_matrix_square OF((unsigned long *square, unsigned long *mat));
+local uLong crc32_combine_ OF((uLong crc1, uLong crc2, z_off64_t len2));
+
+
+#ifdef DYNAMIC_CRC_TABLE
+
+local volatile int crc_table_empty = 1;
+local z_crc_t FAR crc_table[TBLS][256];
+local void make_crc_table OF((void));
+#ifdef MAKECRCH
+ local void write_table OF((FILE *, const z_crc_t FAR *));
+#endif /* MAKECRCH */
+/*
+ Generate tables for a byte-wise 32-bit CRC calculation on the polynomial:
+ x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1.
+
+ Polynomials over GF(2) are represented in binary, one bit per coefficient,
+ with the lowest powers in the most significant bit. Then adding polynomials
+ is just exclusive-or, and multiplying a polynomial by x is a right shift by
+ one. If we call the above polynomial p, and represent a byte as the
+ polynomial q, also with the lowest power in the most significant bit (so the
+ byte 0xb1 is the polynomial x^7+x^3+x+1), then the CRC is (q*x^32) mod p,
+ where a mod b means the remainder after dividing a by b.
+
+ This calculation is done using the shift-register method of multiplying and
+ taking the remainder. The register is initialized to zero, and for each
+ incoming bit, x^32 is added mod p to the register if the bit is a one (where
+ x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by
+ x (which is shifting right by one and adding x^32 mod p if the bit shifted
+ out is a one). We start with the highest power (least significant bit) of
+ q and repeat for all eight bits of q.
+
+ The first table is simply the CRC of all possible eight bit values. This is
+ all the information needed to generate CRCs on data a byte at a time for all
+ combinations of CRC register values and incoming bytes. The remaining tables
+ allow for word-at-a-time CRC calculation for both big-endian and little-
+ endian machines, where a word is four bytes.
+*/
+local void make_crc_table()
+{
+ z_crc_t c;
+ int n, k;
+ z_crc_t poly; /* polynomial exclusive-or pattern */
+ /* terms of polynomial defining this crc (except x^32): */
+ static volatile int first = 1; /* flag to limit concurrent making */
+ static const unsigned char p[] = {0,1,2,4,5,7,8,10,11,12,16,22,23,26};
+
+ /* See if another task is already doing this (not thread-safe, but better
+ than nothing -- significantly reduces duration of vulnerability in
+ case the advice about DYNAMIC_CRC_TABLE is ignored) */
+ if (first) {
+ first = 0;
+
+ /* make exclusive-or pattern from polynomial (0xedb88320UL) */
+ poly = 0;
+ for (n = 0; n < (int)(sizeof(p)/sizeof(unsigned char)); n++)
+ poly |= (z_crc_t)1 << (31 - p[n]);
+
+ /* generate a crc for every 8-bit value */
+ for (n = 0; n < 256; n++) {
+ c = (z_crc_t)n;
+ for (k = 0; k < 8; k++)
+ c = c & 1 ? poly ^ (c >> 1) : c >> 1;
+ crc_table[0][n] = c;
+ }
+
+#ifdef BYFOUR
+ /* generate crc for each value followed by one, two, and three zeros,
+ and then the byte reversal of those as well as the first table */
+ for (n = 0; n < 256; n++) {
+ c = crc_table[0][n];
+ crc_table[4][n] = ZSWAP32(c);
+ for (k = 1; k < 4; k++) {
+ c = crc_table[0][c & 0xff] ^ (c >> 8);
+ crc_table[k][n] = c;
+ crc_table[k + 4][n] = ZSWAP32(c);
+ }
+ }
+#endif /* BYFOUR */
+
+ crc_table_empty = 0;
+ }
+ else { /* not first */
+ /* wait for the other guy to finish (not efficient, but rare) */
+ while (crc_table_empty)
+ ;
+ }
+
+#ifdef MAKECRCH
+ /* write out CRC tables to crc32.h */
+ {
+ FILE *out;
+
+ out = fopen("crc32.h", "w");
+ if (out == NULL) return;
+ fprintf(out, "/* crc32.h -- tables for rapid CRC calculation\n");
+ fprintf(out, " * Generated automatically by crc32.c\n */\n\n");
+ fprintf(out, "local const z_crc_t FAR ");
+ fprintf(out, "crc_table[TBLS][256] =\n{\n {\n");
+ write_table(out, crc_table[0]);
+# ifdef BYFOUR
+ fprintf(out, "#ifdef BYFOUR\n");
+ for (k = 1; k < 8; k++) {
+ fprintf(out, " },\n {\n");
+ write_table(out, crc_table[k]);
+ }
+ fprintf(out, "#endif\n");
+# endif /* BYFOUR */
+ fprintf(out, " }\n};\n");
+ fclose(out);
+ }
+#endif /* MAKECRCH */
+}
+
+#ifdef MAKECRCH
+local void write_table(out, table)
+ FILE *out;
+ const z_crc_t FAR *table;
+{
+ int n;
+
+ for (n = 0; n < 256; n++)
+ fprintf(out, "%s0x%08lxUL%s", n % 5 ? "" : " ",
+ (unsigned long)(table[n]),
+ n == 255 ? "\n" : (n % 5 == 4 ? ",\n" : ", "));
+}
+#endif /* MAKECRCH */
+
+#else /* !DYNAMIC_CRC_TABLE */
+/* ========================================================================
+ * Tables of CRC-32s of all single-byte values, made by make_crc_table().
+ */
+#include "crc32.h"
+#endif /* DYNAMIC_CRC_TABLE */
+
+/* =========================================================================
+ * This function can be used by asm versions of crc32()
+ */
+const z_crc_t FAR * ZEXPORT get_crc_table()
+{
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+ return (const z_crc_t FAR *)crc_table;
+}
+
+/* ========================================================================= */
+#define DO1 crc = crc_table[0][((int)crc ^ (*buf++)) & 0xff] ^ (crc >> 8)
+#define DO8 DO1; DO1; DO1; DO1; DO1; DO1; DO1; DO1
+
+/* ========================================================================= */
+unsigned long ZEXPORT crc32(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ uInt len;
+{
+ if (buf == Z_NULL) return 0UL;
+
+#ifdef DYNAMIC_CRC_TABLE
+ if (crc_table_empty)
+ make_crc_table();
+#endif /* DYNAMIC_CRC_TABLE */
+
+#ifdef BYFOUR
+ if (sizeof(void *) == sizeof(ptrdiff_t)) {
+ z_crc_t endian;
+
+ endian = 1;
+ if (*((unsigned char *)(&endian)))
+ return crc32_little(crc, buf, len);
+ else
+ return crc32_big(crc, buf, len);
+ }
+#endif /* BYFOUR */
+ crc = crc ^ 0xffffffffUL;
+ while (len >= 8) {
+ DO8;
+ len -= 8;
+ }
+ if (len) do {
+ DO1;
+ } while (--len);
+ return crc ^ 0xffffffffUL;
+}
+
+#ifdef BYFOUR
+
+/* ========================================================================= */
+#define DOLIT4 c ^= *buf4++; \
+ c = crc_table[3][c & 0xff] ^ crc_table[2][(c >> 8) & 0xff] ^ \
+ crc_table[1][(c >> 16) & 0xff] ^ crc_table[0][c >> 24]
+#define DOLIT32 DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4; DOLIT4
+
+/* ========================================================================= */
+local unsigned long crc32_little(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = (z_crc_t)crc;
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ while (len >= 32) {
+ DOLIT32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOLIT4;
+ len -= 4;
+ }
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[0][(c ^ *buf++) & 0xff] ^ (c >> 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)c;
+}
+
+/* ========================================================================= */
+#define DOBIG4 c ^= *++buf4; \
+ c = crc_table[4][c & 0xff] ^ crc_table[5][(c >> 8) & 0xff] ^ \
+ crc_table[6][(c >> 16) & 0xff] ^ crc_table[7][c >> 24]
+#define DOBIG32 DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4; DOBIG4
+
+/* ========================================================================= */
+local unsigned long crc32_big(crc, buf, len)
+ unsigned long crc;
+ const unsigned char FAR *buf;
+ unsigned len;
+{
+ register z_crc_t c;
+ register const z_crc_t FAR *buf4;
+
+ c = ZSWAP32((z_crc_t)crc);
+ c = ~c;
+ while (len && ((ptrdiff_t)buf & 3)) {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ len--;
+ }
+
+ buf4 = (const z_crc_t FAR *)(const void FAR *)buf;
+ buf4--;
+ while (len >= 32) {
+ DOBIG32;
+ len -= 32;
+ }
+ while (len >= 4) {
+ DOBIG4;
+ len -= 4;
+ }
+ buf4++;
+ buf = (const unsigned char FAR *)buf4;
+
+ if (len) do {
+ c = crc_table[4][(c >> 24) ^ *buf++] ^ (c << 8);
+ } while (--len);
+ c = ~c;
+ return (unsigned long)(ZSWAP32(c));
+}
+
+#endif /* BYFOUR */
+
+#define GF2_DIM 32 /* dimension of GF(2) vectors (length of CRC) */
+
+/* ========================================================================= */
+local unsigned long gf2_matrix_times(mat, vec)
+ unsigned long *mat;
+ unsigned long vec;
+{
+ unsigned long sum;
+
+ sum = 0;
+ while (vec) {
+ if (vec & 1)
+ sum ^= *mat;
+ vec >>= 1;
+ mat++;
+ }
+ return sum;
+}
+
+/* ========================================================================= */
+local void gf2_matrix_square(square, mat)
+ unsigned long *square;
+ unsigned long *mat;
+{
+ int n;
+
+ for (n = 0; n < GF2_DIM; n++)
+ square[n] = gf2_matrix_times(mat, mat[n]);
+}
+
+/* ========================================================================= */
+local uLong crc32_combine_(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ int n;
+ unsigned long row;
+ unsigned long even[GF2_DIM]; /* even-power-of-two zeros operator */
+ unsigned long odd[GF2_DIM]; /* odd-power-of-two zeros operator */
+
+ /* degenerate case (also disallow negative lengths) */
+ if (len2 <= 0)
+ return crc1;
+
+ /* put operator for one zero bit in odd */
+ odd[0] = 0xedb88320UL; /* CRC-32 polynomial */
+ row = 1;
+ for (n = 1; n < GF2_DIM; n++) {
+ odd[n] = row;
+ row <<= 1;
+ }
+
+ /* put operator for two zero bits in even */
+ gf2_matrix_square(even, odd);
+
+ /* put operator for four zero bits in odd */
+ gf2_matrix_square(odd, even);
+
+ /* apply len2 zeros to crc1 (first square will put the operator for one
+ zero byte, eight zero bits, in even) */
+ do {
+ /* apply zeros operator for this bit of len2 */
+ gf2_matrix_square(even, odd);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(even, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ if (len2 == 0)
+ break;
+
+ /* another iteration of the loop with odd and even swapped */
+ gf2_matrix_square(odd, even);
+ if (len2 & 1)
+ crc1 = gf2_matrix_times(odd, crc1);
+ len2 >>= 1;
+
+ /* if no more bits set, then done */
+ } while (len2 != 0);
+
+ /* return combined crc */
+ crc1 ^= crc2;
+ return crc1;
+}
+
+/* ========================================================================= */
+uLong ZEXPORT crc32_combine(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
+
+uLong ZEXPORT crc32_combine64(crc1, crc2, len2)
+ uLong crc1;
+ uLong crc2;
+ z_off64_t len2;
+{
+ return crc32_combine_(crc1, crc2, len2);
+}
diff --git a/compat/zlib/crc32.h b/compat/zlib/crc32.h
new file mode 100644
index 0000000..9e0c778
--- /dev/null
+++ b/compat/zlib/crc32.h
@@ -0,0 +1,441 @@
+/* crc32.h -- tables for rapid CRC calculation
+ * Generated automatically by crc32.c
+ */
+
+local const z_crc_t FAR crc_table[TBLS][256] =
+{
+ {
+ 0x00000000UL, 0x77073096UL, 0xee0e612cUL, 0x990951baUL, 0x076dc419UL,
+ 0x706af48fUL, 0xe963a535UL, 0x9e6495a3UL, 0x0edb8832UL, 0x79dcb8a4UL,
+ 0xe0d5e91eUL, 0x97d2d988UL, 0x09b64c2bUL, 0x7eb17cbdUL, 0xe7b82d07UL,
+ 0x90bf1d91UL, 0x1db71064UL, 0x6ab020f2UL, 0xf3b97148UL, 0x84be41deUL,
+ 0x1adad47dUL, 0x6ddde4ebUL, 0xf4d4b551UL, 0x83d385c7UL, 0x136c9856UL,
+ 0x646ba8c0UL, 0xfd62f97aUL, 0x8a65c9ecUL, 0x14015c4fUL, 0x63066cd9UL,
+ 0xfa0f3d63UL, 0x8d080df5UL, 0x3b6e20c8UL, 0x4c69105eUL, 0xd56041e4UL,
+ 0xa2677172UL, 0x3c03e4d1UL, 0x4b04d447UL, 0xd20d85fdUL, 0xa50ab56bUL,
+ 0x35b5a8faUL, 0x42b2986cUL, 0xdbbbc9d6UL, 0xacbcf940UL, 0x32d86ce3UL,
+ 0x45df5c75UL, 0xdcd60dcfUL, 0xabd13d59UL, 0x26d930acUL, 0x51de003aUL,
+ 0xc8d75180UL, 0xbfd06116UL, 0x21b4f4b5UL, 0x56b3c423UL, 0xcfba9599UL,
+ 0xb8bda50fUL, 0x2802b89eUL, 0x5f058808UL, 0xc60cd9b2UL, 0xb10be924UL,
+ 0x2f6f7c87UL, 0x58684c11UL, 0xc1611dabUL, 0xb6662d3dUL, 0x76dc4190UL,
+ 0x01db7106UL, 0x98d220bcUL, 0xefd5102aUL, 0x71b18589UL, 0x06b6b51fUL,
+ 0x9fbfe4a5UL, 0xe8b8d433UL, 0x7807c9a2UL, 0x0f00f934UL, 0x9609a88eUL,
+ 0xe10e9818UL, 0x7f6a0dbbUL, 0x086d3d2dUL, 0x91646c97UL, 0xe6635c01UL,
+ 0x6b6b51f4UL, 0x1c6c6162UL, 0x856530d8UL, 0xf262004eUL, 0x6c0695edUL,
+ 0x1b01a57bUL, 0x8208f4c1UL, 0xf50fc457UL, 0x65b0d9c6UL, 0x12b7e950UL,
+ 0x8bbeb8eaUL, 0xfcb9887cUL, 0x62dd1ddfUL, 0x15da2d49UL, 0x8cd37cf3UL,
+ 0xfbd44c65UL, 0x4db26158UL, 0x3ab551ceUL, 0xa3bc0074UL, 0xd4bb30e2UL,
+ 0x4adfa541UL, 0x3dd895d7UL, 0xa4d1c46dUL, 0xd3d6f4fbUL, 0x4369e96aUL,
+ 0x346ed9fcUL, 0xad678846UL, 0xda60b8d0UL, 0x44042d73UL, 0x33031de5UL,
+ 0xaa0a4c5fUL, 0xdd0d7cc9UL, 0x5005713cUL, 0x270241aaUL, 0xbe0b1010UL,
+ 0xc90c2086UL, 0x5768b525UL, 0x206f85b3UL, 0xb966d409UL, 0xce61e49fUL,
+ 0x5edef90eUL, 0x29d9c998UL, 0xb0d09822UL, 0xc7d7a8b4UL, 0x59b33d17UL,
+ 0x2eb40d81UL, 0xb7bd5c3bUL, 0xc0ba6cadUL, 0xedb88320UL, 0x9abfb3b6UL,
+ 0x03b6e20cUL, 0x74b1d29aUL, 0xead54739UL, 0x9dd277afUL, 0x04db2615UL,
+ 0x73dc1683UL, 0xe3630b12UL, 0x94643b84UL, 0x0d6d6a3eUL, 0x7a6a5aa8UL,
+ 0xe40ecf0bUL, 0x9309ff9dUL, 0x0a00ae27UL, 0x7d079eb1UL, 0xf00f9344UL,
+ 0x8708a3d2UL, 0x1e01f268UL, 0x6906c2feUL, 0xf762575dUL, 0x806567cbUL,
+ 0x196c3671UL, 0x6e6b06e7UL, 0xfed41b76UL, 0x89d32be0UL, 0x10da7a5aUL,
+ 0x67dd4accUL, 0xf9b9df6fUL, 0x8ebeeff9UL, 0x17b7be43UL, 0x60b08ed5UL,
+ 0xd6d6a3e8UL, 0xa1d1937eUL, 0x38d8c2c4UL, 0x4fdff252UL, 0xd1bb67f1UL,
+ 0xa6bc5767UL, 0x3fb506ddUL, 0x48b2364bUL, 0xd80d2bdaUL, 0xaf0a1b4cUL,
+ 0x36034af6UL, 0x41047a60UL, 0xdf60efc3UL, 0xa867df55UL, 0x316e8eefUL,
+ 0x4669be79UL, 0xcb61b38cUL, 0xbc66831aUL, 0x256fd2a0UL, 0x5268e236UL,
+ 0xcc0c7795UL, 0xbb0b4703UL, 0x220216b9UL, 0x5505262fUL, 0xc5ba3bbeUL,
+ 0xb2bd0b28UL, 0x2bb45a92UL, 0x5cb36a04UL, 0xc2d7ffa7UL, 0xb5d0cf31UL,
+ 0x2cd99e8bUL, 0x5bdeae1dUL, 0x9b64c2b0UL, 0xec63f226UL, 0x756aa39cUL,
+ 0x026d930aUL, 0x9c0906a9UL, 0xeb0e363fUL, 0x72076785UL, 0x05005713UL,
+ 0x95bf4a82UL, 0xe2b87a14UL, 0x7bb12baeUL, 0x0cb61b38UL, 0x92d28e9bUL,
+ 0xe5d5be0dUL, 0x7cdcefb7UL, 0x0bdbdf21UL, 0x86d3d2d4UL, 0xf1d4e242UL,
+ 0x68ddb3f8UL, 0x1fda836eUL, 0x81be16cdUL, 0xf6b9265bUL, 0x6fb077e1UL,
+ 0x18b74777UL, 0x88085ae6UL, 0xff0f6a70UL, 0x66063bcaUL, 0x11010b5cUL,
+ 0x8f659effUL, 0xf862ae69UL, 0x616bffd3UL, 0x166ccf45UL, 0xa00ae278UL,
+ 0xd70dd2eeUL, 0x4e048354UL, 0x3903b3c2UL, 0xa7672661UL, 0xd06016f7UL,
+ 0x4969474dUL, 0x3e6e77dbUL, 0xaed16a4aUL, 0xd9d65adcUL, 0x40df0b66UL,
+ 0x37d83bf0UL, 0xa9bcae53UL, 0xdebb9ec5UL, 0x47b2cf7fUL, 0x30b5ffe9UL,
+ 0xbdbdf21cUL, 0xcabac28aUL, 0x53b39330UL, 0x24b4a3a6UL, 0xbad03605UL,
+ 0xcdd70693UL, 0x54de5729UL, 0x23d967bfUL, 0xb3667a2eUL, 0xc4614ab8UL,
+ 0x5d681b02UL, 0x2a6f2b94UL, 0xb40bbe37UL, 0xc30c8ea1UL, 0x5a05df1bUL,
+ 0x2d02ef8dUL
+#ifdef BYFOUR
+ },
+ {
+ 0x00000000UL, 0x191b3141UL, 0x32366282UL, 0x2b2d53c3UL, 0x646cc504UL,
+ 0x7d77f445UL, 0x565aa786UL, 0x4f4196c7UL, 0xc8d98a08UL, 0xd1c2bb49UL,
+ 0xfaefe88aUL, 0xe3f4d9cbUL, 0xacb54f0cUL, 0xb5ae7e4dUL, 0x9e832d8eUL,
+ 0x87981ccfUL, 0x4ac21251UL, 0x53d92310UL, 0x78f470d3UL, 0x61ef4192UL,
+ 0x2eaed755UL, 0x37b5e614UL, 0x1c98b5d7UL, 0x05838496UL, 0x821b9859UL,
+ 0x9b00a918UL, 0xb02dfadbUL, 0xa936cb9aUL, 0xe6775d5dUL, 0xff6c6c1cUL,
+ 0xd4413fdfUL, 0xcd5a0e9eUL, 0x958424a2UL, 0x8c9f15e3UL, 0xa7b24620UL,
+ 0xbea97761UL, 0xf1e8e1a6UL, 0xe8f3d0e7UL, 0xc3de8324UL, 0xdac5b265UL,
+ 0x5d5daeaaUL, 0x44469febUL, 0x6f6bcc28UL, 0x7670fd69UL, 0x39316baeUL,
+ 0x202a5aefUL, 0x0b07092cUL, 0x121c386dUL, 0xdf4636f3UL, 0xc65d07b2UL,
+ 0xed705471UL, 0xf46b6530UL, 0xbb2af3f7UL, 0xa231c2b6UL, 0x891c9175UL,
+ 0x9007a034UL, 0x179fbcfbUL, 0x0e848dbaUL, 0x25a9de79UL, 0x3cb2ef38UL,
+ 0x73f379ffUL, 0x6ae848beUL, 0x41c51b7dUL, 0x58de2a3cUL, 0xf0794f05UL,
+ 0xe9627e44UL, 0xc24f2d87UL, 0xdb541cc6UL, 0x94158a01UL, 0x8d0ebb40UL,
+ 0xa623e883UL, 0xbf38d9c2UL, 0x38a0c50dUL, 0x21bbf44cUL, 0x0a96a78fUL,
+ 0x138d96ceUL, 0x5ccc0009UL, 0x45d73148UL, 0x6efa628bUL, 0x77e153caUL,
+ 0xbabb5d54UL, 0xa3a06c15UL, 0x888d3fd6UL, 0x91960e97UL, 0xded79850UL,
+ 0xc7cca911UL, 0xece1fad2UL, 0xf5facb93UL, 0x7262d75cUL, 0x6b79e61dUL,
+ 0x4054b5deUL, 0x594f849fUL, 0x160e1258UL, 0x0f152319UL, 0x243870daUL,
+ 0x3d23419bUL, 0x65fd6ba7UL, 0x7ce65ae6UL, 0x57cb0925UL, 0x4ed03864UL,
+ 0x0191aea3UL, 0x188a9fe2UL, 0x33a7cc21UL, 0x2abcfd60UL, 0xad24e1afUL,
+ 0xb43fd0eeUL, 0x9f12832dUL, 0x8609b26cUL, 0xc94824abUL, 0xd05315eaUL,
+ 0xfb7e4629UL, 0xe2657768UL, 0x2f3f79f6UL, 0x362448b7UL, 0x1d091b74UL,
+ 0x04122a35UL, 0x4b53bcf2UL, 0x52488db3UL, 0x7965de70UL, 0x607eef31UL,
+ 0xe7e6f3feUL, 0xfefdc2bfUL, 0xd5d0917cUL, 0xcccba03dUL, 0x838a36faUL,
+ 0x9a9107bbUL, 0xb1bc5478UL, 0xa8a76539UL, 0x3b83984bUL, 0x2298a90aUL,
+ 0x09b5fac9UL, 0x10aecb88UL, 0x5fef5d4fUL, 0x46f46c0eUL, 0x6dd93fcdUL,
+ 0x74c20e8cUL, 0xf35a1243UL, 0xea412302UL, 0xc16c70c1UL, 0xd8774180UL,
+ 0x9736d747UL, 0x8e2de606UL, 0xa500b5c5UL, 0xbc1b8484UL, 0x71418a1aUL,
+ 0x685abb5bUL, 0x4377e898UL, 0x5a6cd9d9UL, 0x152d4f1eUL, 0x0c367e5fUL,
+ 0x271b2d9cUL, 0x3e001cddUL, 0xb9980012UL, 0xa0833153UL, 0x8bae6290UL,
+ 0x92b553d1UL, 0xddf4c516UL, 0xc4eff457UL, 0xefc2a794UL, 0xf6d996d5UL,
+ 0xae07bce9UL, 0xb71c8da8UL, 0x9c31de6bUL, 0x852aef2aUL, 0xca6b79edUL,
+ 0xd37048acUL, 0xf85d1b6fUL, 0xe1462a2eUL, 0x66de36e1UL, 0x7fc507a0UL,
+ 0x54e85463UL, 0x4df36522UL, 0x02b2f3e5UL, 0x1ba9c2a4UL, 0x30849167UL,
+ 0x299fa026UL, 0xe4c5aeb8UL, 0xfdde9ff9UL, 0xd6f3cc3aUL, 0xcfe8fd7bUL,
+ 0x80a96bbcUL, 0x99b25afdUL, 0xb29f093eUL, 0xab84387fUL, 0x2c1c24b0UL,
+ 0x350715f1UL, 0x1e2a4632UL, 0x07317773UL, 0x4870e1b4UL, 0x516bd0f5UL,
+ 0x7a468336UL, 0x635db277UL, 0xcbfad74eUL, 0xd2e1e60fUL, 0xf9ccb5ccUL,
+ 0xe0d7848dUL, 0xaf96124aUL, 0xb68d230bUL, 0x9da070c8UL, 0x84bb4189UL,
+ 0x03235d46UL, 0x1a386c07UL, 0x31153fc4UL, 0x280e0e85UL, 0x674f9842UL,
+ 0x7e54a903UL, 0x5579fac0UL, 0x4c62cb81UL, 0x8138c51fUL, 0x9823f45eUL,
+ 0xb30ea79dUL, 0xaa1596dcUL, 0xe554001bUL, 0xfc4f315aUL, 0xd7626299UL,
+ 0xce7953d8UL, 0x49e14f17UL, 0x50fa7e56UL, 0x7bd72d95UL, 0x62cc1cd4UL,
+ 0x2d8d8a13UL, 0x3496bb52UL, 0x1fbbe891UL, 0x06a0d9d0UL, 0x5e7ef3ecUL,
+ 0x4765c2adUL, 0x6c48916eUL, 0x7553a02fUL, 0x3a1236e8UL, 0x230907a9UL,
+ 0x0824546aUL, 0x113f652bUL, 0x96a779e4UL, 0x8fbc48a5UL, 0xa4911b66UL,
+ 0xbd8a2a27UL, 0xf2cbbce0UL, 0xebd08da1UL, 0xc0fdde62UL, 0xd9e6ef23UL,
+ 0x14bce1bdUL, 0x0da7d0fcUL, 0x268a833fUL, 0x3f91b27eUL, 0x70d024b9UL,
+ 0x69cb15f8UL, 0x42e6463bUL, 0x5bfd777aUL, 0xdc656bb5UL, 0xc57e5af4UL,
+ 0xee530937UL, 0xf7483876UL, 0xb809aeb1UL, 0xa1129ff0UL, 0x8a3fcc33UL,
+ 0x9324fd72UL
+ },
+ {
+ 0x00000000UL, 0x01c26a37UL, 0x0384d46eUL, 0x0246be59UL, 0x0709a8dcUL,
+ 0x06cbc2ebUL, 0x048d7cb2UL, 0x054f1685UL, 0x0e1351b8UL, 0x0fd13b8fUL,
+ 0x0d9785d6UL, 0x0c55efe1UL, 0x091af964UL, 0x08d89353UL, 0x0a9e2d0aUL,
+ 0x0b5c473dUL, 0x1c26a370UL, 0x1de4c947UL, 0x1fa2771eUL, 0x1e601d29UL,
+ 0x1b2f0bacUL, 0x1aed619bUL, 0x18abdfc2UL, 0x1969b5f5UL, 0x1235f2c8UL,
+ 0x13f798ffUL, 0x11b126a6UL, 0x10734c91UL, 0x153c5a14UL, 0x14fe3023UL,
+ 0x16b88e7aUL, 0x177ae44dUL, 0x384d46e0UL, 0x398f2cd7UL, 0x3bc9928eUL,
+ 0x3a0bf8b9UL, 0x3f44ee3cUL, 0x3e86840bUL, 0x3cc03a52UL, 0x3d025065UL,
+ 0x365e1758UL, 0x379c7d6fUL, 0x35dac336UL, 0x3418a901UL, 0x3157bf84UL,
+ 0x3095d5b3UL, 0x32d36beaUL, 0x331101ddUL, 0x246be590UL, 0x25a98fa7UL,
+ 0x27ef31feUL, 0x262d5bc9UL, 0x23624d4cUL, 0x22a0277bUL, 0x20e69922UL,
+ 0x2124f315UL, 0x2a78b428UL, 0x2bbade1fUL, 0x29fc6046UL, 0x283e0a71UL,
+ 0x2d711cf4UL, 0x2cb376c3UL, 0x2ef5c89aUL, 0x2f37a2adUL, 0x709a8dc0UL,
+ 0x7158e7f7UL, 0x731e59aeUL, 0x72dc3399UL, 0x7793251cUL, 0x76514f2bUL,
+ 0x7417f172UL, 0x75d59b45UL, 0x7e89dc78UL, 0x7f4bb64fUL, 0x7d0d0816UL,
+ 0x7ccf6221UL, 0x798074a4UL, 0x78421e93UL, 0x7a04a0caUL, 0x7bc6cafdUL,
+ 0x6cbc2eb0UL, 0x6d7e4487UL, 0x6f38fadeUL, 0x6efa90e9UL, 0x6bb5866cUL,
+ 0x6a77ec5bUL, 0x68315202UL, 0x69f33835UL, 0x62af7f08UL, 0x636d153fUL,
+ 0x612bab66UL, 0x60e9c151UL, 0x65a6d7d4UL, 0x6464bde3UL, 0x662203baUL,
+ 0x67e0698dUL, 0x48d7cb20UL, 0x4915a117UL, 0x4b531f4eUL, 0x4a917579UL,
+ 0x4fde63fcUL, 0x4e1c09cbUL, 0x4c5ab792UL, 0x4d98dda5UL, 0x46c49a98UL,
+ 0x4706f0afUL, 0x45404ef6UL, 0x448224c1UL, 0x41cd3244UL, 0x400f5873UL,
+ 0x4249e62aUL, 0x438b8c1dUL, 0x54f16850UL, 0x55330267UL, 0x5775bc3eUL,
+ 0x56b7d609UL, 0x53f8c08cUL, 0x523aaabbUL, 0x507c14e2UL, 0x51be7ed5UL,
+ 0x5ae239e8UL, 0x5b2053dfUL, 0x5966ed86UL, 0x58a487b1UL, 0x5deb9134UL,
+ 0x5c29fb03UL, 0x5e6f455aUL, 0x5fad2f6dUL, 0xe1351b80UL, 0xe0f771b7UL,
+ 0xe2b1cfeeUL, 0xe373a5d9UL, 0xe63cb35cUL, 0xe7fed96bUL, 0xe5b86732UL,
+ 0xe47a0d05UL, 0xef264a38UL, 0xeee4200fUL, 0xeca29e56UL, 0xed60f461UL,
+ 0xe82fe2e4UL, 0xe9ed88d3UL, 0xebab368aUL, 0xea695cbdUL, 0xfd13b8f0UL,
+ 0xfcd1d2c7UL, 0xfe976c9eUL, 0xff5506a9UL, 0xfa1a102cUL, 0xfbd87a1bUL,
+ 0xf99ec442UL, 0xf85cae75UL, 0xf300e948UL, 0xf2c2837fUL, 0xf0843d26UL,
+ 0xf1465711UL, 0xf4094194UL, 0xf5cb2ba3UL, 0xf78d95faUL, 0xf64fffcdUL,
+ 0xd9785d60UL, 0xd8ba3757UL, 0xdafc890eUL, 0xdb3ee339UL, 0xde71f5bcUL,
+ 0xdfb39f8bUL, 0xddf521d2UL, 0xdc374be5UL, 0xd76b0cd8UL, 0xd6a966efUL,
+ 0xd4efd8b6UL, 0xd52db281UL, 0xd062a404UL, 0xd1a0ce33UL, 0xd3e6706aUL,
+ 0xd2241a5dUL, 0xc55efe10UL, 0xc49c9427UL, 0xc6da2a7eUL, 0xc7184049UL,
+ 0xc25756ccUL, 0xc3953cfbUL, 0xc1d382a2UL, 0xc011e895UL, 0xcb4dafa8UL,
+ 0xca8fc59fUL, 0xc8c97bc6UL, 0xc90b11f1UL, 0xcc440774UL, 0xcd866d43UL,
+ 0xcfc0d31aUL, 0xce02b92dUL, 0x91af9640UL, 0x906dfc77UL, 0x922b422eUL,
+ 0x93e92819UL, 0x96a63e9cUL, 0x976454abUL, 0x9522eaf2UL, 0x94e080c5UL,
+ 0x9fbcc7f8UL, 0x9e7eadcfUL, 0x9c381396UL, 0x9dfa79a1UL, 0x98b56f24UL,
+ 0x99770513UL, 0x9b31bb4aUL, 0x9af3d17dUL, 0x8d893530UL, 0x8c4b5f07UL,
+ 0x8e0de15eUL, 0x8fcf8b69UL, 0x8a809decUL, 0x8b42f7dbUL, 0x89044982UL,
+ 0x88c623b5UL, 0x839a6488UL, 0x82580ebfUL, 0x801eb0e6UL, 0x81dcdad1UL,
+ 0x8493cc54UL, 0x8551a663UL, 0x8717183aUL, 0x86d5720dUL, 0xa9e2d0a0UL,
+ 0xa820ba97UL, 0xaa6604ceUL, 0xaba46ef9UL, 0xaeeb787cUL, 0xaf29124bUL,
+ 0xad6fac12UL, 0xacadc625UL, 0xa7f18118UL, 0xa633eb2fUL, 0xa4755576UL,
+ 0xa5b73f41UL, 0xa0f829c4UL, 0xa13a43f3UL, 0xa37cfdaaUL, 0xa2be979dUL,
+ 0xb5c473d0UL, 0xb40619e7UL, 0xb640a7beUL, 0xb782cd89UL, 0xb2cddb0cUL,
+ 0xb30fb13bUL, 0xb1490f62UL, 0xb08b6555UL, 0xbbd72268UL, 0xba15485fUL,
+ 0xb853f606UL, 0xb9919c31UL, 0xbcde8ab4UL, 0xbd1ce083UL, 0xbf5a5edaUL,
+ 0xbe9834edUL
+ },
+ {
+ 0x00000000UL, 0xb8bc6765UL, 0xaa09c88bUL, 0x12b5afeeUL, 0x8f629757UL,
+ 0x37def032UL, 0x256b5fdcUL, 0x9dd738b9UL, 0xc5b428efUL, 0x7d084f8aUL,
+ 0x6fbde064UL, 0xd7018701UL, 0x4ad6bfb8UL, 0xf26ad8ddUL, 0xe0df7733UL,
+ 0x58631056UL, 0x5019579fUL, 0xe8a530faUL, 0xfa109f14UL, 0x42acf871UL,
+ 0xdf7bc0c8UL, 0x67c7a7adUL, 0x75720843UL, 0xcdce6f26UL, 0x95ad7f70UL,
+ 0x2d111815UL, 0x3fa4b7fbUL, 0x8718d09eUL, 0x1acfe827UL, 0xa2738f42UL,
+ 0xb0c620acUL, 0x087a47c9UL, 0xa032af3eUL, 0x188ec85bUL, 0x0a3b67b5UL,
+ 0xb28700d0UL, 0x2f503869UL, 0x97ec5f0cUL, 0x8559f0e2UL, 0x3de59787UL,
+ 0x658687d1UL, 0xdd3ae0b4UL, 0xcf8f4f5aUL, 0x7733283fUL, 0xeae41086UL,
+ 0x525877e3UL, 0x40edd80dUL, 0xf851bf68UL, 0xf02bf8a1UL, 0x48979fc4UL,
+ 0x5a22302aUL, 0xe29e574fUL, 0x7f496ff6UL, 0xc7f50893UL, 0xd540a77dUL,
+ 0x6dfcc018UL, 0x359fd04eUL, 0x8d23b72bUL, 0x9f9618c5UL, 0x272a7fa0UL,
+ 0xbafd4719UL, 0x0241207cUL, 0x10f48f92UL, 0xa848e8f7UL, 0x9b14583dUL,
+ 0x23a83f58UL, 0x311d90b6UL, 0x89a1f7d3UL, 0x1476cf6aUL, 0xaccaa80fUL,
+ 0xbe7f07e1UL, 0x06c36084UL, 0x5ea070d2UL, 0xe61c17b7UL, 0xf4a9b859UL,
+ 0x4c15df3cUL, 0xd1c2e785UL, 0x697e80e0UL, 0x7bcb2f0eUL, 0xc377486bUL,
+ 0xcb0d0fa2UL, 0x73b168c7UL, 0x6104c729UL, 0xd9b8a04cUL, 0x446f98f5UL,
+ 0xfcd3ff90UL, 0xee66507eUL, 0x56da371bUL, 0x0eb9274dUL, 0xb6054028UL,
+ 0xa4b0efc6UL, 0x1c0c88a3UL, 0x81dbb01aUL, 0x3967d77fUL, 0x2bd27891UL,
+ 0x936e1ff4UL, 0x3b26f703UL, 0x839a9066UL, 0x912f3f88UL, 0x299358edUL,
+ 0xb4446054UL, 0x0cf80731UL, 0x1e4da8dfUL, 0xa6f1cfbaUL, 0xfe92dfecUL,
+ 0x462eb889UL, 0x549b1767UL, 0xec277002UL, 0x71f048bbUL, 0xc94c2fdeUL,
+ 0xdbf98030UL, 0x6345e755UL, 0x6b3fa09cUL, 0xd383c7f9UL, 0xc1366817UL,
+ 0x798a0f72UL, 0xe45d37cbUL, 0x5ce150aeUL, 0x4e54ff40UL, 0xf6e89825UL,
+ 0xae8b8873UL, 0x1637ef16UL, 0x048240f8UL, 0xbc3e279dUL, 0x21e91f24UL,
+ 0x99557841UL, 0x8be0d7afUL, 0x335cb0caUL, 0xed59b63bUL, 0x55e5d15eUL,
+ 0x47507eb0UL, 0xffec19d5UL, 0x623b216cUL, 0xda874609UL, 0xc832e9e7UL,
+ 0x708e8e82UL, 0x28ed9ed4UL, 0x9051f9b1UL, 0x82e4565fUL, 0x3a58313aUL,
+ 0xa78f0983UL, 0x1f336ee6UL, 0x0d86c108UL, 0xb53aa66dUL, 0xbd40e1a4UL,
+ 0x05fc86c1UL, 0x1749292fUL, 0xaff54e4aUL, 0x322276f3UL, 0x8a9e1196UL,
+ 0x982bbe78UL, 0x2097d91dUL, 0x78f4c94bUL, 0xc048ae2eUL, 0xd2fd01c0UL,
+ 0x6a4166a5UL, 0xf7965e1cUL, 0x4f2a3979UL, 0x5d9f9697UL, 0xe523f1f2UL,
+ 0x4d6b1905UL, 0xf5d77e60UL, 0xe762d18eUL, 0x5fdeb6ebUL, 0xc2098e52UL,
+ 0x7ab5e937UL, 0x680046d9UL, 0xd0bc21bcUL, 0x88df31eaUL, 0x3063568fUL,
+ 0x22d6f961UL, 0x9a6a9e04UL, 0x07bda6bdUL, 0xbf01c1d8UL, 0xadb46e36UL,
+ 0x15080953UL, 0x1d724e9aUL, 0xa5ce29ffUL, 0xb77b8611UL, 0x0fc7e174UL,
+ 0x9210d9cdUL, 0x2aacbea8UL, 0x38191146UL, 0x80a57623UL, 0xd8c66675UL,
+ 0x607a0110UL, 0x72cfaefeUL, 0xca73c99bUL, 0x57a4f122UL, 0xef189647UL,
+ 0xfdad39a9UL, 0x45115eccUL, 0x764dee06UL, 0xcef18963UL, 0xdc44268dUL,
+ 0x64f841e8UL, 0xf92f7951UL, 0x41931e34UL, 0x5326b1daUL, 0xeb9ad6bfUL,
+ 0xb3f9c6e9UL, 0x0b45a18cUL, 0x19f00e62UL, 0xa14c6907UL, 0x3c9b51beUL,
+ 0x842736dbUL, 0x96929935UL, 0x2e2efe50UL, 0x2654b999UL, 0x9ee8defcUL,
+ 0x8c5d7112UL, 0x34e11677UL, 0xa9362eceUL, 0x118a49abUL, 0x033fe645UL,
+ 0xbb838120UL, 0xe3e09176UL, 0x5b5cf613UL, 0x49e959fdUL, 0xf1553e98UL,
+ 0x6c820621UL, 0xd43e6144UL, 0xc68bceaaUL, 0x7e37a9cfUL, 0xd67f4138UL,
+ 0x6ec3265dUL, 0x7c7689b3UL, 0xc4caeed6UL, 0x591dd66fUL, 0xe1a1b10aUL,
+ 0xf3141ee4UL, 0x4ba87981UL, 0x13cb69d7UL, 0xab770eb2UL, 0xb9c2a15cUL,
+ 0x017ec639UL, 0x9ca9fe80UL, 0x241599e5UL, 0x36a0360bUL, 0x8e1c516eUL,
+ 0x866616a7UL, 0x3eda71c2UL, 0x2c6fde2cUL, 0x94d3b949UL, 0x090481f0UL,
+ 0xb1b8e695UL, 0xa30d497bUL, 0x1bb12e1eUL, 0x43d23e48UL, 0xfb6e592dUL,
+ 0xe9dbf6c3UL, 0x516791a6UL, 0xccb0a91fUL, 0x740cce7aUL, 0x66b96194UL,
+ 0xde0506f1UL
+ },
+ {
+ 0x00000000UL, 0x96300777UL, 0x2c610eeeUL, 0xba510999UL, 0x19c46d07UL,
+ 0x8ff46a70UL, 0x35a563e9UL, 0xa395649eUL, 0x3288db0eUL, 0xa4b8dc79UL,
+ 0x1ee9d5e0UL, 0x88d9d297UL, 0x2b4cb609UL, 0xbd7cb17eUL, 0x072db8e7UL,
+ 0x911dbf90UL, 0x6410b71dUL, 0xf220b06aUL, 0x4871b9f3UL, 0xde41be84UL,
+ 0x7dd4da1aUL, 0xebe4dd6dUL, 0x51b5d4f4UL, 0xc785d383UL, 0x56986c13UL,
+ 0xc0a86b64UL, 0x7af962fdUL, 0xecc9658aUL, 0x4f5c0114UL, 0xd96c0663UL,
+ 0x633d0ffaUL, 0xf50d088dUL, 0xc8206e3bUL, 0x5e10694cUL, 0xe44160d5UL,
+ 0x727167a2UL, 0xd1e4033cUL, 0x47d4044bUL, 0xfd850dd2UL, 0x6bb50aa5UL,
+ 0xfaa8b535UL, 0x6c98b242UL, 0xd6c9bbdbUL, 0x40f9bcacUL, 0xe36cd832UL,
+ 0x755cdf45UL, 0xcf0dd6dcUL, 0x593dd1abUL, 0xac30d926UL, 0x3a00de51UL,
+ 0x8051d7c8UL, 0x1661d0bfUL, 0xb5f4b421UL, 0x23c4b356UL, 0x9995bacfUL,
+ 0x0fa5bdb8UL, 0x9eb80228UL, 0x0888055fUL, 0xb2d90cc6UL, 0x24e90bb1UL,
+ 0x877c6f2fUL, 0x114c6858UL, 0xab1d61c1UL, 0x3d2d66b6UL, 0x9041dc76UL,
+ 0x0671db01UL, 0xbc20d298UL, 0x2a10d5efUL, 0x8985b171UL, 0x1fb5b606UL,
+ 0xa5e4bf9fUL, 0x33d4b8e8UL, 0xa2c90778UL, 0x34f9000fUL, 0x8ea80996UL,
+ 0x18980ee1UL, 0xbb0d6a7fUL, 0x2d3d6d08UL, 0x976c6491UL, 0x015c63e6UL,
+ 0xf4516b6bUL, 0x62616c1cUL, 0xd8306585UL, 0x4e0062f2UL, 0xed95066cUL,
+ 0x7ba5011bUL, 0xc1f40882UL, 0x57c40ff5UL, 0xc6d9b065UL, 0x50e9b712UL,
+ 0xeab8be8bUL, 0x7c88b9fcUL, 0xdf1ddd62UL, 0x492dda15UL, 0xf37cd38cUL,
+ 0x654cd4fbUL, 0x5861b24dUL, 0xce51b53aUL, 0x7400bca3UL, 0xe230bbd4UL,
+ 0x41a5df4aUL, 0xd795d83dUL, 0x6dc4d1a4UL, 0xfbf4d6d3UL, 0x6ae96943UL,
+ 0xfcd96e34UL, 0x468867adUL, 0xd0b860daUL, 0x732d0444UL, 0xe51d0333UL,
+ 0x5f4c0aaaUL, 0xc97c0dddUL, 0x3c710550UL, 0xaa410227UL, 0x10100bbeUL,
+ 0x86200cc9UL, 0x25b56857UL, 0xb3856f20UL, 0x09d466b9UL, 0x9fe461ceUL,
+ 0x0ef9de5eUL, 0x98c9d929UL, 0x2298d0b0UL, 0xb4a8d7c7UL, 0x173db359UL,
+ 0x810db42eUL, 0x3b5cbdb7UL, 0xad6cbac0UL, 0x2083b8edUL, 0xb6b3bf9aUL,
+ 0x0ce2b603UL, 0x9ad2b174UL, 0x3947d5eaUL, 0xaf77d29dUL, 0x1526db04UL,
+ 0x8316dc73UL, 0x120b63e3UL, 0x843b6494UL, 0x3e6a6d0dUL, 0xa85a6a7aUL,
+ 0x0bcf0ee4UL, 0x9dff0993UL, 0x27ae000aUL, 0xb19e077dUL, 0x44930ff0UL,
+ 0xd2a30887UL, 0x68f2011eUL, 0xfec20669UL, 0x5d5762f7UL, 0xcb676580UL,
+ 0x71366c19UL, 0xe7066b6eUL, 0x761bd4feUL, 0xe02bd389UL, 0x5a7ada10UL,
+ 0xcc4add67UL, 0x6fdfb9f9UL, 0xf9efbe8eUL, 0x43beb717UL, 0xd58eb060UL,
+ 0xe8a3d6d6UL, 0x7e93d1a1UL, 0xc4c2d838UL, 0x52f2df4fUL, 0xf167bbd1UL,
+ 0x6757bca6UL, 0xdd06b53fUL, 0x4b36b248UL, 0xda2b0dd8UL, 0x4c1b0aafUL,
+ 0xf64a0336UL, 0x607a0441UL, 0xc3ef60dfUL, 0x55df67a8UL, 0xef8e6e31UL,
+ 0x79be6946UL, 0x8cb361cbUL, 0x1a8366bcUL, 0xa0d26f25UL, 0x36e26852UL,
+ 0x95770cccUL, 0x03470bbbUL, 0xb9160222UL, 0x2f260555UL, 0xbe3bbac5UL,
+ 0x280bbdb2UL, 0x925ab42bUL, 0x046ab35cUL, 0xa7ffd7c2UL, 0x31cfd0b5UL,
+ 0x8b9ed92cUL, 0x1daede5bUL, 0xb0c2649bUL, 0x26f263ecUL, 0x9ca36a75UL,
+ 0x0a936d02UL, 0xa906099cUL, 0x3f360eebUL, 0x85670772UL, 0x13570005UL,
+ 0x824abf95UL, 0x147ab8e2UL, 0xae2bb17bUL, 0x381bb60cUL, 0x9b8ed292UL,
+ 0x0dbed5e5UL, 0xb7efdc7cUL, 0x21dfdb0bUL, 0xd4d2d386UL, 0x42e2d4f1UL,
+ 0xf8b3dd68UL, 0x6e83da1fUL, 0xcd16be81UL, 0x5b26b9f6UL, 0xe177b06fUL,
+ 0x7747b718UL, 0xe65a0888UL, 0x706a0fffUL, 0xca3b0666UL, 0x5c0b0111UL,
+ 0xff9e658fUL, 0x69ae62f8UL, 0xd3ff6b61UL, 0x45cf6c16UL, 0x78e20aa0UL,
+ 0xeed20dd7UL, 0x5483044eUL, 0xc2b30339UL, 0x612667a7UL, 0xf71660d0UL,
+ 0x4d476949UL, 0xdb776e3eUL, 0x4a6ad1aeUL, 0xdc5ad6d9UL, 0x660bdf40UL,
+ 0xf03bd837UL, 0x53aebca9UL, 0xc59ebbdeUL, 0x7fcfb247UL, 0xe9ffb530UL,
+ 0x1cf2bdbdUL, 0x8ac2bacaUL, 0x3093b353UL, 0xa6a3b424UL, 0x0536d0baUL,
+ 0x9306d7cdUL, 0x2957de54UL, 0xbf67d923UL, 0x2e7a66b3UL, 0xb84a61c4UL,
+ 0x021b685dUL, 0x942b6f2aUL, 0x37be0bb4UL, 0xa18e0cc3UL, 0x1bdf055aUL,
+ 0x8def022dUL
+ },
+ {
+ 0x00000000UL, 0x41311b19UL, 0x82623632UL, 0xc3532d2bUL, 0x04c56c64UL,
+ 0x45f4777dUL, 0x86a75a56UL, 0xc796414fUL, 0x088ad9c8UL, 0x49bbc2d1UL,
+ 0x8ae8effaUL, 0xcbd9f4e3UL, 0x0c4fb5acUL, 0x4d7eaeb5UL, 0x8e2d839eUL,
+ 0xcf1c9887UL, 0x5112c24aUL, 0x1023d953UL, 0xd370f478UL, 0x9241ef61UL,
+ 0x55d7ae2eUL, 0x14e6b537UL, 0xd7b5981cUL, 0x96848305UL, 0x59981b82UL,
+ 0x18a9009bUL, 0xdbfa2db0UL, 0x9acb36a9UL, 0x5d5d77e6UL, 0x1c6c6cffUL,
+ 0xdf3f41d4UL, 0x9e0e5acdUL, 0xa2248495UL, 0xe3159f8cUL, 0x2046b2a7UL,
+ 0x6177a9beUL, 0xa6e1e8f1UL, 0xe7d0f3e8UL, 0x2483dec3UL, 0x65b2c5daUL,
+ 0xaaae5d5dUL, 0xeb9f4644UL, 0x28cc6b6fUL, 0x69fd7076UL, 0xae6b3139UL,
+ 0xef5a2a20UL, 0x2c09070bUL, 0x6d381c12UL, 0xf33646dfUL, 0xb2075dc6UL,
+ 0x715470edUL, 0x30656bf4UL, 0xf7f32abbUL, 0xb6c231a2UL, 0x75911c89UL,
+ 0x34a00790UL, 0xfbbc9f17UL, 0xba8d840eUL, 0x79dea925UL, 0x38efb23cUL,
+ 0xff79f373UL, 0xbe48e86aUL, 0x7d1bc541UL, 0x3c2ade58UL, 0x054f79f0UL,
+ 0x447e62e9UL, 0x872d4fc2UL, 0xc61c54dbUL, 0x018a1594UL, 0x40bb0e8dUL,
+ 0x83e823a6UL, 0xc2d938bfUL, 0x0dc5a038UL, 0x4cf4bb21UL, 0x8fa7960aUL,
+ 0xce968d13UL, 0x0900cc5cUL, 0x4831d745UL, 0x8b62fa6eUL, 0xca53e177UL,
+ 0x545dbbbaUL, 0x156ca0a3UL, 0xd63f8d88UL, 0x970e9691UL, 0x5098d7deUL,
+ 0x11a9ccc7UL, 0xd2fae1ecUL, 0x93cbfaf5UL, 0x5cd76272UL, 0x1de6796bUL,
+ 0xdeb55440UL, 0x9f844f59UL, 0x58120e16UL, 0x1923150fUL, 0xda703824UL,
+ 0x9b41233dUL, 0xa76bfd65UL, 0xe65ae67cUL, 0x2509cb57UL, 0x6438d04eUL,
+ 0xa3ae9101UL, 0xe29f8a18UL, 0x21cca733UL, 0x60fdbc2aUL, 0xafe124adUL,
+ 0xeed03fb4UL, 0x2d83129fUL, 0x6cb20986UL, 0xab2448c9UL, 0xea1553d0UL,
+ 0x29467efbUL, 0x687765e2UL, 0xf6793f2fUL, 0xb7482436UL, 0x741b091dUL,
+ 0x352a1204UL, 0xf2bc534bUL, 0xb38d4852UL, 0x70de6579UL, 0x31ef7e60UL,
+ 0xfef3e6e7UL, 0xbfc2fdfeUL, 0x7c91d0d5UL, 0x3da0cbccUL, 0xfa368a83UL,
+ 0xbb07919aUL, 0x7854bcb1UL, 0x3965a7a8UL, 0x4b98833bUL, 0x0aa99822UL,
+ 0xc9fab509UL, 0x88cbae10UL, 0x4f5def5fUL, 0x0e6cf446UL, 0xcd3fd96dUL,
+ 0x8c0ec274UL, 0x43125af3UL, 0x022341eaUL, 0xc1706cc1UL, 0x804177d8UL,
+ 0x47d73697UL, 0x06e62d8eUL, 0xc5b500a5UL, 0x84841bbcUL, 0x1a8a4171UL,
+ 0x5bbb5a68UL, 0x98e87743UL, 0xd9d96c5aUL, 0x1e4f2d15UL, 0x5f7e360cUL,
+ 0x9c2d1b27UL, 0xdd1c003eUL, 0x120098b9UL, 0x533183a0UL, 0x9062ae8bUL,
+ 0xd153b592UL, 0x16c5f4ddUL, 0x57f4efc4UL, 0x94a7c2efUL, 0xd596d9f6UL,
+ 0xe9bc07aeUL, 0xa88d1cb7UL, 0x6bde319cUL, 0x2aef2a85UL, 0xed796bcaUL,
+ 0xac4870d3UL, 0x6f1b5df8UL, 0x2e2a46e1UL, 0xe136de66UL, 0xa007c57fUL,
+ 0x6354e854UL, 0x2265f34dUL, 0xe5f3b202UL, 0xa4c2a91bUL, 0x67918430UL,
+ 0x26a09f29UL, 0xb8aec5e4UL, 0xf99fdefdUL, 0x3accf3d6UL, 0x7bfde8cfUL,
+ 0xbc6ba980UL, 0xfd5ab299UL, 0x3e099fb2UL, 0x7f3884abUL, 0xb0241c2cUL,
+ 0xf1150735UL, 0x32462a1eUL, 0x73773107UL, 0xb4e17048UL, 0xf5d06b51UL,
+ 0x3683467aUL, 0x77b25d63UL, 0x4ed7facbUL, 0x0fe6e1d2UL, 0xccb5ccf9UL,
+ 0x8d84d7e0UL, 0x4a1296afUL, 0x0b238db6UL, 0xc870a09dUL, 0x8941bb84UL,
+ 0x465d2303UL, 0x076c381aUL, 0xc43f1531UL, 0x850e0e28UL, 0x42984f67UL,
+ 0x03a9547eUL, 0xc0fa7955UL, 0x81cb624cUL, 0x1fc53881UL, 0x5ef42398UL,
+ 0x9da70eb3UL, 0xdc9615aaUL, 0x1b0054e5UL, 0x5a314ffcUL, 0x996262d7UL,
+ 0xd85379ceUL, 0x174fe149UL, 0x567efa50UL, 0x952dd77bUL, 0xd41ccc62UL,
+ 0x138a8d2dUL, 0x52bb9634UL, 0x91e8bb1fUL, 0xd0d9a006UL, 0xecf37e5eUL,
+ 0xadc26547UL, 0x6e91486cUL, 0x2fa05375UL, 0xe836123aUL, 0xa9070923UL,
+ 0x6a542408UL, 0x2b653f11UL, 0xe479a796UL, 0xa548bc8fUL, 0x661b91a4UL,
+ 0x272a8abdUL, 0xe0bccbf2UL, 0xa18dd0ebUL, 0x62defdc0UL, 0x23efe6d9UL,
+ 0xbde1bc14UL, 0xfcd0a70dUL, 0x3f838a26UL, 0x7eb2913fUL, 0xb924d070UL,
+ 0xf815cb69UL, 0x3b46e642UL, 0x7a77fd5bUL, 0xb56b65dcUL, 0xf45a7ec5UL,
+ 0x370953eeUL, 0x763848f7UL, 0xb1ae09b8UL, 0xf09f12a1UL, 0x33cc3f8aUL,
+ 0x72fd2493UL
+ },
+ {
+ 0x00000000UL, 0x376ac201UL, 0x6ed48403UL, 0x59be4602UL, 0xdca80907UL,
+ 0xebc2cb06UL, 0xb27c8d04UL, 0x85164f05UL, 0xb851130eUL, 0x8f3bd10fUL,
+ 0xd685970dUL, 0xe1ef550cUL, 0x64f91a09UL, 0x5393d808UL, 0x0a2d9e0aUL,
+ 0x3d475c0bUL, 0x70a3261cUL, 0x47c9e41dUL, 0x1e77a21fUL, 0x291d601eUL,
+ 0xac0b2f1bUL, 0x9b61ed1aUL, 0xc2dfab18UL, 0xf5b56919UL, 0xc8f23512UL,
+ 0xff98f713UL, 0xa626b111UL, 0x914c7310UL, 0x145a3c15UL, 0x2330fe14UL,
+ 0x7a8eb816UL, 0x4de47a17UL, 0xe0464d38UL, 0xd72c8f39UL, 0x8e92c93bUL,
+ 0xb9f80b3aUL, 0x3cee443fUL, 0x0b84863eUL, 0x523ac03cUL, 0x6550023dUL,
+ 0x58175e36UL, 0x6f7d9c37UL, 0x36c3da35UL, 0x01a91834UL, 0x84bf5731UL,
+ 0xb3d59530UL, 0xea6bd332UL, 0xdd011133UL, 0x90e56b24UL, 0xa78fa925UL,
+ 0xfe31ef27UL, 0xc95b2d26UL, 0x4c4d6223UL, 0x7b27a022UL, 0x2299e620UL,
+ 0x15f32421UL, 0x28b4782aUL, 0x1fdeba2bUL, 0x4660fc29UL, 0x710a3e28UL,
+ 0xf41c712dUL, 0xc376b32cUL, 0x9ac8f52eUL, 0xada2372fUL, 0xc08d9a70UL,
+ 0xf7e75871UL, 0xae591e73UL, 0x9933dc72UL, 0x1c259377UL, 0x2b4f5176UL,
+ 0x72f11774UL, 0x459bd575UL, 0x78dc897eUL, 0x4fb64b7fUL, 0x16080d7dUL,
+ 0x2162cf7cUL, 0xa4748079UL, 0x931e4278UL, 0xcaa0047aUL, 0xfdcac67bUL,
+ 0xb02ebc6cUL, 0x87447e6dUL, 0xdefa386fUL, 0xe990fa6eUL, 0x6c86b56bUL,
+ 0x5bec776aUL, 0x02523168UL, 0x3538f369UL, 0x087faf62UL, 0x3f156d63UL,
+ 0x66ab2b61UL, 0x51c1e960UL, 0xd4d7a665UL, 0xe3bd6464UL, 0xba032266UL,
+ 0x8d69e067UL, 0x20cbd748UL, 0x17a11549UL, 0x4e1f534bUL, 0x7975914aUL,
+ 0xfc63de4fUL, 0xcb091c4eUL, 0x92b75a4cUL, 0xa5dd984dUL, 0x989ac446UL,
+ 0xaff00647UL, 0xf64e4045UL, 0xc1248244UL, 0x4432cd41UL, 0x73580f40UL,
+ 0x2ae64942UL, 0x1d8c8b43UL, 0x5068f154UL, 0x67023355UL, 0x3ebc7557UL,
+ 0x09d6b756UL, 0x8cc0f853UL, 0xbbaa3a52UL, 0xe2147c50UL, 0xd57ebe51UL,
+ 0xe839e25aUL, 0xdf53205bUL, 0x86ed6659UL, 0xb187a458UL, 0x3491eb5dUL,
+ 0x03fb295cUL, 0x5a456f5eUL, 0x6d2fad5fUL, 0x801b35e1UL, 0xb771f7e0UL,
+ 0xeecfb1e2UL, 0xd9a573e3UL, 0x5cb33ce6UL, 0x6bd9fee7UL, 0x3267b8e5UL,
+ 0x050d7ae4UL, 0x384a26efUL, 0x0f20e4eeUL, 0x569ea2ecUL, 0x61f460edUL,
+ 0xe4e22fe8UL, 0xd388ede9UL, 0x8a36abebUL, 0xbd5c69eaUL, 0xf0b813fdUL,
+ 0xc7d2d1fcUL, 0x9e6c97feUL, 0xa90655ffUL, 0x2c101afaUL, 0x1b7ad8fbUL,
+ 0x42c49ef9UL, 0x75ae5cf8UL, 0x48e900f3UL, 0x7f83c2f2UL, 0x263d84f0UL,
+ 0x115746f1UL, 0x944109f4UL, 0xa32bcbf5UL, 0xfa958df7UL, 0xcdff4ff6UL,
+ 0x605d78d9UL, 0x5737bad8UL, 0x0e89fcdaUL, 0x39e33edbUL, 0xbcf571deUL,
+ 0x8b9fb3dfUL, 0xd221f5ddUL, 0xe54b37dcUL, 0xd80c6bd7UL, 0xef66a9d6UL,
+ 0xb6d8efd4UL, 0x81b22dd5UL, 0x04a462d0UL, 0x33cea0d1UL, 0x6a70e6d3UL,
+ 0x5d1a24d2UL, 0x10fe5ec5UL, 0x27949cc4UL, 0x7e2adac6UL, 0x494018c7UL,
+ 0xcc5657c2UL, 0xfb3c95c3UL, 0xa282d3c1UL, 0x95e811c0UL, 0xa8af4dcbUL,
+ 0x9fc58fcaUL, 0xc67bc9c8UL, 0xf1110bc9UL, 0x740744ccUL, 0x436d86cdUL,
+ 0x1ad3c0cfUL, 0x2db902ceUL, 0x4096af91UL, 0x77fc6d90UL, 0x2e422b92UL,
+ 0x1928e993UL, 0x9c3ea696UL, 0xab546497UL, 0xf2ea2295UL, 0xc580e094UL,
+ 0xf8c7bc9fUL, 0xcfad7e9eUL, 0x9613389cUL, 0xa179fa9dUL, 0x246fb598UL,
+ 0x13057799UL, 0x4abb319bUL, 0x7dd1f39aUL, 0x3035898dUL, 0x075f4b8cUL,
+ 0x5ee10d8eUL, 0x698bcf8fUL, 0xec9d808aUL, 0xdbf7428bUL, 0x82490489UL,
+ 0xb523c688UL, 0x88649a83UL, 0xbf0e5882UL, 0xe6b01e80UL, 0xd1dadc81UL,
+ 0x54cc9384UL, 0x63a65185UL, 0x3a181787UL, 0x0d72d586UL, 0xa0d0e2a9UL,
+ 0x97ba20a8UL, 0xce0466aaUL, 0xf96ea4abUL, 0x7c78ebaeUL, 0x4b1229afUL,
+ 0x12ac6fadUL, 0x25c6adacUL, 0x1881f1a7UL, 0x2feb33a6UL, 0x765575a4UL,
+ 0x413fb7a5UL, 0xc429f8a0UL, 0xf3433aa1UL, 0xaafd7ca3UL, 0x9d97bea2UL,
+ 0xd073c4b5UL, 0xe71906b4UL, 0xbea740b6UL, 0x89cd82b7UL, 0x0cdbcdb2UL,
+ 0x3bb10fb3UL, 0x620f49b1UL, 0x55658bb0UL, 0x6822d7bbUL, 0x5f4815baUL,
+ 0x06f653b8UL, 0x319c91b9UL, 0xb48adebcUL, 0x83e01cbdUL, 0xda5e5abfUL,
+ 0xed3498beUL
+ },
+ {
+ 0x00000000UL, 0x6567bcb8UL, 0x8bc809aaUL, 0xeeafb512UL, 0x5797628fUL,
+ 0x32f0de37UL, 0xdc5f6b25UL, 0xb938d79dUL, 0xef28b4c5UL, 0x8a4f087dUL,
+ 0x64e0bd6fUL, 0x018701d7UL, 0xb8bfd64aUL, 0xddd86af2UL, 0x3377dfe0UL,
+ 0x56106358UL, 0x9f571950UL, 0xfa30a5e8UL, 0x149f10faUL, 0x71f8ac42UL,
+ 0xc8c07bdfUL, 0xada7c767UL, 0x43087275UL, 0x266fcecdUL, 0x707fad95UL,
+ 0x1518112dUL, 0xfbb7a43fUL, 0x9ed01887UL, 0x27e8cf1aUL, 0x428f73a2UL,
+ 0xac20c6b0UL, 0xc9477a08UL, 0x3eaf32a0UL, 0x5bc88e18UL, 0xb5673b0aUL,
+ 0xd00087b2UL, 0x6938502fUL, 0x0c5fec97UL, 0xe2f05985UL, 0x8797e53dUL,
+ 0xd1878665UL, 0xb4e03addUL, 0x5a4f8fcfUL, 0x3f283377UL, 0x8610e4eaUL,
+ 0xe3775852UL, 0x0dd8ed40UL, 0x68bf51f8UL, 0xa1f82bf0UL, 0xc49f9748UL,
+ 0x2a30225aUL, 0x4f579ee2UL, 0xf66f497fUL, 0x9308f5c7UL, 0x7da740d5UL,
+ 0x18c0fc6dUL, 0x4ed09f35UL, 0x2bb7238dUL, 0xc518969fUL, 0xa07f2a27UL,
+ 0x1947fdbaUL, 0x7c204102UL, 0x928ff410UL, 0xf7e848a8UL, 0x3d58149bUL,
+ 0x583fa823UL, 0xb6901d31UL, 0xd3f7a189UL, 0x6acf7614UL, 0x0fa8caacUL,
+ 0xe1077fbeUL, 0x8460c306UL, 0xd270a05eUL, 0xb7171ce6UL, 0x59b8a9f4UL,
+ 0x3cdf154cUL, 0x85e7c2d1UL, 0xe0807e69UL, 0x0e2fcb7bUL, 0x6b4877c3UL,
+ 0xa20f0dcbUL, 0xc768b173UL, 0x29c70461UL, 0x4ca0b8d9UL, 0xf5986f44UL,
+ 0x90ffd3fcUL, 0x7e5066eeUL, 0x1b37da56UL, 0x4d27b90eUL, 0x284005b6UL,
+ 0xc6efb0a4UL, 0xa3880c1cUL, 0x1ab0db81UL, 0x7fd76739UL, 0x9178d22bUL,
+ 0xf41f6e93UL, 0x03f7263bUL, 0x66909a83UL, 0x883f2f91UL, 0xed589329UL,
+ 0x546044b4UL, 0x3107f80cUL, 0xdfa84d1eUL, 0xbacff1a6UL, 0xecdf92feUL,
+ 0x89b82e46UL, 0x67179b54UL, 0x027027ecUL, 0xbb48f071UL, 0xde2f4cc9UL,
+ 0x3080f9dbUL, 0x55e74563UL, 0x9ca03f6bUL, 0xf9c783d3UL, 0x176836c1UL,
+ 0x720f8a79UL, 0xcb375de4UL, 0xae50e15cUL, 0x40ff544eUL, 0x2598e8f6UL,
+ 0x73888baeUL, 0x16ef3716UL, 0xf8408204UL, 0x9d273ebcUL, 0x241fe921UL,
+ 0x41785599UL, 0xafd7e08bUL, 0xcab05c33UL, 0x3bb659edUL, 0x5ed1e555UL,
+ 0xb07e5047UL, 0xd519ecffUL, 0x6c213b62UL, 0x094687daUL, 0xe7e932c8UL,
+ 0x828e8e70UL, 0xd49eed28UL, 0xb1f95190UL, 0x5f56e482UL, 0x3a31583aUL,
+ 0x83098fa7UL, 0xe66e331fUL, 0x08c1860dUL, 0x6da63ab5UL, 0xa4e140bdUL,
+ 0xc186fc05UL, 0x2f294917UL, 0x4a4ef5afUL, 0xf3762232UL, 0x96119e8aUL,
+ 0x78be2b98UL, 0x1dd99720UL, 0x4bc9f478UL, 0x2eae48c0UL, 0xc001fdd2UL,
+ 0xa566416aUL, 0x1c5e96f7UL, 0x79392a4fUL, 0x97969f5dUL, 0xf2f123e5UL,
+ 0x05196b4dUL, 0x607ed7f5UL, 0x8ed162e7UL, 0xebb6de5fUL, 0x528e09c2UL,
+ 0x37e9b57aUL, 0xd9460068UL, 0xbc21bcd0UL, 0xea31df88UL, 0x8f566330UL,
+ 0x61f9d622UL, 0x049e6a9aUL, 0xbda6bd07UL, 0xd8c101bfUL, 0x366eb4adUL,
+ 0x53090815UL, 0x9a4e721dUL, 0xff29cea5UL, 0x11867bb7UL, 0x74e1c70fUL,
+ 0xcdd91092UL, 0xa8beac2aUL, 0x46111938UL, 0x2376a580UL, 0x7566c6d8UL,
+ 0x10017a60UL, 0xfeaecf72UL, 0x9bc973caUL, 0x22f1a457UL, 0x479618efUL,
+ 0xa939adfdUL, 0xcc5e1145UL, 0x06ee4d76UL, 0x6389f1ceUL, 0x8d2644dcUL,
+ 0xe841f864UL, 0x51792ff9UL, 0x341e9341UL, 0xdab12653UL, 0xbfd69aebUL,
+ 0xe9c6f9b3UL, 0x8ca1450bUL, 0x620ef019UL, 0x07694ca1UL, 0xbe519b3cUL,
+ 0xdb362784UL, 0x35999296UL, 0x50fe2e2eUL, 0x99b95426UL, 0xfcdee89eUL,
+ 0x12715d8cUL, 0x7716e134UL, 0xce2e36a9UL, 0xab498a11UL, 0x45e63f03UL,
+ 0x208183bbUL, 0x7691e0e3UL, 0x13f65c5bUL, 0xfd59e949UL, 0x983e55f1UL,
+ 0x2106826cUL, 0x44613ed4UL, 0xaace8bc6UL, 0xcfa9377eUL, 0x38417fd6UL,
+ 0x5d26c36eUL, 0xb389767cUL, 0xd6eecac4UL, 0x6fd61d59UL, 0x0ab1a1e1UL,
+ 0xe41e14f3UL, 0x8179a84bUL, 0xd769cb13UL, 0xb20e77abUL, 0x5ca1c2b9UL,
+ 0x39c67e01UL, 0x80fea99cUL, 0xe5991524UL, 0x0b36a036UL, 0x6e511c8eUL,
+ 0xa7166686UL, 0xc271da3eUL, 0x2cde6f2cUL, 0x49b9d394UL, 0xf0810409UL,
+ 0x95e6b8b1UL, 0x7b490da3UL, 0x1e2eb11bUL, 0x483ed243UL, 0x2d596efbUL,
+ 0xc3f6dbe9UL, 0xa6916751UL, 0x1fa9b0ccUL, 0x7ace0c74UL, 0x9461b966UL,
+ 0xf10605deUL
+#endif
+ }
+};
diff --git a/compat/zlib/deflate.c b/compat/zlib/deflate.c
new file mode 100644
index 0000000..6969577
--- /dev/null
+++ b/compat/zlib/deflate.c
@@ -0,0 +1,1967 @@
+/* deflate.c -- compress data using the deflation algorithm
+ * Copyright (C) 1995-2013 Jean-loup Gailly and Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * ALGORITHM
+ *
+ * The "deflation" process depends on being able to identify portions
+ * of the input text which are identical to earlier input (within a
+ * sliding window trailing behind the input currently being processed).
+ *
+ * The most straightforward technique turns out to be the fastest for
+ * most input files: try all possible matches and select the longest.
+ * The key feature of this algorithm is that insertions into the string
+ * dictionary are very simple and thus fast, and deletions are avoided
+ * completely. Insertions are performed at each input character, whereas
+ * string matches are performed only when the previous match ends. So it
+ * is preferable to spend more time in matches to allow very fast string
+ * insertions and avoid deletions. The matching algorithm for small
+ * strings is inspired from that of Rabin & Karp. A brute force approach
+ * is used to find longer strings when a small match has been found.
+ * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze
+ * (by Leonid Broukhis).
+ * A previous version of this file used a more sophisticated algorithm
+ * (by Fiala and Greene) which is guaranteed to run in linear amortized
+ * time, but has a larger average cost, uses more memory and is patented.
+ * However the F&G algorithm may be faster for some highly redundant
+ * files if the parameter max_chain_length (described below) is too large.
+ *
+ * ACKNOWLEDGEMENTS
+ *
+ * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and
+ * I found it in 'freeze' written by Leonid Broukhis.
+ * Thanks to many people for bug reports and testing.
+ *
+ * REFERENCES
+ *
+ * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification".
+ * Available in http://tools.ietf.org/html/rfc1951
+ *
+ * A description of the Rabin and Karp algorithm is given in the book
+ * "Algorithms" by R. Sedgewick, Addison-Wesley, p252.
+ *
+ * Fiala,E.R., and Greene,D.H.
+ * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595
+ *
+ */
+
+/* @(#) $Id$ */
+
+#include "deflate.h"
+
+const char deflate_copyright[] =
+ " deflate 1.2.8 Copyright 1995-2013 Jean-loup Gailly and 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.
+ */
+
+/* ===========================================================================
+ * Function prototypes.
+ */
+typedef enum {
+ need_more, /* block not completed, need more input or more output */
+ block_done, /* block flush performed */
+ finish_started, /* finish started, need only more output at next deflate */
+ finish_done /* finish done, accept no more input or output */
+} block_state;
+
+typedef block_state (*compress_func) OF((deflate_state *s, int flush));
+/* Compression function. Returns the block state after the call. */
+
+local void fill_window OF((deflate_state *s));
+local block_state deflate_stored OF((deflate_state *s, int flush));
+local block_state deflate_fast OF((deflate_state *s, int flush));
+#ifndef FASTEST
+local block_state deflate_slow OF((deflate_state *s, int flush));
+#endif
+local block_state deflate_rle OF((deflate_state *s, int flush));
+local block_state deflate_huff OF((deflate_state *s, int flush));
+local void lm_init OF((deflate_state *s));
+local void putShortMSB OF((deflate_state *s, uInt b));
+local void flush_pending OF((z_streamp strm));
+local int read_buf OF((z_streamp strm, Bytef *buf, unsigned size));
+#ifdef ASMV
+ void match_init OF((void)); /* asm code initialization */
+ uInt longest_match OF((deflate_state *s, IPos cur_match));
+#else
+local uInt longest_match OF((deflate_state *s, IPos cur_match));
+#endif
+
+#ifdef DEBUG
+local void check_match OF((deflate_state *s, IPos start, IPos match,
+ int length));
+#endif
+
+/* ===========================================================================
+ * Local data
+ */
+
+#define NIL 0
+/* Tail of hash chains */
+
+#ifndef TOO_FAR
+# define TOO_FAR 4096
+#endif
+/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */
+
+/* Values for max_lazy_match, good_match and max_chain_length, depending on
+ * the desired pack level (0..9). The values given below have been tuned to
+ * exclude worst case performance for pathological files. Better values may be
+ * found for specific files.
+ */
+typedef struct config_s {
+ ush good_length; /* reduce lazy search above this match length */
+ ush max_lazy; /* do not perform lazy search above this match length */
+ ush nice_length; /* quit search above this match length */
+ ush max_chain;
+ compress_func func;
+} config;
+
+#ifdef FASTEST
+local const config configuration_table[2] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */
+#else
+local const config configuration_table[10] = {
+/* good lazy nice chain */
+/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */
+/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */
+/* 2 */ {4, 5, 16, 8, deflate_fast},
+/* 3 */ {4, 6, 32, 32, deflate_fast},
+
+/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */
+/* 5 */ {8, 16, 32, 32, deflate_slow},
+/* 6 */ {8, 16, 128, 128, deflate_slow},
+/* 7 */ {8, 32, 128, 256, deflate_slow},
+/* 8 */ {32, 128, 258, 1024, deflate_slow},
+/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */
+#endif
+
+/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4
+ * For deflate_fast() (levels <= 3) good is ignored and lazy has a different
+ * meaning.
+ */
+
+#define EQUAL 0
+/* result of memcmp for equal strings */
+
+#ifndef NO_DUMMY_DECL
+struct static_tree_desc_s {int dummy;}; /* for buggy compilers */
+#endif
+
+/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */
+#define RANK(f) (((f) << 1) - ((f) > 4 ? 9 : 0))
+
+/* ===========================================================================
+ * Update a hash value with the given input byte
+ * IN assertion: all calls to to UPDATE_HASH are made with consecutive
+ * input characters, so that a running hash key can be computed from the
+ * previous key instead of complete recalculation each time.
+ */
+#define UPDATE_HASH(s,h,c) (h = (((h)<<s->hash_shift) ^ (c)) & s->hash_mask)
+
+
+/* ===========================================================================
+ * Insert string str in the dictionary and set match_head to the previous head
+ * of the hash chain (the most recent string with same hash key). Return
+ * the previous length of the hash chain.
+ * If this file is compiled with -DFASTEST, the compression level is forced
+ * to 1, and no hash chains are maintained.
+ * IN assertion: all calls to to INSERT_STRING are made with consecutive
+ * input characters and the first MIN_MATCH bytes of str are valid
+ * (except for the last MIN_MATCH-1 bytes of the input file).
+ */
+#ifdef FASTEST
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#else
+#define INSERT_STRING(s, str, match_head) \
+ (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \
+ match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \
+ s->head[s->ins_h] = (Pos)(str))
+#endif
+
+/* ===========================================================================
+ * Initialize the hash table (avoiding 64K overflow for 16 bit systems).
+ * prev[] will be initialized on the fly.
+ */
+#define CLEAR_HASH(s) \
+ s->head[s->hash_size-1] = NIL; \
+ zmemzero((Bytef *)s->head, (unsigned)(s->hash_size-1)*sizeof(*s->head));
+
+/* ========================================================================= */
+int ZEXPORT deflateInit_(strm, level, version, stream_size)
+ z_streamp strm;
+ int level;
+ const char *version;
+ int stream_size;
+{
+ return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL,
+ Z_DEFAULT_STRATEGY, version, stream_size);
+ /* To do: ignore strm->next_in if we use it as window */
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateInit2_(strm, level, method, windowBits, memLevel, strategy,
+ version, stream_size)
+ z_streamp strm;
+ int level;
+ int method;
+ int windowBits;
+ int memLevel;
+ int strategy;
+ const char *version;
+ int stream_size;
+{
+ deflate_state *s;
+ int wrap = 1;
+ static const char my_version[] = ZLIB_VERSION;
+
+ ushf *overlay;
+ /* We overlay pending_buf and d_buf+l_buf. This works since the average
+ * output size for (length,distance) codes is <= 24 bits.
+ */
+
+ if (version == Z_NULL || version[0] != my_version[0] ||
+ stream_size != sizeof(z_stream)) {
+ return Z_VERSION_ERROR;
+ }
+ if (strm == Z_NULL) return Z_STREAM_ERROR;
+
+ strm->msg = Z_NULL;
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+
+ if (windowBits < 0) { /* suppress zlib wrapper */
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+#ifdef GZIP
+ else if (windowBits > 15) {
+ wrap = 2; /* write gzip wrapper instead */
+ windowBits -= 16;
+ }
+#endif
+ if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED ||
+ windowBits < 8 || windowBits > 15 || level < 0 || level > 9 ||
+ strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */
+ s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state));
+ if (s == Z_NULL) return Z_MEM_ERROR;
+ strm->state = (struct internal_state FAR *)s;
+ s->strm = strm;
+
+ s->wrap = wrap;
+ s->gzhead = Z_NULL;
+ s->w_bits = windowBits;
+ s->w_size = 1 << s->w_bits;
+ s->w_mask = s->w_size - 1;
+
+ s->hash_bits = memLevel + 7;
+ s->hash_size = 1 << s->hash_bits;
+ s->hash_mask = s->hash_size - 1;
+ s->hash_shift = ((s->hash_bits+MIN_MATCH-1)/MIN_MATCH);
+
+ s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte));
+ s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos));
+ s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos));
+
+ s->high_water = 0; /* nothing written to s->window yet */
+
+ s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */
+
+ overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);
+ s->pending_buf = (uchf *) overlay;
+ s->pending_buf_size = (ulg)s->lit_bufsize * (sizeof(ush)+2L);
+
+ if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL ||
+ s->pending_buf == Z_NULL) {
+ s->status = FINISH_STATE;
+ strm->msg = ERR_MSG(Z_MEM_ERROR);
+ deflateEnd (strm);
+ return Z_MEM_ERROR;
+ }
+ s->d_buf = overlay + s->lit_bufsize/sizeof(ush);
+ s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;
+
+ s->level = level;
+ s->strategy = strategy;
+ s->method = (Byte)method;
+
+ return deflateReset(strm);
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetDictionary (strm, dictionary, dictLength)
+ z_streamp strm;
+ const Bytef *dictionary;
+ uInt dictLength;
+{
+ deflate_state *s;
+ uInt str, n;
+ int wrap;
+ unsigned avail;
+ z_const unsigned char *next;
+
+ if (strm == Z_NULL || strm->state == Z_NULL || dictionary == Z_NULL)
+ return Z_STREAM_ERROR;
+ s = strm->state;
+ wrap = s->wrap;
+ if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead)
+ return Z_STREAM_ERROR;
+
+ /* when using zlib wrappers, compute Adler-32 for provided dictionary */
+ if (wrap == 1)
+ strm->adler = adler32(strm->adler, dictionary, dictLength);
+ s->wrap = 0; /* avoid computing Adler-32 in read_buf */
+
+ /* if dictionary would fill window, just replace the history */
+ if (dictLength >= s->w_size) {
+ if (wrap == 0) { /* already empty otherwise */
+ CLEAR_HASH(s);
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ dictionary += dictLength - s->w_size; /* use the tail */
+ dictLength = s->w_size;
+ }
+
+ /* insert dictionary into window and hash */
+ avail = strm->avail_in;
+ next = strm->next_in;
+ strm->avail_in = dictLength;
+ strm->next_in = (z_const Bytef *)dictionary;
+ fill_window(s);
+ while (s->lookahead >= MIN_MATCH) {
+ str = s->strstart;
+ n = s->lookahead - (MIN_MATCH-1);
+ do {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ } while (--n);
+ s->strstart = str;
+ s->lookahead = MIN_MATCH-1;
+ fill_window(s);
+ }
+ s->strstart += s->lookahead;
+ s->block_start = (long)s->strstart;
+ s->insert = s->lookahead;
+ s->lookahead = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ strm->next_in = next;
+ strm->avail_in = avail;
+ s->wrap = wrap;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateResetKeep (strm)
+ z_streamp strm;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) {
+ return Z_STREAM_ERROR;
+ }
+
+ strm->total_in = strm->total_out = 0;
+ strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */
+ strm->data_type = Z_UNKNOWN;
+
+ s = (deflate_state *)strm->state;
+ s->pending = 0;
+ s->pending_out = s->pending_buf;
+
+ if (s->wrap < 0) {
+ s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */
+ }
+ s->status = s->wrap ? INIT_STATE : BUSY_STATE;
+ strm->adler =
+#ifdef GZIP
+ s->wrap == 2 ? crc32(0L, Z_NULL, 0) :
+#endif
+ adler32(0L, Z_NULL, 0);
+ s->last_flush = Z_NO_FLUSH;
+
+ _tr_init(s);
+
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateReset (strm)
+ z_streamp strm;
+{
+ int ret;
+
+ ret = deflateResetKeep(strm);
+ if (ret == Z_OK)
+ lm_init(strm->state);
+ return ret;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateSetHeader (strm, head)
+ z_streamp strm;
+ gz_headerp head;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (strm->state->wrap != 2) return Z_STREAM_ERROR;
+ strm->state->gzhead = head;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePending (strm, pending, bits)
+ unsigned *pending;
+ int *bits;
+ z_streamp strm;
+{
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ if (pending != Z_NULL)
+ *pending = strm->state->pending;
+ if (bits != Z_NULL)
+ *bits = strm->state->bi_valid;
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflatePrime (strm, bits, value)
+ z_streamp strm;
+ int bits;
+ int value;
+{
+ deflate_state *s;
+ int put;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ if ((Bytef *)(s->d_buf) < s->pending_out + ((Buf_size + 7) >> 3))
+ return Z_BUF_ERROR;
+ do {
+ put = Buf_size - s->bi_valid;
+ if (put > bits)
+ put = bits;
+ s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid);
+ s->bi_valid += put;
+ _tr_flush_bits(s);
+ value >>= put;
+ bits -= put;
+ } while (bits);
+ return Z_OK;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateParams(strm, level, strategy)
+ z_streamp strm;
+ int level;
+ int strategy;
+{
+ deflate_state *s;
+ compress_func func;
+ int err = Z_OK;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+
+#ifdef FASTEST
+ if (level != 0) level = 1;
+#else
+ if (level == Z_DEFAULT_COMPRESSION) level = 6;
+#endif
+ if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {
+ return Z_STREAM_ERROR;
+ }
+ func = configuration_table[s->level].func;
+
+ if ((strategy != s->strategy || func != configuration_table[level].func) &&
+ strm->total_in != 0) {
+ /* Flush the last buffer: */
+ err = deflate(strm, Z_BLOCK);
+ if (err == Z_BUF_ERROR && s->pending == 0)
+ err = Z_OK;
+ }
+ if (s->level != level) {
+ s->level = level;
+ s->max_lazy_match = configuration_table[level].max_lazy;
+ s->good_match = configuration_table[level].good_length;
+ s->nice_match = configuration_table[level].nice_length;
+ s->max_chain_length = configuration_table[level].max_chain;
+ }
+ s->strategy = strategy;
+ return err;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateTune(strm, good_length, max_lazy, nice_length, max_chain)
+ z_streamp strm;
+ int good_length;
+ int max_lazy;
+ int nice_length;
+ int max_chain;
+{
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ s = strm->state;
+ s->good_match = good_length;
+ s->max_lazy_match = max_lazy;
+ s->nice_match = nice_length;
+ s->max_chain_length = max_chain;
+ return Z_OK;
+}
+
+/* =========================================================================
+ * For the default windowBits of 15 and memLevel of 8, this function returns
+ * a close to exact, as well as small, upper bound on the compressed size.
+ * They are coded as constants here for a reason--if the #define's are
+ * changed, then this function needs to be changed as well. The return
+ * value for 15 and 8 only works for those exact settings.
+ *
+ * For any setting other than those defaults for windowBits and memLevel,
+ * the value returned is a conservative worst case for the maximum expansion
+ * resulting from using fixed blocks instead of stored blocks, which deflate
+ * can emit on compressed data for some combinations of the parameters.
+ *
+ * This function could be more sophisticated to provide closer upper bounds for
+ * every combination of windowBits and memLevel. But even the conservative
+ * upper bound of about 14% expansion does not seem onerous for output buffer
+ * allocation.
+ */
+uLong ZEXPORT deflateBound(strm, sourceLen)
+ z_streamp strm;
+ uLong sourceLen;
+{
+ deflate_state *s;
+ uLong complen, wraplen;
+ Bytef *str;
+
+ /* conservative upper bound for compressed data */
+ complen = sourceLen +
+ ((sourceLen + 7) >> 3) + ((sourceLen + 63) >> 6) + 5;
+
+ /* if can't get parameters, return conservative bound plus zlib wrapper */
+ if (strm == Z_NULL || strm->state == Z_NULL)
+ return complen + 6;
+
+ /* compute wrapper length */
+ s = strm->state;
+ switch (s->wrap) {
+ case 0: /* raw deflate */
+ wraplen = 0;
+ break;
+ case 1: /* zlib wrapper */
+ wraplen = 6 + (s->strstart ? 4 : 0);
+ break;
+ case 2: /* gzip wrapper */
+ wraplen = 18;
+ if (s->gzhead != Z_NULL) { /* user-supplied gzip header */
+ if (s->gzhead->extra != Z_NULL)
+ wraplen += 2 + s->gzhead->extra_len;
+ str = s->gzhead->name;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ str = s->gzhead->comment;
+ if (str != Z_NULL)
+ do {
+ wraplen++;
+ } while (*str++);
+ if (s->gzhead->hcrc)
+ wraplen += 2;
+ }
+ break;
+ default: /* for compiler happiness */
+ wraplen = 6;
+ }
+
+ /* if not default parameters, return conservative bound */
+ if (s->w_bits != 15 || s->hash_bits != 8 + 7)
+ return complen + wraplen;
+
+ /* default settings: return tight bound for that case */
+ return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) +
+ (sourceLen >> 25) + 13 - 6 + wraplen;
+}
+
+/* =========================================================================
+ * Put a short in the pending buffer. The 16-bit value is put in MSB order.
+ * IN assertion: the stream state is correct and there is enough room in
+ * pending_buf.
+ */
+local void putShortMSB (s, b)
+ deflate_state *s;
+ uInt b;
+{
+ put_byte(s, (Byte)(b >> 8));
+ put_byte(s, (Byte)(b & 0xff));
+}
+
+/* =========================================================================
+ * Flush as much pending output as possible. All deflate() output goes
+ * through this function so some applications may wish to modify it
+ * to avoid allocating a large strm->next_out buffer and copying into it.
+ * (See also read_buf()).
+ */
+local void flush_pending(strm)
+ z_streamp strm;
+{
+ unsigned len;
+ deflate_state *s = strm->state;
+
+ _tr_flush_bits(s);
+ len = s->pending;
+ if (len > strm->avail_out) len = strm->avail_out;
+ if (len == 0) return;
+
+ zmemcpy(strm->next_out, s->pending_out, len);
+ strm->next_out += len;
+ s->pending_out += len;
+ strm->total_out += len;
+ strm->avail_out -= len;
+ s->pending -= len;
+ if (s->pending == 0) {
+ s->pending_out = s->pending_buf;
+ }
+}
+
+/* ========================================================================= */
+int ZEXPORT deflate (strm, flush)
+ z_streamp strm;
+ int flush;
+{
+ int old_flush; /* value of flush param for previous deflate call */
+ deflate_state *s;
+
+ if (strm == Z_NULL || strm->state == Z_NULL ||
+ flush > Z_BLOCK || flush < 0) {
+ return Z_STREAM_ERROR;
+ }
+ s = strm->state;
+
+ if (strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0) ||
+ (s->status == FINISH_STATE && flush != Z_FINISH)) {
+ ERR_RETURN(strm, Z_STREAM_ERROR);
+ }
+ if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR);
+
+ s->strm = strm; /* just in case */
+ old_flush = s->last_flush;
+ s->last_flush = flush;
+
+ /* Write the header */
+ if (s->status == INIT_STATE) {
+#ifdef GZIP
+ if (s->wrap == 2) {
+ strm->adler = crc32(0L, Z_NULL, 0);
+ put_byte(s, 31);
+ put_byte(s, 139);
+ put_byte(s, 8);
+ if (s->gzhead == Z_NULL) {
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, 0);
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, OS_CODE);
+ s->status = BUSY_STATE;
+ }
+ else {
+ put_byte(s, (s->gzhead->text ? 1 : 0) +
+ (s->gzhead->hcrc ? 2 : 0) +
+ (s->gzhead->extra == Z_NULL ? 0 : 4) +
+ (s->gzhead->name == Z_NULL ? 0 : 8) +
+ (s->gzhead->comment == Z_NULL ? 0 : 16)
+ );
+ put_byte(s, (Byte)(s->gzhead->time & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff));
+ put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff));
+ put_byte(s, s->level == 9 ? 2 :
+ (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ?
+ 4 : 0));
+ put_byte(s, s->gzhead->os & 0xff);
+ if (s->gzhead->extra != Z_NULL) {
+ put_byte(s, s->gzhead->extra_len & 0xff);
+ put_byte(s, (s->gzhead->extra_len >> 8) & 0xff);
+ }
+ if (s->gzhead->hcrc)
+ strm->adler = crc32(strm->adler, s->pending_buf,
+ s->pending);
+ s->gzindex = 0;
+ s->status = EXTRA_STATE;
+ }
+ }
+ else
+#endif
+ {
+ uInt header = (Z_DEFLATED + ((s->w_bits-8)<<4)) << 8;
+ uInt level_flags;
+
+ if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2)
+ level_flags = 0;
+ else if (s->level < 6)
+ level_flags = 1;
+ else if (s->level == 6)
+ level_flags = 2;
+ else
+ level_flags = 3;
+ header |= (level_flags << 6);
+ if (s->strstart != 0) header |= PRESET_DICT;
+ header += 31 - (header % 31);
+
+ s->status = BUSY_STATE;
+ putShortMSB(s, header);
+
+ /* Save the adler32 of the preset dictionary: */
+ if (s->strstart != 0) {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ strm->adler = adler32(0L, Z_NULL, 0);
+ }
+ }
+#ifdef GZIP
+ if (s->status == EXTRA_STATE) {
+ if (s->gzhead->extra != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+
+ while (s->gzindex < (s->gzhead->extra_len & 0xffff)) {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size)
+ break;
+ }
+ put_byte(s, s->gzhead->extra[s->gzindex]);
+ s->gzindex++;
+ }
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (s->gzindex == s->gzhead->extra_len) {
+ s->gzindex = 0;
+ s->status = NAME_STATE;
+ }
+ }
+ else
+ s->status = NAME_STATE;
+ }
+ if (s->status == NAME_STATE) {
+ if (s->gzhead->name != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->name[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0) {
+ s->gzindex = 0;
+ s->status = COMMENT_STATE;
+ }
+ }
+ else
+ s->status = COMMENT_STATE;
+ }
+ if (s->status == COMMENT_STATE) {
+ if (s->gzhead->comment != Z_NULL) {
+ uInt beg = s->pending; /* start of bytes to update crc */
+ int val;
+
+ do {
+ if (s->pending == s->pending_buf_size) {
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ flush_pending(strm);
+ beg = s->pending;
+ if (s->pending == s->pending_buf_size) {
+ val = 1;
+ break;
+ }
+ }
+ val = s->gzhead->comment[s->gzindex++];
+ put_byte(s, val);
+ } while (val != 0);
+ if (s->gzhead->hcrc && s->pending > beg)
+ strm->adler = crc32(strm->adler, s->pending_buf + beg,
+ s->pending - beg);
+ if (val == 0)
+ s->status = HCRC_STATE;
+ }
+ else
+ s->status = HCRC_STATE;
+ }
+ if (s->status == HCRC_STATE) {
+ if (s->gzhead->hcrc) {
+ if (s->pending + 2 > s->pending_buf_size)
+ flush_pending(strm);
+ if (s->pending + 2 <= s->pending_buf_size) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ strm->adler = crc32(0L, Z_NULL, 0);
+ s->status = BUSY_STATE;
+ }
+ }
+ else
+ s->status = BUSY_STATE;
+ }
+#endif
+
+ /* Flush as much pending output as possible */
+ if (s->pending != 0) {
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ /* Since avail_out is 0, deflate will be called again with
+ * more output space, but possibly with both pending and
+ * avail_in equal to zero. There won't be anything to do,
+ * but this is not an error situation so make sure we
+ * return OK instead of BUF_ERROR at next call of deflate:
+ */
+ s->last_flush = -1;
+ return Z_OK;
+ }
+
+ /* Make sure there is something to do and avoid duplicate consecutive
+ * flushes. For repeated and useless calls with Z_FINISH, we keep
+ * returning Z_STREAM_END instead of Z_BUF_ERROR.
+ */
+ } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) &&
+ flush != Z_FINISH) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* User must not provide more input after the first FINISH: */
+ if (s->status == FINISH_STATE && strm->avail_in != 0) {
+ ERR_RETURN(strm, Z_BUF_ERROR);
+ }
+
+ /* Start a new block or continue the current one.
+ */
+ if (strm->avail_in != 0 || s->lookahead != 0 ||
+ (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) {
+ block_state bstate;
+
+ bstate = s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) :
+ (s->strategy == Z_RLE ? deflate_rle(s, flush) :
+ (*(configuration_table[s->level].func))(s, flush));
+
+ if (bstate == finish_started || bstate == finish_done) {
+ s->status = FINISH_STATE;
+ }
+ if (bstate == need_more || bstate == finish_started) {
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR next call, see above */
+ }
+ return Z_OK;
+ /* If flush != Z_NO_FLUSH && avail_out == 0, the next call
+ * of deflate should use the same flush parameter to make sure
+ * that the flush is complete. So we don't have to output an
+ * empty block here, this will be done at next call. This also
+ * ensures that for a very small output buffer, we emit at most
+ * one empty block.
+ */
+ }
+ if (bstate == block_done) {
+ if (flush == Z_PARTIAL_FLUSH) {
+ _tr_align(s);
+ } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */
+ _tr_stored_block(s, (char*)0, 0L, 0);
+ /* For a full flush, this empty block will be recognized
+ * as a special marker by inflate_sync().
+ */
+ if (flush == Z_FULL_FLUSH) {
+ CLEAR_HASH(s); /* forget history */
+ if (s->lookahead == 0) {
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->insert = 0;
+ }
+ }
+ }
+ flush_pending(strm);
+ if (strm->avail_out == 0) {
+ s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */
+ return Z_OK;
+ }
+ }
+ }
+ Assert(strm->avail_out > 0, "bug2");
+
+ if (flush != Z_FINISH) return Z_OK;
+ if (s->wrap <= 0) return Z_STREAM_END;
+
+ /* Write the trailer */
+#ifdef GZIP
+ if (s->wrap == 2) {
+ put_byte(s, (Byte)(strm->adler & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->adler >> 24) & 0xff));
+ put_byte(s, (Byte)(strm->total_in & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 8) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 16) & 0xff));
+ put_byte(s, (Byte)((strm->total_in >> 24) & 0xff));
+ }
+ else
+#endif
+ {
+ putShortMSB(s, (uInt)(strm->adler >> 16));
+ putShortMSB(s, (uInt)(strm->adler & 0xffff));
+ }
+ flush_pending(strm);
+ /* If avail_out is zero, the application will call deflate again
+ * to flush the rest.
+ */
+ if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */
+ return s->pending != 0 ? Z_OK : Z_STREAM_END;
+}
+
+/* ========================================================================= */
+int ZEXPORT deflateEnd (strm)
+ z_streamp strm;
+{
+ int status;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+
+ status = strm->state->status;
+ if (status != INIT_STATE &&
+ status != EXTRA_STATE &&
+ status != NAME_STATE &&
+ status != COMMENT_STATE &&
+ status != HCRC_STATE &&
+ status != BUSY_STATE &&
+ status != FINISH_STATE) {
+ return Z_STREAM_ERROR;
+ }
+
+ /* Deallocate in reverse order of allocations: */
+ TRY_FREE(strm, strm->state->pending_buf);
+ TRY_FREE(strm, strm->state->head);
+ TRY_FREE(strm, strm->state->prev);
+ TRY_FREE(strm, strm->state->window);
+
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+
+ return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK;
+}
+
+/* =========================================================================
+ * Copy the source state to the destination state.
+ * To simplify the source, this is not supported for 16-bit MSDOS (which
+ * doesn't have enough memory anyway to duplicate compression states).
+ */
+int ZEXPORT deflateCopy (dest, source)
+ z_streamp dest;
+ z_streamp source;
+{
+#ifdef MAXSEG_64K
+ return Z_STREAM_ERROR;
+#else
+ deflate_state *ds;
+ deflate_state *ss;
+ ushf *overlay;
+
+
+ if (source == Z_NULL || dest == Z_NULL || source->state == Z_NULL) {
+ return Z_STREAM_ERROR;
+ }
+
+ ss = source->state;
+
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+
+ ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state));
+ if (ds == Z_NULL) return Z_MEM_ERROR;
+ dest->state = (struct internal_state FAR *) ds;
+ zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state));
+ ds->strm = dest;
+
+ ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte));
+ ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos));
+ ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos));
+ overlay = (ushf *) ZALLOC(dest, ds->lit_bufsize, sizeof(ush)+2);
+ ds->pending_buf = (uchf *) overlay;
+
+ if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL ||
+ ds->pending_buf == Z_NULL) {
+ deflateEnd (dest);
+ return Z_MEM_ERROR;
+ }
+ /* following zmemcpy do not work for 16-bit MSDOS */
+ zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte));
+ zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos));
+ zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos));
+ zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size);
+
+ ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf);
+ ds->d_buf = overlay + ds->lit_bufsize/sizeof(ush);
+ ds->l_buf = ds->pending_buf + (1+sizeof(ush))*ds->lit_bufsize;
+
+ ds->l_desc.dyn_tree = ds->dyn_ltree;
+ ds->d_desc.dyn_tree = ds->dyn_dtree;
+ ds->bl_desc.dyn_tree = ds->bl_tree;
+
+ return Z_OK;
+#endif /* MAXSEG_64K */
+}
+
+/* ===========================================================================
+ * Read a new buffer from the current input stream, update the adler32
+ * and total number of bytes read. All deflate() input goes through
+ * this function so some applications may wish to modify it to avoid
+ * allocating a large strm->next_in buffer and copying from it.
+ * (See also flush_pending()).
+ */
+local int read_buf(strm, buf, size)
+ z_streamp strm;
+ Bytef *buf;
+ unsigned size;
+{
+ unsigned len = strm->avail_in;
+
+ if (len > size) len = size;
+ if (len == 0) return 0;
+
+ strm->avail_in -= len;
+
+ zmemcpy(buf, strm->next_in, len);
+ if (strm->state->wrap == 1) {
+ strm->adler = adler32(strm->adler, buf, len);
+ }
+#ifdef GZIP
+ else if (strm->state->wrap == 2) {
+ strm->adler = crc32(strm->adler, buf, len);
+ }
+#endif
+ strm->next_in += len;
+ strm->total_in += len;
+
+ return (int)len;
+}
+
+/* ===========================================================================
+ * Initialize the "longest match" routines for a new zlib stream
+ */
+local void lm_init (s)
+ deflate_state *s;
+{
+ s->window_size = (ulg)2L*s->w_size;
+
+ CLEAR_HASH(s);
+
+ /* Set the default configuration parameters:
+ */
+ s->max_lazy_match = configuration_table[s->level].max_lazy;
+ s->good_match = configuration_table[s->level].good_length;
+ s->nice_match = configuration_table[s->level].nice_length;
+ s->max_chain_length = configuration_table[s->level].max_chain;
+
+ s->strstart = 0;
+ s->block_start = 0L;
+ s->lookahead = 0;
+ s->insert = 0;
+ s->match_length = s->prev_length = MIN_MATCH-1;
+ s->match_available = 0;
+ s->ins_h = 0;
+#ifndef FASTEST
+#ifdef ASMV
+ match_init(); /* initialize the asm code */
+#endif
+#endif
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Set match_start to the longest match starting at the given string and
+ * return its length. Matches shorter or equal to prev_length are discarded,
+ * in which case the result is equal to prev_length and match_start is
+ * garbage.
+ * IN assertions: cur_match is the head of the hash chain for the current
+ * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1
+ * OUT assertion: the match length is not greater than s->lookahead.
+ */
+#ifndef ASMV
+/* For 80x86 and 680x0, an optimized version will be provided in match.asm or
+ * match.S. The code will be functionally equivalent.
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ unsigned chain_length = s->max_chain_length;/* max hash chain length */
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ int best_len = s->prev_length; /* best match length so far */
+ int nice_match = s->nice_match; /* stop if match long enough */
+ IPos limit = s->strstart > (IPos)MAX_DIST(s) ?
+ s->strstart - (IPos)MAX_DIST(s) : NIL;
+ /* Stop when cur_match becomes <= limit. To simplify the code,
+ * we prevent matches with the string of window index 0.
+ */
+ Posf *prev = s->prev;
+ uInt wmask = s->w_mask;
+
+#ifdef UNALIGNED_OK
+ /* Compare two bytes at a time. Note: this is not always beneficial.
+ * Try with and without -DUNALIGNED_OK to check.
+ */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1;
+ register ush scan_start = *(ushf*)scan;
+ register ush scan_end = *(ushf*)(scan+best_len-1);
+#else
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+ register Byte scan_end1 = scan[best_len-1];
+ register Byte scan_end = scan[best_len];
+#endif
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ /* Do not waste too much time if we already have a good match: */
+ if (s->prev_length >= s->good_match) {
+ chain_length >>= 2;
+ }
+ /* Do not look for matches beyond the end of the input. This is necessary
+ * to make deflate deterministic.
+ */
+ if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead;
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ do {
+ Assert(cur_match < s->strstart, "no future");
+ match = s->window + cur_match;
+
+ /* Skip to next match if the match length cannot increase
+ * or if the match length is less than 2. Note that the checks below
+ * for insufficient lookahead only occur occasionally for performance
+ * reasons. Therefore uninitialized memory will be accessed, and
+ * conditional jumps will be made that depend on those values.
+ * However the length of the match is limited to the lookahead, so
+ * the output of deflate is not affected by the uninitialized values.
+ */
+#if (defined(UNALIGNED_OK) && MAX_MATCH == 258)
+ /* This code assumes sizeof(unsigned short) == 2. Do not use
+ * UNALIGNED_OK if your compiler uses a different size.
+ */
+ if (*(ushf*)(match+best_len-1) != scan_end ||
+ *(ushf*)match != scan_start) continue;
+
+ /* It is not necessary to compare scan[2] and match[2] since they are
+ * always equal when the other bytes match, given that the hash keys
+ * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at
+ * strstart+3, +5, ... up to strstart+257. We check for insufficient
+ * lookahead only every 4th comparison; the 128th check will be made
+ * at strstart+257. If MAX_MATCH-2 is not a multiple of 8, it is
+ * necessary to put more guard bytes at the end of the window, or
+ * to check more often for insufficient lookahead.
+ */
+ Assert(scan[2] == match[2], "scan[2]?");
+ scan++, match++;
+ do {
+ } while (*(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ *(ushf*)(scan+=2) == *(ushf*)(match+=2) &&
+ scan < strend);
+ /* The funny "do {}" generates better code on most compilers */
+
+ /* Here, scan <= window+strstart+257 */
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+ if (*scan == *match) scan++;
+
+ len = (MAX_MATCH - 1) - (int)(strend-scan);
+ scan = strend - (MAX_MATCH-1);
+
+#else /* UNALIGNED_OK */
+
+ if (match[best_len] != scan_end ||
+ match[best_len-1] != scan_end1 ||
+ *match != *scan ||
+ *++match != scan[1]) continue;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match++;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+ scan = strend - MAX_MATCH;
+
+#endif /* UNALIGNED_OK */
+
+ if (len > best_len) {
+ s->match_start = cur_match;
+ best_len = len;
+ if (len >= nice_match) break;
+#ifdef UNALIGNED_OK
+ scan_end = *(ushf*)(scan+best_len-1);
+#else
+ scan_end1 = scan[best_len-1];
+ scan_end = scan[best_len];
+#endif
+ }
+ } while ((cur_match = prev[cur_match & wmask]) > limit
+ && --chain_length != 0);
+
+ if ((uInt)best_len <= s->lookahead) return (uInt)best_len;
+ return s->lookahead;
+}
+#endif /* ASMV */
+
+#else /* FASTEST */
+
+/* ---------------------------------------------------------------------------
+ * Optimized version for FASTEST only
+ */
+local uInt longest_match(s, cur_match)
+ deflate_state *s;
+ IPos cur_match; /* current match */
+{
+ register Bytef *scan = s->window + s->strstart; /* current string */
+ register Bytef *match; /* matched string */
+ register int len; /* length of current match */
+ register Bytef *strend = s->window + s->strstart + MAX_MATCH;
+
+ /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.
+ * It is easy to get rid of this optimization if necessary.
+ */
+ Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever");
+
+ Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead");
+
+ Assert(cur_match < s->strstart, "no future");
+
+ match = s->window + cur_match;
+
+ /* Return failure if the match length is less than 2:
+ */
+ if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1;
+
+ /* The check at best_len-1 can be removed because it will be made
+ * again later. (This heuristic is not always a win.)
+ * It is not necessary to compare scan[2] and match[2] since they
+ * are always equal when the other bytes match, given that
+ * the hash keys are equal and that HASH_BITS >= 8.
+ */
+ scan += 2, match += 2;
+ Assert(*scan == *match, "match[2]?");
+
+ /* We check for insufficient lookahead only every 8th comparison;
+ * the 256th check will be made at strstart+258.
+ */
+ do {
+ } while (*++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ *++scan == *++match && *++scan == *++match &&
+ scan < strend);
+
+ Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan");
+
+ len = MAX_MATCH - (int)(strend - scan);
+
+ if (len < MIN_MATCH) return MIN_MATCH - 1;
+
+ s->match_start = cur_match;
+ return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead;
+}
+
+#endif /* FASTEST */
+
+#ifdef DEBUG
+/* ===========================================================================
+ * Check that the match at match_start is indeed a match.
+ */
+local void check_match(s, start, match, length)
+ deflate_state *s;
+ IPos start, match;
+ int length;
+{
+ /* check that the match is indeed a match */
+ if (zmemcmp(s->window + match,
+ s->window + start, length) != EQUAL) {
+ fprintf(stderr, " start %u, match %u, length %d\n",
+ start, match, length);
+ do {
+ fprintf(stderr, "%c%c", s->window[match++], s->window[start++]);
+ } while (--length != 0);
+ z_error("invalid match");
+ }
+ if (z_verbose > 1) {
+ fprintf(stderr,"\\[%d,%d]", start-match, length);
+ do { putc(s->window[start++], stderr); } while (--length != 0);
+ }
+}
+#else
+# define check_match(s, start, match, length)
+#endif /* DEBUG */
+
+/* ===========================================================================
+ * Fill the window when the lookahead becomes insufficient.
+ * Updates strstart and lookahead.
+ *
+ * IN assertion: lookahead < MIN_LOOKAHEAD
+ * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD
+ * At least one byte has been read, or avail_in == 0; reads are
+ * performed for at least two bytes (required for the zip translate_eol
+ * option -- not supported here).
+ */
+local void fill_window(s)
+ deflate_state *s;
+{
+ register unsigned n, m;
+ register Posf *p;
+ unsigned more; /* Amount of free space at the end of the window. */
+ uInt wsize = s->w_size;
+
+ Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead");
+
+ do {
+ more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart);
+
+ /* Deal with !@#$% 64K limit: */
+ if (sizeof(int) <= 2) {
+ if (more == 0 && s->strstart == 0 && s->lookahead == 0) {
+ more = wsize;
+
+ } else if (more == (unsigned)(-1)) {
+ /* Very unlikely, but possible on 16 bit machine if
+ * strstart == 0 && lookahead == 1 (input done a byte at time)
+ */
+ more--;
+ }
+ }
+
+ /* If the window is almost full and there is insufficient lookahead,
+ * move the upper half to the lower one to make room in the upper half.
+ */
+ if (s->strstart >= wsize+MAX_DIST(s)) {
+
+ zmemcpy(s->window, s->window+wsize, (unsigned)wsize);
+ s->match_start -= wsize;
+ s->strstart -= wsize; /* we now have strstart >= MAX_DIST */
+ s->block_start -= (long) wsize;
+
+ /* Slide the hash table (could be avoided with 32 bit values
+ at the expense of memory usage). We slide even when level == 0
+ to keep the hash table consistent if we switch back to level > 0
+ later. (Using level 0 permanently is not an optimal usage of
+ zlib, so we don't care about this pathological case.)
+ */
+ n = s->hash_size;
+ p = &s->head[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ } while (--n);
+
+ n = wsize;
+#ifndef FASTEST
+ p = &s->prev[n];
+ do {
+ m = *--p;
+ *p = (Pos)(m >= wsize ? m-wsize : NIL);
+ /* If n is not on any hash chain, prev[n] is garbage but
+ * its value will never be used.
+ */
+ } while (--n);
+#endif
+ more += wsize;
+ }
+ if (s->strm->avail_in == 0) break;
+
+ /* If there was no sliding:
+ * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&
+ * more == window_size - lookahead - strstart
+ * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)
+ * => more >= window_size - 2*WSIZE + 2
+ * In the BIG_MEM or MMAP case (not yet supported),
+ * window_size == input_size + MIN_LOOKAHEAD &&
+ * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.
+ * Otherwise, window_size == 2*WSIZE so more >= 2.
+ * If there was sliding, more >= WSIZE. So in all cases, more >= 2.
+ */
+ Assert(more >= 2, "more < 2");
+
+ n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more);
+ s->lookahead += n;
+
+ /* Initialize the hash value now that we have some input: */
+ if (s->lookahead + s->insert >= MIN_MATCH) {
+ uInt str = s->strstart - s->insert;
+ s->ins_h = s->window[str];
+ UPDATE_HASH(s, s->ins_h, s->window[str + 1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ while (s->insert) {
+ UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]);
+#ifndef FASTEST
+ s->prev[str & s->w_mask] = s->head[s->ins_h];
+#endif
+ s->head[s->ins_h] = (Pos)str;
+ str++;
+ s->insert--;
+ if (s->lookahead + s->insert < MIN_MATCH)
+ break;
+ }
+ }
+ /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,
+ * but this is not important since only literal bytes will be emitted.
+ */
+
+ } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0);
+
+ /* If the WIN_INIT bytes after the end of the current data have never been
+ * written, then zero those bytes in order to avoid memory check reports of
+ * the use of uninitialized (or uninitialised as Julian writes) bytes by
+ * the longest match routines. Update the high water mark for the next
+ * time through here. WIN_INIT is set to MAX_MATCH since the longest match
+ * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.
+ */
+ if (s->high_water < s->window_size) {
+ ulg curr = s->strstart + (ulg)(s->lookahead);
+ ulg init;
+
+ if (s->high_water < curr) {
+ /* Previous high water mark below current data -- zero WIN_INIT
+ * bytes or up to end of window, whichever is less.
+ */
+ init = s->window_size - curr;
+ if (init > WIN_INIT)
+ init = WIN_INIT;
+ zmemzero(s->window + curr, (unsigned)init);
+ s->high_water = curr + init;
+ }
+ else if (s->high_water < (ulg)curr + WIN_INIT) {
+ /* High water mark at or above current data, but below current data
+ * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up
+ * to end of window, whichever is less.
+ */
+ init = (ulg)curr + WIN_INIT - s->high_water;
+ if (init > s->window_size - s->high_water)
+ init = s->window_size - s->high_water;
+ zmemzero(s->window + s->high_water, (unsigned)init);
+ s->high_water += init;
+ }
+ }
+
+ Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,
+ "not enough room for search");
+}
+
+/* ===========================================================================
+ * Flush the current block, with given end-of-file flag.
+ * IN assertion: strstart is set to the end of the current match.
+ */
+#define FLUSH_BLOCK_ONLY(s, last) { \
+ _tr_flush_block(s, (s->block_start >= 0L ? \
+ (charf *)&s->window[(unsigned)s->block_start] : \
+ (charf *)Z_NULL), \
+ (ulg)((long)s->strstart - s->block_start), \
+ (last)); \
+ s->block_start = s->strstart; \
+ flush_pending(s->strm); \
+ Tracev((stderr,"[FLUSH]")); \
+}
+
+/* Same but force premature exit if necessary. */
+#define FLUSH_BLOCK(s, last) { \
+ FLUSH_BLOCK_ONLY(s, last); \
+ if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \
+}
+
+/* ===========================================================================
+ * Copy without compression as much as possible from the input stream, return
+ * the current block state.
+ * This function does not insert new strings in the dictionary since
+ * uncompressible data is probably not useful. This function is used
+ * only for the level=0 compression option.
+ * NOTE: this function should be optimized to avoid extra copying from
+ * window to pending_buf.
+ */
+local block_state deflate_stored(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ /* Stored blocks are limited to 0xffff bytes, pending_buf is limited
+ * to pending_buf_size, and each stored block has a 5 byte header:
+ */
+ ulg max_block_size = 0xffff;
+ ulg max_start;
+
+ if (max_block_size > s->pending_buf_size - 5) {
+ max_block_size = s->pending_buf_size - 5;
+ }
+
+ /* Copy as much as possible from input to output: */
+ for (;;) {
+ /* Fill the window as much as possible: */
+ if (s->lookahead <= 1) {
+
+ Assert(s->strstart < s->w_size+MAX_DIST(s) ||
+ s->block_start >= (long)s->w_size, "slide too late");
+
+ fill_window(s);
+ if (s->lookahead == 0 && flush == Z_NO_FLUSH) return need_more;
+
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+ Assert(s->block_start >= 0L, "block gone");
+
+ s->strstart += s->lookahead;
+ s->lookahead = 0;
+
+ /* Emit a stored block if pending_buf will be full: */
+ max_start = s->block_start + max_block_size;
+ if (s->strstart == 0 || (ulg)s->strstart >= max_start) {
+ /* strstart == 0 is possible when wraparound on 16-bit machine */
+ s->lookahead = (uInt)(s->strstart - max_start);
+ s->strstart = (uInt)max_start;
+ FLUSH_BLOCK(s, 0);
+ }
+ /* Flush if we may have to slide, otherwise block_start may become
+ * negative and the data will be gone:
+ */
+ if (s->strstart - (uInt)s->block_start >= MAX_DIST(s)) {
+ FLUSH_BLOCK(s, 0);
+ }
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if ((long)s->strstart > s->block_start)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * Compress as much as possible from the input stream, return the current
+ * block state.
+ * This function does not perform lazy evaluation of matches and inserts
+ * new strings in the dictionary only for unmatched strings or for short
+ * matches. It is used only for the fast compression options.
+ */
+local block_state deflate_fast(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of the hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ * At this point we have always match_length < MIN_MATCH
+ */
+ if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+ }
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->match_start, s->match_length);
+
+ _tr_tally_dist(s, s->strstart - s->match_start,
+ s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+
+ /* Insert new strings in the hash table only if the match length
+ * is not too large. This saves time but degrades compression.
+ */
+#ifndef FASTEST
+ if (s->match_length <= s->max_insert_length &&
+ s->lookahead >= MIN_MATCH) {
+ s->match_length--; /* string at strstart already in table */
+ do {
+ s->strstart++;
+ INSERT_STRING(s, s->strstart, hash_head);
+ /* strstart never exceeds WSIZE-MAX_MATCH, so there are
+ * always MIN_MATCH bytes ahead.
+ */
+ } while (--s->match_length != 0);
+ s->strstart++;
+ } else
+#endif
+ {
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ s->ins_h = s->window[s->strstart];
+ UPDATE_HASH(s, s->ins_h, s->window[s->strstart+1]);
+#if MIN_MATCH != 3
+ Call UPDATE_HASH() MIN_MATCH-3 more times
+#endif
+ /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not
+ * matter since it will be recomputed at next deflate call.
+ */
+ }
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+#ifndef FASTEST
+/* ===========================================================================
+ * Same as above, but achieves better compression. We use a lazy
+ * evaluation for matches: a match is finally adopted only if there is
+ * no better match at the next window position.
+ */
+local block_state deflate_slow(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ IPos hash_head; /* head of hash chain */
+ int bflush; /* set if current block must be flushed */
+
+ /* Process the input block. */
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the next match, plus MIN_MATCH bytes to insert the
+ * string following the next match.
+ */
+ if (s->lookahead < MIN_LOOKAHEAD) {
+ fill_window(s);
+ if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* Insert the string window[strstart .. strstart+2] in the
+ * dictionary, and set hash_head to the head of the hash chain:
+ */
+ hash_head = NIL;
+ if (s->lookahead >= MIN_MATCH) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+
+ /* Find the longest match, discarding those <= prev_length.
+ */
+ s->prev_length = s->match_length, s->prev_match = s->match_start;
+ s->match_length = MIN_MATCH-1;
+
+ if (hash_head != NIL && s->prev_length < s->max_lazy_match &&
+ s->strstart - hash_head <= MAX_DIST(s)) {
+ /* To simplify the code, we prevent matches with the string
+ * of window index 0 (in particular we have to avoid a match
+ * of the string with itself at the start of the input file).
+ */
+ s->match_length = longest_match (s, hash_head);
+ /* longest_match() sets match_start */
+
+ if (s->match_length <= 5 && (s->strategy == Z_FILTERED
+#if TOO_FAR <= 32767
+ || (s->match_length == MIN_MATCH &&
+ s->strstart - s->match_start > TOO_FAR)
+#endif
+ )) {
+
+ /* If prev_match is also MIN_MATCH, match_start is garbage
+ * but we will ignore the current match anyway.
+ */
+ s->match_length = MIN_MATCH-1;
+ }
+ }
+ /* If there was a match at the previous step and the current
+ * match is not better, output the previous match:
+ */
+ if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) {
+ uInt max_insert = s->strstart + s->lookahead - MIN_MATCH;
+ /* Do not insert strings in hash table beyond this. */
+
+ check_match(s, s->strstart-1, s->prev_match, s->prev_length);
+
+ _tr_tally_dist(s, s->strstart -1 - s->prev_match,
+ s->prev_length - MIN_MATCH, bflush);
+
+ /* Insert in hash table all strings up to the end of the match.
+ * strstart-1 and strstart are already inserted. If there is not
+ * enough lookahead, the last two strings are not inserted in
+ * the hash table.
+ */
+ s->lookahead -= s->prev_length-1;
+ s->prev_length -= 2;
+ do {
+ if (++s->strstart <= max_insert) {
+ INSERT_STRING(s, s->strstart, hash_head);
+ }
+ } while (--s->prev_length != 0);
+ s->match_available = 0;
+ s->match_length = MIN_MATCH-1;
+ s->strstart++;
+
+ if (bflush) FLUSH_BLOCK(s, 0);
+
+ } else if (s->match_available) {
+ /* If there was no match at the previous position, output a
+ * single literal. If there was a match but the current match
+ * is longer, truncate the previous match to a single literal.
+ */
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ if (bflush) {
+ FLUSH_BLOCK_ONLY(s, 0);
+ }
+ s->strstart++;
+ s->lookahead--;
+ if (s->strm->avail_out == 0) return need_more;
+ } else {
+ /* There is no previous match to compare with, wait for
+ * the next step to decide.
+ */
+ s->match_available = 1;
+ s->strstart++;
+ s->lookahead--;
+ }
+ }
+ Assert (flush != Z_NO_FLUSH, "no flush?");
+ if (s->match_available) {
+ Tracevv((stderr,"%c", s->window[s->strstart-1]));
+ _tr_tally_lit(s, s->window[s->strstart-1], bflush);
+ s->match_available = 0;
+ }
+ s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+#endif /* FASTEST */
+
+/* ===========================================================================
+ * For Z_RLE, simply look for runs of bytes, generate matches only of distance
+ * one. Do not maintain a hash table. (It will be regenerated if this run of
+ * deflate switches away from Z_RLE.)
+ */
+local block_state deflate_rle(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+ uInt prev; /* byte at distance one to match */
+ Bytef *scan, *strend; /* scan goes up to strend for length of run */
+
+ for (;;) {
+ /* Make sure that we always have enough lookahead, except
+ * at the end of the input file. We need MAX_MATCH bytes
+ * for the longest run, plus one for the unrolled loop.
+ */
+ if (s->lookahead <= MAX_MATCH) {
+ fill_window(s);
+ if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) {
+ return need_more;
+ }
+ if (s->lookahead == 0) break; /* flush the current block */
+ }
+
+ /* See how many times the previous byte repeats */
+ s->match_length = 0;
+ if (s->lookahead >= MIN_MATCH && s->strstart > 0) {
+ scan = s->window + s->strstart - 1;
+ prev = *scan;
+ if (prev == *++scan && prev == *++scan && prev == *++scan) {
+ strend = s->window + s->strstart + MAX_MATCH;
+ do {
+ } while (prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ prev == *++scan && prev == *++scan &&
+ scan < strend);
+ s->match_length = MAX_MATCH - (int)(strend - scan);
+ if (s->match_length > s->lookahead)
+ s->match_length = s->lookahead;
+ }
+ Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan");
+ }
+
+ /* Emit match if have run of MIN_MATCH or longer, else emit literal */
+ if (s->match_length >= MIN_MATCH) {
+ check_match(s, s->strstart, s->strstart - 1, s->match_length);
+
+ _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush);
+
+ s->lookahead -= s->match_length;
+ s->strstart += s->match_length;
+ s->match_length = 0;
+ } else {
+ /* No match, output a literal byte */
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ }
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
+
+/* ===========================================================================
+ * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table.
+ * (It will be regenerated if this run of deflate switches away from Huffman.)
+ */
+local block_state deflate_huff(s, flush)
+ deflate_state *s;
+ int flush;
+{
+ int bflush; /* set if current block must be flushed */
+
+ for (;;) {
+ /* Make sure that we have a literal to write. */
+ if (s->lookahead == 0) {
+ fill_window(s);
+ if (s->lookahead == 0) {
+ if (flush == Z_NO_FLUSH)
+ return need_more;
+ break; /* flush the current block */
+ }
+ }
+
+ /* Output a literal byte */
+ s->match_length = 0;
+ Tracevv((stderr,"%c", s->window[s->strstart]));
+ _tr_tally_lit (s, s->window[s->strstart], bflush);
+ s->lookahead--;
+ s->strstart++;
+ if (bflush) FLUSH_BLOCK(s, 0);
+ }
+ s->insert = 0;
+ if (flush == Z_FINISH) {
+ FLUSH_BLOCK(s, 1);
+ return finish_done;
+ }
+ if (s->last_lit)
+ FLUSH_BLOCK(s, 0);
+ return block_done;
+}
diff --git a/compat/zlib/deflate.h b/compat/zlib/deflate.h
new file mode 100644
index 0000000..ce0299e
--- /dev/null
+++ b/compat/zlib/deflate.h
@@ -0,0 +1,346 @@
+/* deflate.h -- internal compression state
+ * Copyright (C) 1995-2012 Jean-loup Gailly
+ * 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.
+ */
+
+/* @(#) $Id$ */
+
+#ifndef DEFLATE_H
+#define DEFLATE_H
+
+#include "zutil.h"
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer creation by deflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip encoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GZIP
+#endif
+
+/* ===========================================================================
+ * Internal compression state.
+ */
+
+#define LENGTH_CODES 29
+/* number of length codes, not counting the special END_BLOCK code */
+
+#define LITERALS 256
+/* number of literal bytes 0..255 */
+
+#define L_CODES (LITERALS+1+LENGTH_CODES)
+/* number of Literal or Length codes, including the END_BLOCK code */
+
+#define D_CODES 30
+/* number of distance codes */
+
+#define BL_CODES 19
+/* number of codes used to transfer the bit lengths */
+
+#define HEAP_SIZE (2*L_CODES+1)
+/* maximum heap size */
+
+#define MAX_BITS 15
+/* All codes must not exceed MAX_BITS bits */
+
+#define Buf_size 16
+/* size of bit buffer in bi_buf */
+
+#define INIT_STATE 42
+#define EXTRA_STATE 69
+#define NAME_STATE 73
+#define COMMENT_STATE 91
+#define HCRC_STATE 103
+#define BUSY_STATE 113
+#define FINISH_STATE 666
+/* Stream status */
+
+
+/* Data structure describing a single value and its code string. */
+typedef struct ct_data_s {
+ union {
+ ush freq; /* frequency count */
+ ush code; /* bit string */
+ } fc;
+ union {
+ ush dad; /* father node in Huffman tree */
+ ush len; /* length of bit string */
+ } dl;
+} FAR ct_data;
+
+#define Freq fc.freq
+#define Code fc.code
+#define Dad dl.dad
+#define Len dl.len
+
+typedef struct static_tree_desc_s static_tree_desc;
+
+typedef struct tree_desc_s {
+ ct_data *dyn_tree; /* the dynamic tree */
+ int max_code; /* largest code with non zero frequency */
+ static_tree_desc *stat_desc; /* the corresponding static tree */
+} FAR tree_desc;
+
+typedef ush Pos;
+typedef Pos FAR Posf;
+typedef unsigned IPos;
+
+/* A Pos is an index in the character window. We use short instead of int to
+ * save space in the various tables. IPos is used only for parameter passing.
+ */
+
+typedef struct internal_state {
+ z_streamp strm; /* pointer back to this zlib stream */
+ int status; /* as the name implies */
+ Bytef *pending_buf; /* output still pending */
+ ulg pending_buf_size; /* size of pending_buf */
+ Bytef *pending_out; /* next pending byte to output to the stream */
+ uInt pending; /* nb of bytes in the pending buffer */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ gz_headerp gzhead; /* gzip header information to write */
+ uInt gzindex; /* where in extra, name, or comment */
+ Byte method; /* can only be DEFLATED */
+ int last_flush; /* value of flush param for previous deflate call */
+
+ /* used by deflate.c: */
+
+ uInt w_size; /* LZ77 window size (32K by default) */
+ uInt w_bits; /* log2(w_size) (8..16) */
+ uInt w_mask; /* w_size - 1 */
+
+ Bytef *window;
+ /* Sliding window. Input bytes are read into the second half of the window,
+ * and move to the first half later to keep a dictionary of at least wSize
+ * bytes. With this organization, matches are limited to a distance of
+ * wSize-MAX_MATCH bytes, but this ensures that IO is always
+ * performed with a length multiple of the block size. Also, it limits
+ * the window size to 64K, which is quite useful on MSDOS.
+ * To do: use the user input buffer as sliding window.
+ */
+
+ ulg window_size;
+ /* Actual size of window: 2*wSize, except when the user input buffer
+ * is directly used as sliding window.
+ */
+
+ Posf *prev;
+ /* Link to older string with same hash index. To limit the size of this
+ * array to 64K, this link is maintained only for the last 32K strings.
+ * An index in this array is thus a window index modulo 32K.
+ */
+
+ Posf *head; /* Heads of the hash chains or NIL. */
+
+ uInt ins_h; /* hash index of string to be inserted */
+ uInt hash_size; /* number of elements in hash table */
+ uInt hash_bits; /* log2(hash_size) */
+ uInt hash_mask; /* hash_size-1 */
+
+ uInt hash_shift;
+ /* Number of bits by which ins_h must be shifted at each input
+ * step. It must be such that after MIN_MATCH steps, the oldest
+ * byte no longer takes part in the hash key, that is:
+ * hash_shift * MIN_MATCH >= hash_bits
+ */
+
+ long block_start;
+ /* Window position at the beginning of the current output block. Gets
+ * negative when the window is moved backwards.
+ */
+
+ uInt match_length; /* length of best match */
+ IPos prev_match; /* previous match */
+ int match_available; /* set if previous match exists */
+ uInt strstart; /* start of string to insert */
+ uInt match_start; /* start of matching string */
+ uInt lookahead; /* number of valid bytes ahead in window */
+
+ uInt prev_length;
+ /* Length of the best match at previous step. Matches not greater than this
+ * are discarded. This is used in the lazy match evaluation.
+ */
+
+ uInt max_chain_length;
+ /* To speed up deflation, hash chains are never searched beyond this
+ * length. A higher limit improves compression ratio but degrades the
+ * speed.
+ */
+
+ uInt max_lazy_match;
+ /* Attempt to find a better match only when the current match is strictly
+ * smaller than this value. This mechanism is used only for compression
+ * levels >= 4.
+ */
+# define max_insert_length max_lazy_match
+ /* Insert new strings in the hash table only if the match length is not
+ * greater than this length. This saves time but degrades compression.
+ * max_insert_length is used only for compression levels <= 3.
+ */
+
+ int level; /* compression level (1..9) */
+ int strategy; /* favor or force Huffman coding*/
+
+ uInt good_match;
+ /* Use a faster search when the previous match is longer than this */
+
+ int nice_match; /* Stop searching when current match exceeds this */
+
+ /* used by trees.c: */
+ /* Didn't use ct_data typedef below to suppress compiler warning */
+ struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */
+ struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */
+ struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */
+
+ struct tree_desc_s l_desc; /* desc. for literal tree */
+ struct tree_desc_s d_desc; /* desc. for distance tree */
+ struct tree_desc_s bl_desc; /* desc. for bit length tree */
+
+ ush bl_count[MAX_BITS+1];
+ /* number of codes at each bit length for an optimal tree */
+
+ int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */
+ int heap_len; /* number of elements in the heap */
+ int heap_max; /* element of largest frequency */
+ /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.
+ * The same heap array is used to build all trees.
+ */
+
+ uch depth[2*L_CODES+1];
+ /* Depth of each subtree used as tie breaker for trees of equal frequency
+ */
+
+ uchf *l_buf; /* buffer for literals or lengths */
+
+ uInt lit_bufsize;
+ /* Size of match buffer for literals/lengths. There are 4 reasons for
+ * limiting lit_bufsize to 64K:
+ * - frequencies can be kept in 16 bit counters
+ * - if compression is not successful for the first block, all input
+ * data is still in the window so we can still emit a stored block even
+ * when input comes from standard input. (This can also be done for
+ * all blocks if lit_bufsize is not greater than 32K.)
+ * - if compression is not successful for a file smaller than 64K, we can
+ * even emit a stored file instead of a stored block (saving 5 bytes).
+ * This is applicable only for zip (not gzip or zlib).
+ * - creating new Huffman trees less frequently may not provide fast
+ * adaptation to changes in the input data statistics. (Take for
+ * example a binary file with poorly compressible code followed by
+ * a highly compressible string table.) Smaller buffer sizes give
+ * fast adaptation but have of course the overhead of transmitting
+ * trees more frequently.
+ * - I can't count above 4
+ */
+
+ uInt last_lit; /* running index in l_buf */
+
+ ushf *d_buf;
+ /* Buffer for distances. To simplify the code, d_buf and l_buf have
+ * the same number of elements. To use different lengths, an extra flag
+ * array would be necessary.
+ */
+
+ ulg opt_len; /* bit length of current block with optimal trees */
+ ulg static_len; /* bit length of current block with static trees */
+ uInt matches; /* number of string matches in current block */
+ uInt insert; /* bytes at end of window left to insert */
+
+#ifdef DEBUG
+ ulg compressed_len; /* total bit length of compressed file mod 2^32 */
+ ulg bits_sent; /* bit length of compressed data sent mod 2^32 */
+#endif
+
+ ush bi_buf;
+ /* Output buffer. bits are inserted starting at the bottom (least
+ * significant bits).
+ */
+ int bi_valid;
+ /* Number of valid bits in bi_buf. All bits above the last valid bit
+ * are always zero.
+ */
+
+ ulg high_water;
+ /* High water mark offset in window for initialized bytes -- bytes above
+ * this are set to zero in order to avoid memory check warnings when
+ * longest match routines access bytes past the input. This is then
+ * updated to the new high water mark.
+ */
+
+} FAR deflate_state;
+
+/* Output a byte on the stream.
+ * IN assertion: there is enough room in pending_buf.
+ */
+#define put_byte(s, c) {s->pending_buf[s->pending++] = (c);}
+
+
+#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1)
+/* Minimum amount of lookahead, except at the end of the input file.
+ * See deflate.c for comments about the MIN_MATCH+1.
+ */
+
+#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD)
+/* In order to simplify the code, particularly on 16 bit machines, match
+ * distances are limited to MAX_DIST instead of WSIZE.
+ */
+
+#define WIN_INIT MAX_MATCH
+/* Number of bytes after end of data in window to initialize in order to avoid
+ memory checker errors from longest match routines */
+
+ /* in trees.c */
+void ZLIB_INTERNAL _tr_init OF((deflate_state *s));
+int ZLIB_INTERNAL _tr_tally OF((deflate_state *s, unsigned dist, unsigned lc));
+void ZLIB_INTERNAL _tr_flush_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+void ZLIB_INTERNAL _tr_flush_bits OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_align OF((deflate_state *s));
+void ZLIB_INTERNAL _tr_stored_block OF((deflate_state *s, charf *buf,
+ ulg stored_len, int last));
+
+#define d_code(dist) \
+ ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)])
+/* Mapping from a distance to a distance code. dist is the distance - 1 and
+ * must not have side effects. _dist_code[256] and _dist_code[257] are never
+ * used.
+ */
+
+#ifndef DEBUG
+/* Inline versions of _tr_tally for speed: */
+
+#if defined(GEN_TREES_H) || !defined(STDC)
+ extern uch ZLIB_INTERNAL _length_code[];
+ extern uch ZLIB_INTERNAL _dist_code[];
+#else
+ extern const uch ZLIB_INTERNAL _length_code[];
+ extern const uch ZLIB_INTERNAL _dist_code[];
+#endif
+
+# define _tr_tally_lit(s, c, flush) \
+ { uch cc = (c); \
+ s->d_buf[s->last_lit] = 0; \
+ s->l_buf[s->last_lit++] = cc; \
+ s->dyn_ltree[cc].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+# define _tr_tally_dist(s, distance, length, flush) \
+ { uch len = (length); \
+ ush dist = (distance); \
+ s->d_buf[s->last_lit] = dist; \
+ s->l_buf[s->last_lit++] = len; \
+ dist--; \
+ s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \
+ s->dyn_dtree[d_code(dist)].Freq++; \
+ flush = (s->last_lit == s->lit_bufsize-1); \
+ }
+#else
+# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c)
+# define _tr_tally_dist(s, distance, length, flush) \
+ flush = _tr_tally(s, distance, length)
+#endif
+
+#endif /* DEFLATE_H */
diff --git a/compat/zlib/doc/algorithm.txt b/compat/zlib/doc/algorithm.txt
new file mode 100644
index 0000000..c97f495
--- /dev/null
+++ b/compat/zlib/doc/algorithm.txt
@@ -0,0 +1,209 @@
+1. Compression algorithm (deflate)
+
+The deflation algorithm used by gzip (also zip and zlib) is a variation of
+LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in
+the input data. The second occurrence of a string is replaced by a
+pointer to the previous string, in the form of a pair (distance,
+length). Distances are limited to 32K bytes, and lengths are limited
+to 258 bytes. When a string does not occur anywhere in the previous
+32K bytes, it is emitted as a sequence of literal bytes. (In this
+description, `string' must be taken as an arbitrary sequence of bytes,
+and is not restricted to printable characters.)
+
+Literals or match lengths are compressed with one Huffman tree, and
+match distances are compressed with another tree. The trees are stored
+in a compact form at the start of each block. The blocks can have any
+size (except that the compressed data for one block must fit in
+available memory). A block is terminated when deflate() determines that
+it would be useful to start another block with fresh trees. (This is
+somewhat similar to the behavior of LZW-based _compress_.)
+
+Duplicated strings are found using a hash table. All input strings of
+length 3 are inserted in the hash table. A hash index is computed for
+the next 3 bytes. If the hash chain for this index is not empty, all
+strings in the chain are compared with the current input string, and
+the longest match is selected.
+
+The hash chains are searched starting with the most recent strings, to
+favor small distances and thus take advantage of the Huffman encoding.
+The hash chains are singly linked. There are no deletions from the
+hash chains, the algorithm simply discards matches that are too old.
+
+To avoid a worst-case situation, very long hash chains are arbitrarily
+truncated at a certain length, determined by a runtime option (level
+parameter of deflateInit). So deflate() does not always find the longest
+possible match but generally finds a match which is long enough.
+
+deflate() also defers the selection of matches with a lazy evaluation
+mechanism. After a match of length N has been found, deflate() searches for
+a longer match at the next input byte. If a longer match is found, the
+previous match is truncated to a length of one (thus producing a single
+literal byte) and the process of lazy evaluation begins again. Otherwise,
+the original match is kept, and the next match search is attempted only N
+steps later.
+
+The lazy match evaluation is also subject to a runtime parameter. If
+the current match is long enough, deflate() reduces the search for a longer
+match, thus speeding up the whole process. If compression ratio is more
+important than speed, deflate() attempts a complete second search even if
+the first match is already long enough.
+
+The lazy match evaluation is not performed for the fastest compression
+modes (level parameter 1 to 3). For these fast modes, new strings
+are inserted in the hash table only when no match was found, or
+when the match is not too long. This degrades the compression ratio
+but saves time since there are both fewer insertions and fewer searches.
+
+
+2. Decompression algorithm (inflate)
+
+2.1 Introduction
+
+The key question is how to represent a Huffman code (or any prefix code) so
+that you can decode fast. The most important characteristic is that shorter
+codes are much more common than longer codes, so pay attention to decoding the
+short codes fast, and let the long codes take longer to decode.
+
+inflate() sets up a first level table that covers some number of bits of
+input less than the length of longest code. It gets that many bits from the
+stream, and looks it up in the table. The table will tell if the next
+code is that many bits or less and how many, and if it is, it will tell
+the value, else it will point to the next level table for which inflate()
+grabs more bits and tries to decode a longer code.
+
+How many bits to make the first lookup is a tradeoff between the time it
+takes to decode and the time it takes to build the table. If building the
+table took no time (and if you had infinite memory), then there would only
+be a first level table to cover all the way to the longest code. However,
+building the table ends up taking a lot longer for more bits since short
+codes are replicated many times in such a table. What inflate() does is
+simply to make the number of bits in the first table a variable, and then
+to set that variable for the maximum speed.
+
+For inflate, which has 286 possible codes for the literal/length tree, the size
+of the first table is nine bits. Also the distance trees have 30 possible
+values, and the size of the first table is six bits. Note that for each of
+those cases, the table ended up one bit longer than the ``average'' code
+length, i.e. the code length of an approximately flat code which would be a
+little more than eight bits for 286 symbols and a little less than five bits
+for 30 symbols.
+
+
+2.2 More details on the inflate table lookup
+
+Ok, you want to know what this cleverly obfuscated inflate tree actually
+looks like. You are correct that it's not a Huffman tree. It is simply a
+lookup table for the first, let's say, nine bits of a Huffman symbol. The
+symbol could be as short as one bit or as long as 15 bits. If a particular
+symbol is shorter than nine bits, then that symbol's translation is duplicated
+in all those entries that start with that symbol's bits. For example, if the
+symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a
+symbol is nine bits long, it appears in the table once.
+
+If the symbol is longer than nine bits, then that entry in the table points
+to another similar table for the remaining bits. Again, there are duplicated
+entries as needed. The idea is that most of the time the symbol will be short
+and there will only be one table look up. (That's whole idea behind data
+compression in the first place.) For the less frequent long symbols, there
+will be two lookups. If you had a compression method with really long
+symbols, you could have as many levels of lookups as is efficient. For
+inflate, two is enough.
+
+So a table entry either points to another table (in which case nine bits in
+the above example are gobbled), or it contains the translation for the symbol
+and the number of bits to gobble. Then you start again with the next
+ungobbled bit.
+
+You may wonder: why not just have one lookup table for how ever many bits the
+longest symbol is? The reason is that if you do that, you end up spending
+more time filling in duplicate symbol entries than you do actually decoding.
+At least for deflate's output that generates new trees every several 10's of
+kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code
+would take too long if you're only decoding several thousand symbols. At the
+other extreme, you could make a new table for every bit in the code. In fact,
+that's essentially a Huffman tree. But then you spend too much time
+traversing the tree while decoding, even for short symbols.
+
+So the number of bits for the first lookup table is a trade of the time to
+fill out the table vs. the time spent looking at the second level and above of
+the table.
+
+Here is an example, scaled down:
+
+The code being decoded, with 10 symbols, from 1 to 6 bits long:
+
+A: 0
+B: 10
+C: 1100
+D: 11010
+E: 11011
+F: 11100
+G: 11101
+H: 11110
+I: 111110
+J: 111111
+
+Let's make the first table three bits long (eight entries):
+
+000: A,1
+001: A,1
+010: A,1
+011: A,1
+100: B,2
+101: B,2
+110: -> table X (gobble 3 bits)
+111: -> table Y (gobble 3 bits)
+
+Each entry is what the bits decode as and how many bits that is, i.e. how
+many bits to gobble. Or the entry points to another table, with the number of
+bits to gobble implicit in the size of the table.
+
+Table X is two bits long since the longest code starting with 110 is five bits
+long:
+
+00: C,1
+01: C,1
+10: D,2
+11: E,2
+
+Table Y is three bits long since the longest code starting with 111 is six
+bits long:
+
+000: F,2
+001: F,2
+010: G,2
+011: G,2
+100: H,2
+101: H,2
+110: I,3
+111: J,3
+
+So what we have here are three tables with a total of 20 entries that had to
+be constructed. That's compared to 64 entries for a single table. Or
+compared to 16 entries for a Huffman tree (six two entry tables and one four
+entry table). Assuming that the code ideally represents the probability of
+the symbols, it takes on the average 1.25 lookups per symbol. That's compared
+to one lookup for the single table, or 1.66 lookups per symbol for the
+Huffman tree.
+
+There, I think that gives you a picture of what's going on. For inflate, the
+meaning of a particular symbol is often more than just a letter. It can be a
+byte (a "literal"), or it can be either a length or a distance which
+indicates a base value and a number of bits to fetch after the code that is
+added to the base value. Or it might be the special end-of-block code. The
+data structures created in inftrees.c try to encode all that information
+compactly in the tables.
+
+
+Jean-loup Gailly Mark Adler
+jloup@gzip.org madler@alumni.caltech.edu
+
+
+References:
+
+[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data
+Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3,
+pp. 337-343.
+
+``DEFLATE Compressed Data Format Specification'' available in
+http://tools.ietf.org/html/rfc1951
diff --git a/compat/zlib/doc/rfc1950.txt b/compat/zlib/doc/rfc1950.txt
new file mode 100644
index 0000000..ce6428a
--- /dev/null
+++ b/compat/zlib/doc/rfc1950.txt
@@ -0,0 +1,619 @@
+
+
+
+
+
+
+Network Working Group P. Deutsch
+Request for Comments: 1950 Aladdin Enterprises
+Category: Informational J-L. Gailly
+ Info-ZIP
+ May 1996
+
+
+ ZLIB Compressed Data Format Specification version 3.3
+
+Status of This Memo
+
+ This memo provides information for the Internet community. This memo
+ does not specify an Internet standard of any kind. Distribution of
+ this memo is unlimited.
+
+IESG Note:
+
+ The IESG takes no position on the validity of any Intellectual
+ Property Rights statements contained in this document.
+
+Notices
+
+ Copyright (c) 1996 L. Peter Deutsch and Jean-Loup Gailly
+
+ Permission is granted to copy and distribute this document for any
+ purpose and without charge, including translations into other
+ languages and incorporation into compilations, provided that the
+ copyright notice and this notice are preserved, and that any
+ substantive changes or deletions from the original are clearly
+ marked.
+
+ A pointer to the latest version of this and related documentation in
+ HTML format can be found at the URL
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+Abstract
+
+ This specification defines a lossless compressed data format. The
+ data can be produced or consumed, even for an arbitrarily long
+ sequentially presented input data stream, using only an a priori
+ bounded amount of intermediate storage. The format presently uses
+ the DEFLATE compression method but can be easily extended to use
+ other compression methods. It can be implemented readily in a manner
+ not covered by patents. This specification also defines the ADLER-32
+ checksum (an extension and improvement of the Fletcher checksum),
+ used for detection of data corruption, and provides an algorithm for
+ computing it.
+
+
+
+
+Deutsch & Gailly Informational [Page 1]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+Table of Contents
+
+ 1. Introduction ................................................... 2
+ 1.1. Purpose ................................................... 2
+ 1.2. Intended audience ......................................... 3
+ 1.3. Scope ..................................................... 3
+ 1.4. Compliance ................................................ 3
+ 1.5. Definitions of terms and conventions used ................ 3
+ 1.6. Changes from previous versions ............................ 3
+ 2. Detailed specification ......................................... 3
+ 2.1. Overall conventions ....................................... 3
+ 2.2. Data format ............................................... 4
+ 2.3. Compliance ................................................ 7
+ 3. References ..................................................... 7
+ 4. Source code .................................................... 8
+ 5. Security Considerations ........................................ 8
+ 6. Acknowledgements ............................................... 8
+ 7. Authors' Addresses ............................................. 8
+ 8. Appendix: Rationale ............................................ 9
+ 9. Appendix: Sample code ..........................................10
+
+1. Introduction
+
+ 1.1. Purpose
+
+ The purpose of this specification is to define a lossless
+ compressed data format that:
+
+ * Is independent of CPU type, operating system, file system,
+ and character set, and hence can be used for interchange;
+
+ * Can be produced or consumed, even for an arbitrarily long
+ sequentially presented input data stream, using only an a
+ priori bounded amount of intermediate storage, and hence can
+ be used in data communications or similar structures such as
+ Unix filters;
+
+ * Can use a number of different compression methods;
+
+ * Can be implemented readily in a manner not covered by
+ patents, and hence can be practiced freely.
+
+ The data format defined by this specification does not attempt to
+ allow random access to compressed data.
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 2]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ 1.2. Intended audience
+
+ This specification is intended for use by implementors of software
+ to compress data into zlib format and/or decompress data from zlib
+ format.
+
+ The text of the specification assumes a basic background in
+ programming at the level of bits and other primitive data
+ representations.
+
+ 1.3. Scope
+
+ The specification specifies a compressed data format that can be
+ used for in-memory compression of a sequence of arbitrary bytes.
+
+ 1.4. Compliance
+
+ Unless otherwise indicated below, a compliant decompressor must be
+ able to accept and decompress any data set that conforms to all
+ the specifications presented here; a compliant compressor must
+ produce data sets that conform to all the specifications presented
+ here.
+
+ 1.5. Definitions of terms and conventions used
+
+ byte: 8 bits stored or transmitted as a unit (same as an octet).
+ (For this specification, a byte is exactly 8 bits, even on
+ machines which store a character on a number of bits different
+ from 8.) See below, for the numbering of bits within a byte.
+
+ 1.6. Changes from previous versions
+
+ Version 3.1 was the first public release of this specification.
+ In version 3.2, some terminology was changed and the Adler-32
+ sample code was rewritten for clarity. In version 3.3, the
+ support for a preset dictionary was introduced, and the
+ specification was converted to RFC style.
+
+2. Detailed specification
+
+ 2.1. Overall conventions
+
+ In the diagrams below, a box like this:
+
+ +---+
+ | | <-- the vertical bars might be missing
+ +---+
+
+
+
+
+Deutsch & Gailly Informational [Page 3]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ represents one byte; a box like this:
+
+ +==============+
+ | |
+ +==============+
+
+ represents a variable number of bytes.
+
+ Bytes stored within a computer do not have a "bit order", since
+ they are always treated as a unit. However, a byte considered as
+ an integer between 0 and 255 does have a most- and least-
+ significant bit, and since we write numbers with the most-
+ significant digit on the left, we also write bytes with the most-
+ significant bit on the left. In the diagrams below, we number the
+ bits of a byte so that bit 0 is the least-significant bit, i.e.,
+ the bits are numbered:
+
+ +--------+
+ |76543210|
+ +--------+
+
+ Within a computer, a number may occupy multiple bytes. All
+ multi-byte numbers in the format described here are stored with
+ the MOST-significant byte first (at the lower memory address).
+ For example, the decimal number 520 is stored as:
+
+ 0 1
+ +--------+--------+
+ |00000010|00001000|
+ +--------+--------+
+ ^ ^
+ | |
+ | + less significant byte = 8
+ + more significant byte = 2 x 256
+
+ 2.2. Data format
+
+ A zlib stream has the following structure:
+
+ 0 1
+ +---+---+
+ |CMF|FLG| (more-->)
+ +---+---+
+
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 4]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ (if FLG.FDICT set)
+
+ 0 1 2 3
+ +---+---+---+---+
+ | DICTID | (more-->)
+ +---+---+---+---+
+
+ +=====================+---+---+---+---+
+ |...compressed data...| ADLER32 |
+ +=====================+---+---+---+---+
+
+ Any data which may appear after ADLER32 are not part of the zlib
+ stream.
+
+ CMF (Compression Method and flags)
+ This byte is divided into a 4-bit compression method and a 4-
+ bit information field depending on the compression method.
+
+ bits 0 to 3 CM Compression method
+ bits 4 to 7 CINFO Compression info
+
+ CM (Compression method)
+ This identifies the compression method used in the file. CM = 8
+ denotes the "deflate" compression method with a window size up
+ to 32K. This is the method used by gzip and PNG (see
+ references [1] and [2] in Chapter 3, below, for the reference
+ documents). CM = 15 is reserved. It might be used in a future
+ version of this specification to indicate the presence of an
+ extra field before the compressed data.
+
+ CINFO (Compression info)
+ For CM = 8, CINFO is the base-2 logarithm of the LZ77 window
+ size, minus eight (CINFO=7 indicates a 32K window size). Values
+ of CINFO above 7 are not allowed in this version of the
+ specification. CINFO is not defined in this specification for
+ CM not equal to 8.
+
+ FLG (FLaGs)
+ This flag byte is divided as follows:
+
+ bits 0 to 4 FCHECK (check bits for CMF and FLG)
+ bit 5 FDICT (preset dictionary)
+ bits 6 to 7 FLEVEL (compression level)
+
+ The FCHECK value must be such that CMF and FLG, when viewed as
+ a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG),
+ is a multiple of 31.
+
+
+
+
+Deutsch & Gailly Informational [Page 5]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ FDICT (Preset dictionary)
+ If FDICT is set, a DICT dictionary identifier is present
+ immediately after the FLG byte. The dictionary is a sequence of
+ bytes which are initially fed to the compressor without
+ producing any compressed output. DICT is the Adler-32 checksum
+ of this sequence of bytes (see the definition of ADLER32
+ below). The decompressor can use this identifier to determine
+ which dictionary has been used by the compressor.
+
+ FLEVEL (Compression level)
+ These flags are available for use by specific compression
+ methods. The "deflate" method (CM = 8) sets these flags as
+ follows:
+
+ 0 - compressor used fastest algorithm
+ 1 - compressor used fast algorithm
+ 2 - compressor used default algorithm
+ 3 - compressor used maximum compression, slowest algorithm
+
+ The information in FLEVEL is not needed for decompression; it
+ is there to indicate if recompression might be worthwhile.
+
+ compressed data
+ For compression method 8, the compressed data is stored in the
+ deflate compressed data format as described in the document
+ "DEFLATE Compressed Data Format Specification" by L. Peter
+ Deutsch. (See reference [3] in Chapter 3, below)
+
+ Other compressed data formats are not specified in this version
+ of the zlib specification.
+
+ ADLER32 (Adler-32 checksum)
+ This contains a checksum value of the uncompressed data
+ (excluding any dictionary data) computed according to Adler-32
+ algorithm. This algorithm is a 32-bit extension and improvement
+ of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073
+ standard. See references [4] and [5] in Chapter 3, below)
+
+ Adler-32 is composed of two sums accumulated per byte: s1 is
+ the sum of all bytes, s2 is the sum of all s1 values. Both sums
+ are done modulo 65521. s1 is initialized to 1, s2 to zero. The
+ Adler-32 checksum is stored as s2*65536 + s1 in most-
+ significant-byte first (network) order.
+
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 6]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ 2.3. Compliance
+
+ A compliant compressor must produce streams with correct CMF, FLG
+ and ADLER32, but need not support preset dictionaries. When the
+ zlib data format is used as part of another standard data format,
+ the compressor may use only preset dictionaries that are specified
+ by this other data format. If this other format does not use the
+ preset dictionary feature, the compressor must not set the FDICT
+ flag.
+
+ A compliant decompressor must check CMF, FLG, and ADLER32, and
+ provide an error indication if any of these have incorrect values.
+ A compliant decompressor must give an error indication if CM is
+ not one of the values defined in this specification (only the
+ value 8 is permitted in this version), since another value could
+ indicate the presence of new features that would cause subsequent
+ data to be interpreted incorrectly. A compliant decompressor must
+ give an error indication if FDICT is set and DICTID is not the
+ identifier of a known preset dictionary. A decompressor may
+ ignore FLEVEL and still be compliant. When the zlib data format
+ is being used as a part of another standard format, a compliant
+ decompressor must support all the preset dictionaries specified by
+ the other format. When the other format does not use the preset
+ dictionary feature, a compliant decompressor must reject any
+ stream in which the FDICT flag is set.
+
+3. References
+
+ [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification",
+ available in ftp://ftp.uu.net/pub/archiving/zip/doc/
+
+ [2] Thomas Boutell, "PNG (Portable Network Graphics) specification",
+ available in ftp://ftp.uu.net/graphics/png/documents/
+
+ [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification",
+ available in ftp://ftp.uu.net/pub/archiving/zip/doc/
+
+ [4] Fletcher, J. G., "An Arithmetic Checksum for Serial
+ Transmissions," IEEE Transactions on Communications, Vol. COM-30,
+ No. 1, January 1982, pp. 247-252.
+
+ [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms,"
+ November, 1993, pp. 144, 145. (Available from
+ gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073.
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 7]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+4. Source code
+
+ Source code for a C language implementation of a "zlib" compliant
+ library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/.
+
+5. Security Considerations
+
+ A decoder that fails to check the ADLER32 checksum value may be
+ subject to undetected data corruption.
+
+6. Acknowledgements
+
+ Trademarks cited in this document are the property of their
+ respective owners.
+
+ Jean-Loup Gailly and Mark Adler designed the zlib format and wrote
+ the related software described in this specification. Glenn
+ Randers-Pehrson converted this document to RFC and HTML format.
+
+7. Authors' Addresses
+
+ L. Peter Deutsch
+ Aladdin Enterprises
+ 203 Santa Margarita Ave.
+ Menlo Park, CA 94025
+
+ Phone: (415) 322-0103 (AM only)
+ FAX: (415) 322-1734
+ EMail: <ghost@aladdin.com>
+
+
+ Jean-Loup Gailly
+
+ EMail: <gzip@prep.ai.mit.edu>
+
+ Questions about the technical content of this specification can be
+ sent by email to
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 8]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+8. Appendix: Rationale
+
+ 8.1. Preset dictionaries
+
+ A preset dictionary is specially useful to compress short input
+ sequences. The compressor can take advantage of the dictionary
+ context to encode the input in a more compact manner. The
+ decompressor can be initialized with the appropriate context by
+ virtually decompressing a compressed version of the dictionary
+ without producing any output. However for certain compression
+ algorithms such as the deflate algorithm this operation can be
+ achieved without actually performing any decompression.
+
+ The compressor and the decompressor must use exactly the same
+ dictionary. The dictionary may be fixed or may be chosen among a
+ certain number of predefined dictionaries, according to the kind
+ of input data. The decompressor can determine which dictionary has
+ been chosen by the compressor by checking the dictionary
+ identifier. This document does not specify the contents of
+ predefined dictionaries, since the optimal dictionaries are
+ application specific. Standard data formats using this feature of
+ the zlib specification must precisely define the allowed
+ dictionaries.
+
+ 8.2. The Adler-32 algorithm
+
+ The Adler-32 algorithm is much faster than the CRC32 algorithm yet
+ still provides an extremely low probability of undetected errors.
+
+ The modulo on unsigned long accumulators can be delayed for 5552
+ bytes, so the modulo operation time is negligible. If the bytes
+ are a, b, c, the second sum is 3a + 2b + c + 3, and so is position
+ and order sensitive, unlike the first sum, which is just a
+ checksum. That 65521 is prime is important to avoid a possible
+ large class of two-byte errors that leave the check unchanged.
+ (The Fletcher checksum uses 255, which is not prime and which also
+ makes the Fletcher check insensitive to single byte changes 0 <->
+ 255.)
+
+ The sum s1 is initialized to 1 instead of zero to make the length
+ of the sequence part of s2, so that the length does not have to be
+ checked separately. (Any sequence of zeroes has a Fletcher
+ checksum of zero.)
+
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 9]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+9. Appendix: Sample code
+
+ The following C code computes the Adler-32 checksum of a data buffer.
+ It is written for clarity, not for speed. The sample code is in the
+ ANSI C programming language. Non C users may find it easier to read
+ with these hints:
+
+ & Bitwise AND operator.
+ >> Bitwise right shift operator. When applied to an
+ unsigned quantity, as here, right shift inserts zero bit(s)
+ at the left.
+ << Bitwise left shift operator. Left shift inserts zero
+ bit(s) at the right.
+ ++ "n++" increments the variable n.
+ % modulo operator: a % b is the remainder of a divided by b.
+
+ #define BASE 65521 /* largest prime smaller than 65536 */
+
+ /*
+ Update a running Adler-32 checksum with the bytes buf[0..len-1]
+ and return the updated checksum. The Adler-32 checksum should be
+ initialized to 1.
+
+ Usage example:
+
+ unsigned long adler = 1L;
+
+ while (read_buffer(buffer, length) != EOF) {
+ adler = update_adler32(adler, buffer, length);
+ }
+ if (adler != original_adler) error();
+ */
+ unsigned long update_adler32(unsigned long adler,
+ unsigned char *buf, int len)
+ {
+ unsigned long s1 = adler & 0xffff;
+ unsigned long s2 = (adler >> 16) & 0xffff;
+ int n;
+
+ for (n = 0; n < len; n++) {
+ s1 = (s1 + buf[n]) % BASE;
+ s2 = (s2 + s1) % BASE;
+ }
+ return (s2 << 16) + s1;
+ }
+
+ /* Return the adler32 of the bytes buf[0..len-1] */
+
+
+
+
+Deutsch & Gailly Informational [Page 10]
+
+RFC 1950 ZLIB Compressed Data Format Specification May 1996
+
+
+ unsigned long adler32(unsigned char *buf, int len)
+ {
+ return update_adler32(1L, buf, len);
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Deutsch & Gailly Informational [Page 11]
+
diff --git a/compat/zlib/doc/rfc1951.txt b/compat/zlib/doc/rfc1951.txt
new file mode 100644
index 0000000..403c8c7
--- /dev/null
+++ b/compat/zlib/doc/rfc1951.txt
@@ -0,0 +1,955 @@
+
+
+
+
+
+
+Network Working Group P. Deutsch
+Request for Comments: 1951 Aladdin Enterprises
+Category: Informational May 1996
+
+
+ DEFLATE Compressed Data Format Specification version 1.3
+
+Status of This Memo
+
+ This memo provides information for the Internet community. This memo
+ does not specify an Internet standard of any kind. Distribution of
+ this memo is unlimited.
+
+IESG Note:
+
+ The IESG takes no position on the validity of any Intellectual
+ Property Rights statements contained in this document.
+
+Notices
+
+ Copyright (c) 1996 L. Peter Deutsch
+
+ Permission is granted to copy and distribute this document for any
+ purpose and without charge, including translations into other
+ languages and incorporation into compilations, provided that the
+ copyright notice and this notice are preserved, and that any
+ substantive changes or deletions from the original are clearly
+ marked.
+
+ A pointer to the latest version of this and related documentation in
+ HTML format can be found at the URL
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+Abstract
+
+ This specification defines a lossless compressed data format that
+ compresses data using a combination of the LZ77 algorithm and Huffman
+ coding, with efficiency comparable to the best currently available
+ general-purpose compression methods. The data can be produced or
+ consumed, even for an arbitrarily long sequentially presented input
+ data stream, using only an a priori bounded amount of intermediate
+ storage. The format can be implemented readily in a manner not
+ covered by patents.
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 1]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+Table of Contents
+
+ 1. Introduction ................................................... 2
+ 1.1. Purpose ................................................... 2
+ 1.2. Intended audience ......................................... 3
+ 1.3. Scope ..................................................... 3
+ 1.4. Compliance ................................................ 3
+ 1.5. Definitions of terms and conventions used ................ 3
+ 1.6. Changes from previous versions ............................ 4
+ 2. Compressed representation overview ............................. 4
+ 3. Detailed specification ......................................... 5
+ 3.1. Overall conventions ....................................... 5
+ 3.1.1. Packing into bytes .................................. 5
+ 3.2. Compressed block format ................................... 6
+ 3.2.1. Synopsis of prefix and Huffman coding ............... 6
+ 3.2.2. Use of Huffman coding in the "deflate" format ....... 7
+ 3.2.3. Details of block format ............................. 9
+ 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11
+ 3.2.5. Compressed blocks (length and distance codes) ...... 11
+ 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12
+ 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13
+ 3.3. Compliance ............................................... 14
+ 4. Compression algorithm details ................................. 14
+ 5. References .................................................... 16
+ 6. Security Considerations ....................................... 16
+ 7. Source code ................................................... 16
+ 8. Acknowledgements .............................................. 16
+ 9. Author's Address .............................................. 17
+
+1. Introduction
+
+ 1.1. Purpose
+
+ The purpose of this specification is to define a lossless
+ compressed data format that:
+ * Is independent of CPU type, operating system, file system,
+ and character set, and hence can be used for interchange;
+ * Can be produced or consumed, even for an arbitrarily long
+ sequentially presented input data stream, using only an a
+ priori bounded amount of intermediate storage, and hence
+ can be used in data communications or similar structures
+ such as Unix filters;
+ * Compresses data with efficiency comparable to the best
+ currently available general-purpose compression methods,
+ and in particular considerably better than the "compress"
+ program;
+ * Can be implemented readily in a manner not covered by
+ patents, and hence can be practiced freely;
+
+
+
+Deutsch Informational [Page 2]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ * Is compatible with the file format produced by the current
+ widely used gzip utility, in that conforming decompressors
+ will be able to read data produced by the existing gzip
+ compressor.
+
+ The data format defined by this specification does not attempt to:
+
+ * Allow random access to compressed data;
+ * Compress specialized data (e.g., raster graphics) as well
+ as the best currently available specialized algorithms.
+
+ A simple counting argument shows that no lossless compression
+ algorithm can compress every possible input data set. For the
+ format defined here, the worst case expansion is 5 bytes per 32K-
+ byte block, i.e., a size increase of 0.015% for large data sets.
+ English text usually compresses by a factor of 2.5 to 3;
+ executable files usually compress somewhat less; graphical data
+ such as raster images may compress much more.
+
+ 1.2. Intended audience
+
+ This specification is intended for use by implementors of software
+ to compress data into "deflate" format and/or decompress data from
+ "deflate" format.
+
+ The text of the specification assumes a basic background in
+ programming at the level of bits and other primitive data
+ representations. Familiarity with the technique of Huffman coding
+ is helpful but not required.
+
+ 1.3. Scope
+
+ The specification specifies a method for representing a sequence
+ of bytes as a (usually shorter) sequence of bits, and a method for
+ packing the latter bit sequence into bytes.
+
+ 1.4. Compliance
+
+ Unless otherwise indicated below, a compliant decompressor must be
+ able to accept and decompress any data set that conforms to all
+ the specifications presented here; a compliant compressor must
+ produce data sets that conform to all the specifications presented
+ here.
+
+ 1.5. Definitions of terms and conventions used
+
+ Byte: 8 bits stored or transmitted as a unit (same as an octet).
+ For this specification, a byte is exactly 8 bits, even on machines
+
+
+
+Deutsch Informational [Page 3]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ which store a character on a number of bits different from eight.
+ See below, for the numbering of bits within a byte.
+
+ String: a sequence of arbitrary bytes.
+
+ 1.6. Changes from previous versions
+
+ There have been no technical changes to the deflate format since
+ version 1.1 of this specification. In version 1.2, some
+ terminology was changed. Version 1.3 is a conversion of the
+ specification to RFC style.
+
+2. Compressed representation overview
+
+ A compressed data set consists of a series of blocks, corresponding
+ to successive blocks of input data. The block sizes are arbitrary,
+ except that non-compressible blocks are limited to 65,535 bytes.
+
+ Each block is compressed using a combination of the LZ77 algorithm
+ and Huffman coding. The Huffman trees for each block are independent
+ of those for previous or subsequent blocks; the LZ77 algorithm may
+ use a reference to a duplicated string occurring in a previous block,
+ up to 32K input bytes before.
+
+ Each block consists of two parts: a pair of Huffman code trees that
+ describe the representation of the compressed data part, and a
+ compressed data part. (The Huffman trees themselves are compressed
+ using Huffman encoding.) The compressed data consists of a series of
+ elements of two types: literal bytes (of strings that have not been
+ detected as duplicated within the previous 32K input bytes), and
+ pointers to duplicated strings, where a pointer is represented as a
+ pair <length, backward distance>. The representation used in the
+ "deflate" format limits distances to 32K bytes and lengths to 258
+ bytes, but does not limit the size of a block, except for
+ uncompressible blocks, which are limited as noted above.
+
+ Each type of value (literals, distances, and lengths) in the
+ compressed data is represented using a Huffman code, using one code
+ tree for literals and lengths and a separate code tree for distances.
+ The code trees for each block appear in a compact form just before
+ the compressed data for that block.
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 4]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+3. Detailed specification
+
+ 3.1. Overall conventions In the diagrams below, a box like this:
+
+ +---+
+ | | <-- the vertical bars might be missing
+ +---+
+
+ represents one byte; a box like this:
+
+ +==============+
+ | |
+ +==============+
+
+ represents a variable number of bytes.
+
+ Bytes stored within a computer do not have a "bit order", since
+ they are always treated as a unit. However, a byte considered as
+ an integer between 0 and 255 does have a most- and least-
+ significant bit, and since we write numbers with the most-
+ significant digit on the left, we also write bytes with the most-
+ significant bit on the left. In the diagrams below, we number the
+ bits of a byte so that bit 0 is the least-significant bit, i.e.,
+ the bits are numbered:
+
+ +--------+
+ |76543210|
+ +--------+
+
+ Within a computer, a number may occupy multiple bytes. All
+ multi-byte numbers in the format described here are stored with
+ the least-significant byte first (at the lower memory address).
+ For example, the decimal number 520 is stored as:
+
+ 0 1
+ +--------+--------+
+ |00001000|00000010|
+ +--------+--------+
+ ^ ^
+ | |
+ | + more significant byte = 2 x 256
+ + less significant byte = 8
+
+ 3.1.1. Packing into bytes
+
+ This document does not address the issue of the order in which
+ bits of a byte are transmitted on a bit-sequential medium,
+ since the final data format described here is byte- rather than
+
+
+
+Deutsch Informational [Page 5]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ bit-oriented. However, we describe the compressed block format
+ in below, as a sequence of data elements of various bit
+ lengths, not a sequence of bytes. We must therefore specify
+ how to pack these data elements into bytes to form the final
+ compressed byte sequence:
+
+ * Data elements are packed into bytes in order of
+ increasing bit number within the byte, i.e., starting
+ with the least-significant bit of the byte.
+ * Data elements other than Huffman codes are packed
+ starting with the least-significant bit of the data
+ element.
+ * Huffman codes are packed starting with the most-
+ significant bit of the code.
+
+ In other words, if one were to print out the compressed data as
+ a sequence of bytes, starting with the first byte at the
+ *right* margin and proceeding to the *left*, with the most-
+ significant bit of each byte on the left as usual, one would be
+ able to parse the result from right to left, with fixed-width
+ elements in the correct MSB-to-LSB order and Huffman codes in
+ bit-reversed order (i.e., with the first bit of the code in the
+ relative LSB position).
+
+ 3.2. Compressed block format
+
+ 3.2.1. Synopsis of prefix and Huffman coding
+
+ Prefix coding represents symbols from an a priori known
+ alphabet by bit sequences (codes), one code for each symbol, in
+ a manner such that different symbols may be represented by bit
+ sequences of different lengths, but a parser can always parse
+ an encoded string unambiguously symbol-by-symbol.
+
+ We define a prefix code in terms of a binary tree in which the
+ two edges descending from each non-leaf node are labeled 0 and
+ 1 and in which the leaf nodes correspond one-for-one with (are
+ labeled with) the symbols of the alphabet; then the code for a
+ symbol is the sequence of 0's and 1's on the edges leading from
+ the root to the leaf labeled with that symbol. For example:
+
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 6]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ /\ Symbol Code
+ 0 1 ------ ----
+ / \ A 00
+ /\ B B 1
+ 0 1 C 011
+ / \ D 010
+ A /\
+ 0 1
+ / \
+ D C
+
+ A parser can decode the next symbol from an encoded input
+ stream by walking down the tree from the root, at each step
+ choosing the edge corresponding to the next input bit.
+
+ Given an alphabet with known symbol frequencies, the Huffman
+ algorithm allows the construction of an optimal prefix code
+ (one which represents strings with those symbol frequencies
+ using the fewest bits of any possible prefix codes for that
+ alphabet). Such a code is called a Huffman code. (See
+ reference [1] in Chapter 5, references for additional
+ information on Huffman codes.)
+
+ Note that in the "deflate" format, the Huffman codes for the
+ various alphabets must not exceed certain maximum code lengths.
+ This constraint complicates the algorithm for computing code
+ lengths from symbol frequencies. Again, see Chapter 5,
+ references for details.
+
+ 3.2.2. Use of Huffman coding in the "deflate" format
+
+ The Huffman codes used for each alphabet in the "deflate"
+ format have two additional rules:
+
+ * All codes of a given bit length have lexicographically
+ consecutive values, in the same order as the symbols
+ they represent;
+
+ * Shorter codes lexicographically precede longer codes.
+
+
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 7]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ We could recode the example above to follow this rule as
+ follows, assuming that the order of the alphabet is ABCD:
+
+ Symbol Code
+ ------ ----
+ A 10
+ B 0
+ C 110
+ D 111
+
+ I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are
+ lexicographically consecutive.
+
+ Given this rule, we can define the Huffman code for an alphabet
+ just by giving the bit lengths of the codes for each symbol of
+ the alphabet in order; this is sufficient to determine the
+ actual codes. In our example, the code is completely defined
+ by the sequence of bit lengths (2, 1, 3, 3). The following
+ algorithm generates the codes as integers, intended to be read
+ from most- to least-significant bit. The code lengths are
+ initially in tree[I].Len; the codes are produced in
+ tree[I].Code.
+
+ 1) Count the number of codes for each code length. Let
+ bl_count[N] be the number of codes of length N, N >= 1.
+
+ 2) Find the numerical value of the smallest code for each
+ code length:
+
+ code = 0;
+ bl_count[0] = 0;
+ for (bits = 1; bits <= MAX_BITS; bits++) {
+ code = (code + bl_count[bits-1]) << 1;
+ next_code[bits] = code;
+ }
+
+ 3) Assign numerical values to all codes, using consecutive
+ values for all codes of the same length with the base
+ values determined at step 2. Codes that are never used
+ (which have a bit length of zero) must not be assigned a
+ value.
+
+ for (n = 0; n <= max_code; n++) {
+ len = tree[n].Len;
+ if (len != 0) {
+ tree[n].Code = next_code[len];
+ next_code[len]++;
+ }
+
+
+
+Deutsch Informational [Page 8]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ }
+
+ Example:
+
+ Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3,
+ 3, 2, 4, 4). After step 1, we have:
+
+ N bl_count[N]
+ - -----------
+ 2 1
+ 3 5
+ 4 2
+
+ Step 2 computes the following next_code values:
+
+ N next_code[N]
+ - ------------
+ 1 0
+ 2 0
+ 3 2
+ 4 14
+
+ Step 3 produces the following code values:
+
+ Symbol Length Code
+ ------ ------ ----
+ A 3 010
+ B 3 011
+ C 3 100
+ D 3 101
+ E 3 110
+ F 2 00
+ G 4 1110
+ H 4 1111
+
+ 3.2.3. Details of block format
+
+ Each block of compressed data begins with 3 header bits
+ containing the following data:
+
+ first bit BFINAL
+ next 2 bits BTYPE
+
+ Note that the header bits do not necessarily begin on a byte
+ boundary, since a block does not necessarily occupy an integral
+ number of bytes.
+
+
+
+
+
+Deutsch Informational [Page 9]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ BFINAL is set if and only if this is the last block of the data
+ set.
+
+ BTYPE specifies how the data are compressed, as follows:
+
+ 00 - no compression
+ 01 - compressed with fixed Huffman codes
+ 10 - compressed with dynamic Huffman codes
+ 11 - reserved (error)
+
+ The only difference between the two compressed cases is how the
+ Huffman codes for the literal/length and distance alphabets are
+ defined.
+
+ In all cases, the decoding algorithm for the actual data is as
+ follows:
+
+ do
+ read block header from input stream.
+ if stored with no compression
+ skip any remaining bits in current partially
+ processed byte
+ read LEN and NLEN (see next section)
+ copy LEN bytes of data to output
+ otherwise
+ if compressed with dynamic Huffman codes
+ read representation of code trees (see
+ subsection below)
+ loop (until end of block code recognized)
+ decode literal/length value from input stream
+ if value < 256
+ copy value (literal byte) to output stream
+ otherwise
+ if value = end of block (256)
+ break from loop
+ otherwise (value = 257..285)
+ decode distance from input stream
+
+ move backwards distance bytes in the output
+ stream, and copy length bytes from this
+ position to the output stream.
+ end loop
+ while not last block
+
+ Note that a duplicated string reference may refer to a string
+ in a previous block; i.e., the backward distance may cross one
+ or more block boundaries. However a distance cannot refer past
+ the beginning of the output stream. (An application using a
+
+
+
+Deutsch Informational [Page 10]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ preset dictionary might discard part of the output stream; a
+ distance can refer to that part of the output stream anyway)
+ Note also that the referenced string may overlap the current
+ position; for example, if the last 2 bytes decoded have values
+ X and Y, a string reference with <length = 5, distance = 2>
+ adds X,Y,X,Y,X to the output stream.
+
+ We now specify each compression method in turn.
+
+ 3.2.4. Non-compressed blocks (BTYPE=00)
+
+ Any bits of input up to the next byte boundary are ignored.
+ The rest of the block consists of the following information:
+
+ 0 1 2 3 4...
+ +---+---+---+---+================================+
+ | LEN | NLEN |... LEN bytes of literal data...|
+ +---+---+---+---+================================+
+
+ LEN is the number of data bytes in the block. NLEN is the
+ one's complement of LEN.
+
+ 3.2.5. Compressed blocks (length and distance codes)
+
+ As noted above, encoded data blocks in the "deflate" format
+ consist of sequences of symbols drawn from three conceptually
+ distinct alphabets: either literal bytes, from the alphabet of
+ byte values (0..255), or <length, backward distance> pairs,
+ where the length is drawn from (3..258) and the distance is
+ drawn from (1..32,768). In fact, the literal and length
+ alphabets are merged into a single alphabet (0..285), where
+ values 0..255 represent literal bytes, the value 256 indicates
+ end-of-block, and values 257..285 represent length codes
+ (possibly in conjunction with extra bits following the symbol
+ code) as follows:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 11]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ Extra Extra Extra
+ Code Bits Length(s) Code Bits Lengths Code Bits Length(s)
+ ---- ---- ------ ---- ---- ------- ---- ---- -------
+ 257 0 3 267 1 15,16 277 4 67-82
+ 258 0 4 268 1 17,18 278 4 83-98
+ 259 0 5 269 2 19-22 279 4 99-114
+ 260 0 6 270 2 23-26 280 4 115-130
+ 261 0 7 271 2 27-30 281 5 131-162
+ 262 0 8 272 2 31-34 282 5 163-194
+ 263 0 9 273 3 35-42 283 5 195-226
+ 264 0 10 274 3 43-50 284 5 227-257
+ 265 1 11,12 275 3 51-58 285 0 258
+ 266 1 13,14 276 3 59-66
+
+ The extra bits should be interpreted as a machine integer
+ stored with the most-significant bit first, e.g., bits 1110
+ represent the value 14.
+
+ Extra Extra Extra
+ Code Bits Dist Code Bits Dist Code Bits Distance
+ ---- ---- ---- ---- ---- ------ ---- ---- --------
+ 0 0 1 10 4 33-48 20 9 1025-1536
+ 1 0 2 11 4 49-64 21 9 1537-2048
+ 2 0 3 12 5 65-96 22 10 2049-3072
+ 3 0 4 13 5 97-128 23 10 3073-4096
+ 4 1 5,6 14 6 129-192 24 11 4097-6144
+ 5 1 7,8 15 6 193-256 25 11 6145-8192
+ 6 2 9-12 16 7 257-384 26 12 8193-12288
+ 7 2 13-16 17 7 385-512 27 12 12289-16384
+ 8 3 17-24 18 8 513-768 28 13 16385-24576
+ 9 3 25-32 19 8 769-1024 29 13 24577-32768
+
+ 3.2.6. Compression with fixed Huffman codes (BTYPE=01)
+
+ The Huffman codes for the two alphabets are fixed, and are not
+ represented explicitly in the data. The Huffman code lengths
+ for the literal/length alphabet are:
+
+ Lit Value Bits Codes
+ --------- ---- -----
+ 0 - 143 8 00110000 through
+ 10111111
+ 144 - 255 9 110010000 through
+ 111111111
+ 256 - 279 7 0000000 through
+ 0010111
+ 280 - 287 8 11000000 through
+ 11000111
+
+
+
+Deutsch Informational [Page 12]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ The code lengths are sufficient to generate the actual codes,
+ as described above; we show the codes in the table for added
+ clarity. Literal/length values 286-287 will never actually
+ occur in the compressed data, but participate in the code
+ construction.
+
+ Distance codes 0-31 are represented by (fixed-length) 5-bit
+ codes, with possible additional bits as shown in the table
+ shown in Paragraph 3.2.5, above. Note that distance codes 30-
+ 31 will never actually occur in the compressed data.
+
+ 3.2.7. Compression with dynamic Huffman codes (BTYPE=10)
+
+ The Huffman codes for the two alphabets appear in the block
+ immediately after the header bits and before the actual
+ compressed data, first the literal/length code and then the
+ distance code. Each code is defined by a sequence of code
+ lengths, as discussed in Paragraph 3.2.2, above. For even
+ greater compactness, the code length sequences themselves are
+ compressed using a Huffman code. The alphabet for code lengths
+ is as follows:
+
+ 0 - 15: Represent code lengths of 0 - 15
+ 16: Copy the previous code length 3 - 6 times.
+ The next 2 bits indicate repeat length
+ (0 = 3, ... , 3 = 6)
+ Example: Codes 8, 16 (+2 bits 11),
+ 16 (+2 bits 10) will expand to
+ 12 code lengths of 8 (1 + 6 + 5)
+ 17: Repeat a code length of 0 for 3 - 10 times.
+ (3 bits of length)
+ 18: Repeat a code length of 0 for 11 - 138 times
+ (7 bits of length)
+
+ A code length of 0 indicates that the corresponding symbol in
+ the literal/length or distance alphabet will not occur in the
+ block, and should not participate in the Huffman code
+ construction algorithm given earlier. If only one distance
+ code is used, it is encoded using one bit, not zero bits; in
+ this case there is a single code length of one, with one unused
+ code. One distance code of zero bits means that there are no
+ distance codes used at all (the data is all literals).
+
+ We can now define the format of the block:
+
+ 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286)
+ 5 Bits: HDIST, # of Distance codes - 1 (1 - 32)
+ 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19)
+
+
+
+Deutsch Informational [Page 13]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ (HCLEN + 4) x 3 bits: code lengths for the code length
+ alphabet given just above, in the order: 16, 17, 18,
+ 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15
+
+ These code lengths are interpreted as 3-bit integers
+ (0-7); as above, a code length of 0 means the
+ corresponding symbol (literal/length or distance code
+ length) is not used.
+
+ HLIT + 257 code lengths for the literal/length alphabet,
+ encoded using the code length Huffman code
+
+ HDIST + 1 code lengths for the distance alphabet,
+ encoded using the code length Huffman code
+
+ The actual compressed data of the block,
+ encoded using the literal/length and distance Huffman
+ codes
+
+ The literal/length symbol 256 (end of data),
+ encoded using the literal/length Huffman code
+
+ The code length repeat codes can cross from HLIT + 257 to the
+ HDIST + 1 code lengths. In other words, all code lengths form
+ a single sequence of HLIT + HDIST + 258 values.
+
+ 3.3. Compliance
+
+ A compressor may limit further the ranges of values specified in
+ the previous section and still be compliant; for example, it may
+ limit the range of backward pointers to some value smaller than
+ 32K. Similarly, a compressor may limit the size of blocks so that
+ a compressible block fits in memory.
+
+ A compliant decompressor must accept the full range of possible
+ values defined in the previous section, and must accept blocks of
+ arbitrary size.
+
+4. Compression algorithm details
+
+ While it is the intent of this document to define the "deflate"
+ compressed data format without reference to any particular
+ compression algorithm, the format is related to the compressed
+ formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below);
+ since many variations of LZ77 are patented, it is strongly
+ recommended that the implementor of a compressor follow the general
+ algorithm presented here, which is known not to be patented per se.
+ The material in this section is not part of the definition of the
+
+
+
+Deutsch Informational [Page 14]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+ specification per se, and a compressor need not follow it in order to
+ be compliant.
+
+ The compressor terminates a block when it determines that starting a
+ new block with fresh trees would be useful, or when the block size
+ fills up the compressor's block buffer.
+
+ The compressor uses a chained hash table to find duplicated strings,
+ using a hash function that operates on 3-byte sequences. At any
+ given point during compression, let XYZ be the next 3 input bytes to
+ be examined (not necessarily all different, of course). First, the
+ compressor examines the hash chain for XYZ. If the chain is empty,
+ the compressor simply writes out X as a literal byte and advances one
+ byte in the input. If the hash chain is not empty, indicating that
+ the sequence XYZ (or, if we are unlucky, some other 3 bytes with the
+ same hash function value) has occurred recently, the compressor
+ compares all strings on the XYZ hash chain with the actual input data
+ sequence starting at the current point, and selects the longest
+ match.
+
+ The compressor searches the hash chains starting with the most recent
+ strings, to favor small distances and thus take advantage of the
+ Huffman encoding. The hash chains are singly linked. There are no
+ deletions from the hash chains; the algorithm simply discards matches
+ that are too old. To avoid a worst-case situation, very long hash
+ chains are arbitrarily truncated at a certain length, determined by a
+ run-time parameter.
+
+ To improve overall compression, the compressor optionally defers the
+ selection of matches ("lazy matching"): after a match of length N has
+ been found, the compressor searches for a longer match starting at
+ the next input byte. If it finds a longer match, it truncates the
+ previous match to a length of one (thus producing a single literal
+ byte) and then emits the longer match. Otherwise, it emits the
+ original match, and, as described above, advances N bytes before
+ continuing.
+
+ Run-time parameters also control this "lazy match" procedure. If
+ compression ratio is most important, the compressor attempts a
+ complete second search regardless of the length of the first match.
+ In the normal case, if the current match is "long enough", the
+ compressor reduces the search for a longer match, thus speeding up
+ the process. If speed is most important, the compressor inserts new
+ strings in the hash table only when no match was found, or when the
+ match is not "too long". This degrades the compression ratio but
+ saves time since there are both fewer insertions and fewer searches.
+
+
+
+
+
+Deutsch Informational [Page 15]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+5. References
+
+ [1] Huffman, D. A., "A Method for the Construction of Minimum
+ Redundancy Codes", Proceedings of the Institute of Radio
+ Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101.
+
+ [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data
+ Compression", IEEE Transactions on Information Theory, Vol. 23,
+ No. 3, pp. 337-343.
+
+ [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources,
+ available in ftp://ftp.uu.net/pub/archiving/zip/doc/
+
+ [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources,
+ available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/
+
+ [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix
+ encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169.
+
+ [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes,"
+ Comm. ACM, 33,4, April 1990, pp. 449-459.
+
+6. Security Considerations
+
+ Any data compression method involves the reduction of redundancy in
+ the data. Consequently, any corruption of the data is likely to have
+ severe effects and be difficult to correct. Uncompressed text, on
+ the other hand, will probably still be readable despite the presence
+ of some corrupted bytes.
+
+ It is recommended that systems using this data format provide some
+ means of validating the integrity of the compressed data. See
+ reference [3], for example.
+
+7. Source code
+
+ Source code for a C language implementation of a "deflate" compliant
+ compressor and decompressor is available within the zlib package at
+ ftp://ftp.uu.net/pub/archiving/zip/zlib/.
+
+8. Acknowledgements
+
+ Trademarks cited in this document are the property of their
+ respective owners.
+
+ Phil Katz designed the deflate format. Jean-Loup Gailly and Mark
+ Adler wrote the related software described in this specification.
+ Glenn Randers-Pehrson converted this document to RFC and HTML format.
+
+
+
+Deutsch Informational [Page 16]
+
+RFC 1951 DEFLATE Compressed Data Format Specification May 1996
+
+
+9. Author's Address
+
+ L. Peter Deutsch
+ Aladdin Enterprises
+ 203 Santa Margarita Ave.
+ Menlo Park, CA 94025
+
+ Phone: (415) 322-0103 (AM only)
+ FAX: (415) 322-1734
+ EMail: <ghost@aladdin.com>
+
+ Questions about the technical content of this specification can be
+ sent by email to:
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to:
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 17]
+
diff --git a/compat/zlib/doc/rfc1952.txt b/compat/zlib/doc/rfc1952.txt
new file mode 100644
index 0000000..a8e51b4
--- /dev/null
+++ b/compat/zlib/doc/rfc1952.txt
@@ -0,0 +1,675 @@
+
+
+
+
+
+
+Network Working Group P. Deutsch
+Request for Comments: 1952 Aladdin Enterprises
+Category: Informational May 1996
+
+
+ GZIP file format specification version 4.3
+
+Status of This Memo
+
+ This memo provides information for the Internet community. This memo
+ does not specify an Internet standard of any kind. Distribution of
+ this memo is unlimited.
+
+IESG Note:
+
+ The IESG takes no position on the validity of any Intellectual
+ Property Rights statements contained in this document.
+
+Notices
+
+ Copyright (c) 1996 L. Peter Deutsch
+
+ Permission is granted to copy and distribute this document for any
+ purpose and without charge, including translations into other
+ languages and incorporation into compilations, provided that the
+ copyright notice and this notice are preserved, and that any
+ substantive changes or deletions from the original are clearly
+ marked.
+
+ A pointer to the latest version of this and related documentation in
+ HTML format can be found at the URL
+ <ftp://ftp.uu.net/graphics/png/documents/zlib/zdoc-index.html>.
+
+Abstract
+
+ This specification defines a lossless compressed data format that is
+ compatible with the widely used GZIP utility. The format includes a
+ cyclic redundancy check value for detecting data corruption. The
+ format presently uses the DEFLATE method of compression but can be
+ easily extended to use other compression methods. The format can be
+ implemented readily in a manner not covered by patents.
+
+
+
+
+
+
+
+
+
+
+Deutsch Informational [Page 1]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+Table of Contents
+
+ 1. Introduction ................................................... 2
+ 1.1. Purpose ................................................... 2
+ 1.2. Intended audience ......................................... 3
+ 1.3. Scope ..................................................... 3
+ 1.4. Compliance ................................................ 3
+ 1.5. Definitions of terms and conventions used ................. 3
+ 1.6. Changes from previous versions ............................ 3
+ 2. Detailed specification ......................................... 4
+ 2.1. Overall conventions ....................................... 4
+ 2.2. File format ............................................... 5
+ 2.3. Member format ............................................. 5
+ 2.3.1. Member header and trailer ........................... 6
+ 2.3.1.1. Extra field ................................... 8
+ 2.3.1.2. Compliance .................................... 9
+ 3. References .................................................. 9
+ 4. Security Considerations .................................... 10
+ 5. Acknowledgements ........................................... 10
+ 6. Author's Address ........................................... 10
+ 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11
+ 8. Appendix: Sample CRC Code .................................. 11
+
+1. Introduction
+
+ 1.1. Purpose
+
+ The purpose of this specification is to define a lossless
+ compressed data format that:
+
+ * Is independent of CPU type, operating system, file system,
+ and character set, and hence can be used for interchange;
+ * Can compress or decompress a data stream (as opposed to a
+ randomly accessible file) to produce another data stream,
+ using only an a priori bounded amount of intermediate
+ storage, and hence can be used in data communications or
+ similar structures such as Unix filters;
+ * Compresses data with efficiency comparable to the best
+ currently available general-purpose compression methods,
+ and in particular considerably better than the "compress"
+ program;
+ * Can be implemented readily in a manner not covered by
+ patents, and hence can be practiced freely;
+ * Is compatible with the file format produced by the current
+ widely used gzip utility, in that conforming decompressors
+ will be able to read data produced by the existing gzip
+ compressor.
+
+
+
+
+Deutsch Informational [Page 2]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ The data format defined by this specification does not attempt to:
+
+ * Provide random access to compressed data;
+ * Compress specialized data (e.g., raster graphics) as well as
+ the best currently available specialized algorithms.
+
+ 1.2. Intended audience
+
+ This specification is intended for use by implementors of software
+ to compress data into gzip format and/or decompress data from gzip
+ format.
+
+ The text of the specification assumes a basic background in
+ programming at the level of bits and other primitive data
+ representations.
+
+ 1.3. Scope
+
+ The specification specifies a compression method and a file format
+ (the latter assuming only that a file can store a sequence of
+ arbitrary bytes). It does not specify any particular interface to
+ a file system or anything about character sets or encodings
+ (except for file names and comments, which are optional).
+
+ 1.4. Compliance
+
+ Unless otherwise indicated below, a compliant decompressor must be
+ able to accept and decompress any file that conforms to all the
+ specifications presented here; a compliant compressor must produce
+ files that conform to all the specifications presented here. The
+ material in the appendices is not part of the specification per se
+ and is not relevant to compliance.
+
+ 1.5. Definitions of terms and conventions used
+
+ byte: 8 bits stored or transmitted as a unit (same as an octet).
+ (For this specification, a byte is exactly 8 bits, even on
+ machines which store a character on a number of bits different
+ from 8.) See below for the numbering of bits within a byte.
+
+ 1.6. Changes from previous versions
+
+ There have been no technical changes to the gzip format since
+ version 4.1 of this specification. In version 4.2, some
+ terminology was changed, and the sample CRC code was rewritten for
+ clarity and to eliminate the requirement for the caller to do pre-
+ and post-conditioning. Version 4.3 is a conversion of the
+ specification to RFC style.
+
+
+
+Deutsch Informational [Page 3]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+2. Detailed specification
+
+ 2.1. Overall conventions
+
+ In the diagrams below, a box like this:
+
+ +---+
+ | | <-- the vertical bars might be missing
+ +---+
+
+ represents one byte; a box like this:
+
+ +==============+
+ | |
+ +==============+
+
+ represents a variable number of bytes.
+
+ Bytes stored within a computer do not have a "bit order", since
+ they are always treated as a unit. However, a byte considered as
+ an integer between 0 and 255 does have a most- and least-
+ significant bit, and since we write numbers with the most-
+ significant digit on the left, we also write bytes with the most-
+ significant bit on the left. In the diagrams below, we number the
+ bits of a byte so that bit 0 is the least-significant bit, i.e.,
+ the bits are numbered:
+
+ +--------+
+ |76543210|
+ +--------+
+
+ This document does not address the issue of the order in which
+ bits of a byte are transmitted on a bit-sequential medium, since
+ the data format described here is byte- rather than bit-oriented.
+
+ Within a computer, a number may occupy multiple bytes. All
+ multi-byte numbers in the format described here are stored with
+ the least-significant byte first (at the lower memory address).
+ For example, the decimal number 520 is stored as:
+
+ 0 1
+ +--------+--------+
+ |00001000|00000010|
+ +--------+--------+
+ ^ ^
+ | |
+ | + more significant byte = 2 x 256
+ + less significant byte = 8
+
+
+
+Deutsch Informational [Page 4]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ 2.2. File format
+
+ A gzip file consists of a series of "members" (compressed data
+ sets). The format of each member is specified in the following
+ section. The members simply appear one after another in the file,
+ with no additional information before, between, or after them.
+
+ 2.3. Member format
+
+ Each member has the following structure:
+
+ +---+---+---+---+---+---+---+---+---+---+
+ |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->)
+ +---+---+---+---+---+---+---+---+---+---+
+
+ (if FLG.FEXTRA set)
+
+ +---+---+=================================+
+ | XLEN |...XLEN bytes of "extra field"...| (more-->)
+ +---+---+=================================+
+
+ (if FLG.FNAME set)
+
+ +=========================================+
+ |...original file name, zero-terminated...| (more-->)
+ +=========================================+
+
+ (if FLG.FCOMMENT set)
+
+ +===================================+
+ |...file comment, zero-terminated...| (more-->)
+ +===================================+
+
+ (if FLG.FHCRC set)
+
+ +---+---+
+ | CRC16 |
+ +---+---+
+
+ +=======================+
+ |...compressed blocks...| (more-->)
+ +=======================+
+
+ 0 1 2 3 4 5 6 7
+ +---+---+---+---+---+---+---+---+
+ | CRC32 | ISIZE |
+ +---+---+---+---+---+---+---+---+
+
+
+
+
+Deutsch Informational [Page 5]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ 2.3.1. Member header and trailer
+
+ ID1 (IDentification 1)
+ ID2 (IDentification 2)
+ These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139
+ (0x8b, \213), to identify the file as being in gzip format.
+
+ CM (Compression Method)
+ This identifies the compression method used in the file. CM
+ = 0-7 are reserved. CM = 8 denotes the "deflate"
+ compression method, which is the one customarily used by
+ gzip and which is documented elsewhere.
+
+ FLG (FLaGs)
+ This flag byte is divided into individual bits as follows:
+
+ bit 0 FTEXT
+ bit 1 FHCRC
+ bit 2 FEXTRA
+ bit 3 FNAME
+ bit 4 FCOMMENT
+ bit 5 reserved
+ bit 6 reserved
+ bit 7 reserved
+
+ If FTEXT is set, the file is probably ASCII text. This is
+ an optional indication, which the compressor may set by
+ checking a small amount of the input data to see whether any
+ non-ASCII characters are present. In case of doubt, FTEXT
+ is cleared, indicating binary data. For systems which have
+ different file formats for ascii text and binary data, the
+ decompressor can use FTEXT to choose the appropriate format.
+ We deliberately do not specify the algorithm used to set
+ this bit, since a compressor always has the option of
+ leaving it cleared and a decompressor always has the option
+ of ignoring it and letting some other program handle issues
+ of data conversion.
+
+ If FHCRC is set, a CRC16 for the gzip header is present,
+ immediately before the compressed data. The CRC16 consists
+ of the two least significant bytes of the CRC32 for all
+ bytes of the gzip header up to and not including the CRC16.
+ [The FHCRC bit was never set by versions of gzip up to
+ 1.2.4, even though it was documented with a different
+ meaning in gzip 1.2.4.]
+
+ If FEXTRA is set, optional extra fields are present, as
+ described in a following section.
+
+
+
+Deutsch Informational [Page 6]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ If FNAME is set, an original file name is present,
+ terminated by a zero byte. The name must consist of ISO
+ 8859-1 (LATIN-1) characters; on operating systems using
+ EBCDIC or any other character set for file names, the name
+ must be translated to the ISO LATIN-1 character set. This
+ is the original name of the file being compressed, with any
+ directory components removed, and, if the file being
+ compressed is on a file system with case insensitive names,
+ forced to lower case. There is no original file name if the
+ data was compressed from a source other than a named file;
+ for example, if the source was stdin on a Unix system, there
+ is no file name.
+
+ If FCOMMENT is set, a zero-terminated file comment is
+ present. This comment is not interpreted; it is only
+ intended for human consumption. The comment must consist of
+ ISO 8859-1 (LATIN-1) characters. Line breaks should be
+ denoted by a single line feed character (10 decimal).
+
+ Reserved FLG bits must be zero.
+
+ MTIME (Modification TIME)
+ This gives the most recent modification time of the original
+ file being compressed. The time is in Unix format, i.e.,
+ seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this
+ may cause problems for MS-DOS and other systems that use
+ local rather than Universal time.) If the compressed data
+ did not come from a file, MTIME is set to the time at which
+ compression started. MTIME = 0 means no time stamp is
+ available.
+
+ XFL (eXtra FLags)
+ These flags are available for use by specific compression
+ methods. The "deflate" method (CM = 8) sets these flags as
+ follows:
+
+ XFL = 2 - compressor used maximum compression,
+ slowest algorithm
+ XFL = 4 - compressor used fastest algorithm
+
+ OS (Operating System)
+ This identifies the type of file system on which compression
+ took place. This may be useful in determining end-of-line
+ convention for text files. The currently defined values are
+ as follows:
+
+
+
+
+
+
+Deutsch Informational [Page 7]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32)
+ 1 - Amiga
+ 2 - VMS (or OpenVMS)
+ 3 - Unix
+ 4 - VM/CMS
+ 5 - Atari TOS
+ 6 - HPFS filesystem (OS/2, NT)
+ 7 - Macintosh
+ 8 - Z-System
+ 9 - CP/M
+ 10 - TOPS-20
+ 11 - NTFS filesystem (NT)
+ 12 - QDOS
+ 13 - Acorn RISCOS
+ 255 - unknown
+
+ XLEN (eXtra LENgth)
+ If FLG.FEXTRA is set, this gives the length of the optional
+ extra field. See below for details.
+
+ CRC32 (CRC-32)
+ This contains a Cyclic Redundancy Check value of the
+ uncompressed data computed according to CRC-32 algorithm
+ used in the ISO 3309 standard and in section 8.1.1.6.2 of
+ ITU-T recommendation V.42. (See http://www.iso.ch for
+ ordering ISO documents. See gopher://info.itu.ch for an
+ online version of ITU-T V.42.)
+
+ ISIZE (Input SIZE)
+ This contains the size of the original (uncompressed) input
+ data modulo 2^32.
+
+ 2.3.1.1. Extra field
+
+ If the FLG.FEXTRA bit is set, an "extra field" is present in
+ the header, with total length XLEN bytes. It consists of a
+ series of subfields, each of the form:
+
+ +---+---+---+---+==================================+
+ |SI1|SI2| LEN |... LEN bytes of subfield data ...|
+ +---+---+---+---+==================================+
+
+ SI1 and SI2 provide a subfield ID, typically two ASCII letters
+ with some mnemonic value. Jean-Loup Gailly
+ <gzip@prep.ai.mit.edu> is maintaining a registry of subfield
+ IDs; please send him any subfield ID you wish to use. Subfield
+ IDs with SI2 = 0 are reserved for future use. The following
+ IDs are currently defined:
+
+
+
+Deutsch Informational [Page 8]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ SI1 SI2 Data
+ ---------- ---------- ----
+ 0x41 ('A') 0x70 ('P') Apollo file type information
+
+ LEN gives the length of the subfield data, excluding the 4
+ initial bytes.
+
+ 2.3.1.2. Compliance
+
+ A compliant compressor must produce files with correct ID1,
+ ID2, CM, CRC32, and ISIZE, but may set all the other fields in
+ the fixed-length part of the header to default values (255 for
+ OS, 0 for all others). The compressor must set all reserved
+ bits to zero.
+
+ A compliant decompressor must check ID1, ID2, and CM, and
+ provide an error indication if any of these have incorrect
+ values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC
+ at least so it can skip over the optional fields if they are
+ present. It need not examine any other part of the header or
+ trailer; in particular, a decompressor may ignore FTEXT and OS
+ and always produce binary output, and still be compliant. A
+ compliant decompressor must give an error indication if any
+ reserved bit is non-zero, since such a bit could indicate the
+ presence of a new field that would cause subsequent data to be
+ interpreted incorrectly.
+
+3. References
+
+ [1] "Information Processing - 8-bit single-byte coded graphic
+ character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987).
+ The ISO 8859-1 (Latin-1) character set is a superset of 7-bit
+ ASCII. Files defining this character set are available as
+ iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/
+
+ [2] ISO 3309
+
+ [3] ITU-T recommendation V.42
+
+ [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification",
+ available in ftp://ftp.uu.net/pub/archiving/zip/doc/
+
+ [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in
+ ftp://prep.ai.mit.edu/pub/gnu/
+
+ [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table
+ Look-Up", Communications of the ACM, 31(8), pp.1008-1013.
+
+
+
+
+Deutsch Informational [Page 9]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal,
+ pp.118-133.
+
+ [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt,
+ describing the CRC concept.
+
+4. Security Considerations
+
+ Any data compression method involves the reduction of redundancy in
+ the data. Consequently, any corruption of the data is likely to have
+ severe effects and be difficult to correct. Uncompressed text, on
+ the other hand, will probably still be readable despite the presence
+ of some corrupted bytes.
+
+ It is recommended that systems using this data format provide some
+ means of validating the integrity of the compressed data, such as by
+ setting and checking the CRC-32 check value.
+
+5. Acknowledgements
+
+ Trademarks cited in this document are the property of their
+ respective owners.
+
+ Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler,
+ the related software described in this specification. Glenn
+ Randers-Pehrson converted this document to RFC and HTML format.
+
+6. Author's Address
+
+ L. Peter Deutsch
+ Aladdin Enterprises
+ 203 Santa Margarita Ave.
+ Menlo Park, CA 94025
+
+ Phone: (415) 322-0103 (AM only)
+ FAX: (415) 322-1734
+ EMail: <ghost@aladdin.com>
+
+ Questions about the technical content of this specification can be
+ sent by email to:
+
+ Jean-Loup Gailly <gzip@prep.ai.mit.edu> and
+ Mark Adler <madler@alumni.caltech.edu>
+
+ Editorial comments on this specification can be sent by email to:
+
+ L. Peter Deutsch <ghost@aladdin.com> and
+ Glenn Randers-Pehrson <randeg@alumni.rpi.edu>
+
+
+
+Deutsch Informational [Page 10]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+7. Appendix: Jean-Loup Gailly's gzip utility
+
+ The most widely used implementation of gzip compression, and the
+ original documentation on which this specification is based, were
+ created by Jean-Loup Gailly <gzip@prep.ai.mit.edu>. Since this
+ implementation is a de facto standard, we mention some more of its
+ features here. Again, the material in this section is not part of
+ the specification per se, and implementations need not follow it to
+ be compliant.
+
+ When compressing or decompressing a file, gzip preserves the
+ protection, ownership, and modification time attributes on the local
+ file system, since there is no provision for representing protection
+ attributes in the gzip file format itself. Since the file format
+ includes a modification time, the gzip decompressor provides a
+ command line switch that assigns the modification time from the file,
+ rather than the local modification time of the compressed input, to
+ the decompressed output.
+
+8. Appendix: Sample CRC Code
+
+ The following sample code represents a practical implementation of
+ the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42
+ for a formal specification.)
+
+ The sample code is in the ANSI C programming language. Non C users
+ may find it easier to read with these hints:
+
+ & Bitwise AND operator.
+ ^ Bitwise exclusive-OR operator.
+ >> Bitwise right shift operator. When applied to an
+ unsigned quantity, as here, right shift inserts zero
+ bit(s) at the left.
+ ! Logical NOT operator.
+ ++ "n++" increments the variable n.
+ 0xNNN 0x introduces a hexadecimal (base 16) constant.
+ Suffix L indicates a long value (at least 32 bits).
+
+ /* Table of CRCs of all 8-bit messages. */
+ unsigned long crc_table[256];
+
+ /* Flag: has the table been computed? Initially false. */
+ int crc_table_computed = 0;
+
+ /* Make the table for a fast CRC. */
+ void make_crc_table(void)
+ {
+ unsigned long c;
+
+
+
+Deutsch Informational [Page 11]
+
+RFC 1952 GZIP File Format Specification May 1996
+
+
+ int n, k;
+ for (n = 0; n < 256; n++) {
+ c = (unsigned long) n;
+ for (k = 0; k < 8; k++) {
+ if (c & 1) {
+ c = 0xedb88320L ^ (c >> 1);
+ } else {
+ c = c >> 1;
+ }
+ }
+ crc_table[n] = c;
+ }
+ crc_table_computed = 1;
+ }
+
+ /*
+ Update a running crc with the bytes buf[0..len-1] and return
+ the updated crc. The crc should be initialized to zero. Pre- and
+ post-conditioning (one's complement) is performed within this
+ function so it shouldn't be done by the caller. Usage example:
+
+ unsigned long crc = 0L;
+
+ while (read_buffer(buffer, length) != EOF) {
+ crc = update_crc(crc, buffer, length);
+ }
+ if (crc != original_crc) error();
+ */
+ unsigned long update_crc(unsigned long crc,
+ unsigned char *buf, int len)
+ {
+ unsigned long c = crc ^ 0xffffffffL;
+ int n;
+
+ if (!crc_table_computed)
+ make_crc_table();
+ for (n = 0; n < len; n++) {
+ c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8);
+ }
+ return c ^ 0xffffffffL;
+ }
+
+ /* Return the CRC of the bytes buf[0..len-1]. */
+ unsigned long crc(unsigned char *buf, int len)
+ {
+ return update_crc(0L, buf, len);
+ }
+
+
+
+
+Deutsch Informational [Page 12]
+
diff --git a/compat/zlib/doc/txtvsbin.txt b/compat/zlib/doc/txtvsbin.txt
new file mode 100644
index 0000000..3d0f063
--- /dev/null
+++ b/compat/zlib/doc/txtvsbin.txt
@@ -0,0 +1,107 @@
+A Fast Method for Identifying Plain Text Files
+==============================================
+
+
+Introduction
+------------
+
+Given a file coming from an unknown source, it is sometimes desirable
+to find out whether the format of that file is plain text. Although
+this may appear like a simple task, a fully accurate detection of the
+file type requires heavy-duty semantic analysis on the file contents.
+It is, however, possible to obtain satisfactory results by employing
+various heuristics.
+
+Previous versions of PKZip and other zip-compatible compression tools
+were using a crude detection scheme: if more than 80% (4/5) of the bytes
+found in a certain buffer are within the range [7..127], the file is
+labeled as plain text, otherwise it is labeled as binary. A prominent
+limitation of this scheme is the restriction to Latin-based alphabets.
+Other alphabets, like Greek, Cyrillic or Asian, make extensive use of
+the bytes within the range [128..255], and texts using these alphabets
+are most often misidentified by this scheme; in other words, the rate
+of false negatives is sometimes too high, which means that the recall
+is low. Another weakness of this scheme is a reduced precision, due to
+the false positives that may occur when binary files containing large
+amounts of textual characters are misidentified as plain text.
+
+In this article we propose a new, simple detection scheme that features
+a much increased precision and a near-100% recall. This scheme is
+designed to work on ASCII, Unicode and other ASCII-derived alphabets,
+and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.)
+and variable-sized encodings (ISO-2022, UTF-8, etc.). Wider encodings
+(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however.
+
+
+The Algorithm
+-------------
+
+The algorithm works by dividing the set of bytecodes [0..255] into three
+categories:
+- The white list of textual bytecodes:
+ 9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255.
+- The gray list of tolerated bytecodes:
+ 7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC).
+- The black list of undesired, non-textual bytecodes:
+ 0 (NUL) to 6, 14 to 31.
+
+If a file contains at least one byte that belongs to the white list and
+no byte that belongs to the black list, then the file is categorized as
+plain text; otherwise, it is categorized as binary. (The boundary case,
+when the file is empty, automatically falls into the latter category.)
+
+
+Rationale
+---------
+
+The idea behind this algorithm relies on two observations.
+
+The first observation is that, although the full range of 7-bit codes
+[0..127] is properly specified by the ASCII standard, most control
+characters in the range [0..31] are not used in practice. The only
+widely-used, almost universally-portable control codes are 9 (TAB),
+10 (LF) and 13 (CR). There are a few more control codes that are
+recognized on a reduced range of platforms and text viewers/editors:
+7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these
+codes are rarely (if ever) used alone, without being accompanied by
+some printable text. Even the newer, portable text formats such as
+XML avoid using control characters outside the list mentioned here.
+
+The second observation is that most of the binary files tend to contain
+control characters, especially 0 (NUL). Even though the older text
+detection schemes observe the presence of non-ASCII codes from the range
+[128..255], the precision rarely has to suffer if this upper range is
+labeled as textual, because the files that are genuinely binary tend to
+contain both control characters and codes from the upper range. On the
+other hand, the upper range needs to be labeled as textual, because it
+is used by virtually all ASCII extensions. In particular, this range is
+used for encoding non-Latin scripts.
+
+Since there is no counting involved, other than simply observing the
+presence or the absence of some byte values, the algorithm produces
+consistent results, regardless what alphabet encoding is being used.
+(If counting were involved, it could be possible to obtain different
+results on a text encoded, say, using ISO-8859-16 versus UTF-8.)
+
+There is an extra category of plain text files that are "polluted" with
+one or more black-listed codes, either by mistake or by peculiar design
+considerations. In such cases, a scheme that tolerates a small fraction
+of black-listed codes would provide an increased recall (i.e. more true
+positives). This, however, incurs a reduced precision overall, since
+false positives are more likely to appear in binary files that contain
+large chunks of textual data. Furthermore, "polluted" plain text should
+be regarded as binary by general-purpose text detection schemes, because
+general-purpose text processing algorithms might not be applicable.
+Under this premise, it is safe to say that our detection method provides
+a near-100% recall.
+
+Experiments have been run on many files coming from various platforms
+and applications. We tried plain text files, system logs, source code,
+formatted office documents, compiled object code, etc. The results
+confirm the optimistic assumptions about the capabilities of this
+algorithm.
+
+
+--
+Cosmin Truta
+Last updated: 2006-May-28
diff --git a/compat/zlib/examples/README.examples b/compat/zlib/examples/README.examples
new file mode 100644
index 0000000..56a3171
--- /dev/null
+++ b/compat/zlib/examples/README.examples
@@ -0,0 +1,49 @@
+This directory contains examples of the use of zlib and other relevant
+programs and documentation.
+
+enough.c
+ calculation and justification of ENOUGH parameter in inftrees.h
+ - calculates the maximum table space used in inflate tree
+ construction over all possible Huffman codes
+
+fitblk.c
+ compress just enough input to nearly fill a requested output size
+ - zlib isn't designed to do this, but fitblk does it anyway
+
+gun.c
+ uncompress a gzip file
+ - illustrates the use of inflateBack() for high speed file-to-file
+ decompression using call-back functions
+ - is approximately twice as fast as gzip -d
+ - also provides Unix uncompress functionality, again twice as fast
+
+gzappend.c
+ append to a gzip file
+ - illustrates the use of the Z_BLOCK flush parameter for inflate()
+ - illustrates the use of deflatePrime() to start at any bit
+
+gzjoin.c
+ join gzip files without recalculating the crc or recompressing
+ - illustrates the use of the Z_BLOCK flush parameter for inflate()
+ - illustrates the use of crc32_combine()
+
+gzlog.c
+gzlog.h
+ efficiently and robustly maintain a message log file in gzip format
+ - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(),
+ and deflateSetDictionary()
+ - illustrates use of a gzip header extra field
+
+zlib_how.html
+ painfully comprehensive description of zpipe.c (see below)
+ - describes in excruciating detail the use of deflate() and inflate()
+
+zpipe.c
+ reads and writes zlib streams from stdin to stdout
+ - illustrates the proper use of deflate() and inflate()
+ - deeply commented in zlib_how.html (see above)
+
+zran.c
+ index a zlib or gzip stream and randomly access it
+ - illustrates the use of Z_BLOCK, inflatePrime(), and
+ inflateSetDictionary() to provide random access
diff --git a/compat/zlib/examples/enough.c b/compat/zlib/examples/enough.c
new file mode 100644
index 0000000..b991144
--- /dev/null
+++ b/compat/zlib/examples/enough.c
@@ -0,0 +1,572 @@
+/* enough.c -- determine the maximum size of inflate's Huffman code tables over
+ * all possible valid and complete Huffman codes, subject to a length limit.
+ * Copyright (C) 2007, 2008, 2012 Mark Adler
+ * Version 1.4 18 August 2012 Mark Adler
+ */
+
+/* Version history:
+ 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4)
+ 1.1 4 Jan 2007 Use faster incremental table usage computation
+ Prune examine() search on previously visited states
+ 1.2 5 Jan 2007 Comments clean up
+ As inflate does, decrease root for short codes
+ Refuse cases where inflate would increase root
+ 1.3 17 Feb 2008 Add argument for initial root table size
+ Fix bug for initial root table size == max - 1
+ Use a macro to compute the history index
+ 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!)
+ Clean up comparisons of different types
+ Clean up code indentation
+ */
+
+/*
+ Examine all possible Huffman codes for a given number of symbols and a
+ maximum code length in bits to determine the maximum table size for zilb's
+ inflate. Only complete Huffman codes are counted.
+
+ Two codes are considered distinct if the vectors of the number of codes per
+ length are not identical. So permutations of the symbol assignments result
+ in the same code for the counting, as do permutations of the assignments of
+ the bit values to the codes (i.e. only canonical codes are counted).
+
+ We build a code from shorter to longer lengths, determining how many symbols
+ are coded at each length. At each step, we have how many symbols remain to
+ be coded, what the last code length used was, and how many bit patterns of
+ that length remain unused. Then we add one to the code length and double the
+ number of unused patterns to graduate to the next code length. We then
+ assign all portions of the remaining symbols to that code length that
+ preserve the properties of a correct and eventually complete code. Those
+ properties are: we cannot use more bit patterns than are available; and when
+ all the symbols are used, there are exactly zero possible bit patterns
+ remaining.
+
+ The inflate Huffman decoding algorithm uses two-level lookup tables for
+ speed. There is a single first-level table to decode codes up to root bits
+ in length (root == 9 in the current inflate implementation). The table
+ has 1 << root entries and is indexed by the next root bits of input. Codes
+ shorter than root bits have replicated table entries, so that the correct
+ entry is pointed to regardless of the bits that follow the short code. If
+ the code is longer than root bits, then the table entry points to a second-
+ level table. The size of that table is determined by the longest code with
+ that root-bit prefix. If that longest code has length len, then the table
+ has size 1 << (len - root), to index the remaining bits in that set of
+ codes. Each subsequent root-bit prefix then has its own sub-table. The
+ total number of table entries required by the code is calculated
+ incrementally as the number of codes at each bit length is populated. When
+ all of the codes are shorter than root bits, then root is reduced to the
+ longest code length, resulting in a single, smaller, one-level table.
+
+ The inflate algorithm also provides for small values of root (relative to
+ the log2 of the number of symbols), where the shortest code has more bits
+ than root. In that case, root is increased to the length of the shortest
+ code. This program, by design, does not handle that case, so it is verified
+ that the number of symbols is less than 2^(root + 1).
+
+ In order to speed up the examination (by about ten orders of magnitude for
+ the default arguments), the intermediate states in the build-up of a code
+ are remembered and previously visited branches are pruned. The memory
+ required for this will increase rapidly with the total number of symbols and
+ the maximum code length in bits. However this is a very small price to pay
+ for the vast speedup.
+
+ First, all of the possible Huffman codes are counted, and reachable
+ intermediate states are noted by a non-zero count in a saved-results array.
+ Second, the intermediate states that lead to (root + 1) bit or longer codes
+ are used to look at all sub-codes from those junctures for their inflate
+ memory usage. (The amount of memory used is not affected by the number of
+ codes of root bits or less in length.) Third, the visited states in the
+ construction of those sub-codes and the associated calculation of the table
+ size is recalled in order to avoid recalculating from the same juncture.
+ Beginning the code examination at (root + 1) bit codes, which is enabled by
+ identifying the reachable nodes, accounts for about six of the orders of
+ magnitude of improvement for the default arguments. About another four
+ orders of magnitude come from not revisiting previous states. Out of
+ approximately 2x10^16 possible Huffman codes, only about 2x10^6 sub-codes
+ need to be examined to cover all of the possible table memory usage cases
+ for the default arguments of 286 symbols limited to 15-bit codes.
+
+ Note that an unsigned long long type is used for counting. It is quite easy
+ to exceed the capacity of an eight-byte integer with a large number of
+ symbols and a large maximum code length, so multiple-precision arithmetic
+ would need to replace the unsigned long long arithmetic in that case. This
+ program will abort if an overflow occurs. The big_t type identifies where
+ the counting takes place.
+
+ An unsigned long long type is also used for calculating the number of
+ possible codes remaining at the maximum length. This limits the maximum
+ code length to the number of bits in a long long minus the number of bits
+ needed to represent the symbols in a flat code. The code_t type identifies
+ where the bit pattern counting takes place.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <assert.h>
+
+#define local static
+
+/* special data types */
+typedef unsigned long long big_t; /* type for code counting */
+typedef unsigned long long code_t; /* type for bit pattern counting */
+struct tab { /* type for been here check */
+ size_t len; /* length of bit vector in char's */
+ char *vec; /* allocated bit vector */
+};
+
+/* The array for saving results, num[], is indexed with this triplet:
+
+ syms: number of symbols remaining to code
+ left: number of available bit patterns at length len
+ len: number of bits in the codes currently being assigned
+
+ Those indices are constrained thusly when saving results:
+
+ syms: 3..totsym (totsym == total symbols to code)
+ left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6)
+ len: 1..max - 1 (max == maximum code length in bits)
+
+ syms == 2 is not saved since that immediately leads to a single code. left
+ must be even, since it represents the number of available bit patterns at
+ the current length, which is double the number at the previous length.
+ left ends at syms-1 since left == syms immediately results in a single code.
+ (left > sym is not allowed since that would result in an incomplete code.)
+ len is less than max, since the code completes immediately when len == max.
+
+ The offset into the array is calculated for the three indices with the
+ first one (syms) being outermost, and the last one (len) being innermost.
+ We build the array with length max-1 lists for the len index, with syms-3
+ of those for each symbol. There are totsym-2 of those, with each one
+ varying in length as a function of sym. See the calculation of index in
+ count() for the index, and the calculation of size in main() for the size
+ of the array.
+
+ For the deflate example of 286 symbols limited to 15-bit codes, the array
+ has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than
+ half of the space allocated for saved results is actually used -- not all
+ possible triplets are reached in the generation of valid Huffman codes.
+ */
+
+/* The array for tracking visited states, done[], is itself indexed identically
+ to the num[] array as described above for the (syms, left, len) triplet.
+ Each element in the array is further indexed by the (mem, rem) doublet,
+ where mem is the amount of inflate table space used so far, and rem is the
+ remaining unused entries in the current inflate sub-table. Each indexed
+ element is simply one bit indicating whether the state has been visited or
+ not. Since the ranges for mem and rem are not known a priori, each bit
+ vector is of a variable size, and grows as needed to accommodate the visited
+ states. mem and rem are used to calculate a single index in a triangular
+ array. Since the range of mem is expected in the default case to be about
+ ten times larger than the range of rem, the array is skewed to reduce the
+ memory usage, with eight times the range for mem than for rem. See the
+ calculations for offset and bit in beenhere() for the details.
+
+ For the deflate example of 286 symbols limited to 15-bit codes, the bit
+ vectors grow to total approximately 21 MB, in addition to the 4.3 MB done[]
+ array itself.
+ */
+
+/* Globals to avoid propagating constants or constant pointers recursively */
+local int max; /* maximum allowed bit length for the codes */
+local int root; /* size of base code table in bits */
+local int large; /* largest code table so far */
+local size_t size; /* number of elements in num and done */
+local int *code; /* number of symbols assigned to each bit length */
+local big_t *num; /* saved results array for code counting */
+local struct tab *done; /* states already evaluated array */
+
+/* Index function for num[] and done[] */
+#define INDEX(i,j,k) (((size_t)((i-1)>>1)*((i-2)>>1)+(j>>1)-1)*(max-1)+k-1)
+
+/* Free allocated space. Uses globals code, num, and done. */
+local void cleanup(void)
+{
+ size_t n;
+
+ if (done != NULL) {
+ for (n = 0; n < size; n++)
+ if (done[n].len)
+ free(done[n].vec);
+ free(done);
+ }
+ if (num != NULL)
+ free(num);
+ if (code != NULL)
+ free(code);
+}
+
+/* Return the number of possible Huffman codes using bit patterns of lengths
+ len through max inclusive, coding syms symbols, with left bit patterns of
+ length len unused -- return -1 if there is an overflow in the counting.
+ Keep a record of previous results in num to prevent repeating the same
+ calculation. Uses the globals max and num. */
+local big_t count(int syms, int len, int left)
+{
+ big_t sum; /* number of possible codes from this juncture */
+ big_t got; /* value returned from count() */
+ int least; /* least number of syms to use at this juncture */
+ int most; /* most number of syms to use at this juncture */
+ int use; /* number of bit patterns to use in next call */
+ size_t index; /* index of this case in *num */
+
+ /* see if only one possible code */
+ if (syms == left)
+ return 1;
+
+ /* note and verify the expected state */
+ assert(syms > left && left > 0 && len < max);
+
+ /* see if we've done this one already */
+ index = INDEX(syms, left, len);
+ got = num[index];
+ if (got)
+ return got; /* we have -- return the saved result */
+
+ /* we need to use at least this many bit patterns so that the code won't be
+ incomplete at the next length (more bit patterns than symbols) */
+ least = (left << 1) - syms;
+ if (least < 0)
+ least = 0;
+
+ /* we can use at most this many bit patterns, lest there not be enough
+ available for the remaining symbols at the maximum length (if there were
+ no limit to the code length, this would become: most = left - 1) */
+ most = (((code_t)left << (max - len)) - syms) /
+ (((code_t)1 << (max - len)) - 1);
+
+ /* count all possible codes from this juncture and add them up */
+ sum = 0;
+ for (use = least; use <= most; use++) {
+ got = count(syms - use, len + 1, (left - use) << 1);
+ sum += got;
+ if (got == (big_t)0 - 1 || sum < got) /* overflow */
+ return (big_t)0 - 1;
+ }
+
+ /* verify that all recursive calls are productive */
+ assert(sum != 0);
+
+ /* save the result and return it */
+ num[index] = sum;
+ return sum;
+}
+
+/* Return true if we've been here before, set to true if not. Set a bit in a
+ bit vector to indicate visiting this state. Each (syms,len,left) state
+ has a variable size bit vector indexed by (mem,rem). The bit vector is
+ lengthened if needed to allow setting the (mem,rem) bit. */
+local int beenhere(int syms, int len, int left, int mem, int rem)
+{
+ size_t index; /* index for this state's bit vector */
+ size_t offset; /* offset in this state's bit vector */
+ int bit; /* mask for this state's bit */
+ size_t length; /* length of the bit vector in bytes */
+ char *vector; /* new or enlarged bit vector */
+
+ /* point to vector for (syms,left,len), bit in vector for (mem,rem) */
+ index = INDEX(syms, left, len);
+ mem -= 1 << root;
+ offset = (mem >> 3) + rem;
+ offset = ((offset * (offset + 1)) >> 1) + rem;
+ bit = 1 << (mem & 7);
+
+ /* see if we've been here */
+ length = done[index].len;
+ if (offset < length && (done[index].vec[offset] & bit) != 0)
+ return 1; /* done this! */
+
+ /* we haven't been here before -- set the bit to show we have now */
+
+ /* see if we need to lengthen the vector in order to set the bit */
+ if (length <= offset) {
+ /* if we have one already, enlarge it, zero out the appended space */
+ if (length) {
+ do {
+ length <<= 1;
+ } while (length <= offset);
+ vector = realloc(done[index].vec, length);
+ if (vector != NULL)
+ memset(vector + done[index].len, 0, length - done[index].len);
+ }
+
+ /* otherwise we need to make a new vector and zero it out */
+ else {
+ length = 1 << (len - root);
+ while (length <= offset)
+ length <<= 1;
+ vector = calloc(length, sizeof(char));
+ }
+
+ /* in either case, bail if we can't get the memory */
+ if (vector == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ exit(1);
+ }
+
+ /* install the new vector */
+ done[index].len = length;
+ done[index].vec = vector;
+ }
+
+ /* set the bit */
+ done[index].vec[offset] |= bit;
+ return 0;
+}
+
+/* Examine all possible codes from the given node (syms, len, left). Compute
+ the amount of memory required to build inflate's decoding tables, where the
+ number of code structures used so far is mem, and the number remaining in
+ the current sub-table is rem. Uses the globals max, code, root, large, and
+ done. */
+local void examine(int syms, int len, int left, int mem, int rem)
+{
+ int least; /* least number of syms to use at this juncture */
+ int most; /* most number of syms to use at this juncture */
+ int use; /* number of bit patterns to use in next call */
+
+ /* see if we have a complete code */
+ if (syms == left) {
+ /* set the last code entry */
+ code[len] = left;
+
+ /* complete computation of memory used by this code */
+ while (rem < left) {
+ left -= rem;
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ assert(rem == left);
+
+ /* if this is a new maximum, show the entries used and the sub-code */
+ if (mem > large) {
+ large = mem;
+ printf("max %d: ", mem);
+ for (use = root + 1; use <= max; use++)
+ if (code[use])
+ printf("%d[%d] ", code[use], use);
+ putchar('\n');
+ fflush(stdout);
+ }
+
+ /* remove entries as we drop back down in the recursion */
+ code[len] = 0;
+ return;
+ }
+
+ /* prune the tree if we can */
+ if (beenhere(syms, len, left, mem, rem))
+ return;
+
+ /* we need to use at least this many bit patterns so that the code won't be
+ incomplete at the next length (more bit patterns than symbols) */
+ least = (left << 1) - syms;
+ if (least < 0)
+ least = 0;
+
+ /* we can use at most this many bit patterns, lest there not be enough
+ available for the remaining symbols at the maximum length (if there were
+ no limit to the code length, this would become: most = left - 1) */
+ most = (((code_t)left << (max - len)) - syms) /
+ (((code_t)1 << (max - len)) - 1);
+
+ /* occupy least table spaces, creating new sub-tables as needed */
+ use = least;
+ while (rem < use) {
+ use -= rem;
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ rem -= use;
+
+ /* examine codes from here, updating table space as we go */
+ for (use = least; use <= most; use++) {
+ code[len] = use;
+ examine(syms - use, len + 1, (left - use) << 1,
+ mem + (rem ? 1 << (len - root) : 0), rem << 1);
+ if (rem == 0) {
+ rem = 1 << (len - root);
+ mem += rem;
+ }
+ rem--;
+ }
+
+ /* remove entries as we drop back down in the recursion */
+ code[len] = 0;
+}
+
+/* Look at all sub-codes starting with root + 1 bits. Look at only the valid
+ intermediate code states (syms, left, len). For each completed code,
+ calculate the amount of memory required by inflate to build the decoding
+ tables. Find the maximum amount of memory required and show the code that
+ requires that maximum. Uses the globals max, root, and num. */
+local void enough(int syms)
+{
+ int n; /* number of remaing symbols for this node */
+ int left; /* number of unused bit patterns at this length */
+ size_t index; /* index of this case in *num */
+
+ /* clear code */
+ for (n = 0; n <= max; n++)
+ code[n] = 0;
+
+ /* look at all (root + 1) bit and longer codes */
+ large = 1 << root; /* base table */
+ if (root < max) /* otherwise, there's only a base table */
+ for (n = 3; n <= syms; n++)
+ for (left = 2; left < n; left += 2)
+ {
+ /* look at all reachable (root + 1) bit nodes, and the
+ resulting codes (complete at root + 2 or more) */
+ index = INDEX(n, left, root + 1);
+ if (root + 1 < max && num[index]) /* reachable node */
+ examine(n, root + 1, left, 1 << root, 0);
+
+ /* also look at root bit codes with completions at root + 1
+ bits (not saved in num, since complete), just in case */
+ if (num[index - 1] && n <= left << 1)
+ examine((n - left) << 1, root + 1, (n - left) << 1,
+ 1 << root, 0);
+ }
+
+ /* done */
+ printf("done: maximum of %d table entries\n", large);
+}
+
+/*
+ Examine and show the total number of possible Huffman codes for a given
+ maximum number of symbols, initial root table size, and maximum code length
+ in bits -- those are the command arguments in that order. The default
+ values are 286, 9, and 15 respectively, for the deflate literal/length code.
+ The possible codes are counted for each number of coded symbols from two to
+ the maximum. The counts for each of those and the total number of codes are
+ shown. The maximum number of inflate table entires is then calculated
+ across all possible codes. Each new maximum number of table entries and the
+ associated sub-code (starting at root + 1 == 10 bits) is shown.
+
+ To count and examine Huffman codes that are not length-limited, provide a
+ maximum length equal to the number of symbols minus one.
+
+ For the deflate literal/length code, use "enough". For the deflate distance
+ code, use "enough 30 6".
+
+ This uses the %llu printf format to print big_t numbers, which assumes that
+ big_t is an unsigned long long. If the big_t type is changed (for example
+ to a multiple precision type), the method of printing will also need to be
+ updated.
+ */
+int main(int argc, char **argv)
+{
+ int syms; /* total number of symbols to code */
+ int n; /* number of symbols to code for this run */
+ big_t got; /* return value of count() */
+ big_t sum; /* accumulated number of codes over n */
+ code_t word; /* for counting bits in code_t */
+
+ /* set up globals for cleanup() */
+ code = NULL;
+ num = NULL;
+ done = NULL;
+
+ /* get arguments -- default to the deflate literal/length code */
+ syms = 286;
+ root = 9;
+ max = 15;
+ if (argc > 1) {
+ syms = atoi(argv[1]);
+ if (argc > 2) {
+ root = atoi(argv[2]);
+ if (argc > 3)
+ max = atoi(argv[3]);
+ }
+ }
+ if (argc > 4 || syms < 2 || root < 1 || max < 1) {
+ fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n",
+ stderr);
+ return 1;
+ }
+
+ /* if not restricting the code length, the longest is syms - 1 */
+ if (max > syms - 1)
+ max = syms - 1;
+
+ /* determine the number of bits in a code_t */
+ for (n = 0, word = 1; word; n++, word <<= 1)
+ ;
+
+ /* make sure that the calculation of most will not overflow */
+ if (max > n || (code_t)(syms - 2) >= (((code_t)0 - 1) >> (max - 1))) {
+ fputs("abort: code length too long for internal types\n", stderr);
+ return 1;
+ }
+
+ /* reject impossible code requests */
+ if ((code_t)(syms - 1) > ((code_t)1 << max) - 1) {
+ fprintf(stderr, "%d symbols cannot be coded in %d bits\n",
+ syms, max);
+ return 1;
+ }
+
+ /* allocate code vector */
+ code = calloc(max + 1, sizeof(int));
+ if (code == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ return 1;
+ }
+
+ /* determine size of saved results array, checking for overflows,
+ allocate and clear the array (set all to zero with calloc()) */
+ if (syms == 2) /* iff max == 1 */
+ num = NULL; /* won't be saving any results */
+ else {
+ size = syms >> 1;
+ if (size > ((size_t)0 - 1) / (n = (syms - 1) >> 1) ||
+ (size *= n, size > ((size_t)0 - 1) / (n = max - 1)) ||
+ (size *= n, size > ((size_t)0 - 1) / sizeof(big_t)) ||
+ (num = calloc(size, sizeof(big_t))) == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ return 1;
+ }
+ }
+
+ /* count possible codes for all numbers of symbols, add up counts */
+ sum = 0;
+ for (n = 2; n <= syms; n++) {
+ got = count(n, 1, 2);
+ sum += got;
+ if (got == (big_t)0 - 1 || sum < got) { /* overflow */
+ fputs("abort: can't count that high!\n", stderr);
+ cleanup();
+ return 1;
+ }
+ printf("%llu %d-codes\n", got, n);
+ }
+ printf("%llu total codes for 2 to %d symbols", sum, syms);
+ if (max < syms - 1)
+ printf(" (%d-bit length limit)\n", max);
+ else
+ puts(" (no length limit)");
+
+ /* allocate and clear done array for beenhere() */
+ if (syms == 2)
+ done = NULL;
+ else if (size > ((size_t)0 - 1) / sizeof(struct tab) ||
+ (done = calloc(size, sizeof(struct tab))) == NULL) {
+ fputs("abort: unable to allocate enough memory\n", stderr);
+ cleanup();
+ return 1;
+ }
+
+ /* find and show maximum inflate table usage */
+ if (root > max) /* reduce root to max length */
+ root = max;
+ if ((code_t)syms < ((code_t)1 << (root + 1)))
+ enough(syms);
+ else
+ puts("cannot handle minimum code lengths > root");
+
+ /* done */
+ cleanup();
+ return 0;
+}
diff --git a/compat/zlib/examples/fitblk.c b/compat/zlib/examples/fitblk.c
new file mode 100644
index 0000000..c61de5c
--- /dev/null
+++ b/compat/zlib/examples/fitblk.c
@@ -0,0 +1,233 @@
+/* fitblk.c: example of fitting compressed output to a specified size
+ Not copyrighted -- provided to the public domain
+ Version 1.1 25 November 2004 Mark Adler */
+
+/* Version history:
+ 1.0 24 Nov 2004 First version
+ 1.1 25 Nov 2004 Change deflateInit2() to deflateInit()
+ Use fixed-size, stack-allocated raw buffers
+ Simplify code moving compression to subroutines
+ Use assert() for internal errors
+ Add detailed description of approach
+ */
+
+/* Approach to just fitting a requested compressed size:
+
+ fitblk performs three compression passes on a portion of the input
+ data in order to determine how much of that input will compress to
+ nearly the requested output block size. The first pass generates
+ enough deflate blocks to produce output to fill the requested
+ output size plus a specfied excess amount (see the EXCESS define
+ below). The last deflate block may go quite a bit past that, but
+ is discarded. The second pass decompresses and recompresses just
+ the compressed data that fit in the requested plus excess sized
+ buffer. The deflate process is terminated after that amount of
+ input, which is less than the amount consumed on the first pass.
+ The last deflate block of the result will be of a comparable size
+ to the final product, so that the header for that deflate block and
+ the compression ratio for that block will be about the same as in
+ the final product. The third compression pass decompresses the
+ result of the second step, but only the compressed data up to the
+ requested size minus an amount to allow the compressed stream to
+ complete (see the MARGIN define below). That will result in a
+ final compressed stream whose length is less than or equal to the
+ requested size. Assuming sufficient input and a requested size
+ greater than a few hundred bytes, the shortfall will typically be
+ less than ten bytes.
+
+ If the input is short enough that the first compression completes
+ before filling the requested output size, then that compressed
+ stream is return with no recompression.
+
+ EXCESS is chosen to be just greater than the shortfall seen in a
+ two pass approach similar to the above. That shortfall is due to
+ the last deflate block compressing more efficiently with a smaller
+ header on the second pass. EXCESS is set to be large enough so
+ that there is enough uncompressed data for the second pass to fill
+ out the requested size, and small enough so that the final deflate
+ block of the second pass will be close in size to the final deflate
+ block of the third and final pass. MARGIN is chosen to be just
+ large enough to assure that the final compression has enough room
+ to complete in all cases.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <assert.h>
+#include "zlib.h"
+
+#define local static
+
+/* print nastygram and leave */
+local void quit(char *why)
+{
+ fprintf(stderr, "fitblk abort: %s\n", why);
+ exit(1);
+}
+
+#define RAWLEN 4096 /* intermediate uncompressed buffer size */
+
+/* compress from file to def until provided buffer is full or end of
+ input reached; return last deflate() return value, or Z_ERRNO if
+ there was read error on the file */
+local int partcompress(FILE *in, z_streamp def)
+{
+ int ret, flush;
+ unsigned char raw[RAWLEN];
+
+ flush = Z_NO_FLUSH;
+ do {
+ def->avail_in = fread(raw, 1, RAWLEN, in);
+ if (ferror(in))
+ return Z_ERRNO;
+ def->next_in = raw;
+ if (feof(in))
+ flush = Z_FINISH;
+ ret = deflate(def, flush);
+ assert(ret != Z_STREAM_ERROR);
+ } while (def->avail_out != 0 && flush == Z_NO_FLUSH);
+ return ret;
+}
+
+/* recompress from inf's input to def's output; the input for inf and
+ the output for def are set in those structures before calling;
+ return last deflate() return value, or Z_MEM_ERROR if inflate()
+ was not able to allocate enough memory when it needed to */
+local int recompress(z_streamp inf, z_streamp def)
+{
+ int ret, flush;
+ unsigned char raw[RAWLEN];
+
+ flush = Z_NO_FLUSH;
+ do {
+ /* decompress */
+ inf->avail_out = RAWLEN;
+ inf->next_out = raw;
+ ret = inflate(inf, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR &&
+ ret != Z_NEED_DICT);
+ if (ret == Z_MEM_ERROR)
+ return ret;
+
+ /* compress what was decompresed until done or no room */
+ def->avail_in = RAWLEN - inf->avail_out;
+ def->next_in = raw;
+ if (inf->avail_out != 0)
+ flush = Z_FINISH;
+ ret = deflate(def, flush);
+ assert(ret != Z_STREAM_ERROR);
+ } while (ret != Z_STREAM_END && def->avail_out != 0);
+ return ret;
+}
+
+#define EXCESS 256 /* empirically determined stream overage */
+#define MARGIN 8 /* amount to back off for completion */
+
+/* compress from stdin to fixed-size block on stdout */
+int main(int argc, char **argv)
+{
+ int ret; /* return code */
+ unsigned size; /* requested fixed output block size */
+ unsigned have; /* bytes written by deflate() call */
+ unsigned char *blk; /* intermediate and final stream */
+ unsigned char *tmp; /* close to desired size stream */
+ z_stream def, inf; /* zlib deflate and inflate states */
+
+ /* get requested output size */
+ if (argc != 2)
+ quit("need one argument: size of output block");
+ ret = strtol(argv[1], argv + 1, 10);
+ if (argv[1][0] != 0)
+ quit("argument must be a number");
+ if (ret < 8) /* 8 is minimum zlib stream size */
+ quit("need positive size of 8 or greater");
+ size = (unsigned)ret;
+
+ /* allocate memory for buffers and compression engine */
+ blk = malloc(size + EXCESS);
+ def.zalloc = Z_NULL;
+ def.zfree = Z_NULL;
+ def.opaque = Z_NULL;
+ ret = deflateInit(&def, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK || blk == NULL)
+ quit("out of memory");
+
+ /* compress from stdin until output full, or no more input */
+ def.avail_out = size + EXCESS;
+ def.next_out = blk;
+ ret = partcompress(stdin, &def);
+ if (ret == Z_ERRNO)
+ quit("error reading input");
+
+ /* if it all fit, then size was undersubscribed -- done! */
+ if (ret == Z_STREAM_END && def.avail_out >= EXCESS) {
+ /* write block to stdout */
+ have = size + EXCESS - def.avail_out;
+ if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
+ quit("error writing output");
+
+ /* clean up and print results to stderr */
+ ret = deflateEnd(&def);
+ assert(ret != Z_STREAM_ERROR);
+ free(blk);
+ fprintf(stderr,
+ "%u bytes unused out of %u requested (all input)\n",
+ size - have, size);
+ return 0;
+ }
+
+ /* it didn't all fit -- set up for recompression */
+ inf.zalloc = Z_NULL;
+ inf.zfree = Z_NULL;
+ inf.opaque = Z_NULL;
+ inf.avail_in = 0;
+ inf.next_in = Z_NULL;
+ ret = inflateInit(&inf);
+ tmp = malloc(size + EXCESS);
+ if (ret != Z_OK || tmp == NULL)
+ quit("out of memory");
+ ret = deflateReset(&def);
+ assert(ret != Z_STREAM_ERROR);
+
+ /* do first recompression close to the right amount */
+ inf.avail_in = size + EXCESS;
+ inf.next_in = blk;
+ def.avail_out = size + EXCESS;
+ def.next_out = tmp;
+ ret = recompress(&inf, &def);
+ if (ret == Z_MEM_ERROR)
+ quit("out of memory");
+
+ /* set up for next reocmpression */
+ ret = inflateReset(&inf);
+ assert(ret != Z_STREAM_ERROR);
+ ret = deflateReset(&def);
+ assert(ret != Z_STREAM_ERROR);
+
+ /* do second and final recompression (third compression) */
+ inf.avail_in = size - MARGIN; /* assure stream will complete */
+ inf.next_in = tmp;
+ def.avail_out = size;
+ def.next_out = blk;
+ ret = recompress(&inf, &def);
+ if (ret == Z_MEM_ERROR)
+ quit("out of memory");
+ assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */
+
+ /* done -- write block to stdout */
+ have = size - def.avail_out;
+ if (fwrite(blk, 1, have, stdout) != have || ferror(stdout))
+ quit("error writing output");
+
+ /* clean up and print results to stderr */
+ free(tmp);
+ ret = inflateEnd(&inf);
+ assert(ret != Z_STREAM_ERROR);
+ ret = deflateEnd(&def);
+ assert(ret != Z_STREAM_ERROR);
+ free(blk);
+ fprintf(stderr,
+ "%u bytes unused out of %u requested (%lu input)\n",
+ size - have, size, def.total_in);
+ return 0;
+}
diff --git a/compat/zlib/examples/gun.c b/compat/zlib/examples/gun.c
new file mode 100644
index 0000000..89e484f
--- /dev/null
+++ b/compat/zlib/examples/gun.c
@@ -0,0 +1,702 @@
+/* gun.c -- simple gunzip to give an example of the use of inflateBack()
+ * Copyright (C) 2003, 2005, 2008, 2010, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ Version 1.7 12 August 2012 Mark Adler */
+
+/* Version history:
+ 1.0 16 Feb 2003 First version for testing of inflateBack()
+ 1.1 21 Feb 2005 Decompress concatenated gzip streams
+ Remove use of "this" variable (C++ keyword)
+ Fix return value for in()
+ Improve allocation failure checking
+ Add typecasting for void * structures
+ Add -h option for command version and usage
+ Add a bunch of comments
+ 1.2 20 Mar 2005 Add Unix compress (LZW) decompression
+ Copy file attributes from input file to output file
+ 1.3 12 Jun 2005 Add casts for error messages [Oberhumer]
+ 1.4 8 Dec 2006 LZW decompression speed improvements
+ 1.5 9 Feb 2008 Avoid warning in latest version of gcc
+ 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings
+ 1.7 12 Aug 2012 Update for z_const usage in zlib 1.2.8
+ */
+
+/*
+ gun [ -t ] [ name ... ]
+
+ decompresses the data in the named gzip files. If no arguments are given,
+ gun will decompress from stdin to stdout. The names must end in .gz, -gz,
+ .z, -z, _z, or .Z. The uncompressed data will be written to a file name
+ with the suffix stripped. On success, the original file is deleted. On
+ failure, the output file is deleted. For most failures, the command will
+ continue to process the remaining names on the command line. A memory
+ allocation failure will abort the command. If -t is specified, then the
+ listed files or stdin will be tested as gzip files for integrity (without
+ checking for a proper suffix), no output will be written, and no files
+ will be deleted.
+
+ Like gzip, gun allows concatenated gzip streams and will decompress them,
+ writing all of the uncompressed data to the output. Unlike gzip, gun allows
+ an empty file on input, and will produce no error writing an empty output
+ file.
+
+ gun will also decompress files made by Unix compress, which uses LZW
+ compression. These files are automatically detected by virtue of their
+ magic header bytes. Since the end of Unix compress stream is marked by the
+ end-of-file, they cannot be concantenated. If a Unix compress stream is
+ encountered in an input file, it is the last stream in that file.
+
+ Like gunzip and uncompress, the file attributes of the orignal compressed
+ file are maintained in the final uncompressed file, to the extent that the
+ user permissions allow it.
+
+ On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version
+ 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the
+ LZW decompression provided by gun is about twice as fast as the standard
+ Unix uncompress command.
+ */
+
+/* external functions and related types and constants */
+#include <stdio.h> /* fprintf() */
+#include <stdlib.h> /* malloc(), free() */
+#include <string.h> /* strerror(), strcmp(), strlen(), memcpy() */
+#include <errno.h> /* errno */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* read(), write(), close(), chown(), unlink() */
+#include <sys/types.h>
+#include <sys/stat.h> /* stat(), chmod() */
+#include <utime.h> /* utime() */
+#include "zlib.h" /* inflateBackInit(), inflateBack(), */
+ /* inflateBackEnd(), crc32() */
+
+/* function declaration */
+#define local static
+
+/* buffer constants */
+#define SIZE 32768U /* input and output buffer sizes */
+#define PIECE 16384 /* limits i/o chunks for 16-bit int case */
+
+/* structure for infback() to pass to input function in() -- it maintains the
+ input file and a buffer of size SIZE */
+struct ind {
+ int infile;
+ unsigned char *inbuf;
+};
+
+/* Load input buffer, assumed to be empty, and return bytes loaded and a
+ pointer to them. read() is called until the buffer is full, or until it
+ returns end-of-file or error. Return 0 on error. */
+local unsigned in(void *in_desc, z_const unsigned char **buf)
+{
+ int ret;
+ unsigned len;
+ unsigned char *next;
+ struct ind *me = (struct ind *)in_desc;
+
+ next = me->inbuf;
+ *buf = next;
+ len = 0;
+ do {
+ ret = PIECE;
+ if ((unsigned)ret > SIZE - len)
+ ret = (int)(SIZE - len);
+ ret = (int)read(me->infile, next, ret);
+ if (ret == -1) {
+ len = 0;
+ break;
+ }
+ next += ret;
+ len += ret;
+ } while (ret != 0 && len < SIZE);
+ return len;
+}
+
+/* structure for infback() to pass to output function out() -- it maintains the
+ output file, a running CRC-32 check on the output and the total number of
+ bytes output, both for checking against the gzip trailer. (The length in
+ the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and
+ the output is greater than 4 GB.) */
+struct outd {
+ int outfile;
+ int check; /* true if checking crc and total */
+ unsigned long crc;
+ unsigned long total;
+};
+
+/* Write output buffer and update the CRC-32 and total bytes written. write()
+ is called until all of the output is written or an error is encountered.
+ On success out() returns 0. For a write failure, out() returns 1. If the
+ output file descriptor is -1, then nothing is written.
+ */
+local int out(void *out_desc, unsigned char *buf, unsigned len)
+{
+ int ret;
+ struct outd *me = (struct outd *)out_desc;
+
+ if (me->check) {
+ me->crc = crc32(me->crc, buf, len);
+ me->total += len;
+ }
+ if (me->outfile != -1)
+ do {
+ ret = PIECE;
+ if ((unsigned)ret > len)
+ ret = (int)len;
+ ret = (int)write(me->outfile, buf, ret);
+ if (ret == -1)
+ return 1;
+ buf += ret;
+ len -= ret;
+ } while (len != 0);
+ return 0;
+}
+
+/* next input byte macro for use inside lunpipe() and gunpipe() */
+#define NEXT() (have ? 0 : (have = in(indp, &next)), \
+ last = have ? (have--, (int)(*next++)) : -1)
+
+/* memory for gunpipe() and lunpipe() --
+ the first 256 entries of prefix[] and suffix[] are never used, could
+ have offset the index, but it's faster to waste the memory */
+unsigned char inbuf[SIZE]; /* input buffer */
+unsigned char outbuf[SIZE]; /* output buffer */
+unsigned short prefix[65536]; /* index to LZW prefix string */
+unsigned char suffix[65536]; /* one-character LZW suffix */
+unsigned char match[65280 + 2]; /* buffer for reversed match or gzip
+ 32K sliding window */
+
+/* throw out what's left in the current bits byte buffer (this is a vestigial
+ aspect of the compressed data format derived from an implementation that
+ made use of a special VAX machine instruction!) */
+#define FLUSHCODE() \
+ do { \
+ left = 0; \
+ rem = 0; \
+ if (chunk > have) { \
+ chunk -= have; \
+ have = 0; \
+ if (NEXT() == -1) \
+ break; \
+ chunk--; \
+ if (chunk > have) { \
+ chunk = have = 0; \
+ break; \
+ } \
+ } \
+ have -= chunk; \
+ next += chunk; \
+ chunk = 0; \
+ } while (0)
+
+/* Decompress a compress (LZW) file from indp to outfile. The compress magic
+ header (two bytes) has already been read and verified. There are have bytes
+ of buffered input at next. strm is used for passing error information back
+ to gunpipe().
+
+ lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of
+ file, read error, or write error (a write error indicated by strm->next_in
+ not equal to Z_NULL), or Z_DATA_ERROR for invalid input.
+ */
+local int lunpipe(unsigned have, z_const unsigned char *next, struct ind *indp,
+ int outfile, z_stream *strm)
+{
+ int last; /* last byte read by NEXT(), or -1 if EOF */
+ unsigned chunk; /* bytes left in current chunk */
+ int left; /* bits left in rem */
+ unsigned rem; /* unused bits from input */
+ int bits; /* current bits per code */
+ unsigned code; /* code, table traversal index */
+ unsigned mask; /* mask for current bits codes */
+ int max; /* maximum bits per code for this stream */
+ unsigned flags; /* compress flags, then block compress flag */
+ unsigned end; /* last valid entry in prefix/suffix tables */
+ unsigned temp; /* current code */
+ unsigned prev; /* previous code */
+ unsigned final; /* last character written for previous code */
+ unsigned stack; /* next position for reversed string */
+ unsigned outcnt; /* bytes in output buffer */
+ struct outd outd; /* output structure */
+ unsigned char *p;
+
+ /* set up output */
+ outd.outfile = outfile;
+ outd.check = 0;
+
+ /* process remainder of compress header -- a flags byte */
+ flags = NEXT();
+ if (last == -1)
+ return Z_BUF_ERROR;
+ if (flags & 0x60) {
+ strm->msg = (char *)"unknown lzw flags set";
+ return Z_DATA_ERROR;
+ }
+ max = flags & 0x1f;
+ if (max < 9 || max > 16) {
+ strm->msg = (char *)"lzw bits out of range";
+ return Z_DATA_ERROR;
+ }
+ if (max == 9) /* 9 doesn't really mean 9 */
+ max = 10;
+ flags &= 0x80; /* true if block compress */
+
+ /* clear table */
+ bits = 9;
+ mask = 0x1ff;
+ end = flags ? 256 : 255;
+
+ /* set up: get first 9-bit code, which is the first decompressed byte, but
+ don't create a table entry until the next code */
+ if (NEXT() == -1) /* no compressed data is ok */
+ return Z_OK;
+ final = prev = (unsigned)last; /* low 8 bits of code */
+ if (NEXT() == -1) /* missing a bit */
+ return Z_BUF_ERROR;
+ if (last & 1) { /* code must be < 256 */
+ strm->msg = (char *)"invalid lzw code";
+ return Z_DATA_ERROR;
+ }
+ rem = (unsigned)last >> 1; /* remaining 7 bits */
+ left = 7;
+ chunk = bits - 2; /* 7 bytes left in this chunk */
+ outbuf[0] = (unsigned char)final; /* write first decompressed byte */
+ outcnt = 1;
+
+ /* decode codes */
+ stack = 0;
+ for (;;) {
+ /* if the table will be full after this, increment the code size */
+ if (end >= mask && bits < max) {
+ FLUSHCODE();
+ bits++;
+ mask <<= 1;
+ mask++;
+ }
+
+ /* get a code of length bits */
+ if (chunk == 0) /* decrement chunk modulo bits */
+ chunk = bits;
+ code = rem; /* low bits of code */
+ if (NEXT() == -1) { /* EOF is end of compressed data */
+ /* write remaining buffered output */
+ if (outcnt && out(&outd, outbuf, outcnt)) {
+ strm->next_in = outbuf; /* signal write error */
+ return Z_BUF_ERROR;
+ }
+ return Z_OK;
+ }
+ code += (unsigned)last << left; /* middle (or high) bits of code */
+ left += 8;
+ chunk--;
+ if (bits > left) { /* need more bits */
+ if (NEXT() == -1) /* can't end in middle of code */
+ return Z_BUF_ERROR;
+ code += (unsigned)last << left; /* high bits of code */
+ left += 8;
+ chunk--;
+ }
+ code &= mask; /* mask to current code length */
+ left -= bits; /* number of unused bits */
+ rem = (unsigned)last >> (8 - left); /* unused bits from last byte */
+
+ /* process clear code (256) */
+ if (code == 256 && flags) {
+ FLUSHCODE();
+ bits = 9; /* initialize bits and mask */
+ mask = 0x1ff;
+ end = 255; /* empty table */
+ continue; /* get next code */
+ }
+
+ /* special code to reuse last match */
+ temp = code; /* save the current code */
+ if (code > end) {
+ /* Be picky on the allowed code here, and make sure that the code
+ we drop through (prev) will be a valid index so that random
+ input does not cause an exception. The code != end + 1 check is
+ empirically derived, and not checked in the original uncompress
+ code. If this ever causes a problem, that check could be safely
+ removed. Leaving this check in greatly improves gun's ability
+ to detect random or corrupted input after a compress header.
+ In any case, the prev > end check must be retained. */
+ if (code != end + 1 || prev > end) {
+ strm->msg = (char *)"invalid lzw code";
+ return Z_DATA_ERROR;
+ }
+ match[stack++] = (unsigned char)final;
+ code = prev;
+ }
+
+ /* walk through linked list to generate output in reverse order */
+ p = match + stack;
+ while (code >= 256) {
+ *p++ = suffix[code];
+ code = prefix[code];
+ }
+ stack = p - match;
+ match[stack++] = (unsigned char)code;
+ final = code;
+
+ /* link new table entry */
+ if (end < mask) {
+ end++;
+ prefix[end] = (unsigned short)prev;
+ suffix[end] = (unsigned char)final;
+ }
+
+ /* set previous code for next iteration */
+ prev = temp;
+
+ /* write output in forward order */
+ while (stack > SIZE - outcnt) {
+ while (outcnt < SIZE)
+ outbuf[outcnt++] = match[--stack];
+ if (out(&outd, outbuf, outcnt)) {
+ strm->next_in = outbuf; /* signal write error */
+ return Z_BUF_ERROR;
+ }
+ outcnt = 0;
+ }
+ p = match + stack;
+ do {
+ outbuf[outcnt++] = *--p;
+ } while (p > match);
+ stack = 0;
+
+ /* loop for next code with final and prev as the last match, rem and
+ left provide the first 0..7 bits of the next code, end is the last
+ valid table entry */
+ }
+}
+
+/* Decompress a gzip file from infile to outfile. strm is assumed to have been
+ successfully initialized with inflateBackInit(). The input file may consist
+ of a series of gzip streams, in which case all of them will be decompressed
+ to the output file. If outfile is -1, then the gzip stream(s) integrity is
+ checked and nothing is written.
+
+ The return value is a zlib error code: Z_MEM_ERROR if out of memory,
+ Z_DATA_ERROR if the header or the compressed data is invalid, or if the
+ trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends
+ prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip
+ stream) follows a valid gzip stream.
+ */
+local int gunpipe(z_stream *strm, int infile, int outfile)
+{
+ int ret, first, last;
+ unsigned have, flags, len;
+ z_const unsigned char *next = NULL;
+ struct ind ind, *indp;
+ struct outd outd;
+
+ /* setup input buffer */
+ ind.infile = infile;
+ ind.inbuf = inbuf;
+ indp = &ind;
+
+ /* decompress concatenated gzip streams */
+ have = 0; /* no input data read in yet */
+ first = 1; /* looking for first gzip header */
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
+ for (;;) {
+ /* look for the two magic header bytes for a gzip stream */
+ if (NEXT() == -1) {
+ ret = Z_OK;
+ break; /* empty gzip stream is ok */
+ }
+ if (last != 31 || (NEXT() != 139 && last != 157)) {
+ strm->msg = (char *)"incorrect header check";
+ ret = first ? Z_DATA_ERROR : Z_ERRNO;
+ break; /* not a gzip or compress header */
+ }
+ first = 0; /* next non-header is junk */
+
+ /* process a compress (LZW) file -- can't be concatenated after this */
+ if (last == 157) {
+ ret = lunpipe(have, next, indp, outfile, strm);
+ break;
+ }
+
+ /* process remainder of gzip header */
+ ret = Z_BUF_ERROR;
+ if (NEXT() != 8) { /* only deflate method allowed */
+ if (last == -1) break;
+ strm->msg = (char *)"unknown compression method";
+ ret = Z_DATA_ERROR;
+ break;
+ }
+ flags = NEXT(); /* header flags */
+ NEXT(); /* discard mod time, xflgs, os */
+ NEXT();
+ NEXT();
+ NEXT();
+ NEXT();
+ NEXT();
+ if (last == -1) break;
+ if (flags & 0xe0) {
+ strm->msg = (char *)"unknown header flags set";
+ ret = Z_DATA_ERROR;
+ break;
+ }
+ if (flags & 4) { /* extra field */
+ len = NEXT();
+ len += (unsigned)(NEXT()) << 8;
+ if (last == -1) break;
+ while (len > have) {
+ len -= have;
+ have = 0;
+ if (NEXT() == -1) break;
+ len--;
+ }
+ if (last == -1) break;
+ have -= len;
+ next += len;
+ }
+ if (flags & 8) /* file name */
+ while (NEXT() != 0 && last != -1)
+ ;
+ if (flags & 16) /* comment */
+ while (NEXT() != 0 && last != -1)
+ ;
+ if (flags & 2) { /* header crc */
+ NEXT();
+ NEXT();
+ }
+ if (last == -1) break;
+
+ /* set up output */
+ outd.outfile = outfile;
+ outd.check = 1;
+ outd.crc = crc32(0L, Z_NULL, 0);
+ outd.total = 0;
+
+ /* decompress data to output */
+ strm->next_in = next;
+ strm->avail_in = have;
+ ret = inflateBack(strm, in, indp, out, &outd);
+ if (ret != Z_STREAM_END) break;
+ next = strm->next_in;
+ have = strm->avail_in;
+ strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */
+
+ /* check trailer */
+ ret = Z_BUF_ERROR;
+ if (NEXT() != (int)(outd.crc & 0xff) ||
+ NEXT() != (int)((outd.crc >> 8) & 0xff) ||
+ NEXT() != (int)((outd.crc >> 16) & 0xff) ||
+ NEXT() != (int)((outd.crc >> 24) & 0xff)) {
+ /* crc error */
+ if (last != -1) {
+ strm->msg = (char *)"incorrect data check";
+ ret = Z_DATA_ERROR;
+ }
+ break;
+ }
+ if (NEXT() != (int)(outd.total & 0xff) ||
+ NEXT() != (int)((outd.total >> 8) & 0xff) ||
+ NEXT() != (int)((outd.total >> 16) & 0xff) ||
+ NEXT() != (int)((outd.total >> 24) & 0xff)) {
+ /* length error */
+ if (last != -1) {
+ strm->msg = (char *)"incorrect length check";
+ ret = Z_DATA_ERROR;
+ }
+ break;
+ }
+
+ /* go back and look for another gzip stream */
+ }
+
+ /* clean up and return */
+ return ret;
+}
+
+/* Copy file attributes, from -> to, as best we can. This is best effort, so
+ no errors are reported. The mode bits, including suid, sgid, and the sticky
+ bit are copied (if allowed), the owner's user id and group id are copied
+ (again if allowed), and the access and modify times are copied. */
+local void copymeta(char *from, char *to)
+{
+ struct stat was;
+ struct utimbuf when;
+
+ /* get all of from's Unix meta data, return if not a regular file */
+ if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG)
+ return;
+
+ /* set to's mode bits, ignore errors */
+ (void)chmod(to, was.st_mode & 07777);
+
+ /* copy owner's user and group, ignore errors */
+ (void)chown(to, was.st_uid, was.st_gid);
+
+ /* copy access and modify times, ignore errors */
+ when.actime = was.st_atime;
+ when.modtime = was.st_mtime;
+ (void)utime(to, &when);
+}
+
+/* Decompress the file inname to the file outnname, of if test is true, just
+ decompress without writing and check the gzip trailer for integrity. If
+ inname is NULL or an empty string, read from stdin. If outname is NULL or
+ an empty string, write to stdout. strm is a pre-initialized inflateBack
+ structure. When appropriate, copy the file attributes from inname to
+ outname.
+
+ gunzip() returns 1 if there is an out-of-memory error or an unexpected
+ return code from gunpipe(). Otherwise it returns 0.
+ */
+local int gunzip(z_stream *strm, char *inname, char *outname, int test)
+{
+ int ret;
+ int infile, outfile;
+
+ /* open files */
+ if (inname == NULL || *inname == 0) {
+ inname = "-";
+ infile = 0; /* stdin */
+ }
+ else {
+ infile = open(inname, O_RDONLY, 0);
+ if (infile == -1) {
+ fprintf(stderr, "gun cannot open %s\n", inname);
+ return 0;
+ }
+ }
+ if (test)
+ outfile = -1;
+ else if (outname == NULL || *outname == 0) {
+ outname = "-";
+ outfile = 1; /* stdout */
+ }
+ else {
+ outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666);
+ if (outfile == -1) {
+ close(infile);
+ fprintf(stderr, "gun cannot create %s\n", outname);
+ return 0;
+ }
+ }
+ errno = 0;
+
+ /* decompress */
+ ret = gunpipe(strm, infile, outfile);
+ if (outfile > 2) close(outfile);
+ if (infile > 2) close(infile);
+
+ /* interpret result */
+ switch (ret) {
+ case Z_OK:
+ case Z_ERRNO:
+ if (infile > 2 && outfile > 2) {
+ copymeta(inname, outname); /* copy attributes */
+ unlink(inname);
+ }
+ if (ret == Z_ERRNO)
+ fprintf(stderr, "gun warning: trailing garbage ignored in %s\n",
+ inname);
+ break;
+ case Z_DATA_ERROR:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg);
+ break;
+ case Z_MEM_ERROR:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ return 1;
+ case Z_BUF_ERROR:
+ if (outfile > 2) unlink(outname);
+ if (strm->next_in != Z_NULL) {
+ fprintf(stderr, "gun write error on %s: %s\n",
+ outname, strerror(errno));
+ }
+ else if (errno) {
+ fprintf(stderr, "gun read error on %s: %s\n",
+ inname, strerror(errno));
+ }
+ else {
+ fprintf(stderr, "gun unexpected end of file on %s\n",
+ inname);
+ }
+ break;
+ default:
+ if (outfile > 2) unlink(outname);
+ fprintf(stderr, "gun internal error--aborting\n");
+ return 1;
+ }
+ return 0;
+}
+
+/* Process the gun command line arguments. See the command syntax near the
+ beginning of this source file. */
+int main(int argc, char **argv)
+{
+ int ret, len, test;
+ char *outname;
+ unsigned char *window;
+ z_stream strm;
+
+ /* initialize inflateBack state for repeated use */
+ window = match; /* reuse LZW match buffer */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = inflateBackInit(&strm, 15, window);
+ if (ret != Z_OK) {
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ return 1;
+ }
+
+ /* decompress each file to the same name with the suffix removed */
+ argc--;
+ argv++;
+ test = 0;
+ if (argc && strcmp(*argv, "-h") == 0) {
+ fprintf(stderr, "gun 1.6 (17 Jan 2010)\n");
+ fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n");
+ fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n");
+ return 0;
+ }
+ if (argc && strcmp(*argv, "-t") == 0) {
+ test = 1;
+ argc--;
+ argv++;
+ }
+ if (argc)
+ do {
+ if (test)
+ outname = NULL;
+ else {
+ len = (int)strlen(*argv);
+ if (strcmp(*argv + len - 3, ".gz") == 0 ||
+ strcmp(*argv + len - 3, "-gz") == 0)
+ len -= 3;
+ else if (strcmp(*argv + len - 2, ".z") == 0 ||
+ strcmp(*argv + len - 2, "-z") == 0 ||
+ strcmp(*argv + len - 2, "_z") == 0 ||
+ strcmp(*argv + len - 2, ".Z") == 0)
+ len -= 2;
+ else {
+ fprintf(stderr, "gun error: no gz type on %s--skipping\n",
+ *argv);
+ continue;
+ }
+ outname = malloc(len + 1);
+ if (outname == NULL) {
+ fprintf(stderr, "gun out of memory error--aborting\n");
+ ret = 1;
+ break;
+ }
+ memcpy(outname, *argv, len);
+ outname[len] = 0;
+ }
+ ret = gunzip(&strm, *argv, outname, test);
+ if (outname != NULL) free(outname);
+ if (ret) break;
+ } while (argv++, --argc);
+ else
+ ret = gunzip(&strm, NULL, NULL, test);
+
+ /* clean up */
+ inflateBackEnd(&strm);
+ return ret;
+}
diff --git a/compat/zlib/examples/gzappend.c b/compat/zlib/examples/gzappend.c
new file mode 100644
index 0000000..662dec3
--- /dev/null
+++ b/compat/zlib/examples/gzappend.c
@@ -0,0 +1,504 @@
+/* gzappend -- command to append to a gzip file
+
+ Copyright (C) 2003, 2012 Mark Adler, all rights reserved
+ version 1.2, 11 Oct 2012
+
+ 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
+ */
+
+/*
+ * Change history:
+ *
+ * 1.0 19 Oct 2003 - First version
+ * 1.1 4 Nov 2003 - Expand and clarify some comments and notes
+ * - Add version and copyright to help
+ * - Send help to stdout instead of stderr
+ * - Add some preemptive typecasts
+ * - Add L to constants in lseek() calls
+ * - Remove some debugging information in error messages
+ * - Use new data_type definition for zlib 1.2.1
+ * - Simplfy and unify file operations
+ * - Finish off gzip file in gztack()
+ * - Use deflatePrime() instead of adding empty blocks
+ * - Keep gzip file clean on appended file read errors
+ * - Use in-place rotate instead of auxiliary buffer
+ * (Why you ask? Because it was fun to write!)
+ * 1.2 11 Oct 2012 - Fix for proper z_const usage
+ * - Check for input buffer malloc failure
+ */
+
+/*
+ gzappend takes a gzip file and appends to it, compressing files from the
+ command line or data from stdin. The gzip file is written to directly, to
+ avoid copying that file, in case it's large. Note that this results in the
+ unfriendly behavior that if gzappend fails, the gzip file is corrupted.
+
+ This program was written to illustrate the use of the new Z_BLOCK option of
+ zlib 1.2.x's inflate() function. This option returns from inflate() at each
+ block boundary to facilitate locating and modifying the last block bit at
+ the start of the final deflate block. Also whether using Z_BLOCK or not,
+ another required feature of zlib 1.2.x is that inflate() now provides the
+ number of unusued bits in the last input byte used. gzappend will not work
+ with versions of zlib earlier than 1.2.1.
+
+ gzappend first decompresses the gzip file internally, discarding all but
+ the last 32K of uncompressed data, and noting the location of the last block
+ bit and the number of unused bits in the last byte of the compressed data.
+ The gzip trailer containing the CRC-32 and length of the uncompressed data
+ is verified. This trailer will be later overwritten.
+
+ Then the last block bit is cleared by seeking back in the file and rewriting
+ the byte that contains it. Seeking forward, the last byte of the compressed
+ data is saved along with the number of unused bits to initialize deflate.
+
+ A deflate process is initialized, using the last 32K of the uncompressed
+ data from the gzip file to initialize the dictionary. If the total
+ uncompressed data was less than 32K, then all of it is used to initialize
+ the dictionary. The deflate output bit buffer is also initialized with the
+ last bits from the original deflate stream. From here on, the data to
+ append is simply compressed using deflate, and written to the gzip file.
+ When that is complete, the new CRC-32 and uncompressed length are written
+ as the trailer of the gzip file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include "zlib.h"
+
+#define local static
+#define LGCHUNK 14
+#define CHUNK (1U << LGCHUNK)
+#define DSIZE 32768U
+
+/* print an error message and terminate with extreme prejudice */
+local void bye(char *msg1, char *msg2)
+{
+ fprintf(stderr, "gzappend error: %s%s\n", msg1, msg2);
+ exit(1);
+}
+
+/* return the greatest common divisor of a and b using Euclid's algorithm,
+ modified to be fast when one argument much greater than the other, and
+ coded to avoid unnecessary swapping */
+local unsigned gcd(unsigned a, unsigned b)
+{
+ unsigned c;
+
+ while (a && b)
+ if (a > b) {
+ c = b;
+ while (a - c >= c)
+ c <<= 1;
+ a -= c;
+ }
+ else {
+ c = a;
+ while (b - c >= c)
+ c <<= 1;
+ b -= c;
+ }
+ return a + b;
+}
+
+/* rotate list[0..len-1] left by rot positions, in place */
+local void rotate(unsigned char *list, unsigned len, unsigned rot)
+{
+ unsigned char tmp;
+ unsigned cycles;
+ unsigned char *start, *last, *to, *from;
+
+ /* normalize rot and handle degenerate cases */
+ if (len < 2) return;
+ if (rot >= len) rot %= len;
+ if (rot == 0) return;
+
+ /* pointer to last entry in list */
+ last = list + (len - 1);
+
+ /* do simple left shift by one */
+ if (rot == 1) {
+ tmp = *list;
+ memcpy(list, list + 1, len - 1);
+ *last = tmp;
+ return;
+ }
+
+ /* do simple right shift by one */
+ if (rot == len - 1) {
+ tmp = *last;
+ memmove(list + 1, list, len - 1);
+ *list = tmp;
+ return;
+ }
+
+ /* otherwise do rotate as a set of cycles in place */
+ cycles = gcd(len, rot); /* number of cycles */
+ do {
+ start = from = list + cycles; /* start index is arbitrary */
+ tmp = *from; /* save entry to be overwritten */
+ for (;;) {
+ to = from; /* next step in cycle */
+ from += rot; /* go right rot positions */
+ if (from > last) from -= len; /* (pointer better not wrap) */
+ if (from == start) break; /* all but one shifted */
+ *to = *from; /* shift left */
+ }
+ *to = tmp; /* complete the circle */
+ } while (--cycles);
+}
+
+/* structure for gzip file read operations */
+typedef struct {
+ int fd; /* file descriptor */
+ int size; /* 1 << size is bytes in buf */
+ unsigned left; /* bytes available at next */
+ unsigned char *buf; /* buffer */
+ z_const unsigned char *next; /* next byte in buffer */
+ char *name; /* file name for error messages */
+} file;
+
+/* reload buffer */
+local int readin(file *in)
+{
+ int len;
+
+ len = read(in->fd, in->buf, 1 << in->size);
+ if (len == -1) bye("error reading ", in->name);
+ in->left = (unsigned)len;
+ in->next = in->buf;
+ return len;
+}
+
+/* read from file in, exit if end-of-file */
+local int readmore(file *in)
+{
+ if (readin(in) == 0) bye("unexpected end of ", in->name);
+ return 0;
+}
+
+#define read1(in) (in->left == 0 ? readmore(in) : 0, \
+ in->left--, *(in->next)++)
+
+/* skip over n bytes of in */
+local void skip(file *in, unsigned n)
+{
+ unsigned bypass;
+
+ if (n > in->left) {
+ n -= in->left;
+ bypass = n & ~((1U << in->size) - 1);
+ if (bypass) {
+ if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1)
+ bye("seeking ", in->name);
+ n -= bypass;
+ }
+ readmore(in);
+ if (n > in->left)
+ bye("unexpected end of ", in->name);
+ }
+ in->left -= n;
+ in->next += n;
+}
+
+/* read a four-byte unsigned integer, little-endian, from in */
+unsigned long read4(file *in)
+{
+ unsigned long val;
+
+ val = read1(in);
+ val += (unsigned)read1(in) << 8;
+ val += (unsigned long)read1(in) << 16;
+ val += (unsigned long)read1(in) << 24;
+ return val;
+}
+
+/* skip over gzip header */
+local void gzheader(file *in)
+{
+ int flags;
+ unsigned n;
+
+ if (read1(in) != 31 || read1(in) != 139) bye(in->name, " not a gzip file");
+ if (read1(in) != 8) bye("unknown compression method in", in->name);
+ flags = read1(in);
+ if (flags & 0xe0) bye("unknown header flags set in", in->name);
+ skip(in, 6);
+ if (flags & 4) {
+ n = read1(in);
+ n += (unsigned)(read1(in)) << 8;
+ skip(in, n);
+ }
+ if (flags & 8) while (read1(in) != 0) ;
+ if (flags & 16) while (read1(in) != 0) ;
+ if (flags & 2) skip(in, 2);
+}
+
+/* decompress gzip file "name", return strm with a deflate stream ready to
+ continue compression of the data in the gzip file, and return a file
+ descriptor pointing to where to write the compressed data -- the deflate
+ stream is initialized to compress using level "level" */
+local int gzscan(char *name, z_stream *strm, int level)
+{
+ int ret, lastbit, left, full;
+ unsigned have;
+ unsigned long crc, tot;
+ unsigned char *window;
+ off_t lastoff, end;
+ file gz;
+
+ /* open gzip file */
+ gz.name = name;
+ gz.fd = open(name, O_RDWR, 0);
+ if (gz.fd == -1) bye("cannot open ", name);
+ gz.buf = malloc(CHUNK);
+ if (gz.buf == NULL) bye("out of memory", "");
+ gz.size = LGCHUNK;
+ gz.left = 0;
+
+ /* skip gzip header */
+ gzheader(&gz);
+
+ /* prepare to decompress */
+ window = malloc(DSIZE);
+ if (window == NULL) bye("out of memory", "");
+ strm->zalloc = Z_NULL;
+ strm->zfree = Z_NULL;
+ strm->opaque = Z_NULL;
+ ret = inflateInit2(strm, -15);
+ if (ret != Z_OK) bye("out of memory", " or library mismatch");
+
+ /* decompress the deflate stream, saving append information */
+ lastbit = 0;
+ lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+ left = 0;
+ strm->avail_in = gz.left;
+ strm->next_in = gz.next;
+ crc = crc32(0L, Z_NULL, 0);
+ have = full = 0;
+ do {
+ /* if needed, get more input */
+ if (strm->avail_in == 0) {
+ readmore(&gz);
+ strm->avail_in = gz.left;
+ strm->next_in = gz.next;
+ }
+
+ /* set up output to next available section of sliding window */
+ strm->avail_out = DSIZE - have;
+ strm->next_out = window + have;
+
+ /* inflate and check for errors */
+ ret = inflate(strm, Z_BLOCK);
+ if (ret == Z_STREAM_ERROR) bye("internal stream error!", "");
+ if (ret == Z_MEM_ERROR) bye("out of memory", "");
+ if (ret == Z_DATA_ERROR)
+ bye("invalid compressed data--format violated in", name);
+
+ /* update crc and sliding window pointer */
+ crc = crc32(crc, window + have, DSIZE - have - strm->avail_out);
+ if (strm->avail_out)
+ have = DSIZE - strm->avail_out;
+ else {
+ have = 0;
+ full = 1;
+ }
+
+ /* process end of block */
+ if (strm->data_type & 128) {
+ if (strm->data_type & 64)
+ left = strm->data_type & 0x1f;
+ else {
+ lastbit = strm->data_type & 0x1f;
+ lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in;
+ }
+ }
+ } while (ret != Z_STREAM_END);
+ inflateEnd(strm);
+ gz.left = strm->avail_in;
+ gz.next = strm->next_in;
+
+ /* save the location of the end of the compressed data */
+ end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left;
+
+ /* check gzip trailer and save total for deflate */
+ if (crc != read4(&gz))
+ bye("invalid compressed data--crc mismatch in ", name);
+ tot = strm->total_out;
+ if ((tot & 0xffffffffUL) != read4(&gz))
+ bye("invalid compressed data--length mismatch in", name);
+
+ /* if not at end of file, warn */
+ if (gz.left || readin(&gz))
+ fprintf(stderr,
+ "gzappend warning: junk at end of gzip file overwritten\n");
+
+ /* clear last block bit */
+ lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET);
+ if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+ *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7)));
+ lseek(gz.fd, -1L, SEEK_CUR);
+ if (write(gz.fd, gz.buf, 1) != 1) bye("writing after seek to ", name);
+
+ /* if window wrapped, build dictionary from window by rotating */
+ if (full) {
+ rotate(window, DSIZE, have);
+ have = DSIZE;
+ }
+
+ /* set up deflate stream with window, crc, total_in, and leftover bits */
+ ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY);
+ if (ret != Z_OK) bye("out of memory", "");
+ deflateSetDictionary(strm, window, have);
+ strm->adler = crc;
+ strm->total_in = tot;
+ if (left) {
+ lseek(gz.fd, --end, SEEK_SET);
+ if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name);
+ deflatePrime(strm, 8 - left, *gz.buf);
+ }
+ lseek(gz.fd, end, SEEK_SET);
+
+ /* clean up and return */
+ free(window);
+ free(gz.buf);
+ return gz.fd;
+}
+
+/* append file "name" to gzip file gd using deflate stream strm -- if last
+ is true, then finish off the deflate stream at the end */
+local void gztack(char *name, int gd, z_stream *strm, int last)
+{
+ int fd, len, ret;
+ unsigned left;
+ unsigned char *in, *out;
+
+ /* open file to compress and append */
+ fd = 0;
+ if (name != NULL) {
+ fd = open(name, O_RDONLY, 0);
+ if (fd == -1)
+ fprintf(stderr, "gzappend warning: %s not found, skipping ...\n",
+ name);
+ }
+
+ /* allocate buffers */
+ in = malloc(CHUNK);
+ out = malloc(CHUNK);
+ if (in == NULL || out == NULL) bye("out of memory", "");
+
+ /* compress input file and append to gzip file */
+ do {
+ /* get more input */
+ len = read(fd, in, CHUNK);
+ if (len == -1) {
+ fprintf(stderr,
+ "gzappend warning: error reading %s, skipping rest ...\n",
+ name);
+ len = 0;
+ }
+ strm->avail_in = (unsigned)len;
+ strm->next_in = in;
+ if (len) strm->adler = crc32(strm->adler, in, (unsigned)len);
+
+ /* compress and write all available output */
+ do {
+ strm->avail_out = CHUNK;
+ strm->next_out = out;
+ ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH);
+ left = CHUNK - strm->avail_out;
+ while (left) {
+ len = write(gd, out + CHUNK - strm->avail_out - left, left);
+ if (len == -1) bye("writing gzip file", "");
+ left -= (unsigned)len;
+ }
+ } while (strm->avail_out == 0 && ret != Z_STREAM_END);
+ } while (len != 0);
+
+ /* write trailer after last entry */
+ if (last) {
+ deflateEnd(strm);
+ out[0] = (unsigned char)(strm->adler);
+ out[1] = (unsigned char)(strm->adler >> 8);
+ out[2] = (unsigned char)(strm->adler >> 16);
+ out[3] = (unsigned char)(strm->adler >> 24);
+ out[4] = (unsigned char)(strm->total_in);
+ out[5] = (unsigned char)(strm->total_in >> 8);
+ out[6] = (unsigned char)(strm->total_in >> 16);
+ out[7] = (unsigned char)(strm->total_in >> 24);
+ len = 8;
+ do {
+ ret = write(gd, out + 8 - len, len);
+ if (ret == -1) bye("writing gzip file", "");
+ len -= ret;
+ } while (len);
+ close(gd);
+ }
+
+ /* clean up and return */
+ free(out);
+ free(in);
+ if (fd > 0) close(fd);
+}
+
+/* process the compression level option if present, scan the gzip file, and
+ append the specified files, or append the data from stdin if no other file
+ names are provided on the command line -- the gzip file must be writable
+ and seekable */
+int main(int argc, char **argv)
+{
+ int gd, level;
+ z_stream strm;
+
+ /* ignore command name */
+ argc--; argv++;
+
+ /* provide usage if no arguments */
+ if (*argv == NULL) {
+ printf(
+ "gzappend 1.2 (11 Oct 2012) Copyright (C) 2003, 2012 Mark Adler\n"
+ );
+ printf(
+ "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n");
+ return 0;
+ }
+
+ /* set compression level */
+ level = Z_DEFAULT_COMPRESSION;
+ if (argv[0][0] == '-') {
+ if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0)
+ bye("invalid compression level", "");
+ level = argv[0][1] - '0';
+ if (*++argv == NULL) bye("no gzip file name after options", "");
+ }
+
+ /* prepare to append to gzip file */
+ gd = gzscan(*argv++, &strm, level);
+
+ /* append files on command line, or from stdin if none */
+ if (*argv == NULL)
+ gztack(NULL, gd, &strm, 1);
+ else
+ do {
+ gztack(*argv, gd, &strm, argv[1] == NULL);
+ } while (*++argv != NULL);
+ return 0;
+}
diff --git a/compat/zlib/examples/gzjoin.c b/compat/zlib/examples/gzjoin.c
new file mode 100644
index 0000000..89e8098
--- /dev/null
+++ b/compat/zlib/examples/gzjoin.c
@@ -0,0 +1,449 @@
+/* gzjoin -- command to join gzip files into one gzip file
+
+ Copyright (C) 2004, 2005, 2012 Mark Adler, all rights reserved
+ version 1.2, 14 Aug 2012
+
+ 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
+ */
+
+/*
+ * Change history:
+ *
+ * 1.0 11 Dec 2004 - First version
+ * 1.1 12 Jun 2005 - Changed ssize_t to long for portability
+ * 1.2 14 Aug 2012 - Clean up for z_const usage
+ */
+
+/*
+ gzjoin takes one or more gzip files on the command line and writes out a
+ single gzip file that will uncompress to the concatenation of the
+ uncompressed data from the individual gzip files. gzjoin does this without
+ having to recompress any of the data and without having to calculate a new
+ crc32 for the concatenated uncompressed data. gzjoin does however have to
+ decompress all of the input data in order to find the bits in the compressed
+ data that need to be modified to concatenate the streams.
+
+ gzjoin does not do an integrity check on the input gzip files other than
+ checking the gzip header and decompressing the compressed data. They are
+ otherwise assumed to be complete and correct.
+
+ Each joint between gzip files removes at least 18 bytes of previous trailer
+ and subsequent header, and inserts an average of about three bytes to the
+ compressed data in order to connect the streams. The output gzip file
+ has a minimal ten-byte gzip header with no file name or modification time.
+
+ This program was written to illustrate the use of the Z_BLOCK option of
+ inflate() and the crc32_combine() function. gzjoin will not compile with
+ versions of zlib earlier than 1.2.3.
+ */
+
+#include <stdio.h> /* fputs(), fprintf(), fwrite(), putc() */
+#include <stdlib.h> /* exit(), malloc(), free() */
+#include <fcntl.h> /* open() */
+#include <unistd.h> /* close(), read(), lseek() */
+#include "zlib.h"
+ /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */
+
+#define local static
+
+/* exit with an error (return a value to allow use in an expression) */
+local int bail(char *why1, char *why2)
+{
+ fprintf(stderr, "gzjoin error: %s%s, output incomplete\n", why1, why2);
+ exit(1);
+ return 0;
+}
+
+/* -- simple buffered file input with access to the buffer -- */
+
+#define CHUNK 32768 /* must be a power of two and fit in unsigned */
+
+/* bin buffered input file type */
+typedef struct {
+ char *name; /* name of file for error messages */
+ int fd; /* file descriptor */
+ unsigned left; /* bytes remaining at next */
+ unsigned char *next; /* next byte to read */
+ unsigned char *buf; /* allocated buffer of length CHUNK */
+} bin;
+
+/* close a buffered file and free allocated memory */
+local void bclose(bin *in)
+{
+ if (in != NULL) {
+ if (in->fd != -1)
+ close(in->fd);
+ if (in->buf != NULL)
+ free(in->buf);
+ free(in);
+ }
+}
+
+/* open a buffered file for input, return a pointer to type bin, or NULL on
+ failure */
+local bin *bopen(char *name)
+{
+ bin *in;
+
+ in = malloc(sizeof(bin));
+ if (in == NULL)
+ return NULL;
+ in->buf = malloc(CHUNK);
+ in->fd = open(name, O_RDONLY, 0);
+ if (in->buf == NULL || in->fd == -1) {
+ bclose(in);
+ return NULL;
+ }
+ in->left = 0;
+ in->next = in->buf;
+ in->name = name;
+ return in;
+}
+
+/* load buffer from file, return -1 on read error, 0 or 1 on success, with
+ 1 indicating that end-of-file was reached */
+local int bload(bin *in)
+{
+ long len;
+
+ if (in == NULL)
+ return -1;
+ if (in->left != 0)
+ return 0;
+ in->next = in->buf;
+ do {
+ len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left);
+ if (len < 0)
+ return -1;
+ in->left += (unsigned)len;
+ } while (len != 0 && in->left < CHUNK);
+ return len == 0 ? 1 : 0;
+}
+
+/* get a byte from the file, bail if end of file */
+#define bget(in) (in->left ? 0 : bload(in), \
+ in->left ? (in->left--, *(in->next)++) : \
+ bail("unexpected end of file on ", in->name))
+
+/* get a four-byte little-endian unsigned integer from file */
+local unsigned long bget4(bin *in)
+{
+ unsigned long val;
+
+ val = bget(in);
+ val += (unsigned long)(bget(in)) << 8;
+ val += (unsigned long)(bget(in)) << 16;
+ val += (unsigned long)(bget(in)) << 24;
+ return val;
+}
+
+/* skip bytes in file */
+local void bskip(bin *in, unsigned skip)
+{
+ /* check pointer */
+ if (in == NULL)
+ return;
+
+ /* easy case -- skip bytes in buffer */
+ if (skip <= in->left) {
+ in->left -= skip;
+ in->next += skip;
+ return;
+ }
+
+ /* skip what's in buffer, discard buffer contents */
+ skip -= in->left;
+ in->left = 0;
+
+ /* seek past multiples of CHUNK bytes */
+ if (skip > CHUNK) {
+ unsigned left;
+
+ left = skip & (CHUNK - 1);
+ if (left == 0) {
+ /* exact number of chunks: seek all the way minus one byte to check
+ for end-of-file with a read */
+ lseek(in->fd, skip - 1, SEEK_CUR);
+ if (read(in->fd, in->buf, 1) != 1)
+ bail("unexpected end of file on ", in->name);
+ return;
+ }
+
+ /* skip the integral chunks, update skip with remainder */
+ lseek(in->fd, skip - left, SEEK_CUR);
+ skip = left;
+ }
+
+ /* read more input and skip remainder */
+ bload(in);
+ if (skip > in->left)
+ bail("unexpected end of file on ", in->name);
+ in->left -= skip;
+ in->next += skip;
+}
+
+/* -- end of buffered input functions -- */
+
+/* skip the gzip header from file in */
+local void gzhead(bin *in)
+{
+ int flags;
+
+ /* verify gzip magic header and compression method */
+ if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8)
+ bail(in->name, " is not a valid gzip file");
+
+ /* get and verify flags */
+ flags = bget(in);
+ if ((flags & 0xe0) != 0)
+ bail("unknown reserved bits set in ", in->name);
+
+ /* skip modification time, extra flags, and os */
+ bskip(in, 6);
+
+ /* skip extra field if present */
+ if (flags & 4) {
+ unsigned len;
+
+ len = bget(in);
+ len += (unsigned)(bget(in)) << 8;
+ bskip(in, len);
+ }
+
+ /* skip file name if present */
+ if (flags & 8)
+ while (bget(in) != 0)
+ ;
+
+ /* skip comment if present */
+ if (flags & 16)
+ while (bget(in) != 0)
+ ;
+
+ /* skip header crc if present */
+ if (flags & 2)
+ bskip(in, 2);
+}
+
+/* write a four-byte little-endian unsigned integer to out */
+local void put4(unsigned long val, FILE *out)
+{
+ putc(val & 0xff, out);
+ putc((val >> 8) & 0xff, out);
+ putc((val >> 16) & 0xff, out);
+ putc((val >> 24) & 0xff, out);
+}
+
+/* Load up zlib stream from buffered input, bail if end of file */
+local void zpull(z_streamp strm, bin *in)
+{
+ if (in->left == 0)
+ bload(in);
+ if (in->left == 0)
+ bail("unexpected end of file on ", in->name);
+ strm->avail_in = in->left;
+ strm->next_in = in->next;
+}
+
+/* Write header for gzip file to out and initialize trailer. */
+local void gzinit(unsigned long *crc, unsigned long *tot, FILE *out)
+{
+ fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out);
+ *crc = crc32(0L, Z_NULL, 0);
+ *tot = 0;
+}
+
+/* Copy the compressed data from name, zeroing the last block bit of the last
+ block if clr is true, and adding empty blocks as needed to get to a byte
+ boundary. If clr is false, then the last block becomes the last block of
+ the output, and the gzip trailer is written. crc and tot maintains the
+ crc and length (modulo 2^32) of the output for the trailer. The resulting
+ gzip file is written to out. gzinit() must be called before the first call
+ of gzcopy() to write the gzip header and to initialize crc and tot. */
+local void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot,
+ FILE *out)
+{
+ int ret; /* return value from zlib functions */
+ int pos; /* where the "last block" bit is in byte */
+ int last; /* true if processing the last block */
+ bin *in; /* buffered input file */
+ unsigned char *start; /* start of compressed data in buffer */
+ unsigned char *junk; /* buffer for uncompressed data -- discarded */
+ z_off_t len; /* length of uncompressed data (support > 4 GB) */
+ z_stream strm; /* zlib inflate stream */
+
+ /* open gzip file and skip header */
+ in = bopen(name);
+ if (in == NULL)
+ bail("could not open ", name);
+ gzhead(in);
+
+ /* allocate buffer for uncompressed data and initialize raw inflate
+ stream */
+ junk = malloc(CHUNK);
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, -15);
+ if (junk == NULL || ret != Z_OK)
+ bail("out of memory", "");
+
+ /* inflate and copy compressed data, clear last-block bit if requested */
+ len = 0;
+ zpull(&strm, in);
+ start = in->next;
+ last = start[0] & 1;
+ if (last && clr)
+ start[0] &= ~1;
+ strm.avail_out = 0;
+ for (;;) {
+ /* if input used and output done, write used input and get more */
+ if (strm.avail_in == 0 && strm.avail_out != 0) {
+ fwrite(start, 1, strm.next_in - start, out);
+ start = in->buf;
+ in->left = 0;
+ zpull(&strm, in);
+ }
+
+ /* decompress -- return early when end-of-block reached */
+ strm.avail_out = CHUNK;
+ strm.next_out = junk;
+ ret = inflate(&strm, Z_BLOCK);
+ switch (ret) {
+ case Z_MEM_ERROR:
+ bail("out of memory", "");
+ case Z_DATA_ERROR:
+ bail("invalid compressed data in ", in->name);
+ }
+
+ /* update length of uncompressed data */
+ len += CHUNK - strm.avail_out;
+
+ /* check for block boundary (only get this when block copied out) */
+ if (strm.data_type & 128) {
+ /* if that was the last block, then done */
+ if (last)
+ break;
+
+ /* number of unused bits in last byte */
+ pos = strm.data_type & 7;
+
+ /* find the next last-block bit */
+ if (pos != 0) {
+ /* next last-block bit is in last used byte */
+ pos = 0x100 >> pos;
+ last = strm.next_in[-1] & pos;
+ if (last && clr)
+ in->buf[strm.next_in - in->buf - 1] &= ~pos;
+ }
+ else {
+ /* next last-block bit is in next unused byte */
+ if (strm.avail_in == 0) {
+ /* don't have that byte yet -- get it */
+ fwrite(start, 1, strm.next_in - start, out);
+ start = in->buf;
+ in->left = 0;
+ zpull(&strm, in);
+ }
+ last = strm.next_in[0] & 1;
+ if (last && clr)
+ in->buf[strm.next_in - in->buf] &= ~1;
+ }
+ }
+ }
+
+ /* update buffer with unused input */
+ in->left = strm.avail_in;
+ in->next = in->buf + (strm.next_in - in->buf);
+
+ /* copy used input, write empty blocks to get to byte boundary */
+ pos = strm.data_type & 7;
+ fwrite(start, 1, in->next - start - 1, out);
+ last = in->next[-1];
+ if (pos == 0 || !clr)
+ /* already at byte boundary, or last file: write last byte */
+ putc(last, out);
+ else {
+ /* append empty blocks to last byte */
+ last &= ((0x100 >> pos) - 1); /* assure unused bits are zero */
+ if (pos & 1) {
+ /* odd -- append an empty stored block */
+ putc(last, out);
+ if (pos == 1)
+ putc(0, out); /* two more bits in block header */
+ fwrite("\0\0\xff\xff", 1, 4, out);
+ }
+ else {
+ /* even -- append 1, 2, or 3 empty fixed blocks */
+ switch (pos) {
+ case 6:
+ putc(last | 8, out);
+ last = 0;
+ case 4:
+ putc(last | 0x20, out);
+ last = 0;
+ case 2:
+ putc(last | 0x80, out);
+ putc(0, out);
+ }
+ }
+ }
+
+ /* update crc and tot */
+ *crc = crc32_combine(*crc, bget4(in), len);
+ *tot += (unsigned long)len;
+
+ /* clean up */
+ inflateEnd(&strm);
+ free(junk);
+ bclose(in);
+
+ /* write trailer if this is the last gzip file */
+ if (!clr) {
+ put4(*crc, out);
+ put4(*tot, out);
+ }
+}
+
+/* join the gzip files on the command line, write result to stdout */
+int main(int argc, char **argv)
+{
+ unsigned long crc, tot; /* running crc and total uncompressed length */
+
+ /* skip command name */
+ argc--;
+ argv++;
+
+ /* show usage if no arguments */
+ if (argc == 0) {
+ fputs("gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\n",
+ stderr);
+ return 0;
+ }
+
+ /* join gzip files on command line and write to stdout */
+ gzinit(&crc, &tot, stdout);
+ while (argc--)
+ gzcopy(*argv++, argc, &crc, &tot, stdout);
+
+ /* done */
+ return 0;
+}
diff --git a/compat/zlib/examples/gzlog.c b/compat/zlib/examples/gzlog.c
new file mode 100644
index 0000000..922f878
--- /dev/null
+++ b/compat/zlib/examples/gzlog.c
@@ -0,0 +1,1059 @@
+/*
+ * gzlog.c
+ * Copyright (C) 2004, 2008, 2012 Mark Adler, all rights reserved
+ * For conditions of distribution and use, see copyright notice in gzlog.h
+ * version 2.2, 14 Aug 2012
+ */
+
+/*
+ gzlog provides a mechanism for frequently appending short strings to a gzip
+ file that is efficient both in execution time and compression ratio. The
+ strategy is to write the short strings in an uncompressed form to the end of
+ the gzip file, only compressing when the amount of uncompressed data has
+ reached a given threshold.
+
+ gzlog also provides protection against interruptions in the process due to
+ system crashes. The status of the operation is recorded in an extra field
+ in the gzip file, and is only updated once the gzip file is brought to a
+ valid state. The last data to be appended or compressed is saved in an
+ auxiliary file, so that if the operation is interrupted, it can be completed
+ the next time an append operation is attempted.
+
+ gzlog maintains another auxiliary file with the last 32K of data from the
+ compressed portion, which is preloaded for the compression of the subsequent
+ data. This minimizes the impact to the compression ratio of appending.
+ */
+
+/*
+ Operations Concept:
+
+ Files (log name "foo"):
+ foo.gz -- gzip file with the complete log
+ foo.add -- last message to append or last data to compress
+ foo.dict -- dictionary of the last 32K of data for next compression
+ foo.temp -- temporary dictionary file for compression after this one
+ foo.lock -- lock file for reading and writing the other files
+ foo.repairs -- log file for log file recovery operations (not compressed)
+
+ gzip file structure:
+ - fixed-length (no file name) header with extra field (see below)
+ - compressed data ending initially with empty stored block
+ - uncompressed data filling out originally empty stored block and
+ subsequent stored blocks as needed (16K max each)
+ - gzip trailer
+ - no junk at end (no other gzip streams)
+
+ When appending data, the information in the first three items above plus the
+ foo.add file are sufficient to recover an interrupted append operation. The
+ extra field has the necessary information to restore the start of the last
+ stored block and determine where to append the data in the foo.add file, as
+ well as the crc and length of the gzip data before the append operation.
+
+ The foo.add file is created before the gzip file is marked for append, and
+ deleted after the gzip file is marked as complete. So if the append
+ operation is interrupted, the data to add will still be there. If due to
+ some external force, the foo.add file gets deleted between when the append
+ operation was interrupted and when recovery is attempted, the gzip file will
+ still be restored, but without the appended data.
+
+ When compressing data, the information in the first two items above plus the
+ foo.add file are sufficient to recover an interrupted compress operation.
+ The extra field has the necessary information to find the end of the
+ compressed data, and contains both the crc and length of just the compressed
+ data and of the complete set of data including the contents of the foo.add
+ file.
+
+ Again, the foo.add file is maintained during the compress operation in case
+ of an interruption. If in the unlikely event the foo.add file with the data
+ to be compressed is missing due to some external force, a gzip file with
+ just the previous compressed data will be reconstructed. In this case, all
+ of the data that was to be compressed is lost (approximately one megabyte).
+ This will not occur if all that happened was an interruption of the compress
+ operation.
+
+ The third state that is marked is the replacement of the old dictionary with
+ the new dictionary after a compress operation. Once compression is
+ complete, the gzip file is marked as being in the replace state. This
+ completes the gzip file, so an interrupt after being so marked does not
+ result in recompression. Then the dictionary file is replaced, and the gzip
+ file is marked as completed. This state prevents the possibility of
+ restarting compression with the wrong dictionary file.
+
+ All three operations are wrapped by a lock/unlock procedure. In order to
+ gain exclusive access to the log files, first a foo.lock file must be
+ exclusively created. When all operations are complete, the lock is
+ released by deleting the foo.lock file. If when attempting to create the
+ lock file, it already exists and the modify time of the lock file is more
+ than five minutes old (set by the PATIENCE define below), then the old
+ lock file is considered stale and deleted, and the exclusive creation of
+ the lock file is retried. To assure that there are no false assessments
+ of the staleness of the lock file, the operations periodically touch the
+ lock file to update the modified date.
+
+ Following is the definition of the extra field with all of the information
+ required to enable the above append and compress operations and their
+ recovery if interrupted. Multi-byte values are stored little endian
+ (consistent with the gzip format). File pointers are eight bytes long.
+ The crc's and lengths for the gzip trailer are four bytes long. (Note that
+ the length at the end of a gzip file is used for error checking only, and
+ for large files is actually the length modulo 2^32.) The stored block
+ length is two bytes long. The gzip extra field two-byte identification is
+ "ap" for append. It is assumed that writing the extra field to the file is
+ an "atomic" operation. That is, either all of the extra field is written
+ to the file, or none of it is, if the operation is interrupted right at the
+ point of updating the extra field. This is a reasonable assumption, since
+ the extra field is within the first 52 bytes of the file, which is smaller
+ than any expected block size for a mass storage device (usually 512 bytes or
+ larger).
+
+ Extra field (35 bytes):
+ - Pointer to first stored block length -- this points to the two-byte length
+ of the first stored block, which is followed by the two-byte, one's
+ complement of that length. The stored block length is preceded by the
+ three-bit header of the stored block, which is the actual start of the
+ stored block in the deflate format. See the bit offset field below.
+ - Pointer to the last stored block length. This is the same as above, but
+ for the last stored block of the uncompressed data in the gzip file.
+ Initially this is the same as the first stored block length pointer.
+ When the stored block gets to 16K (see the MAX_STORE define), then a new
+ stored block as added, at which point the last stored block length pointer
+ is different from the first stored block length pointer. When they are
+ different, the first bit of the last stored block header is eight bits, or
+ one byte back from the block length.
+ - Compressed data crc and length. This is the crc and length of the data
+ that is in the compressed portion of the deflate stream. These are used
+ only in the event that the foo.add file containing the data to compress is
+ lost after a compress operation is interrupted.
+ - Total data crc and length. This is the crc and length of all of the data
+ stored in the gzip file, compressed and uncompressed. It is used to
+ reconstruct the gzip trailer when compressing, as well as when recovering
+ interrupted operations.
+ - Final stored block length. This is used to quickly find where to append,
+ and allows the restoration of the original final stored block state when
+ an append operation is interrupted.
+ - First stored block start as the number of bits back from the final stored
+ block first length byte. This value is in the range of 3..10, and is
+ stored as the low three bits of the final byte of the extra field after
+ subtracting three (0..7). This allows the last-block bit of the stored
+ block header to be updated when a new stored block is added, for the case
+ when the first stored block and the last stored block are the same. (When
+ they are different, the numbers of bits back is known to be eight.) This
+ also allows for new compressed data to be appended to the old compressed
+ data in the compress operation, overwriting the previous first stored
+ block, or for the compressed data to be terminated and a valid gzip file
+ reconstructed on the off chance that a compression operation was
+ interrupted and the data to compress in the foo.add file was deleted.
+ - The operation in process. This is the next two bits in the last byte (the
+ bits under the mask 0x18). The are interpreted as 0: nothing in process,
+ 1: append in process, 2: compress in process, 3: replace in process.
+ - The top three bits of the last byte in the extra field are reserved and
+ are currently set to zero.
+
+ Main procedure:
+ - Exclusively create the foo.lock file using the O_CREAT and O_EXCL modes of
+ the system open() call. If the modify time of an existing lock file is
+ more than PATIENCE seconds old, then the lock file is deleted and the
+ exclusive create is retried.
+ - Load the extra field from the foo.gz file, and see if an operation was in
+ progress but not completed. If so, apply the recovery procedure below.
+ - Perform the append procedure with the provided data.
+ - If the uncompressed data in the foo.gz file is 1MB or more, apply the
+ compress procedure.
+ - Delete the foo.lock file.
+
+ Append procedure:
+ - Put what to append in the foo.add file so that the operation can be
+ restarted if this procedure is interrupted.
+ - Mark the foo.gz extra field with the append operation in progress.
+ + Restore the original last-block bit and stored block length of the last
+ stored block from the information in the extra field, in case a previous
+ append operation was interrupted.
+ - Append the provided data to the last stored block, creating new stored
+ blocks as needed and updating the stored blocks last-block bits and
+ lengths.
+ - Update the crc and length with the new data, and write the gzip trailer.
+ - Write over the extra field (with a single write operation) with the new
+ pointers, lengths, and crc's, and mark the gzip file as not in process.
+ Though there is still a foo.add file, it will be ignored since nothing
+ is in process. If a foo.add file is leftover from a previously
+ completed operation, it is truncated when writing new data to it.
+ - Delete the foo.add file.
+
+ Compress and replace procedures:
+ - Read all of the uncompressed data in the stored blocks in foo.gz and write
+ it to foo.add. Also write foo.temp with the last 32K of that data to
+ provide a dictionary for the next invocation of this procedure.
+ - Rewrite the extra field marking foo.gz with a compression in process.
+ * If there is no data provided to compress (due to a missing foo.add file
+ when recovering), reconstruct and truncate the foo.gz file to contain
+ only the previous compressed data and proceed to the step after the next
+ one. Otherwise ...
+ - Compress the data with the dictionary in foo.dict, and write to the
+ foo.gz file starting at the bit immediately following the last previously
+ compressed block. If there is no foo.dict, proceed anyway with the
+ compression at slightly reduced efficiency. (For the foo.dict file to be
+ missing requires some external failure beyond simply the interruption of
+ a compress operation.) During this process, the foo.lock file is
+ periodically touched to assure that that file is not considered stale by
+ another process before we're done. The deflation is terminated with a
+ non-last empty static block (10 bits long), that is then located and
+ written over by a last-bit-set empty stored block.
+ - Append the crc and length of the data in the gzip file (previously
+ calculated during the append operations).
+ - Write over the extra field with the updated stored block offsets, bits
+ back, crc's, and lengths, and mark foo.gz as in process for a replacement
+ of the dictionary.
+ @ Delete the foo.add file.
+ - Replace foo.dict with foo.temp.
+ - Write over the extra field, marking foo.gz as complete.
+
+ Recovery procedure:
+ - If not a replace recovery, read in the foo.add file, and provide that data
+ to the appropriate recovery below. If there is no foo.add file, provide
+ a zero data length to the recovery. In that case, the append recovery
+ restores the foo.gz to the previous compressed + uncompressed data state.
+ For the the compress recovery, a missing foo.add file results in foo.gz
+ being restored to the previous compressed-only data state.
+ - Append recovery:
+ - Pick up append at + step above
+ - Compress recovery:
+ - Pick up compress at * step above
+ - Replace recovery:
+ - Pick up compress at @ step above
+ - Log the repair with a date stamp in foo.repairs
+ */
+
+#include <sys/types.h>
+#include <stdio.h> /* rename, fopen, fprintf, fclose */
+#include <stdlib.h> /* malloc, free */
+#include <string.h> /* strlen, strrchr, strcpy, strncpy, strcmp */
+#include <fcntl.h> /* open */
+#include <unistd.h> /* lseek, read, write, close, unlink, sleep, */
+ /* ftruncate, fsync */
+#include <errno.h> /* errno */
+#include <time.h> /* time, ctime */
+#include <sys/stat.h> /* stat */
+#include <sys/time.h> /* utimes */
+#include "zlib.h" /* crc32 */
+
+#include "gzlog.h" /* header for external access */
+
+#define local static
+typedef unsigned int uint;
+typedef unsigned long ulong;
+
+/* Macro for debugging to deterministically force recovery operations */
+#ifdef DEBUG
+ #include <setjmp.h> /* longjmp */
+ jmp_buf gzlog_jump; /* where to go back to */
+ int gzlog_bail = 0; /* which point to bail at (1..8) */
+ int gzlog_count = -1; /* number of times through to wait */
+# define BAIL(n) do { if (n == gzlog_bail && gzlog_count-- == 0) \
+ longjmp(gzlog_jump, gzlog_bail); } while (0)
+#else
+# define BAIL(n)
+#endif
+
+/* how old the lock file can be in seconds before considering it stale */
+#define PATIENCE 300
+
+/* maximum stored block size in Kbytes -- must be in 1..63 */
+#define MAX_STORE 16
+
+/* number of stored Kbytes to trigger compression (must be >= 32 to allow
+ dictionary construction, and <= 204 * MAX_STORE, in order for >> 10 to
+ discard the stored block headers contribution of five bytes each) */
+#define TRIGGER 1024
+
+/* size of a deflate dictionary (this cannot be changed) */
+#define DICT 32768U
+
+/* values for the operation (2 bits) */
+#define NO_OP 0
+#define APPEND_OP 1
+#define COMPRESS_OP 2
+#define REPLACE_OP 3
+
+/* macros to extract little-endian integers from an unsigned byte buffer */
+#define PULL2(p) ((p)[0]+((uint)((p)[1])<<8))
+#define PULL4(p) (PULL2(p)+((ulong)PULL2(p+2)<<16))
+#define PULL8(p) (PULL4(p)+((off_t)PULL4(p+4)<<32))
+
+/* macros to store integers into a byte buffer in little-endian order */
+#define PUT2(p,a) do {(p)[0]=a;(p)[1]=(a)>>8;} while(0)
+#define PUT4(p,a) do {PUT2(p,a);PUT2(p+2,a>>16);} while(0)
+#define PUT8(p,a) do {PUT4(p,a);PUT4(p+4,a>>32);} while(0)
+
+/* internal structure for log information */
+#define LOGID "\106\035\172" /* should be three non-zero characters */
+struct log {
+ char id[4]; /* contains LOGID to detect inadvertent overwrites */
+ int fd; /* file descriptor for .gz file, opened read/write */
+ char *path; /* allocated path, e.g. "/var/log/foo" or "foo" */
+ char *end; /* end of path, for appending suffices such as ".gz" */
+ off_t first; /* offset of first stored block first length byte */
+ int back; /* location of first block id in bits back from first */
+ uint stored; /* bytes currently in last stored block */
+ off_t last; /* offset of last stored block first length byte */
+ ulong ccrc; /* crc of compressed data */
+ ulong clen; /* length (modulo 2^32) of compressed data */
+ ulong tcrc; /* crc of total data */
+ ulong tlen; /* length (modulo 2^32) of total data */
+ time_t lock; /* last modify time of our lock file */
+};
+
+/* gzip header for gzlog */
+local unsigned char log_gzhead[] = {
+ 0x1f, 0x8b, /* magic gzip id */
+ 8, /* compression method is deflate */
+ 4, /* there is an extra field (no file name) */
+ 0, 0, 0, 0, /* no modification time provided */
+ 0, 0xff, /* no extra flags, no OS specified */
+ 39, 0, 'a', 'p', 35, 0 /* extra field with "ap" subfield */
+ /* 35 is EXTRA, 39 is EXTRA + 4 */
+};
+
+#define HEAD sizeof(log_gzhead) /* should be 16 */
+
+/* initial gzip extra field content (52 == HEAD + EXTRA + 1) */
+local unsigned char log_gzext[] = {
+ 52, 0, 0, 0, 0, 0, 0, 0, /* offset of first stored block length */
+ 52, 0, 0, 0, 0, 0, 0, 0, /* offset of last stored block length */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* compressed data crc and length */
+ 0, 0, 0, 0, 0, 0, 0, 0, /* total data crc and length */
+ 0, 0, /* final stored block data length */
+ 5 /* op is NO_OP, last bit 8 bits back */
+};
+
+#define EXTRA sizeof(log_gzext) /* should be 35 */
+
+/* initial gzip data and trailer */
+local unsigned char log_gzbody[] = {
+ 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */
+ 0, 0, 0, 0, /* crc */
+ 0, 0, 0, 0 /* uncompressed length */
+};
+
+#define BODY sizeof(log_gzbody)
+
+/* Exclusively create foo.lock in order to negotiate exclusive access to the
+ foo.* files. If the modify time of an existing lock file is greater than
+ PATIENCE seconds in the past, then consider the lock file to have been
+ abandoned, delete it, and try the exclusive create again. Save the lock
+ file modify time for verification of ownership. Return 0 on success, or -1
+ on failure, usually due to an access restriction or invalid path. Note that
+ if stat() or unlink() fails, it may be due to another process noticing the
+ abandoned lock file a smidge sooner and deleting it, so those are not
+ flagged as an error. */
+local int log_lock(struct log *log)
+{
+ int fd;
+ struct stat st;
+
+ strcpy(log->end, ".lock");
+ while ((fd = open(log->path, O_CREAT | O_EXCL, 0644)) < 0) {
+ if (errno != EEXIST)
+ return -1;
+ if (stat(log->path, &st) == 0 && time(NULL) - st.st_mtime > PATIENCE) {
+ unlink(log->path);
+ continue;
+ }
+ sleep(2); /* relinquish the CPU for two seconds while waiting */
+ }
+ close(fd);
+ if (stat(log->path, &st) == 0)
+ log->lock = st.st_mtime;
+ return 0;
+}
+
+/* Update the modify time of the lock file to now, in order to prevent another
+ task from thinking that the lock is stale. Save the lock file modify time
+ for verification of ownership. */
+local void log_touch(struct log *log)
+{
+ struct stat st;
+
+ strcpy(log->end, ".lock");
+ utimes(log->path, NULL);
+ if (stat(log->path, &st) == 0)
+ log->lock = st.st_mtime;
+}
+
+/* Check the log file modify time against what is expected. Return true if
+ this is not our lock. If it is our lock, touch it to keep it. */
+local int log_check(struct log *log)
+{
+ struct stat st;
+
+ strcpy(log->end, ".lock");
+ if (stat(log->path, &st) || st.st_mtime != log->lock)
+ return 1;
+ log_touch(log);
+ return 0;
+}
+
+/* Unlock a previously acquired lock, but only if it's ours. */
+local void log_unlock(struct log *log)
+{
+ if (log_check(log))
+ return;
+ strcpy(log->end, ".lock");
+ unlink(log->path);
+ log->lock = 0;
+}
+
+/* Check the gzip header and read in the extra field, filling in the values in
+ the log structure. Return op on success or -1 if the gzip header was not as
+ expected. op is the current operation in progress last written to the extra
+ field. This assumes that the gzip file has already been opened, with the
+ file descriptor log->fd. */
+local int log_head(struct log *log)
+{
+ int op;
+ unsigned char buf[HEAD + EXTRA];
+
+ if (lseek(log->fd, 0, SEEK_SET) < 0 ||
+ read(log->fd, buf, HEAD + EXTRA) != HEAD + EXTRA ||
+ memcmp(buf, log_gzhead, HEAD)) {
+ return -1;
+ }
+ log->first = PULL8(buf + HEAD);
+ log->last = PULL8(buf + HEAD + 8);
+ log->ccrc = PULL4(buf + HEAD + 16);
+ log->clen = PULL4(buf + HEAD + 20);
+ log->tcrc = PULL4(buf + HEAD + 24);
+ log->tlen = PULL4(buf + HEAD + 28);
+ log->stored = PULL2(buf + HEAD + 32);
+ log->back = 3 + (buf[HEAD + 34] & 7);
+ op = (buf[HEAD + 34] >> 3) & 3;
+ return op;
+}
+
+/* Write over the extra field contents, marking the operation as op. Use fsync
+ to assure that the device is written to, and in the requested order. This
+ operation, and only this operation, is assumed to be atomic in order to
+ assure that the log is recoverable in the event of an interruption at any
+ point in the process. Return -1 if the write to foo.gz failed. */
+local int log_mark(struct log *log, int op)
+{
+ int ret;
+ unsigned char ext[EXTRA];
+
+ PUT8(ext, log->first);
+ PUT8(ext + 8, log->last);
+ PUT4(ext + 16, log->ccrc);
+ PUT4(ext + 20, log->clen);
+ PUT4(ext + 24, log->tcrc);
+ PUT4(ext + 28, log->tlen);
+ PUT2(ext + 32, log->stored);
+ ext[34] = log->back - 3 + (op << 3);
+ fsync(log->fd);
+ ret = lseek(log->fd, HEAD, SEEK_SET) < 0 ||
+ write(log->fd, ext, EXTRA) != EXTRA ? -1 : 0;
+ fsync(log->fd);
+ return ret;
+}
+
+/* Rewrite the last block header bits and subsequent zero bits to get to a byte
+ boundary, setting the last block bit if last is true, and then write the
+ remainder of the stored block header (length and one's complement). Leave
+ the file pointer after the end of the last stored block data. Return -1 if
+ there is a read or write failure on the foo.gz file */
+local int log_last(struct log *log, int last)
+{
+ int back, len, mask;
+ unsigned char buf[6];
+
+ /* determine the locations of the bytes and bits to modify */
+ back = log->last == log->first ? log->back : 8;
+ len = back > 8 ? 2 : 1; /* bytes back from log->last */
+ mask = 0x80 >> ((back - 1) & 7); /* mask for block last-bit */
+
+ /* get the byte to modify (one or two back) into buf[0] -- don't need to
+ read the byte if the last-bit is eight bits back, since in that case
+ the entire byte will be modified */
+ buf[0] = 0;
+ if (back != 8 && (lseek(log->fd, log->last - len, SEEK_SET) < 0 ||
+ read(log->fd, buf, 1) != 1))
+ return -1;
+
+ /* change the last-bit of the last stored block as requested -- note
+ that all bits above the last-bit are set to zero, per the type bits
+ of a stored block being 00 and per the convention that the bits to
+ bring the stream to a byte boundary are also zeros */
+ buf[1] = 0;
+ buf[2 - len] = (*buf & (mask - 1)) + (last ? mask : 0);
+
+ /* write the modified stored block header and lengths, move the file
+ pointer to after the last stored block data */
+ PUT2(buf + 2, log->stored);
+ PUT2(buf + 4, log->stored ^ 0xffff);
+ return lseek(log->fd, log->last - len, SEEK_SET) < 0 ||
+ write(log->fd, buf + 2 - len, len + 4) != len + 4 ||
+ lseek(log->fd, log->stored, SEEK_CUR) < 0 ? -1 : 0;
+}
+
+/* Append len bytes from data to the locked and open log file. len may be zero
+ if recovering and no .add file was found. In that case, the previous state
+ of the foo.gz file is restored. The data is appended uncompressed in
+ deflate stored blocks. Return -1 if there was an error reading or writing
+ the foo.gz file. */
+local int log_append(struct log *log, unsigned char *data, size_t len)
+{
+ uint put;
+ off_t end;
+ unsigned char buf[8];
+
+ /* set the last block last-bit and length, in case recovering an
+ interrupted append, then position the file pointer to append to the
+ block */
+ if (log_last(log, 1))
+ return -1;
+
+ /* append, adding stored blocks and updating the offset of the last stored
+ block as needed, and update the total crc and length */
+ while (len) {
+ /* append as much as we can to the last block */
+ put = (MAX_STORE << 10) - log->stored;
+ if (put > len)
+ put = (uint)len;
+ if (put) {
+ if (write(log->fd, data, put) != put)
+ return -1;
+ BAIL(1);
+ log->tcrc = crc32(log->tcrc, data, put);
+ log->tlen += put;
+ log->stored += put;
+ data += put;
+ len -= put;
+ }
+
+ /* if we need to, add a new empty stored block */
+ if (len) {
+ /* mark current block as not last */
+ if (log_last(log, 0))
+ return -1;
+
+ /* point to new, empty stored block */
+ log->last += 4 + log->stored + 1;
+ log->stored = 0;
+ }
+
+ /* mark last block as last, update its length */
+ if (log_last(log, 1))
+ return -1;
+ BAIL(2);
+ }
+
+ /* write the new crc and length trailer, and truncate just in case (could
+ be recovering from partial append with a missing foo.add file) */
+ PUT4(buf, log->tcrc);
+ PUT4(buf + 4, log->tlen);
+ if (write(log->fd, buf, 8) != 8 ||
+ (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end))
+ return -1;
+
+ /* write the extra field, marking the log file as done, delete .add file */
+ if (log_mark(log, NO_OP))
+ return -1;
+ strcpy(log->end, ".add");
+ unlink(log->path); /* ignore error, since may not exist */
+ return 0;
+}
+
+/* Replace the foo.dict file with the foo.temp file. Also delete the foo.add
+ file, since the compress operation may have been interrupted before that was
+ done. Returns 1 if memory could not be allocated, or -1 if reading or
+ writing foo.gz fails, or if the rename fails for some reason other than
+ foo.temp not existing. foo.temp not existing is a permitted error, since
+ the replace operation may have been interrupted after the rename is done,
+ but before foo.gz is marked as complete. */
+local int log_replace(struct log *log)
+{
+ int ret;
+ char *dest;
+
+ /* delete foo.add file */
+ strcpy(log->end, ".add");
+ unlink(log->path); /* ignore error, since may not exist */
+ BAIL(3);
+
+ /* rename foo.name to foo.dict, replacing foo.dict if it exists */
+ strcpy(log->end, ".dict");
+ dest = malloc(strlen(log->path) + 1);
+ if (dest == NULL)
+ return -2;
+ strcpy(dest, log->path);
+ strcpy(log->end, ".temp");
+ ret = rename(log->path, dest);
+ free(dest);
+ if (ret && errno != ENOENT)
+ return -1;
+ BAIL(4);
+
+ /* mark the foo.gz file as done */
+ return log_mark(log, NO_OP);
+}
+
+/* Compress the len bytes at data and append the compressed data to the
+ foo.gz deflate data immediately after the previous compressed data. This
+ overwrites the previous uncompressed data, which was stored in foo.add
+ and is the data provided in data[0..len-1]. If this operation is
+ interrupted, it picks up at the start of this routine, with the foo.add
+ file read in again. If there is no data to compress (len == 0), then we
+ simply terminate the foo.gz file after the previously compressed data,
+ appending a final empty stored block and the gzip trailer. Return -1 if
+ reading or writing the log.gz file failed, or -2 if there was a memory
+ allocation failure. */
+local int log_compress(struct log *log, unsigned char *data, size_t len)
+{
+ int fd;
+ uint got, max;
+ ssize_t dict;
+ off_t end;
+ z_stream strm;
+ unsigned char buf[DICT];
+
+ /* compress and append compressed data */
+ if (len) {
+ /* set up for deflate, allocating memory */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8,
+ Z_DEFAULT_STRATEGY) != Z_OK)
+ return -2;
+
+ /* read in dictionary (last 32K of data that was compressed) */
+ strcpy(log->end, ".dict");
+ fd = open(log->path, O_RDONLY, 0);
+ if (fd >= 0) {
+ dict = read(fd, buf, DICT);
+ close(fd);
+ if (dict < 0) {
+ deflateEnd(&strm);
+ return -1;
+ }
+ if (dict)
+ deflateSetDictionary(&strm, buf, (uint)dict);
+ }
+ log_touch(log);
+
+ /* prime deflate with last bits of previous block, position write
+ pointer to write those bits and overwrite what follows */
+ if (lseek(log->fd, log->first - (log->back > 8 ? 2 : 1),
+ SEEK_SET) < 0 ||
+ read(log->fd, buf, 1) != 1 || lseek(log->fd, -1, SEEK_CUR) < 0) {
+ deflateEnd(&strm);
+ return -1;
+ }
+ deflatePrime(&strm, (8 - log->back) & 7, *buf);
+
+ /* compress, finishing with a partial non-last empty static block */
+ strm.next_in = data;
+ max = (((uint)0 - 1) >> 1) + 1; /* in case int smaller than size_t */
+ do {
+ strm.avail_in = len > max ? max : (uint)len;
+ len -= strm.avail_in;
+ do {
+ strm.avail_out = DICT;
+ strm.next_out = buf;
+ deflate(&strm, len ? Z_NO_FLUSH : Z_PARTIAL_FLUSH);
+ got = DICT - strm.avail_out;
+ if (got && write(log->fd, buf, got) != got) {
+ deflateEnd(&strm);
+ return -1;
+ }
+ log_touch(log);
+ } while (strm.avail_out == 0);
+ } while (len);
+ deflateEnd(&strm);
+ BAIL(5);
+
+ /* find start of empty static block -- scanning backwards the first one
+ bit is the second bit of the block, if the last byte is zero, then
+ we know the byte before that has a one in the top bit, since an
+ empty static block is ten bits long */
+ if ((log->first = lseek(log->fd, -1, SEEK_CUR)) < 0 ||
+ read(log->fd, buf, 1) != 1)
+ return -1;
+ log->first++;
+ if (*buf) {
+ log->back = 1;
+ while ((*buf & ((uint)1 << (8 - log->back++))) == 0)
+ ; /* guaranteed to terminate, since *buf != 0 */
+ }
+ else
+ log->back = 10;
+
+ /* update compressed crc and length */
+ log->ccrc = log->tcrc;
+ log->clen = log->tlen;
+ }
+ else {
+ /* no data to compress -- fix up existing gzip stream */
+ log->tcrc = log->ccrc;
+ log->tlen = log->clen;
+ }
+
+ /* complete and truncate gzip stream */
+ log->last = log->first;
+ log->stored = 0;
+ PUT4(buf, log->tcrc);
+ PUT4(buf + 4, log->tlen);
+ if (log_last(log, 1) || write(log->fd, buf, 8) != 8 ||
+ (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end))
+ return -1;
+ BAIL(6);
+
+ /* mark as being in the replace operation */
+ if (log_mark(log, REPLACE_OP))
+ return -1;
+
+ /* execute the replace operation and mark the file as done */
+ return log_replace(log);
+}
+
+/* log a repair record to the .repairs file */
+local void log_log(struct log *log, int op, char *record)
+{
+ time_t now;
+ FILE *rec;
+
+ now = time(NULL);
+ strcpy(log->end, ".repairs");
+ rec = fopen(log->path, "a");
+ if (rec == NULL)
+ return;
+ fprintf(rec, "%.24s %s recovery: %s\n", ctime(&now), op == APPEND_OP ?
+ "append" : (op == COMPRESS_OP ? "compress" : "replace"), record);
+ fclose(rec);
+ return;
+}
+
+/* Recover the interrupted operation op. First read foo.add for recovering an
+ append or compress operation. Return -1 if there was an error reading or
+ writing foo.gz or reading an existing foo.add, or -2 if there was a memory
+ allocation failure. */
+local int log_recover(struct log *log, int op)
+{
+ int fd, ret = 0;
+ unsigned char *data = NULL;
+ size_t len = 0;
+ struct stat st;
+
+ /* log recovery */
+ log_log(log, op, "start");
+
+ /* load foo.add file if expected and present */
+ if (op == APPEND_OP || op == COMPRESS_OP) {
+ strcpy(log->end, ".add");
+ if (stat(log->path, &st) == 0 && st.st_size) {
+ len = (size_t)(st.st_size);
+ if ((off_t)len != st.st_size ||
+ (data = malloc(st.st_size)) == NULL) {
+ log_log(log, op, "allocation failure");
+ return -2;
+ }
+ if ((fd = open(log->path, O_RDONLY, 0)) < 0) {
+ log_log(log, op, ".add file read failure");
+ return -1;
+ }
+ ret = (size_t)read(fd, data, len) != len;
+ close(fd);
+ if (ret) {
+ log_log(log, op, ".add file read failure");
+ return -1;
+ }
+ log_log(log, op, "loaded .add file");
+ }
+ else
+ log_log(log, op, "missing .add file!");
+ }
+
+ /* recover the interrupted operation */
+ switch (op) {
+ case APPEND_OP:
+ ret = log_append(log, data, len);
+ break;
+ case COMPRESS_OP:
+ ret = log_compress(log, data, len);
+ break;
+ case REPLACE_OP:
+ ret = log_replace(log);
+ }
+
+ /* log status */
+ log_log(log, op, ret ? "failure" : "complete");
+
+ /* clean up */
+ if (data != NULL)
+ free(data);
+ return ret;
+}
+
+/* Close the foo.gz file (if open) and release the lock. */
+local void log_close(struct log *log)
+{
+ if (log->fd >= 0)
+ close(log->fd);
+ log->fd = -1;
+ log_unlock(log);
+}
+
+/* Open foo.gz, verify the header, and load the extra field contents, after
+ first creating the foo.lock file to gain exclusive access to the foo.*
+ files. If foo.gz does not exist or is empty, then write the initial header,
+ extra, and body content of an empty foo.gz log file. If there is an error
+ creating the lock file due to access restrictions, or an error reading or
+ writing the foo.gz file, or if the foo.gz file is not a proper log file for
+ this object (e.g. not a gzip file or does not contain the expected extra
+ field), then return true. If there is an error, the lock is released.
+ Otherwise, the lock is left in place. */
+local int log_open(struct log *log)
+{
+ int op;
+
+ /* release open file resource if left over -- can occur if lock lost
+ between gzlog_open() and gzlog_write() */
+ if (log->fd >= 0)
+ close(log->fd);
+ log->fd = -1;
+
+ /* negotiate exclusive access */
+ if (log_lock(log) < 0)
+ return -1;
+
+ /* open the log file, foo.gz */
+ strcpy(log->end, ".gz");
+ log->fd = open(log->path, O_RDWR | O_CREAT, 0644);
+ if (log->fd < 0) {
+ log_close(log);
+ return -1;
+ }
+
+ /* if new, initialize foo.gz with an empty log, delete old dictionary */
+ if (lseek(log->fd, 0, SEEK_END) == 0) {
+ if (write(log->fd, log_gzhead, HEAD) != HEAD ||
+ write(log->fd, log_gzext, EXTRA) != EXTRA ||
+ write(log->fd, log_gzbody, BODY) != BODY) {
+ log_close(log);
+ return -1;
+ }
+ strcpy(log->end, ".dict");
+ unlink(log->path);
+ }
+
+ /* verify log file and load extra field information */
+ if ((op = log_head(log)) < 0) {
+ log_close(log);
+ return -1;
+ }
+
+ /* check for interrupted process and if so, recover */
+ if (op != NO_OP && log_recover(log, op)) {
+ log_close(log);
+ return -1;
+ }
+
+ /* touch the lock file to prevent another process from grabbing it */
+ log_touch(log);
+ return 0;
+}
+
+/* See gzlog.h for the description of the external methods below */
+gzlog *gzlog_open(char *path)
+{
+ size_t n;
+ struct log *log;
+
+ /* check arguments */
+ if (path == NULL || *path == 0)
+ return NULL;
+
+ /* allocate and initialize log structure */
+ log = malloc(sizeof(struct log));
+ if (log == NULL)
+ return NULL;
+ strcpy(log->id, LOGID);
+ log->fd = -1;
+
+ /* save path and end of path for name construction */
+ n = strlen(path);
+ log->path = malloc(n + 9); /* allow for ".repairs" */
+ if (log->path == NULL) {
+ free(log);
+ return NULL;
+ }
+ strcpy(log->path, path);
+ log->end = log->path + n;
+
+ /* gain exclusive access and verify log file -- may perform a
+ recovery operation if needed */
+ if (log_open(log)) {
+ free(log->path);
+ free(log);
+ return NULL;
+ }
+
+ /* return pointer to log structure */
+ return log;
+}
+
+/* gzlog_compress() return values:
+ 0: all good
+ -1: file i/o error (usually access issue)
+ -2: memory allocation failure
+ -3: invalid log pointer argument */
+int gzlog_compress(gzlog *logd)
+{
+ int fd, ret;
+ uint block;
+ size_t len, next;
+ unsigned char *data, buf[5];
+ struct log *log = logd;
+
+ /* check arguments */
+ if (log == NULL || strcmp(log->id, LOGID))
+ return -3;
+
+ /* see if we lost the lock -- if so get it again and reload the extra
+ field information (it probably changed), recover last operation if
+ necessary */
+ if (log_check(log) && log_open(log))
+ return -1;
+
+ /* create space for uncompressed data */
+ len = ((size_t)(log->last - log->first) & ~(((size_t)1 << 10) - 1)) +
+ log->stored;
+ if ((data = malloc(len)) == NULL)
+ return -2;
+
+ /* do statement here is just a cheap trick for error handling */
+ do {
+ /* read in the uncompressed data */
+ if (lseek(log->fd, log->first - 1, SEEK_SET) < 0)
+ break;
+ next = 0;
+ while (next < len) {
+ if (read(log->fd, buf, 5) != 5)
+ break;
+ block = PULL2(buf + 1);
+ if (next + block > len ||
+ read(log->fd, (char *)data + next, block) != block)
+ break;
+ next += block;
+ }
+ if (lseek(log->fd, 0, SEEK_CUR) != log->last + 4 + log->stored)
+ break;
+ log_touch(log);
+
+ /* write the uncompressed data to the .add file */
+ strcpy(log->end, ".add");
+ fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ if (fd < 0)
+ break;
+ ret = (size_t)write(fd, data, len) != len;
+ if (ret | close(fd))
+ break;
+ log_touch(log);
+
+ /* write the dictionary for the next compress to the .temp file */
+ strcpy(log->end, ".temp");
+ fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ if (fd < 0)
+ break;
+ next = DICT > len ? len : DICT;
+ ret = (size_t)write(fd, (char *)data + len - next, next) != next;
+ if (ret | close(fd))
+ break;
+ log_touch(log);
+
+ /* roll back to compressed data, mark the compress in progress */
+ log->last = log->first;
+ log->stored = 0;
+ if (log_mark(log, COMPRESS_OP))
+ break;
+ BAIL(7);
+
+ /* compress and append the data (clears mark) */
+ ret = log_compress(log, data, len);
+ free(data);
+ return ret;
+ } while (0);
+
+ /* broke out of do above on i/o error */
+ free(data);
+ return -1;
+}
+
+/* gzlog_write() return values:
+ 0: all good
+ -1: file i/o error (usually access issue)
+ -2: memory allocation failure
+ -3: invalid log pointer argument */
+int gzlog_write(gzlog *logd, void *data, size_t len)
+{
+ int fd, ret;
+ struct log *log = logd;
+
+ /* check arguments */
+ if (log == NULL || strcmp(log->id, LOGID))
+ return -3;
+ if (data == NULL || len <= 0)
+ return 0;
+
+ /* see if we lost the lock -- if so get it again and reload the extra
+ field information (it probably changed), recover last operation if
+ necessary */
+ if (log_check(log) && log_open(log))
+ return -1;
+
+ /* create and write .add file */
+ strcpy(log->end, ".add");
+ fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+ if (fd < 0)
+ return -1;
+ ret = (size_t)write(fd, data, len) != len;
+ if (ret | close(fd))
+ return -1;
+ log_touch(log);
+
+ /* mark log file with append in progress */
+ if (log_mark(log, APPEND_OP))
+ return -1;
+ BAIL(8);
+
+ /* append data (clears mark) */
+ if (log_append(log, data, len))
+ return -1;
+
+ /* check to see if it's time to compress -- if not, then done */
+ if (((log->last - log->first) >> 10) + (log->stored >> 10) < TRIGGER)
+ return 0;
+
+ /* time to compress */
+ return gzlog_compress(log);
+}
+
+/* gzlog_close() return values:
+ 0: ok
+ -3: invalid log pointer argument */
+int gzlog_close(gzlog *logd)
+{
+ struct log *log = logd;
+
+ /* check arguments */
+ if (log == NULL || strcmp(log->id, LOGID))
+ return -3;
+
+ /* close the log file and release the lock */
+ log_close(log);
+
+ /* free structure and return */
+ if (log->path != NULL)
+ free(log->path);
+ strcpy(log->id, "bad");
+ free(log);
+ return 0;
+}
diff --git a/compat/zlib/examples/gzlog.h b/compat/zlib/examples/gzlog.h
new file mode 100644
index 0000000..86f0cec
--- /dev/null
+++ b/compat/zlib/examples/gzlog.h
@@ -0,0 +1,91 @@
+/* gzlog.h
+ Copyright (C) 2004, 2008, 2012 Mark Adler, all rights reserved
+ version 2.2, 14 Aug 2012
+
+ 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
+ */
+
+/* Version History:
+ 1.0 26 Nov 2004 First version
+ 2.0 25 Apr 2008 Complete redesign for recovery of interrupted operations
+ Interface changed slightly in that now path is a prefix
+ Compression now occurs as needed during gzlog_write()
+ gzlog_write() now always leaves the log file as valid gzip
+ 2.1 8 Jul 2012 Fix argument checks in gzlog_compress() and gzlog_write()
+ 2.2 14 Aug 2012 Clean up signed comparisons
+ */
+
+/*
+ The gzlog object allows writing short messages to a gzipped log file,
+ opening the log file locked for small bursts, and then closing it. The log
+ object works by appending stored (uncompressed) data to the gzip file until
+ 1 MB has been accumulated. At that time, the stored data is compressed, and
+ replaces the uncompressed data in the file. The log file is truncated to
+ its new size at that time. After each write operation, the log file is a
+ valid gzip file that can decompressed to recover what was written.
+
+ The gzlog operations can be interupted at any point due to an application or
+ system crash, and the log file will be recovered the next time the log is
+ opened with gzlog_open().
+ */
+
+#ifndef GZLOG_H
+#define GZLOG_H
+
+/* gzlog object type */
+typedef void gzlog;
+
+/* Open a gzlog object, creating the log file if it does not exist. Return
+ NULL on error. Note that gzlog_open() could take a while to complete if it
+ has to wait to verify that a lock is stale (possibly for five minutes), or
+ if there is significant contention with other instantiations of this object
+ when locking the resource. path is the prefix of the file names created by
+ this object. If path is "foo", then the log file will be "foo.gz", and
+ other auxiliary files will be created and destroyed during the process:
+ "foo.dict" for a compression dictionary, "foo.temp" for a temporary (next)
+ dictionary, "foo.add" for data being added or compressed, "foo.lock" for the
+ lock file, and "foo.repairs" to log recovery operations performed due to
+ interrupted gzlog operations. A gzlog_open() followed by a gzlog_close()
+ will recover a previously interrupted operation, if any. */
+gzlog *gzlog_open(char *path);
+
+/* Write to a gzlog object. Return zero on success, -1 if there is a file i/o
+ error on any of the gzlog files (this should not happen if gzlog_open()
+ succeeded, unless the device has run out of space or leftover auxiliary
+ files have permissions or ownership that prevent their use), -2 if there is
+ a memory allocation failure, or -3 if the log argument is invalid (e.g. if
+ it was not created by gzlog_open()). This function will write data to the
+ file uncompressed, until 1 MB has been accumulated, at which time that data
+ will be compressed. The log file will be a valid gzip file upon successful
+ return. */
+int gzlog_write(gzlog *log, void *data, size_t len);
+
+/* Force compression of any uncompressed data in the log. This should be used
+ sparingly, if at all. The main application would be when a log file will
+ not be appended to again. If this is used to compress frequently while
+ appending, it will both significantly increase the execution time and
+ reduce the compression ratio. The return codes are the same as for
+ gzlog_write(). */
+int gzlog_compress(gzlog *log);
+
+/* Close a gzlog object. Return zero on success, -3 if the log argument is
+ invalid. The log object is freed, and so cannot be referenced again. */
+int gzlog_close(gzlog *log);
+
+#endif
diff --git a/compat/zlib/examples/zlib_how.html b/compat/zlib/examples/zlib_how.html
new file mode 100644
index 0000000..444ff1c
--- /dev/null
+++ b/compat/zlib/examples/zlib_how.html
@@ -0,0 +1,545 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
+ "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+<title>zlib Usage Example</title>
+<!-- Copyright (c) 2004, 2005 Mark Adler. -->
+</head>
+<body bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#00A000">
+<h2 align="center"> zlib Usage Example </h2>
+We often get questions about how the <tt>deflate()</tt> and <tt>inflate()</tt> functions should be used.
+Users wonder when they should provide more input, when they should use more output,
+what to do with a <tt>Z_BUF_ERROR</tt>, how to make sure the process terminates properly, and
+so on. So for those who have read <tt>zlib.h</tt> (a few times), and
+would like further edification, below is an annotated example in C of simple routines to compress and decompress
+from an input file to an output file using <tt>deflate()</tt> and <tt>inflate()</tt> respectively. The
+annotations are interspersed between lines of the code. So please read between the lines.
+We hope this helps explain some of the intricacies of <em>zlib</em>.
+<p>
+Without further adieu, here is the program <a href="zpipe.c"><tt>zpipe.c</tt></a>:
+<pre><b>
+/* zpipe.c: example of proper use of zlib's inflate() and deflate()
+ Not copyrighted -- provided to the public domain
+ Version 1.4 11 December 2005 Mark Adler */
+
+/* Version history:
+ 1.0 30 Oct 2004 First version
+ 1.1 8 Nov 2004 Add void casting for unused return values
+ Use switch statement for inflate() return values
+ 1.2 9 Nov 2004 Add assertions to document zlib guarantees
+ 1.3 6 Apr 2005 Remove incorrect assertion in inf()
+ 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions
+ Avoid some compiler warnings for input and output buffers
+ */
+</b></pre><!-- -->
+We now include the header files for the required definitions. From
+<tt>stdio.h</tt> we use <tt>fopen()</tt>, <tt>fread()</tt>, <tt>fwrite()</tt>,
+<tt>feof()</tt>, <tt>ferror()</tt>, and <tt>fclose()</tt> for file i/o, and
+<tt>fputs()</tt> for error messages. From <tt>string.h</tt> we use
+<tt>strcmp()</tt> for command line argument processing.
+From <tt>assert.h</tt> we use the <tt>assert()</tt> macro.
+From <tt>zlib.h</tt>
+we use the basic compression functions <tt>deflateInit()</tt>,
+<tt>deflate()</tt>, and <tt>deflateEnd()</tt>, and the basic decompression
+functions <tt>inflateInit()</tt>, <tt>inflate()</tt>, and
+<tt>inflateEnd()</tt>.
+<pre><b>
+#include &lt;stdio.h&gt;
+#include &lt;string.h&gt;
+#include &lt;assert.h&gt;
+#include "zlib.h"
+</b></pre><!-- -->
+This is an ugly hack required to avoid corruption of the input and output data on
+Windows/MS-DOS systems. Without this, those systems would assume that the input and output
+files are text, and try to convert the end-of-line characters from one standard to
+another. That would corrupt binary data, and in particular would render the compressed data unusable.
+This sets the input and output to binary which suppresses the end-of-line conversions.
+<tt>SET_BINARY_MODE()</tt> will be used later on <tt>stdin</tt> and <tt>stdout</tt>, at the beginning of <tt>main()</tt>.
+<pre><b>
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include &lt;fcntl.h&gt;
+# include &lt;io.h&gt;
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+</b></pre><!-- -->
+<tt>CHUNK</tt> is simply the buffer size for feeding data to and pulling data
+from the <em>zlib</em> routines. Larger buffer sizes would be more efficient,
+especially for <tt>inflate()</tt>. If the memory is available, buffers sizes
+on the order of 128K or 256K bytes should be used.
+<pre><b>
+#define CHUNK 16384
+</b></pre><!-- -->
+The <tt>def()</tt> routine compresses data from an input file to an output file. The output data
+will be in the <em>zlib</em> format, which is different from the <em>gzip</em> or <em>zip</em>
+formats. The <em>zlib</em> format has a very small header of only two bytes to identify it as
+a <em>zlib</em> stream and to provide decoding information, and a four-byte trailer with a fast
+check value to verify the integrity of the uncompressed data after decoding.
+<pre><b>
+/* Compress from file source to file dest until EOF on source.
+ def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_STREAM_ERROR if an invalid compression
+ level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
+ version of the library linked do not match, or Z_ERRNO if there is
+ an error reading or writing the files. */
+int def(FILE *source, FILE *dest, int level)
+{
+</b></pre>
+Here are the local variables for <tt>def()</tt>. <tt>ret</tt> will be used for <em>zlib</em>
+return codes. <tt>flush</tt> will keep track of the current flushing state for <tt>deflate()</tt>,
+which is either no flushing, or flush to completion after the end of the input file is reached.
+<tt>have</tt> is the amount of data returned from <tt>deflate()</tt>. The <tt>strm</tt> structure
+is used to pass information to and from the <em>zlib</em> routines, and to maintain the
+<tt>deflate()</tt> state. <tt>in</tt> and <tt>out</tt> are the input and output buffers for
+<tt>deflate()</tt>.
+<pre><b>
+ int ret, flush;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+</b></pre><!-- -->
+The first thing we do is to initialize the <em>zlib</em> state for compression using
+<tt>deflateInit()</tt>. This must be done before the first use of <tt>deflate()</tt>.
+The <tt>zalloc</tt>, <tt>zfree</tt>, and <tt>opaque</tt> fields in the <tt>strm</tt>
+structure must be initialized before calling <tt>deflateInit()</tt>. Here they are
+set to the <em>zlib</em> constant <tt>Z_NULL</tt> to request that <em>zlib</em> use
+the default memory allocation routines. An application may also choose to provide
+custom memory allocation routines here. <tt>deflateInit()</tt> will allocate on the
+order of 256K bytes for the internal state.
+(See <a href="zlib_tech.html"><em>zlib Technical Details</em></a>.)
+<p>
+<tt>deflateInit()</tt> is called with a pointer to the structure to be initialized and
+the compression level, which is an integer in the range of -1 to 9. Lower compression
+levels result in faster execution, but less compression. Higher levels result in
+greater compression, but slower execution. The <em>zlib</em> constant Z_DEFAULT_COMPRESSION,
+equal to -1,
+provides a good compromise between compression and speed and is equivalent to level 6.
+Level 0 actually does no compression at all, and in fact expands the data slightly to produce
+the <em>zlib</em> format (it is not a byte-for-byte copy of the input).
+More advanced applications of <em>zlib</em>
+may use <tt>deflateInit2()</tt> here instead. Such an application may want to reduce how
+much memory will be used, at some price in compression. Or it may need to request a
+<em>gzip</em> header and trailer instead of a <em>zlib</em> header and trailer, or raw
+encoding with no header or trailer at all.
+<p>
+We must check the return value of <tt>deflateInit()</tt> against the <em>zlib</em> constant
+<tt>Z_OK</tt> to make sure that it was able to
+allocate memory for the internal state, and that the provided arguments were valid.
+<tt>deflateInit()</tt> will also check that the version of <em>zlib</em> that the <tt>zlib.h</tt>
+file came from matches the version of <em>zlib</em> actually linked with the program. This
+is especially important for environments in which <em>zlib</em> is a shared library.
+<p>
+Note that an application can initialize multiple, independent <em>zlib</em> streams, which can
+operate in parallel. The state information maintained in the structure allows the <em>zlib</em>
+routines to be reentrant.
+<pre><b>
+ /* allocate deflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = deflateInit(&amp;strm, level);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+With the pleasantries out of the way, now we can get down to business. The outer <tt>do</tt>-loop
+reads all of the input file and exits at the bottom of the loop once end-of-file is reached.
+This loop contains the only call of <tt>deflate()</tt>. So we must make sure that all of the
+input data has been processed and that all of the output data has been generated and consumed
+before we fall out of the loop at the bottom.
+<pre><b>
+ /* compress until end of file */
+ do {
+</b></pre>
+We start off by reading data from the input file. The number of bytes read is put directly
+into <tt>avail_in</tt>, and a pointer to those bytes is put into <tt>next_in</tt>. We also
+check to see if end-of-file on the input has been reached. If we are at the end of file, then <tt>flush</tt> is set to the
+<em>zlib</em> constant <tt>Z_FINISH</tt>, which is later passed to <tt>deflate()</tt> to
+indicate that this is the last chunk of input data to compress. We need to use <tt>feof()</tt>
+to check for end-of-file as opposed to seeing if fewer than <tt>CHUNK</tt> bytes have been read. The
+reason is that if the input file length is an exact multiple of <tt>CHUNK</tt>, we will miss
+the fact that we got to the end-of-file, and not know to tell <tt>deflate()</tt> to finish
+up the compressed stream. If we are not yet at the end of the input, then the <em>zlib</em>
+constant <tt>Z_NO_FLUSH</tt> will be passed to <tt>deflate</tt> to indicate that we are still
+in the middle of the uncompressed data.
+<p>
+If there is an error in reading from the input file, the process is aborted with
+<tt>deflateEnd()</tt> being called to free the allocated <em>zlib</em> state before returning
+the error. We wouldn't want a memory leak, now would we? <tt>deflateEnd()</tt> can be called
+at any time after the state has been initialized. Once that's done, <tt>deflateInit()</tt> (or
+<tt>deflateInit2()</tt>) would have to be called to start a new compression process. There is
+no point here in checking the <tt>deflateEnd()</tt> return code. The deallocation can't fail.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)deflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+ flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop passes our chunk of input data to <tt>deflate()</tt>, and then
+keeps calling <tt>deflate()</tt> until it is done producing output. Once there is no more
+new output, <tt>deflate()</tt> is guaranteed to have consumed all of the input, i.e.,
+<tt>avail_in</tt> will be zero.
+<pre><b>
+ /* run deflate() on input until output buffer not full, finish
+ compression if all of source has been read in */
+ do {
+</b></pre>
+Output space is provided to <tt>deflate()</tt> by setting <tt>avail_out</tt> to the number
+of available output bytes and <tt>next_out</tt> to a pointer to that space.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we call the compression engine itself, <tt>deflate()</tt>. It takes as many of the
+<tt>avail_in</tt> bytes at <tt>next_in</tt> as it can process, and writes as many as
+<tt>avail_out</tt> bytes to <tt>next_out</tt>. Those counters and pointers are then
+updated past the input data consumed and the output data written. It is the amount of
+output space available that may limit how much input is consumed.
+Hence the inner loop to make sure that
+all of the input is consumed by providing more output space each time. Since <tt>avail_in</tt>
+and <tt>next_in</tt> are updated by <tt>deflate()</tt>, we don't have to mess with those
+between <tt>deflate()</tt> calls until it's all used up.
+<p>
+The parameters to <tt>deflate()</tt> are a pointer to the <tt>strm</tt> structure containing
+the input and output information and the internal compression engine state, and a parameter
+indicating whether and how to flush data to the output. Normally <tt>deflate</tt> will consume
+several K bytes of input data before producing any output (except for the header), in order
+to accumulate statistics on the data for optimum compression. It will then put out a burst of
+compressed data, and proceed to consume more input before the next burst. Eventually,
+<tt>deflate()</tt>
+must be told to terminate the stream, complete the compression with provided input data, and
+write out the trailer check value. <tt>deflate()</tt> will continue to compress normally as long
+as the flush parameter is <tt>Z_NO_FLUSH</tt>. Once the <tt>Z_FINISH</tt> parameter is provided,
+<tt>deflate()</tt> will begin to complete the compressed output stream. However depending on how
+much output space is provided, <tt>deflate()</tt> may have to be called several times until it
+has provided the complete compressed stream, even after it has consumed all of the input. The flush
+parameter must continue to be <tt>Z_FINISH</tt> for those subsequent calls.
+<p>
+There are other values of the flush parameter that are used in more advanced applications. You can
+force <tt>deflate()</tt> to produce a burst of output that encodes all of the input data provided
+so far, even if it wouldn't have otherwise, for example to control data latency on a link with
+compressed data. You can also ask that <tt>deflate()</tt> do that as well as erase any history up to
+that point so that what follows can be decompressed independently, for example for random access
+applications. Both requests will degrade compression by an amount depending on how often such
+requests are made.
+<p>
+<tt>deflate()</tt> has a return value that can indicate errors, yet we do not check it here. Why
+not? Well, it turns out that <tt>deflate()</tt> can do no wrong here. Let's go through
+<tt>deflate()</tt>'s return values and dispense with them one by one. The possible values are
+<tt>Z_OK</tt>, <tt>Z_STREAM_END</tt>, <tt>Z_STREAM_ERROR</tt>, or <tt>Z_BUF_ERROR</tt>. <tt>Z_OK</tt>
+is, well, ok. <tt>Z_STREAM_END</tt> is also ok and will be returned for the last call of
+<tt>deflate()</tt>. This is already guaranteed by calling <tt>deflate()</tt> with <tt>Z_FINISH</tt>
+until it has no more output. <tt>Z_STREAM_ERROR</tt> is only possible if the stream is not
+initialized properly, but we did initialize it properly. There is no harm in checking for
+<tt>Z_STREAM_ERROR</tt> here, for example to check for the possibility that some
+other part of the application inadvertently clobbered the memory containing the <em>zlib</em> state.
+<tt>Z_BUF_ERROR</tt> will be explained further below, but
+suffice it to say that this is simply an indication that <tt>deflate()</tt> could not consume
+more input or produce more output. <tt>deflate()</tt> can be called again with more output space
+or more available input, which it will be in this code.
+<pre><b>
+ ret = deflate(&amp;strm, flush); /* no bad return value */
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+</b></pre>
+Now we compute how much output <tt>deflate()</tt> provided on the last call, which is the
+difference between how much space was provided before the call, and how much output space
+is still available after the call. Then that data, if any, is written to the output file.
+We can then reuse the output buffer for the next call of <tt>deflate()</tt>. Again if there
+is a file i/o error, we call <tt>deflateEnd()</tt> before returning to avoid a memory leak.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)deflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop is repeated until the last <tt>deflate()</tt> call fails to fill the
+provided output buffer. Then we know that <tt>deflate()</tt> has done as much as it can with
+the provided input, and that all of that input has been consumed. We can then fall out of this
+loop and reuse the input buffer.
+<p>
+The way we tell that <tt>deflate()</tt> has no more output is by seeing that it did not fill
+the output buffer, leaving <tt>avail_out</tt> greater than zero. However suppose that
+<tt>deflate()</tt> has no more output, but just so happened to exactly fill the output buffer!
+<tt>avail_out</tt> is zero, and we can't tell that <tt>deflate()</tt> has done all it can.
+As far as we know, <tt>deflate()</tt>
+has more output for us. So we call it again. But now <tt>deflate()</tt> produces no output
+at all, and <tt>avail_out</tt> remains unchanged as <tt>CHUNK</tt>. That <tt>deflate()</tt> call
+wasn't able to do anything, either consume input or produce output, and so it returns
+<tt>Z_BUF_ERROR</tt>. (See, I told you I'd cover this later.) However this is not a problem at
+all. Now we finally have the desired indication that <tt>deflate()</tt> is really done,
+and so we drop out of the inner loop to provide more input to <tt>deflate()</tt>.
+<p>
+With <tt>flush</tt> set to <tt>Z_FINISH</tt>, this final set of <tt>deflate()</tt> calls will
+complete the output stream. Once that is done, subsequent calls of <tt>deflate()</tt> would return
+<tt>Z_STREAM_ERROR</tt> if the flush parameter is not <tt>Z_FINISH</tt>, and do no more processing
+until the state is reinitialized.
+<p>
+Some applications of <em>zlib</em> have two loops that call <tt>deflate()</tt>
+instead of the single inner loop we have here. The first loop would call
+without flushing and feed all of the data to <tt>deflate()</tt>. The second loop would call
+<tt>deflate()</tt> with no more
+data and the <tt>Z_FINISH</tt> parameter to complete the process. As you can see from this
+example, that can be avoided by simply keeping track of the current flush state.
+<pre><b>
+ } while (strm.avail_out == 0);
+ assert(strm.avail_in == 0); /* all input will be used */
+</b></pre><!-- -->
+Now we check to see if we have already processed all of the input file. That information was
+saved in the <tt>flush</tt> variable, so we see if that was set to <tt>Z_FINISH</tt>. If so,
+then we're done and we fall out of the outer loop. We're guaranteed to get <tt>Z_STREAM_END</tt>
+from the last <tt>deflate()</tt> call, since we ran it until the last chunk of input was
+consumed and all of the output was generated.
+<pre><b>
+ /* done when last data in file processed */
+ } while (flush != Z_FINISH);
+ assert(ret == Z_STREAM_END); /* stream will be complete */
+</b></pre><!-- -->
+The process is complete, but we still need to deallocate the state to avoid a memory leak
+(or rather more like a memory hemorrhage if you didn't do this). Then
+finally we can return with a happy return value.
+<pre><b>
+ /* clean up and return */
+ (void)deflateEnd(&amp;strm);
+ return Z_OK;
+}
+</b></pre><!-- -->
+Now we do the same thing for decompression in the <tt>inf()</tt> routine. <tt>inf()</tt>
+decompresses what is hopefully a valid <em>zlib</em> stream from the input file and writes the
+uncompressed data to the output file. Much of the discussion above for <tt>def()</tt>
+applies to <tt>inf()</tt> as well, so the discussion here will focus on the differences between
+the two.
+<pre><b>
+/* Decompress from file source to file dest until stream ends or EOF.
+ inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_DATA_ERROR if the deflate data is
+ invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
+ the version of the library linked do not match, or Z_ERRNO if there
+ is an error reading or writing the files. */
+int inf(FILE *source, FILE *dest)
+{
+</b></pre>
+The local variables have the same functionality as they do for <tt>def()</tt>. The
+only difference is that there is no <tt>flush</tt> variable, since <tt>inflate()</tt>
+can tell from the <em>zlib</em> stream itself when the stream is complete.
+<pre><b>
+ int ret;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+</b></pre><!-- -->
+The initialization of the state is the same, except that there is no compression level,
+of course, and two more elements of the structure are initialized. <tt>avail_in</tt>
+and <tt>next_in</tt> must be initialized before calling <tt>inflateInit()</tt>. This
+is because the application has the option to provide the start of the zlib stream in
+order for <tt>inflateInit()</tt> to have access to information about the compression
+method to aid in memory allocation. In the current implementation of <em>zlib</em>
+(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of
+<tt>inflate()</tt> anyway. However those fields must be initialized since later versions
+of <em>zlib</em> that provide more compression methods may take advantage of this interface.
+In any case, no decompression is performed by <tt>inflateInit()</tt>, so the
+<tt>avail_out</tt> and <tt>next_out</tt> fields do not need to be initialized before calling.
+<p>
+Here <tt>avail_in</tt> is set to zero and <tt>next_in</tt> is set to <tt>Z_NULL</tt> to
+indicate that no input data is being provided.
+<pre><b>
+ /* allocate inflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit(&amp;strm);
+ if (ret != Z_OK)
+ return ret;
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop decompresses input until <tt>inflate()</tt> indicates
+that it has reached the end of the compressed data and has produced all of the uncompressed
+output. This is in contrast to <tt>def()</tt> which processes all of the input file.
+If end-of-file is reached before the compressed data self-terminates, then the compressed
+data is incomplete and an error is returned.
+<pre><b>
+ /* decompress until deflate stream ends or end of file */
+ do {
+</b></pre>
+We read input data and set the <tt>strm</tt> structure accordingly. If we've reached the
+end of the input file, then we leave the outer loop and report an error, since the
+compressed data is incomplete. Note that we may read more data than is eventually consumed
+by <tt>inflate()</tt>, if the input file continues past the <em>zlib</em> stream.
+For applications where <em>zlib</em> streams are embedded in other data, this routine would
+need to be modified to return the unused data, or at least indicate how much of the input
+data was not used, so the application would know where to pick up after the <em>zlib</em> stream.
+<pre><b>
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)inflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = in;
+</b></pre><!-- -->
+The inner <tt>do</tt>-loop has the same function it did in <tt>def()</tt>, which is to
+keep calling <tt>inflate()</tt> until has generated all of the output it can with the
+provided input.
+<pre><b>
+ /* run inflate() on input until output buffer not full */
+ do {
+</b></pre>
+Just like in <tt>def()</tt>, the same output space is provided for each call of <tt>inflate()</tt>.
+<pre><b>
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+</b></pre>
+Now we run the decompression engine itself. There is no need to adjust the flush parameter, since
+the <em>zlib</em> format is self-terminating. The main difference here is that there are
+return values that we need to pay attention to. <tt>Z_DATA_ERROR</tt>
+indicates that <tt>inflate()</tt> detected an error in the <em>zlib</em> compressed data format,
+which means that either the data is not a <em>zlib</em> stream to begin with, or that the data was
+corrupted somewhere along the way since it was compressed. The other error to be processed is
+<tt>Z_MEM_ERROR</tt>, which can occur since memory allocation is deferred until <tt>inflate()</tt>
+needs it, unlike <tt>deflate()</tt>, whose memory is allocated at the start by <tt>deflateInit()</tt>.
+<p>
+Advanced applications may use
+<tt>deflateSetDictionary()</tt> to prime <tt>deflate()</tt> with a set of likely data to improve the
+first 32K or so of compression. This is noted in the <em>zlib</em> header, so <tt>inflate()</tt>
+requests that that dictionary be provided before it can start to decompress. Without the dictionary,
+correct decompression is not possible. For this routine, we have no idea what the dictionary is,
+so the <tt>Z_NEED_DICT</tt> indication is converted to a <tt>Z_DATA_ERROR</tt>.
+<p>
+<tt>inflate()</tt> can also return <tt>Z_STREAM_ERROR</tt>, which should not be possible here,
+but could be checked for as noted above for <tt>def()</tt>. <tt>Z_BUF_ERROR</tt> does not need to be
+checked for here, for the same reasons noted for <tt>def()</tt>. <tt>Z_STREAM_END</tt> will be
+checked for later.
+<pre><b>
+ ret = inflate(&amp;strm, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ switch (ret) {
+ case Z_NEED_DICT:
+ ret = Z_DATA_ERROR; /* and fall through */
+ case Z_DATA_ERROR:
+ case Z_MEM_ERROR:
+ (void)inflateEnd(&amp;strm);
+ return ret;
+ }
+</b></pre>
+The output of <tt>inflate()</tt> is handled identically to that of <tt>deflate()</tt>.
+<pre><b>
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)inflateEnd(&amp;strm);
+ return Z_ERRNO;
+ }
+</b></pre>
+The inner <tt>do</tt>-loop ends when <tt>inflate()</tt> has no more output as indicated
+by not filling the output buffer, just as for <tt>deflate()</tt>. In this case, we cannot
+assert that <tt>strm.avail_in</tt> will be zero, since the deflate stream may end before the file
+does.
+<pre><b>
+ } while (strm.avail_out == 0);
+</b></pre><!-- -->
+The outer <tt>do</tt>-loop ends when <tt>inflate()</tt> reports that it has reached the
+end of the input <em>zlib</em> stream, has completed the decompression and integrity
+check, and has provided all of the output. This is indicated by the <tt>inflate()</tt>
+return value <tt>Z_STREAM_END</tt>. The inner loop is guaranteed to leave <tt>ret</tt>
+equal to <tt>Z_STREAM_END</tt> if the last chunk of the input file read contained the end
+of the <em>zlib</em> stream. So if the return value is not <tt>Z_STREAM_END</tt>, the
+loop continues to read more input.
+<pre><b>
+ /* done when inflate() says it's done */
+ } while (ret != Z_STREAM_END);
+</b></pre><!-- -->
+At this point, decompression successfully completed, or we broke out of the loop due to no
+more data being available from the input file. If the last <tt>inflate()</tt> return value
+is not <tt>Z_STREAM_END</tt>, then the <em>zlib</em> stream was incomplete and a data error
+is returned. Otherwise, we return with a happy return value. Of course, <tt>inflateEnd()</tt>
+is called first to avoid a memory leak.
+<pre><b>
+ /* clean up and return */
+ (void)inflateEnd(&amp;strm);
+ return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+</b></pre><!-- -->
+That ends the routines that directly use <em>zlib</em>. The following routines make this
+a command-line program by running data through the above routines from <tt>stdin</tt> to
+<tt>stdout</tt>, and handling any errors reported by <tt>def()</tt> or <tt>inf()</tt>.
+<p>
+<tt>zerr()</tt> is used to interpret the possible error codes from <tt>def()</tt>
+and <tt>inf()</tt>, as detailed in their comments above, and print out an error message.
+Note that these are only a subset of the possible return values from <tt>deflate()</tt>
+and <tt>inflate()</tt>.
+<pre><b>
+/* report a zlib or i/o error */
+void zerr(int ret)
+{
+ fputs("zpipe: ", stderr);
+ switch (ret) {
+ case Z_ERRNO:
+ if (ferror(stdin))
+ fputs("error reading stdin\n", stderr);
+ if (ferror(stdout))
+ fputs("error writing stdout\n", stderr);
+ break;
+ case Z_STREAM_ERROR:
+ fputs("invalid compression level\n", stderr);
+ break;
+ case Z_DATA_ERROR:
+ fputs("invalid or incomplete deflate data\n", stderr);
+ break;
+ case Z_MEM_ERROR:
+ fputs("out of memory\n", stderr);
+ break;
+ case Z_VERSION_ERROR:
+ fputs("zlib version mismatch!\n", stderr);
+ }
+}
+</b></pre><!-- -->
+Here is the <tt>main()</tt> routine used to test <tt>def()</tt> and <tt>inf()</tt>. The
+<tt>zpipe</tt> command is simply a compression pipe from <tt>stdin</tt> to <tt>stdout</tt>, if
+no arguments are given, or it is a decompression pipe if <tt>zpipe -d</tt> is used. If any other
+arguments are provided, no compression or decompression is performed. Instead a usage
+message is displayed. Examples are <tt>zpipe < foo.txt > foo.txt.z</tt> to compress, and
+<tt>zpipe -d < foo.txt.z > foo.txt</tt> to decompress.
+<pre><b>
+/* compress or decompress from stdin to stdout */
+int main(int argc, char **argv)
+{
+ int ret;
+
+ /* avoid end-of-line conversions */
+ SET_BINARY_MODE(stdin);
+ SET_BINARY_MODE(stdout);
+
+ /* do compression if no arguments */
+ if (argc == 1) {
+ ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* do decompression if -d specified */
+ else if (argc == 2 &amp;&amp; strcmp(argv[1], "-d") == 0) {
+ ret = inf(stdin, stdout);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* otherwise, report usage */
+ else {
+ fputs("zpipe usage: zpipe [-d] &lt; source &gt; dest\n", stderr);
+ return 1;
+ }
+}
+</b></pre>
+<hr>
+<i>Copyright (c) 2004, 2005 by Mark Adler<br>Last modified 11 December 2005</i>
+</body>
+</html>
diff --git a/compat/zlib/examples/zpipe.c b/compat/zlib/examples/zpipe.c
new file mode 100644
index 0000000..83535d1
--- /dev/null
+++ b/compat/zlib/examples/zpipe.c
@@ -0,0 +1,205 @@
+/* zpipe.c: example of proper use of zlib's inflate() and deflate()
+ Not copyrighted -- provided to the public domain
+ Version 1.4 11 December 2005 Mark Adler */
+
+/* Version history:
+ 1.0 30 Oct 2004 First version
+ 1.1 8 Nov 2004 Add void casting for unused return values
+ Use switch statement for inflate() return values
+ 1.2 9 Nov 2004 Add assertions to document zlib guarantees
+ 1.3 6 Apr 2005 Remove incorrect assertion in inf()
+ 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions
+ Avoid some compiler warnings for input and output buffers
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "zlib.h"
+
+#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
+# include <fcntl.h>
+# include <io.h>
+# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
+#else
+# define SET_BINARY_MODE(file)
+#endif
+
+#define CHUNK 16384
+
+/* Compress from file source to file dest until EOF on source.
+ def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_STREAM_ERROR if an invalid compression
+ level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
+ version of the library linked do not match, or Z_ERRNO if there is
+ an error reading or writing the files. */
+int def(FILE *source, FILE *dest, int level)
+{
+ int ret, flush;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+
+ /* allocate deflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ ret = deflateInit(&strm, level);
+ if (ret != Z_OK)
+ return ret;
+
+ /* compress until end of file */
+ do {
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
+ strm.next_in = in;
+
+ /* run deflate() on input until output buffer not full, finish
+ compression if all of source has been read in */
+ do {
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+ ret = deflate(&strm, flush); /* no bad return value */
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)deflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ } while (strm.avail_out == 0);
+ assert(strm.avail_in == 0); /* all input will be used */
+
+ /* done when last data in file processed */
+ } while (flush != Z_FINISH);
+ assert(ret == Z_STREAM_END); /* stream will be complete */
+
+ /* clean up and return */
+ (void)deflateEnd(&strm);
+ return Z_OK;
+}
+
+/* Decompress from file source to file dest until stream ends or EOF.
+ inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
+ allocated for processing, Z_DATA_ERROR if the deflate data is
+ invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
+ the version of the library linked do not match, or Z_ERRNO if there
+ is an error reading or writing the files. */
+int inf(FILE *source, FILE *dest)
+{
+ int ret;
+ unsigned have;
+ z_stream strm;
+ unsigned char in[CHUNK];
+ unsigned char out[CHUNK];
+
+ /* allocate inflate state */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit(&strm);
+ if (ret != Z_OK)
+ return ret;
+
+ /* decompress until deflate stream ends or end of file */
+ do {
+ strm.avail_in = fread(in, 1, CHUNK, source);
+ if (ferror(source)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ if (strm.avail_in == 0)
+ break;
+ strm.next_in = in;
+
+ /* run inflate() on input until output buffer not full */
+ do {
+ strm.avail_out = CHUNK;
+ strm.next_out = out;
+ ret = inflate(&strm, Z_NO_FLUSH);
+ assert(ret != Z_STREAM_ERROR); /* state not clobbered */
+ switch (ret) {
+ case Z_NEED_DICT:
+ ret = Z_DATA_ERROR; /* and fall through */
+ case Z_DATA_ERROR:
+ case Z_MEM_ERROR:
+ (void)inflateEnd(&strm);
+ return ret;
+ }
+ have = CHUNK - strm.avail_out;
+ if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
+ (void)inflateEnd(&strm);
+ return Z_ERRNO;
+ }
+ } while (strm.avail_out == 0);
+
+ /* done when inflate() says it's done */
+ } while (ret != Z_STREAM_END);
+
+ /* clean up and return */
+ (void)inflateEnd(&strm);
+ return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
+}
+
+/* report a zlib or i/o error */
+void zerr(int ret)
+{
+ fputs("zpipe: ", stderr);
+ switch (ret) {
+ case Z_ERRNO:
+ if (ferror(stdin))
+ fputs("error reading stdin\n", stderr);
+ if (ferror(stdout))
+ fputs("error writing stdout\n", stderr);
+ break;
+ case Z_STREAM_ERROR:
+ fputs("invalid compression level\n", stderr);
+ break;
+ case Z_DATA_ERROR:
+ fputs("invalid or incomplete deflate data\n", stderr);
+ break;
+ case Z_MEM_ERROR:
+ fputs("out of memory\n", stderr);
+ break;
+ case Z_VERSION_ERROR:
+ fputs("zlib version mismatch!\n", stderr);
+ }
+}
+
+/* compress or decompress from stdin to stdout */
+int main(int argc, char **argv)
+{
+ int ret;
+
+ /* avoid end-of-line conversions */
+ SET_BINARY_MODE(stdin);
+ SET_BINARY_MODE(stdout);
+
+ /* do compression if no arguments */
+ if (argc == 1) {
+ ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* do decompression if -d specified */
+ else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
+ ret = inf(stdin, stdout);
+ if (ret != Z_OK)
+ zerr(ret);
+ return ret;
+ }
+
+ /* otherwise, report usage */
+ else {
+ fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
+ return 1;
+ }
+}
diff --git a/compat/zlib/examples/zran.c b/compat/zlib/examples/zran.c
new file mode 100644
index 0000000..278f9ad
--- /dev/null
+++ b/compat/zlib/examples/zran.c
@@ -0,0 +1,409 @@
+/* zran.c -- example of zlib/gzip stream indexing and random access
+ * Copyright (C) 2005, 2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ Version 1.1 29 Sep 2012 Mark Adler */
+
+/* Version History:
+ 1.0 29 May 2005 First version
+ 1.1 29 Sep 2012 Fix memory reallocation error
+ */
+
+/* Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary()
+ for random access of a compressed file. A file containing a zlib or gzip
+ stream is provided on the command line. The compressed stream is decoded in
+ its entirety, and an index built with access points about every SPAN bytes
+ in the uncompressed output. The compressed file is left open, and can then
+ be read randomly, having to decompress on the average SPAN/2 uncompressed
+ bytes before getting to the desired block of data.
+
+ An access point can be created at the start of any deflate block, by saving
+ the starting file offset and bit of that block, and the 32K bytes of
+ uncompressed data that precede that block. Also the uncompressed offset of
+ that block is saved to provide a referece for locating a desired starting
+ point in the uncompressed stream. build_index() works by decompressing the
+ input zlib or gzip stream a block at a time, and at the end of each block
+ deciding if enough uncompressed data has gone by to justify the creation of
+ a new access point. If so, that point is saved in a data structure that
+ grows as needed to accommodate the points.
+
+ To use the index, an offset in the uncompressed data is provided, for which
+ the latest accees point at or preceding that offset is located in the index.
+ The input file is positioned to the specified location in the index, and if
+ necessary the first few bits of the compressed data is read from the file.
+ inflate is initialized with those bits and the 32K of uncompressed data, and
+ the decompression then proceeds until the desired offset in the file is
+ reached. Then the decompression continues to read the desired uncompressed
+ data from the file.
+
+ Another approach would be to generate the index on demand. In that case,
+ requests for random access reads from the compressed data would try to use
+ the index, but if a read far enough past the end of the index is required,
+ then further index entries would be generated and added.
+
+ There is some fair bit of overhead to starting inflation for the random
+ access, mainly copying the 32K byte dictionary. So if small pieces of the
+ file are being accessed, it would make sense to implement a cache to hold
+ some lookahead and avoid many calls to extract() for small lengths.
+
+ Another way to build an index would be to use inflateCopy(). That would
+ not be constrained to have access points at block boundaries, but requires
+ more memory per access point, and also cannot be saved to file due to the
+ use of pointers in the state. The approach here allows for storage of the
+ index in a file.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "zlib.h"
+
+#define local static
+
+#define SPAN 1048576L /* desired distance between access points */
+#define WINSIZE 32768U /* sliding window size */
+#define CHUNK 16384 /* file input buffer size */
+
+/* access point entry */
+struct point {
+ off_t out; /* corresponding offset in uncompressed data */
+ off_t in; /* offset in input file of first full byte */
+ int bits; /* number of bits (1-7) from byte at in - 1, or 0 */
+ unsigned char window[WINSIZE]; /* preceding 32K of uncompressed data */
+};
+
+/* access point list */
+struct access {
+ int have; /* number of list entries filled in */
+ int size; /* number of list entries allocated */
+ struct point *list; /* allocated list */
+};
+
+/* Deallocate an index built by build_index() */
+local void free_index(struct access *index)
+{
+ if (index != NULL) {
+ free(index->list);
+ free(index);
+ }
+}
+
+/* Add an entry to the access point list. If out of memory, deallocate the
+ existing list and return NULL. */
+local struct access *addpoint(struct access *index, int bits,
+ off_t in, off_t out, unsigned left, unsigned char *window)
+{
+ struct point *next;
+
+ /* if list is empty, create it (start with eight points) */
+ if (index == NULL) {
+ index = malloc(sizeof(struct access));
+ if (index == NULL) return NULL;
+ index->list = malloc(sizeof(struct point) << 3);
+ if (index->list == NULL) {
+ free(index);
+ return NULL;
+ }
+ index->size = 8;
+ index->have = 0;
+ }
+
+ /* if list is full, make it bigger */
+ else if (index->have == index->size) {
+ index->size <<= 1;
+ next = realloc(index->list, sizeof(struct point) * index->size);
+ if (next == NULL) {
+ free_index(index);
+ return NULL;
+ }
+ index->list = next;
+ }
+
+ /* fill in entry and increment how many we have */
+ next = index->list + index->have;
+ next->bits = bits;
+ next->in = in;
+ next->out = out;
+ if (left)
+ memcpy(next->window, window + WINSIZE - left, left);
+ if (left < WINSIZE)
+ memcpy(next->window + left, window, WINSIZE - left);
+ index->have++;
+
+ /* return list, possibly reallocated */
+ return index;
+}
+
+/* Make one entire pass through the compressed stream and build an index, with
+ access points about every span bytes of uncompressed output -- span is
+ chosen to balance the speed of random access against the memory requirements
+ of the list, about 32K bytes per access point. Note that data after the end
+ of the first zlib or gzip stream in the file is ignored. build_index()
+ returns the number of access points on success (>= 1), Z_MEM_ERROR for out
+ of memory, Z_DATA_ERROR for an error in the input file, or Z_ERRNO for a
+ file read error. On success, *built points to the resulting index. */
+local int build_index(FILE *in, off_t span, struct access **built)
+{
+ int ret;
+ off_t totin, totout; /* our own total counters to avoid 4GB limit */
+ off_t last; /* totout value of last access point */
+ struct access *index; /* access points being generated */
+ z_stream strm;
+ unsigned char input[CHUNK];
+ unsigned char window[WINSIZE];
+
+ /* initialize inflate */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, 47); /* automatic zlib or gzip decoding */
+ if (ret != Z_OK)
+ return ret;
+
+ /* inflate the input, maintain a sliding window, and build an index -- this
+ also validates the integrity of the compressed data using the check
+ information at the end of the gzip or zlib stream */
+ totin = totout = last = 0;
+ index = NULL; /* will be allocated by first addpoint() */
+ strm.avail_out = 0;
+ do {
+ /* get some compressed data from input file */
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto build_index_error;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto build_index_error;
+ }
+ strm.next_in = input;
+
+ /* process all of that, or until end of stream */
+ do {
+ /* reset sliding window if necessary */
+ if (strm.avail_out == 0) {
+ strm.avail_out = WINSIZE;
+ strm.next_out = window;
+ }
+
+ /* inflate until out of input, output, or at end of block --
+ update the total input and output counters */
+ totin += strm.avail_in;
+ totout += strm.avail_out;
+ ret = inflate(&strm, Z_BLOCK); /* return at end of block */
+ totin -= strm.avail_in;
+ totout -= strm.avail_out;
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto build_index_error;
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* if at end of block, consider adding an index entry (note that if
+ data_type indicates an end-of-block, then all of the
+ uncompressed data from that block has been delivered, and none
+ of the compressed data after that block has been consumed,
+ except for up to seven bits) -- the totout == 0 provides an
+ entry point after the zlib or gzip header, and assures that the
+ index always has at least one access point; we avoid creating an
+ access point after the last block by checking bit 6 of data_type
+ */
+ if ((strm.data_type & 128) && !(strm.data_type & 64) &&
+ (totout == 0 || totout - last > span)) {
+ index = addpoint(index, strm.data_type & 7, totin,
+ totout, strm.avail_out, window);
+ if (index == NULL) {
+ ret = Z_MEM_ERROR;
+ goto build_index_error;
+ }
+ last = totout;
+ }
+ } while (strm.avail_in != 0);
+ } while (ret != Z_STREAM_END);
+
+ /* clean up and return index (release unused entries in list) */
+ (void)inflateEnd(&strm);
+ index->list = realloc(index->list, sizeof(struct point) * index->have);
+ index->size = index->have;
+ *built = index;
+ return index->size;
+
+ /* return error */
+ build_index_error:
+ (void)inflateEnd(&strm);
+ if (index != NULL)
+ free_index(index);
+ return ret;
+}
+
+/* Use the index to read len bytes from offset into buf, return bytes read or
+ negative for error (Z_DATA_ERROR or Z_MEM_ERROR). If data is requested past
+ the end of the uncompressed data, then extract() will return a value less
+ than len, indicating how much as actually read into buf. This function
+ should not return a data error unless the file was modified since the index
+ was generated. extract() may also return Z_ERRNO if there is an error on
+ reading or seeking the input file. */
+local int extract(FILE *in, struct access *index, off_t offset,
+ unsigned char *buf, int len)
+{
+ int ret, skip;
+ z_stream strm;
+ struct point *here;
+ unsigned char input[CHUNK];
+ unsigned char discard[WINSIZE];
+
+ /* proceed only if something reasonable to do */
+ if (len < 0)
+ return 0;
+
+ /* find where in stream to start */
+ here = index->list;
+ ret = index->have;
+ while (--ret && here[1].out <= offset)
+ here++;
+
+ /* initialize file and inflate state to start there */
+ strm.zalloc = Z_NULL;
+ strm.zfree = Z_NULL;
+ strm.opaque = Z_NULL;
+ strm.avail_in = 0;
+ strm.next_in = Z_NULL;
+ ret = inflateInit2(&strm, -15); /* raw inflate */
+ if (ret != Z_OK)
+ return ret;
+ ret = fseeko(in, here->in - (here->bits ? 1 : 0), SEEK_SET);
+ if (ret == -1)
+ goto extract_ret;
+ if (here->bits) {
+ ret = getc(in);
+ if (ret == -1) {
+ ret = ferror(in) ? Z_ERRNO : Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ (void)inflatePrime(&strm, here->bits, ret >> (8 - here->bits));
+ }
+ (void)inflateSetDictionary(&strm, here->window, WINSIZE);
+
+ /* skip uncompressed bytes until offset reached, then satisfy request */
+ offset -= here->out;
+ strm.avail_in = 0;
+ skip = 1; /* while skipping to offset */
+ do {
+ /* define where to put uncompressed data, and how much */
+ if (offset == 0 && skip) { /* at offset now */
+ strm.avail_out = len;
+ strm.next_out = buf;
+ skip = 0; /* only do this once */
+ }
+ if (offset > WINSIZE) { /* skip WINSIZE bytes */
+ strm.avail_out = WINSIZE;
+ strm.next_out = discard;
+ offset -= WINSIZE;
+ }
+ else if (offset != 0) { /* last skip */
+ strm.avail_out = (unsigned)offset;
+ strm.next_out = discard;
+ offset = 0;
+ }
+
+ /* uncompress until avail_out filled, or end of stream */
+ do {
+ if (strm.avail_in == 0) {
+ strm.avail_in = fread(input, 1, CHUNK, in);
+ if (ferror(in)) {
+ ret = Z_ERRNO;
+ goto extract_ret;
+ }
+ if (strm.avail_in == 0) {
+ ret = Z_DATA_ERROR;
+ goto extract_ret;
+ }
+ strm.next_in = input;
+ }
+ ret = inflate(&strm, Z_NO_FLUSH); /* normal inflate */
+ if (ret == Z_NEED_DICT)
+ ret = Z_DATA_ERROR;
+ if (ret == Z_MEM_ERROR || ret == Z_DATA_ERROR)
+ goto extract_ret;
+ if (ret == Z_STREAM_END)
+ break;
+ } while (strm.avail_out != 0);
+
+ /* if reach end of stream, then don't keep trying to get more */
+ if (ret == Z_STREAM_END)
+ break;
+
+ /* do until offset reached and requested data read, or stream ends */
+ } while (skip);
+
+ /* compute number of uncompressed bytes read after offset */
+ ret = skip ? 0 : len - strm.avail_out;
+
+ /* clean up and return bytes read or error */
+ extract_ret:
+ (void)inflateEnd(&strm);
+ return ret;
+}
+
+/* Demonstrate the use of build_index() and extract() by processing the file
+ provided on the command line, and the extracting 16K from about 2/3rds of
+ the way through the uncompressed output, and writing that to stdout. */
+int main(int argc, char **argv)
+{
+ int len;
+ off_t offset;
+ FILE *in;
+ struct access *index = NULL;
+ unsigned char buf[CHUNK];
+
+ /* open input file */
+ if (argc != 2) {
+ fprintf(stderr, "usage: zran file.gz\n");
+ return 1;
+ }
+ in = fopen(argv[1], "rb");
+ if (in == NULL) {
+ fprintf(stderr, "zran: could not open %s for reading\n", argv[1]);
+ return 1;
+ }
+
+ /* build index */
+ len = build_index(in, SPAN, &index);
+ if (len < 0) {
+ fclose(in);
+ switch (len) {
+ case Z_MEM_ERROR:
+ fprintf(stderr, "zran: out of memory\n");
+ break;
+ case Z_DATA_ERROR:
+ fprintf(stderr, "zran: compressed data error in %s\n", argv[1]);
+ break;
+ case Z_ERRNO:
+ fprintf(stderr, "zran: read error on %s\n", argv[1]);
+ break;
+ default:
+ fprintf(stderr, "zran: error %d while building index\n", len);
+ }
+ return 1;
+ }
+ fprintf(stderr, "zran: built index with %d access points\n", len);
+
+ /* use index by reading some bytes from an arbitrary offset */
+ offset = (index->list[index->have - 1].out << 1) / 3;
+ len = extract(in, index, offset, buf, CHUNK);
+ if (len < 0)
+ fprintf(stderr, "zran: extraction failed: %s error\n",
+ len == Z_MEM_ERROR ? "out of memory" : "input corrupted");
+ else {
+ fwrite(buf, 1, len, stdout);
+ fprintf(stderr, "zran: extracted %d bytes at %llu\n", len, offset);
+ }
+
+ /* clean up and exit */
+ free_index(index);
+ fclose(in);
+ return 0;
+}
diff --git a/compat/zlib/gzclose.c b/compat/zlib/gzclose.c
new file mode 100644
index 0000000..caeb99a
--- /dev/null
+++ b/compat/zlib/gzclose.c
@@ -0,0 +1,25 @@
+/* gzclose.c -- zlib gzclose() function
+ * Copyright (C) 2004, 2010 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* gzclose() is in a separate file so that it is linked in only if it is used.
+ That way the other gzclose functions can be used instead to avoid linking in
+ unneeded compression or decompression routines. */
+int ZEXPORT gzclose(file)
+ gzFile file;
+{
+#ifndef NO_GZCOMPRESS
+ gz_statep state;
+
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file);
+#else
+ return gzclose_r(file);
+#endif
+}
diff --git a/compat/zlib/gzguts.h b/compat/zlib/gzguts.h
new file mode 100644
index 0000000..d87659d
--- /dev/null
+++ b/compat/zlib/gzguts.h
@@ -0,0 +1,209 @@
+/* gzguts.h -- zlib internal header definitions for gz* operations
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#ifdef _LARGEFILE64_SOURCE
+# ifndef _LARGEFILE_SOURCE
+# define _LARGEFILE_SOURCE 1
+# endif
+# ifdef _FILE_OFFSET_BITS
+# undef _FILE_OFFSET_BITS
+# endif
+#endif
+
+#ifdef HAVE_HIDDEN
+# define ZLIB_INTERNAL __attribute__((visibility ("hidden")))
+#else
+# define ZLIB_INTERNAL
+#endif
+
+#include <stdio.h>
+#include "zlib.h"
+#ifdef STDC
+# include <string.h>
+# include <stdlib.h>
+# include <limits.h>
+#endif
+#include <fcntl.h>
+
+#ifdef _WIN32
+# include <stddef.h>
+#endif
+
+#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32)
+# include <io.h>
+#endif
+
+#ifdef WINAPI_FAMILY
+# define open _open
+# define read _read
+# define write _write
+# define close _close
+#endif
+
+#ifdef NO_DEFLATE /* for compatibility with old definition */
+# define NO_GZCOMPRESS
+#endif
+
+#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(__CYGWIN__)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410)
+# ifndef HAVE_VSNPRINTF
+# define HAVE_VSNPRINTF
+# endif
+#endif
+
+#ifndef HAVE_VSNPRINTF
+# ifdef MSDOS
+/* vsnprintf may exist on some MS-DOS compilers (DJGPP?),
+ but for now we just assume it doesn't. */
+# define NO_vsnprintf
+# endif
+# ifdef __TURBOC__
+# define NO_vsnprintf
+# endif
+# ifdef WIN32
+/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */
+# if !defined(vsnprintf) && !defined(NO_vsnprintf)
+# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 )
+# define vsnprintf _vsnprintf
+# endif
+# endif
+# endif
+# ifdef __SASC
+# define NO_vsnprintf
+# endif
+# ifdef VMS
+# define NO_vsnprintf
+# endif
+# ifdef __OS400__
+# define NO_vsnprintf
+# endif
+# ifdef __MVS__
+# define NO_vsnprintf
+# endif
+#endif
+
+/* unlike snprintf (which is required in C99, yet still not supported by
+ Microsoft more than a decade later!), _snprintf does not guarantee null
+ termination of the result -- however this is only used in gzlib.c where
+ the result is assured to fit in the space provided */
+#ifdef _MSC_VER
+# define snprintf _snprintf
+#endif
+
+#ifndef local
+# define local static
+#endif
+/* compile with -Dlocal if your debugger can't find static symbols */
+
+/* gz* functions always use library allocation functions */
+#ifndef STDC
+ extern voidp malloc OF((uInt size));
+ extern void free OF((voidpf ptr));
+#endif
+
+/* get errno and strerror definition */
+#if defined UNDER_CE
+# include <windows.h>
+# define zstrerror() gz_strwinerror((DWORD)GetLastError())
+#else
+# ifndef NO_STRERROR
+# include <errno.h>
+# define zstrerror() strerror(errno)
+# else
+# define zstrerror() "stdio error (consult errno)"
+# endif
+#endif
+
+/* provide prototypes for these when building zlib without LFS */
+#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0
+ ZEXTERN gzFile ZEXPORT gzopen64 OF((const char *, const char *));
+ ZEXTERN z_off64_t ZEXPORT gzseek64 OF((gzFile, z_off64_t, int));
+ ZEXTERN z_off64_t ZEXPORT gztell64 OF((gzFile));
+ ZEXTERN z_off64_t ZEXPORT gzoffset64 OF((gzFile));
+#endif
+
+/* default memLevel */
+#if MAX_MEM_LEVEL >= 8
+# define DEF_MEM_LEVEL 8
+#else
+# define DEF_MEM_LEVEL MAX_MEM_LEVEL
+#endif
+
+/* default i/o buffer size -- double this for output when reading (this and
+ twice this must be able to fit in an unsigned type) */
+#define GZBUFSIZE 8192
+
+/* gzip modes, also provide a little integrity check on the passed structure */
+#define GZ_NONE 0
+#define GZ_READ 7247
+#define GZ_WRITE 31153
+#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */
+
+/* values for gz_state how */
+#define LOOK 0 /* look for a gzip header */
+#define COPY 1 /* copy input directly */
+#define GZIP 2 /* decompress a gzip stream */
+
+/* internal gzip file state data structure */
+typedef struct {
+ /* exposed contents for gzgetc() macro */
+ struct gzFile_s x; /* "x" for exposed */
+ /* x.have: number of bytes available at x.next */
+ /* x.next: next output data to deliver or write */
+ /* x.pos: current position in uncompressed data */
+ /* used for both reading and writing */
+ int mode; /* see gzip modes above */
+ int fd; /* file descriptor */
+ char *path; /* path or fd for error messages */
+ unsigned size; /* buffer size, zero if not allocated yet */
+ unsigned want; /* requested buffer size, default is GZBUFSIZE */
+ unsigned char *in; /* input buffer */
+ unsigned char *out; /* output buffer (double-sized when reading) */
+ int direct; /* 0 if processing gzip, 1 if transparent */
+ /* just for reading */
+ int how; /* 0: get header, 1: copy, 2: decompress */
+ z_off64_t start; /* where the gzip data started, for rewinding */
+ int eof; /* true if end of input file reached */
+ int past; /* true if read requested past end */
+ /* just for writing */
+ int level; /* compression level */
+ int strategy; /* compression strategy */
+ /* seek request */
+ z_off64_t skip; /* amount to skip (already rewound if backwards) */
+ int seek; /* true if seek request pending */
+ /* error information */
+ int err; /* error code */
+ char *msg; /* error message */
+ /* zlib inflate or deflate stream */
+ z_stream strm; /* stream structure in-place (not a pointer) */
+} gz_state;
+typedef gz_state FAR *gz_statep;
+
+/* shared functions */
+void ZLIB_INTERNAL gz_error OF((gz_statep, int, const char *));
+#if defined UNDER_CE
+char ZLIB_INTERNAL *gz_strwinerror OF((DWORD error));
+#endif
+
+/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t
+ value -- needed when comparing unsigned to z_off64_t, which is signed
+ (possible z_off64_t types off_t, off64_t, and long are all signed) */
+#ifdef INT_MAX
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX)
+#else
+unsigned ZLIB_INTERNAL gz_intmax OF((void));
+# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax())
+#endif
diff --git a/compat/zlib/gzlib.c b/compat/zlib/gzlib.c
new file mode 100644
index 0000000..fae202e
--- /dev/null
+++ b/compat/zlib/gzlib.c
@@ -0,0 +1,634 @@
+/* gzlib.c -- zlib functions common to reading and writing gzip files
+ * Copyright (C) 2004, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+#if defined(_WIN32) && !defined(__BORLANDC__)
+# define LSEEK _lseeki64
+#else
+#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0
+# define LSEEK lseek64
+#else
+# define LSEEK lseek
+#endif
+#endif
+
+/* Local functions */
+local void gz_reset OF((gz_statep));
+local gzFile gz_open OF((const void *, int, const char *));
+
+#if defined UNDER_CE
+
+/* Map the Windows error number in ERROR to a locale-dependent error message
+ string and return a pointer to it. Typically, the values for ERROR come
+ from GetLastError.
+
+ The string pointed to shall not be modified by the application, but may be
+ overwritten by a subsequent call to gz_strwinerror
+
+ The gz_strwinerror function does not change the current setting of
+ GetLastError. */
+char ZLIB_INTERNAL *gz_strwinerror (error)
+ DWORD error;
+{
+ static char buf[1024];
+
+ wchar_t *msgbuf;
+ DWORD lasterr = GetLastError();
+ DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM
+ | FORMAT_MESSAGE_ALLOCATE_BUFFER,
+ NULL,
+ error,
+ 0, /* Default language */
+ (LPVOID)&msgbuf,
+ 0,
+ NULL);
+ if (chars != 0) {
+ /* If there is an \r\n appended, zap it. */
+ if (chars >= 2
+ && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') {
+ chars -= 2;
+ msgbuf[chars] = 0;
+ }
+
+ if (chars > sizeof (buf) - 1) {
+ chars = sizeof (buf) - 1;
+ msgbuf[chars] = 0;
+ }
+
+ wcstombs(buf, msgbuf, chars + 1);
+ LocalFree(msgbuf);
+ }
+ else {
+ sprintf(buf, "unknown win32 error (%ld)", error);
+ }
+
+ SetLastError(lasterr);
+ return buf;
+}
+
+#endif /* UNDER_CE */
+
+/* Reset gzip file state */
+local void gz_reset(state)
+ gz_statep state;
+{
+ state->x.have = 0; /* no output data available */
+ if (state->mode == GZ_READ) { /* for reading ... */
+ state->eof = 0; /* not at end of file */
+ state->past = 0; /* have not read past end yet */
+ state->how = LOOK; /* look for gzip header */
+ }
+ state->seek = 0; /* no seek request pending */
+ gz_error(state, Z_OK, NULL); /* clear error */
+ state->x.pos = 0; /* no uncompressed data yet */
+ state->strm.avail_in = 0; /* no input data yet */
+}
+
+/* Open a gzip file either by name or file descriptor. */
+local gzFile gz_open(path, fd, mode)
+ const void *path;
+ int fd;
+ const char *mode;
+{
+ gz_statep state;
+ size_t len;
+ int oflag;
+#ifdef O_CLOEXEC
+ int cloexec = 0;
+#endif
+#ifdef O_EXCL
+ int exclusive = 0;
+#endif
+
+ /* check input */
+ if (path == NULL)
+ return NULL;
+
+ /* allocate gzFile structure to return */
+ state = (gz_statep)malloc(sizeof(gz_state));
+ if (state == NULL)
+ return NULL;
+ state->size = 0; /* no buffers allocated yet */
+ state->want = GZBUFSIZE; /* requested buffer size */
+ state->msg = NULL; /* no error message yet */
+
+ /* interpret mode */
+ state->mode = GZ_NONE;
+ state->level = Z_DEFAULT_COMPRESSION;
+ state->strategy = Z_DEFAULT_STRATEGY;
+ state->direct = 0;
+ while (*mode) {
+ if (*mode >= '0' && *mode <= '9')
+ state->level = *mode - '0';
+ else
+ switch (*mode) {
+ case 'r':
+ state->mode = GZ_READ;
+ break;
+#ifndef NO_GZCOMPRESS
+ case 'w':
+ state->mode = GZ_WRITE;
+ break;
+ case 'a':
+ state->mode = GZ_APPEND;
+ break;
+#endif
+ case '+': /* can't read and write at the same time */
+ free(state);
+ return NULL;
+ case 'b': /* ignore -- will request binary anyway */
+ break;
+#ifdef O_CLOEXEC
+ case 'e':
+ cloexec = 1;
+ break;
+#endif
+#ifdef O_EXCL
+ case 'x':
+ exclusive = 1;
+ break;
+#endif
+ case 'f':
+ state->strategy = Z_FILTERED;
+ break;
+ case 'h':
+ state->strategy = Z_HUFFMAN_ONLY;
+ break;
+ case 'R':
+ state->strategy = Z_RLE;
+ break;
+ case 'F':
+ state->strategy = Z_FIXED;
+ break;
+ case 'T':
+ state->direct = 1;
+ break;
+ default: /* could consider as an error, but just ignore */
+ ;
+ }
+ mode++;
+ }
+
+ /* must provide an "r", "w", or "a" */
+ if (state->mode == GZ_NONE) {
+ free(state);
+ return NULL;
+ }
+
+ /* can't force transparent read */
+ if (state->mode == GZ_READ) {
+ if (state->direct) {
+ free(state);
+ return NULL;
+ }
+ state->direct = 1; /* for empty file */
+ }
+
+ /* save the path name for error messages */
+#ifdef _WIN32
+ if (fd == -2) {
+ len = wcstombs(NULL, path, 0);
+ if (len == (size_t)-1)
+ len = 0;
+ }
+ else
+#endif
+ len = strlen((const char *)path);
+ state->path = (char *)malloc(len + 1);
+ if (state->path == NULL) {
+ free(state);
+ return NULL;
+ }
+#ifdef _WIN32
+ if (fd == -2)
+ if (len)
+ wcstombs(state->path, path, len + 1);
+ else
+ *(state->path) = 0;
+ else
+#endif
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(state->path, len + 1, "%s", (const char *)path);
+#else
+ strcpy(state->path, path);
+#endif
+
+ /* compute the flags for open() */
+ oflag =
+#ifdef O_LARGEFILE
+ O_LARGEFILE |
+#endif
+#ifdef O_BINARY
+ O_BINARY |
+#endif
+#ifdef O_CLOEXEC
+ (cloexec ? O_CLOEXEC : 0) |
+#endif
+ (state->mode == GZ_READ ?
+ O_RDONLY :
+ (O_WRONLY | O_CREAT |
+#ifdef O_EXCL
+ (exclusive ? O_EXCL : 0) |
+#endif
+ (state->mode == GZ_WRITE ?
+ O_TRUNC :
+ O_APPEND)));
+
+ /* open the file with the appropriate flags (or just use fd) */
+ state->fd = fd > -1 ? fd : (
+#ifdef _WIN32
+ fd == -2 ? _wopen(path, oflag, 0666) :
+#endif
+ open((const char *)path, oflag, 0666));
+ if (state->fd == -1) {
+ free(state->path);
+ free(state);
+ return NULL;
+ }
+ if (state->mode == GZ_APPEND)
+ state->mode = GZ_WRITE; /* simplify later checks */
+
+ /* save the current position for rewinding (only if reading) */
+ if (state->mode == GZ_READ) {
+ state->start = LSEEK(state->fd, 0, SEEK_CUR);
+ if (state->start == -1) state->start = 0;
+ }
+
+ /* initialize stream */
+ gz_reset(state);
+
+ /* return stream */
+ return (gzFile)state;
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzopen64(path, mode)
+ const char *path;
+ const char *mode;
+{
+ return gz_open(path, -1, mode);
+}
+
+/* -- see zlib.h -- */
+gzFile ZEXPORT gzdopen(fd, mode)
+ int fd;
+ const char *mode;
+{
+ char *path; /* identifier for error messages */
+ gzFile gz;
+
+ if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL)
+ return NULL;
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(path, 7 + 3 * sizeof(int), "<fd:%d>", fd); /* for debugging */
+#else
+ sprintf(path, "<fd:%d>", fd); /* for debugging */
+#endif
+ gz = gz_open(path, fd, mode);
+ free(path);
+ return gz;
+}
+
+/* -- see zlib.h -- */
+#ifdef _WIN32
+gzFile ZEXPORT gzopen_w(path, mode)
+ const wchar_t *path;
+ const char *mode;
+{
+ return gz_open(path, -2, mode);
+}
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzbuffer(file, size)
+ gzFile file;
+ unsigned size;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* make sure we haven't already allocated memory */
+ if (state->size != 0)
+ return -1;
+
+ /* check and set requested size */
+ if (size < 2)
+ size = 2; /* need two bytes to check magic header */
+ state->want = size;
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzrewind(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* back up and start over */
+ if (LSEEK(state->fd, state->start, SEEK_SET) == -1)
+ return -1;
+ gz_reset(state);
+ return 0;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzseek64(file, offset, whence)
+ gzFile file;
+ z_off64_t offset;
+ int whence;
+{
+ unsigned n;
+ z_off64_t ret;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* check that there's no error */
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+
+ /* can only seek from start or relative to current position */
+ if (whence != SEEK_SET && whence != SEEK_CUR)
+ return -1;
+
+ /* normalize offset to a SEEK_CUR specification */
+ if (whence == SEEK_SET)
+ offset -= state->x.pos;
+ else if (state->seek)
+ offset += state->skip;
+ state->seek = 0;
+
+ /* if within raw area while reading, just go there */
+ if (state->mode == GZ_READ && state->how == COPY &&
+ state->x.pos + offset >= 0) {
+ ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR);
+ if (ret == -1)
+ return -1;
+ state->x.have = 0;
+ state->eof = 0;
+ state->past = 0;
+ state->seek = 0;
+ gz_error(state, Z_OK, NULL);
+ state->strm.avail_in = 0;
+ state->x.pos += offset;
+ return state->x.pos;
+ }
+
+ /* calculate skip amount, rewinding if needed for back seek when reading */
+ if (offset < 0) {
+ if (state->mode != GZ_READ) /* writing -- can't go backwards */
+ return -1;
+ offset += state->x.pos;
+ if (offset < 0) /* before start of file! */
+ return -1;
+ if (gzrewind(file) == -1) /* rewind, then skip to offset */
+ return -1;
+ }
+
+ /* if reading, skip what's in output buffer (one less gzgetc() check) */
+ if (state->mode == GZ_READ) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ?
+ (unsigned)offset : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ offset -= n;
+ }
+
+ /* request skip (if not zero) */
+ if (offset) {
+ state->seek = 1;
+ state->skip = offset;
+ }
+ return state->x.pos + offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzseek(file, offset, whence)
+ gzFile file;
+ z_off_t offset;
+ int whence;
+{
+ z_off64_t ret;
+
+ ret = gzseek64(file, (z_off64_t)offset, whence);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gztell64(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* return position */
+ return state->x.pos + (state->seek ? state->skip : 0);
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gztell(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gztell64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+z_off64_t ZEXPORT gzoffset64(file)
+ gzFile file;
+{
+ z_off64_t offset;
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return -1;
+
+ /* compute and return effective offset in file */
+ offset = LSEEK(state->fd, 0, SEEK_CUR);
+ if (offset == -1)
+ return -1;
+ if (state->mode == GZ_READ) /* reading */
+ offset -= state->strm.avail_in; /* don't count buffered input */
+ return offset;
+}
+
+/* -- see zlib.h -- */
+z_off_t ZEXPORT gzoffset(file)
+ gzFile file;
+{
+ z_off64_t ret;
+
+ ret = gzoffset64(file);
+ return ret == (z_off_t)ret ? (z_off_t)ret : -1;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzeof(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return 0;
+
+ /* return end-of-file state */
+ return state->mode == GZ_READ ? state->past : 0;
+}
+
+/* -- see zlib.h -- */
+const char * ZEXPORT gzerror(file, errnum)
+ gzFile file;
+ int *errnum;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return NULL;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return NULL;
+
+ /* return error information */
+ if (errnum != NULL)
+ *errnum = state->err;
+ return state->err == Z_MEM_ERROR ? "out of memory" :
+ (state->msg == NULL ? "" : state->msg);
+}
+
+/* -- see zlib.h -- */
+void ZEXPORT gzclearerr(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure and check integrity */
+ if (file == NULL)
+ return;
+ state = (gz_statep)file;
+ if (state->mode != GZ_READ && state->mode != GZ_WRITE)
+ return;
+
+ /* clear error and end-of-file */
+ if (state->mode == GZ_READ) {
+ state->eof = 0;
+ state->past = 0;
+ }
+ gz_error(state, Z_OK, NULL);
+}
+
+/* Create an error message in allocated memory and set state->err and
+ state->msg accordingly. Free any previous error message already there. Do
+ not try to free or allocate space if the error is Z_MEM_ERROR (out of
+ memory). Simply save the error message as a static string. If there is an
+ allocation failure constructing the error message, then convert the error to
+ out of memory. */
+void ZLIB_INTERNAL gz_error(state, err, msg)
+ gz_statep state;
+ int err;
+ const char *msg;
+{
+ /* free previously allocated message and clear */
+ if (state->msg != NULL) {
+ if (state->err != Z_MEM_ERROR)
+ free(state->msg);
+ state->msg = NULL;
+ }
+
+ /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */
+ if (err != Z_OK && err != Z_BUF_ERROR)
+ state->x.have = 0;
+
+ /* set error code, and if no message, then done */
+ state->err = err;
+ if (msg == NULL)
+ return;
+
+ /* for an out of memory error, return literal string when requested */
+ if (err == Z_MEM_ERROR)
+ return;
+
+ /* construct error message with path */
+ if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) ==
+ NULL) {
+ state->err = Z_MEM_ERROR;
+ return;
+ }
+#if !defined(NO_snprintf) && !defined(NO_vsnprintf)
+ snprintf(state->msg, strlen(state->path) + strlen(msg) + 3,
+ "%s%s%s", state->path, ": ", msg);
+#else
+ strcpy(state->msg, state->path);
+ strcat(state->msg, ": ");
+ strcat(state->msg, msg);
+#endif
+ return;
+}
+
+#ifndef INT_MAX
+/* portably return maximum value for an int (when limits.h presumed not
+ available) -- we need to do this to cover cases where 2's complement not
+ used, since C standard permits 1's complement and sign-bit representations,
+ otherwise we could just use ((unsigned)-1) >> 1 */
+unsigned ZLIB_INTERNAL gz_intmax()
+{
+ unsigned p, q;
+
+ p = 1;
+ do {
+ q = p;
+ p <<= 1;
+ p++;
+ } while (p > q);
+ return q >> 1;
+}
+#endif
diff --git a/compat/zlib/gzread.c b/compat/zlib/gzread.c
new file mode 100644
index 0000000..bf4538e
--- /dev/null
+++ b/compat/zlib/gzread.c
@@ -0,0 +1,594 @@
+/* gzread.c -- zlib functions for reading gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_load OF((gz_statep, unsigned char *, unsigned, unsigned *));
+local int gz_avail OF((gz_statep));
+local int gz_look OF((gz_statep));
+local int gz_decomp OF((gz_statep));
+local int gz_fetch OF((gz_statep));
+local int gz_skip OF((gz_statep, z_off64_t));
+
+/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from
+ state->fd, and update state->eof, state->err, and state->msg as appropriate.
+ This function needs to loop on read(), since read() is not guaranteed to
+ read the number of bytes requested, depending on the type of descriptor. */
+local int gz_load(state, buf, len, have)
+ gz_statep state;
+ unsigned char *buf;
+ unsigned len;
+ unsigned *have;
+{
+ int ret;
+
+ *have = 0;
+ do {
+ ret = read(state->fd, buf + *have, len - *have);
+ if (ret <= 0)
+ break;
+ *have += ret;
+ } while (*have < len);
+ if (ret < 0) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (ret == 0)
+ state->eof = 1;
+ return 0;
+}
+
+/* Load up input buffer and set eof flag if last data loaded -- return -1 on
+ error, 0 otherwise. Note that the eof flag is set when the end of the input
+ file is reached, even though there may be unused data in the buffer. Once
+ that data has been used, no more attempts will be made to read the file.
+ If strm->avail_in != 0, then the current data is moved to the beginning of
+ the input buffer, and then the remainder of the buffer is loaded with the
+ available data from the input file. */
+local int gz_avail(state)
+ gz_statep state;
+{
+ unsigned got;
+ z_streamp strm = &(state->strm);
+
+ if (state->err != Z_OK && state->err != Z_BUF_ERROR)
+ return -1;
+ if (state->eof == 0) {
+ if (strm->avail_in) { /* copy what's there to the start */
+ unsigned char *p = state->in;
+ unsigned const char *q = strm->next_in;
+ unsigned n = strm->avail_in;
+ do {
+ *p++ = *q++;
+ } while (--n);
+ }
+ if (gz_load(state, state->in + strm->avail_in,
+ state->size - strm->avail_in, &got) == -1)
+ return -1;
+ strm->avail_in += got;
+ strm->next_in = state->in;
+ }
+ return 0;
+}
+
+/* Look for gzip header, set up for inflate or copy. state->x.have must be 0.
+ If this is the first time in, allocate required memory. state->how will be
+ left unchanged if there is no more input data available, will be set to COPY
+ if there is no gzip header and direct copying will be performed, or it will
+ be set to GZIP for decompression. If direct copying, then leftover input
+ data from the input buffer will be copied to the output buffer. In that
+ case, all further file reads will be directly to either the output buffer or
+ a user buffer. If decompressing, the inflate state will be initialized.
+ gz_look() will return 0 on success or -1 on failure. */
+local int gz_look(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ /* allocate read buffers and inflate memory */
+ if (state->size == 0) {
+ /* allocate buffers */
+ state->in = (unsigned char *)malloc(state->want);
+ state->out = (unsigned char *)malloc(state->want << 1);
+ if (state->in == NULL || state->out == NULL) {
+ if (state->out != NULL)
+ free(state->out);
+ if (state->in != NULL)
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ state->size = state->want;
+
+ /* allocate inflate memory */
+ state->strm.zalloc = Z_NULL;
+ state->strm.zfree = Z_NULL;
+ state->strm.opaque = Z_NULL;
+ state->strm.avail_in = 0;
+ state->strm.next_in = Z_NULL;
+ if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */
+ free(state->out);
+ free(state->in);
+ state->size = 0;
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* get at least the magic bytes in the input buffer */
+ if (strm->avail_in < 2) {
+ if (gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0)
+ return 0;
+ }
+
+ /* look for gzip magic bytes -- if there, do gzip decoding (note: there is
+ a logical dilemma here when considering the case of a partially written
+ gzip file, to wit, if a single 31 byte is written, then we cannot tell
+ whether this is a single-byte file, or just a partially written gzip
+ file -- for here we assume that if a gzip file is being written, then
+ the header will be written in a single operation, so that reading a
+ single byte is sufficient indication that it is not a gzip file) */
+ if (strm->avail_in > 1 &&
+ strm->next_in[0] == 31 && strm->next_in[1] == 139) {
+ inflateReset(strm);
+ state->how = GZIP;
+ state->direct = 0;
+ return 0;
+ }
+
+ /* no gzip header -- if we were decoding gzip before, then this is trailing
+ garbage. Ignore the trailing garbage and finish. */
+ if (state->direct == 0) {
+ strm->avail_in = 0;
+ state->eof = 1;
+ state->x.have = 0;
+ return 0;
+ }
+
+ /* doing raw i/o, copy any leftover input to output -- this assumes that
+ the output buffer is larger than the input buffer, which also assures
+ space for gzungetc() */
+ state->x.next = state->out;
+ if (strm->avail_in) {
+ memcpy(state->x.next, strm->next_in, strm->avail_in);
+ state->x.have = strm->avail_in;
+ strm->avail_in = 0;
+ }
+ state->how = COPY;
+ state->direct = 1;
+ return 0;
+}
+
+/* Decompress from input to the provided next_out and avail_out in the state.
+ On return, state->x.have and state->x.next point to the just decompressed
+ data. If the gzip stream completes, state->how is reset to LOOK to look for
+ the next gzip stream or raw data, once state->x.have is depleted. Returns 0
+ on success, -1 on failure. */
+local int gz_decomp(state)
+ gz_statep state;
+{
+ int ret = Z_OK;
+ unsigned had;
+ z_streamp strm = &(state->strm);
+
+ /* fill output buffer up to end of deflate stream */
+ had = strm->avail_out;
+ do {
+ /* get more input for inflate() */
+ if (strm->avail_in == 0 && gz_avail(state) == -1)
+ return -1;
+ if (strm->avail_in == 0) {
+ gz_error(state, Z_BUF_ERROR, "unexpected end of file");
+ break;
+ }
+
+ /* decompress and handle errors */
+ ret = inflate(strm, Z_NO_FLUSH);
+ if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: inflate stream corrupt");
+ return -1;
+ }
+ if (ret == Z_MEM_ERROR) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ if (ret == Z_DATA_ERROR) { /* deflate stream invalid */
+ gz_error(state, Z_DATA_ERROR,
+ strm->msg == NULL ? "compressed data error" : strm->msg);
+ return -1;
+ }
+ } while (strm->avail_out && ret != Z_STREAM_END);
+
+ /* update available output */
+ state->x.have = had - strm->avail_out;
+ state->x.next = strm->next_out - state->x.have;
+
+ /* if the gzip stream completed successfully, look for another */
+ if (ret == Z_STREAM_END)
+ state->how = LOOK;
+
+ /* good decompression */
+ return 0;
+}
+
+/* Fetch data and put it in the output buffer. Assumes state->x.have is 0.
+ Data is either copied from the input file or decompressed from the input
+ file depending on state->how. If state->how is LOOK, then a gzip header is
+ looked for to determine whether to copy or decompress. Returns -1 on error,
+ otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the
+ end of the input file has been reached and all data has been processed. */
+local int gz_fetch(state)
+ gz_statep state;
+{
+ z_streamp strm = &(state->strm);
+
+ do {
+ switch(state->how) {
+ case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */
+ if (gz_look(state) == -1)
+ return -1;
+ if (state->how == LOOK)
+ return 0;
+ break;
+ case COPY: /* -> COPY */
+ if (gz_load(state, state->out, state->size << 1, &(state->x.have))
+ == -1)
+ return -1;
+ state->x.next = state->out;
+ return 0;
+ case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */
+ strm->avail_out = state->size << 1;
+ strm->next_out = state->out;
+ if (gz_decomp(state) == -1)
+ return -1;
+ }
+ } while (state->x.have == 0 && (!state->eof || strm->avail_in));
+ return 0;
+}
+
+/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */
+local int gz_skip(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ unsigned n;
+
+ /* skip over len bytes or reach end-of-file, whichever comes first */
+ while (len)
+ /* skip over whatever is in output buffer */
+ if (state->x.have) {
+ n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ?
+ (unsigned)len : state->x.have;
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ len -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && state->strm.avail_in == 0)
+ break;
+
+ /* need more data to skip -- load up output buffer */
+ else {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzread(file, buf, len)
+ gzFile file;
+ voidp buf;
+ unsigned len;
+{
+ unsigned got, n;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return -1;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* get len bytes to buf, or less than len if at the end */
+ got = 0;
+ do {
+ /* first just try copying data from the output buffer */
+ if (state->x.have) {
+ n = state->x.have > len ? len : state->x.have;
+ memcpy(buf, state->x.next, n);
+ state->x.next += n;
+ state->x.have -= n;
+ }
+
+ /* output buffer empty -- return if we're at the end of the input */
+ else if (state->eof && strm->avail_in == 0) {
+ state->past = 1; /* tried to read past end */
+ break;
+ }
+
+ /* need output data -- for small len or new stream load up our output
+ buffer */
+ else if (state->how == LOOK || len < (state->size << 1)) {
+ /* get more output, looking for header if required */
+ if (gz_fetch(state) == -1)
+ return -1;
+ continue; /* no progress yet -- go back to copy above */
+ /* the copy above assures that we will leave with space in the
+ output buffer, allowing at least one gzungetc() to succeed */
+ }
+
+ /* large len -- read directly into user buffer */
+ else if (state->how == COPY) { /* read directly */
+ if (gz_load(state, (unsigned char *)buf, len, &n) == -1)
+ return -1;
+ }
+
+ /* large len -- decompress directly into user buffer */
+ else { /* state->how == GZIP */
+ strm->avail_out = len;
+ strm->next_out = (unsigned char *)buf;
+ if (gz_decomp(state) == -1)
+ return -1;
+ n = state->x.have;
+ state->x.have = 0;
+ }
+
+ /* update progress */
+ len -= n;
+ buf = (char *)buf + n;
+ got += n;
+ state->x.pos += n;
+ } while (len);
+
+ /* return number of bytes read into user buffer (will fit in int) */
+ return (int)got;
+}
+
+/* -- see zlib.h -- */
+#ifdef Z_PREFIX_SET
+# undef z_gzgetc
+#else
+# undef gzgetc
+#endif
+int ZEXPORT gzgetc(file)
+ gzFile file;
+{
+ int ret;
+ unsigned char buf[1];
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* try output buffer (no need to check for skip request) */
+ if (state->x.have) {
+ state->x.have--;
+ state->x.pos++;
+ return *(state->x.next)++;
+ }
+
+ /* nothing there -- try gzread() */
+ ret = gzread(file, buf, 1);
+ return ret < 1 ? -1 : buf[0];
+}
+
+int ZEXPORT gzgetc_(file)
+gzFile file;
+{
+ return gzgetc(file);
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzungetc(c, file)
+ int c;
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return -1;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* can't push EOF */
+ if (c < 0)
+ return -1;
+
+ /* if output buffer empty, put byte at end (allows more pushing) */
+ if (state->x.have == 0) {
+ state->x.have = 1;
+ state->x.next = state->out + (state->size << 1) - 1;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+ }
+
+ /* if no room, give up (must have already done a gzungetc()) */
+ if (state->x.have == (state->size << 1)) {
+ gz_error(state, Z_DATA_ERROR, "out of room to push characters");
+ return -1;
+ }
+
+ /* slide output data if needed and insert byte before existing data */
+ if (state->x.next == state->out) {
+ unsigned char *src = state->out + state->x.have;
+ unsigned char *dest = state->out + (state->size << 1);
+ while (src > state->out)
+ *--dest = *--src;
+ state->x.next = dest;
+ }
+ state->x.have++;
+ state->x.next--;
+ state->x.next[0] = c;
+ state->x.pos--;
+ state->past = 0;
+ return c;
+}
+
+/* -- see zlib.h -- */
+char * ZEXPORT gzgets(file, buf, len)
+ gzFile file;
+ char *buf;
+ int len;
+{
+ unsigned left, n;
+ char *str;
+ unsigned char *eol;
+ gz_statep state;
+
+ /* check parameters and get internal structure */
+ if (file == NULL || buf == NULL || len < 1)
+ return NULL;
+ state = (gz_statep)file;
+
+ /* check that we're reading and that there's no (serious) error */
+ if (state->mode != GZ_READ ||
+ (state->err != Z_OK && state->err != Z_BUF_ERROR))
+ return NULL;
+
+ /* process a skip request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_skip(state, state->skip) == -1)
+ return NULL;
+ }
+
+ /* copy output bytes up to new line or len - 1, whichever comes first --
+ append a terminating zero to the string (we don't check for a zero in
+ the contents, let the user worry about that) */
+ str = buf;
+ left = (unsigned)len - 1;
+ if (left) do {
+ /* assure that something is in the output buffer */
+ if (state->x.have == 0 && gz_fetch(state) == -1)
+ return NULL; /* error */
+ if (state->x.have == 0) { /* end of file */
+ state->past = 1; /* read past end */
+ break; /* return what we have */
+ }
+
+ /* look for end-of-line in current output buffer */
+ n = state->x.have > left ? left : state->x.have;
+ eol = (unsigned char *)memchr(state->x.next, '\n', n);
+ if (eol != NULL)
+ n = (unsigned)(eol - state->x.next) + 1;
+
+ /* copy through end-of-line, or remainder if not found */
+ memcpy(buf, state->x.next, n);
+ state->x.have -= n;
+ state->x.next += n;
+ state->x.pos += n;
+ left -= n;
+ buf += n;
+ } while (left && eol == NULL);
+
+ /* return terminated string, or if nothing, end of file */
+ if (buf == str)
+ return NULL;
+ buf[0] = 0;
+ return str;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzdirect(file)
+ gzFile file;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+
+ /* if the state is not known, but we can find out, then do so (this is
+ mainly for right after a gzopen() or gzdopen()) */
+ if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0)
+ (void)gz_look(state);
+
+ /* return 1 if transparent, 0 if processing a gzip stream */
+ return state->direct;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_r(file)
+ gzFile file;
+{
+ int ret, err;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're reading */
+ if (state->mode != GZ_READ)
+ return Z_STREAM_ERROR;
+
+ /* free memory and close file */
+ if (state->size) {
+ inflateEnd(&(state->strm));
+ free(state->out);
+ free(state->in);
+ }
+ err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK;
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ ret = close(state->fd);
+ free(state);
+ return ret ? Z_ERRNO : err;
+}
diff --git a/compat/zlib/gzwrite.c b/compat/zlib/gzwrite.c
new file mode 100644
index 0000000..aa767fb
--- /dev/null
+++ b/compat/zlib/gzwrite.c
@@ -0,0 +1,577 @@
+/* gzwrite.c -- zlib functions for writing gzip files
+ * Copyright (C) 2004, 2005, 2010, 2011, 2012, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "gzguts.h"
+
+/* Local functions */
+local int gz_init OF((gz_statep));
+local int gz_comp OF((gz_statep, int));
+local int gz_zero OF((gz_statep, z_off64_t));
+
+/* Initialize state for writing a gzip file. Mark initialization by setting
+ state->size to non-zero. Return -1 on failure or 0 on success. */
+local int gz_init(state)
+ gz_statep state;
+{
+ int ret;
+ z_streamp strm = &(state->strm);
+
+ /* allocate input buffer */
+ state->in = (unsigned char *)malloc(state->want);
+ if (state->in == NULL) {
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* only need output buffer and deflate state if compressing */
+ if (!state->direct) {
+ /* allocate output buffer */
+ state->out = (unsigned char *)malloc(state->want);
+ if (state->out == NULL) {
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+
+ /* allocate deflate memory, set up for gzip compression */
+ strm->zalloc = Z_NULL;
+ strm->zfree = Z_NULL;
+ strm->opaque = Z_NULL;
+ ret = deflateInit2(strm, state->level, Z_DEFLATED,
+ MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy);
+ if (ret != Z_OK) {
+ free(state->out);
+ free(state->in);
+ gz_error(state, Z_MEM_ERROR, "out of memory");
+ return -1;
+ }
+ }
+
+ /* mark state as initialized */
+ state->size = state->want;
+
+ /* initialize write buffer if compressing */
+ if (!state->direct) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ state->x.next = strm->next_out;
+ }
+ return 0;
+}
+
+/* Compress whatever is at avail_in and next_in and write to the output file.
+ Return -1 if there is an error writing to the output file, otherwise 0.
+ flush is assumed to be a valid deflate() flush value. If flush is Z_FINISH,
+ then the deflate() state is reset to start a new gzip stream. If gz->direct
+ is true, then simply write to the output file without compressing, and
+ ignore flush. */
+local int gz_comp(state, flush)
+ gz_statep state;
+ int flush;
+{
+ int ret, got;
+ unsigned have;
+ z_streamp strm = &(state->strm);
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return -1;
+
+ /* write directly if requested */
+ if (state->direct) {
+ got = write(state->fd, strm->next_in, strm->avail_in);
+ if (got < 0 || (unsigned)got != strm->avail_in) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ strm->avail_in = 0;
+ return 0;
+ }
+
+ /* run deflate() on provided input until it produces no more output */
+ ret = Z_OK;
+ do {
+ /* write out current buffer contents if full, or if flushing, but if
+ doing Z_FINISH then don't write until we get to Z_STREAM_END */
+ if (strm->avail_out == 0 || (flush != Z_NO_FLUSH &&
+ (flush != Z_FINISH || ret == Z_STREAM_END))) {
+ have = (unsigned)(strm->next_out - state->x.next);
+ if (have && ((got = write(state->fd, state->x.next, have)) < 0 ||
+ (unsigned)got != have)) {
+ gz_error(state, Z_ERRNO, zstrerror());
+ return -1;
+ }
+ if (strm->avail_out == 0) {
+ strm->avail_out = state->size;
+ strm->next_out = state->out;
+ }
+ state->x.next = strm->next_out;
+ }
+
+ /* compress */
+ have = strm->avail_out;
+ ret = deflate(strm, flush);
+ if (ret == Z_STREAM_ERROR) {
+ gz_error(state, Z_STREAM_ERROR,
+ "internal error: deflate stream corrupt");
+ return -1;
+ }
+ have -= strm->avail_out;
+ } while (have);
+
+ /* if that completed a deflate stream, allow another to start */
+ if (flush == Z_FINISH)
+ deflateReset(strm);
+
+ /* all done, no errors */
+ return 0;
+}
+
+/* Compress len zeros to output. Return -1 on error, 0 on success. */
+local int gz_zero(state, len)
+ gz_statep state;
+ z_off64_t len;
+{
+ int first;
+ unsigned n;
+ z_streamp strm = &(state->strm);
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+
+ /* compress len zeros (len guaranteed > 0) */
+ first = 1;
+ while (len) {
+ n = GT_OFF(state->size) || (z_off64_t)state->size > len ?
+ (unsigned)len : state->size;
+ if (first) {
+ memset(state->in, 0, n);
+ first = 0;
+ }
+ strm->avail_in = n;
+ strm->next_in = state->in;
+ state->x.pos += n;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return -1;
+ len -= n;
+ }
+ return 0;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzwrite(file, buf, len)
+ gzFile file;
+ voidpc buf;
+ unsigned len;
+{
+ unsigned put = len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return 0;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* since an int is returned, make sure len fits in one, otherwise return
+ with an error (this avoids the flaw in the interface) */
+ if ((int)len < 0) {
+ gz_error(state, Z_DATA_ERROR, "requested length does not fit in int");
+ return 0;
+ }
+
+ /* if len is zero, avoid unnecessary operations */
+ if (len == 0)
+ return 0;
+
+ /* allocate memory if this is the first time through */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* for small len, copy to input buffer, otherwise compress directly */
+ if (len < state->size) {
+ /* copy to input buffer, compress when full */
+ do {
+ unsigned have, copy;
+
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ copy = state->size - have;
+ if (copy > len)
+ copy = len;
+ memcpy(state->in + have, buf, copy);
+ strm->avail_in += copy;
+ state->x.pos += copy;
+ buf = (const char *)buf + copy;
+ len -= copy;
+ if (len && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ } while (len);
+ }
+ else {
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* directly compress user buffer to file */
+ strm->avail_in = len;
+ strm->next_in = (z_const Bytef *)buf;
+ state->x.pos += len;
+ if (gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+ }
+
+ /* input was all buffered or compressed (put will fit in int) */
+ return (int)put;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputc(file, c)
+ gzFile file;
+ int c;
+{
+ unsigned have;
+ unsigned char buf[1];
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return -1;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* try writing to input buffer for speed (state->size == 0 if buffer not
+ initialized) */
+ if (state->size) {
+ if (strm->avail_in == 0)
+ strm->next_in = state->in;
+ have = (unsigned)((strm->next_in + strm->avail_in) - state->in);
+ if (have < state->size) {
+ state->in[have] = c;
+ strm->avail_in++;
+ state->x.pos++;
+ return c & 0xff;
+ }
+ }
+
+ /* no room in buffer or not initialized, use gz_write() */
+ buf[0] = c;
+ if (gzwrite(file, buf, 1) != 1)
+ return -1;
+ return c & 0xff;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzputs(file, str)
+ gzFile file;
+ const char *str;
+{
+ int ret;
+ unsigned len;
+
+ /* write string */
+ len = (unsigned)strlen(str);
+ ret = gzwrite(file, str, len);
+ return ret == 0 && len != 0 ? -1 : ret;
+}
+
+#if defined(STDC) || defined(Z_HAVE_STDARG_H)
+#include <stdarg.h>
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va)
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_vsnprintf
+# ifdef HAS_vsprintf_void
+ (void)vsprintf((char *)(state->in), format, va);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = vsprintf((char *)(state->in), format, va);
+# endif
+#else
+# ifdef HAS_vsnprintf_void
+ (void)vsnprintf((char *)(state->in), size, format, va);
+ len = strlen((char *)(state->in));
+# else
+ len = vsnprintf((char *)(state->in), size, format, va);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+int ZEXPORTVA gzprintf(gzFile file, const char *format, ...)
+{
+ va_list va;
+ int ret;
+
+ va_start(va, format);
+ ret = gzvprintf(file, format, va);
+ va_end(va);
+ return ret;
+}
+
+#else /* !STDC && !Z_HAVE_STDARG_H */
+
+/* -- see zlib.h -- */
+int ZEXPORTVA gzprintf (file, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20)
+ gzFile file;
+ const char *format;
+ int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10,
+ a11, a12, a13, a14, a15, a16, a17, a18, a19, a20;
+{
+ int size, len;
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that can really pass pointer in ints */
+ if (sizeof(int) != sizeof(void *))
+ return 0;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return 0;
+
+ /* make sure we have some buffer space */
+ if (state->size == 0 && gz_init(state) == -1)
+ return 0;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return 0;
+ }
+
+ /* consume whatever's left in the input buffer */
+ if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1)
+ return 0;
+
+ /* do the printf() into the input buffer, put length in len */
+ size = (int)(state->size);
+ state->in[size - 1] = 0;
+#ifdef NO_snprintf
+# ifdef HAS_sprintf_void
+ sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ for (len = 0; len < size; len++)
+ if (state->in[len] == 0) break;
+# else
+ len = sprintf((char *)(state->in), format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+# endif
+#else
+# ifdef HAS_snprintf_void
+ snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6, a7, a8,
+ a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20);
+ len = strlen((char *)(state->in));
+# else
+ len = snprintf((char *)(state->in), size, format, a1, a2, a3, a4, a5, a6,
+ a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18,
+ a19, a20);
+# endif
+#endif
+
+ /* check that printf() results fit in buffer */
+ if (len <= 0 || len >= (int)size || state->in[size - 1] != 0)
+ return 0;
+
+ /* update buffer and position, defer compression until needed */
+ strm->avail_in = (unsigned)len;
+ strm->next_in = state->in;
+ state->x.pos += len;
+ return len;
+}
+
+#endif
+
+/* -- see zlib.h -- */
+int ZEXPORT gzflush(file, flush)
+ gzFile file;
+ int flush;
+{
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return -1;
+ state = (gz_statep)file;
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* check flush parameter */
+ if (flush < 0 || flush > Z_FINISH)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* compress remaining data with requested flush */
+ gz_comp(state, flush);
+ return state->err;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzsetparams(file, level, strategy)
+ gzFile file;
+ int level;
+ int strategy;
+{
+ gz_statep state;
+ z_streamp strm;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+ strm = &(state->strm);
+
+ /* check that we're writing and that there's no error */
+ if (state->mode != GZ_WRITE || state->err != Z_OK)
+ return Z_STREAM_ERROR;
+
+ /* if no change is requested, then do nothing */
+ if (level == state->level && strategy == state->strategy)
+ return Z_OK;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ return -1;
+ }
+
+ /* change compression parameters for subsequent input */
+ if (state->size) {
+ /* flush previous input with previous parameters before changing */
+ if (strm->avail_in && gz_comp(state, Z_PARTIAL_FLUSH) == -1)
+ return state->err;
+ deflateParams(strm, level, strategy);
+ }
+ state->level = level;
+ state->strategy = strategy;
+ return Z_OK;
+}
+
+/* -- see zlib.h -- */
+int ZEXPORT gzclose_w(file)
+ gzFile file;
+{
+ int ret = Z_OK;
+ gz_statep state;
+
+ /* get internal structure */
+ if (file == NULL)
+ return Z_STREAM_ERROR;
+ state = (gz_statep)file;
+
+ /* check that we're writing */
+ if (state->mode != GZ_WRITE)
+ return Z_STREAM_ERROR;
+
+ /* check for seek request */
+ if (state->seek) {
+ state->seek = 0;
+ if (gz_zero(state, state->skip) == -1)
+ ret = state->err;
+ }
+
+ /* flush, free memory, and close file */
+ if (gz_comp(state, Z_FINISH) == -1)
+ ret = state->err;
+ if (state->size) {
+ if (!state->direct) {
+ (void)deflateEnd(&(state->strm));
+ free(state->out);
+ }
+ free(state->in);
+ }
+ gz_error(state, Z_OK, NULL);
+ free(state->path);
+ if (close(state->fd) == -1)
+ ret = Z_ERRNO;
+ free(state);
+ return ret;
+}
diff --git a/compat/zlib/infback.c b/compat/zlib/infback.c
new file mode 100644
index 0000000..f3833c2
--- /dev/null
+++ b/compat/zlib/infback.c
@@ -0,0 +1,640 @@
+/* infback.c -- inflate using a call-back interface
+ * Copyright (C) 1995-2011 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ This code is largely copied from inflate.c. Normally either infback.o or
+ inflate.o would be linked into an application--not both. The interface
+ with inffast.c is retained so that optimized assembler-coded versions of
+ inflate_fast() can be used with either inflate.c or infback.c.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+
+/*
+ strm provides memory allocation functions in zalloc and zfree, or
+ Z_NULL to use the library memory allocation functions.
+
+ windowBits is in the range 8..15, and window is a user-supplied
+ window and output buffer that is 2**windowBits bytes.
+ */
+int ZEXPORT inflateBackInit_(strm, windowBits, window, version, stream_size)
+z_streamp strm;
+int windowBits;
+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 ||
+ windowBits < 8 || windowBits > 15)
+ return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ 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 = (struct internal_state FAR *)state;
+ state->dmax = 32768U;
+ state->wbits = windowBits;
+ state->wsize = 1U << windowBits;
+ state->window = window;
+ state->wnext = 0;
+ state->whave = 0;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* 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_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+/* Macros for inflateBack(): */
+
+/* Load returned state from inflate_fast() */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Set state from registers for inflate_fast() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* 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 = state->window; \
+ left = state->wsize; \
+ state->whave = left; \
+ if (out(out_desc, put, 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 inflateBack(strm, in, in_desc, out, out_desc)
+z_streamp 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, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ 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};
+
+ /* 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;
+ state->mode = TYPE;
+ state->last = 0;
+ state->whave = 0;
+ next = strm->next_in;
+ have = next != Z_NULL ? strm->avail_in : 0;
+ hold = 0;
+ bits = 0;
+ put = state->window;
+ left = state->wsize;
+
+ /* Inflate until end of block marked as last */
+ for (;;)
+ switch (state->mode) {
+ case TYPE:
+ /* determine and dispatch block type */
+ if (state->last) {
+ BYTEBITS();
+ state->mode = DONE;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN; /* decode codes */
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->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";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+
+ /* copy stored block from input to output */
+ while (state->length != 0) {
+ copy = state->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;
+ state->length -= copy;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->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);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ 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;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->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 = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ 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";
+ state->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";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->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";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (code const FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (code const FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN;
+
+ case LEN:
+ /* use inflate_fast() if we have enough input and output */
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ if (state->whave < state->wsize)
+ state->whave = state->wsize - left;
+ inflate_fast(strm, state->wsize);
+ LOAD();
+ break;
+ }
+
+ /* get a literal, length, or end-of-block code */
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->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);
+ state->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)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ }
+
+ /* process end of block */
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+
+ /* invalid code */
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+
+ /* length code -- get extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+
+ /* get distance code */
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->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";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+
+ /* get distance extra bits, if any */
+ state->extra = (unsigned)(here.op) & 15;
+ if (state->extra != 0) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ }
+ if (state->offset > state->wsize - (state->whave < state->wsize ?
+ left : 0)) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+
+ /* copy match from window to output */
+ do {
+ ROOM();
+ copy = state->wsize - state->offset;
+ if (copy < left) {
+ from = put + copy;
+ copy = left - copy;
+ }
+ else {
+ from = put - state->offset;
+ copy = left;
+ }
+ if (copy > state->length) copy = state->length;
+ state->length -= copy;
+ left -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ } while (state->length != 0);
+ break;
+
+ case DONE:
+ /* inflate stream terminated properly -- write leftover output */
+ ret = Z_STREAM_END;
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->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 inflateBackEnd(strm)
+z_streamp 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;
+}
diff --git a/compat/zlib/inffast.c b/compat/zlib/inffast.c
new file mode 100644
index 0000000..bda59ce
--- /dev/null
+++ b/compat/zlib/inffast.c
@@ -0,0 +1,340 @@
+/* inffast.c -- fast decoding
+ * Copyright (C) 1995-2008, 2010, 2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifndef ASMINF
+
+/* Allow machine dependent optimization for post-increment or pre-increment.
+ Based on testing to date,
+ Pre-increment preferred for:
+ - PowerPC G3 (Adler)
+ - MIPS R5000 (Randers-Pehrson)
+ Post-increment preferred for:
+ - none
+ No measurable difference:
+ - Pentium III (Anderson)
+ - M68060 (Nikl)
+ */
+#ifdef POSTINC
+# define OFF 0
+# define PUP(a) *(a)++
+#else
+# define OFF 1
+# define PUP(a) *++(a)
+#endif
+
+/*
+ Decode literal, length, and distance codes and write out the resulting
+ literal and match bytes until either not enough input or output is
+ available, an end-of-block is encountered, or a data error is encountered.
+ When large enough input and output buffers are supplied to inflate(), for
+ example, a 16K input buffer and a 64K output buffer, more than 95% of the
+ inflate execution time is spent in this routine.
+
+ Entry assumptions:
+
+ state->mode == LEN
+ strm->avail_in >= 6
+ strm->avail_out >= 258
+ start >= strm->avail_out
+ state->bits < 8
+
+ On return, state->mode is one of:
+
+ LEN -- ran out of enough output space or enough available input
+ TYPE -- reached end of block code, inflate() to interpret next block
+ BAD -- error in block data
+
+ Notes:
+
+ - The maximum input bits used by a length/distance pair is 15 bits for the
+ length code, 5 bits for the length extra, 15 bits for the distance code,
+ and 13 bits for the distance extra. This totals 48 bits, or six bytes.
+ Therefore if strm->avail_in >= 6, then there is enough input to avoid
+ checking for available input while decoding.
+
+ - The maximum bytes that a single length/distance pair can output is 258
+ bytes, which is the maximum length that can be coded. inflate_fast()
+ requires strm->avail_out >= 258 for each loop to avoid checking for
+ output space.
+ */
+void ZLIB_INTERNAL inflate_fast(strm, start)
+z_streamp strm;
+unsigned start; /* inflate()'s starting value for strm->avail_out */
+{
+ struct inflate_state FAR *state;
+ z_const unsigned char FAR *in; /* local strm->next_in */
+ z_const unsigned char FAR *last; /* have enough input while in < last */
+ unsigned char FAR *out; /* local strm->next_out */
+ unsigned char FAR *beg; /* inflate()'s initial strm->next_out */
+ unsigned char FAR *end; /* while out < end, enough space available */
+#ifdef INFLATE_STRICT
+ unsigned dmax; /* maximum distance from zlib header */
+#endif
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */
+ unsigned long hold; /* local strm->hold */
+ unsigned bits; /* local strm->bits */
+ code const FAR *lcode; /* local strm->lencode */
+ code const FAR *dcode; /* local strm->distcode */
+ unsigned lmask; /* mask for first level of length codes */
+ unsigned dmask; /* mask for first level of distance codes */
+ code here; /* retrieved table entry */
+ unsigned op; /* code bits, operation, extra bits, or */
+ /* window position, window bytes to copy */
+ unsigned len; /* match length, unused bytes */
+ unsigned dist; /* match distance */
+ unsigned char FAR *from; /* where to copy match from */
+
+ /* copy state to local variables */
+ state = (struct inflate_state FAR *)strm->state;
+ in = strm->next_in - OFF;
+ last = in + (strm->avail_in - 5);
+ out = strm->next_out - OFF;
+ beg = out - (start - strm->avail_out);
+ end = out + (strm->avail_out - 257);
+#ifdef INFLATE_STRICT
+ dmax = state->dmax;
+#endif
+ wsize = state->wsize;
+ whave = state->whave;
+ wnext = state->wnext;
+ window = state->window;
+ hold = state->hold;
+ bits = state->bits;
+ lcode = state->lencode;
+ dcode = state->distcode;
+ lmask = (1U << state->lenbits) - 1;
+ dmask = (1U << state->distbits) - 1;
+
+ /* decode literals and length/distances until end-of-block or not enough
+ input data or output space */
+ do {
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = lcode[hold & lmask];
+ dolen:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op == 0) { /* literal */
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ PUP(out) = (unsigned char)(here.val);
+ }
+ else if (op & 16) { /* length base */
+ len = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (op) {
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ len += (unsigned)hold & ((1U << op) - 1);
+ hold >>= op;
+ bits -= op;
+ }
+ Tracevv((stderr, "inflate: length %u\n", len));
+ if (bits < 15) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ here = dcode[hold & dmask];
+ dodist:
+ op = (unsigned)(here.bits);
+ hold >>= op;
+ bits -= op;
+ op = (unsigned)(here.op);
+ if (op & 16) { /* distance base */
+ dist = (unsigned)(here.val);
+ op &= 15; /* number of extra bits */
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ if (bits < op) {
+ hold += (unsigned long)(PUP(in)) << bits;
+ bits += 8;
+ }
+ }
+ dist += (unsigned)hold & ((1U << op) - 1);
+#ifdef INFLATE_STRICT
+ if (dist > dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ hold >>= op;
+ bits -= op;
+ Tracevv((stderr, "inflate: distance %u\n", dist));
+ op = (unsigned)(out - beg); /* max distance in output */
+ if (dist > op) { /* see if copy from window */
+ op = dist - op; /* distance back in window */
+ if (op > whave) {
+ if (state->sane) {
+ strm->msg =
+ (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ if (len <= op - whave) {
+ do {
+ PUP(out) = 0;
+ } while (--len);
+ continue;
+ }
+ len -= op - whave;
+ do {
+ PUP(out) = 0;
+ } while (--op > whave);
+ if (op == 0) {
+ from = out - dist;
+ do {
+ PUP(out) = PUP(from);
+ } while (--len);
+ continue;
+ }
+#endif
+ }
+ from = window - OFF;
+ if (wnext == 0) { /* very common case */
+ from += wsize - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ else if (wnext < op) { /* wrap around window */
+ from += wsize + wnext - op;
+ op -= wnext;
+ if (op < len) { /* some from end of window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = window - OFF;
+ if (wnext < len) { /* some from start of window */
+ op = wnext;
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ }
+ else { /* contiguous in window */
+ from += wnext - op;
+ if (op < len) { /* some from window */
+ len -= op;
+ do {
+ PUP(out) = PUP(from);
+ } while (--op);
+ from = out - dist; /* rest from output */
+ }
+ }
+ while (len > 2) {
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ }
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ else {
+ from = out - dist; /* copy direct from output */
+ do { /* minimum length is three */
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ PUP(out) = PUP(from);
+ len -= 3;
+ } while (len > 2);
+ if (len) {
+ PUP(out) = PUP(from);
+ if (len > 1)
+ PUP(out) = PUP(from);
+ }
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level distance code */
+ here = dcode[here.val + (hold & ((1U << op) - 1))];
+ goto dodist;
+ }
+ else {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ }
+ else if ((op & 64) == 0) { /* 2nd level length code */
+ here = lcode[here.val + (hold & ((1U << op) - 1))];
+ goto dolen;
+ }
+ else if (op & 32) { /* end-of-block */
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->mode = TYPE;
+ break;
+ }
+ else {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ } while (in < last && out < end);
+
+ /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
+ len = bits >> 3;
+ in -= len;
+ bits -= len << 3;
+ hold &= (1U << bits) - 1;
+
+ /* update state and return */
+ strm->next_in = in + OFF;
+ strm->next_out = out + OFF;
+ strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
+ strm->avail_out = (unsigned)(out < end ?
+ 257 + (end - out) : 257 - (out - end));
+ state->hold = hold;
+ state->bits = bits;
+ return;
+}
+
+/*
+ inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe):
+ - Using bit fields for code structure
+ - Different op definition to avoid & for extra bits (do & for table bits)
+ - Three separate decoding do-loops for direct, window, and wnext == 0
+ - Special case for distance > 1 copies to do overlapped load and store copy
+ - Explicit branch predictions (based on measured branch probabilities)
+ - Deferring match copy and interspersed it with decoding subsequent codes
+ - Swapping literal/length else
+ - Swapping window/direct else
+ - Larger unrolled copy loops (three is about right)
+ - Moving len -= 3 statement into middle of loop
+ */
+
+#endif /* !ASMINF */
diff --git a/compat/zlib/inffast.h b/compat/zlib/inffast.h
new file mode 100644
index 0000000..e5c1aa4
--- /dev/null
+++ b/compat/zlib/inffast.h
@@ -0,0 +1,11 @@
+/* inffast.h -- header to use inffast.c
+ * Copyright (C) 1995-2003, 2010 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.
+ */
+
+void ZLIB_INTERNAL inflate_fast OF((z_streamp strm, unsigned start));
diff --git a/compat/zlib/inffixed.h b/compat/zlib/inffixed.h
new file mode 100644
index 0000000..d628327
--- /dev/null
+++ b/compat/zlib/inffixed.h
@@ -0,0 +1,94 @@
+ /* inffixed.h -- table for decoding fixed codes
+ * Generated automatically by makefixed().
+ */
+
+ /* 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},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
+ {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
+ {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
+ {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
+ {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
+ {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
+ {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
+ {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
+ {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
+ {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
+ {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
+ {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
+ {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
+ {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
+ {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
+ {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
+ {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
+ {0,9,220},{18,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},{21,8,131},{18,7,31},
+ {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
+ {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
+ {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
+ {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
+ {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
+ {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
+ {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
+ {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
+ {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
+ {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
+ {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
+ {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
+ {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
+ {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
+ {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
+ {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
+ {0,8,127},{0,8,63},{0,9,222},{18,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},
+ {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
+ {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
+ {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
+ {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
+ {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
+ {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
+ {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
+ {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
+ {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
+ {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
+ {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
+ {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
+ {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
+ {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
+ {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
+ {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
+ {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,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},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
+ {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
+ {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
+ {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
+ {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
+ {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
+ {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
+ {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
+ {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
+ {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
+ {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
+ {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
+ {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
+ {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
+ {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
+ {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
+ {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
+ {18,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] = {
+ {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
+ {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
+ {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
+ {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
+ {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
+ {22,5,193},{64,5,0}
+ };
diff --git a/compat/zlib/inflate.c b/compat/zlib/inflate.c
new file mode 100644
index 0000000..870f89b
--- /dev/null
+++ b/compat/zlib/inflate.c
@@ -0,0 +1,1512 @@
+/* inflate.c -- zlib decompression
+ * Copyright (C) 1995-2012 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+/*
+ * Change history:
+ *
+ * 1.2.beta0 24 Nov 2002
+ * - First version -- complete rewrite of inflate to simplify code, avoid
+ * creation of window when not needed, minimize use of window when it is
+ * needed, make inffast.c even faster, implement gzip decoding, and to
+ * improve code readability and style over the previous zlib inflate code
+ *
+ * 1.2.beta1 25 Nov 2002
+ * - Use pointers for available input and output checking in inffast.c
+ * - Remove input and output counters in inffast.c
+ * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
+ * - Remove unnecessary second byte pull from length extra in inffast.c
+ * - Unroll direct copy to three copies per loop in inffast.c
+ *
+ * 1.2.beta2 4 Dec 2002
+ * - Change external routine names to reduce potential conflicts
+ * - Correct filename to inffixed.h for fixed tables in inflate.c
+ * - Make hbuf[] unsigned char to match parameter type in inflate.c
+ * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
+ * to avoid negation problem on Alphas (64 bit) in inflate.c
+ *
+ * 1.2.beta3 22 Dec 2002
+ * - Add comments on state->bits assertion in inffast.c
+ * - Add comments on op field in inftrees.h
+ * - Fix bug in reuse of allocated window after inflateReset()
+ * - Remove bit fields--back to byte structure for speed
+ * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
+ * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
+ * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
+ * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
+ * - Use local copies of stream next and avail values, as well as local bit
+ * buffer and bit count in inflate()--for speed when inflate_fast() not used
+ *
+ * 1.2.beta4 1 Jan 2003
+ * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
+ * - Move a comment on output buffer sizes from inffast.c to inflate.c
+ * - Add comments in inffast.c to introduce the inflate_fast() routine
+ * - Rearrange window copies in inflate_fast() for speed and simplification
+ * - Unroll last copy for window match in inflate_fast()
+ * - Use local copies of window variables in inflate_fast() for speed
+ * - Pull out common wnext == 0 case for speed in inflate_fast()
+ * - Make op and len in inflate_fast() unsigned for consistency
+ * - Add FAR to lcode and dcode declarations in inflate_fast()
+ * - Simplified bad distance check in inflate_fast()
+ * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
+ * source file infback.c to provide a call-back interface to inflate for
+ * programs like gzip and unzip -- uses window as output buffer to avoid
+ * window copying
+ *
+ * 1.2.beta5 1 Jan 2003
+ * - Improved inflateBack() interface to allow the caller to provide initial
+ * input in strm.
+ * - Fixed stored blocks bug in inflateBack()
+ *
+ * 1.2.beta6 4 Jan 2003
+ * - Added comments in inffast.c on effectiveness of POSTINC
+ * - Typecasting all around to reduce compiler warnings
+ * - Changed loops from while (1) or do {} while (1) to for (;;), again to
+ * make compilers happy
+ * - Changed type of window in inflateBackInit() to unsigned char *
+ *
+ * 1.2.beta7 27 Jan 2003
+ * - Changed many types to unsigned or unsigned short to avoid warnings
+ * - Added inflateCopy() function
+ *
+ * 1.2.0 9 Mar 2003
+ * - Changed inflateBack() interface to provide separate opaque descriptors
+ * for the in() and out() functions
+ * - Changed inflateBack() argument and in_func typedef to swap the length
+ * and buffer address return values for the input function
+ * - Check next_in and next_out for Z_NULL on entry to inflate()
+ *
+ * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+#include "inflate.h"
+#include "inffast.h"
+
+#ifdef MAKEFIXED
+# ifndef BUILDFIXED
+# define BUILDFIXED
+# endif
+#endif
+
+/* function prototypes */
+local void fixedtables OF((struct inflate_state FAR *state));
+local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
+ unsigned copy));
+#ifdef BUILDFIXED
+ void makefixed OF((void));
+#endif
+local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
+ unsigned len));
+
+int ZEXPORT inflateResetKeep(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ strm->total_in = strm->total_out = state->total = 0;
+ strm->msg = Z_NULL;
+ if (state->wrap) /* to support ill-conceived Java test suite */
+ strm->adler = state->wrap & 1;
+ state->mode = HEAD;
+ state->last = 0;
+ state->havedict = 0;
+ state->dmax = 32768U;
+ state->head = Z_NULL;
+ state->hold = 0;
+ state->bits = 0;
+ state->lencode = state->distcode = state->next = state->codes;
+ state->sane = 1;
+ state->back = -1;
+ Tracev((stderr, "inflate: reset\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateReset(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->wsize = 0;
+ state->whave = 0;
+ state->wnext = 0;
+ return inflateResetKeep(strm);
+}
+
+int ZEXPORT inflateReset2(strm, windowBits)
+z_streamp strm;
+int windowBits;
+{
+ int wrap;
+ struct inflate_state FAR *state;
+
+ /* get the state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* extract wrap request from windowBits parameter */
+ if (windowBits < 0) {
+ wrap = 0;
+ windowBits = -windowBits;
+ }
+ else {
+ wrap = (windowBits >> 4) + 1;
+#ifdef GUNZIP
+ if (windowBits < 48)
+ windowBits &= 15;
+#endif
+ }
+
+ /* set number of window bits, free window if different */
+ if (windowBits && (windowBits < 8 || windowBits > 15))
+ return Z_STREAM_ERROR;
+ if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
+ ZFREE(strm, state->window);
+ state->window = Z_NULL;
+ }
+
+ /* update state and reset the rest of it */
+ state->wrap = wrap;
+ state->wbits = (unsigned)windowBits;
+ return inflateReset(strm);
+}
+
+int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
+z_streamp strm;
+int windowBits;
+const char *version;
+int stream_size;
+{
+ int ret;
+ 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) return Z_STREAM_ERROR;
+ strm->msg = Z_NULL; /* in case we return an error */
+ if (strm->zalloc == (alloc_func)0) {
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zalloc = zcalloc;
+ strm->opaque = (voidpf)0;
+#endif
+ }
+ if (strm->zfree == (free_func)0)
+#ifdef Z_SOLO
+ return Z_STREAM_ERROR;
+#else
+ strm->zfree = zcfree;
+#endif
+ 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 = (struct internal_state FAR *)state;
+ state->window = Z_NULL;
+ ret = inflateReset2(strm, windowBits);
+ if (ret != Z_OK) {
+ ZFREE(strm, state);
+ strm->state = Z_NULL;
+ }
+ return ret;
+}
+
+int ZEXPORT inflateInit_(strm, version, stream_size)
+z_streamp strm;
+const char *version;
+int stream_size;
+{
+ return inflateInit2_(strm, DEF_WBITS, version, stream_size);
+}
+
+int ZEXPORT inflatePrime(strm, bits, value)
+z_streamp strm;
+int bits;
+int value;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (bits < 0) {
+ state->hold = 0;
+ state->bits = 0;
+ return Z_OK;
+ }
+ if (bits > 16 || state->bits + bits > 32) return Z_STREAM_ERROR;
+ value &= (1L << bits) - 1;
+ state->hold += value << state->bits;
+ state->bits += bits;
+ return Z_OK;
+}
+
+/*
+ Return state with length and distance decoding tables and index sizes set to
+ fixed code decoding. Normally this returns fixed tables from inffixed.h.
+ If BUILDFIXED is defined, then instead this routine builds the tables the
+ first time it's called, and returns those tables the first time and
+ thereafter. This reduces the size of the code by about 2K bytes, in
+ exchange for a little execution time. However, BUILDFIXED should not be
+ used for threaded applications, since the rewriting of the tables and virgin
+ may not be thread-safe.
+ */
+local void fixedtables(state)
+struct inflate_state FAR *state;
+{
+#ifdef BUILDFIXED
+ static int virgin = 1;
+ static code *lenfix, *distfix;
+ static code fixed[544];
+
+ /* build fixed huffman tables if first call (may not be thread safe) */
+ if (virgin) {
+ unsigned sym, bits;
+ static code *next;
+
+ /* 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_table(LENS, state->lens, 288, &(next), &(bits), state->work);
+
+ /* distance table */
+ sym = 0;
+ while (sym < 32) state->lens[sym++] = 5;
+ distfix = next;
+ bits = 5;
+ inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
+
+ /* do this just once */
+ virgin = 0;
+ }
+#else /* !BUILDFIXED */
+# include "inffixed.h"
+#endif /* BUILDFIXED */
+ state->lencode = lenfix;
+ state->lenbits = 9;
+ state->distcode = distfix;
+ state->distbits = 5;
+}
+
+#ifdef MAKEFIXED
+#include <stdio.h>
+
+/*
+ Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also
+ defines BUILDFIXED, so the tables are built on the fly. makefixed() writes
+ those tables to stdout, which would be piped to inffixed.h. A small program
+ can simply call makefixed to do this:
+
+ void makefixed(void);
+
+ int main(void)
+ {
+ makefixed();
+ return 0;
+ }
+
+ Then that can be linked with zlib built with MAKEFIXED defined and run:
+
+ a.out > inffixed.h
+ */
+void makefixed()
+{
+ unsigned low, size;
+ struct inflate_state state;
+
+ fixedtables(&state);
+ puts(" /* inffixed.h -- table for decoding fixed codes");
+ puts(" * Generated automatically by makefixed().");
+ 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 % 7) == 0) printf("\n ");
+ printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
+ state.lencode[low].bits, state.lencode[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 % 6) == 0) printf("\n ");
+ printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
+ state.distcode[low].val);
+ if (++low == size) break;
+ putchar(',');
+ }
+ puts("\n };");
+}
+#endif /* MAKEFIXED */
+
+/*
+ Update the window with the last wsize (normally 32K) bytes written before
+ returning. If window does not exist yet, create it. This is only called
+ when a window is already in use, or when output has been written during this
+ inflate call, but the end of the deflate stream has not been reached yet.
+ It is also called to create a window for dictionary data when a dictionary
+ is loaded.
+
+ Providing output buffers larger than 32K to inflate() should provide a speed
+ advantage, since only the last 32K of output is copied to the sliding window
+ upon return from inflate(), and since all distances after the first 32K of
+ output will fall in the output data, making match copies simpler and faster.
+ The advantage may be dependent on the size of the processor's data caches.
+ */
+local int updatewindow(strm, end, copy)
+z_streamp strm;
+const Bytef *end;
+unsigned copy;
+{
+ struct inflate_state FAR *state;
+ unsigned dist;
+
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* if it hasn't been done already, allocate space for the window */
+ if (state->window == Z_NULL) {
+ state->window = (unsigned char FAR *)
+ ZALLOC(strm, 1U << state->wbits,
+ sizeof(unsigned char));
+ if (state->window == Z_NULL) return 1;
+ }
+
+ /* if window not in use yet, initialize */
+ if (state->wsize == 0) {
+ state->wsize = 1U << state->wbits;
+ state->wnext = 0;
+ state->whave = 0;
+ }
+
+ /* copy state->wsize or less output bytes into the circular window */
+ if (copy >= state->wsize) {
+ zmemcpy(state->window, end - state->wsize, state->wsize);
+ state->wnext = 0;
+ state->whave = state->wsize;
+ }
+ else {
+ dist = state->wsize - state->wnext;
+ if (dist > copy) dist = copy;
+ zmemcpy(state->window + state->wnext, end - copy, dist);
+ copy -= dist;
+ if (copy) {
+ zmemcpy(state->window, end - copy, copy);
+ state->wnext = copy;
+ state->whave = state->wsize;
+ }
+ else {
+ state->wnext += dist;
+ if (state->wnext == state->wsize) state->wnext = 0;
+ if (state->whave < state->wsize) state->whave += dist;
+ }
+ }
+ return 0;
+}
+
+/* Macros for inflate(): */
+
+/* check function to use adler32() for zlib or crc32() for gzip */
+#ifdef GUNZIP
+# define UPDATE(check, buf, len) \
+ (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
+#else
+# define UPDATE(check, buf, len) adler32(check, buf, len)
+#endif
+
+/* check macros for header crc */
+#ifdef GUNZIP
+# define CRC2(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ check = crc32(check, hbuf, 2); \
+ } while (0)
+
+# define CRC4(check, word) \
+ do { \
+ hbuf[0] = (unsigned char)(word); \
+ hbuf[1] = (unsigned char)((word) >> 8); \
+ hbuf[2] = (unsigned char)((word) >> 16); \
+ hbuf[3] = (unsigned char)((word) >> 24); \
+ check = crc32(check, hbuf, 4); \
+ } while (0)
+#endif
+
+/* Load registers with state in inflate() for speed */
+#define LOAD() \
+ do { \
+ put = strm->next_out; \
+ left = strm->avail_out; \
+ next = strm->next_in; \
+ have = strm->avail_in; \
+ hold = state->hold; \
+ bits = state->bits; \
+ } while (0)
+
+/* Restore state from registers in inflate() */
+#define RESTORE() \
+ do { \
+ strm->next_out = put; \
+ strm->avail_out = left; \
+ strm->next_in = next; \
+ strm->avail_in = have; \
+ state->hold = hold; \
+ state->bits = bits; \
+ } while (0)
+
+/* Clear the input bit accumulator */
+#define INITBITS() \
+ do { \
+ hold = 0; \
+ bits = 0; \
+ } while (0)
+
+/* Get a byte of input into the bit accumulator, or return from inflate()
+ if there is no input available. */
+#define PULLBYTE() \
+ do { \
+ if (have == 0) goto inf_leave; \
+ 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 inflate(). */
+#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)
+
+/*
+ inflate() uses a state machine to process as much input data and generate as
+ much output data as possible before returning. The state machine is
+ structured roughly as follows:
+
+ for (;;) switch (state) {
+ ...
+ case STATEn:
+ if (not enough input data or output space to make progress)
+ return;
+ ... make progress ...
+ state = STATEm;
+ break;
+ ...
+ }
+
+ so when inflate() is called again, the same case is attempted again, and
+ if the appropriate resources are provided, the machine proceeds to the
+ next state. The NEEDBITS() macro is usually the way the state evaluates
+ whether it can proceed or should return. NEEDBITS() does the return if
+ the requested bits are not available. The typical use of the BITS macros
+ is:
+
+ NEEDBITS(n);
+ ... do something with BITS(n) ...
+ DROPBITS(n);
+
+ where NEEDBITS(n) either returns from inflate() if there isn't enough
+ input left to load n bits into the accumulator, or it continues. BITS(n)
+ gives the low n bits in the accumulator. When done, DROPBITS(n) drops
+ the low n bits off the accumulator. INITBITS() clears the accumulator
+ and sets the number of available bits to zero. BYTEBITS() discards just
+ enough bits to put the accumulator on a byte boundary. After BYTEBITS()
+ and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
+
+ NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
+ if there is no input available. The decoding of variable length codes uses
+ PULLBYTE() directly in order to pull just enough bytes to decode the next
+ code, and no more.
+
+ Some states loop until they get enough input, making sure that enough
+ state information is maintained to continue the loop where it left off
+ if NEEDBITS() returns in the loop. For example, want, need, and keep
+ would all have to actually be part of the saved state in case NEEDBITS()
+ returns:
+
+ case STATEw:
+ while (want < need) {
+ NEEDBITS(n);
+ keep[want++] = BITS(n);
+ DROPBITS(n);
+ }
+ state = STATEx;
+ case STATEx:
+
+ As shown above, if the next state is also the next case, then the break
+ is omitted.
+
+ A state may also return if there is not enough output space available to
+ complete that state. Those states are copying stored data, writing a
+ literal byte, and copying a matching string.
+
+ When returning, a "goto inf_leave" is used to update the total counters,
+ update the check value, and determine whether any progress has been made
+ during that inflate() call in order to return the proper return code.
+ Progress is defined as a change in either strm->avail_in or strm->avail_out.
+ When there is a window, goto inf_leave will update the window with the last
+ output written. If a goto inf_leave occurs in the middle of decompression
+ and there is no window currently, goto inf_leave will create one and copy
+ output to the window for the next call of inflate().
+
+ In this implementation, the flush parameter of inflate() only affects the
+ return code (per zlib.h). inflate() always writes as much as possible to
+ strm->next_out, given the space available and the provided input--the effect
+ documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
+ the allocation of and copying into a sliding window until necessary, which
+ provides the effect documented in zlib.h for Z_FINISH when the entire input
+ stream available. So the only thing the flush parameter actually does is:
+ when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
+ will return Z_BUF_ERROR if it has not reached the end of the stream.
+ */
+
+int ZEXPORT inflate(strm, flush)
+z_streamp strm;
+int flush;
+{
+ struct inflate_state FAR *state;
+ z_const unsigned char FAR *next; /* next input */
+ unsigned char FAR *put; /* next output */
+ unsigned have, left; /* available input and output */
+ unsigned long hold; /* bit buffer */
+ unsigned bits; /* bits in bit buffer */
+ unsigned in, out; /* save starting available input and output */
+ unsigned copy; /* number of stored or match bytes to copy */
+ unsigned char FAR *from; /* where to copy match bytes from */
+ 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 */
+#ifdef GUNZIP
+ unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
+#endif
+ 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};
+
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
+ (strm->next_in == Z_NULL && strm->avail_in != 0))
+ return Z_STREAM_ERROR;
+
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
+ LOAD();
+ in = have;
+ out = left;
+ ret = Z_OK;
+ for (;;)
+ switch (state->mode) {
+ case HEAD:
+ if (state->wrap == 0) {
+ state->mode = TYPEDO;
+ break;
+ }
+ NEEDBITS(16);
+#ifdef GUNZIP
+ if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
+ state->check = crc32(0L, Z_NULL, 0);
+ CRC2(state->check, hold);
+ INITBITS();
+ state->mode = FLAGS;
+ break;
+ }
+ state->flags = 0; /* expect zlib header */
+ if (state->head != Z_NULL)
+ state->head->done = -1;
+ if (!(state->wrap & 1) || /* check if zlib header allowed */
+#else
+ if (
+#endif
+ ((BITS(8) << 8) + (hold >> 8)) % 31) {
+ strm->msg = (char *)"incorrect header check";
+ state->mode = BAD;
+ break;
+ }
+ if (BITS(4) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ DROPBITS(4);
+ len = BITS(4) + 8;
+ if (state->wbits == 0)
+ state->wbits = len;
+ else if (len > state->wbits) {
+ strm->msg = (char *)"invalid window size";
+ state->mode = BAD;
+ break;
+ }
+ state->dmax = 1U << len;
+ Tracev((stderr, "inflate: zlib header ok\n"));
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = hold & 0x200 ? DICTID : TYPE;
+ INITBITS();
+ break;
+#ifdef GUNZIP
+ case FLAGS:
+ NEEDBITS(16);
+ state->flags = (int)(hold);
+ if ((state->flags & 0xff) != Z_DEFLATED) {
+ strm->msg = (char *)"unknown compression method";
+ state->mode = BAD;
+ break;
+ }
+ if (state->flags & 0xe000) {
+ strm->msg = (char *)"unknown header flags set";
+ state->mode = BAD;
+ break;
+ }
+ if (state->head != Z_NULL)
+ state->head->text = (int)((hold >> 8) & 1);
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = TIME;
+ case TIME:
+ NEEDBITS(32);
+ if (state->head != Z_NULL)
+ state->head->time = hold;
+ if (state->flags & 0x0200) CRC4(state->check, hold);
+ INITBITS();
+ state->mode = OS;
+ case OS:
+ NEEDBITS(16);
+ if (state->head != Z_NULL) {
+ state->head->xflags = (int)(hold & 0xff);
+ state->head->os = (int)(hold >> 8);
+ }
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ state->mode = EXLEN;
+ case EXLEN:
+ if (state->flags & 0x0400) {
+ NEEDBITS(16);
+ state->length = (unsigned)(hold);
+ if (state->head != Z_NULL)
+ state->head->extra_len = (unsigned)hold;
+ if (state->flags & 0x0200) CRC2(state->check, hold);
+ INITBITS();
+ }
+ else if (state->head != Z_NULL)
+ state->head->extra = Z_NULL;
+ state->mode = EXTRA;
+ case EXTRA:
+ if (state->flags & 0x0400) {
+ copy = state->length;
+ if (copy > have) copy = have;
+ if (copy) {
+ if (state->head != Z_NULL &&
+ state->head->extra != Z_NULL) {
+ len = state->head->extra_len - state->length;
+ zmemcpy(state->head->extra + len, next,
+ len + copy > state->head->extra_max ?
+ state->head->extra_max - len : copy);
+ }
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ state->length -= copy;
+ }
+ if (state->length) goto inf_leave;
+ }
+ state->length = 0;
+ state->mode = NAME;
+ case NAME:
+ if (state->flags & 0x0800) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->name != Z_NULL &&
+ state->length < state->head->name_max)
+ state->head->name[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->name = Z_NULL;
+ state->length = 0;
+ state->mode = COMMENT;
+ case COMMENT:
+ if (state->flags & 0x1000) {
+ if (have == 0) goto inf_leave;
+ copy = 0;
+ do {
+ len = (unsigned)(next[copy++]);
+ if (state->head != Z_NULL &&
+ state->head->comment != Z_NULL &&
+ state->length < state->head->comm_max)
+ state->head->comment[state->length++] = len;
+ } while (len && copy < have);
+ if (state->flags & 0x0200)
+ state->check = crc32(state->check, next, copy);
+ have -= copy;
+ next += copy;
+ if (len) goto inf_leave;
+ }
+ else if (state->head != Z_NULL)
+ state->head->comment = Z_NULL;
+ state->mode = HCRC;
+ case HCRC:
+ if (state->flags & 0x0200) {
+ NEEDBITS(16);
+ if (hold != (state->check & 0xffff)) {
+ strm->msg = (char *)"header crc mismatch";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ }
+ if (state->head != Z_NULL) {
+ state->head->hcrc = (int)((state->flags >> 9) & 1);
+ state->head->done = 1;
+ }
+ strm->adler = state->check = crc32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ break;
+#endif
+ case DICTID:
+ NEEDBITS(32);
+ strm->adler = state->check = ZSWAP32(hold);
+ INITBITS();
+ state->mode = DICT;
+ case DICT:
+ if (state->havedict == 0) {
+ RESTORE();
+ return Z_NEED_DICT;
+ }
+ strm->adler = state->check = adler32(0L, Z_NULL, 0);
+ state->mode = TYPE;
+ case TYPE:
+ if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
+ case TYPEDO:
+ if (state->last) {
+ BYTEBITS();
+ state->mode = CHECK;
+ break;
+ }
+ NEEDBITS(3);
+ state->last = BITS(1);
+ DROPBITS(1);
+ switch (BITS(2)) {
+ case 0: /* stored block */
+ Tracev((stderr, "inflate: stored block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = STORED;
+ break;
+ case 1: /* fixed block */
+ fixedtables(state);
+ Tracev((stderr, "inflate: fixed codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = LEN_; /* decode codes */
+ if (flush == Z_TREES) {
+ DROPBITS(2);
+ goto inf_leave;
+ }
+ break;
+ case 2: /* dynamic block */
+ Tracev((stderr, "inflate: dynamic codes block%s\n",
+ state->last ? " (last)" : ""));
+ state->mode = TABLE;
+ break;
+ case 3:
+ strm->msg = (char *)"invalid block type";
+ state->mode = BAD;
+ }
+ DROPBITS(2);
+ break;
+ case STORED:
+ BYTEBITS(); /* go to byte boundary */
+ NEEDBITS(32);
+ if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
+ strm->msg = (char *)"invalid stored block lengths";
+ state->mode = BAD;
+ break;
+ }
+ state->length = (unsigned)hold & 0xffff;
+ Tracev((stderr, "inflate: stored length %u\n",
+ state->length));
+ INITBITS();
+ state->mode = COPY_;
+ if (flush == Z_TREES) goto inf_leave;
+ case COPY_:
+ state->mode = COPY;
+ case COPY:
+ copy = state->length;
+ if (copy) {
+ if (copy > have) copy = have;
+ if (copy > left) copy = left;
+ if (copy == 0) goto inf_leave;
+ zmemcpy(put, next, copy);
+ have -= copy;
+ next += copy;
+ left -= copy;
+ put += copy;
+ state->length -= copy;
+ break;
+ }
+ Tracev((stderr, "inflate: stored end\n"));
+ state->mode = TYPE;
+ break;
+ case TABLE:
+ NEEDBITS(14);
+ state->nlen = BITS(5) + 257;
+ DROPBITS(5);
+ state->ndist = BITS(5) + 1;
+ DROPBITS(5);
+ state->ncode = BITS(4) + 4;
+ DROPBITS(4);
+#ifndef PKZIP_BUG_WORKAROUND
+ if (state->nlen > 286 || state->ndist > 30) {
+ strm->msg = (char *)"too many length or distance symbols";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracev((stderr, "inflate: table sizes ok\n"));
+ state->have = 0;
+ state->mode = LENLENS;
+ case LENLENS:
+ 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;
+ state->lencode = (const code FAR *)(state->next);
+ state->lenbits = 7;
+ ret = inflate_table(CODES, state->lens, 19, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid code lengths set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: code lengths ok\n"));
+ state->have = 0;
+ state->mode = CODELENS;
+ case CODELENS:
+ while (state->have < state->nlen + state->ndist) {
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.val < 16) {
+ 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";
+ state->mode = BAD;
+ break;
+ }
+ len = 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";
+ state->mode = BAD;
+ break;
+ }
+ while (copy--)
+ state->lens[state->have++] = (unsigned short)len;
+ }
+ }
+
+ /* handle error breaks in while */
+ if (state->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";
+ state->mode = BAD;
+ break;
+ }
+
+ /* build code tables -- note: do not change the lenbits or distbits
+ values here (9 and 6) without reading the comments in inftrees.h
+ concerning the ENOUGH constants, which depend on those values */
+ state->next = state->codes;
+ state->lencode = (const code FAR *)(state->next);
+ state->lenbits = 9;
+ ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
+ &(state->lenbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid literal/lengths set";
+ state->mode = BAD;
+ break;
+ }
+ state->distcode = (const code FAR *)(state->next);
+ state->distbits = 6;
+ ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
+ &(state->next), &(state->distbits), state->work);
+ if (ret) {
+ strm->msg = (char *)"invalid distances set";
+ state->mode = BAD;
+ break;
+ }
+ Tracev((stderr, "inflate: codes ok\n"));
+ state->mode = LEN_;
+ if (flush == Z_TREES) goto inf_leave;
+ case LEN_:
+ state->mode = LEN;
+ case LEN:
+ if (have >= 6 && left >= 258) {
+ RESTORE();
+ inflate_fast(strm, out);
+ LOAD();
+ if (state->mode == TYPE)
+ state->back = -1;
+ break;
+ }
+ state->back = 0;
+ for (;;) {
+ here = state->lencode[BITS(state->lenbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if (here.op && (here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->lencode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ state->length = (unsigned)here.val;
+ if ((int)(here.op) == 0) {
+ Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
+ "inflate: literal '%c'\n" :
+ "inflate: literal 0x%02x\n", here.val));
+ state->mode = LIT;
+ break;
+ }
+ if (here.op & 32) {
+ Tracevv((stderr, "inflate: end of block\n"));
+ state->back = -1;
+ state->mode = TYPE;
+ break;
+ }
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid literal/length code";
+ state->mode = BAD;
+ break;
+ }
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = LENEXT;
+ case LENEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->length += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+ Tracevv((stderr, "inflate: length %u\n", state->length));
+ state->was = state->length;
+ state->mode = DIST;
+ case DIST:
+ for (;;) {
+ here = state->distcode[BITS(state->distbits)];
+ if ((unsigned)(here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ if ((here.op & 0xf0) == 0) {
+ last = here;
+ for (;;) {
+ here = state->distcode[last.val +
+ (BITS(last.bits + last.op) >> last.bits)];
+ if ((unsigned)(last.bits + here.bits) <= bits) break;
+ PULLBYTE();
+ }
+ DROPBITS(last.bits);
+ state->back += last.bits;
+ }
+ DROPBITS(here.bits);
+ state->back += here.bits;
+ if (here.op & 64) {
+ strm->msg = (char *)"invalid distance code";
+ state->mode = BAD;
+ break;
+ }
+ state->offset = (unsigned)here.val;
+ state->extra = (unsigned)(here.op) & 15;
+ state->mode = DISTEXT;
+ case DISTEXT:
+ if (state->extra) {
+ NEEDBITS(state->extra);
+ state->offset += BITS(state->extra);
+ DROPBITS(state->extra);
+ state->back += state->extra;
+ }
+#ifdef INFLATE_STRICT
+ if (state->offset > state->dmax) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#endif
+ Tracevv((stderr, "inflate: distance %u\n", state->offset));
+ state->mode = MATCH;
+ case MATCH:
+ if (left == 0) goto inf_leave;
+ copy = out - left;
+ if (state->offset > copy) { /* copy from window */
+ copy = state->offset - copy;
+ if (copy > state->whave) {
+ if (state->sane) {
+ strm->msg = (char *)"invalid distance too far back";
+ state->mode = BAD;
+ break;
+ }
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ Trace((stderr, "inflate.c too far\n"));
+ copy -= state->whave;
+ if (copy > state->length) copy = state->length;
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = 0;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+#endif
+ }
+ if (copy > state->wnext) {
+ copy -= state->wnext;
+ from = state->window + (state->wsize - copy);
+ }
+ else
+ from = state->window + (state->wnext - copy);
+ if (copy > state->length) copy = state->length;
+ }
+ else { /* copy from output */
+ from = put - state->offset;
+ copy = state->length;
+ }
+ if (copy > left) copy = left;
+ left -= copy;
+ state->length -= copy;
+ do {
+ *put++ = *from++;
+ } while (--copy);
+ if (state->length == 0) state->mode = LEN;
+ break;
+ case LIT:
+ if (left == 0) goto inf_leave;
+ *put++ = (unsigned char)(state->length);
+ left--;
+ state->mode = LEN;
+ break;
+ case CHECK:
+ if (state->wrap) {
+ NEEDBITS(32);
+ out -= left;
+ strm->total_out += out;
+ state->total += out;
+ if (out)
+ strm->adler = state->check =
+ UPDATE(state->check, put - out, out);
+ out = left;
+ if ((
+#ifdef GUNZIP
+ state->flags ? hold :
+#endif
+ ZSWAP32(hold)) != state->check) {
+ strm->msg = (char *)"incorrect data check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: check matches trailer\n"));
+ }
+#ifdef GUNZIP
+ state->mode = LENGTH;
+ case LENGTH:
+ if (state->wrap && state->flags) {
+ NEEDBITS(32);
+ if (hold != (state->total & 0xffffffffUL)) {
+ strm->msg = (char *)"incorrect length check";
+ state->mode = BAD;
+ break;
+ }
+ INITBITS();
+ Tracev((stderr, "inflate: length matches trailer\n"));
+ }
+#endif
+ state->mode = DONE;
+ case DONE:
+ ret = Z_STREAM_END;
+ goto inf_leave;
+ case BAD:
+ ret = Z_DATA_ERROR;
+ goto inf_leave;
+ case MEM:
+ return Z_MEM_ERROR;
+ case SYNC:
+ default:
+ return Z_STREAM_ERROR;
+ }
+
+ /*
+ Return from inflate(), updating the total counts and the check value.
+ If there was no progress during the inflate() call, return a buffer
+ error. Call updatewindow() to create and/or update the window state.
+ Note: a memory error from inflate() is non-recoverable.
+ */
+ inf_leave:
+ RESTORE();
+ if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
+ (state->mode < CHECK || flush != Z_FINISH)))
+ if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ in -= strm->avail_in;
+ out -= strm->avail_out;
+ strm->total_in += in;
+ strm->total_out += out;
+ state->total += out;
+ if (state->wrap && out)
+ strm->adler = state->check =
+ UPDATE(state->check, strm->next_out - out, out);
+ strm->data_type = state->bits + (state->last ? 64 : 0) +
+ (state->mode == TYPE ? 128 : 0) +
+ (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
+ if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
+ ret = Z_BUF_ERROR;
+ return ret;
+}
+
+int ZEXPORT inflateEnd(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+ if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->window != Z_NULL) ZFREE(strm, state->window);
+ ZFREE(strm, strm->state);
+ strm->state = Z_NULL;
+ Tracev((stderr, "inflate: end\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+Bytef *dictionary;
+uInt *dictLength;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+
+ /* copy dictionary */
+ if (state->whave && dictionary != Z_NULL) {
+ zmemcpy(dictionary, state->window + state->wnext,
+ state->whave - state->wnext);
+ zmemcpy(dictionary + state->whave - state->wnext,
+ state->window, state->wnext);
+ }
+ if (dictLength != Z_NULL)
+ *dictLength = state->whave;
+ return Z_OK;
+}
+
+int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
+z_streamp strm;
+const Bytef *dictionary;
+uInt dictLength;
+{
+ struct inflate_state FAR *state;
+ unsigned long dictid;
+ int ret;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (state->wrap != 0 && state->mode != DICT)
+ return Z_STREAM_ERROR;
+
+ /* check for correct dictionary identifier */
+ if (state->mode == DICT) {
+ dictid = adler32(0L, Z_NULL, 0);
+ dictid = adler32(dictid, dictionary, dictLength);
+ if (dictid != state->check)
+ return Z_DATA_ERROR;
+ }
+
+ /* copy dictionary to window using updatewindow(), which will amend the
+ existing dictionary if appropriate */
+ ret = updatewindow(strm, dictionary + dictLength, dictLength);
+ if (ret) {
+ state->mode = MEM;
+ return Z_MEM_ERROR;
+ }
+ state->havedict = 1;
+ Tracev((stderr, "inflate: dictionary set\n"));
+ return Z_OK;
+}
+
+int ZEXPORT inflateGetHeader(strm, head)
+z_streamp strm;
+gz_headerp head;
+{
+ struct inflate_state FAR *state;
+
+ /* check state */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
+
+ /* save header structure */
+ state->head = head;
+ head->done = 0;
+ return Z_OK;
+}
+
+/*
+ Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found
+ or when out of input. When called, *have is the number of pattern bytes
+ found in order so far, in 0..3. On return *have is updated to the new
+ state. If on return *have equals four, then the pattern was found and the
+ return value is how many bytes were read including the last byte of the
+ pattern. If *have is less than four, then the pattern has not been found
+ yet and the return value is len. In the latter case, syncsearch() can be
+ called again with more data and the *have state. *have is initialized to
+ zero for the first call.
+ */
+local unsigned syncsearch(have, buf, len)
+unsigned FAR *have;
+const unsigned char FAR *buf;
+unsigned len;
+{
+ unsigned got;
+ unsigned next;
+
+ got = *have;
+ next = 0;
+ while (next < len && got < 4) {
+ if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
+ got++;
+ else if (buf[next])
+ got = 0;
+ else
+ got = 4 - got;
+ next++;
+ }
+ *have = got;
+ return next;
+}
+
+int ZEXPORT inflateSync(strm)
+z_streamp strm;
+{
+ unsigned len; /* number of bytes to look at or looked at */
+ unsigned long in, out; /* temporary to save total_in and total_out */
+ unsigned char buf[4]; /* to restore bit buffer to byte string */
+ struct inflate_state FAR *state;
+
+ /* check parameters */
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
+
+ /* if first time, start search in bit buffer */
+ if (state->mode != SYNC) {
+ state->mode = SYNC;
+ state->hold <<= state->bits & 7;
+ state->bits -= state->bits & 7;
+ len = 0;
+ while (state->bits >= 8) {
+ buf[len++] = (unsigned char)(state->hold);
+ state->hold >>= 8;
+ state->bits -= 8;
+ }
+ state->have = 0;
+ syncsearch(&(state->have), buf, len);
+ }
+
+ /* search available input */
+ len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
+ strm->avail_in -= len;
+ strm->next_in += len;
+ strm->total_in += len;
+
+ /* return no joy or set up to restart inflate() on a new block */
+ if (state->have != 4) return Z_DATA_ERROR;
+ in = strm->total_in; out = strm->total_out;
+ inflateReset(strm);
+ strm->total_in = in; strm->total_out = out;
+ state->mode = TYPE;
+ return Z_OK;
+}
+
+/*
+ Returns true if inflate is currently at the end of a block generated by
+ Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
+ implementation to provide an additional safety check. PPP uses
+ Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
+ block. When decompressing, PPP checks that at the end of input packet,
+ inflate is waiting for these length bytes.
+ */
+int ZEXPORT inflateSyncPoint(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ return state->mode == STORED && state->bits == 0;
+}
+
+int ZEXPORT inflateCopy(dest, source)
+z_streamp dest;
+z_streamp source;
+{
+ struct inflate_state FAR *state;
+ struct inflate_state FAR *copy;
+ unsigned char FAR *window;
+ unsigned wsize;
+
+ /* check input */
+ if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
+ source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
+ return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)source->state;
+
+ /* allocate space */
+ copy = (struct inflate_state FAR *)
+ ZALLOC(source, 1, sizeof(struct inflate_state));
+ if (copy == Z_NULL) return Z_MEM_ERROR;
+ window = Z_NULL;
+ if (state->window != Z_NULL) {
+ window = (unsigned char FAR *)
+ ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
+ if (window == Z_NULL) {
+ ZFREE(source, copy);
+ return Z_MEM_ERROR;
+ }
+ }
+
+ /* copy state */
+ zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
+ zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
+ if (state->lencode >= state->codes &&
+ state->lencode <= state->codes + ENOUGH - 1) {
+ copy->lencode = copy->codes + (state->lencode - state->codes);
+ copy->distcode = copy->codes + (state->distcode - state->codes);
+ }
+ copy->next = copy->codes + (state->next - state->codes);
+ if (window != Z_NULL) {
+ wsize = 1U << state->wbits;
+ zmemcpy(window, state->window, wsize);
+ }
+ copy->window = window;
+ dest->state = (struct internal_state FAR *)copy;
+ return Z_OK;
+}
+
+int ZEXPORT inflateUndermine(strm, subvert)
+z_streamp strm;
+int subvert;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
+ state = (struct inflate_state FAR *)strm->state;
+ state->sane = !subvert;
+#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
+ return Z_OK;
+#else
+ state->sane = 1;
+ return Z_DATA_ERROR;
+#endif
+}
+
+long ZEXPORT inflateMark(strm)
+z_streamp strm;
+{
+ struct inflate_state FAR *state;
+
+ if (strm == Z_NULL || strm->state == Z_NULL) return -1L << 16;
+ state = (struct inflate_state FAR *)strm->state;
+ return ((long)(state->back) << 16) +
+ (state->mode == COPY ? state->length :
+ (state->mode == MATCH ? state->was - state->length : 0));
+}
diff --git a/compat/zlib/inflate.h b/compat/zlib/inflate.h
new file mode 100644
index 0000000..95f4986
--- /dev/null
+++ b/compat/zlib/inflate.h
@@ -0,0 +1,122 @@
+/* inflate.h -- internal inflate state definition
+ * Copyright (C) 1995-2009 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.
+ */
+
+/* define NO_GZIP when compiling if you want to disable gzip header and
+ trailer decoding by inflate(). NO_GZIP would be used to avoid linking in
+ the crc code when it is not needed. For shared libraries, gzip decoding
+ should be left enabled. */
+#ifndef NO_GZIP
+# define GUNZIP
+#endif
+
+/* Possible inflate modes between inflate() calls */
+typedef enum {
+ HEAD, /* i: waiting for magic header */
+ FLAGS, /* i: waiting for method and flags (gzip) */
+ TIME, /* i: waiting for modification time (gzip) */
+ OS, /* i: waiting for extra flags and operating system (gzip) */
+ EXLEN, /* i: waiting for extra length (gzip) */
+ EXTRA, /* i: waiting for extra bytes (gzip) */
+ NAME, /* i: waiting for end of file name (gzip) */
+ COMMENT, /* i: waiting for end of comment (gzip) */
+ HCRC, /* i: waiting for header crc (gzip) */
+ DICTID, /* i: waiting for dictionary check value */
+ DICT, /* waiting for inflateSetDictionary() call */
+ TYPE, /* i: waiting for type bits, including last-flag bit */
+ TYPEDO, /* i: same, but skip check to exit inflate on new block */
+ STORED, /* i: waiting for stored size (length and complement) */
+ COPY_, /* i/o: same as COPY below, but only first time in */
+ COPY, /* i/o: waiting for input or output to copy stored block */
+ TABLE, /* i: waiting for dynamic block table lengths */
+ LENLENS, /* i: waiting for code length code lengths */
+ CODELENS, /* i: waiting for length/lit and distance code lengths */
+ LEN_, /* i: same as LEN below, but only first time in */
+ LEN, /* i: waiting for length/lit/eob code */
+ LENEXT, /* i: waiting for length extra bits */
+ DIST, /* i: waiting for distance code */
+ DISTEXT, /* i: waiting for distance extra bits */
+ MATCH, /* o: waiting for output space to copy string */
+ LIT, /* o: waiting for output space to write literal */
+ CHECK, /* i: waiting for 32-bit check value */
+ LENGTH, /* i: waiting for 32-bit length (gzip) */
+ DONE, /* finished check, done -- remain here until reset */
+ BAD, /* got a data error -- remain here until reset */
+ MEM, /* got an inflate() memory error -- remain here until reset */
+ SYNC /* looking for synchronization bytes to restart inflate() */
+} inflate_mode;
+
+/*
+ State transitions between above modes -
+
+ (most modes can go to BAD or MEM on error -- not shown for clarity)
+
+ Process header:
+ HEAD -> (gzip) or (zlib) or (raw)
+ (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT ->
+ HCRC -> TYPE
+ (zlib) -> DICTID or TYPE
+ DICTID -> DICT -> TYPE
+ (raw) -> TYPEDO
+ Read deflate blocks:
+ TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK
+ STORED -> COPY_ -> COPY -> TYPE
+ TABLE -> LENLENS -> CODELENS -> LEN_
+ LEN_ -> LEN
+ Read deflate codes in fixed or dynamic block:
+ LEN -> LENEXT or LIT or TYPE
+ LENEXT -> DIST -> DISTEXT -> MATCH -> LEN
+ LIT -> LEN
+ Process trailer:
+ CHECK -> LENGTH -> DONE
+ */
+
+/* state maintained between inflate() calls. Approximately 10K bytes. */
+struct inflate_state {
+ inflate_mode mode; /* current inflate mode */
+ int last; /* true if processing last block */
+ int wrap; /* bit 0 true for zlib, bit 1 true for gzip */
+ int havedict; /* true if dictionary provided */
+ int flags; /* gzip header method and flags (0 if zlib) */
+ unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */
+ unsigned long check; /* protected copy of check value */
+ unsigned long total; /* protected copy of output count */
+ gz_headerp head; /* where to save gzip header information */
+ /* sliding window */
+ unsigned wbits; /* log base 2 of requested window size */
+ unsigned wsize; /* window size or zero if not using window */
+ unsigned whave; /* valid bytes in the window */
+ unsigned wnext; /* window write index */
+ unsigned char FAR *window; /* allocated sliding window, if needed */
+ /* bit accumulator */
+ unsigned long hold; /* input bit accumulator */
+ unsigned bits; /* number of bits in "in" */
+ /* for string and stored block copying */
+ unsigned length; /* literal or length of data to copy */
+ unsigned offset; /* distance back to copy string from */
+ /* for table and code decoding */
+ unsigned extra; /* extra bits needed */
+ /* fixed and dynamic code tables */
+ 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 */
+ /* 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 */
+ int sane; /* if false, allow invalid distance too far */
+ int back; /* bits back of last unprocessed length/lit */
+ unsigned was; /* initial length of match */
+};
diff --git a/compat/zlib/inftrees.c b/compat/zlib/inftrees.c
new file mode 100644
index 0000000..44d89cf
--- /dev/null
+++ b/compat/zlib/inftrees.c
@@ -0,0 +1,306 @@
+/* inftrees.c -- generate Huffman trees for efficient decoding
+ * Copyright (C) 1995-2013 Mark Adler
+ * For conditions of distribution and use, see copyright notice in zlib.h
+ */
+
+#include "zutil.h"
+#include "inftrees.h"
+
+#define MAXBITS 15
+
+const char inflate_copyright[] =
+ " inflate 1.2.8 Copyright 1995-2013 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 ZLIB_INTERNAL inflate_table(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 here; /* 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, 258, 0, 0};
+ static const unsigned short lext[31] = { /* Length codes 257..285 extra */
+ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78};
+ static const unsigned short dbase[32] = { /* Distance codes 0..29 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, 0, 0};
+ static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
+ 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
+ 23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
+ 28, 28, 29, 29, 64, 64};
+
+ /*
+ 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) { /* no symbols to code at all */
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)1;
+ here.val = (unsigned short)0;
+ *(*table)++ = here; /* make a table to force an error */
+ *(*table)++ = here;
+ *bits = 1;
+ return 0; /* no symbols, but wait for decoding to report error */
+ }
+ for (min = 1; min < max; 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 inftrees.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 */
+ here.bits = (unsigned char)(len - drop);
+ if ((int)(work[sym]) < end) {
+ here.op = (unsigned char)0;
+ here.val = work[sym];
+ }
+ else if ((int)(work[sym]) > end) {
+ here.op = (unsigned char)(extra[work[sym]]);
+ here.val = base[work[sym]];
+ }
+ else {
+ here.op = (unsigned char)(32 + 64); /* end of block */
+ here.val = 0;
+ }
+
+ /* replicate for those indices with low len bits equal to huff */
+ incr = 1U << (len - drop);
+ fill = 1U << curr;
+ min = fill; /* save offset to next table */
+ do {
+ fill -= incr;
+ next[(huff >> drop) + fill] = here;
+ } 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 += min; /* here min is 1 << 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 remaining table entry if code is incomplete (guaranteed to have
+ at most one remaining entry, since if the code is incomplete, the
+ maximum code length that was allowed to get this far is one bit) */
+ if (huff != 0) {
+ here.op = (unsigned char)64; /* invalid code marker */
+ here.bits = (unsigned char)(len - drop);
+ here.val = (unsigned short)0;
+ next[huff] = here;
+ }
+
+ /* set return parameters */
+ *table += used;
+ *bits = root;
+ return 0;
+}
diff --git a/compat/zlib/inftrees.h b/compat/zlib/inftrees.h
new file mode 100644
index 0000000..baa53a0
--- /dev/null
+++ b/compat/zlib/inftrees.h
@@ -0,0 +1,62 @@
+/* inftrees.h -- header to use inftrees.c
+ * Copyright (C) 1995-2005, 2010 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
+ 0001eeee - 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
+ 1444, which is the sum of 852 for literal/length codes and 592 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 30 6 15" for distance codes returns 592.
+ The initial root table size (9 or 6) is found in the fifth argument of the
+ inflate_table() calls in inflate.c and infback.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 592
+#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
+
+/* Type of code to build for inflate_table() */
+typedef enum {
+ CODES,
+ LENS,
+ DISTS
+} codetype;
+
+int ZLIB_INTERNAL inflate_table OF((codetype type, unsigned short FAR *lens,
+ unsigned codes, code FAR * FAR *table,
+ unsigned FAR *bits, unsigned short FAR *work));
diff --git a/compat/zlib/make_vms.com b/compat/zlib/make_vms.com
new file mode 100644
index 0000000..65e9d0c
--- /dev/null
+++ b/compat/zlib/make_vms.com
@@ -0,0 +1,867 @@
+$! make libz under VMS written by
+$! Martin P.J. Zinser
+$!
+$! In case of problems with the install you might contact me at
+$! zinser@zinser.no-ip.info(preferred) or
+$! martin.zinser@eurexchange.com (work)
+$!
+$! Make procedure history for Zlib
+$!
+$!------------------------------------------------------------------------------
+$! Version history
+$! 0.01 20060120 First version to receive a number
+$! 0.02 20061008 Adapt to new Makefile.in
+$! 0.03 20091224 Add support for large file check
+$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite
+$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in
+$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new exmples
+$! subdir path, update module search in makefile.in
+$! 0.07 20120115 Triggered by work done by Alexey Chupahin completly redesigned
+$! shared image creation
+$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared
+$! image
+$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)).
+$! "" -> automatic, preference: MMK, MMS, built-in.
+$!
+$ on error then goto err_exit
+$!
+$ true = 1
+$ false = 0
+$ tmpnam = "temp_" + f$getjpi("","pid")
+$ tt = tmpnam + ".txt"
+$ tc = tmpnam + ".c"
+$ th = tmpnam + ".h"
+$ define/nolog tconfig 'th'
+$ its_decc = false
+$ its_vaxc = false
+$ its_gnuc = false
+$ s_case = False
+$!
+$! Setup variables holding "config" information
+$!
+$ Make = "''p1'"
+$ name = "Zlib"
+$ version = "?.?.?"
+$ v_string = "ZLIB_VERSION"
+$ v_file = "zlib.h"
+$ ccopt = "/include = []"
+$ lopts = ""
+$ dnsrl = ""
+$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in"
+$ conf_check_string = ""
+$ linkonly = false
+$ optfile = name + ".opt"
+$ mapfile = name + ".map"
+$ libdefs = ""
+$ vax = f$getsyi("HW_MODEL").lt.1024
+$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096
+$ ia64 = f$getsyi("HW_MODEL").ge.4096
+$!
+$! 2012-03-05 SMS.
+$! Why is this needed? And if it is needed, why not simply ".not. vax"?
+$!
+$!!! if axp .or. ia64 then set proc/parse=extended
+$!
+$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL")
+$ mydef = F$parse(whoami,,,"DEVICE")
+$ mydir = f$parse(whoami,,,"DIRECTORY") - "]["
+$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type")
+$!
+$! Check for MMK/MMS
+$!
+$ if (Make .eqs. "")
+$ then
+$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS"
+$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK"
+$ else
+$ Make = f$edit( Make, "trim")
+$ endif
+$!
+$ gosub find_version
+$!
+$ open/write topt tmp.opt
+$ open/write optf 'optfile'
+$!
+$ gosub check_opts
+$!
+$! Look for the compiler used
+$!
+$ gosub check_compiler
+$ close topt
+$ close optf
+$!
+$ if its_decc
+$ then
+$ ccopt = "/prefix=all" + ccopt
+$ if f$trnlnm("SYS") .eqs. ""
+$ then
+$ if axp
+$ then
+$ define sys sys$library:
+$ else
+$ ccopt = "/decc" + ccopt
+$ define sys decc$library_include:
+$ endif
+$ endif
+$!
+$! 2012-03-05 SMS.
+$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX?
+$!
+$ if axp .or. ia64
+$ then
+$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)"
+$ s_case = true
+$ endif
+$ endif
+$ if its_vaxc .or. its_gnuc
+$ then
+$ if f$trnlnm("SYS").eqs."" then define sys sys$library:
+$ endif
+$!
+$! Build a fake configure input header
+$!
+$ open/write conf_hin config.hin
+$ write conf_hin "#undef _LARGEFILE64_SOURCE"
+$ close conf_hin
+$!
+$!
+$ i = 0
+$FIND_ACONF:
+$ fname = f$element(i,"#",aconf_in_file)
+$ if fname .eqs. "#" then goto AMISS_ERR
+$ if f$search(fname) .eqs. ""
+$ then
+$ i = i + 1
+$ goto find_aconf
+$ endif
+$ open/read/err=aconf_err aconf_in 'fname'
+$ open/write aconf zconf.h
+$ACONF_LOOP:
+$ read/end_of_file=aconf_exit aconf_in line
+$ work = f$edit(line, "compress,trim")
+$ if f$extract(0,6,work) .nes. "#undef"
+$ then
+$ if f$extract(0,12,work) .nes. "#cmakedefine"
+$ then
+$ write aconf line
+$ endif
+$ else
+$ cdef = f$element(1," ",work)
+$ gosub check_config
+$ endif
+$ goto aconf_loop
+$ACONF_EXIT:
+$ write aconf ""
+$ write aconf "/* VMS specifics added by make_vms.com: */"
+$ write aconf "#define VMS 1"
+$ write aconf "#include <unistd.h>"
+$ write aconf "#include <unixio.h>"
+$ write aconf "#ifdef _LARGEFILE"
+$ write aconf "# define off64_t __off64_t"
+$ write aconf "# define fopen64 fopen"
+$ write aconf "# define fseeko64 fseeko"
+$ write aconf "# define lseek64 lseek"
+$ write aconf "# define ftello64 ftell"
+$ write aconf "#endif"
+$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)"
+$ write aconf "# define HAVE_VSNPRINTF"
+$ write aconf "#endif"
+$ close aconf_in
+$ close aconf
+$ if f$search("''th'") .nes. "" then delete 'th';*
+$! Build the thing plain or with mms
+$!
+$ write sys$output "Compiling Zlib sources ..."
+$ if make.eqs.""
+$ then
+$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;*
+$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;*
+$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" -
+ adler32.c zlib.h zconf.h
+$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" -
+ compress.c zlib.h zconf.h
+$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" -
+ crc32.c zlib.h zconf.h
+$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" -
+ deflate.c deflate.h zutil.h zlib.h zconf.h
+$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" -
+ gzclose.c zutil.h zlib.h zconf.h
+$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" -
+ gzlib.c zutil.h zlib.h zconf.h
+$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" -
+ gzread.c zutil.h zlib.h zconf.h
+$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" -
+ gzwrite.c zutil.h zlib.h zconf.h
+$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" -
+ infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
+$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" -
+ inffast.c zutil.h zlib.h zconf.h inffast.h
+$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" -
+ inflate.c zutil.h zlib.h zconf.h infblock.h
+$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" -
+ inftrees.c zutil.h zlib.h zconf.h inftrees.h
+$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" -
+ trees.c deflate.h zutil.h zlib.h zconf.h
+$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" -
+ uncompr.c zlib.h zconf.h
+$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" -
+ zutil.c zutil.h zlib.h zconf.h
+$ write sys$output "Building Zlib ..."
+$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ
+$ write sys$output "Building example..."
+$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" -
+ [.test]example.c zlib.h zconf.h
+$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb
+$ write sys$output "Building minigzip..."
+$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" -
+ [.test]minigzip.c zlib.h zconf.h
+$ call make minigzip.exe -
+ "LINK minigzip,libz.olb/lib" -
+ minigzip.obj libz.olb
+$ else
+$ gosub crea_mms
+$ write sys$output "Make ''name' ''version' with ''Make' "
+$ 'make'
+$ endif
+$!
+$! Create shareable image
+$!
+$ gosub crea_olist
+$ write sys$output "Creating libzshr.exe"
+$ call map_2_shopt 'mapfile' 'optfile'
+$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt
+$ write sys$output "Zlib build completed"
+$ delete/nolog tmp.opt;*
+$ exit
+$AMISS_ERR:
+$ write sys$output "No source for config.hin found."
+$ write sys$output "Tried any of ''aconf_in_file'"
+$ goto err_exit
+$CC_ERR:
+$ write sys$output "C compiler required to build ''name'"
+$ goto err_exit
+$ERR_EXIT:
+$ set message/facil/ident/sever/text
+$ close/nolog optf
+$ close/nolog topt
+$ close/nolog aconf_in
+$ close/nolog aconf
+$ close/nolog out
+$ close/nolog min
+$ close/nolog mod
+$ close/nolog h_in
+$ write sys$output "Exiting..."
+$ exit 2
+$!
+$!
+$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES
+$ V = 'F$Verify(0)
+$! P1 = What we are trying to make
+$! P2 = Command to make it
+$! P3 - P8 What it depends on
+$
+$ If F$Search(P1) .Eqs. "" Then Goto Makeit
+$ Time = F$CvTime(F$File(P1,"RDT"))
+$arg=3
+$Loop:
+$ Argument = P'arg
+$ If Argument .Eqs. "" Then Goto Exit
+$ El=0
+$Loop2:
+$ File = F$Element(El," ",Argument)
+$ If File .Eqs. " " Then Goto Endl
+$ AFile = ""
+$Loop3:
+$ OFile = AFile
+$ AFile = F$Search(File)
+$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl
+$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit
+$ Goto Loop3
+$NextEL:
+$ El = El + 1
+$ Goto Loop2
+$EndL:
+$ arg=arg+1
+$ If arg .Le. 8 Then Goto Loop
+$ Goto Exit
+$
+$Makeit:
+$ VV=F$VERIFY(0)
+$ write sys$output P2
+$ 'P2
+$ VV='F$Verify(VV)
+$Exit:
+$ If V Then Set Verify
+$ENDSUBROUTINE
+$!------------------------------------------------------------------------------
+$!
+$! Check command line options and set symbols accordingly
+$!
+$!------------------------------------------------------------------------------
+$! Version history
+$! 0.01 20041206 First version to receive a number
+$! 0.02 20060126 Add new "HELP" target
+$ CHECK_OPTS:
+$ i = 1
+$ OPT_LOOP:
+$ if i .lt. 9
+$ then
+$ cparm = f$edit(p'i',"upcase")
+$!
+$! Check if parameter actually contains something
+$!
+$ if f$edit(cparm,"trim") .nes. ""
+$ then
+$ if cparm .eqs. "DEBUG"
+$ then
+$ ccopt = ccopt + "/noopt/deb"
+$ lopts = lopts + "/deb"
+$ endif
+$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ ccopt = ccopt + f$extract(start,len,cparm)
+$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) -
+ then s_case = true
+$ endif
+$ if cparm .eqs. "LINK" then linkonly = true
+$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ lopts = lopts + f$extract(start,len,cparm)
+$ endif
+$ if f$locate("CC=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ cc_com = f$extract(start,len,cparm)
+ if (cc_com .nes. "DECC") .and. -
+ (cc_com .nes. "VAXC") .and. -
+ (cc_com .nes. "GNUC")
+$ then
+$ write sys$output "Unsupported compiler choice ''cc_com' ignored"
+$ write sys$output "Use DECC, VAXC, or GNUC instead"
+$ else
+$ if cc_com .eqs. "DECC" then its_decc = true
+$ if cc_com .eqs. "VAXC" then its_vaxc = true
+$ if cc_com .eqs. "GNUC" then its_gnuc = true
+$ endif
+$ endif
+$ if f$locate("MAKE=",cparm) .lt. f$length(cparm)
+$ then
+$ start = f$locate("=",cparm) + 1
+$ len = f$length(cparm) - start
+$ mmks = f$extract(start,len,cparm)
+$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS")
+$ then
+$ make = mmks
+$ else
+$ write sys$output "Unsupported make choice ''mmks' ignored"
+$ write sys$output "Use MMK or MMS instead"
+$ endif
+$ endif
+$ if cparm .eqs. "HELP" then gosub bhelp
+$ endif
+$ i = i + 1
+$ goto opt_loop
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Look for the compiler used
+$!
+$! Version history
+$! 0.01 20040223 First version to receive a number
+$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists
+$! 0.03 20060202 Extend handling of GNU C
+$! 0.04 20090402 Compaq -> hp
+$CHECK_COMPILER:
+$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
+$ then
+$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "")
+$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "")
+$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "")
+$ endif
+$!
+$! Exit if no compiler available
+$!
+$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc))
+$ then goto CC_ERR
+$ else
+$ if its_decc
+$ then
+$ write sys$output "CC compiler check ... hp C"
+$ if f$trnlnm("decc$no_rooted_search_lists") .nes. ""
+$ then
+$ dnrsl = f$trnlnm("decc$no_rooted_search_lists")
+$ endif
+$ define/nolog decc$no_rooted_search_lists 1
+$ else
+$ if its_vaxc then write sys$output "CC compiler check ... VAX C"
+$ if its_gnuc
+$ then
+$ write sys$output "CC compiler check ... GNU C"
+$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib"
+$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib"
+$ cc = "gcc"
+$ endif
+$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share"
+$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share"
+$ endif
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! If MMS/MMK are available dump out the descrip.mms if required
+$!
+$CREA_MMS:
+$ write sys$output "Creating descrip.mms..."
+$ create descrip.mms
+$ open/append out descrip.mms
+$ copy sys$input: out
+$ deck
+# descrip.mms: MMS description file for building zlib on VMS
+# written by Martin P.J. Zinser
+# <zinser@zinser.no-ip.info or martin.zinser@eurexchange.com>
+
+OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\
+ gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\
+ deflate.obj, trees.obj, zutil.obj, inflate.obj, \
+ inftrees.obj, inffast.obj
+
+$ eod
+$ write out "CFLAGS=", ccopt
+$ write out "LOPTS=", lopts
+$ write out "all : example.exe minigzip.exe libz.olb"
+$ copy sys$input: out
+$ deck
+ @ write sys$output " Example applications available"
+
+libz.olb : libz.olb($(OBJS))
+ @ write sys$output " libz available"
+
+example.exe : example.obj libz.olb
+ link $(LOPTS) example,libz.olb/lib
+
+minigzip.exe : minigzip.obj libz.olb
+ link $(LOPTS) minigzip,libz.olb/lib
+
+clean :
+ delete *.obj;*,libz.olb;*,*.opt;*,*.exe;*
+
+
+# Other dependencies.
+adler32.obj : adler32.c zutil.h zlib.h zconf.h
+compress.obj : compress.c zlib.h zconf.h
+crc32.obj : crc32.c zutil.h zlib.h zconf.h
+deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h
+example.obj : [.test]example.c zlib.h zconf.h
+gzclose.obj : gzclose.c zutil.h zlib.h zconf.h
+gzlib.obj : gzlib.c zutil.h zlib.h zconf.h
+gzread.obj : gzread.c zutil.h zlib.h zconf.h
+gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h
+inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h
+inflate.obj : inflate.c zutil.h zlib.h zconf.h
+inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h
+minigzip.obj : [.test]minigzip.c zlib.h zconf.h
+trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h
+uncompr.obj : uncompr.c zlib.h zconf.h
+zutil.obj : zutil.c zutil.h zlib.h zconf.h
+infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h
+$ eod
+$ close out
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Read list of core library sources from makefile.in and create options
+$! needed to build shareable image
+$!
+$CREA_OLIST:
+$ open/read min makefile.in
+$ open/write mod modules.opt
+$ src_check_list = "OBJZ =#OBJG ="
+$MRLOOP:
+$ read/end=mrdone min rec
+$ i = 0
+$SRC_CHECK_LOOP:
+$ src_check = f$element(i, "#", src_check_list)
+$ i = i+1
+$ if src_check .eqs. "#" then goto mrloop
+$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop
+$ rec = rec - src_check
+$ gosub extra_filnam
+$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop
+$MRSLOOP:
+$ read/end=mrdone min rec
+$ gosub extra_filnam
+$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop
+$MRDONE:
+$ close min
+$ close mod
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Take record extracted in crea_olist and split it into single filenames
+$!
+$EXTRA_FILNAM:
+$ myrec = f$edit(rec - "\", "trim,compress")
+$ i = 0
+$FELOOP:
+$ srcfil = f$element(i," ", myrec)
+$ if (srcfil .nes. " ")
+$ then
+$ write mod f$parse(srcfil,,,"NAME"), ".obj"
+$ i = i + 1
+$ goto feloop
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Find current Zlib version number
+$!
+$FIND_VERSION:
+$ open/read h_in 'v_file'
+$hloop:
+$ read/end=hdone h_in rec
+$ rec = f$edit(rec,"TRIM")
+$ if (f$extract(0,1,rec) .nes. "#") then goto hloop
+$ rec = f$edit(rec - "#", "TRIM")
+$ if f$element(0," ",rec) .nes. "define" then goto hloop
+$ if f$element(1," ",rec) .eqs. v_string
+$ then
+$ version = 'f$element(2," ",rec)'
+$ goto hdone
+$ endif
+$ goto hloop
+$hdone:
+$ close h_in
+$ return
+$!------------------------------------------------------------------------------
+$!
+$CHECK_CONFIG:
+$!
+$ in_ldef = f$locate(cdef,libdefs)
+$ if (in_ldef .lt. f$length(libdefs))
+$ then
+$ write aconf "#define ''cdef' 1"
+$ libdefs = f$extract(0,in_ldef,libdefs) + -
+ f$extract(in_ldef + f$length(cdef) + 1, -
+ f$length(libdefs) - in_ldef - f$length(cdef) - 1, -
+ libdefs)
+$ else
+$ if (f$type('cdef') .eqs. "INTEGER")
+$ then
+$ write aconf "#define ''cdef' ", 'cdef'
+$ else
+$ if (f$type('cdef') .eqs. "STRING")
+$ then
+$ write aconf "#define ''cdef' ", """", '''cdef'', """"
+$ else
+$ gosub check_cc_def
+$ endif
+$ endif
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Check if this is a define relating to the properties of the C/C++
+$! compiler
+$!
+$ CHECK_CC_DEF:
+$ if (cdef .eqs. "_LARGEFILE64_SOURCE")
+$ then
+$ copy sys$input: 'tc'
+$ deck
+#include "tconfig"
+#define _LARGEFILE
+#include <stdio.h>
+
+int main(){
+FILE *fp;
+ fp = fopen("temp.txt","r");
+ fseeko(fp,1,SEEK_SET);
+ fclose(fp);
+}
+
+$ eod
+$ test_inv = false
+$ comm_h = false
+$ gosub cc_prop_check
+$ return
+$ endif
+$ write aconf "/* ", line, " */"
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Check for properties of C/C++ compiler
+$!
+$! Version history
+$! 0.01 20031020 First version to receive a number
+$! 0.02 20031022 Added logic for defines with value
+$! 0.03 20040309 Make sure local config file gets not deleted
+$! 0.04 20041230 Also write include for configure run
+$! 0.05 20050103 Add processing of "comment defines"
+$CC_PROP_CHECK:
+$ cc_prop = true
+$ is_need = false
+$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true)
+$ if f$search(th) .eqs. "" then create 'th'
+$ set message/nofac/noident/nosever/notext
+$ on error then continue
+$ cc 'tmpnam'
+$ if .not. ($status) then cc_prop = false
+$ on error then continue
+$! The headers might lie about the capabilities of the RTL
+$ link 'tmpnam',tmp.opt/opt
+$ if .not. ($status) then cc_prop = false
+$ set message/fac/ident/sever/text
+$ on error then goto err_exit
+$ delete/nolog 'tmpnam'.*;*/exclude='th'
+$ if (cc_prop .and. .not. is_need) .or. -
+ (.not. cc_prop .and. is_need)
+$ then
+$ write sys$output "Checking for ''cdef'... yes"
+$ if f$type('cdef_val'_yes) .nes. ""
+$ then
+$ if f$type('cdef_val'_yes) .eqs. "INTEGER" -
+ then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes)
+$ if f$type('cdef_val'_yes) .eqs. "STRING" -
+ then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes)
+$ else
+$ call write_config f$fao("#define !AS 1",cdef)
+$ endif
+$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. -
+ (cdef .eqs. "_LARGEFILE64_SOURCE") then -
+ call write_config f$string("#define _LARGEFILE 1")
+$ else
+$ write sys$output "Checking for ''cdef'... no"
+$ if (comm_h)
+$ then
+ call write_config f$fao("/* !AS */",line)
+$ else
+$ if f$type('cdef_val'_no) .nes. ""
+$ then
+$ if f$type('cdef_val'_no) .eqs. "INTEGER" -
+ then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no)
+$ if f$type('cdef_val'_no) .eqs. "STRING" -
+ then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no)
+$ else
+$ call write_config f$fao("#undef !AS",cdef)
+$ endif
+$ endif
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Check for properties of C/C++ compiler with multiple result values
+$!
+$! Version history
+$! 0.01 20040127 First version
+$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05
+$CC_MPROP_CHECK:
+$ cc_prop = true
+$ i = 1
+$ idel = 1
+$ MT_LOOP:
+$ if f$type(result_'i') .eqs. "STRING"
+$ then
+$ set message/nofac/noident/nosever/notext
+$ on error then continue
+$ cc 'tmpnam'_'i'
+$ if .not. ($status) then cc_prop = false
+$ on error then continue
+$! The headers might lie about the capabilities of the RTL
+$ link 'tmpnam'_'i',tmp.opt/opt
+$ if .not. ($status) then cc_prop = false
+$ set message/fac/ident/sever/text
+$ on error then goto err_exit
+$ delete/nolog 'tmpnam'_'i'.*;*
+$ if (cc_prop)
+$ then
+$ write sys$output "Checking for ''cdef'... ", mdef_'i'
+$ if f$type(mdef_'i') .eqs. "INTEGER" -
+ then call write_config f$fao("#define !AS !UL",cdef,mdef_'i')
+$ if f$type('cdef_val'_yes) .eqs. "STRING" -
+ then call write_config f$fao("#define !AS !AS",cdef,mdef_'i')
+$ goto msym_clean
+$ else
+$ i = i + 1
+$ goto mt_loop
+$ endif
+$ endif
+$ write sys$output "Checking for ''cdef'... no"
+$ call write_config f$fao("#undef !AS",cdef)
+$ MSYM_CLEAN:
+$ if (idel .le. msym_max)
+$ then
+$ delete/sym mdef_'idel'
+$ idel = idel + 1
+$ goto msym_clean
+$ endif
+$ return
+$!------------------------------------------------------------------------------
+$!
+$! Write configuration to both permanent and temporary config file
+$!
+$! Version history
+$! 0.01 20031029 First version to receive a number
+$!
+$WRITE_CONFIG: SUBROUTINE
+$ write aconf 'p1'
+$ open/append confh 'th'
+$ write confh 'p1'
+$ close confh
+$ENDSUBROUTINE
+$!------------------------------------------------------------------------------
+$!
+$! Analyze the project map file and create the symbol vector for a shareable
+$! image from it
+$!
+$! Version history
+$! 0.01 20120128 First version
+$! 0.02 20120226 Add pre-load logic
+$!
+$ MAP_2_SHOPT: Subroutine
+$!
+$ SAY := "WRITE_ SYS$OUTPUT"
+$!
+$ IF F$SEARCH("''P1'") .EQS. ""
+$ THEN
+$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available"
+$ goto exit_m2s
+$ ENDIF
+$ IF "''P2'" .EQS. ""
+$ THEN
+$ SAY "MAP_2_SHOPT: Error, no output file provided"
+$ goto exit_m2s
+$ ENDIF
+$!
+$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary"
+$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread"
+$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary"
+$ module4 = "inflateSync#uncompress#zlibVersion#compress"
+$ open/read map 'p1
+$ if axp .or. ia64
+$ then
+$ open/write aopt a.opt
+$ open/write bopt b.opt
+$ write aopt " CASE_SENSITIVE=YES"
+$ write bopt "SYMBOL_VECTOR= (-"
+$ mod_sym_num = 1
+$ MOD_SYM_LOOP:
+$ if f$type(module'mod_sym_num') .nes. ""
+$ then
+$ mod_in = 0
+$ MOD_SYM_IN:
+$ shared_proc = f$element(mod_in, "#", module'mod_sym_num')
+$ if shared_proc .nes. "#"
+$ then
+$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",-
+ f$edit(shared_proc,"upcase"),shared_proc)
+$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc)
+$ mod_in = mod_in + 1
+$ goto mod_sym_in
+$ endif
+$ mod_sym_num = mod_sym_num + 1
+$ goto mod_sym_loop
+$ endif
+$MAP_LOOP:
+$ read/end=map_end map line
+$ if (f$locate("{",line).lt. f$length(line)) .or. -
+ (f$locate("global:", line) .lt. f$length(line))
+$ then
+$ proc = true
+$ goto map_loop
+$ endif
+$ if f$locate("}",line).lt. f$length(line) then proc = false
+$ if f$locate("local:", line) .lt. f$length(line) then proc = false
+$ if proc
+$ then
+$ shared_proc = f$edit(line,"collapse")
+$ chop_semi = f$locate(";", shared_proc)
+$ if chop_semi .lt. f$length(shared_proc) then -
+ shared_proc = f$extract(0, chop_semi, shared_proc)
+$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",-
+ f$edit(shared_proc,"upcase"),shared_proc)
+$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc)
+$ endif
+$ goto map_loop
+$MAP_END:
+$ close/nolog aopt
+$ close/nolog bopt
+$ open/append libopt 'p2'
+$ open/read aopt a.opt
+$ open/read bopt b.opt
+$ALOOP:
+$ read/end=aloop_end aopt line
+$ write libopt line
+$ goto aloop
+$ALOOP_END:
+$ close/nolog aopt
+$ sv = ""
+$BLOOP:
+$ read/end=bloop_end bopt svn
+$ if (svn.nes."")
+$ then
+$ if (sv.nes."") then write libopt sv
+$ sv = svn
+$ endif
+$ goto bloop
+$BLOOP_END:
+$ write libopt f$extract(0,f$length(sv)-2,sv), "-"
+$ write libopt ")"
+$ close/nolog bopt
+$ delete/nolog/noconf a.opt;*,b.opt;*
+$ else
+$ if vax
+$ then
+$ open/append libopt 'p2'
+$ mod_sym_num = 1
+$ VMOD_SYM_LOOP:
+$ if f$type(module'mod_sym_num') .nes. ""
+$ then
+$ mod_in = 0
+$ VMOD_SYM_IN:
+$ shared_proc = f$element(mod_in, "#", module'mod_sym_num')
+$ if shared_proc .nes. "#"
+$ then
+$ write libopt f$fao("UNIVERSAL=!AS",-
+ f$edit(shared_proc,"upcase"))
+$ mod_in = mod_in + 1
+$ goto vmod_sym_in
+$ endif
+$ mod_sym_num = mod_sym_num + 1
+$ goto vmod_sym_loop
+$ endif
+$VMAP_LOOP:
+$ read/end=vmap_end map line
+$ if (f$locate("{",line).lt. f$length(line)) .or. -
+ (f$locate("global:", line) .lt. f$length(line))
+$ then
+$ proc = true
+$ goto vmap_loop
+$ endif
+$ if f$locate("}",line).lt. f$length(line) then proc = false
+$ if f$locate("local:", line) .lt. f$length(line) then proc = false
+$ if proc
+$ then
+$ shared_proc = f$edit(line,"collapse")
+$ chop_semi = f$locate(";", shared_proc)
+$ if chop_semi .lt. f$length(shared_proc) then -
+ shared_proc = f$extract(0, chop_semi, shared_proc)
+$ write libopt f$fao("UNIVERSAL=!AS",-
+ f$edit(shared_proc,"upcase"))
+$ endif
+$ goto vmap_loop
+$VMAP_END:
+$ else
+$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)"
+$ write sys$output "No options file created"
+$ endif
+$ endif
+$ EXIT_M2S:
+$ close/nolog map
+$ close/nolog libopt
+$ endsubroutine
diff --git a/compat/zlib/msdos/Makefile.bor b/compat/zlib/msdos/Makefile.bor
new file mode 100644
index 0000000..3d12a2c
--- /dev/null
+++ b/compat/zlib/msdos/Makefile.bor
@@ -0,0 +1,115 @@
+# Makefile for zlib
+# Borland C++
+# Last updated: 15-Mar-2003
+
+# To use, do "make -fmakefile.bor"
+# To compile in small model, set below: MODEL=s
+
+# WARNING: the small model is supported but only for small values of
+# MAX_WBITS and MAX_MEM_LEVEL. For example:
+# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3
+# If you wish to reduce the memory requirements (default 256K for big
+# objects plus a few K), you can add to the LOC macro below:
+# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
+
+# ------------ Turbo C++, Borland C++ ------------
+
+# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
+# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
+# to the declaration of LOC here:
+LOC = $(LOCAL_ZLIB)
+
+# type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
+CPU_TYP = 0
+
+# memory model: one of s, m, c, l (small, medium, compact, large)
+MODEL=l
+
+# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version
+CC=bcc
+LD=bcc
+AR=tlib
+
+# compiler flags
+# replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0
+CFLAGS=-O2 -Z -m$(MODEL) $(LOC)
+
+LDFLAGS=-m$(MODEL) -f-
+
+
+# variables
+ZLIB_LIB = zlib_$(MODEL).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
+
+
+# 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)
+
+example.exe: example.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
+
+minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
+
+test: example.exe minigzip.exe
+ example
+ echo hello world | minigzip | minigzip -d
+
+clean:
+ -del *.obj
+ -del *.lib
+ -del *.exe
+ -del zlib_*.bak
+ -del foo.gz
diff --git a/compat/zlib/msdos/Makefile.dj2 b/compat/zlib/msdos/Makefile.dj2
new file mode 100644
index 0000000..29b0395
--- /dev/null
+++ b/compat/zlib/msdos/Makefile.dj2
@@ -0,0 +1,104 @@
+# Makefile for zlib. Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96.
+# Copyright (C) 1995-1998 Jean-loup Gailly.
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+# To compile, or to compile and test, type:
+#
+# make -fmakefile.dj2; make test -fmakefile.dj2
+#
+# To install libz.a, zconf.h and zlib.h in the djgpp directories, type:
+#
+# make install -fmakefile.dj2
+#
+# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as
+# in the sample below if the pattern of the DJGPP distribution is to
+# be followed. Remember that, while <sp>'es around <=> are ignored in
+# makefiles, they are *not* in batch files or in djgpp.env.
+# - - - - -
+# [make]
+# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include
+# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib
+# BUTT=-m486
+# - - - - -
+# Alternately, these variables may be defined below, overriding the values
+# in djgpp.env, as
+# INCLUDE_PATH=c:\usr\include
+# LIBRARY_PATH=c:\usr\lib
+
+CC=gcc
+
+#CFLAGS=-MMD -O
+#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
+#CFLAGS=-MMD -g -DDEBUG
+CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+ -Wstrict-prototypes -Wmissing-prototypes
+
+# If cp.exe is available, replace "copy /Y" with "cp -fp" .
+CP=copy /Y
+# If gnu install.exe is available, replace $(CP) with ginstall.
+INSTALL=$(CP)
+# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
+RM=del
+LDLIBS=-L. -lz
+LD=$(CC) -s -o
+LDSHARED=$(CC)
+
+INCL=zlib.h zconf.h
+LIBS=libz.a
+
+AR=ar rcs
+
+prefix=/usr/local
+exec_prefix = $(prefix)
+
+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
+
+OBJA =
+# to use the asm code: make OBJA=match.o
+
+TEST_OBJS = example.o minigzip.o
+
+all: example.exe minigzip.exe
+
+check: test
+test: all
+ ./example
+ echo hello world | .\minigzip | .\minigzip -d
+
+%.o : %.c
+ $(CC) $(CFLAGS) -c $< -o $@
+
+libz.a: $(OBJS) $(OBJA)
+ $(AR) $@ $(OBJS) $(OBJA)
+
+%.exe : %.o $(LIBS)
+ $(LD) $@ $< $(LDLIBS)
+
+# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env .
+
+.PHONY : uninstall clean
+
+install: $(INCL) $(LIBS)
+ -@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH)
+ -@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH)
+ $(INSTALL) zlib.h $(INCLUDE_PATH)
+ $(INSTALL) zconf.h $(INCLUDE_PATH)
+ $(INSTALL) libz.a $(LIBRARY_PATH)
+
+uninstall:
+ $(RM) $(INCLUDE_PATH)\zlib.h
+ $(RM) $(INCLUDE_PATH)\zconf.h
+ $(RM) $(LIBRARY_PATH)\libz.a
+
+clean:
+ $(RM) *.d
+ $(RM) *.o
+ $(RM) *.exe
+ $(RM) libz.a
+ $(RM) foo.gz
+
+DEPS := $(wildcard *.d)
+ifneq ($(DEPS),)
+include $(DEPS)
+endif
diff --git a/compat/zlib/msdos/Makefile.emx b/compat/zlib/msdos/Makefile.emx
new file mode 100644
index 0000000..9c1b57a
--- /dev/null
+++ b/compat/zlib/msdos/Makefile.emx
@@ -0,0 +1,69 @@
+# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98.
+# Copyright (C) 1995-1998 Jean-loup Gailly.
+# For conditions of distribution and use, see copyright notice in zlib.h
+
+# To compile, or to compile and test, type:
+#
+# make -fmakefile.emx; make test -fmakefile.emx
+#
+
+CC=gcc
+
+#CFLAGS=-MMD -O
+#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
+#CFLAGS=-MMD -g -DDEBUG
+CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \
+ -Wstrict-prototypes -Wmissing-prototypes
+
+# If cp.exe is available, replace "copy /Y" with "cp -fp" .
+CP=copy /Y
+# If gnu install.exe is available, replace $(CP) with ginstall.
+INSTALL=$(CP)
+# The default value of RM is "rm -f." If "rm.exe" is found, comment out:
+RM=del
+LDLIBS=-L. -lzlib
+LD=$(CC) -s -o
+LDSHARED=$(CC)
+
+INCL=zlib.h zconf.h
+LIBS=zlib.a
+
+AR=ar rcs
+
+prefix=/usr/local
+exec_prefix = $(prefix)
+
+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.exe minigzip.exe
+
+test: all
+ ./example
+ echo hello world | .\minigzip | .\minigzip -d
+
+%.o : %.c
+ $(CC) $(CFLAGS) -c $< -o $@
+
+zlib.a: $(OBJS)
+ $(AR) $@ $(OBJS)
+
+%.exe : %.o $(LIBS)
+ $(LD) $@ $< $(LDLIBS)
+
+
+.PHONY : clean
+
+clean:
+ $(RM) *.d
+ $(RM) *.o
+ $(RM) *.exe
+ $(RM) zlib.a
+ $(RM) foo.gz
+
+DEPS := $(wildcard *.d)
+ifneq ($(DEPS),)
+include $(DEPS)
+endif
diff --git a/compat/zlib/msdos/Makefile.msc b/compat/zlib/msdos/Makefile.msc
new file mode 100644
index 0000000..ae83786
--- /dev/null
+++ b/compat/zlib/msdos/Makefile.msc
@@ -0,0 +1,112 @@
+# Makefile for zlib
+# Microsoft C 5.1 or later
+# Last updated: 19-Mar-2003
+
+# To use, do "make makefile.msc"
+# To compile in small model, set below: MODEL=S
+
+# If you wish to reduce the memory requirements (default 256K for big
+# objects plus a few K), you can add to the LOC macro below:
+# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
+
+# ------------- Microsoft C 5.1 and later -------------
+
+# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7)
+# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added
+# to the declaration of LOC here:
+LOC = $(LOCAL_ZLIB)
+
+# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc.
+CPU_TYP = 0
+
+# Memory model: one of S, M, C, L (small, medium, compact, large)
+MODEL=L
+
+CC=cl
+CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC)
+#-Ox generates bad code with MSC 5.1
+LIB_CFLAGS=-Zl $(CFLAGS)
+
+LD=link
+LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode
+# "/farcall/packcode" are only useful for `large code' memory models
+# but should be a "no-op" for small code models.
+
+
+# variables
+ZLIB_LIB = zlib_$(MODEL).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
+
+
+# targets
+all: $(ZLIB_LIB) example.exe minigzip.exe
+
+.c.obj:
+ $(CC) -c $(LIB_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
+ $(CC) -c $(CFLAGS) $*.c
+
+minigzip.obj: test/minigzip.c zlib.h zconf.h
+ $(CC) -c $(CFLAGS) $*.c
+
+
+# the command line is cut to fit in the MS-DOS 128 byte limit:
+$(ZLIB_LIB): $(OBJ1) $(OBJ2)
+ if exist $(ZLIB_LIB) del $(ZLIB_LIB)
+ lib $(ZLIB_LIB) $(OBJ1);
+ lib $(ZLIB_LIB) $(OBJ2);
+
+example.exe: example.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB);
+
+minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB);
+
+test: example.exe minigzip.exe
+ example
+ echo hello world | minigzip | minigzip -d
+
+clean:
+ -del *.obj
+ -del *.lib
+ -del *.exe
+ -del *.map
+ -del zlib_*.bak
+ -del foo.gz
diff --git a/compat/zlib/msdos/Makefile.tc b/compat/zlib/msdos/Makefile.tc
new file mode 100644
index 0000000..5aec82a
--- /dev/null
+++ b/compat/zlib/msdos/Makefile.tc
@@ -0,0 +1,100 @@
+# Makefile for zlib
+# Turbo C 2.01, Turbo C++ 1.01
+# Last updated: 15-Mar-2003
+
+# To use, do "make -fmakefile.tc"
+# To compile in small model, set below: MODEL=s
+
+# WARNING: the small model is supported but only for small values of
+# MAX_WBITS and MAX_MEM_LEVEL. For example:
+# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
+# If you wish to reduce the memory requirements (default 256K for big
+# objects plus a few K), you can add to CFLAGS below:
+# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14
+# See zconf.h for details about the memory requirements.
+
+# ------------ Turbo C 2.01, Turbo C++ 1.01 ------------
+MODEL=l
+CC=tcc
+LD=tcc
+AR=tlib
+# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3
+CFLAGS=-O2 -G -Z -m$(MODEL)
+LDFLAGS=-m$(MODEL) -f-
+
+
+# variables
+ZLIB_LIB = zlib_$(MODEL).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
+
+
+# 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)
+
+example.exe: example.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB)
+
+minigzip.exe: minigzip.obj $(ZLIB_LIB)
+ $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB)
+
+test: example.exe minigzip.exe
+ example
+ echo hello world | minigzip | minigzip -d
+
+clean:
+ -del *.obj
+ -del *.lib
+ -del *.exe
+ -del zlib_*.bak
+ -del foo.gz
diff --git a/compat/zlib/nintendods/Makefile b/compat/zlib/nintendods/Makefile
new file mode 100644
index 0000000..21337d0
--- /dev/null
+++ b/compat/zlib/nintendods/Makefile
@@ -0,0 +1,126 @@
+#---------------------------------------------------------------------------------
+.SUFFIXES:
+#---------------------------------------------------------------------------------
+
+ifeq ($(strip $(DEVKITARM)),)
+$(error "Please set DEVKITARM in your environment. export DEVKITARM=<path to>devkitARM")
+endif
+
+include $(DEVKITARM)/ds_rules
+
+#---------------------------------------------------------------------------------
+# TARGET is the name of the output
+# BUILD is the directory where object files & intermediate files will be placed
+# SOURCES is a list of directories containing source code
+# DATA is a list of directories containing data files
+# INCLUDES is a list of directories containing header files
+#---------------------------------------------------------------------------------
+TARGET := $(shell basename $(CURDIR))
+BUILD := build
+SOURCES := ../../
+DATA := data
+INCLUDES := include
+
+#---------------------------------------------------------------------------------
+# options for code generation
+#---------------------------------------------------------------------------------
+ARCH := -mthumb -mthumb-interwork
+
+CFLAGS := -Wall -O2\
+ -march=armv5te -mtune=arm946e-s \
+ -fomit-frame-pointer -ffast-math \
+ $(ARCH)
+
+CFLAGS += $(INCLUDE) -DARM9
+CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions
+
+ASFLAGS := $(ARCH) -march=armv5te -mtune=arm946e-s
+LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map)
+
+#---------------------------------------------------------------------------------
+# list of directories containing libraries, this must be the top level containing
+# include and lib
+#---------------------------------------------------------------------------------
+LIBDIRS := $(LIBNDS)
+
+#---------------------------------------------------------------------------------
+# no real need to edit anything past this point unless you need to add additional
+# rules for different file extensions
+#---------------------------------------------------------------------------------
+ifneq ($(BUILD),$(notdir $(CURDIR)))
+#---------------------------------------------------------------------------------
+
+export OUTPUT := $(CURDIR)/lib/libz.a
+
+export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \
+ $(foreach dir,$(DATA),$(CURDIR)/$(dir))
+
+export DEPSDIR := $(CURDIR)/$(BUILD)
+
+CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c)))
+CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
+SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s)))
+BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*)))
+
+#---------------------------------------------------------------------------------
+# use CXX for linking C++ projects, CC for standard C
+#---------------------------------------------------------------------------------
+ifeq ($(strip $(CPPFILES)),)
+#---------------------------------------------------------------------------------
+ export LD := $(CC)
+#---------------------------------------------------------------------------------
+else
+#---------------------------------------------------------------------------------
+ export LD := $(CXX)
+#---------------------------------------------------------------------------------
+endif
+#---------------------------------------------------------------------------------
+
+export OFILES := $(addsuffix .o,$(BINFILES)) \
+ $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o)
+
+export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \
+ $(foreach dir,$(LIBDIRS),-I$(dir)/include) \
+ -I$(CURDIR)/$(BUILD)
+
+.PHONY: $(BUILD) clean all
+
+#---------------------------------------------------------------------------------
+all: $(BUILD)
+ @[ -d $@ ] || mkdir -p include
+ @cp ../../*.h include
+
+lib:
+ @[ -d $@ ] || mkdir -p $@
+
+$(BUILD): lib
+ @[ -d $@ ] || mkdir -p $@
+ @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile
+
+#---------------------------------------------------------------------------------
+clean:
+ @echo clean ...
+ @rm -fr $(BUILD) lib
+
+#---------------------------------------------------------------------------------
+else
+
+DEPENDS := $(OFILES:.o=.d)
+
+#---------------------------------------------------------------------------------
+# main targets
+#---------------------------------------------------------------------------------
+$(OUTPUT) : $(OFILES)
+
+#---------------------------------------------------------------------------------
+%.bin.o : %.bin
+#---------------------------------------------------------------------------------
+ @echo $(notdir $<)
+ @$(bin2o)
+
+
+-include $(DEPENDS)
+
+#---------------------------------------------------------------------------------------
+endif
+#---------------------------------------------------------------------------------------
diff --git a/compat/zlib/nintendods/README b/compat/zlib/nintendods/README
new file mode 100644
index 0000000..ba7a37d
--- /dev/null
+++ b/compat/zlib/nintendods/README
@@ -0,0 +1,5 @@
+This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside "contrib/nds". It is based on a devkitARM template.
+
+Eduardo Costa <eduardo.m.costa@gmail.com>
+January 3, 2009
+
diff --git a/compat/zlib/old/Makefile.emx b/compat/zlib/old/Makefile.emx
new file mode 100644