Module: wine Branch: master Commit: 47f490e1f6fa7b756289d09718ab15850c052718 URL: http://source.winehq.org/git/wine.git/?a=commit;h=47f490e1f6fa7b756289d09718...
Author: Jacek Caban jacek@codeweavers.com Date: Fri Oct 4 16:53:22 2013 +0200
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 26156ce..ec746cd 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 5448eb4..954e891 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 2195897..3d948cf 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;