Jacek Caban : wininet: Added support for locking HTTP request files.
Alexandre Julliard
julliard at winehq.org
Fri Oct 4 15:08:40 CDT 2013
Module: wine
Branch: master
Commit: 47f490e1f6fa7b756289d09718ab15850c052718
URL: http://source.winehq.org/git/wine.git/?a=commit;h=47f490e1f6fa7b756289d09718ab15850c052718
Author: Jacek Caban <jacek at 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;
More information about the wine-cvs
mailing list