From 47f490e1f6fa7b756289d09718ab15850c052718 Mon Sep 17 00:00:00 2001 From: Jacek Caban <jacek@codeweavers.com> Date: Fri, 4 Oct 2013 16:53:22 +0200 Subject: [PATCH] wininet: Added support for locking HTTP request files. --- dlls/wininet/http.c | 12 ++++++++++-- dlls/wininet/internet.c | 9 +++++++++ dlls/wininet/internet.h | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index 26156ce97dd..ec746cd6db4 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c @@ -3255,8 +3255,16 @@ done: static DWORD HTTPREQ_LockRequestFile(object_header_t *hdr, req_file_t **ret) { http_request_t *req = (http_request_t*)hdr; - FIXME("(%p)\n", req); - return ERROR_NOT_SUPPORTED; + + TRACE("(%p)\n", req); + + if(!req->req_file) { + WARN("No cache file name available\n"); + return ERROR_FILE_NOT_FOUND; + } + + *ret = req_file_addref(req->req_file); + return ERROR_SUCCESS; } static const object_vtbl_t HTTPREQVtbl = { diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 5448eb41f34..954e891d7b0 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c @@ -3917,6 +3917,13 @@ DWORD create_req_file(const WCHAR *file_name, req_file_t **ret) return ERROR_NOT_ENOUGH_MEMORY; } + req_file->file_handle = CreateFileW(req_file->file_name, GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE, + NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if(req_file->file_handle == INVALID_HANDLE_VALUE) { + req_file_release(req_file); + return GetLastError(); + } + *ret = req_file; return ERROR_SUCCESS; } @@ -3928,6 +3935,8 @@ void req_file_release(req_file_t *req_file) if(!req_file->is_committed) DeleteFileW(req_file->file_name); + if(req_file->file_handle && req_file->file_handle != INVALID_HANDLE_VALUE) + CloseHandle(req_file->file_handle); heap_free(req_file->file_name); heap_free(req_file); } diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h index 2195897d4ba..3d948cf1a33 100644 --- a/dlls/wininet/internet.h +++ b/dlls/wininet/internet.h @@ -250,6 +250,7 @@ typedef enum typedef struct { LONG ref; + HANDLE file_handle; WCHAR *file_name; BOOL is_committed; } req_file_t; -- GitLab