wininet: Directly return error status from WriteFile implementations.
diff --git a/dlls/wininet/ftp.c b/dlls/wininet/ftp.c index f0c3cbd..338f743 100644 --- a/dlls/wininet/ftp.c +++ b/dlls/wininet/ftp.c
@@ -1156,7 +1156,7 @@ return FTPFILE_ReadFile(hdr, buffers->lpvBuffer, buffers->dwBufferLength, &buffers->dwBufferLength); } -static BOOL FTPFILE_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written) +static DWORD FTPFILE_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written) { ftp_file_t *lpwh = (ftp_file_t*) hdr; int res; @@ -1164,7 +1164,7 @@ res = send(lpwh->nDataSocket, buffer, size, 0); *written = res>0 ? res : 0; - return res >= 0; + return res >= 0 ? ERROR_SUCCESS : sock_get_error(errno); } static void FTP_ReceiveRequestData(ftp_file_t *file, BOOL first_notif)
diff --git a/dlls/wininet/http.c b/dlls/wininet/http.c index b23fc18..f2d09c1 100644 --- a/dlls/wininet/http.c +++ b/dlls/wininet/http.c
@@ -2489,7 +2489,7 @@ return res; } -static BOOL HTTPREQ_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written) +static DWORD HTTPREQ_WriteFile(object_header_t *hdr, const void *buffer, DWORD size, DWORD *written) { DWORD res; http_request_t *lpwhr = (http_request_t*)hdr; @@ -2500,11 +2500,9 @@ res = NETCON_send(&lpwhr->netConnection, buffer, size, 0, (LPINT)written); if (res == ERROR_SUCCESS) lpwhr->dwBytesWritten += *written; - else - SetLastError(res); INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext, INTERNET_STATUS_REQUEST_SENT, written, sizeof(DWORD)); - return res == ERROR_SUCCESS; + return res; } static void HTTPREQ_AsyncQueryDataAvailableProc(WORKREQUEST *workRequest)
diff --git a/dlls/wininet/internet.c b/dlls/wininet/internet.c index 65bb3d2..c13f44a 100644 --- a/dlls/wininet/internet.c +++ b/dlls/wininet/internet.c
@@ -1862,7 +1862,7 @@ DWORD dwNumOfBytesToWrite, LPDWORD lpdwNumOfBytesWritten) { object_header_t *lpwh; - BOOL retval = FALSE; + BOOL res; TRACE("(%p %p %d %p)\n", hFile, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten); @@ -1874,16 +1874,17 @@ } if(lpwh->vtbl->WriteFile) { - retval = lpwh->vtbl->WriteFile(lpwh, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten); + res = lpwh->vtbl->WriteFile(lpwh, lpBuffer, dwNumOfBytesToWrite, lpdwNumOfBytesWritten); }else { WARN("No Writefile method.\n"); - SetLastError(ERROR_INVALID_HANDLE); - retval = FALSE; + res = ERROR_INVALID_HANDLE; } WININET_Release( lpwh ); - return retval; + if(res != ERROR_SUCCESS) + SetLastError(res); + return res == ERROR_SUCCESS; }
diff --git a/dlls/wininet/internet.h b/dlls/wininet/internet.h index f87e719..e1044e9 100644 --- a/dlls/wininet/internet.h +++ b/dlls/wininet/internet.h
@@ -143,7 +143,7 @@ DWORD (*ReadFile)(object_header_t*,void*,DWORD,DWORD*); DWORD (*ReadFileExA)(object_header_t*,INTERNET_BUFFERSA*,DWORD,DWORD_PTR); DWORD (*ReadFileExW)(object_header_t*,INTERNET_BUFFERSW*,DWORD,DWORD_PTR); - BOOL (*WriteFile)(object_header_t*,const void*,DWORD,DWORD*); + DWORD (*WriteFile)(object_header_t*,const void*,DWORD,DWORD*); DWORD (*QueryDataAvailable)(object_header_t*,DWORD*,DWORD,DWORD_PTR); DWORD (*FindNextFileW)(object_header_t*,void*); } object_vtbl_t; @@ -443,6 +443,7 @@ BOOL NETCON_query_data_available(WININET_NETCONNECTION *connection, DWORD *available); LPCVOID NETCON_GetCert(WININET_NETCONNECTION *connection); DWORD NETCON_set_timeout(WININET_NETCONNECTION *connection, BOOL send, int value); +int sock_get_error(int); extern void URLCacheContainers_CreateDefaults(void); extern void URLCacheContainers_DeleteAll(void);
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c index ca31d0e..64513ac 100644 --- a/dlls/wininet/netconnection.c +++ b/dlls/wininet/netconnection.c
@@ -315,7 +315,7 @@ } /* translate a unix error code into a winsock one */ -static int sock_get_error( int err ) +int sock_get_error( int err ) { #if !defined(__MINGW32__) && !defined (_MSC_VER) switch (err)