wininet: Moved WORKREQ_SENDCALLBACK out of WORKREQUEST.

oldstable
Jacek Caban 2013-01-29 12:04:28 +01:00 committed by Alexandre Julliard
parent 7ca22d701d
commit 195ea90f3b
2 changed files with 25 additions and 30 deletions

View File

@ -427,14 +427,6 @@ struct WORKREQ_FTPFINDNEXTW
LPWIN32_FIND_DATAW lpFindFileData;
};
struct WORKREQ_SENDCALLBACK
{
DWORD_PTR dwContext;
DWORD dwInternetStatus;
LPVOID lpvStatusInfo;
DWORD dwStatusInfoLength;
};
typedef struct WORKREQ task_header_t;
typedef void (*async_task_proc_t)(task_header_t*);
@ -455,7 +447,6 @@ typedef struct WORKREQ
struct WORKREQ_FTPREMOVEDIRECTORYW FtpRemoveDirectoryW;
struct WORKREQ_FTPRENAMEFILEW FtpRenameFileW;
struct WORKREQ_FTPFINDNEXTW FtpFindNextW;
struct WORKREQ_SENDCALLBACK SendCallback;
} u;
} WORKREQUEST, *LPWORKREQUEST;

View File

@ -356,18 +356,24 @@ VOID INTERNET_SendCallback(object_header_t *hdr, DWORD_PTR dwContext,
heap_free(lpvNewInfo);
}
static void SendAsyncCallbackProc(WORKREQUEST *workRequest)
typedef struct {
task_header_t hdr;
DWORD_PTR context;
DWORD status;
LPVOID status_info;
DWORD status_info_len;
} send_callback_task_t;
static void SendAsyncCallbackProc(task_header_t *hdr)
{
struct WORKREQ_SENDCALLBACK const *req = &workRequest->u.SendCallback;
send_callback_task_t *task = (send_callback_task_t*)hdr;
TRACE("%p\n", workRequest->hdr);
TRACE("%p\n", task->hdr.hdr);
INTERNET_SendCallback(workRequest->hdr,
req->dwContext, req->dwInternetStatus, req->lpvStatusInfo,
req->dwStatusInfoLength);
INTERNET_SendCallback(task->hdr.hdr, task->context, task->status, task->status_info, task->status_info_len);
/* And frees the copy of the status info */
heap_free(req->lpvStatusInfo);
heap_free(task->status_info);
}
void SendAsyncCallback(object_header_t *hdr, DWORD_PTR dwContext,
@ -385,24 +391,22 @@ void SendAsyncCallback(object_header_t *hdr, DWORD_PTR dwContext,
if (hdr->dwFlags & INTERNET_FLAG_ASYNC)
{
WORKREQUEST *task;
struct WORKREQ_SENDCALLBACK *req;
void *lpvStatusInfo_copy = lpvStatusInfo;
send_callback_task_t *task;
void *lpvStatusInfo_copy = lpvStatusInfo;
if (lpvStatusInfo)
{
lpvStatusInfo_copy = heap_alloc(dwStatusInfoLength);
memcpy(lpvStatusInfo_copy, lpvStatusInfo, dwStatusInfoLength);
}
if (lpvStatusInfo)
{
lpvStatusInfo_copy = heap_alloc(dwStatusInfoLength);
memcpy(lpvStatusInfo_copy, lpvStatusInfo, dwStatusInfoLength);
}
task = alloc_async_task(hdr, SendAsyncCallbackProc, sizeof(*task));
req = &task->u.SendCallback;
req->dwContext = dwContext;
req->dwInternetStatus = dwInternetStatus;
req->lpvStatusInfo = lpvStatusInfo_copy;
req->dwStatusInfoLength = dwStatusInfoLength;
task->context = dwContext;
task->status = dwInternetStatus;
task->status_info = lpvStatusInfo_copy;
task->status_info_len = dwStatusInfoLength;
INTERNET_AsyncCall(task);
INTERNET_AsyncCall(&task->hdr);
}
else
INTERNET_SendCallback(hdr, dwContext, dwInternetStatus,