"Ge van Geldorp" ggeldorp@vmware.com writes:
@@ -417,18 +417,23 @@ static HRESULT DataObjectImpl_CreateComplex(LPDATAOBJECT *lplpdataobj) InitFormatEtc(obj->fmtetc[1], cf_stream, TYMED_ISTREAM); InitFormatEtc(obj->fmtetc[2], cf_storage, TYMED_ISTORAGE); InitFormatEtc(obj->fmtetc[3], cf_another, TYMED_ISTORAGE|TYMED_ISTREAM|TYMED_HGLOBAL);
- memset(&dm, 0, sizeof(dm));
- dm.dmSize = sizeof(dm);
- dm.dmDriverExtra = 0;
- lstrcpyW(dm.dmDeviceName, device_name);
- obj->fmtetc[3].ptd = HeapAlloc(GetProcessHeap(), 0, FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra);
- obj->fmtetc[3].ptd->tdSize = FIELD_OFFSET(DVTARGETDEVICE, tdData) + sizeof(device_name) + dm.dmSize + dm.dmDriverExtra;
- obj->fmtetc[3].ptd->tdDriverNameOffset = FIELD_OFFSET(DVTARGETDEVICE, tdData);
- obj->fmtetc[3].ptd->tdDeviceNameOffset = 0;
- obj->fmtetc[3].ptd->tdPortNameOffset = 0;
- obj->fmtetc[3].ptd->tdExtDevmodeOffset = obj->fmtetc[3].ptd->tdDriverNameOffset + sizeof(device_name);
- lstrcpyW((WCHAR*)obj->fmtetc[3].ptd->tdData, device_name);
- memcpy(obj->fmtetc[3].ptd->tdData + sizeof(device_name), &dm, dm.dmSize + dm.dmDriverExtra);
- if (! broken(TRUE)) /* Windows messes up ptd when doing OleGetClipboard() */
- {
If that case is really unconditionally broken on Windows it doesn't make sense to test it at all.