summaryrefslogtreecommitdiffstats
path: root/win/tclWinDde.c
diff options
context:
space:
mode:
authordgp <dgp@users.sourceforge.net>2018-11-19 17:29:12 (GMT)
committerdgp <dgp@users.sourceforge.net>2018-11-19 17:29:12 (GMT)
commitcc6faa155b3ac525cab5b017159361b62c4a9c6a (patch)
tree7fcee0f1e0eb5fa165d2af2f118b1cd52c6352f8 /win/tclWinDde.c
parent274d86b2ec1d33d42ce059946338c6e6e1086ea8 (diff)
parent1fae54c8c004d072d62e3d867ef4e66b238d0bcd (diff)
downloadtcl-cc6faa155b3ac525cab5b017159361b62c4a9c6a.zip
tcl-cc6faa155b3ac525cab5b017159361b62c4a9c6a.tar.gz
tcl-cc6faa155b3ac525cab5b017159361b62c4a9c6a.tar.bz2
merge 8.7
Diffstat (limited to 'win/tclWinDde.c')
-rw-r--r--win/tclWinDde.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/win/tclWinDde.c b/win/tclWinDde.c
index 6908fdf..27ddfc8 100644
--- a/win/tclWinDde.c
+++ b/win/tclWinDde.c
@@ -17,6 +17,7 @@
#include "tclInt.h"
#include <dde.h>
#include <ddeml.h>
+#include <tchar.h>
#if !defined(NDEBUG)
/* test POKE server Implemented for debug mode only */
@@ -116,6 +117,24 @@ static int DdeObjCmd(ClientData clientData,
Tcl_Interp *interp, int objc,
Tcl_Obj *const objv[]);
+static unsigned char *
+getByteArrayFromObj(
+ Tcl_Obj *objPtr,
+ size_t *lengthPtr
+) {
+ int length;
+
+ unsigned char *result = Tcl_GetByteArrayFromObj(objPtr, &length);
+#if TCL_MAJOR_VERSION > 8
+ if (sizeof(TCL_HASH_TYPE) > sizeof(int)) {
+ /* 64-bit and TIP #494 situation: */
+ *lengthPtr = *(TCL_HASH_TYPE *) objPtr->internalRep.twoPtrValue.ptr1;
+ } else
+#endif
+ /* 32-bit or without TIP #494 */
+ *lengthPtr = (size_t) (unsigned) length;
+ return result;
+}
DLLEXPORT int Dde_Init(Tcl_Interp *interp);
DLLEXPORT int Dde_SafeInit(Tcl_Interp *interp);
@@ -1278,7 +1297,7 @@ DdeObjCmd(
};
int index, i, argIndex;
- int length;
+ size_t length;
int flags = 0, result = TCL_OK, firstArg = 0;
HSZ ddeService = NULL, ddeTopic = NULL, ddeItem = NULL, ddeCookie = NULL;
HDDEDATA ddeData = NULL, ddeItemData = NULL, ddeReturn;
@@ -1488,14 +1507,14 @@ DdeObjCmd(
break;
case DDE_EXECUTE: {
- int dataLength;
+ size_t dataLength;
const void *dataString;
Tcl_DString dsBuf;
Tcl_DStringInit(&dsBuf);
if (flags & DDE_FLAG_BINARY) {
dataString =
- Tcl_GetByteArrayFromObj(objv[firstArg + 2], &dataLength);
+ getByteArrayFromObj(objv[firstArg + 2], &dataLength);
} else {
const char *src;
@@ -1632,7 +1651,7 @@ DdeObjCmd(
Tcl_DStringInit(&dsBuf);
if (flags & DDE_FLAG_BINARY) {
dataString = (BYTE *)
- Tcl_GetByteArrayFromObj(objv[firstArg + 3], &length);
+ getByteArrayFromObj(objv[firstArg + 3], &length);
} else {
const char *data =
Tcl_GetString(objv[firstArg + 3]);