Rebase against 20ff3352eb19292d47eaa8f3aecc61523ac1f1d9.

This commit is contained in:
Sebastian Lackner
2015-10-08 00:28:48 +02:00
parent fdf5bad886
commit 48c78157ae
16 changed files with 122 additions and 423 deletions

View File

@@ -244,7 +244,7 @@ for more details.*
* ~~RegOpenKeyExA, RegCloseKey and RegQueryValueExA should be hotpatchable~~
* Report correct ObjectName for NamedPipe wineserver objects
* Return STATUS_INVALID_DEVICE_REQUEST when trying to call NtReadFile on directory
* Return a dummy BIOS name in Win32_BIOS record
* ~~Return a dummy BIOS name in Win32_BIOS record~~
* Return a valid mesh in D3DXCreateTeapot ([Wine Bug #36884](https://bugs.winehq.org/show_bug.cgi?id=36884))
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
* Return correct IMediaSeeking stream positions in quartz

2
debian/changelog vendored
View File

@@ -20,6 +20,8 @@ wine-staging (1.7.53) UNRELEASED; urgency=low
(fixed upstream).
* Removed patch to add support for /passive command line option to msiexec
(fixed upstream).
* Removed patch to return a dummy BIOS name in Win32_BIOS (accepted upstream).
* Partially removed patches for ws2_32 TransmitFile (accepted upstream).
-- Sebastian Lackner <sebastian@fds-team.de> Sun, 04 Oct 2015 23:56:05 +0200
wine-staging (1.7.52) unstable; urgency=low

View File

@@ -52,7 +52,7 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "1d1487105d4d3a9133f0846d32363a0432812d0c"
echo "20ff3352eb19292d47eaa8f3aecc61523ac1f1d9"
}
# Show version information
@@ -280,7 +280,6 @@ patch_enable_all ()
enable_uxtheme_GTK_Theming="$1"
enable_version_VerQueryValue="$1"
enable_wbemdisp_ISWbemSecurity="$1"
enable_wbemprox_Bios_Name="$1"
enable_wiaservc_IEnumWIA_DEV_INFO="$1"
enable_wine_inf_Performance="$1"
enable_wine_inf_ProfileList_UserSID="$1"
@@ -936,9 +935,6 @@ patch_enable ()
wbemdisp-ISWbemSecurity)
enable_wbemdisp_ISWbemSecurity="$2"
;;
wbemprox-Bios_Name)
enable_wbemprox_Bios_Name="$2"
;;
wiaservc-IEnumWIA_DEV_INFO)
enable_wiaservc_IEnumWIA_DEV_INFO="$2"
;;
@@ -5439,18 +5435,6 @@ if test "$enable_wbemdisp_ISWbemSecurity" -eq 1; then
) >> "$patchlist"
fi
# Patchset wbemprox-Bios_Name
# |
# | Modified files:
# | * dlls/wbemprox/builtin.c
# |
if test "$enable_wbemprox_Bios_Name" -eq 1; then
patch_apply wbemprox-Bios_Name/0001-wbemprox-Set-bios-name-in-Win32_BIOS.patch
(
echo '+ { "Michael Müller", "wbemprox: Set bios name in Win32_BIOS.", 1 },';
) >> "$patchlist"
fi
# Patchset wiaservc-IEnumWIA_DEV_INFO
# |
# | This patchset fixes the following Wine bugs:
@@ -6474,16 +6458,12 @@ fi
# | * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c, include/winsock.h, server/protocol.def, server/sock.c
# |
if test "$enable_ws2_32_TransmitFile" -eq 1; then
patch_apply ws2_32-TransmitFile/0001-ws2_32-Add-stub-for-TransmitFile.patch
patch_apply ws2_32-TransmitFile/0002-ws2_32-Check-for-invalid-parameters-in-TransmitFile.patch
patch_apply ws2_32-TransmitFile/0003-ws2_32-Implement-a-basic-synchronous-TransmitFile.-r.patch
patch_apply ws2_32-TransmitFile/0004-ws2_32-Add-support-for-TransmitFile-headers-and-foot.patch
patch_apply ws2_32-TransmitFile/0005-ws2_32-Add-asynchronous-support-for-TransmitFile.-re.patch
patch_apply ws2_32-TransmitFile/0006-ws2_32-Add-support-for-TF_DISCONNECT-to-TransmitFile.patch
patch_apply ws2_32-TransmitFile/0007-ws2_32-Add-support-for-TF_REUSE_SOCKET-to-TransmitFi.patch
patch_apply ws2_32-TransmitFile/0001-ws2_32-Implement-a-basic-synchronous-TransmitFile.-r.patch
patch_apply ws2_32-TransmitFile/0002-ws2_32-Add-support-for-TransmitFile-headers-and-foot.patch
patch_apply ws2_32-TransmitFile/0003-ws2_32-Add-asynchronous-support-for-TransmitFile.-re.patch
patch_apply ws2_32-TransmitFile/0004-ws2_32-Add-support-for-TF_DISCONNECT-to-TransmitFile.patch
patch_apply ws2_32-TransmitFile/0005-ws2_32-Add-support-for-TF_REUSE_SOCKET-to-TransmitFi.patch
(
echo '+ { "Erich E. Hoover", "ws2_32: Add stub for TransmitFile.", 1 },';
echo '+ { "Erich E. Hoover", "ws2_32: Check for invalid parameters in TransmitFile.", 1 },';
echo '+ { "Erich E. Hoover", "ws2_32: Implement a basic synchronous TransmitFile.", 2 },';
echo '+ { "Erich E. Hoover", "ws2_32: Add support for TransmitFile headers and footers.", 1 },';
echo '+ { "Erich E. Hoover", "ws2_32: Add asynchronous support for TransmitFile.", 2 },';

View File

@@ -1,52 +0,0 @@
From d72d7f4a70a9715458b4cbd60c5a951e74770448 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 27 Aug 2015 01:55:42 +0200
Subject: wbemprox: Set bios name in Win32_BIOS.
---
dlls/wbemprox/builtin.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/wbemprox/builtin.c b/dlls/wbemprox/builtin.c
index 1c960eb..8f51453 100644
--- a/dlls/wbemprox/builtin.c
+++ b/dlls/wbemprox/builtin.c
@@ -377,7 +377,8 @@ static const struct column col_bios[] =
{ prop_releasedateW, CIM_DATETIME },
{ prop_serialnumberW, CIM_STRING },
{ prop_smbiosbiosversionW, CIM_STRING },
- { prop_versionW, CIM_STRING|COL_FLAG_KEY }
+ { prop_versionW, CIM_STRING|COL_FLAG_KEY },
+ { prop_nameW, CIM_STRING }
};
static const struct column col_cdromdrive[] =
{
@@ -666,6 +667,8 @@ static const WCHAR bios_smbiosbiosversionW[] =
{'W','i','n','e',0};
static const WCHAR bios_versionW[] =
{'W','I','N','E',' ',' ',' ','-',' ','1',0};
+static const WCHAR bios_nameW[] =
+ {'W','I','N','E',' ','B','I','O','S',0};
static const WCHAR cdromdrive_mediatypeW[] =
{'C','D','-','R','O','M',0};
static const WCHAR cdromdrive_nameW[] =
@@ -765,6 +768,7 @@ struct record_bios
const WCHAR *serialnumber;
const WCHAR *smbiosbiosversion;
const WCHAR *version;
+ const WCHAR *name;
};
struct record_cdromdrive
{
@@ -1041,7 +1045,7 @@ static const struct record_baseboard data_baseboard[] =
static const struct record_bios data_bios[] =
{
{ bios_descriptionW, bios_descriptionW, bios_manufacturerW, bios_releasedateW, bios_serialnumberW,
- bios_smbiosbiosversionW, bios_versionW }
+ bios_smbiosbiosversionW, bios_versionW, bios_nameW }
};
static const struct record_computersystemproduct data_compsysproduct[] =
{
--
2.5.0

View File

@@ -1 +0,0 @@
Fixes: Return a dummy BIOS name in Win32_BIOS record

View File

@@ -1,4 +1,4 @@
From e714feefbc666c34518c908acbc630e9a9f0b48e Mon Sep 17 00:00:00 2001
From e45dcebaee1ba3235293c0f84550effd5b445d94 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Wed, 18 Sep 2013 22:30:57 +0200
Subject: wined3d: Introduce helper functions for mapping volumes.
@@ -8,10 +8,10 @@ Subject: wined3d: Introduce helper functions for mapping volumes.
1 file changed, 96 insertions(+), 61 deletions(-)
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index f82347d..17502ee 100644
index 5d32043..b86b227 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -480,12 +480,67 @@ static BOOL wined3d_volume_check_box_dimensions(const struct wined3d_volume *vol
@@ -468,12 +468,67 @@ static BOOL wined3d_volume_check_box_dimensions(const struct wined3d_volume *vol
return TRUE;
}
@@ -80,7 +80,7 @@ index f82347d..17502ee 100644
BYTE *base_memory;
const struct wined3d_format *format = volume->resource.format;
const unsigned int fmt_flags = volume->container->resource.format_flags;
@@ -518,58 +573,22 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
@@ -506,58 +561,22 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
flags = wined3d_resource_sanitize_map_flags(&volume->resource, flags);
@@ -150,8 +150,8 @@ index f82347d..17502ee 100644
TRACE("Base memory pointer %p.\n", base_memory);
@@ -627,8 +646,34 @@ struct wined3d_volume * CDECL wined3d_volume_from_resource(struct wined3d_resour
return volume_from_resource(resource);
@@ -610,8 +629,34 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
return WINED3D_OK;
}
+static void wined3d_volume_release_map_ptr(const struct wined3d_volume *volume,
@@ -185,7 +185,7 @@ index f82347d..17502ee 100644
TRACE("volume %p.\n", volume);
if (!volume->resource.map_count)
@@ -637,19 +682,9 @@ HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
@@ -620,19 +665,9 @@ HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
return WINED3DERR_INVALIDCALL;
}
@@ -209,5 +209,5 @@ index f82347d..17502ee 100644
volume->resource.map_count--;
--
2.4.2
2.6.0

View File

@@ -1,4 +1,4 @@
From 8d5263c4675ba0456a486cba995fa6e41f056aa2 Mon Sep 17 00:00:00 2001
From 512672b57e21aab944955cf738f8285d91369604 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Thu, 16 Jan 2014 22:07:17 +0100
Subject: wined3d: Move volume PBO infrastructure into the resource.
@@ -10,7 +10,7 @@ Subject: wined3d: Move volume PBO infrastructure into the resource.
3 files changed, 83 insertions(+), 80 deletions(-)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index 9ec6a6a..c652c99 100644
index 39df397..5f0a98e 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -373,7 +373,7 @@ GLbitfield wined3d_resource_gl_map_flags(DWORD d3d_flags)
@@ -89,7 +89,7 @@ index 9ec6a6a..c652c99 100644
+ }
+}
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 17502ee..ea54b97 100644
index b86b227..d196b0e 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -218,7 +218,7 @@ static void wined3d_volume_load_location(struct wined3d_resource *resource,
@@ -173,7 +173,7 @@ index 17502ee..ea54b97 100644
{
/* Should not happen because only dynamic default pool volumes
* have a buffer, and those are not evicted by device_evit_managed_resources
@@ -498,44 +498,6 @@ static BOOL wined3d_volume_prepare_map_memory(struct wined3d_volume *volume, str
@@ -486,44 +486,6 @@ static BOOL wined3d_volume_prepare_map_memory(struct wined3d_volume *volume, str
}
}
@@ -218,7 +218,7 @@ index 17502ee..ea54b97 100644
HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags)
{
@@ -587,7 +549,7 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
@@ -575,7 +537,7 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
else
wined3d_resource_load_location(&volume->resource, context, volume->resource.map_binding);
@@ -227,8 +227,8 @@ index 17502ee..ea54b97 100644
context_release(context);
TRACE("Base memory pointer %p.\n", base_memory);
@@ -646,30 +608,6 @@ struct wined3d_volume * CDECL wined3d_volume_from_resource(struct wined3d_resour
return volume_from_resource(resource);
@@ -629,30 +591,6 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
return WINED3D_OK;
}
-static void wined3d_volume_release_map_ptr(const struct wined3d_volume *volume,
@@ -258,7 +258,7 @@ index 17502ee..ea54b97 100644
HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
{
struct wined3d_device *device = volume->resource.device;
@@ -683,7 +621,7 @@ HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
@@ -666,7 +604,7 @@ HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
}
context = context_acquire(device, NULL);
@@ -268,10 +268,10 @@ index 17502ee..ea54b97 100644
volume->resource.map_count--;
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index ece63d0..1710b7c 100644
index eeed387..efd865b 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2168,6 +2168,7 @@ struct wined3d_resource
@@ -2174,6 +2174,7 @@ struct wined3d_resource
DWORD priority;
void *heap_memory, *user_memory, *bitmap_data;
UINT custom_row_pitch, custom_slice_pitch;
@@ -279,7 +279,7 @@ index ece63d0..1710b7c 100644
struct list resource_list_entry;
DWORD locations;
@@ -2197,14 +2198,17 @@ void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
@@ -2203,14 +2204,17 @@ void resource_unload(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
DWORD wined3d_resource_access_from_location(DWORD location) DECLSPEC_HIDDEN;
BOOL wined3d_resource_allocate_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void wined3d_resource_free_sysmem(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
@@ -298,7 +298,7 @@ index ece63d0..1710b7c 100644
DWORD wined3d_resource_sanitize_map_flags(const struct wined3d_resource *resource, DWORD flags) DECLSPEC_HIDDEN;
void wined3d_resource_update_draw_binding(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void wined3d_resource_validate_location(struct wined3d_resource *resource, DWORD location) DECLSPEC_HIDDEN;
@@ -2328,7 +2332,6 @@ struct wined3d_volume
@@ -2337,7 +2341,6 @@ struct wined3d_volume
DWORD flags;
GLint texture_level;
DWORD download_count;
@@ -307,5 +307,5 @@ index ece63d0..1710b7c 100644
static inline struct wined3d_volume *volume_from_resource(struct wined3d_resource *resource)
--
2.5.1
2.6.0

View File

@@ -1,4 +1,4 @@
From 6ec55bf77d18523e178ca2e35553693c754827d5 Mon Sep 17 00:00:00 2001
From 2faccff39a75dfddd6aa22f3211d6ca12a4b3555 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Stefan=20D=C3=B6singer?= <stefan@codeweavers.com>
Date: Thu, 19 Sep 2013 17:51:38 +0200
Subject: wined3d: Move most of volume_map to resource.c
@@ -13,7 +13,7 @@ boundary check behaviours.
3 files changed, 124 insertions(+), 95 deletions(-)
diff --git a/dlls/wined3d/resource.c b/dlls/wined3d/resource.c
index ab83637..8ab137d 100644
index 2e06f21..e5af445 100644
--- a/dlls/wined3d/resource.c
+++ b/dlls/wined3d/resource.c
@@ -765,3 +765,118 @@ BOOL wined3d_resource_check_block_align(const struct wined3d_resource *resource,
@@ -136,10 +136,10 @@ index ab83637..8ab137d 100644
+ return WINED3D_OK;
+}
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index 6b17044..983ae90 100644
index 0827c74..0a1df4b 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -404,26 +404,16 @@ static BOOL wined3d_volume_check_box_dimensions(const struct wined3d_volume *vol
@@ -392,26 +392,16 @@ static BOOL wined3d_volume_check_box_dimensions(const struct wined3d_volume *vol
HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
struct wined3d_map_desc *map_desc, const struct wined3d_box *box, DWORD flags)
{
@@ -167,7 +167,7 @@ index 6b17044..983ae90 100644
if (!wined3d_volume_check_box_dimensions(volume, box))
{
WARN("Map box is invalid.\n");
@@ -436,74 +426,11 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
@@ -424,95 +414,16 @@ HRESULT CDECL wined3d_volume_map(struct wined3d_volume *volume,
return WINED3DERR_INVALIDCALL;
}
@@ -245,9 +245,6 @@ index 6b17044..983ae90 100644
+ return hr;
}
struct wined3d_volume * CDECL wined3d_volume_from_resource(struct wined3d_resource *resource)
@@ -513,23 +440,7 @@ struct wined3d_volume * CDECL wined3d_volume_from_resource(struct wined3d_resour
HRESULT CDECL wined3d_volume_unmap(struct wined3d_volume *volume)
{
- struct wined3d_device *device = volume->resource.device;
@@ -272,10 +269,10 @@ index 6b17044..983ae90 100644
static ULONG volume_resource_incref(struct wined3d_resource *resource)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 3dff204..db8126f 100644
index 91e6db8..c230cb5 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -2212,12 +2212,15 @@ void wined3d_resource_invalidate_location(struct wined3d_resource *resource, DWO
@@ -2218,12 +2218,15 @@ void wined3d_resource_invalidate_location(struct wined3d_resource *resource, DWO
BOOL wined3d_resource_is_offscreen(struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void wined3d_resource_load_location(struct wined3d_resource *resource,
struct wined3d_context *context, DWORD location) DECLSPEC_HIDDEN;
@@ -292,5 +289,5 @@ index 3dff204..db8126f 100644
void wined3d_resource_validate_location(struct wined3d_resource *resource, DWORD location) DECLSPEC_HIDDEN;
--
2.5.1
2.6.0

File diff suppressed because it is too large Load Diff

View File

@@ -1,46 +0,0 @@
From 73dbe41e80fa7ed3aeb3c3f0ee91fe2023b2a356 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 17:52:50 -0700
Subject: ws2_32: Add stub for TransmitFile.
---
dlls/ws2_32/socket.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 760e184..86efbe6 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2538,6 +2538,19 @@ static BOOL WINAPI WS2_AcceptEx(SOCKET listener, SOCKET acceptor, PVOID dest, DW
}
/***********************************************************************
+ * TransmitFile
+ */
+static BOOL WINAPI WS2_TransmitFile( SOCKET s, HANDLE h, DWORD file_bytes, DWORD bytes_per_send,
+ LPOVERLAPPED overlapped, LPTRANSMIT_FILE_BUFFERS buffers,
+ DWORD flags )
+{
+ FIXME("(%lx, %p, %d, %d, %p, %p, %d): stub !\n", s, h, file_bytes, bytes_per_send, overlapped,
+ buffers, flags );
+ WSASetLastError( WSAEOPNOTSUPP );
+ return FALSE;
+}
+
+/***********************************************************************
* GetAcceptExSockaddrs
*/
static void WINAPI WS2_GetAcceptExSockaddrs(PVOID buffer, DWORD data_size, DWORD local_size, DWORD remote_size,
@@ -4177,7 +4190,8 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
}
else if ( IsEqualGUID(&transmitfile_guid, in_buff) )
{
- FIXME("SIO_GET_EXTENSION_FUNCTION_POINTER: unimplemented TransmitFile\n");
+ *(LPFN_TRANSMITFILE *)out_buff = WS2_TransmitFile;
+ break;
}
else if ( IsEqualGUID(&transmitpackets_guid, in_buff) )
{
--
2.3.0

View File

@@ -1,168 +0,0 @@
From 9e8e6d6b4c14478ac28da693de9bd1a51f60d3eb Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Fri, 17 Jan 2014 12:35:57 -0700
Subject: ws2_32: Check for invalid parameters in TransmitFile.
---
dlls/ws2_32/socket.c | 21 ++++++++++
dlls/ws2_32/tests/sock.c | 103 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 124 insertions(+)
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 86efbe6..96335cd 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -2544,8 +2544,29 @@ static BOOL WINAPI WS2_TransmitFile( SOCKET s, HANDLE h, DWORD file_bytes, DWORD
LPOVERLAPPED overlapped, LPTRANSMIT_FILE_BUFFERS buffers,
DWORD flags )
{
+ union generic_unix_sockaddr uaddr;
+ unsigned int uaddrlen = sizeof(uaddr);
+ int fd;
+
FIXME("(%lx, %p, %d, %d, %p, %p, %d): stub !\n", s, h, file_bytes, bytes_per_send, overlapped,
buffers, flags );
+
+ fd = get_sock_fd( s, 0, NULL );
+ if (fd == -1)
+ {
+ WSASetLastError( WSAENOTSOCK );
+ return FALSE;
+ }
+ if (getpeername( fd, &uaddr.addr, &uaddrlen ) != 0)
+ {
+ release_sock_fd( s, fd );
+ WSASetLastError( WSAENOTCONN );
+ return FALSE;
+ }
+ release_sock_fd( s, fd );
+ if (flags)
+ FIXME("Flags are not currently supported (0x%x).\n", flags);
+
WSASetLastError( WSAEOPNOTSUPP );
return FALSE;
}
diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c
index 7155a09..0991e54 100644
--- a/dlls/ws2_32/tests/sock.c
+++ b/dlls/ws2_32/tests/sock.c
@@ -6906,6 +6906,108 @@ end:
closesocket(connector2);
}
+static void test_TransmitFile(void)
+{
+ GUID transmitFileGuid = WSAID_TRANSMITFILE;
+ LPFN_TRANSMITFILE pTransmitFile = NULL;
+ HANDLE file = INVALID_HANDLE_VALUE;
+ char system_ini_path[MAX_PATH];
+ struct sockaddr_in bindAddress;
+ SOCKET client, server, dest;
+ DWORD num_bytes, err;
+ int iret, len;
+ BOOL bret;
+
+ /* Setup sockets for testing TransmitFile */
+ client = socket(AF_INET, SOCK_STREAM, 0);
+ server = socket(AF_INET, SOCK_STREAM, 0);
+ if (client == INVALID_SOCKET || server == INVALID_SOCKET)
+ {
+ skip("could not create acceptor socket, error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+ iret = WSAIoctl(client, SIO_GET_EXTENSION_FUNCTION_POINTER, &transmitFileGuid, sizeof(transmitFileGuid),
+ &pTransmitFile, sizeof(pTransmitFile), &num_bytes, NULL, NULL);
+ if (iret)
+ {
+ skip("WSAIoctl failed to get TransmitFile with ret %d + errno %d\n", iret, WSAGetLastError());
+ goto cleanup;
+ }
+ GetSystemWindowsDirectoryA(system_ini_path, MAX_PATH );
+ strcat(system_ini_path, "\\system.ini");
+ file = CreateFileA(system_ini_path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_ALWAYS, 0x0, NULL);
+ if (file == INVALID_HANDLE_VALUE)
+ {
+ skip("Unable to open a file to transmit.\n");
+ goto cleanup;
+ }
+
+ /* Test TransmitFile with an invalid socket */
+ bret = pTransmitFile(INVALID_SOCKET, file, 0, 0, NULL, NULL, 0);
+ err = WSAGetLastError();
+ ok(!bret, "TransmitFile succeeded unexpectedly.\n");
+ ok(err == WSAENOTSOCK, "TransmitFile triggered unexpected errno (%d != %d)\n", err, WSAENOTSOCK);
+
+ /* Test a bogus TransmitFile without a connected socket */
+ bret = pTransmitFile(client, NULL, 0, 0, NULL, NULL, TF_REUSE_SOCKET);
+ err = WSAGetLastError();
+ ok(!bret, "TransmitFile succeeded unexpectedly.\n");
+ ok(err == WSAENOTCONN, "TransmitFile triggered unexpected errno (%d != %d)\n", err, WSAENOTCONN);
+
+ /* Setup a properly connected socket for transfers */
+ memset(&bindAddress, 0, sizeof(bindAddress));
+ bindAddress.sin_family = AF_INET;
+ bindAddress.sin_port = htons(9375);
+ bindAddress.sin_addr.s_addr = inet_addr("127.0.0.1");
+ iret = bind(server, (struct sockaddr*)&bindAddress, sizeof(bindAddress));
+ if (iret != 0)
+ {
+ skip("failed to bind(), error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+ iret = listen(server, 1);
+ if (iret != 0)
+ {
+ skip("failed to listen(), error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+ iret = connect(client, (struct sockaddr*)&bindAddress, sizeof(bindAddress));
+ if (iret != 0)
+ {
+ skip("failed to connect(), error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+ len = sizeof(bindAddress);
+ dest = accept(server, (struct sockaddr*)&bindAddress, &len);
+ if (dest == INVALID_SOCKET)
+ {
+ skip("failed to accept(), error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+ if (set_blocking(dest, FALSE))
+ {
+ skip("couldn't make socket non-blocking, error %d\n", WSAGetLastError());
+ goto cleanup;
+ }
+
+ /* Test TransmitFile with no possible buffer */
+ bret = pTransmitFile(client, NULL, 0, 0, NULL, NULL, 0);
+ todo_wine ok(bret, "TransmitFile failed unexpectedly.\n");
+
+ /* Test TransmitFile with a UDP datagram socket */
+ closesocket(client);
+ client = socket(AF_INET, SOCK_DGRAM, 0);
+ bret = pTransmitFile(client, NULL, 0, 0, NULL, NULL, 0);
+ err = WSAGetLastError();
+ ok(!bret, "TransmitFile succeeded unexpectedly.\n");
+ ok(err == WSAENOTCONN, "TransmitFile triggered unexpected errno (%d != %d)\n", err, WSAENOTCONN);
+
+cleanup:
+ CloseHandle(file);
+ closesocket(client);
+ closesocket(server);
+}
+
static void test_getpeername(void)
{
SOCKET sock;
@@ -8266,6 +8368,7 @@ START_TEST( sock )
test_events(1);
test_ipv6only();
+ test_TransmitFile();
test_GetAddrInfoW();
test_getaddrinfo();
test_AcceptEx();
--
2.3.0