Dmitry Timoshkov : user: Set DDE errors in some failing cases.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Nov 16 08:01:02 CST 2006
Module: wine
Branch: master
Commit: 5ef324ee898ed6045f47c3ac0564c8dad3a355b9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=5ef324ee898ed6045f47c3ac0564c8dad3a355b9
Author: Dmitry Timoshkov <dmitry at codeweavers.com>
Date: Wed Nov 15 21:21:44 2006 +0800
user: Set DDE errors in some failing cases.
---
dlls/user/dde_client.c | 11 +++++++++--
dlls/user/dde_misc.c | 7 +++++--
dlls/user/dde_server.c | 2 ++
3 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/user/dde_client.c b/dlls/user/dde_client.c
index ecd3b3b..bcf8b33 100644
--- a/dlls/user/dde_client.c
+++ b/dlls/user/dde_client.c
@@ -1166,7 +1166,7 @@ HDDEDATA WINAPI DdeClientTransaction(LPB
pXAct = WDML_ClientQueueRequest(pConv, wFmt, hszItem);
break;
default:
- FIXME("Unknown transation\n");
+ FIXME("Unknown transaction type %04x\n", wType);
/* unknown transaction type */
pConv->instance->lastError = DMLERR_INVALIDPARAMETER;
goto theError;
@@ -1187,6 +1187,7 @@ HDDEDATA WINAPI DdeClientTransaction(LPB
pConv->wStatus &= ~ST_CONNECTED;
WDML_UnQueueTransaction(pConv, pXAct);
WDML_FreeTransaction(pConv->instance, pXAct, TRUE);
+ pConv->instance->lastError = DMLERR_POSTMSG_FAILED;
goto theError;
}
pXAct->dwTimeout = dwTimeout;
@@ -1393,10 +1394,16 @@ BOOL WINAPI DdeDisconnect(HCONV hConv)
LeaveCriticalSection(&WDML_CritSect);
if (PostMessageW(pConv->hwndServer, pXAct->ddeMsg,
(WPARAM)pConv->hwndClient, pXAct->lParam))
+ {
WDML_SyncWaitTransactionReply(hConv, 10000, pXAct, NULL);
+ ret = TRUE;
+ }
for (i = 0; i < count; i++)
EnterCriticalSection(&WDML_CritSect);
- ret = TRUE;
+
+ if (!ret)
+ pConv->instance->lastError = DMLERR_POSTMSG_FAILED;
+
WDML_FreeTransaction(pConv->instance, pXAct, TRUE);
/* still have to destroy data assosiated with conversation */
WDML_RemoveConv(pConv, WDML_CLIENT_SIDE);
diff --git a/dlls/user/dde_misc.c b/dlls/user/dde_misc.c
index 506f2df..e707c09 100644
--- a/dlls/user/dde_misc.c
+++ b/dlls/user/dde_misc.c
@@ -1924,12 +1924,14 @@ WDML_CONV* WDML_GetConv(HCONV hConv, BOO
if (checkConnected && !(pConv->wStatus & ST_CONNECTED))
{
- FIXME("found conv but ain't connected\n");
+ WARN("found conv but ain't connected\n");
+ pConv->instance->lastError = DMLERR_NO_CONV_ESTABLISHED;
return NULL;
}
if (!pConv->instance || GetCurrentThreadId() != pConv->instance->threadID)
{
- FIXME("wrong thread ID\n");
+ WARN("wrong thread ID\n");
+ pConv->instance->lastError = DMLERR_INVALIDPARAMETER; /* FIXME: check */
return NULL;
}
@@ -1980,6 +1982,7 @@ BOOL WDML_PostAck(WDML_CONV* pConv, WDM
if (!PostMessageW(to, WM_DDE_ACK, (WPARAM)from, lParam))
{
pConv->wStatus &= ~ST_CONNECTED;
+ pConv->instance->lastError = DMLERR_POSTMSG_FAILED;
FreeDDElParam(WM_DDE_ACK, lParam);
return FALSE;
}
diff --git a/dlls/user/dde_server.c b/dlls/user/dde_server.c
index e12980e..5f0f5ee 100644
--- a/dlls/user/dde_server.c
+++ b/dlls/user/dde_server.c
@@ -136,6 +136,7 @@ BOOL WINAPI DdePostAdvise(DWORD idInst,
{
ERR("post message failed\n");
pConv->wStatus &= ~ST_CONNECTED;
+ pConv->instance->lastError = DMLERR_POSTMSG_FAILED;
if (!WDML_IsAppOwned(hDdeData)) DdeFreeDataHandle(hDdeData);
GlobalFree(hItemData);
goto theError;
@@ -587,6 +588,7 @@ static WDML_QUEUE_STATE WDML_ServerHandl
ReuseDDElParam(pXAct->lParam, WM_DDE_REQUEST, WM_DDE_DATA,
(UINT_PTR)hMem, (UINT_PTR)pXAct->atom)))
{
+ pConv->instance->lastError = DMLERR_POSTMSG_FAILED;
DdeFreeDataHandle(hDdeData);
GlobalFree(hMem);
fAck = FALSE;
More information about the wine-cvs
mailing list