summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.travis.yml12
-rw-r--r--doc/Utf.32
-rw-r--r--generic/tclDecls.h10
-rw-r--r--generic/tclParse.c3
-rw-r--r--generic/tclUtf.c4
-rw-r--r--tests/async.test3
-rw-r--r--tests/cmdMZ.test5
-rw-r--r--win/tclWinDde.c66
-rw-r--r--win/tclWinReg.c45
-rw-r--r--win/tclWinTime.c2
10 files changed, 93 insertions, 59 deletions
diff --git a/.travis.yml b/.travis.yml
index c3e028f..538006d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -278,24 +278,24 @@ matrix:
script:
- cmd.exe /C 'vcvarsall.bat x64 && nmake -f makefile.vc all tcltest'
- cmd.exe /C 'vcvarsall.bat x64 && nmake -f makefile.vc test'
- - name: "Windows/MSVC/Shared: NO_DEPRECATED"
+ - name: "Windows/MSVC/Shared: UTF_MAX=6"
os: windows
compiler: cl
env: *vcenv
before_install: *vcpreinst
install: []
script:
- - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=nodep -f makefile.vc all tcltest'
- - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=nodep -f makefile.vc test'
- - name: "Windows/MSVC/Shared: UTF_MAX=6"
+ - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=utfmax -f makefile.vc all tcltest'
+ - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=utfmax -f makefile.vc test'
+ - name: "Windows/MSVC/Shared: NO_DEPRECATED"
os: windows
compiler: cl
env: *vcenv
before_install: *vcpreinst
install: []
script:
- - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=utfmax -f makefile.vc all tcltest'
- - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=utfmax -f makefile.vc test'
+ - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=nodep -f makefile.vc all tcltest'
+ - cmd.exe /C 'vcvarsall.bat x64 && nmake OPTS=nodep -f makefile.vc test'
- name: "Windows/MSVC/Static"
os: windows
compiler: cl
diff --git a/doc/Utf.3 b/doc/Utf.3
index 29dd11a..b2a8389 100644
--- a/doc/Utf.3
+++ b/doc/Utf.3
@@ -93,7 +93,7 @@ int
.AS "const Tcl_UniChar" *uniPattern in/out
.AP char *buf out
Buffer in which the UTF-8 representation of the Tcl_UniChar is stored. At most
-\fBTCL_UTF_MAX\fR bytes are stored in the buffer.
+4 bytes are stored in the buffer.
.AP int ch in
The Unicode character to be converted or examined.
.AP Tcl_UniChar *chPtr out
diff --git a/generic/tclDecls.h b/generic/tclDecls.h
index 1fa1640..11c62cc 100644
--- a/generic/tclDecls.h
+++ b/generic/tclDecls.h
@@ -4157,6 +4157,16 @@ extern const TclStubs *tclStubsPtr;
# undef Tcl_UniCharLen
#endif
+ #if defined(USE_TCL_STUBS)
+# define Tcl_WCharToUtfDString (sizeof(wchar_t) != sizeof(short) ? (char *(*)(const wchar_t *, int, Tcl_DString *))tclStubsPtr->tcl_UniCharToUtfDString : (char *(*)(const wchar_t *, int, Tcl_DString *))Tcl_Char16ToUtfDString)
+# define Tcl_UtfToWCharDString (sizeof(wchar_t) != sizeof(short) ? (wchar_t *(*)(const char *, int, Tcl_DString *))tclStubsPtr->tcl_UtfToUniCharDString : (wchar_t *(*)(const char *, int, Tcl_DString *))Tcl_UtfToChar16DString)
+# define Tcl_UtfToWChar (sizeof(wchar_t) != sizeof(short) ? tclStubsPtr->tcl_UtfToChar16 : Tcl_UtfToUniChar)
+#else
+# define Tcl_WCharToUtfDString (sizeof(wchar_t) != sizeof(short) ? (char *(*)(const wchar_t *, int, Tcl_DString *))Tcl_UniCharToUtfDString : (char *(*)(const wchar_t *, int, Tcl_DString *))Tcl_Char16ToUtfDString)
+# define Tcl_UtfToWCharDString (sizeof(wchar_t) != sizeof(short) ? (wchar_t *(*)(const char *, int, Tcl_DString *))Tcl_UtfToUniCharDString : (wchar_t *(*)(const char *, int, Tcl_DString *))Tcl_UtfToChar16DString)
+# define Tcl_UtfToWChar (sizeof(wchar_t) != sizeof(short) ? Tcl_UtfToChar16 : Tcl_UtfToUniChar)
+#endif
+
/*
* Deprecated Tcl procedures:
*/
diff --git a/generic/tclParse.c b/generic/tclParse.c
index 093fbea..89b810f 100644
--- a/generic/tclParse.c
+++ b/generic/tclParse.c
@@ -784,8 +784,7 @@ TclParseBackslash(
* of bytes scanned should be written. */
char *dst) /* NULL, or points to buffer where the UTF-8
* encoding of the backslash sequence is to be
- * written. At most TCL_UTF_MAX bytes will be
- * written there. */
+ * written. At most 4 bytes will be written there. */
{
register const char *p = src+1;
Tcl_UniChar unichar = 0;
diff --git a/generic/tclUtf.c b/generic/tclUtf.c
index d48a51e..3f5a78d 100644
--- a/generic/tclUtf.c
+++ b/generic/tclUtf.c
@@ -266,7 +266,7 @@ Tcl_UniCharToUtfDString(
char *
Tcl_Char16ToUtfDString(
- const unsigned short *uniStr, /* Utf-16 string to convert to UTF-8. */
+ const unsigned short *uniStr,/* Utf-16 string to convert to UTF-8. */
int uniLength, /* Length of Utf-16 string. */
Tcl_DString *dsPtr) /* UTF-8 representation of string is appended
* to this previously initialized DString. */
@@ -592,7 +592,7 @@ Tcl_UtfToUniCharDString(
oldLength = Tcl_DStringLength(dsPtr);
Tcl_DStringSetLength(dsPtr,
- oldLength + (int) ((length + 1) * sizeof(int)));
+ oldLength + ((length + 1) * sizeof(int)));
wString = (int *) (Tcl_DStringValue(dsPtr) + oldLength);
w = wString;
diff --git a/tests/async.test b/tests/async.test
index 34c2fdc..df13f83 100644
--- a/tests/async.test
+++ b/tests/async.test
@@ -20,6 +20,7 @@ if {[lsearch [namespace children] ::tcltest] == -1} {
catch [list package require -exact Tcltest [info patchlevel]]
testConstraint testasync [llength [info commands testasync]]
+testConstraint knownMsvcBug [expr {![info exists ::env(TRAVIS_OS_NAME)] || ![string match windows $::env(TRAVIS_OS_NAME)]}]
proc async1 {result code} {
global aresult acode
@@ -202,7 +203,7 @@ test async-4.2 {async interrupting straight bytecode sequence} -constraints {
testasync delete $hm
}
test async-4.3 {async interrupting loop-less bytecode sequence} -constraints {
- testasync
+ testasync knownMsvcBug
} -setup {
set hm [testasync create async3]
} -body {
diff --git a/tests/cmdMZ.test b/tests/cmdMZ.test
index e4db915..a6f7361 100644
--- a/tests/cmdMZ.test
+++ b/tests/cmdMZ.test
@@ -22,8 +22,11 @@ namespace eval ::tcl::test::cmdMZ {
namespace import ::tcltest::makeFile
namespace import ::tcltest::removeFile
namespace import ::tcltest::temporaryDirectory
+ namespace import ::tcltest::testConstraint
namespace import ::tcltest::test
+ 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
@@ -339,7 +342,7 @@ 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} {
+test cmdMZ-5.6 {Tcl_TimeObjCmd: slower commands take longer} knownMsvcBug {
expr {[lindex [time {_nrt_sleep 1}] 0] < [lindex [time {_nrt_sleep 20}] 0]}
} 1
test cmdMZ-5.7 {Tcl_TimeObjCmd: errors generate right trace} {
diff --git a/win/tclWinDde.c b/win/tclWinDde.c
index e611f5f..44cbbbe 100644
--- a/win/tclWinDde.c
+++ b/win/tclWinDde.c
@@ -36,7 +36,7 @@ typedef struct RegisteredInterp {
struct RegisteredInterp *nextPtr;
/* The next interp this application knows
* about. */
- WCHAR *name; /* Interpreter's name (malloc-ed). */
+ WCHAR *name; /* Interpreter's name (malloc-ed). */
Tcl_Obj *handlerPtr; /* The server handler command */
Tcl_Interp *interp; /* The interpreter attached to this name. */
} RegisteredInterp;
@@ -119,6 +119,11 @@ static int DdeObjCmd(ClientData clientData,
Tcl_Interp *interp, int objc,
Tcl_Obj *const objv[]);
+#if (TCL_MAJOR_VERSION < 9) && (TCL_MINOR_VERSION < 7)
+# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString
+# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString
+#endif
+
static unsigned char *
getByteArrayFromObj(
Tcl_Obj *objPtr,
@@ -138,8 +143,14 @@ getByteArrayFromObj(
return result;
}
+#ifdef __cplusplus
+extern "C" {
+#endif
DLLEXPORT int Dde_Init(Tcl_Interp *interp);
DLLEXPORT int Dde_SafeInit(Tcl_Interp *interp);
+#ifdef __cplusplus
+}
+#endif
/*
*----------------------------------------------------------------------
@@ -358,8 +369,7 @@ DdeSetServerName(
}
if (r != TCL_OK) {
Tcl_DStringInit(&dString);
- Tcl_UtfToUniCharDString(Tcl_GetString(Tcl_GetObjResult(interp)), -1, &dString);
- OutputDebugString((WCHAR *) Tcl_DStringValue(&dString));
+ OutputDebugString(Tcl_UtfToWCharDString(Tcl_GetString(Tcl_GetObjResult(interp)), -1, &dString));
Tcl_DStringFree(&dString);
return NULL;
}
@@ -397,7 +407,7 @@ DdeSetServerName(
Tcl_ListObjIndex(interp, srvPtrPtr[n], 1, &namePtr);
Tcl_DStringInit(&ds);
- Tcl_UtfToUniCharDString(Tcl_GetString(namePtr), -1, &ds);
+ Tcl_UtfToWCharDString(Tcl_GetString(namePtr), -1, &ds);
if (wcscmp(actualName, (WCHAR *)Tcl_DStringValue(&ds)) == 0) {
suffix++;
Tcl_DStringFree(&ds);
@@ -757,7 +767,7 @@ DdeServerProc(
len = convPtr->returnPackagePtr->length;
if (uFmt != CF_TEXT) {
Tcl_DStringInit(&dsBuf);
- Tcl_UtfToUniCharDString(returnString, len, &dsBuf);
+ Tcl_UtfToWCharDString(returnString, len, &dsBuf);
returnString = Tcl_DStringValue(&dsBuf);
len = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR) - 1;
}
@@ -771,7 +781,7 @@ DdeServerProc(
Tcl_Obj *variableObjPtr;
Tcl_DStringInit(&ds);
- Tcl_UniCharToUtfDString(utilString, wcslen(utilString), &ds);
+ Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds);
variableObjPtr = Tcl_GetVar2Ex(
convPtr->riPtr->interp, Tcl_DStringValue(&ds), NULL,
TCL_GLOBAL_ONLY);
@@ -780,7 +790,7 @@ DdeServerProc(
len = variableObjPtr->length;
if (uFmt != CF_TEXT) {
Tcl_DStringInit(&dsBuf);
- Tcl_UtfToUniCharDString(returnString, len, &dsBuf);
+ Tcl_UtfToWCharDString(returnString, len, &dsBuf);
returnString = Tcl_DStringValue(&dsBuf);
len = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR) - 1;
}
@@ -830,12 +840,12 @@ DdeServerProc(
DdeQueryString(ddeInstance, ddeItem, utilString, (DWORD) len + 1,
CP_WINUNICODE);
Tcl_DStringInit(&ds);
- Tcl_UniCharToUtfDString(utilString, wcslen(utilString), &ds);
+ Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds);
utilString = (WCHAR *) DdeAccessData(hData, &len2);
len = len2;
if (uFmt != CF_TEXT) {
Tcl_DStringInit(&ds2);
- Tcl_UniCharToUtfDString(utilString, wcslen(utilString), &ds2);
+ Tcl_WCharToUtfDString(utilString, wcslen(utilString), &ds2);
utilString = (WCHAR *) Tcl_DStringValue(&ds2);
}
variableObjPtr = Tcl_NewStringObj((char *)utilString, -1);
@@ -887,7 +897,7 @@ DdeServerProc(
Tcl_DString dsBuf;
Tcl_DStringInit(&dsBuf);
- Tcl_UniCharToUtfDString(utilString, (dlen>>1) - 1, &dsBuf);
+ Tcl_WCharToUtfDString(utilString, (dlen>>1) - 1, &dsBuf);
ddeObjectPtr = Tcl_NewStringObj(Tcl_DStringValue(&dsBuf),
Tcl_DStringLength(&dsBuf));
Tcl_DStringFree(&dsBuf);
@@ -1021,7 +1031,7 @@ MakeDdeConnection(
Tcl_DString dString;
Tcl_DStringInit(&dString);
- Tcl_UniCharToUtfDString(name, wcslen(name), &dString);
+ Tcl_WCharToUtfDString(name, wcslen(name), &dString);
Tcl_SetObjResult(interp, Tcl_ObjPrintf(
"no registered server named \"%s\"", Tcl_DStringValue(&dString)));
Tcl_DStringFree(&dString);
@@ -1131,12 +1141,12 @@ DdeServicesOnAck(
GlobalGetAtomName(service, sz, 255);
Tcl_DStringInit(&dString);
- Tcl_UniCharToUtfDString(sz, wcslen(sz), &dString);
+ Tcl_WCharToUtfDString(sz, wcslen(sz), &dString);
Tcl_ListObjAppendElement(NULL, matchPtr, Tcl_NewStringObj(Tcl_DStringValue(&dString), -1));
Tcl_DStringFree(&dString);
GlobalGetAtomName(topic, sz, 255);
Tcl_DStringInit(&dString);
- Tcl_UniCharToUtfDString(sz, wcslen(sz), &dString);
+ Tcl_WCharToUtfDString(sz, wcslen(sz), &dString);
Tcl_ListObjAppendElement(NULL, matchPtr, Tcl_NewStringObj(Tcl_DStringValue(&dString), -1));
Tcl_DStringFree(&dString);
@@ -1476,7 +1486,7 @@ DdeObjCmd(
length = objv[firstArg]->length;
Tcl_DStringInit(&serviceBuf);
- Tcl_UtfToUniCharDString(src, length, &serviceBuf);
+ Tcl_UtfToWCharDString(src, length, &serviceBuf);
serviceName = (WCHAR *) Tcl_DStringValue(&serviceBuf);
length = Tcl_DStringLength(&serviceBuf) / sizeof(WCHAR);
} else {
@@ -1486,7 +1496,7 @@ DdeObjCmd(
if (length == 0) {
serviceName = NULL;
} else if ((index != DDE_SERVERNAME) && (index != DDE_EVAL)) {
- ddeService = DdeCreateStringHandle(ddeInstance, (void *) serviceName,
+ ddeService = DdeCreateStringHandle(ddeInstance, serviceName,
CP_WINUNICODE);
}
@@ -1495,12 +1505,12 @@ DdeObjCmd(
length = objv[firstArg + 1]->length;
Tcl_DStringInit(&topicBuf);
- topicName = Tcl_UtfToUniCharDString(src, length, &topicBuf);
+ topicName = Tcl_UtfToWCharDString(src, length, &topicBuf);
length = Tcl_DStringLength(&topicBuf) / sizeof(WCHAR);
if (length == 0) {
topicName = NULL;
} else {
- ddeTopic = DdeCreateStringHandle(ddeInstance, (void *) topicName,
+ ddeTopic = DdeCreateStringHandle(ddeInstance, topicName,
CP_WINUNICODE);
}
}
@@ -1513,7 +1523,7 @@ DdeObjCmd(
Tcl_DString dsBuf;
Tcl_DStringInit(&dsBuf);
- Tcl_UniCharToUtfDString(serviceName, wcslen(serviceName), &dsBuf);
+ Tcl_WCharToUtfDString(serviceName, wcslen(serviceName), &dsBuf);
Tcl_SetObjResult(interp, Tcl_NewStringObj(Tcl_DStringValue(&dsBuf),
Tcl_DStringLength(&dsBuf)));
Tcl_DStringFree(&dsBuf);
@@ -1537,8 +1547,8 @@ DdeObjCmd(
src = Tcl_GetString(objv[firstArg + 2]);
dataLength = objv[firstArg + 2]->length;
Tcl_DStringInit(&dsBuf);
- dataString = (const WCHAR *)
- Tcl_UtfToUniCharDString(src, dataLength, &dsBuf);
+ dataString =
+ Tcl_UtfToWCharDString(src, dataLength, &dsBuf);
dataLength = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR);
}
@@ -1591,7 +1601,7 @@ DdeObjCmd(
src = Tcl_GetString(objv[firstArg + 2]);
length = objv[firstArg + 2]->length;
Tcl_DStringInit(&itemBuf);
- itemString = Tcl_UtfToUniCharDString(src, length, &itemBuf);
+ itemString = Tcl_UtfToWCharDString(src, length, &itemBuf);
length = Tcl_DStringLength(&itemBuf) / sizeof(WCHAR);
if (length == 0) {
@@ -1610,7 +1620,7 @@ DdeObjCmd(
result = TCL_ERROR;
} else {
Tcl_Obj *returnObjPtr;
- ddeItem = DdeCreateStringHandle(ddeInstance, (void *) itemString,
+ ddeItem = DdeCreateStringHandle(ddeInstance, itemString,
CP_WINUNICODE);
if (ddeItem != NULL) {
ddeData = DdeClientTransaction(NULL, 0, hConv, ddeItem,
@@ -1633,7 +1643,7 @@ DdeObjCmd(
tmp -= sizeof(WCHAR);
}
Tcl_DStringInit(&dsBuf);
- Tcl_UniCharToUtfDString(dataString, tmp>>1, &dsBuf);
+ Tcl_WCharToUtfDString(dataString, tmp>>1, &dsBuf);
returnObjPtr =
Tcl_NewStringObj(Tcl_DStringValue(&dsBuf),
Tcl_DStringLength(&dsBuf));
@@ -1659,7 +1669,7 @@ DdeObjCmd(
src = Tcl_GetString(objv[firstArg + 2]);
length = objv[firstArg + 2]->length;
Tcl_DStringInit(&itemBuf);
- itemString = Tcl_UtfToUniCharDString(src, length, &itemBuf);
+ itemString = Tcl_UtfToWCharDString(src, length, &itemBuf);
length = Tcl_DStringLength(&itemBuf) / sizeof(WCHAR);
if (length == 0) {
Tcl_SetObjResult(interp,
@@ -1678,7 +1688,7 @@ DdeObjCmd(
length = objv[firstArg + 3]->length;
Tcl_DStringInit(&dsBuf);
dataString = (BYTE *)
- Tcl_UtfToUniCharDString(data, length, &dsBuf);
+ Tcl_UtfToWCharDString(data, length, &dsBuf);
length = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR);
}
@@ -1690,7 +1700,7 @@ DdeObjCmd(
SetDdeError(interp);
result = TCL_ERROR;
} else {
- ddeItem = DdeCreateStringHandle(ddeInstance, (void *) itemString,
+ ddeItem = DdeCreateStringHandle(ddeInstance, itemString,
CP_WINUNICODE);
if (ddeItem != NULL) {
ddeData = DdeClientTransaction(dataString, (DWORD) length,
@@ -1842,7 +1852,7 @@ DdeObjCmd(
string = Tcl_GetString(objPtr);
length = objPtr->length;
Tcl_DStringInit(&dsBuf);
- Tcl_UtfToUniCharDString(string, length, &dsBuf);
+ Tcl_UtfToWCharDString(string, length, &dsBuf);
string = Tcl_DStringValue(&dsBuf);
length = Tcl_DStringLength(&dsBuf) + sizeof(WCHAR);
ddeItemData = DdeCreateDataHandle(ddeInstance, (BYTE *) string,
@@ -1894,7 +1904,7 @@ DdeObjCmd(
length -= sizeof(WCHAR);
}
Tcl_DStringInit(&dsBuf);
- Tcl_UniCharToUtfDString(ddeDataString, length>>1, &dsBuf);
+ Tcl_WCharToUtfDString(ddeDataString, length>>1, &dsBuf);
resultPtr = Tcl_NewStringObj(Tcl_DStringValue(&dsBuf),
Tcl_DStringLength(&dsBuf));
Tcl_DStringFree(&dsBuf);
diff --git a/win/tclWinReg.c b/win/tclWinReg.c
index 85c02d9..02c8367 100644
--- a/win/tclWinReg.c
+++ b/win/tclWinReg.c
@@ -126,6 +126,11 @@ static int SetValue(Tcl_Interp *interp, Tcl_Obj *keyNameObj,
Tcl_Obj *valueNameObj, Tcl_Obj *dataObj,
Tcl_Obj *typeObj, REGSAM mode);
+#if (TCL_MAJOR_VERSION < 9) && (TCL_MINOR_VERSION < 7)
+# define Tcl_WCharToUtfDString Tcl_UniCharToUtfDString
+# define Tcl_UtfToWCharDString Tcl_UtfToUniCharDString
+#endif
+
static unsigned char *
getByteArrayFromObj(
Tcl_Obj *objPtr,
@@ -145,8 +150,14 @@ getByteArrayFromObj(
return result;
}
+#ifdef __cplusplus
+extern "C" {
+#endif
DLLEXPORT int Registry_Init(Tcl_Interp *interp);
DLLEXPORT int Registry_Unload(Tcl_Interp *interp, int flags);
+#ifdef __cplusplus
+}
+#endif
/*
*----------------------------------------------------------------------
@@ -471,7 +482,7 @@ DeleteKey(
*/
Tcl_DStringInit(&buf);
- nativeTail = Tcl_UtfToUniCharDString(tail, -1, &buf);
+ nativeTail = Tcl_UtfToWCharDString(tail, -1, &buf);
result = RecursiveDeleteKey(subkey, nativeTail, saveMode);
Tcl_DStringFree(&buf);
@@ -528,7 +539,7 @@ DeleteValue(
valueName = Tcl_GetString(valueNameObj);
Tcl_DStringInit(&ds);
- Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &ds);
+ Tcl_UtfToWCharDString(valueName, valueNameObj->length, &ds);
result = RegDeleteValue(key, (const WCHAR *)Tcl_DStringValue(&ds));
Tcl_DStringFree(&ds);
if (result != ERROR_SUCCESS) {
@@ -618,7 +629,7 @@ GetKeyNames(
break;
}
Tcl_DStringInit(&ds);
- name = Tcl_UniCharToUtfDString(buffer, bufSize, &ds);
+ name = Tcl_WCharToUtfDString(buffer, bufSize, &ds);
if (pattern && !Tcl_StringMatch(name, pattern)) {
Tcl_DStringFree(&ds);
continue;
@@ -685,7 +696,7 @@ GetType(
valueName = Tcl_GetString(valueNameObj);
Tcl_DStringInit(&ds);
- nativeValue = Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &ds);
+ nativeValue = Tcl_UtfToWCharDString(valueName, valueNameObj->length, &ds);
result = RegQueryValueEx(key, nativeValue, NULL, &type,
NULL, NULL);
Tcl_DStringFree(&ds);
@@ -767,7 +778,7 @@ GetValue(
valueName = Tcl_GetString(valueNameObj);
Tcl_DStringInit(&buf);
- nativeValue = Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &buf);
+ nativeValue = Tcl_UtfToWCharDString(valueName, valueNameObj->length, &buf);
result = RegQueryValueEx(key, nativeValue, NULL, &type,
(BYTE *) Tcl_DStringValue(&data), &length);
@@ -819,7 +830,7 @@ GetValue(
WCHAR *wp = (WCHAR *) p;
Tcl_DStringInit(&buf);
- Tcl_UniCharToUtfDString(wp, wcslen(wp), &buf);
+ Tcl_WCharToUtfDString(wp, wcslen(wp), &buf);
Tcl_ListObjAppendElement(interp, resultPtr,
Tcl_NewStringObj(Tcl_DStringValue(&buf),
Tcl_DStringLength(&buf)));
@@ -832,7 +843,7 @@ GetValue(
} else if ((type == REG_SZ) || (type == REG_EXPAND_SZ)) {
WCHAR *wp = (WCHAR *) Tcl_DStringValue(&data);
Tcl_DStringInit(&buf);
- Tcl_UniCharToUtfDString((WCHAR *) Tcl_DStringValue(&data), wcslen(wp), &buf);
+ Tcl_WCharToUtfDString((const WCHAR *)Tcl_DStringValue(&data), wcslen(wp), &buf);
Tcl_DStringResult(interp, &buf);
} else {
/*
@@ -910,7 +921,7 @@ GetValueNames(
&size, NULL, NULL, NULL, NULL) == ERROR_SUCCESS) {
Tcl_DStringInit(&ds);
- Tcl_UniCharToUtfDString((WCHAR *) Tcl_DStringValue(&buffer), size, &ds);
+ Tcl_WCharToUtfDString((const WCHAR *)Tcl_DStringValue(&buffer), size, &ds);
name = Tcl_DStringValue(&ds);
if (!pattern || Tcl_StringMatch(name, pattern)) {
result = Tcl_ListObjAppendElement(interp, resultPtr,
@@ -1017,7 +1028,7 @@ OpenSubKey(
if (hostName) {
Tcl_DStringInit(&buf);
- hostName = (char *) Tcl_UtfToUniCharDString(hostName, -1, &buf);
+ hostName = (char *) Tcl_UtfToWCharDString(hostName, -1, &buf);
result = RegConnectRegistry((WCHAR *)hostName, rootKey,
&rootKey);
Tcl_DStringFree(&buf);
@@ -1033,7 +1044,7 @@ OpenSubKey(
if (keyName) {
Tcl_DStringInit(&buf);
- keyName = (char *) Tcl_UtfToUniCharDString(keyName, -1, &buf);
+ keyName = (char *) Tcl_UtfToWCharDString(keyName, -1, &buf);
}
if (flags & REG_CREATE) {
DWORD create;
@@ -1178,7 +1189,7 @@ RecursiveDeleteKey(
HKEY hKey;
REGSAM saveMode = mode;
static int checkExProc = 0;
- static FARPROC regDeleteKeyExProc = NULL;
+ static LSTATUS (* regDeleteKeyExProc) (HKEY, LPCWSTR, REGSAM, DWORD) = (LSTATUS (*) (HKEY, LPCWSTR, REGSAM, DWORD)) NULL;
/*
* Do not allow NULL or empty key name.
@@ -1218,7 +1229,7 @@ RecursiveDeleteKey(
checkExProc = 1;
handle = GetModuleHandle(TEXT("ADVAPI32"));
- regDeleteKeyExProc = (FARPROC)
+ regDeleteKeyExProc = (LSTATUS (*) (HKEY, LPCWSTR, REGSAM, DWORD))
GetProcAddress(handle, "RegDeleteKeyExW");
}
if (mode && regDeleteKeyExProc) {
@@ -1286,7 +1297,7 @@ SetValue(
valueName = Tcl_GetString(valueNameObj);
Tcl_DStringInit(&nameBuf);
- valueName = (char *) Tcl_UtfToUniCharDString(valueName, valueNameObj->length, &nameBuf);
+ valueName = (char *) Tcl_UtfToWCharDString(valueName, valueNameObj->length, &nameBuf);
if (type == REG_DWORD || type == REG_DWORD_BIG_ENDIAN) {
int value;
@@ -1331,7 +1342,7 @@ SetValue(
}
Tcl_DStringInit(&buf);
- Tcl_UtfToUniCharDString(Tcl_DStringValue(&data), Tcl_DStringLength(&data)+1,
+ Tcl_UtfToWCharDString(Tcl_DStringValue(&data), Tcl_DStringLength(&data)+1,
&buf);
result = RegSetValueEx(key, (WCHAR *) valueName, 0,
(DWORD) type, (BYTE *) Tcl_DStringValue(&buf),
@@ -1343,7 +1354,7 @@ SetValue(
const char *data = Tcl_GetString(dataObj);
Tcl_DStringInit(&buf);
- data = (char *) Tcl_UtfToUniCharDString(data, dataObj->length, &buf);
+ data = (char *) Tcl_UtfToWCharDString(data, dataObj->length, &buf);
/*
* Include the null in the length, padding if needed for WCHAR.
@@ -1424,7 +1435,7 @@ BroadcastValue(
str = Tcl_GetString(objv[0]);
Tcl_DStringInit(&ds);
- wstr = (WCHAR *) Tcl_UtfToUniCharDString(str, objv[0]->length, &ds);
+ wstr = Tcl_UtfToWCharDString(str, objv[0]->length, &ds);
if (Tcl_DStringLength(&ds) == 0) {
wstr = NULL;
}
@@ -1488,7 +1499,7 @@ AppendSystemError(
char *msgPtr;
Tcl_DStringInit(&ds);
- Tcl_UniCharToUtfDString(tMsgPtr, wcslen(tMsgPtr), &ds);
+ Tcl_WCharToUtfDString(tMsgPtr, wcslen(tMsgPtr), &ds);
LocalFree(tMsgPtr);
msgPtr = Tcl_DStringValue(&ds);
diff --git a/win/tclWinTime.c b/win/tclWinTime.c
index bfebbe6..f103a4f 100644
--- a/win/tclWinTime.c
+++ b/win/tclWinTime.c
@@ -124,7 +124,7 @@ static struct {
int initialized; /* 1 if initialized, 0 otherwise */
int perfCounter; /* 1 if performance counter usable for wide clicks */
double microsecsScale; /* Denominator scale between clock / microsecs */
-} wideClick = {0, 0.0};
+} wideClick = {0, 0, 0.0};
/*