diff options
Diffstat (limited to 'win/tclWinReg.c')
| -rw-r--r-- | win/tclWinReg.c | 45 |
1 files changed, 28 insertions, 17 deletions
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); |
