# # __COPYRIGHT__ # # Permission is hereby granted, free of charge, to any person obtaining # a copy of this software and associated documentation files (the # "Software"), to deal in the Software without restriction, including # without limitation the rights to use, copy, modify, merge, publish, # distribute, sublicense, and/or sell copies of the Software, and to # permit persons to whom the Software is furnished to do so, subject to # the following conditions: # # The above copyright notice and this permission notice shall be included # in all copies or substantial portions of the Software. # # 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 AND # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # __revision__ = "__FILE__ __REVISION__ __DATE__ __DEVELOPER__" import sys import unittest import TestUnit import SCons.PathList class subst_pathTestCase(unittest.TestCase): def setUp(self): class FakeEnvironment(object): def __init__(self, **kw): self.kw = kw def subst(self, s, target=None, source=None, conv=lambda x: x): if s[0] == '$': s = s[1:] if s == 'target': s = target elif s == 'source': s = source else: s = self.kw[s] return s self.env = FakeEnvironment(AAA = 'aaa', NULL = '') from SCons.Environment import Environment self.env = Environment(AAA = 'aaa', NULL = '') def test_node(self): """Test the subst_path() method on a Node """ import SCons.Node class A(object): pass n = SCons.Node.Node() pl = SCons.PathList.PathList((n,)) result = pl.subst_path(self.env, 'y', 'z') assert result == (n,), result def test_object(self): """Test the subst_path() method on a non-Node object """ class A(object): def __str__(self): return '' a = A() pl = SCons.PathList.PathList((a,)) result = pl.subst_path(self.env, 'y', 'z') assert result == ('',), result def test_object_get(self): """Test the subst_path() method on an object with a get() method """ class B(object): def get(self): return 'b' b = B() pl = SCons.PathList.PathList((b,)) result = pl.subst_path(self.env, 'y', 'z') assert result == ('b',), result def test_string(self): """Test the subst_path() method on a non-substitution string """ self.env.subst = lambda s, target, source, conv: 'NOT THIS STRING' pl = SCons.PathList.PathList(('x')) result = pl.subst_path(self.env, 'y', 'z') assert result == ('x',), result def test_subst(self): """Test the subst_path() method on substitution strings """ pl = SCons.PathList.PathList(('$AAA', '$NULL')) result = pl.subst_path(self.env, 'y', 'z') assert result == ('aaa',), result def test_list_of_lists(self): """Test the subst_path() method on substitution of nested lists. """ pl = SCons.PathList.PathList((['$AAA', '$AAA'], '$NULL')) result = pl.subst_path(self.env, 'y', 'z') assert result == ('aaa', 'aaa'), result def test_subst_nested(self): """Test the subst_path() method on nested substitution of strings. """ self.env.Append(L1 = ['a', 'b'], L2 = ['c', 'd'], L3 = ['$L2']) pl = SCons.PathList.PathList(['$L1']) result = pl.subst_path(self.env, 'y', 'z') assert result == ('a', 'b'), result self.env.Append(L1 = ['$L2']) pl = SCons.PathList.PathList(['$L1']) result = pl.subst_path(self.env, 'y', 'z') assert result == ('a', 'b', 'c', 'd'), result self.env.Append(L1 = ['$L3']) pl = SCons.PathList.PathList(['$L1']) result = pl.subst_path(self.env, 'y', 'z') assert result == ('a', 'b', 'c', 'd', 'c', 'd'), result def test_another_env(self): """Test the subst_path does lazy evaluation. """ pl = SCons.PathList.PathList(('$AAA', '$NULL')) result = pl.subst_path(self.env, 'y', 'z') assert result == ('aaa',), result e = self.env.Clone(AAA = 'bbb') result = pl.subst_path(e, 'y', 'z') assert result == ('bbb',), result class PathListCacheTestCase(unittest.TestCase): def test_no_PathListCache(self): """Make sure the PathListCache class is not visible """ try: SCons.PathList.PathListCache except AttributeError: pass else: self.fail("Found PathListCache unexpectedly\n") class PathListTestCase(unittest.TestCase): def test_PathList(self): """Test the PathList() entry point """ x1 = SCons.PathList.PathList(('x',)) x2 = SCons.PathList.PathList(['x',]) assert x1 is x2, (x1, x2) x3 = SCons.PathList.PathList('x') assert not x1 is x3, (x1, x3) if __name__ == "__main__": suite = unittest.TestSuite() tclasses = [ subst_pathTestCase, PathListCacheTestCase, PathListTestCase, ] for tclass in tclasses: names = unittest.getTestCaseNames(tclass, 'test_') suite.addTests(list(map(tclass, names))) TestUnit.run(suite) # Local Variables: # tab-width:4 # indent-tabs-mode:nil # End: # vim: set expandtab tabstop=4 shiftwidth=4: option value='bug_3466099'>bug_3466099 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:
authordgp <dgp@users.sourceforge.net>2017-09-01 01:44:09 (GMT)
committerdgp <dgp@users.sourceforge.net>2017-09-01 01:44:09 (GMT)
commit25bef43b39f0af4f1729dd82573fc4bd9b44fd7f (patch)
tree997417738cae50b8be6b50850513d5f7a78160c8
parent38b319739dd65940f0c634509f00ad6dc5cb98de (diff)
parent1997e71e603d7d479143da6fdf0db628f8f9ba82 (diff)
downloadtcl-25bef43b39f0af4f1729dd82573fc4bd9b44fd7f.zip
tcl-25bef43b39f0af4f1729dd82573fc4bd9b44fd7f.tar.gz
tcl-25bef43b39f0af4f1729dd82573fc4bd9b44fd7f.tar.bz2
merge trunk
-rw-r--r--.fossil-settings/crlf-glob3
-rw-r--r--.fossil-settings/crnl-glob3
-rw-r--r--changes3
-rw-r--r--doc/continue.n2
-rw-r--r--generic/tcl.h2
-rw-r--r--generic/tclBinary.c6
-rw-r--r--generic/tclCmdIL.c2
-rw-r--r--generic/tclCmdMZ.c10
-rw-r--r--generic/tclCompExpr.c2
-rw-r--r--generic/tclEncoding.c71
-rw-r--r--generic/tclLoad.c2
-rw-r--r--generic/tclPanic.c2
-rw-r--r--generic/tclParse.c2
-rw-r--r--generic/tclPipe.c8
-rw-r--r--generic/tclScan.c2
-rw-r--r--generic/tclStringObj.c4
-rw-r--r--generic/tclTomMath.h47
-rw-r--r--generic/tclUtf.c78
-rw-r--r--generic/tclUtil.c2
-rw-r--r--library/http/http.tcl3
-rw-r--r--library/http/pkgIndex.tcl2
-rw-r--r--libtommath/LICENSE2
-rw-r--r--libtommath/README.md15
-rw-r--r--libtommath/bn_error.c6
-rw-r--r--libtommath/bn_fast_mp_invmod.c6
-rw-r--r--libtommath/bn_fast_mp_montgomery_reduce.c6
-rw-r--r--libtommath/bn_fast_s_mp_mul_digs.c6
-rw-r--r--libtommath/bn_fast_s_mp_mul_high_digs.c6
-rw-r--r--libtommath/bn_fast_s_mp_sqr.c6
-rw-r--r--libtommath/bn_mp_2expt.c6
-rw-r--r--libtommath/bn_mp_abs.c6
-rw-r--r--libtommath/bn_mp_add.c6
-rw-r--r--libtommath/bn_mp_add_d.c12
-rw-r--r--libtommath/bn_mp_addmod.c6
-rw-r--r--libtommath/bn_mp_and.c6
-rw-r--r--libtommath/bn_mp_clamp.c6
-rw-r--r--libtommath/bn_mp_clear.c6
-rw-r--r--libtommath/bn_mp_clear_multi.c6
-rw-r--r--libtommath/bn_mp_cmp.c6
-rw-r--r--libtommath/bn_mp_cmp_d.c6
-rw-r--r--libtommath/bn_mp_cmp_mag.c6
-rw-r--r--libtommath/bn_mp_cnt_lsb.c6
-rw-r--r--libtommath/bn_mp_copy.c6
-rw-r--r--libtommath/bn_mp_count_bits.c6
-rw-r--r--libtommath/bn_mp_div.c6
-rw-r--r--libtommath/bn_mp_div_2.c6
-rw-r--r--libtommath/bn_mp_div_2d.c25
-rw-r--r--libtommath/bn_mp_div_3.c6
-rw-r--r--libtommath/bn_mp_div_d.c6
-rw-r--r--libtommath/bn_mp_dr_is_modulus.c6
-rw-r--r--libtommath/bn_mp_dr_reduce.c6
-rw-r--r--libtommath/bn_mp_dr_setup.c6
-rw-r--r--libtommath/bn_mp_exch.c6
-rw-r--r--libtommath/bn_mp_export.c6
-rw-r--r--libtommath/bn_mp_expt_d.c6
-rw-r--r--libtommath/bn_mp_expt_d_ex.c6
-rw-r--r--libtommath/bn_mp_exptmod.c6
-rw-r--r--libtommath/bn_mp_exptmod_fast.c20
-rw-r--r--libtommath/bn_mp_exteuclid.c45
-rw-r--r--libtommath/bn_mp_fread.c8
-rw-r--r--libtommath/bn_mp_fwrite.c8
-rw-r--r--libtommath/bn_mp_gcd.c6
-rw-r--r--libtommath/bn_mp_get_int.c6
-rw-r--r--libtommath/bn_mp_grow.c6
-rw-r--r--libtommath/bn_mp_import.c6
-rw-r--r--libtommath/bn_mp_init.c6
-rw-r--r--libtommath/bn_mp_init_copy.c13
-rw-r--r--libtommath/bn_mp_init_multi.c9
-rw-r--r--libtommath/bn_mp_init_set.c6
-rw-r--r--libtommath/bn_mp_init_set_int.c6
-rw-r--r--libtommath/bn_mp_init_size.c6
-rw-r--r--libtommath/bn_mp_invmod.c8
-rw-r--r--libtommath/bn_mp_invmod_slow.c6
-rw-r--r--libtommath/bn_mp_is_square.c6
-rw-r--r--libtommath/bn_mp_jacobi.c6
-rw-r--r--libtommath/bn_mp_karatsuba_mul.c6
-rw-r--r--libtommath/bn_mp_karatsuba_sqr.c6
-rw-r--r--libtommath/bn_mp_lcm.c6
-rw-r--r--libtommath/bn_mp_lshd.c6
-rw-r--r--libtommath/bn_mp_mod.c8
-rw-r--r--libtommath/bn_mp_mod_2d.c6
-rw-r--r--libtommath/bn_mp_mod_d.c6
-rw-r--r--libtommath/bn_mp_montgomery_calc_normalization.c6
-rw-r--r--libtommath/bn_mp_montgomery_reduce.c6
-rw-r--r--libtommath/bn_mp_montgomery_setup.c6
-rw-r--r--libtommath/bn_mp_mul.c6
-rw-r--r--libtommath/bn_mp_mul_2.c6
-rw-r--r--libtommath/bn_mp_mul_2d.c6
-rw-r--r--libtommath/bn_mp_mul_d.c6
-rw-r--r--libtommath/bn_mp_mulmod.c8
-rw-r--r--libtommath/bn_mp_n_root.c6
-rw-r--r--libtommath/bn_mp_n_root_ex.c6
-rw-r--r--libtommath/bn_mp_neg.c6
-rw-r--r--libtommath/bn_mp_or.c6
-rw-r--r--libtommath/bn_mp_prime_fermat.c6
-rw-r--r--libtommath/bn_mp_prime_is_divisible.c6
-rw-r--r--libtommath/bn_mp_prime_is_prime.c6
-rw-r--r--libtommath/bn_mp_prime_miller_rabin.c6
-rw-r--r--libtommath/bn_mp_prime_next_prime.c6
-rw-r--r--libtommath/bn_mp_prime_rabin_miller_trials.c6
-rw-r--r--libtommath/bn_mp_prime_random_ex.c6
-rw-r--r--libtommath/bn_mp_radix_size.c6
-rw-r--r--libtommath/bn_mp_radix_smap.c6
-rw-r--r--libtommath/bn_mp_rand.c35
-rw-r--r--libtommath/bn_mp_read_radix.c15
-rw-r--r--libtommath/bn_mp_read_signed_bin.c6
-rw-r--r--libtommath/bn_mp_read_unsigned_bin.c6
-rw-r--r--libtommath/bn_mp_reduce.c6
-rw-r--r--libtommath/bn_mp_reduce_2k.c6
-rw-r--r--libtommath/bn_mp_reduce_2k_l.c6
-rw-r--r--libtommath/bn_mp_reduce_2k_setup.c6
-rw-r--r--libtommath/bn_mp_reduce_2k_setup_l.c6
-rw-r--r--libtommath/bn_mp_reduce_is_2k.c6
-rw-r--r--libtommath/bn_mp_reduce_is_2k_l.c6
-rw-r--r--libtommath/bn_mp_reduce_setup.c6
-rw-r--r--libtommath/bn_mp_rshd.c6
-rw-r--r--libtommath/bn_mp_set.c6
-rw-r--r--libtommath/bn_mp_set_int.c6
-rw-r--r--libtommath/bn_mp_set_long.c6
-rw-r--r--libtommath/bn_mp_set_long_long.c6
-rw-r--r--libtommath/bn_mp_shrink.c6
-rw-r--r--libtommath/bn_mp_signed_bin_size.c6
-rw-r--r--libtommath/bn_mp_sqr.c6
-rw-r--r--libtommath/bn_mp_sqrmod.c6
-rw-r--r--libtommath/bn_mp_sqrt.c6
-rw-r--r--libtommath/bn_mp_sub.c6
-rw-r--r--libtommath/bn_mp_sub_d.c6
-rw-r--r--libtommath/bn_mp_submod.c6
-rw-r--r--libtommath/bn_mp_to_signed_bin.c6
-rw-r--r--libtommath/bn_mp_to_signed_bin_n.c6
-rw-r--r--libtommath/bn_mp_to_unsigned_bin.c6
-rw-r--r--libtommath/bn_mp_to_unsigned_bin_n.c6
-rw-r--r--libtommath/bn_mp_toom_mul.c6
-rw-r--r--libtommath/bn_mp_toom_sqr.c6
-rw-r--r--libtommath/bn_mp_toradix.c6
-rw-r--r--libtommath/bn_mp_toradix_n.c6
-rw-r--r--libtommath/bn_mp_unsigned_bin_size.c6
-rw-r--r--libtommath/bn_mp_xor.c6
-rw-r--r--libtommath/bn_mp_zero.c6
-rw-r--r--libtommath/bn_prime_tab.c6
-rw-r--r--libtommath/bn_reverse.c6
-rw-r--r--libtommath/bn_s_mp_add.c6
-rw-r--r--libtommath/bn_s_mp_exptmod.c6
-rw-r--r--libtommath/bn_s_mp_mul_digs.c6
-rw-r--r--libtommath/bn_s_mp_mul_high_digs.c6
-rw-r--r--libtommath/bn_s_mp_sqr.c6
-rw-r--r--libtommath/bn_s_mp_sub.c6
-rw-r--r--libtommath/bncore.c6
-rw-r--r--libtommath/callgraph.txt13832
-rw-r--r--libtommath/changes.txt18
-rw-r--r--libtommath/makefile124
-rw-r--r--libtommath/makefile.cygwin_dll4
-rw-r--r--libtommath/makefile.shared25
-rw-r--r--libtommath/makefile_include.mk (renamed from libtommath/makefile.include)46
-rw-r--r--libtommath/tommath.h39
-rw-r--r--libtommath/tommath_class.h12
-rw-r--r--libtommath/tommath_private.h10
-rw-r--r--libtommath/tommath_superclass.h10
-rw-r--r--tests/exec.test8
-rw-r--r--tests/string.test3
-rwxr-xr-xtools/fix_tommath_h.tcl11
-rw-r--r--unix/Makefile.in4
-rw-r--r--unix/tclLoadDyld.c2
-rw-r--r--unix/tclUnixPort.h8
-rw-r--r--unix/tclUnixSock.c6
-rw-r--r--win/Makefile.in4
-rw-r--r--win/makefile.vc13
-rw-r--r--win/tclWin32Dll.c4
-rw-r--r--win/tclWinFile.c2
-rw-r--r--win/tclWinPipe.c2
170 files changed, 7650 insertions, 7696 deletions
diff --git a/.fossil-settings/crlf-glob b/.fossil-settings/crlf-glob
index f219a75..2041cb6 100644
--- a/.fossil-settings/crlf-glob
+++ b/.fossil-settings/crlf-glob
@@ -3,6 +3,9 @@ compat/zlib/contrib/vstudio/readme.txt
compat/zlib/contrib/vstudio/*/zlib.rc
compat/zlib/win32/*.txt
compat/zlib/win64/*.txt
+libtommath/*.dsp
+libtommath/*.sln
+libtommath/*.vcproj
tools/tcl.hpj.in
tools/tcl.wse.in
win/buildall.vc.bat
diff --git a/.fossil-settings/crnl-glob b/.fossil-settings/crnl-glob
index f219a75..2041cb6 100644
--- a/.fossil-settings/crnl-glob
+++ b/.fossil-settings/crnl-glob
@@ -3,6 +3,9 @@ compat/zlib/contrib/vstudio/readme.txt
compat/zlib/contrib/vstudio/*/zlib.rc
compat/zlib/win32/*.txt
compat/zlib/win64/*.txt
+libtommath/*.dsp
+libtommath/*.sln
+libtommath/*.vcproj
tools/tcl.hpj.in
tools/tcl.wse.in
win/buildall.vc.bat
diff --git a/changes b/changes
index 7b035fb..d1e6417 100644
--- a/changes
+++ b/changes
@@ -8835,4 +8835,7 @@ improvements to regexp engine from Postgres (lane,porter,fellows,seltenreich)
2017-06-23 (TIP 472) Support 0d as prefix of decimal numbers (iyer,griffin)
+2017-08-31 (bug)[2a9465] http state 100 continue handling broken (oehlmann)
+=> http 2.8.12
+
--- Released 8.7a1, August ??, 2017 --- http://core.tcl.tk/tcl/ for details
diff --git a/doc/continue.n b/doc/continue.n
index 92ff3b4..5eca861 100644
--- a/doc/continue.n
+++ b/doc/continue.n
@@ -23,7 +23,7 @@ exception to occur.
The exception causes the current script to be aborted
out to the innermost containing loop command, which then
continues with the next iteration of the loop.
-Catch exceptions are also handled in a few other situations, such
+Continue exceptions are also handled in a few other situations, such
as the \fBcatch\fR command and the outermost scripts of procedure
bodies.
.SH EXAMPLE
diff --git a/generic/tcl.h b/generic/tcl.h
index 2e9d60a..589a63f 100644
--- a/generic/tcl.h
+++ b/generic/tcl.h
@@ -2263,6 +2263,8 @@ typedef struct mp_int mp_int;
#define MP_INT_DECLARED
typedef unsigned int mp_digit;
#define MP_DIGIT_DECLARED
+typedef unsigned TCL_WIDE_INT_TYPE mp_word;
+#define MP_WORD_DECLARED
/*
*----------------------------------------------------------------------------
diff --git a/generic/tclBinary.c b/generic/tclBinary.c
index 5772bc6..a693894 100644
--- a/generic/tclBinary.c
+++ b/generic/tclBinary.c
@@ -536,7 +536,7 @@ SetByteArrayFromAny(
const char *src, *srcEnd;
unsigned char *dst;
ByteArray *byteArrayPtr;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
if (objPtr->typePtr == &properByteArrayType) {
return TCL_OK;
@@ -1300,7 +1300,7 @@ BinaryFormatCmd(
badField:
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
char buf[TCL_UTF_MAX + 1];
TclUtfToUniChar(errorString, &ch);
@@ -1670,7 +1670,7 @@ BinaryScanCmd(
badField:
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
char buf[TCL_UTF_MAX + 1];
TclUtfToUniChar(errorString, &ch);
diff --git a/generic/tclCmdIL.c b/generic/tclCmdIL.c
index 4a11c3b..47076ec 100644
--- a/generic/tclCmdIL.c
+++ b/generic/tclCmdIL.c
@@ -4370,7 +4370,7 @@ static int
DictionaryCompare(
const char *left, const char *right) /* The strings to compare. */
{
- Tcl_UniChar uniLeft, uniRight, uniLeftLower, uniRightLower;
+ Tcl_UniChar uniLeft = 0, uniRight = 0, uniLeftLower, uniRightLower;
int diff, zeros;
int secondaryDiff = 0;
diff --git a/generic/tclCmdMZ.c b/generic/tclCmdMZ.c
index 83382a7..2195aa1 100644
--- a/generic/tclCmdMZ.c
+++ b/generic/tclCmdMZ.c
@@ -1173,7 +1173,7 @@ Tcl_SplitObjCmd(
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int len;
const char *splitChars;
const char *stringPtr;
@@ -1258,7 +1258,7 @@ Tcl_SplitObjCmd(
} else {
const char *element, *p, *splitEnd;
int splitLen;
- Tcl_UniChar splitChar;
+ Tcl_UniChar splitChar = 0;
/*
* Normal case: split on any of a given set of characters. Discard
@@ -1482,7 +1482,7 @@ StringIsCmd(
Tcl_Obj *const objv[]) /* Argument objects. */
{
const char *string1, *end, *stop;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int (*chcomp)(int) = NULL; /* The UniChar comparison function. */
int i, failat = 0, result = 1, strict = 0, index, length1, length2;
Tcl_Obj *objPtr, *failVarObj = NULL;
@@ -2410,7 +2410,7 @@ StringStartCmd(
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
const char *p, *string;
int cur, index, length, numChars;
@@ -2471,7 +2471,7 @@ StringEndCmd(
int objc, /* Number of arguments. */
Tcl_Obj *const objv[]) /* Argument objects. */
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
const char *p, *end, *string;
int cur, index, length, numChars;
diff --git a/generic/tclCompExpr.c b/generic/tclCompExpr.c
index 24c8896..b854b0f 100644
--- a/generic/tclCompExpr.c
+++ b/generic/tclCompExpr.c
@@ -1885,7 +1885,7 @@ ParseLexeme(
{
const char *end;
int scanned;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
Tcl_Obj *literal = NULL;
unsigned char byte;
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 6c21287..d430b32 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2293,8 +2293,11 @@ UtfToUtfProc(
const char *srcStart, *srcEnd, *srcClose;
const char *dstStart, *dstEnd;
int result, numChars, charLimit = INT_MAX;
- Tcl_UniChar ch;
+ Tcl_UniChar *chPtr = (Tcl_UniChar *) statePtr;
+ if (flags & TCL_ENCODING_START) {
+ *statePtr = 0;
+ }
result = TCL_OK;
srcStart = src;
@@ -2342,16 +2345,16 @@ UtfToUtfProc(
} else if (!Tcl_UtfCharComplete(src, srcEnd - src)) {
/*
* Always check before using TclUtfToUniChar. Not doing can so
- * cause it run beyond the endof the buffer! If we happen such an
- * incomplete char its byts are made to represent themselves.
+ * cause it run beyond the end of the buffer! If we happen such an
+ * incomplete char its bytes are made to represent themselves.
*/
- ch = (unsigned char) *src;
+ *chPtr = (unsigned char) *src;
src += 1;
- dst += Tcl_UniCharToUtf(ch, dst);
+ dst += Tcl_UniCharToUtf(*chPtr, dst);
} else {
- src += TclUtfToUniChar(src, &ch);
- dst += Tcl_UniCharToUtf(ch, dst);
+ src += TclUtfToUniChar(src, chPtr);
+ dst += Tcl_UniCharToUtf(*chPtr, dst);
}
}
@@ -2407,8 +2410,11 @@ UnicodeToUtfProc(
const char *srcStart, *srcEnd;
const char *dstEnd, *dstStart;
int result, numChars, charLimit = INT_MAX;
- Tcl_UniChar ch;
+ Tcl_UniChar *chPtr = (Tcl_UniChar *) statePtr;
+ if (flags & TCL_ENCODING_START) {
+ *statePtr = 0;
+ }
if (flags & TCL_ENCODING_CHAR_LIMIT) {
charLimit = *dstCharsPtr;
}
@@ -2436,11 +2442,11 @@ UnicodeToUtfProc(
* Tcl_UniChar-size data.
*/
- ch = *(Tcl_UniChar *)src;
- if (ch && ch < 0x80) {
- *dst++ = (ch & 0xFF);
+ *chPtr = *(Tcl_UniChar *)src;
+ if (*chPtr && *chPtr < 0x80) {
+ *dst++ = (*chPtr & 0xFF);
} else {
- dst += Tcl_UniCharToUtf(ch, dst);
+ dst += Tcl_UniCharToUtf(*chPtr, dst);
}
src += sizeof(Tcl_UniChar);
}
@@ -2497,8 +2503,11 @@ UtfToUnicodeProc(
{
const char *srcStart, *srcEnd, *srcClose, *dstStart, *dstEnd;
int result, numChars;
- Tcl_UniChar ch;
+ Tcl_UniChar *chPtr = (Tcl_UniChar *) statePtr;
+ if (flags & TCL_ENCODING_START) {
+ *statePtr = 0;
+ }
srcStart = src;
srcEnd = src + srcLen;
srcClose = srcEnd;
@@ -2524,7 +2533,7 @@ UtfToUnicodeProc(
result = TCL_CONVERT_NOSPACE;
break;
}
- src += TclUtfToUniChar(src, &ch);
+ src += TclUtfToUniChar(src, chPtr);
/*
* Need to handle this in a way that won't cause misalignment by
@@ -2533,23 +2542,23 @@ UtfToUnicodeProc(
#ifdef WORDS_BIGENDIAN
#if TCL_UTF_MAX > 4
- *dst++ = (ch >> 24);
- *dst++ = ((ch >> 16) & 0xFF);
- *dst++ = ((ch >> 8) & 0xFF);
- *dst++ = (ch & 0xFF);
+ *dst++ = (*chPtr >> 24);
+ *dst++ = ((*chPtr >> 16) & 0xFF);
+ *dst++ = ((*chPtr >> 8) & 0xFF);
+ *dst++ = (*chPtr & 0xFF);
#else
- *dst++ = (ch >> 8);
- *dst++ = (ch & 0xFF);
+ *dst++ = (*chPtr >> 8);
+ *dst++ = (*chPtr & 0xFF);
#endif
#else
#if TCL_UTF_MAX > 4
- *dst++ = (ch & 0xFF);
- *dst++ = ((ch >> 8) & 0xFF);
- *dst++ = ((ch >> 16) & 0xFF);
- *dst++ = (ch >> 24);
+ *dst++ = (*chPtr & 0xFF);
+ *dst++ = ((*chPtr >> 8) & 0xFF);
+ *dst++ = ((*chPtr >> 16) & 0xFF);
+ *dst++ = (*chPtr >> 24);
#else
- *dst++ = (ch & 0xFF);
- *dst++ = (ch >> 8);
+ *dst++ = (*chPtr & 0xFF);
+ *dst++ = (*chPtr >> 8);
#endif
#endif
}
@@ -2607,7 +2616,7 @@ TableToUtfProc(
const char *srcStart, *srcEnd;
const char *dstEnd, *dstStart, *prefixBytes;
int result, byte, numChars, charLimit = INT_MAX;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
const unsigned short *const *toUnicode;
const unsigned short *pageZero;
TableEncodingData *dataPtr = clientData;
@@ -2719,7 +2728,7 @@ TableFromUtfProc(
{
const char *srcStart, *srcEnd, *srcClose;
const char *dstStart, *dstEnd, *prefixBytes;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int result, len, word, numChars;
TableEncodingData *dataPtr = clientData;
const unsigned short *const *fromUnicode;
@@ -2853,7 +2862,7 @@ Iso88591ToUtfProc(
result = TCL_OK;
for (numChars = 0; src < srcEnd && numChars <= charLimit; numChars++) {
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
if (dst > dstEnd) {
result = TCL_CONVERT_NOSPACE;
@@ -2939,7 +2948,7 @@ Iso88591FromUtfProc(
dstEnd = dst + dstLen - 1;
for (numChars = 0; src < srcEnd; numChars++) {
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int len;
if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) {
@@ -3326,7 +3335,7 @@ EscapeFromUtfProc(
for (numChars = 0; src < srcEnd; numChars++) {
unsigned len;
int word;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
if ((src > srcClose) && (!Tcl_UtfCharComplete(src, srcEnd - src))) {
/*
diff --git a/generic/tclLoad.c b/generic/tclLoad.c
index 66637da..e0bb5ef 100644
--- a/generic/tclLoad.c
+++ b/generic/tclLoad.c
@@ -130,7 +130,7 @@ Tcl_LoadObjCmd(
Tcl_PackageInitProc *initProc;
const char *p, *fullFileName, *packageName;
Tcl_LoadHandle loadHandle;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
unsigned len;
int index, flags = 0;
Tcl_Obj *const *savedobjv = objv;
diff --git a/generic/tclPanic.c b/generic/tclPanic.c
index b032449..b03ad41 100644
--- a/generic/tclPanic.c
+++ b/generic/tclPanic.c
@@ -111,7 +111,7 @@ Tcl_PanicVA(
__builtin_trap();
# elif defined(_WIN64)
__debugbreak();
-# elif defined(_MSC_VER)
+# elif defined(_MSC_VER) && defined (_M_IX86)
_asm {int 3}
# else
DebugBreak();
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 5d640dc..a2227f7 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -829,7 +829,7 @@ TclParseBackslash(
* written there. */
{
register const char *p = src+1;
- Tcl_UniChar unichar;
+ Tcl_UniChar unichar = 0;
int result;
int count;
char buf[TCL_UTF_MAX];
diff --git a/generic/tclPipe.c b/generic/tclPipe.c
index d6cd188..b679ec4 100644
--- a/generic/tclPipe.c
+++ b/generic/tclPipe.c
@@ -668,7 +668,13 @@ TclCreatePipeline(
if (*p == '>') {
p++;
atOK = 0;
- flags = O_WRONLY | O_CREAT;
+
+ /*
+ * Note that the O_APPEND flag only has an effect on POSIX
+ * platforms. On Windows, we just have to carry on regardless.
+ */
+
+ flags = O_WRONLY | O_CREAT | O_APPEND;
}
if (errorClose != 0) {
errorClose = 0;
diff --git a/generic/tclScan.c b/generic/tclScan.c
index 17069eb..7a6a8a2 100644
--- a/generic/tclScan.c
+++ b/generic/tclScan.c
@@ -257,7 +257,7 @@ ValidateFormat(
{
int gotXpg, gotSequential, value, i, flags;
char *end;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int objIndex, xpgSize, nspace = numVars;
int *nassign = TclStackAlloc(interp, nspace * sizeof(int));
char buf[TCL_UTF_MAX+1];
diff --git a/generic/tclStringObj.c b/generic/tclStringObj.c
index 2305220..209f982 100644
--- a/generic/tclStringObj.c
+++ b/generic/tclStringObj.c
@@ -1677,7 +1677,7 @@ Tcl_AppendFormatToObj(
#endif
int newXpg, numChars, allocSegment = 0, segmentLimit, segmentNumBytes;
Tcl_Obj *segment;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
int step = TclUtfToUniChar(format, &ch);
format += step;
@@ -3428,7 +3428,7 @@ TclStringObjReverse(
Tcl_Obj *objPtr)
{
String *stringPtr;
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
if (TclIsPureByteArray(objPtr)) {
int numBytes;
diff --git a/generic/tclTomMath.h b/generic/tclTomMath.h
index 001019c..39132ed 100644
--- a/generic/tclTomMath.h
+++ b/generic/tclTomMath.h
@@ -46,7 +46,10 @@ extern "C" {
typedef uint8_t mp_digit;
#define MP_DIGIT_DECLARED
#endif
+#ifndef MP_WORD_DECLARED
typedef uint16_t mp_word;
+#define MP_WORD_DECLARED
+#endif
#define MP_SIZEOF_MP_DIGIT 1
#ifdef DIGIT_BIT
#error You must not define DIGIT_BIT when using MP_8BIT
@@ -56,30 +59,34 @@ extern "C" {
typedef uint16_t mp_digit;
#define MP_DIGIT_DECLARED
#endif
+#ifndef MP_WORD_DECLARED
typedef uint32_t mp_word;
+#define MP_WORD_DECLARED
+#endif
#define MP_SIZEOF_MP_DIGIT 2
#ifdef DIGIT_BIT
#error You must not define DIGIT_BIT when using MP_16BIT
#endif
#elif defined(MP_64BIT)
/* for GCC only on supported platforms */
-#ifndef CRYPT
- typedef unsigned long long ulong64;
- typedef signed long long long64;
-#endif
-
#ifndef MP_DIGIT_DECLARED
- typedef ulong64 mp_digit;
+ typedef uint64_t mp_digit;
#define MP_DIGIT_DECLARED
#endif
#if defined(_WIN32)
+#ifndef MP_WORD_DECLARED
typedef unsigned __int128 mp_word;
+#define MP_WORD_DECLARED
+#endif
#elif defined(__GNUC__)
typedef unsigned long mp_word __attribute__ ((mode(TI)));
#else
/* it seems you have a problem
* but we assume you can somewhere define your own uint128_t */
+#ifndef MP_WORD_DECLARED
typedef uint128_t mp_word;
+#define MP_WORD_DECLARED
+#endif
#endif
#define DIGIT_BIT 60
@@ -87,16 +94,14 @@ extern "C" {
/* this is the default case, 28-bit digits */
/* this is to make porting into LibTomCrypt easier :-) */
-#ifndef CRYPT
- typedef unsigned long long ulong64;
- typedef signed long long long64;
-#endif
-
#ifndef MP_DIGIT_DECLARED
typedef uint32_t mp_digit;
#define MP_DIGIT_DECLARED
#endif
- typedef ulong64 mp_word;
+#ifndef MP_WORD_DECLARED
+ typedef uint64_t mp_word;
+#define MP_WORD_DECLARED
+#endif
#ifdef MP_31BIT
/* this is an extension that uses 31-bit digits */
@@ -116,16 +121,16 @@ extern "C" {
typedef mp_digit mp_min_u32;
#endif
-/* platforms that can use a better rand function */
+/* use arc4random on platforms that support it */
#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__DragonFly__)
- #define MP_USE_ALT_RAND 1
+ #define MP_GEN_RANDOM() arc4random()
+ #define MP_GEN_RANDOM_MAX 0xffffffff
#endif
-/* use arc4random on platforms that support it */
-#ifdef MP_USE_ALT_RAND
- #define MP_GEN_RANDOM() arc4random()
-#else
+/* use rand() as fall-back if there's no better rand function */
+#ifndef MP_GEN_RANDOM
#define MP_GEN_RANDOM() rand()
+ #define MP_GEN_RANDOM_MAX RAND_MAX
#endif
#define MP_DIGIT_BIT DIGIT_BIT
@@ -796,7 +801,7 @@ int mp_fwrite(mp_int *a, int radix, FILE *stream);
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: tag: v1.0.1, master */
+/* git commit: 5953f62e42b24af93748b1ee5e1d062e242c2546 */
+/* commit time: 2017-08-29 22:27:36 +0200 */
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index 161a4bd..25cc2d1 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -253,6 +253,15 @@ Tcl_UniCharToUtfDString(
* Tcl_UtfCharComplete() before calling this routine to ensure that
* enough bytes remain in the string.
*
+ * If TCL_UTF_MAX == 4, special handling of Surrogate pairs is done:
+ * For any UTF-8 string containing a character outside of the BMP, the
+ * first call to this function will fill *chPtr with the high surrogate
+ * and generate a return value of 0. Calling Tcl_UtfToUniChar again
+ * will produce the low surrogate and a return value of 4. Because *chPtr
+ * is used to remember whether the high surrogate is already produced, it
+ * is recommended to initialize the variable it points to as 0 before
+ * the first call to Tcl_UtfToUniChar is done.
+ *
* Results:
* *chPtr is filled with the Tcl_UniChar, and the return value is the
* number of bytes from the UTF-8 string that were consumed.
@@ -272,7 +281,7 @@ Tcl_UtfToUniChar(
register int byte;
/*
- * Unroll 1 to 3 byte UTF-8 sequences, use loop to handle longer ones.
+ * Unroll 1 to 3 (or 4) byte UTF-8 sequences.
*/
byte = *((unsigned char *) src);
@@ -325,12 +334,30 @@ Tcl_UtfToUniChar(
/*
* Four-byte-character lead byte followed by three trail bytes.
*/
-
+#if TCL_UTF_MAX == 4
+ Tcl_UniChar surrogate;
+
+ byte = (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
+ | ((src[2] & 0x3F) << 6) | (src[3] & 0x3F)) - 0x10000;
+ surrogate = (Tcl_UniChar) (0xD800 + (byte >> 10));
+ if (byte & 0x100000) {
+ /* out of range, < 0x10000 or > 0x10ffff */
+ } else if (*chPtr != surrogate) {
+ /* produce high surrogate, but don't advance source pointer */
+ *chPtr = surrogate;
+ return 0;
+ } else {
+ /* produce low surrogate, and advance source pointer */
+ *chPtr = (Tcl_UniChar) (0xDC00 | (byte & 0x3FF));
+ return 4;
+ }
+#else
*chPtr = (Tcl_UniChar) (((byte & 0x07) << 18) | ((src[1] & 0x3F) << 12)
| ((src[2] & 0x3F) << 6) | (src[3] & 0x3F));
if ((unsigned)(*chPtr - 0x10000) <= 0xFFFFF) {
return 4;
}
+#endif
}
/*
@@ -371,7 +398,7 @@ Tcl_UtfToUniCharDString(
* appended to this previously initialized
* DString. */
{
- Tcl_UniChar *w, *wString;
+ Tcl_UniChar ch, *w, *wString;
const char *p, *end;
int oldLength;
@@ -393,8 +420,8 @@ Tcl_UtfToUniCharDString(
w = wString;
end = src + length;
for (p = src; p < end; ) {
- p += TclUtfToUniChar(p, w);
- w++;
+ p += TclUtfToUniChar(p, &ch);
+ *w++ = ch;
}
*w = '\0';
Tcl_DStringSetLength(dsPtr,
@@ -428,10 +455,7 @@ Tcl_UtfCharComplete(
* a complete UTF-8 character. */
int length) /* Length of above string in bytes. */
{
- int ch;
-
- ch = *((unsigned char *) src);
- return length >= totalBytes[ch];
+ return length >= totalBytes[(unsigned char)*src];
}
/*
@@ -458,8 +482,8 @@ Tcl_NumUtfChars(
int length) /* The length of the string in bytes, or -1
* for strlen(string). */
{
- Tcl_UniChar ch;
- register int i;
+ Tcl_UniChar ch = 0;
+ register int i = 0;
/*
* The separate implementations are faster.
@@ -468,7 +492,6 @@ Tcl_NumUtfChars(
* single-byte char case specially.
*/
- i = 0;
if (length < 0) {
while (*src != '\0') {
src += TclUtfToUniChar(src, &ch);
@@ -519,7 +542,7 @@ Tcl_UtfFindFirst(
int ch) /* The Tcl_UniChar to search for. */
{
int len;
- Tcl_UniChar find;
+ Tcl_UniChar find = 0;
while (1) {
len = TclUtfToUniChar(src, &find);
@@ -558,7 +581,7 @@ Tcl_UtfFindLast(
int ch) /* The Tcl_UniChar to search for. */
{
int len;
- Tcl_UniChar find;
+ Tcl_UniChar find = 0;
const char *last;
last = NULL;
@@ -598,9 +621,15 @@ const char *
Tcl_UtfNext(
const char *src) /* The current location in the string. */
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
+ int len = TclUtfToUniChar(src, &ch);
- return src + TclUtfToUniChar(src, &ch);
+#if TCL_UTF_MAX == 4
+ if (len == 0) {
+ len = TclUtfToUniChar(src, &ch);
+ }
+#endif
+ return src + len;
}
/*
@@ -633,8 +662,7 @@ Tcl_UtfPrev(
const char *look;
int i, byte;
- src--;
- look = src;
+ look = --src;
for (i = 0; i < TCL_UTF_MAX; i++) {
if (look < start) {
if (src < start) {
@@ -707,7 +735,7 @@ Tcl_UtfAtIndex(
register const char *src, /* The UTF-8 string. */
register int index) /* The position of the desired character. */
{
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
while (index > 0) {
index--;
@@ -791,7 +819,7 @@ int
Tcl_UtfToUpper(
char *str) /* String to convert in place. */
{
- Tcl_UniChar ch, upChar;
+ Tcl_UniChar ch = 0, upChar;
char *src, *dst;
int bytes;
@@ -844,7 +872,7 @@ int
Tcl_UtfToLower(
char *str) /* String to convert in place. */
{
- Tcl_UniChar ch, lowChar;
+ Tcl_UniChar ch = 0, lowChar;
char *src, *dst;
int bytes;
@@ -898,7 +926,7 @@ int
Tcl_UtfToTitle(
char *str) /* String to convert in place. */
{
- Tcl_UniChar ch, titleChar, lowChar;
+ Tcl_UniChar ch = 0, titleChar, lowChar;
char *src, *dst;
int bytes;
@@ -1007,7 +1035,7 @@ Tcl_UtfNcmp(
const char *ct, /* UTF string cs is compared to. */
unsigned long numChars) /* Number of UTF chars to compare. */
{
- Tcl_UniChar ch1, ch2;
+ Tcl_UniChar ch1 = 0, ch2 = 0;
/*
* Cannot use 'memcmp(cs, ct, n);' as byte representation of \u0000 (the
@@ -1055,7 +1083,7 @@ Tcl_UtfNcasecmp(
const char *ct, /* UTF string cs is compared to. */
unsigned long numChars) /* Number of UTF chars to compare. */
{
- Tcl_UniChar ch1, ch2;
+ Tcl_UniChar ch1 = 0, ch2 = 0;
while (numChars-- > 0) {
/*
* n must be interpreted as chars, not bytes.
@@ -1684,7 +1712,7 @@ Tcl_UniCharCaseMatch(
* characters. */
int nocase) /* 0 for case sensitive, 1 for insensitive */
{
- Tcl_UniChar ch1, p;
+ Tcl_UniChar ch1 = 0, p;
while (1) {
p = *uniPattern;
diff --git a/generic/tclUtil.c b/generic/tclUtil.c
index 91cc3b4..608cd15 100644
--- a/generic/tclUtil.c
+++ b/generic/tclUtil.c
@@ -1646,7 +1646,7 @@ Tcl_Backslash(
* src, unless NULL. */
{
char buf[TCL_UTF_MAX];
- Tcl_UniChar ch;
+ Tcl_UniChar ch = 0;
Tcl_UtfBackslash(src, readPtr, buf);
TclUtfToUniChar(buf, &ch);
diff --git a/library/http/http.tcl b/library/http/http.tcl
index 0350808..9f5310b 100644
--- a/library/http/http.tcl
+++ b/library/http/http.tcl
@@ -11,7 +11,7 @@
package require Tcl 8.6-
# Keep this in sync with pkgIndex.tcl and with the install directories in
# Makefiles
-package provide http 2.8.11
+package provide http 2.8.12
namespace eval http {
# Allow resourcing to not clobber existing data
@@ -1027,6 +1027,7 @@ proc http::Event {sock token} {
# We have now read all headers
# We ignore HTTP/1.1 100 Continue returns. RFC2616 sec 8.2.3
if {$state(http) == "" || ([regexp {^\S+\s(\d+)} $state(http) {} x] && $x == 100)} {
+ set state(state) "connecting"
return
}
diff --git a/library/http/pkgIndex.tcl b/library/http/pkgIndex.tcl
index a0d28f1..d3fc7af 100644
--- a/library/http/pkgIndex.tcl
+++ b/library/http/pkgIndex.tcl
@@ -1,2 +1,2 @@
if {![package vsatisfies [package provide Tcl] 8.6-]} {return}
-package ifneeded http 2.8.11 [list tclPkgSetup $dir http 2.8.11 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
+package ifneeded http 2.8.12 [list tclPkgSetup $dir http 2.8.12 {{http.tcl source {::http::config ::http::formatQuery ::http::geturl ::http::reset ::http::wait ::http::register ::http::unregister ::http::mapReply}}}]
diff --git a/libtommath/LICENSE b/libtommath/LICENSE
index a75014d..04d6d1d 100644
--- a/libtommath/LICENSE
+++ b/libtommath/LICENSE
@@ -24,6 +24,6 @@ Tom St Denis
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- 0. You just DO WHAT THE FUCK YOU WANT TO.
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
[/LICENSE #2]
diff --git a/libtommath/README.md b/libtommath/README.md
new file mode 100644
index 0000000..4c5da71
--- /dev/null
+++ b/libtommath/README.md
@@ -0,0 +1,15 @@
+[![Build Status - master](https://travis-ci.org/libtom/libtommath.png?branch=master)](https://travis-ci.org/libtom/libtommath)
+
+[![Build Status - develop](https://travis-ci.org/libtom/libtommath.png?branch=develop)](https://travis-ci.org/libtom/libtommath)
+
+This is the git repository for [LibTomMath](http://www.libtom.org/), a free open source portable number theoretic multiple-precision integer (MPI) library written entirely in C.
+
+The `develop` branch contains the in-development version. Stable releases are tagged.
+
+Documentation is built from the LaTeX file `bn.tex`. There is also limited documentation in `tommath.h`. There is also a document, `tommath.pdf`, which describes the goals of the project and many of the algorithms used.
+
+The project can be build by using `make`. Along with the usual `make`, `make clean` and `make install`, there are several other build targets, see the makefile for details. There are also makefiles for certain specific platforms.
+
+Tests are located in `demo/` and can be built in two flavors.
+* `make test` creates a test binary that is intended to be run against `mtest`. `mtest` can be built with `make mtest` and test execution is done like `./mtest/mtest | ./test`. `mtest` is creating test vectors using an alternative MPI library and `test` is consuming these vectors to verify correct behavior of ltm
+* `make test_standalone` creates a stand-alone test binary that executes several test routines.
diff --git a/libtommath/bn_error.c b/libtommath/bn_error.c
index 3abf1a7..0d77411 100644
--- a/libtommath/bn_error.c
+++ b/libtommath/bn_error.c
@@ -42,6 +42,6 @@ const char *mp_error_to_string(int code)
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_fast_mp_invmod.c b/libtommath/bn_fast_mp_invmod.c
index aa41098..12f42de 100644
--- a/libtommath/bn_fast_mp_invmod.c
+++ b/libtommath/bn_fast_mp_invmod.c
@@ -143,6 +143,6 @@ LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL);
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_fast_mp_montgomery_reduce.c b/libtommath/bn_fast_mp_montgomery_reduce.c
index a63839d..16d5ff7 100644
--- a/libtommath/bn_fast_mp_montgomery_reduce.c
+++ b/libtommath/bn_fast_mp_montgomery_reduce.c
@@ -167,6 +167,6 @@ int fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho)
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_fast_s_mp_mul_digs.c b/libtommath/bn_fast_s_mp_mul_digs.c
index acd13b4..a1015af 100644
--- a/libtommath/bn_fast_s_mp_mul_digs.c
+++ b/libtommath/bn_fast_s_mp_mul_digs.c
@@ -102,6 +102,6 @@ int fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs)
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_fast_s_mp_mul_high_digs.c b/libtommath/bn_fast_s_mp_mul_high_digs.c
index b96cf60..08f0355 100644
--- a/libtommath/bn_fast_s_mp_mul_high_digs.c
+++ b/libtommath/bn_fast_s_mp_mul_high_digs.c
@@ -93,6 +93,6 @@ int fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs)
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_fast_s_mp_sqr.c b/libtommath/bn_fast_s_mp_sqr.c
index 775c76f..f435af9 100644
--- a/libtommath/bn_fast_s_mp_sqr.c
+++ b/libtommath/bn_fast_s_mp_sqr.c
@@ -109,6 +109,6 @@ int fast_s_mp_sqr (mp_int * a, mp_int * b)
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_mp_2expt.c b/libtommath/bn_mp_2expt.c
index 2845814..989bb9f 100644
--- a/libtommath/bn_mp_2expt.c
+++ b/libtommath/bn_mp_2expt.c
@@ -43,6 +43,6 @@ mp_2expt (mp_int * a, int b)
}
#endif
-/* $Source$ */
-/* $Revision$ */
-/* $Date$ */
+/* ref: $Format:%D$ */
+/* git commit: $Format:%H$ */
+/* commit time: $Format:%ai$ */
diff --git a/libtommath/bn_mp_abs.c b/libtommath/bn_mp_abs.c