summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2019-11-13 18:11:56 (GMT)
committerdgp <dgp@users.sourceforge.net>2019-11-13 18:11:56 (GMT)
commit2ab36cc28aa0c2ee5162f017270225fd40b2190d (patch)
tree4e5ff8994b37a730df606fda81c64c785d6f28f0
parentf8d95ed6e3a9e4629689601f90db1b78fe050c76 (diff)
parented907ec2d18048ab42baa3a8a6b4436894dc8912 (diff)
downloadtcl-2ab36cc28aa0c2ee5162f017270225fd40b2190d.zip
tcl-2ab36cc28aa0c2ee5162f017270225fd40b2190d.tar.gz
tcl-2ab36cc28aa0c2ee5162f017270225fd40b2190d.tar.bz2
merge 8.6
-rw-r--r--generic/tclEncoding.c2
-rw-r--r--generic/tclInt.h2
-rw-r--r--generic/tclScan.c18
-rw-r--r--generic/tclStubInit.c8
-rw-r--r--generic/tclTestObj.c2
-rw-r--r--generic/tclTomMath.decls11
-rw-r--r--generic/tclTomMathDecls.h68
-rw-r--r--generic/tclTomMathInterface.c9
-rw-r--r--libtommath/bn_mp_mul.c4
-rw-r--r--tests/cmdMZ.test31
-rw-r--r--win/makefile.vc2
-rw-r--r--win/tclWinDde.c4
-rw-r--r--win/tclWinFile.c8
-rw-r--r--win/tclWinPort.h3
-rw-r--r--win/tclWinReg.c4
15 files changed, 120 insertions, 56 deletions
diff --git a/generic/tclEncoding.c b/generic/tclEncoding.c
index 002c765..f159b32 100644
--- a/generic/tclEncoding.c
+++ b/generic/tclEncoding.c
@@ -2366,7 +2366,7 @@ UtfToUtfProc(
dst += Tcl_UniCharToUtf(*chPtr, dst);
#if TCL_UTF_MAX == 4
if ((*chPtr >= 0xD800) && (len < 3)) {
- src += TclUtfToUniChar(src + len, chPtr);
+ src += Tcl_UtfToUniChar(src, chPtr);
dst += Tcl_UniCharToUtf(*chPtr, dst);
}
#endif
diff --git a/generic/tclInt.h b/generic/tclInt.h
index 9038a56..39fb740 100644
--- a/generic/tclInt.h
+++ b/generic/tclInt.h
@@ -4429,7 +4429,7 @@ MODULE_SCOPE void TclDbInitNewObj(Tcl_Obj *objPtr, const char *file,
*/
#define TclUtfToUniChar(str, chPtr) \
- ((((unsigned char) *(str)) < 0xC0) ? \
+ ((((unsigned char) *(str)) < 0x80) ? \
((*(chPtr) = (unsigned char) *(str)), 1) \
: Tcl_UtfToUniChar(str, chPtr))
diff --git a/generic/tclScan.c b/generic/tclScan.c
index b0669ab..4b9298d 100644
--- a/generic/tclScan.c
+++ b/generic/tclScan.c
@@ -585,9 +585,6 @@ Tcl_ScanObjCmd(
Tcl_UniChar ch = 0, sch = 0;
Tcl_Obj **objs = NULL, *objPtr = NULL;
int flags;
- char buf[513]; /* Temporary buffer to hold scanned number
- * strings before they are passed to
- * strtoul. */
if (objc < 3) {
Tcl_WrongNumArgs(interp, 1, objv,
@@ -937,9 +934,9 @@ Tcl_ScanObjCmd(
}
}
if ((flags & SCAN_UNSIGNED) && (wideValue < 0)) {
- sprintf(buf, "%" TCL_LL_MODIFIER "u",
- (Tcl_WideUInt)wideValue);
- Tcl_SetStringObj(objPtr, buf, -1);
+ mp_int big;
+ TclBNInitBignumFromWideUInt(&big, (Tcl_WideUInt)wideValue);
+ Tcl_SetBignumObj(objPtr, &big);
} else {
Tcl_SetWideIntObj(objPtr, wideValue);
}
@@ -952,8 +949,13 @@ Tcl_ScanObjCmd(
}
}
if ((flags & SCAN_UNSIGNED) && (value < 0)) {
- sprintf(buf, "%lu", value); /* INTL: ISO digit */
- Tcl_SetStringObj(objPtr, buf, -1);
+#ifdef TCL_WIDE_INT_IS_LONG
+ mp_int big;
+ TclBNInitBignumFromWideUInt(&big, (unsigned long)value);
+ Tcl_SetBignumObj(objPtr, &big);
+#else
+ Tcl_SetWideIntObj(objPtr, (unsigned long)value);
+#endif
} else {
Tcl_SetLongObj(objPtr, value);
}
diff --git a/generic/tclStubInit.c b/generic/tclStubInit.c
index 0618f00..09c975d 100644
--- a/generic/tclStubInit.c
+++ b/generic/tclStubInit.c
@@ -70,12 +70,12 @@ static int TclSockMinimumBuffersOld(int sock, int size)
}
#endif
-static MP_SET_UNSIGNED(bn_mp_set_ull, Tcl_WideUInt)
+MP_SET_UNSIGNED(mp_set_ull, Tcl_WideUInt)
mp_err TclBN_mp_set_int(mp_int *a, unsigned long i)
{
- bn_mp_set_ull(a, i);
+ mp_set_ull(a, i);
return MP_OKAY;
}
@@ -83,7 +83,7 @@ mp_err TclBN_mp_init_set_int(mp_int *a, unsigned long i)
{
mp_err result = mp_init(a);
if (result == MP_OKAY) {
- bn_mp_set_ull(a, i);
+ mp_set_ull(a, i);
}
return result;
}
@@ -916,7 +916,7 @@ const TclTomMathStubs tclTomMathStubs = {
TclBNInitBignumFromWideInt, /* 65 */
TclBNInitBignumFromWideUInt, /* 66 */
TclBN_mp_expt_d_ex, /* 67 */
- 0, /* 68 */
+ TclBN_mp_set_ull, /* 68 */
0, /* 69 */
0, /* 70 */
0, /* 71 */
diff --git a/generic/tclTestObj.c b/generic/tclTestObj.c
index 7f9b561..f741714 100644
--- a/generic/tclTestObj.c
+++ b/generic/tclTestObj.c
@@ -131,7 +131,7 @@ TclObjTest_Init(
*
* TestbignumobjCmd --
*
- * This function implmenets the "testbignumobj" command. It is used
+ * This function implements the "testbignumobj" command. It is used
* to exercise the bignum Tcl object type implementation.
*
* Results:
diff --git a/generic/tclTomMath.decls b/generic/tclTomMath.decls
index 8325922..c5645a4 100644
--- a/generic/tclTomMath.decls
+++ b/generic/tclTomMath.decls
@@ -224,20 +224,23 @@ declare 63 {
# Formerly internal API to allow initialisation of bignums without knowing the
# typedefs of how a bignum works internally.
declare 64 {
- void TclBNInitBignumFromLong(mp_int *bignum, long initVal)
+ int TclBNInitBignumFromLong(mp_int *bignum, long initVal)
}
declare 65 {
- void TclBNInitBignumFromWideInt(mp_int *bignum, Tcl_WideInt initVal)
+ int TclBNInitBignumFromWideInt(mp_int *bignum, Tcl_WideInt initVal)
}
declare 66 {
- void TclBNInitBignumFromWideUInt(mp_int *bignum, Tcl_WideUInt initVal)
+ int TclBNInitBignumFromWideUInt(mp_int *bignum, Tcl_WideUInt initVal)
}
# Added in libtommath 1.0
declare 67 {
mp_err TclBN_mp_expt_d_ex(const mp_int *a, mp_digit b, mp_int *c, int fast)
}
-
+# Added in libtommath 1.0.1
+declare 68 {
+ void TclBN_mp_set_ull(mp_int *a, Tcl_WideUInt i)
+}
# Added in libtommath 1.1.0
declare 73 {
mp_err TclBN_mp_tc_and(const mp_int *a, const mp_int *b, mp_int *c)
diff --git a/generic/tclTomMathDecls.h b/generic/tclTomMathDecls.h
index 9131041..a1da2c9 100644
--- a/generic/tclTomMathDecls.h
+++ b/generic/tclTomMathDecls.h
@@ -96,6 +96,8 @@
#define mp_set_int(a,b) (TclBN_mp_set_int(a,(unsigned int)(b)),MP_OKAY)
#define mp_set_long(a,b) (TclBN_mp_set_int(a,b),MP_OKAY)
#define mp_set_ul(a,b) (void)TclBN_mp_set_int(a,b)
+#define mp_set_ull TclBN_mp_set_ull
+#define mp_set_u64 TclBN_mp_set_ull
#define mp_shrink TclBN_mp_shrink
#define mp_sqr TclBN_mp_sqr
#define mp_sqrt TclBN_mp_sqrt
@@ -311,17 +313,18 @@ EXTERN mp_err TclBN_mp_set_int(mp_int *a, unsigned long i);
/* 63 */
EXTERN int TclBN_mp_cnt_lsb(const mp_int *a);
/* 64 */
-EXTERN void TclBNInitBignumFromLong(mp_int *bignum, long initVal);
+EXTERN int TclBNInitBignumFromLong(mp_int *bignum, long initVal);
/* 65 */
-EXTERN void TclBNInitBignumFromWideInt(mp_int *bignum,
+EXTERN int TclBNInitBignumFromWideInt(mp_int *bignum,
Tcl_WideInt initVal);
/* 66 */
-EXTERN void TclBNInitBignumFromWideUInt(mp_int *bignum,
+EXTERN int TclBNInitBignumFromWideUInt(mp_int *bignum,
Tcl_WideUInt initVal);
/* 67 */
EXTERN mp_err TclBN_mp_expt_d_ex(const mp_int *a, mp_digit b,
mp_int *c, int fast);
-/* Slot 68 is reserved */
+/* 68 */
+EXTERN void TclBN_mp_set_ull(mp_int *a, Tcl_WideUInt i);
/* Slot 69 is reserved */
/* Slot 70 is reserved */
/* Slot 71 is reserved */
@@ -416,11 +419,11 @@ typedef struct TclTomMathStubs {
mp_err (*tclBN_mp_init_set_int) (mp_int *a, unsigned long i); /* 61 */
mp_err (*tclBN_mp_set_int) (mp_int *a, unsigned long i); /* 62 */
int (*tclBN_mp_cnt_lsb) (const mp_int *a); /* 63 */
- void (*tclBNInitBignumFromLong) (mp_int *bignum, long initVal); /* 64 */
- void (*tclBNInitBignumFromWideInt) (mp_int *bignum, Tcl_WideInt initVal); /* 65 */
- void (*tclBNInitBignumFromWideUInt) (mp_int *bignum, Tcl_WideUInt initVal); /* 66 */
+ int (*tclBNInitBignumFromLong) (mp_int *bignum, long initVal); /* 64 */
+ int (*tclBNInitBignumFromWideInt) (mp_int *bignum, Tcl_WideInt initVal); /* 65 */
+ int (*tclBNInitBignumFromWideUInt) (mp_int *bignum, Tcl_WideUInt initVal); /* 66 */
mp_err (*tclBN_mp_expt_d_ex) (const mp_int *a, mp_digit b, mp_int *c, int fast); /* 67 */
- void (*reserved68)(void);
+ void (*tclBN_mp_set_ull) (mp_int *a, Tcl_WideUInt i); /* 68 */
void (*reserved69)(void);
void (*reserved70)(void);
void (*reserved71)(void);
@@ -583,7 +586,8 @@ extern const TclTomMathStubs *tclTomMathStubsPtr;
(tclTomMathStubsPtr->tclBNInitBignumFromWideUInt) /* 66 */
#define TclBN_mp_expt_d_ex \
(tclTomMathStubsPtr->tclBN_mp_expt_d_ex) /* 67 */
-/* Slot 68 is reserved */
+#define TclBN_mp_set_ull \
+ (tclTomMathStubsPtr->tclBN_mp_set_ull) /* 68 */
/* Slot 69 is reserved */
/* Slot 70 is reserved */
/* Slot 71 is reserved */
@@ -611,4 +615,50 @@ extern const TclTomMathStubs *tclTomMathStubsPtr;
#undef TCL_STORAGE_CLASS
#define TCL_STORAGE_CLASS DLLIMPORT
+#ifdef USE_TCL_STUBS
+#undef TclBNInitBignumFromLong
+#define TclBNInitBignumFromLong(a,b) \
+ do { \
+ (a)->dp = NULL; \
+ (void)tclTomMathStubsPtr->tclBNInitBignumFromLong((a),(b)); \
+ if ((a)->dp == NULL) { \
+ Tcl_Panic("initialization failure in TclBNInitBignumFromLong"); \
+ } \
+ } while (0)
+#undef TclBNInitBignumFromWideInt
+#define TclBNInitBignumFromWideInt(a,b) \
+ do { \
+ (a)->dp = NULL; \
+ (void)tclTomMathStubsPtr->tclBNInitBignumFromWideInt((a),(b)); \
+ if ((a)->dp == NULL) { \
+ Tcl_Panic("initialization failure in TclBNInitBignumFromWideInt"); \
+ } \
+ } while (0)
+#undef TclBNInitBignumFromWideUInt
+#define TclBNInitBignumFromWideUInt(a,b) \
+ do { \
+ (a)->dp = NULL; \
+ (void)tclTomMathStubsPtr->tclBNInitBignumFromWideUInt((a),(b)); \
+ if ((a)->dp == NULL) { \
+ Tcl_Panic("initialization failure in TclBNInitBignumFromWideUInt"); \
+ } \
+ } while (0)
+#define mp_init_i32(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromLong((a),(int32_t)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_l(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromLong((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ll(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideInt((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_i64(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideInt((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_u32(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideUInt((a),(uint32_t)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ul(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideUInt((a),(unsigned long)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ull(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideUInt((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_u64(a,b) (((a)->dp=NULL,tclTomMathStubsPtr->tclBNInitBignumFromWideUInt((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#else
+#define mp_init_i32(a,b) (((a)->dp=NULL,(TclBNInitBignumFromLong)((a),(int32_t)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_l(a,b) (((a)->dp=NULL,(TclBNInitBignumFromLong)((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ll(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideInt)((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_i64(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideInt)((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_u32(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideUInt)((a),(uint32_t)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ul(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideUInt)((a),(unsigned long)(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_ull(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideUInt)((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#define mp_init_u64(a,b) (((a)->dp=NULL,(TclBNInitBignumFromWideUInt)((a),(b)),(a)->dp)?MP_OKAY:MP_ERR)
+#endif /* USE_TCL_STUBS */
#endif /* _TCLINTDECLS */
diff --git a/generic/tclTomMathInterface.c b/generic/tclTomMathInterface.c
index c28b3b1..2dc8c2d 100644
--- a/generic/tclTomMathInterface.c
+++ b/generic/tclTomMathInterface.c
@@ -106,7 +106,7 @@ TclBN_revision(void)
*----------------------------------------------------------------------
*/
-void
+int
TclBNInitBignumFromLong(
mp_int *a,
long initVal)
@@ -146,6 +146,7 @@ TclBNInitBignumFromLong(
v >>= MP_DIGIT_BIT;
}
a->used = p - a->dp;
+ return MP_OKAY;
}
/*
@@ -164,7 +165,7 @@ TclBNInitBignumFromLong(
*----------------------------------------------------------------------
*/
-void
+int
TclBNInitBignumFromWideInt(
mp_int *a, /* Bignum to initialize */
Tcl_WideInt v) /* Initial value */
@@ -175,6 +176,7 @@ TclBNInitBignumFromWideInt(
} else {
TclBNInitBignumFromWideUInt(a, (Tcl_WideUInt)v);
}
+ return MP_OKAY;
}
/*
@@ -193,7 +195,7 @@ TclBNInitBignumFromWideInt(
*----------------------------------------------------------------------
*/
-void
+int
TclBNInitBignumFromWideUInt(
mp_int *a, /* Bignum to initialize */
Tcl_WideUInt v) /* Initial value */
@@ -222,6 +224,7 @@ TclBNInitBignumFromWideUInt(
v >>= MP_DIGIT_BIT;
}
a->used = p - a->dp;
+ return MP_OKAY;
}
/*
diff --git a/libtommath/bn_mp_mul.c b/libtommath/bn_mp_mul.c
index 561913a..b00334d 100644
--- a/libtommath/bn_mp_mul.c
+++ b/libtommath/bn_mp_mul.c
@@ -12,7 +12,9 @@ mp_err mp_mul(const mp_int *a, const mp_int *b, mp_int *c)
digs = a->used + b->used + 1;
mp_sign neg = (a->sign == b->sign) ? MP_ZPOS : MP_NEG;
- if (MP_HAS(S_MP_BALANCE_MUL) &&
+ if (a == b) {
+ return mp_sqr(a,c);
+ } else if (MP_HAS(S_MP_BALANCE_MUL) &&
/* Check sizes. The smaller one needs to be larger than the Karatsuba cut-off.
* The bigger one needs to be at least about one MP_KARATSUBA_MUL_CUTOFF bigger
* to make some sense, but it depends on architecture, OS, position of the
diff --git a/tests/cmdMZ.test b/tests/cmdMZ.test
index ab0887a..e661433 100644
--- a/tests/cmdMZ.test
+++ b/tests/cmdMZ.test
@@ -29,8 +29,6 @@ namespace eval ::tcl::test::cmdMZ {
namespace import ::tcl::unsupported::timerate
}
- testConstraint knownMsvcBug [expr {![info exists ::env(TRAVIS_OS_NAME)] || ![string match windows $::env(TRAVIS_OS_NAME)]}]
-
proc ListGlobMatch {expected actual} {
if {[llength $expected] != [llength $actual]} {
return 0
@@ -328,8 +326,12 @@ test cmdMZ-4.13 {Tcl_SplitObjCmd: basic split commands} {
proc _nrt_sleep {msec} {
set usec [expr {$msec * 1000}]
set stime [clock microseconds]
- while {abs([clock microseconds] - $stime) < $usec} {after 0}
+ while {abs([clock microseconds] - $stime) < $usec} {
+ # don't use after 0 unless it's NRT-capable, so yes - busy-wait (but it's more precise):
+ # after 0
+ }
}
+_nrt_sleep 0; # warm up (clock, compile, etc)
test cmdMZ-5.1 {Tcl_TimeObjCmd: basic format of command} -body {
time
@@ -346,8 +348,8 @@ test cmdMZ-5.4 {Tcl_TimeObjCmd: nothing happens with negative iteration counts}
test cmdMZ-5.5 {Tcl_TimeObjCmd: result format} -body {
time {format 1}
} -match regexp -result {^\d+ microseconds per iteration}
-test cmdMZ-5.6 {Tcl_TimeObjCmd: slower commands take longer} knownMsvcBug {
- expr {[lindex [time {_nrt_sleep 1}] 0] < [lindex [time {_nrt_sleep 20}] 0]}
+test cmdMZ-5.6 {Tcl_TimeObjCmd: slower commands take longer} {
+ expr {[lindex [time {_nrt_sleep 0.01}] 0] < [lindex [time {_nrt_sleep 10.0}] 0]}
} 1
test cmdMZ-5.7 {Tcl_TimeObjCmd: errors generate right trace} {
list [catch {time {error foo}} msg] $msg $::errorInfo
@@ -399,19 +401,20 @@ test cmdMZ-6.5a {Tcl_TimeRateObjCmd: result format and one iteration} {
test cmdMZ-6.5b {Tcl_TimeRateObjCmd: result format without iterations} {
regexp {^0 \ws/# 0 # 0 #/sec 0 net-ms$} [timerate {} 0 0]
} 1
-test cmdMZ-6.6 {Tcl_TimeRateObjCmd: slower commands take longer, but it remains almost the same time of measument} knownMsvcBug {
- set m1 [timerate {_nrt_sleep 0} 20]
- set m2 [timerate {_nrt_sleep 0.2} 20]
+test cmdMZ-6.6 {Tcl_TimeRateObjCmd: slower commands take longer, but it remains almost the same time of measument} {
+ lassign [timerate {_nrt_sleep 0} 50] ovh
+ set m1 [timerate -overhead $ovh {_nrt_sleep 0.01} 50]
+ set m2 [timerate -overhead $ovh {_nrt_sleep 1.00} 50]
list \
[expr {[lindex $m1 0] < [lindex $m2 0]}] \
[expr {[lindex $m1 0] < 100}] \
[expr {[lindex $m2 0] > 100}] \
- [expr {[lindex $m1 2] > 1000}] \
- [expr {[lindex $m2 2] < 1000}] \
- [expr {[lindex $m1 4] > 50000}] \
- [expr {[lindex $m2 4] < 50000}] \
- [expr {[lindex $m1 6] > 10 && [lindex $m1 6] < 100}] \
- [expr {[lindex $m2 6] > 10 && [lindex $m2 6] < 100}]
+ [expr {[lindex $m1 2] > 500}] \
+ [expr {[lindex $m2 2] < 500}] \
+ [expr {[lindex $m1 4] > 10000}] \
+ [expr {[lindex $m2 4] < 10000}] \
+ [expr {[lindex $m1 6] > 5 && [lindex $m1 6] < 100}] \
+ [expr {[lindex $m2 6] > 5 && [lindex $m2 6] < 100}]
} [lrepeat 9 1]
test cmdMZ-6.7 {Tcl_TimeRateObjCmd: errors generate right trace} {
list [catch {timerate {error foo} 1} msg] $msg $::errorInfo
diff --git a/win/makefile.vc b/win/makefile.vc
index 01cdb1f..6a428aa 100644
--- a/win/makefile.vc
+++ b/win/makefile.vc
@@ -893,8 +893,6 @@ install-libraries: tclConfig tcl-nmake install-msgs install-tzdata
@$(CPY) "$(GENERICDIR)\tclPlatDecls.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(GENERICDIR)\tclTomMath.h" "$(INCLUDE_INSTALL_DIR)\"
@$(CPY) "$(GENERICDIR)\tclTomMathDecls.h" "$(INCLUDE_INSTALL_DIR)\"
- @$(CPY) "$(TOMMATHDIR)\tommath_class.h" "$(INCLUDE_INSTALL_DIR)\"
- @$(CPY) "$(TOMMATHDIR)\tommath_superclass.h" "$(INCLUDE_INSTALL_DIR)\"
@echo Installing library files to $(SCRIPT_INSTALL_DIR)
@$(CPY) "$(ROOT)\library\history.tcl" "$(SCRIPT_INSTALL_DIR)\"
@$(CPY) "$(ROOT)\library\init.tcl" "$(SCRIPT_INSTALL_DIR)\"
diff --git a/win/tclWinDde.c b/win/tclWinDde.c
index cbbcdae..267ee6e 100644
--- a/win/tclWinDde.c
+++ b/win/tclWinDde.c
@@ -119,8 +119,8 @@ static int DdeObjCmd(void *clientData,
#if (TCL_MAJOR_VERSION < 9) && (TCL_MINOR_VERSION < 7)
# if TCL_UTF_MAX > 3
-# define Tcl_WCharToUtfDString(a,b,c) Tcl_WinTCharToUtf(a,(b)*sizeof(WCHAR),c)
-# define Tcl_UtfToWCharDString(a,b,c) Tcl_WinUtfToTChar(a,b,c)
+# define Tcl_WCharToUtfDString(a,b,c) Tcl_WinTCharToUtf((TCHAR *)(a),(b)*sizeof(WCHAR),c)
+# define Tcl_UtfToWCharDString(a,b,c) (WCHAR *)Tcl_WinUtfToTChar(a,b,c)
# else
# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString
# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString
diff --git a/win/tclWinFile.c b/win/tclWinFile.c
index 20cd6d4..e050862 100644
--- a/win/tclWinFile.c
+++ b/win/tclWinFile.c
@@ -1472,14 +1472,14 @@ TclpGetUserHome(
Tcl_DStringFree(&ds);
} else {
Tcl_DStringInit(&ds);
- wName = Tcl_UtfToUniCharDString(domain + 1, -1, &ds);
+ wName = (WCHAR *)Tcl_WinUtfToTChar(domain + 1, -1, &ds);
rc = NetGetDCName(NULL, wName, (LPBYTE *) &wDomain);
Tcl_DStringFree(&ds);
nameLen = domain - name;
}
if (rc == 0) {
Tcl_DStringInit(&ds);
- wName = Tcl_UtfToUniCharDString(name, nameLen, &ds);
+ wName = (WCHAR *)Tcl_WinUtfToTChar(name, nameLen, &ds);
while (NetUserGetInfo(wDomain, wName, 1, (LPBYTE *) &uiPtr) != 0) {
/*
* User does not exist; if domain was not specified, try again
@@ -1507,7 +1507,7 @@ TclpGetUserHome(
wHomeDir = uiPtr->usri1_home_dir;
if ((wHomeDir != NULL) && (wHomeDir[0] != L'\0')) {
size = lstrlenW(wHomeDir);
- Tcl_UniCharToUtfDString(wHomeDir, size, bufferPtr);
+ Tcl_WinTCharToUtf((TCHAR *)wHomeDir, size*sizeof(WCHAR), bufferPtr);
} else {
/*
* User exists but has no home dir. Return
@@ -1515,7 +1515,7 @@ TclpGetUserHome(
*/
GetProfilesDirectoryW(buf, &size);
- Tcl_UniCharToUtfDString(buf, size-1, bufferPtr);
+ Tcl_WinTCharToUtf((TCHAR *)buf, (size-1)*sizeof(WCHAR), bufferPtr);
Tcl_DStringAppend(bufferPtr, "/", 1);
Tcl_DStringAppend(bufferPtr, name, nameLen);
}
diff --git a/win/tclWinPort.h b/win/tclWinPort.h
index 337d88d..5e63c02 100644
--- a/win/tclWinPort.h
+++ b/win/tclWinPort.h
@@ -92,6 +92,9 @@ typedef DWORD_PTR * PDWORD_PTR;
#include <malloc.h>
#include <process.h>
#include <signal.h>
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
#include <limits.h>
#ifndef __GNUC__
diff --git a/win/tclWinReg.c b/win/tclWinReg.c
index b66282a..2c1b8a5 100644
--- a/win/tclWinReg.c
+++ b/win/tclWinReg.c
@@ -126,8 +126,8 @@ static int SetValue(Tcl_Interp *interp, Tcl_Obj *keyNameObj,
#if (TCL_MAJOR_VERSION < 9) && (TCL_MINOR_VERSION < 7)
# if TCL_UTF_MAX > 3
-# define Tcl_WCharToUtfDString(a,b,c) Tcl_WinTCharToUtf(a,(b)*sizeof(WCHAR),c)
-# define Tcl_UtfToWCharDString(a,b,c) Tcl_WinUtfToTChar(a,b,c)
+# define Tcl_WCharToUtfDString(a,b,c) Tcl_WinTCharToUtf((TCHAR *)(a),(b)*sizeof(WCHAR),c)
+# define Tcl_UtfToWCharDString(a,b,c) (WCHAR *)Tcl_WinUtfToTChar(a,b,c)
# else
# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString
# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString