diff options
| -rw-r--r-- | doc/Utf.3 | 2 | ||||
| -rw-r--r-- | generic/tclCmdAH.c | 1 | ||||
| -rw-r--r-- | generic/tclDecls.h | 8 | ||||
| -rw-r--r-- | generic/tclParse.c | 3 | ||||
| -rw-r--r-- | win/tclWinDde.c | 56 | ||||
| -rw-r--r-- | win/tclWinReg.c | 41 |
6 files changed, 65 insertions, 46 deletions
@@ -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/tclCmdAH.c b/generic/tclCmdAH.c index dff23a8..c7ec4f9 100644 --- a/generic/tclCmdAH.c +++ b/generic/tclCmdAH.c @@ -15,7 +15,6 @@ #ifdef _WIN32 # include "tclWinInt.h" #endif -#include <locale.h> /* * The state structure used by [foreach]. Note that the actual structure has diff --git a/generic/tclDecls.h b/generic/tclDecls.h index 3d8f959..fadb944 100644 --- a/generic/tclDecls.h +++ b/generic/tclDecls.h @@ -4119,12 +4119,12 @@ extern const TclStubs *tclStubsPtr; # define Tcl_UtfToUniChar Tcl_UtfToChar16 #endif #if defined(USE_TCL_STUBS) -# define Tcl_WCharToUtfDString (sizeof(wchar_t) != sizeof(short) ? tclStubsPtr->tcl_UniCharToUtfDString : Tcl_Char16ToUtfDString) -# define Tcl_UtfToWCharDString (sizeof(wchar_t) != sizeof(short) ? tclStubsPtr->tcl_UtfToUniCharDString : Tcl_UtfToChar16DString) +# 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) ? Tcl_UniCharToUtfDString : Tcl_Char16ToUtfDString) -# define Tcl_UtfToWCharDString (sizeof(wchar_t) != sizeof(short) ? Tcl_UtfToUniCharDString : Tcl_UtfToChar16DString) +# 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 diff --git a/generic/tclParse.c b/generic/tclParse.c index 164905a..448ce5e 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/win/tclWinDde.c b/win/tclWinDde.c index 9c04c2d..8c76cdb 100644 --- a/win/tclWinDde.c +++ b/win/tclWinDde.c @@ -119,6 +119,11 @@ static int DdeObjCmd(ClientData clientData, Tcl_Interp *interp, int objc, Tcl_Obj *const objv[]); +#if (TCL_MAJOR_VERSION < 9) && (TCL_MAJOR_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((Tcl_UniChar *)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((Tcl_UniChar *)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((Tcl_UniChar *)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((Tcl_UniChar *)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((Tcl_UniChar *)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((Tcl_UniChar *)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((Tcl_UniChar *)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 { @@ -1495,7 +1505,7 @@ DdeObjCmd( length = objv[firstArg + 1]->length; Tcl_DStringInit(&topicBuf); - topicName = (const WCHAR *)Tcl_UtfToUniCharDString(src, length, &topicBuf); + topicName = Tcl_UtfToWCharDString(src, length, &topicBuf); length = Tcl_DStringLength(&topicBuf) / sizeof(WCHAR); if (length == 0) { topicName = NULL; @@ -1513,7 +1523,7 @@ DdeObjCmd( Tcl_DString dsBuf; Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)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 = (const WCHAR *)Tcl_UtfToUniCharDString(src, length, &itemBuf); + itemString = Tcl_UtfToWCharDString(src, length, &itemBuf); length = Tcl_DStringLength(&itemBuf) / sizeof(WCHAR); if (length == 0) { @@ -1633,7 +1643,7 @@ DdeObjCmd( tmp -= sizeof(WCHAR); } Tcl_DStringInit(&dsBuf); - Tcl_UniCharToUtfDString((Tcl_UniChar *)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 = (const WCHAR *)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); } @@ -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((Tcl_UniChar *)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 b95cbcd..e73707e 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_MAJOR_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 = (const WCHAR *)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((const Tcl_UniChar *)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 = (const WCHAR *)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 = (const WCHAR *)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((const Tcl_UniChar *)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((const Tcl_UniChar *)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((const Tcl_UniChar *)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; @@ -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((const Tcl_UniChar *)tMsgPtr, wcslen(tMsgPtr), &ds); + Tcl_WCharToUtfDString(tMsgPtr, wcslen(tMsgPtr), &ds); LocalFree(tMsgPtr); msgPtr = Tcl_DStringValue(&ds); |
