Module: wine Branch: master Commit: be86c2976bcb42edaf51de5943af6fa51313e75a URL: http://source.winehq.org/git/wine.git/?a=commit;h=be86c2976bcb42edaf51de5943...
Author: Hans Leidekker hans@codeweavers.com Date: Tue Dec 1 17:01:35 2009 +0100
wininet: Implement InternetQueryOption(INTERNET_OPTION_DATAFILE_NAME) for ftp file objects.
---
dlls/wininet/ftp.c | 33 ++++++++++++++++++++++++++++++++- 1 files changed, 32 insertions(+), 1 deletions(-)
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c index ea5b355..48a7a95 100644 --- a/dlls/wininet/ftp.c +++ b/dlls/wininet/ftp.c @@ -1133,8 +1133,39 @@ static DWORD FTPFILE_QueryOption(object_header_t *hdr, DWORD option, void *buffe *size = sizeof(DWORD); *(DWORD*)buffer = INTERNET_HANDLE_TYPE_FTP_FILE; return ERROR_SUCCESS; - } + case INTERNET_OPTION_DATAFILE_NAME: + { + DWORD required; + ftp_file_t *file = (ftp_file_t *)hdr; + + TRACE("INTERNET_OPTION_DATAFILE_NAME\n"); + + if (!file->cache_file) + { + *size = 0; + return ERROR_INTERNET_ITEM_NOT_FOUND; + } + if (unicode) + { + required = (lstrlenW(file->cache_file) + 1) * sizeof(WCHAR); + if (*size < required) + return ERROR_INSUFFICIENT_BUFFER;
+ *size = required; + memcpy(buffer, file->cache_file, *size); + return ERROR_SUCCESS; + } + else + { + required = WideCharToMultiByte(CP_ACP, 0, file->cache_file, -1, NULL, 0, NULL, NULL); + if (required > *size) + return ERROR_INSUFFICIENT_BUFFER; + + *size = WideCharToMultiByte(CP_ACP, 0, file->cache_file, -1, buffer, *size, NULL, NULL); + return ERROR_SUCCESS; + } + } + } return INET_QueryOption(option, buffer, size, unicode); }