Wine-devel
Threads by month
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2002 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2001 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
August 2021
- 78 participants
- 929 discussions
19 Aug '21
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/ws2_32/async.c | 26 +++----
dlls/ws2_32/protocol.c | 141 +++++++++++++++++------------------
dlls/ws2_32/socket.c | 72 +++++++++---------
dlls/ws2_32/ws2_32_private.h | 2 +-
4 files changed, 116 insertions(+), 125 deletions(-)
diff --git a/dlls/ws2_32/async.c b/dlls/ws2_32/async.c
index 5eecddda062..ffa61149094 100644
--- a/dlls/ws2_32/async.c
+++ b/dlls/ws2_32/async.c
@@ -34,15 +34,7 @@
* whole stuff did not work anyway to other changes).
*/
-#include <stdarg.h>
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winsock2.h"
-#include "ws2spi.h"
-
-#include "wine/debug.h"
+#include "ws2_32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(winsock);
@@ -253,7 +245,7 @@ static void WINAPI async_worker( TP_CALLBACK_INSTANCE *instance, void *context )
struct async_query_header *query = context;
LPARAM lparam = query->func( query );
PostMessageW( query->hWnd, query->uMsg, (WPARAM)query->handle, lparam );
- HeapFree( GetProcessHeap(), 0, query );
+ free( query );
}
@@ -283,7 +275,7 @@ static HANDLE run_query( HWND hWnd, UINT uMsg, LPARAM (*func)(struct async_query
if (!TrySubmitThreadpoolCallback( async_worker, query, NULL ))
{
SetLastError( WSAEWOULDBLOCK );
- HeapFree( GetProcessHeap(), 0, query );
+ free( query );
return 0;
}
return UlongToHandle( handle );
@@ -300,7 +292,7 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
TRACE("hwnd %p, msg %04x, addr %p[%i]\n", hWnd, uMsg, addr, len );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -323,7 +315,7 @@ HANDLE WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, host %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -344,7 +336,7 @@ HANDLE WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, proto %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -365,7 +357,7 @@ HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg, INT number,
TRACE("hwnd %p, msg %04x, num %i\n", hWnd, uMsg, number );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) )))
+ if (!(aq = malloc( sizeof(*aq) )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -386,7 +378,7 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, name %s, proto %s\n", hWnd, uMsg, debugstr_a(name), debugstr_a(proto));
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len1 + len2 )))
+ if (!(aq = malloc( sizeof(*aq) + len1 + len2 )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -417,7 +409,7 @@ HANDLE WINAPI WSAAsyncGetServByPort(HWND hWnd, UINT uMsg, INT port,
TRACE("hwnd %p, msg %04x, port %i, proto %s\n", hWnd, uMsg, port, debugstr_a(proto));
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
diff --git a/dlls/ws2_32/protocol.c b/dlls/ws2_32/protocol.c
index 733ef102eea..93464232d32 100644
--- a/dlls/ws2_32/protocol.c
+++ b/dlls/ws2_32/protocol.c
@@ -38,10 +38,10 @@ static char *get_fqdn(void)
GetComputerNameExA( ComputerNamePhysicalDnsFullyQualified, NULL, &size );
if (GetLastError() != ERROR_MORE_DATA) return NULL;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, size ))) return NULL;
+ if (!(ret = malloc( size ))) return NULL;
if (!GetComputerNameExA( ComputerNamePhysicalDnsFullyQualified, ret, &size ))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
return ret;
@@ -57,14 +57,14 @@ static int do_getaddrinfo( const char *node, const char *service,
for (;;)
{
- if (!(params.info = HeapAlloc( GetProcessHeap(), 0, size )))
+ if (!(params.info = malloc( size )))
return WSA_NOT_ENOUGH_MEMORY;
if (!(ret = WS_CALL( getaddrinfo, ¶ms )))
{
*info = params.info;
return ret;
}
- HeapFree( GetProcessHeap(), 0, params.info );
+ free( params.info );
if (ret != ERROR_INSUFFICIENT_BUFFER) return ret;
}
}
@@ -103,8 +103,8 @@ int WINAPI getaddrinfo( const char *node, const char *service,
if (node[0] == '[' && (close_bracket = strchr(node + 1, ']')))
{
- nodev6 = HeapAlloc( GetProcessHeap(), 0, close_bracket - node );
- if (!nodev6) return WSA_NOT_ENOUGH_MEMORY;
+ if (!(nodev6 = malloc( close_bracket - node )))
+ return WSA_NOT_ENOUGH_MEMORY;
lstrcpynA( nodev6, node + 1, close_bracket - node );
node = nodev6;
}
@@ -117,7 +117,7 @@ int WINAPI getaddrinfo( const char *node, const char *service,
{
if (!fqdn && !(fqdn = get_fqdn()))
{
- HeapFree( GetProcessHeap(), 0, nodev6 );
+ free( nodev6 );
return WSA_NOT_ENOUGH_MEMORY;
}
if (!strcmp( fqdn, node ) || (!strncmp( fqdn, node, strlen( node ) ) && fqdn[strlen( node )] == '.'))
@@ -136,8 +136,8 @@ int WINAPI getaddrinfo( const char *node, const char *service,
}
}
- HeapFree( GetProcessHeap(), 0, fqdn );
- HeapFree( GetProcessHeap(), 0, nodev6 );
+ free( fqdn );
+ free( nodev6 );
if (!ret && TRACE_ON(winsock))
{
@@ -160,7 +160,7 @@ static ADDRINFOEXW *addrinfo_AtoW( const struct addrinfo *ai )
{
ADDRINFOEXW *ret;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, sizeof(ADDRINFOEXW) ))) return NULL;
+ if (!(ret = malloc( sizeof(ADDRINFOEXW) ))) return NULL;
ret->ai_flags = ai->ai_flags;
ret->ai_family = ai->ai_family;
ret->ai_socktype = ai->ai_socktype;
@@ -175,19 +175,19 @@ static ADDRINFOEXW *addrinfo_AtoW( const struct addrinfo *ai )
if (ai->ai_canonname)
{
int len = MultiByteToWideChar( CP_ACP, 0, ai->ai_canonname, -1, NULL, 0 );
- if (!(ret->ai_canonname = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
+ if (!(ret->ai_canonname = malloc( len * sizeof(WCHAR) )))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
MultiByteToWideChar( CP_ACP, 0, ai->ai_canonname, -1, ret->ai_canonname, len );
}
if (ai->ai_addr)
{
- if (!(ret->ai_addr = HeapAlloc( GetProcessHeap(), 0, ai->ai_addrlen )))
+ if (!(ret->ai_addr = malloc( ai->ai_addrlen )))
{
- HeapFree( GetProcessHeap(), 0, ret->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret->ai_canonname );
+ free( ret );
return NULL;
}
memcpy( ret->ai_addr, ai->ai_addr, ai->ai_addrlen );
@@ -217,7 +217,7 @@ static struct addrinfo *addrinfo_WtoA( const struct addrinfoW *ai )
{
struct addrinfo *ret;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, sizeof(struct addrinfo) ))) return NULL;
+ if (!(ret = malloc( sizeof(struct addrinfo) ))) return NULL;
ret->ai_flags = ai->ai_flags;
ret->ai_family = ai->ai_family;
ret->ai_socktype = ai->ai_socktype;
@@ -229,19 +229,19 @@ static struct addrinfo *addrinfo_WtoA( const struct addrinfoW *ai )
if (ai->ai_canonname)
{
int len = WideCharToMultiByte( CP_ACP, 0, ai->ai_canonname, -1, NULL, 0, NULL, NULL );
- if (!(ret->ai_canonname = HeapAlloc( GetProcessHeap(), 0, len )))
+ if (!(ret->ai_canonname = malloc( len )))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
WideCharToMultiByte( CP_ACP, 0, ai->ai_canonname, -1, ret->ai_canonname, len, NULL, NULL );
}
if (ai->ai_addr)
{
- if (!(ret->ai_addr = HeapAlloc( GetProcessHeap(), 0, sizeof(struct sockaddr) )))
+ if (!(ret->ai_addr = malloc( sizeof(struct sockaddr) )))
{
- HeapFree( GetProcessHeap(), 0, ret->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret->ai_canonname );
+ free( ret );
return NULL;
}
memcpy( ret->ai_addr, ai->ai_addr, sizeof(struct sockaddr) );
@@ -276,9 +276,9 @@ static void WINAPI getaddrinfo_callback(TP_CALLBACK_INSTANCE *instance, void *co
freeaddrinfo(res);
}
- HeapFree( GetProcessHeap(), 0, args->nodename );
- HeapFree( GetProcessHeap(), 0, args->servname );
- HeapFree( GetProcessHeap(), 0, args );
+ free( args->nodename );
+ free( args->servname );
+ free( args );
overlapped->Internal = ret;
if (completion_routine) completion_routine( ret, 0, overlapped );
@@ -322,20 +322,20 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
ret = EAI_FAIL;
goto end;
}
- if (!(local_nodenameW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) goto end;
+ if (!(local_nodenameW = malloc( len * sizeof(WCHAR) ))) goto end;
IdnToAscii( 0, nodename, -1, local_nodenameW, len );
}
}
if (local_nodenameW)
{
len = WideCharToMultiByte( CP_ACP, 0, local_nodenameW, -1, NULL, 0, NULL, NULL );
- if (!(nodenameA = HeapAlloc( GetProcessHeap(), 0, len ))) goto end;
+ if (!(nodenameA = malloc( len ))) goto end;
WideCharToMultiByte( CP_ACP, 0, local_nodenameW, -1, nodenameA, len, NULL, NULL );
}
if (servname)
{
len = WideCharToMultiByte( CP_ACP, 0, servname, -1, NULL, 0, NULL, NULL );
- if (!(servnameA = HeapAlloc( GetProcessHeap(), 0, len ))) goto end;
+ if (!(servnameA = malloc( len ))) goto end;
WideCharToMultiByte( CP_ACP, 0, servname, -1, servnameA, len, NULL, NULL );
}
@@ -349,7 +349,7 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
goto end;
}
- if (!(args = HeapAlloc( GetProcessHeap(), 0, sizeof(*args) + sizeof(*args->hints) ))) goto end;
+ if (!(args = malloc( sizeof(*args) + sizeof(*args->hints) ))) goto end;
args->overlapped = overlapped;
args->completion_routine = completion_routine;
args->result = res;
@@ -368,13 +368,13 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
overlapped->Internal = WSAEINPROGRESS;
if (!TrySubmitThreadpoolCallback( getaddrinfo_callback, args, NULL ))
{
- HeapFree( GetProcessHeap(), 0, args );
+ free( args );
ret = GetLastError();
goto end;
}
if (local_nodenameW != nodename)
- HeapFree( GetProcessHeap(), 0, local_nodenameW );
+ free( local_nodenameW );
SetLastError( ERROR_IO_PENDING );
return ERROR_IO_PENDING;
}
@@ -388,9 +388,9 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
end:
if (local_nodenameW != nodename)
- HeapFree( GetProcessHeap(), 0, local_nodenameW );
- HeapFree( GetProcessHeap(), 0, nodenameA );
- HeapFree( GetProcessHeap(), 0, servnameA );
+ free( local_nodenameW );
+ free( nodenameA );
+ free( servnameA );
return ret;
}
@@ -484,7 +484,7 @@ void WINAPI freeaddrinfo( struct addrinfo *info )
{
TRACE( "%p\n", info );
- HeapFree( GetProcessHeap(), 0, info );
+ free( info );
}
@@ -496,10 +496,10 @@ void WINAPI FreeAddrInfoW( ADDRINFOW *ai )
while (ai)
{
ADDRINFOW *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -515,10 +515,10 @@ void WINAPI FreeAddrInfoEx( ADDRINFOEXA *ai )
while (ai)
{
ADDRINFOEXA *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -534,10 +534,10 @@ void WINAPI FreeAddrInfoExW( ADDRINFOEXW *ai )
while (ai)
{
ADDRINFOEXW *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -567,11 +567,11 @@ int WINAPI GetNameInfoW( const SOCKADDR *addr, socklen_t addr_len, WCHAR *host,
int ret;
char *hostA = NULL, *servA = NULL;
- if (host && (!(hostA = HeapAlloc( GetProcessHeap(), 0, host_len ))))
+ if (host && !(hostA = malloc( host_len )))
return EAI_MEMORY;
- if (serv && (!(servA = HeapAlloc( GetProcessHeap(), 0, serv_len ))))
+ if (serv && !(servA = malloc( serv_len )))
{
- HeapFree( GetProcessHeap(), 0, hostA );
+ free( hostA );
return EAI_MEMORY;
}
@@ -582,8 +582,8 @@ int WINAPI GetNameInfoW( const SOCKADDR *addr, socklen_t addr_len, WCHAR *host,
if (serv) MultiByteToWideChar( CP_ACP, 0, servA, -1, serv, serv_len );
}
- HeapFree( GetProcessHeap(), 0, hostA );
- HeapFree( GetProcessHeap(), 0, servA );
+ free( hostA );
+ free( servA );
return ret;
}
@@ -594,9 +594,9 @@ static struct hostent *get_hostent_buffer( unsigned int size )
if (data->he_buffer)
{
if (data->he_len >= size) return data->he_buffer;
- HeapFree( GetProcessHeap(), 0, data->he_buffer );
+ free( data->he_buffer );
}
- data->he_buffer = HeapAlloc( GetProcessHeap(), 0, (data->he_len = size) );
+ data->he_buffer = malloc( (data->he_len = size) );
if (!data->he_buffer) SetLastError(WSAENOBUFS);
return data->he_buffer;
}
@@ -722,8 +722,8 @@ static struct hostent *get_local_ips( char *hostname )
if (GetIpForwardTable( NULL, &route_size, FALSE ) != ERROR_INSUFFICIENT_BUFFER)
return NULL;
- adapters = HeapAlloc( GetProcessHeap(), 0, adap_size );
- routes = HeapAlloc( GetProcessHeap(), 0, route_size );
+ adapters = malloc( adap_size );
+ routes = malloc( route_size );
if (!adapters || !routes)
goto cleanup;
@@ -759,7 +759,7 @@ static struct hostent *get_local_ips( char *hostname )
}
if (exists)
continue;
- route_addrs = heap_realloc( route_addrs, (numroutes + 1) * sizeof(struct route) );
+ route_addrs = realloc( route_addrs, (numroutes + 1) * sizeof(struct route) );
if (!route_addrs)
goto cleanup;
route_addrs[numroutes].interface = ifindex;
@@ -808,9 +808,9 @@ static struct hostent *get_local_ips( char *hostname )
*(struct in_addr *)hostlist->h_addr_list[i] = route_addrs[i].addr;
cleanup:
- HeapFree( GetProcessHeap(), 0, route_addrs );
- HeapFree( GetProcessHeap(), 0, adapters );
- HeapFree( GetProcessHeap(), 0, routes );
+ free( route_addrs );
+ free( adapters );
+ free( routes );
return hostlist;
}
@@ -974,11 +974,10 @@ static char *read_etc_file( const WCHAR *filename, DWORD *ret_size )
}
size = GetFileSize( file, NULL );
- if (!(data = HeapAlloc( GetProcessHeap(), 0, size )) ||
- !ReadFile( file, data, size, ret_size, NULL ))
+ if (!(data = malloc( size )) || !ReadFile( file, data, size, ret_size, NULL ))
{
WARN( "failed to read file, error %u\n", GetLastError() );
- HeapFree( GetProcessHeap(), 0, data );
+ free( data );
data = NULL;
}
CloseHandle( file );
@@ -1009,10 +1008,10 @@ static struct protoent *get_protoent_buffer( unsigned int size )
if (data->pe_buffer)
{
if (data->pe_len >= size) return data->pe_buffer;
- HeapFree( GetProcessHeap(), 0, data->pe_buffer );
+ free( data->pe_buffer );
}
data->pe_len = size;
- data->pe_buffer = HeapAlloc( GetProcessHeap(), 0, size );
+ data->pe_buffer = malloc( size );
if (!data->pe_buffer) SetLastError( WSAENOBUFS );
return data->pe_buffer;
}
@@ -1150,7 +1149,7 @@ struct protoent * WINAPI getprotobyname( const char *name )
break;
}
- HeapFree( GetProcessHeap(), 0, file );
+ free( file );
return proto;
}
@@ -1180,7 +1179,7 @@ struct protoent * WINAPI getprotobynumber( int number )
break;
}
- HeapFree( GetProcessHeap(), 0, file );
+ free( file );
return proto;
}
@@ -1191,10 +1190,10 @@ static struct servent *get_servent_buffer( int size )
if (data->se_buffer)
{
if (data->se_len >= size) return data->se_buffer;
- HeapFree( GetProcessHeap(), 0, data->se_buffer );
+ free( data->se_buffer );
}
data->se_len = size;
- data->se_buffer = HeapAlloc( GetProcessHeap(), 0, size );
+ data->se_buffer = malloc( size );
if (!data->se_buffer) SetLastError( WSAENOBUFS );
return data->se_buffer;
}
@@ -1341,7 +1340,7 @@ struct servent * WINAPI getservbyname( const char *name, const char *proto )
break;
}
- HeapFree( GetProcessHeap(), 0, file );
+ free( file );
return serv;
}
@@ -1371,7 +1370,7 @@ struct servent * WINAPI getservbyport( int port, const char *proto )
break;
}
- HeapFree( GetProcessHeap(), 0, file );
+ free( file );
return serv;
}
@@ -1481,7 +1480,7 @@ int WINAPI InetPtonW( int family, const WCHAR *addr, void *buffer )
}
len = WideCharToMultiByte( CP_ACP, 0, addr, -1, NULL, 0, NULL, NULL );
- if (!(addrA = HeapAlloc( GetProcessHeap(), 0, len )))
+ if (!(addrA = malloc( len )))
{
SetLastError( WSA_NOT_ENOUGH_MEMORY );
return -1;
@@ -1491,7 +1490,7 @@ int WINAPI InetPtonW( int family, const WCHAR *addr, void *buffer )
ret = inet_pton( family, addrA, buffer );
if (!ret) SetLastError( WSAEINVAL );
- HeapFree( GetProcessHeap(), 0, addrA );
+ free( addrA );
return ret;
}
@@ -1627,14 +1626,14 @@ int WINAPI WSAStringToAddressW( WCHAR *string, int family, WSAPROTOCOL_INFOW *pr
}
sizeA = WideCharToMultiByte( CP_ACP, 0, string, -1, NULL, 0, NULL, NULL );
- if (!(stringA = HeapAlloc( GetProcessHeap(), 0, sizeA )))
+ if (!(stringA = malloc( sizeA )))
{
SetLastError( WSA_NOT_ENOUGH_MEMORY );
return -1;
}
WideCharToMultiByte( CP_ACP, 0, string, -1, stringA, sizeA, NULL, NULL );
ret = WSAStringToAddressA( stringA, family, protocol_infoA, addr, addr_len );
- HeapFree( GetProcessHeap(), 0, stringA );
+ free( stringA );
return ret;
}
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 83904f29626..fd6ea25c751 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -361,7 +361,7 @@ static BOOL socket_list_add(SOCKET socket)
}
}
new_size = max(socket_list_size * 2, 8);
- if (!(new_array = heap_realloc(socket_list, new_size * sizeof(*socket_list))))
+ if (!(new_array = realloc( socket_list, new_size * sizeof(*socket_list) )))
{
LeaveCriticalSection(&cs_socket_list);
return FALSE;
@@ -508,30 +508,30 @@ static DWORD NtStatusToWSAError( NTSTATUS status )
struct per_thread_data *get_per_thread_data(void)
{
- struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
- /* lazy initialization */
- if (!ptb)
+ struct per_thread_data *data = NtCurrentTeb()->WinSockData;
+
+ if (!data)
{
- ptb = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ptb) );
- NtCurrentTeb()->WinSockData = ptb;
+ data = calloc( 1, sizeof(*data) );
+ NtCurrentTeb()->WinSockData = data;
}
- return ptb;
+ return data;
}
static void free_per_thread_data(void)
{
- struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
+ struct per_thread_data *data = NtCurrentTeb()->WinSockData;
- if (!ptb) return;
+ if (!data) return;
- CloseHandle( ptb->sync_event );
+ CloseHandle( data->sync_event );
/* delete scratch buffers */
- HeapFree( GetProcessHeap(), 0, ptb->he_buffer );
- HeapFree( GetProcessHeap(), 0, ptb->se_buffer );
- HeapFree( GetProcessHeap(), 0, ptb->pe_buffer );
+ free( data->he_buffer );
+ free( data->se_buffer );
+ free( data->pe_buffer );
- HeapFree( GetProcessHeap(), 0, ptb );
+ free( data );
NtCurrentTeb()->WinSockData = NULL;
}
@@ -1108,12 +1108,12 @@ int WINAPI bind( SOCKET s, const struct sockaddr *addr, int len )
if (!(sync_event = get_sync_event())) return -1;
- params = HeapAlloc( GetProcessHeap(), 0, sizeof(int) + len );
- ret_addr = HeapAlloc( GetProcessHeap(), 0, len );
+ params = malloc( sizeof(int) + len );
+ ret_addr = malloc( len );
if (!params || !ret_addr)
{
- HeapFree( GetProcessHeap(), 0, params );
- HeapFree( GetProcessHeap(), 0, ret_addr );
+ free( params );
+ free( ret_addr );
SetLastError( WSAENOBUFS );
return -1;
}
@@ -1129,8 +1129,8 @@ int WINAPI bind( SOCKET s, const struct sockaddr *addr, int len )
status = io.u.Status;
}
- HeapFree( GetProcessHeap(), 0, params );
- HeapFree( GetProcessHeap(), 0, ret_addr );
+ free( params );
+ free( ret_addr );
SetLastError( NtStatusToWSAError( status ) );
return status ? -1 : 0;
@@ -1175,7 +1175,7 @@ int WINAPI connect( SOCKET s, const struct sockaddr *addr, int len )
if (!(sync_event = get_sync_event())) return -1;
- if (!(params = HeapAlloc( GetProcessHeap(), 0, sizeof(*params) + len )))
+ if (!(params = malloc( sizeof(*params) + len )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return -1;
@@ -1186,7 +1186,7 @@ int WINAPI connect( SOCKET s, const struct sockaddr *addr, int len )
status = NtDeviceIoControlFile( (HANDLE)s, sync_event, NULL, NULL, &io, IOCTL_AFD_WINE_CONNECT,
params, sizeof(*params) + len, NULL, 0 );
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
if (status == STATUS_PENDING)
{
if (WaitForSingleObject( sync_event, INFINITE ) == WAIT_FAILED) return -1;
@@ -1235,7 +1235,7 @@ static BOOL WINAPI WS2_ConnectEx( SOCKET s, const struct sockaddr *name, int nam
overlapped->Internal = STATUS_PENDING;
overlapped->InternalHigh = 0;
- if (!(params = HeapAlloc( GetProcessHeap(), 0, sizeof(*params) + namelen + send_len )))
+ if (!(params = malloc( sizeof(*params) + namelen + send_len )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return SOCKET_ERROR;
@@ -1248,7 +1248,7 @@ static BOOL WINAPI WS2_ConnectEx( SOCKET s, const struct sockaddr *name, int nam
status = NtDeviceIoControlFile( SOCKET2HANDLE(s), overlapped->hEvent, NULL, cvalue,
(IO_STATUS_BLOCK *)overlapped, IOCTL_AFD_WINE_CONNECT,
params, sizeof(*params) + namelen + send_len, NULL, 0 );
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
if (ret_len) *ret_len = overlapped->InternalHigh;
SetLastError( NtStatusToWSAError( status ) );
return !status;
@@ -2028,7 +2028,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (GetAdaptersInfo(NULL, &size) == ERROR_BUFFER_OVERFLOW)
{
- IP_ADAPTER_INFO *p, *table = HeapAlloc(GetProcessHeap(), 0, size);
+ IP_ADAPTER_INFO *p, *table = malloc( size );
NTSTATUS status = STATUS_SUCCESS;
SOCKET_ADDRESS_LIST *sa_list;
SOCKADDR_IN *sockaddr;
@@ -2039,7 +2039,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (!table || GetAdaptersInfo(table, &size))
{
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
SetLastError( WSAEINVAL );
return -1;
}
@@ -2051,7 +2051,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (total > out_size || !out_buff)
{
*ret_size = total;
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
SetLastError( WSAEFAULT );
return -1;
}
@@ -2074,7 +2074,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
i++;
}
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
ret = server_ioctl_sock( s, IOCTL_AFD_WINE_COMPLETE_ASYNC, &status, sizeof(status),
NULL, 0, ret_size, overlapped, completion );
@@ -2173,10 +2173,10 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
SetLastError( WSAEFAULT );
return -1;
}
- ipAddrTable = HeapAlloc( GetProcessHeap(), 0, size );
+ ipAddrTable = malloc( size );
if (GetIpAddrTable( ipAddrTable, &size, FALSE ))
{
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
SetLastError( WSAEFAULT );
return -1;
}
@@ -2190,14 +2190,14 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
{
ERR("no matching IP address for interface %d\n",
row.dwForwardIfIndex);
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
SetLastError( WSAEFAULT );
return -1;
}
saddr_in->sin_family = AF_INET;
saddr_in->sin_addr.S_un.S_addr = ipAddrTable->table[found_index].dwAddr;
saddr_in->sin_port = 0;
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
ret = server_ioctl_sock( s, IOCTL_AFD_WINE_COMPLETE_ASYNC, &status, sizeof(status),
NULL, 0, ret_size, overlapped, completion );
@@ -2530,7 +2530,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
if (!(sync_event = get_sync_event())) return -1;
params_size = offsetof( struct afd_poll_params, sockets[count] );
- if (!(params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, params_size )))
+ if (!(params = calloc( params_size, 1 )))
{
SetLastError(WSAENOBUFS);
return SOCKET_ERROR;
@@ -2566,7 +2566,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
if (!poll_socket)
{
SetLastError( WSAENOTSOCK );
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
return -1;
}
@@ -2576,7 +2576,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
{
if (WaitForSingleObject( sync_event, INFINITE ) == WAIT_FAILED)
{
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
return -1;
}
status = io.u.Status;
@@ -2614,7 +2614,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
}
if (status == STATUS_TIMEOUT) status = STATUS_SUCCESS;
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
SetLastError( NtStatusToWSAError( status ) );
return status ? -1 : ret_count;
diff --git a/dlls/ws2_32/ws2_32_private.h b/dlls/ws2_32/ws2_32_private.h
index 5e2075b5c9c..85f6b4dbc1c 100644
--- a/dlls/ws2_32/ws2_32_private.h
+++ b/dlls/ws2_32/ws2_32_private.h
@@ -21,6 +21,7 @@
#include <stdarg.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@ -50,7 +51,6 @@
#include "wine/afd.h"
#include "wine/debug.h"
#include "wine/exception.h"
-#include "wine/heap.h"
#include "wine/unixlib.h"
#define DECLARE_CRITICAL_SECTION(cs) \
--
2.32.0
2
3
Signed-off-by: Zebediah Figura <zfigura(a)codeweavers.com>
---
dlls/ws2_32/async.c | 26 +++----
dlls/ws2_32/protocol.c | 128 +++++++++++++++++------------------
dlls/ws2_32/socket.c | 70 +++++++++----------
dlls/ws2_32/ws2_32_private.h | 2 +-
4 files changed, 109 insertions(+), 117 deletions(-)
diff --git a/dlls/ws2_32/async.c b/dlls/ws2_32/async.c
index 5eecddda062..ffa61149094 100644
--- a/dlls/ws2_32/async.c
+++ b/dlls/ws2_32/async.c
@@ -34,15 +34,7 @@
* whole stuff did not work anyway to other changes).
*/
-#include <stdarg.h>
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "winuser.h"
-#include "winsock2.h"
-#include "ws2spi.h"
-
-#include "wine/debug.h"
+#include "ws2_32_private.h"
WINE_DEFAULT_DEBUG_CHANNEL(winsock);
@@ -253,7 +245,7 @@ static void WINAPI async_worker( TP_CALLBACK_INSTANCE *instance, void *context )
struct async_query_header *query = context;
LPARAM lparam = query->func( query );
PostMessageW( query->hWnd, query->uMsg, (WPARAM)query->handle, lparam );
- HeapFree( GetProcessHeap(), 0, query );
+ free( query );
}
@@ -283,7 +275,7 @@ static HANDLE run_query( HWND hWnd, UINT uMsg, LPARAM (*func)(struct async_query
if (!TrySubmitThreadpoolCallback( async_worker, query, NULL ))
{
SetLastError( WSAEWOULDBLOCK );
- HeapFree( GetProcessHeap(), 0, query );
+ free( query );
return 0;
}
return UlongToHandle( handle );
@@ -300,7 +292,7 @@ HANDLE WINAPI WSAAsyncGetHostByAddr(HWND hWnd, UINT uMsg, LPCSTR addr,
TRACE("hwnd %p, msg %04x, addr %p[%i]\n", hWnd, uMsg, addr, len );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -323,7 +315,7 @@ HANDLE WINAPI WSAAsyncGetHostByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, host %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -344,7 +336,7 @@ HANDLE WINAPI WSAAsyncGetProtoByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, proto %s, buffer %i\n", hWnd, uMsg, debugstr_a(name), buflen );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -365,7 +357,7 @@ HANDLE WINAPI WSAAsyncGetProtoByNumber(HWND hWnd, UINT uMsg, INT number,
TRACE("hwnd %p, msg %04x, num %i\n", hWnd, uMsg, number );
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) )))
+ if (!(aq = malloc( sizeof(*aq) )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -386,7 +378,7 @@ HANDLE WINAPI WSAAsyncGetServByName(HWND hWnd, UINT uMsg, LPCSTR name,
TRACE("hwnd %p, msg %04x, name %s, proto %s\n", hWnd, uMsg, debugstr_a(name), debugstr_a(proto));
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len1 + len2 )))
+ if (!(aq = malloc( sizeof(*aq) + len1 + len2 )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
@@ -417,7 +409,7 @@ HANDLE WINAPI WSAAsyncGetServByPort(HWND hWnd, UINT uMsg, INT port,
TRACE("hwnd %p, msg %04x, port %i, proto %s\n", hWnd, uMsg, port, debugstr_a(proto));
- if (!(aq = HeapAlloc( GetProcessHeap(), 0, sizeof(*aq) + len )))
+ if (!(aq = malloc( sizeof(*aq) + len )))
{
SetLastError( WSAEWOULDBLOCK );
return 0;
diff --git a/dlls/ws2_32/protocol.c b/dlls/ws2_32/protocol.c
index 733ef102eea..0b48515091b 100644
--- a/dlls/ws2_32/protocol.c
+++ b/dlls/ws2_32/protocol.c
@@ -38,10 +38,10 @@ static char *get_fqdn(void)
GetComputerNameExA( ComputerNamePhysicalDnsFullyQualified, NULL, &size );
if (GetLastError() != ERROR_MORE_DATA) return NULL;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, size ))) return NULL;
+ if (!(ret = malloc( size ))) return NULL;
if (!GetComputerNameExA( ComputerNamePhysicalDnsFullyQualified, ret, &size ))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
return ret;
@@ -57,14 +57,14 @@ static int do_getaddrinfo( const char *node, const char *service,
for (;;)
{
- if (!(params.info = HeapAlloc( GetProcessHeap(), 0, size )))
+ if (!(params.info = malloc( size )))
return WSA_NOT_ENOUGH_MEMORY;
if (!(ret = WS_CALL( getaddrinfo, ¶ms )))
{
*info = params.info;
return ret;
}
- HeapFree( GetProcessHeap(), 0, params.info );
+ free( params.info );
if (ret != ERROR_INSUFFICIENT_BUFFER) return ret;
}
}
@@ -103,8 +103,8 @@ int WINAPI getaddrinfo( const char *node, const char *service,
if (node[0] == '[' && (close_bracket = strchr(node + 1, ']')))
{
- nodev6 = HeapAlloc( GetProcessHeap(), 0, close_bracket - node );
- if (!nodev6) return WSA_NOT_ENOUGH_MEMORY;
+ if (!(nodev6 = malloc( close_bracket - node )))
+ return WSA_NOT_ENOUGH_MEMORY;
lstrcpynA( nodev6, node + 1, close_bracket - node );
node = nodev6;
}
@@ -117,7 +117,7 @@ int WINAPI getaddrinfo( const char *node, const char *service,
{
if (!fqdn && !(fqdn = get_fqdn()))
{
- HeapFree( GetProcessHeap(), 0, nodev6 );
+ free( nodev6 );
return WSA_NOT_ENOUGH_MEMORY;
}
if (!strcmp( fqdn, node ) || (!strncmp( fqdn, node, strlen( node ) ) && fqdn[strlen( node )] == '.'))
@@ -136,8 +136,8 @@ int WINAPI getaddrinfo( const char *node, const char *service,
}
}
- HeapFree( GetProcessHeap(), 0, fqdn );
- HeapFree( GetProcessHeap(), 0, nodev6 );
+ free( fqdn );
+ free( nodev6 );
if (!ret && TRACE_ON(winsock))
{
@@ -160,7 +160,7 @@ static ADDRINFOEXW *addrinfo_AtoW( const struct addrinfo *ai )
{
ADDRINFOEXW *ret;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, sizeof(ADDRINFOEXW) ))) return NULL;
+ if (!(ret = malloc( sizeof(ADDRINFOEXW) ))) return NULL;
ret->ai_flags = ai->ai_flags;
ret->ai_family = ai->ai_family;
ret->ai_socktype = ai->ai_socktype;
@@ -175,19 +175,19 @@ static ADDRINFOEXW *addrinfo_AtoW( const struct addrinfo *ai )
if (ai->ai_canonname)
{
int len = MultiByteToWideChar( CP_ACP, 0, ai->ai_canonname, -1, NULL, 0 );
- if (!(ret->ai_canonname = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) )))
+ if (!(ret->ai_canonname = malloc( len * sizeof(WCHAR) )))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
MultiByteToWideChar( CP_ACP, 0, ai->ai_canonname, -1, ret->ai_canonname, len );
}
if (ai->ai_addr)
{
- if (!(ret->ai_addr = HeapAlloc( GetProcessHeap(), 0, ai->ai_addrlen )))
+ if (!(ret->ai_addr = malloc( ai->ai_addrlen )))
{
- HeapFree( GetProcessHeap(), 0, ret->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret->ai_canonname );
+ free( ret );
return NULL;
}
memcpy( ret->ai_addr, ai->ai_addr, ai->ai_addrlen );
@@ -217,7 +217,7 @@ static struct addrinfo *addrinfo_WtoA( const struct addrinfoW *ai )
{
struct addrinfo *ret;
- if (!(ret = HeapAlloc( GetProcessHeap(), 0, sizeof(struct addrinfo) ))) return NULL;
+ if (!(ret = malloc( sizeof(struct addrinfo) ))) return NULL;
ret->ai_flags = ai->ai_flags;
ret->ai_family = ai->ai_family;
ret->ai_socktype = ai->ai_socktype;
@@ -229,19 +229,19 @@ static struct addrinfo *addrinfo_WtoA( const struct addrinfoW *ai )
if (ai->ai_canonname)
{
int len = WideCharToMultiByte( CP_ACP, 0, ai->ai_canonname, -1, NULL, 0, NULL, NULL );
- if (!(ret->ai_canonname = HeapAlloc( GetProcessHeap(), 0, len )))
+ if (!(ret->ai_canonname = malloc( len )))
{
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret );
return NULL;
}
WideCharToMultiByte( CP_ACP, 0, ai->ai_canonname, -1, ret->ai_canonname, len, NULL, NULL );
}
if (ai->ai_addr)
{
- if (!(ret->ai_addr = HeapAlloc( GetProcessHeap(), 0, sizeof(struct sockaddr) )))
+ if (!(ret->ai_addr = malloc( sizeof(struct sockaddr) )))
{
- HeapFree( GetProcessHeap(), 0, ret->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ret );
+ free( ret->ai_canonname );
+ free( ret );
return NULL;
}
memcpy( ret->ai_addr, ai->ai_addr, sizeof(struct sockaddr) );
@@ -276,9 +276,9 @@ static void WINAPI getaddrinfo_callback(TP_CALLBACK_INSTANCE *instance, void *co
freeaddrinfo(res);
}
- HeapFree( GetProcessHeap(), 0, args->nodename );
- HeapFree( GetProcessHeap(), 0, args->servname );
- HeapFree( GetProcessHeap(), 0, args );
+ free( args->nodename );
+ free( args->servname );
+ free( args );
overlapped->Internal = ret;
if (completion_routine) completion_routine( ret, 0, overlapped );
@@ -322,20 +322,20 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
ret = EAI_FAIL;
goto end;
}
- if (!(local_nodenameW = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ))) goto end;
+ if (!(local_nodenameW = malloc( len * sizeof(WCHAR) ))) goto end;
IdnToAscii( 0, nodename, -1, local_nodenameW, len );
}
}
if (local_nodenameW)
{
len = WideCharToMultiByte( CP_ACP, 0, local_nodenameW, -1, NULL, 0, NULL, NULL );
- if (!(nodenameA = HeapAlloc( GetProcessHeap(), 0, len ))) goto end;
+ if (!(nodenameA = malloc( len ))) goto end;
WideCharToMultiByte( CP_ACP, 0, local_nodenameW, -1, nodenameA, len, NULL, NULL );
}
if (servname)
{
len = WideCharToMultiByte( CP_ACP, 0, servname, -1, NULL, 0, NULL, NULL );
- if (!(servnameA = HeapAlloc( GetProcessHeap(), 0, len ))) goto end;
+ if (!(servnameA = malloc( len ))) goto end;
WideCharToMultiByte( CP_ACP, 0, servname, -1, servnameA, len, NULL, NULL );
}
@@ -349,7 +349,7 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
goto end;
}
- if (!(args = HeapAlloc( GetProcessHeap(), 0, sizeof(*args) + sizeof(*args->hints) ))) goto end;
+ if (!(args = malloc( sizeof(*args) + sizeof(*args->hints) ))) goto end;
args->overlapped = overlapped;
args->completion_routine = completion_routine;
args->result = res;
@@ -368,13 +368,13 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
overlapped->Internal = WSAEINPROGRESS;
if (!TrySubmitThreadpoolCallback( getaddrinfo_callback, args, NULL ))
{
- HeapFree( GetProcessHeap(), 0, args );
+ free( args );
ret = GetLastError();
goto end;
}
if (local_nodenameW != nodename)
- HeapFree( GetProcessHeap(), 0, local_nodenameW );
+ free( local_nodenameW );
SetLastError( ERROR_IO_PENDING );
return ERROR_IO_PENDING;
}
@@ -388,9 +388,9 @@ static int getaddrinfoW( const WCHAR *nodename, const WCHAR *servname,
end:
if (local_nodenameW != nodename)
- HeapFree( GetProcessHeap(), 0, local_nodenameW );
- HeapFree( GetProcessHeap(), 0, nodenameA );
- HeapFree( GetProcessHeap(), 0, servnameA );
+ free( local_nodenameW );
+ free( nodenameA );
+ free( servnameA );
return ret;
}
@@ -484,7 +484,7 @@ void WINAPI freeaddrinfo( struct addrinfo *info )
{
TRACE( "%p\n", info );
- HeapFree( GetProcessHeap(), 0, info );
+ free( info );
}
@@ -496,10 +496,10 @@ void WINAPI FreeAddrInfoW( ADDRINFOW *ai )
while (ai)
{
ADDRINFOW *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -515,10 +515,10 @@ void WINAPI FreeAddrInfoEx( ADDRINFOEXA *ai )
while (ai)
{
ADDRINFOEXA *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -534,10 +534,10 @@ void WINAPI FreeAddrInfoExW( ADDRINFOEXW *ai )
while (ai)
{
ADDRINFOEXW *next;
- HeapFree( GetProcessHeap(), 0, ai->ai_canonname );
- HeapFree( GetProcessHeap(), 0, ai->ai_addr );
+ free( ai->ai_canonname );
+ free( ai->ai_addr );
next = ai->ai_next;
- HeapFree( GetProcessHeap(), 0, ai );
+ free( ai );
ai = next;
}
}
@@ -567,11 +567,11 @@ int WINAPI GetNameInfoW( const SOCKADDR *addr, socklen_t addr_len, WCHAR *host,
int ret;
char *hostA = NULL, *servA = NULL;
- if (host && (!(hostA = HeapAlloc( GetProcessHeap(), 0, host_len ))))
+ if (host && !(hostA = malloc( host_len )))
return EAI_MEMORY;
- if (serv && (!(servA = HeapAlloc( GetProcessHeap(), 0, serv_len ))))
+ if (serv && !(servA = malloc( serv_len )))
{
- HeapFree( GetProcessHeap(), 0, hostA );
+ free( hostA );
return EAI_MEMORY;
}
@@ -582,8 +582,8 @@ int WINAPI GetNameInfoW( const SOCKADDR *addr, socklen_t addr_len, WCHAR *host,
if (serv) MultiByteToWideChar( CP_ACP, 0, servA, -1, serv, serv_len );
}
- HeapFree( GetProcessHeap(), 0, hostA );
- HeapFree( GetProcessHeap(), 0, servA );
+ free( hostA );
+ free( servA );
return ret;
}
@@ -594,9 +594,9 @@ static struct hostent *get_hostent_buffer( unsigned int size )
if (data->he_buffer)
{
if (data->he_len >= size) return data->he_buffer;
- HeapFree( GetProcessHeap(), 0, data->he_buffer );
+ free( data->he_buffer );
}
- data->he_buffer = HeapAlloc( GetProcessHeap(), 0, (data->he_len = size) );
+ data->he_buffer = malloc( (data->he_len = size) );
if (!data->he_buffer) SetLastError(WSAENOBUFS);
return data->he_buffer;
}
@@ -722,8 +722,8 @@ static struct hostent *get_local_ips( char *hostname )
if (GetIpForwardTable( NULL, &route_size, FALSE ) != ERROR_INSUFFICIENT_BUFFER)
return NULL;
- adapters = HeapAlloc( GetProcessHeap(), 0, adap_size );
- routes = HeapAlloc( GetProcessHeap(), 0, route_size );
+ adapters = malloc( adap_size );
+ routes = malloc( route_size );
if (!adapters || !routes)
goto cleanup;
@@ -759,7 +759,7 @@ static struct hostent *get_local_ips( char *hostname )
}
if (exists)
continue;
- route_addrs = heap_realloc( route_addrs, (numroutes + 1) * sizeof(struct route) );
+ route_addrs = realloc( route_addrs, (numroutes + 1) * sizeof(struct route) );
if (!route_addrs)
goto cleanup;
route_addrs[numroutes].interface = ifindex;
@@ -808,9 +808,9 @@ static struct hostent *get_local_ips( char *hostname )
*(struct in_addr *)hostlist->h_addr_list[i] = route_addrs[i].addr;
cleanup:
- HeapFree( GetProcessHeap(), 0, route_addrs );
- HeapFree( GetProcessHeap(), 0, adapters );
- HeapFree( GetProcessHeap(), 0, routes );
+ free( route_addrs );
+ free( adapters );
+ free( routes );
return hostlist;
}
@@ -1009,10 +1009,10 @@ static struct protoent *get_protoent_buffer( unsigned int size )
if (data->pe_buffer)
{
if (data->pe_len >= size) return data->pe_buffer;
- HeapFree( GetProcessHeap(), 0, data->pe_buffer );
+ free( data->pe_buffer );
}
data->pe_len = size;
- data->pe_buffer = HeapAlloc( GetProcessHeap(), 0, size );
+ data->pe_buffer = malloc( size );
if (!data->pe_buffer) SetLastError( WSAENOBUFS );
return data->pe_buffer;
}
@@ -1191,10 +1191,10 @@ static struct servent *get_servent_buffer( int size )
if (data->se_buffer)
{
if (data->se_len >= size) return data->se_buffer;
- HeapFree( GetProcessHeap(), 0, data->se_buffer );
+ free( data->se_buffer );
}
data->se_len = size;
- data->se_buffer = HeapAlloc( GetProcessHeap(), 0, size );
+ data->se_buffer = malloc( size );
if (!data->se_buffer) SetLastError( WSAENOBUFS );
return data->se_buffer;
}
@@ -1481,7 +1481,7 @@ int WINAPI InetPtonW( int family, const WCHAR *addr, void *buffer )
}
len = WideCharToMultiByte( CP_ACP, 0, addr, -1, NULL, 0, NULL, NULL );
- if (!(addrA = HeapAlloc( GetProcessHeap(), 0, len )))
+ if (!(addrA = malloc( len )))
{
SetLastError( WSA_NOT_ENOUGH_MEMORY );
return -1;
@@ -1491,7 +1491,7 @@ int WINAPI InetPtonW( int family, const WCHAR *addr, void *buffer )
ret = inet_pton( family, addrA, buffer );
if (!ret) SetLastError( WSAEINVAL );
- HeapFree( GetProcessHeap(), 0, addrA );
+ free( addrA );
return ret;
}
@@ -1627,14 +1627,14 @@ int WINAPI WSAStringToAddressW( WCHAR *string, int family, WSAPROTOCOL_INFOW *pr
}
sizeA = WideCharToMultiByte( CP_ACP, 0, string, -1, NULL, 0, NULL, NULL );
- if (!(stringA = HeapAlloc( GetProcessHeap(), 0, sizeA )))
+ if (!(stringA = malloc( sizeA )))
{
SetLastError( WSA_NOT_ENOUGH_MEMORY );
return -1;
}
WideCharToMultiByte( CP_ACP, 0, string, -1, stringA, sizeA, NULL, NULL );
ret = WSAStringToAddressA( stringA, family, protocol_infoA, addr, addr_len );
- HeapFree( GetProcessHeap(), 0, stringA );
+ free( stringA );
return ret;
}
diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index c991d212a07..a5461ae9327 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -361,7 +361,7 @@ static BOOL socket_list_add(SOCKET socket)
}
}
new_size = max(socket_list_size * 2, 8);
- if (!(new_array = heap_realloc(socket_list, new_size * sizeof(*socket_list))))
+ if (!(new_array = realloc( socket_list, new_size * sizeof(*socket_list) )))
{
LeaveCriticalSection(&cs_socket_list);
return FALSE;
@@ -508,30 +508,30 @@ static DWORD NtStatusToWSAError( NTSTATUS status )
struct per_thread_data *get_per_thread_data(void)
{
- struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
- /* lazy initialization */
- if (!ptb)
+ struct per_thread_data *data = NtCurrentTeb()->WinSockData;
+
+ if (!data)
{
- ptb = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ptb) );
- NtCurrentTeb()->WinSockData = ptb;
+ data = calloc( 1, sizeof(*data) );
+ NtCurrentTeb()->WinSockData = data;
}
- return ptb;
+ return data;
}
static void free_per_thread_data(void)
{
- struct per_thread_data * ptb = NtCurrentTeb()->WinSockData;
+ struct per_thread_data *data = NtCurrentTeb()->WinSockData;
- if (!ptb) return;
+ if (!data) return;
- CloseHandle( ptb->sync_event );
+ CloseHandle( data->sync_event );
/* delete scratch buffers */
- HeapFree( GetProcessHeap(), 0, ptb->he_buffer );
- HeapFree( GetProcessHeap(), 0, ptb->se_buffer );
- HeapFree( GetProcessHeap(), 0, ptb->pe_buffer );
+ free( data->he_buffer );
+ free( data->se_buffer );
+ free( data->pe_buffer );
- HeapFree( GetProcessHeap(), 0, ptb );
+ free( data );
NtCurrentTeb()->WinSockData = NULL;
}
@@ -1108,12 +1108,12 @@ int WINAPI bind( SOCKET s, const struct sockaddr *addr, int len )
if (!(sync_event = get_sync_event())) return -1;
- params = HeapAlloc( GetProcessHeap(), 0, sizeof(int) + len );
- ret_addr = HeapAlloc( GetProcessHeap(), 0, len );
+ params = malloc( sizeof(int) + len );
+ ret_addr = malloc( len );
if (!params || !ret_addr)
{
- HeapFree( GetProcessHeap(), 0, params );
- HeapFree( GetProcessHeap(), 0, ret_addr );
+ free( params );
+ free( ret_addr );
SetLastError( WSAENOBUFS );
return -1;
}
@@ -1129,8 +1129,8 @@ int WINAPI bind( SOCKET s, const struct sockaddr *addr, int len )
status = io.u.Status;
}
- HeapFree( GetProcessHeap(), 0, params );
- HeapFree( GetProcessHeap(), 0, ret_addr );
+ free( params );
+ free( ret_addr );
SetLastError( NtStatusToWSAError( status ) );
return status ? -1 : 0;
@@ -1175,7 +1175,7 @@ int WINAPI connect( SOCKET s, const struct sockaddr *addr, int len )
if (!(sync_event = get_sync_event())) return -1;
- if (!(params = HeapAlloc( GetProcessHeap(), 0, sizeof(*params) + len )))
+ if (!(params = malloc( sizeof(*params) + len )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return -1;
@@ -1186,7 +1186,7 @@ int WINAPI connect( SOCKET s, const struct sockaddr *addr, int len )
status = NtDeviceIoControlFile( (HANDLE)s, sync_event, NULL, NULL, &io, IOCTL_AFD_WINE_CONNECT,
params, sizeof(*params) + len, NULL, 0 );
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
if (status == STATUS_PENDING)
{
if (WaitForSingleObject( sync_event, INFINITE ) == WAIT_FAILED) return -1;
@@ -1235,7 +1235,7 @@ static BOOL WINAPI WS2_ConnectEx( SOCKET s, const struct sockaddr *name, int nam
overlapped->Internal = STATUS_PENDING;
overlapped->InternalHigh = 0;
- if (!(params = HeapAlloc( GetProcessHeap(), 0, sizeof(*params) + namelen + send_len )))
+ if (!(params = malloc( sizeof(*params) + namelen + send_len )))
{
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
return SOCKET_ERROR;
@@ -1248,7 +1248,7 @@ static BOOL WINAPI WS2_ConnectEx( SOCKET s, const struct sockaddr *name, int nam
status = NtDeviceIoControlFile( SOCKET2HANDLE(s), overlapped->hEvent, NULL, cvalue,
(IO_STATUS_BLOCK *)overlapped, IOCTL_AFD_WINE_CONNECT,
params, sizeof(*params) + namelen + send_len, NULL, 0 );
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
if (ret_len) *ret_len = overlapped->InternalHigh;
SetLastError( NtStatusToWSAError( status ) );
return !status;
@@ -2018,7 +2018,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (GetAdaptersInfo(NULL, &size) == ERROR_BUFFER_OVERFLOW)
{
- IP_ADAPTER_INFO *p, *table = HeapAlloc(GetProcessHeap(), 0, size);
+ IP_ADAPTER_INFO *p, *table = malloc( size );
NTSTATUS status = STATUS_SUCCESS;
SOCKET_ADDRESS_LIST *sa_list;
SOCKADDR_IN *sockaddr;
@@ -2029,7 +2029,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (!table || GetAdaptersInfo(table, &size))
{
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
SetLastError( WSAEINVAL );
return -1;
}
@@ -2041,7 +2041,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
if (total > out_size || !out_buff)
{
*ret_size = total;
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
SetLastError( WSAEFAULT );
return -1;
}
@@ -2064,7 +2064,7 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
i++;
}
- HeapFree(GetProcessHeap(), 0, table);
+ free( table );
ret = server_ioctl_sock( s, IOCTL_AFD_WINE_COMPLETE_ASYNC, &status, sizeof(status),
NULL, 0, ret_size, overlapped, completion );
@@ -2163,10 +2163,10 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
SetLastError( WSAEFAULT );
return -1;
}
- ipAddrTable = HeapAlloc( GetProcessHeap(), 0, size );
+ ipAddrTable = malloc( size );
if (GetIpAddrTable( ipAddrTable, &size, FALSE ))
{
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
SetLastError( WSAEFAULT );
return -1;
}
@@ -2180,14 +2180,14 @@ INT WINAPI WSAIoctl(SOCKET s, DWORD code, LPVOID in_buff, DWORD in_size, LPVOID
{
ERR("no matching IP address for interface %d\n",
row.dwForwardIfIndex);
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
SetLastError( WSAEFAULT );
return -1;
}
saddr_in->sin_family = AF_INET;
saddr_in->sin_addr.S_un.S_addr = ipAddrTable->table[found_index].dwAddr;
saddr_in->sin_port = 0;
- HeapFree( GetProcessHeap(), 0, ipAddrTable );
+ free( ipAddrTable );
ret = server_ioctl_sock( s, IOCTL_AFD_WINE_COMPLETE_ASYNC, &status, sizeof(status),
NULL, 0, ret_size, overlapped, completion );
@@ -2520,7 +2520,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
if (!(sync_event = get_sync_event())) return -1;
params_size = offsetof( struct afd_poll_params, sockets[count] );
- if (!(params = HeapAlloc( GetProcessHeap(), HEAP_ZERO_MEMORY, params_size )))
+ if (!(params = calloc( params_size, 1 )))
{
SetLastError(WSAENOBUFS);
return SOCKET_ERROR;
@@ -2566,7 +2566,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
{
if (WaitForSingleObject( sync_event, INFINITE ) == WAIT_FAILED)
{
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
return -1;
}
status = io.u.Status;
@@ -2604,7 +2604,7 @@ int WINAPI WSAPoll( WSAPOLLFD *fds, ULONG count, int timeout )
}
if (status == STATUS_TIMEOUT) status = STATUS_SUCCESS;
- HeapFree( GetProcessHeap(), 0, params );
+ free( params );
SetLastError( NtStatusToWSAError( status ) );
return status ? -1 : ret_count;
diff --git a/dlls/ws2_32/ws2_32_private.h b/dlls/ws2_32/ws2_32_private.h
index 5e2075b5c9c..85f6b4dbc1c 100644
--- a/dlls/ws2_32/ws2_32_private.h
+++ b/dlls/ws2_32/ws2_32_private.h
@@ -21,6 +21,7 @@
#include <stdarg.h>
#include <stdio.h>
+#include <stdlib.h>
#include <string.h>
#include <limits.h>
@@ -50,7 +51,6 @@
#include "wine/afd.h"
#include "wine/debug.h"
#include "wine/exception.h"
-#include "wine/heap.h"
#include "wine/unixlib.h"
#define DECLARE_CRITICAL_SECTION(cs) \
--
2.30.2
2
5
18 Aug '21
This only showed up in the #ifdef __FreeBSD__ case, so did not appear
on other platforms during testing.
Signed-off-by: Gerald Pfeifer <gerald(a)pfeifer.com>
---
dlls/ntdll/unix/loader.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/loader.c b/dlls/ntdll/unix/loader.c
index a8e145de16e..2dde2332a6a 100644
--- a/dlls/ntdll/unix/loader.c
+++ b/dlls/ntdll/unix/loader.c
@@ -1729,7 +1729,8 @@ NTSTATUS get_builtin_init_funcs( void *handle, void **funcs, SIZE_T len, SIZE_T
#ifdef __FreeBSD__
/* On older FreeBSD versions, l_addr was the absolute load address, now it's the relocation offset. */
if (offsetof(struct link_map, l_addr) == 0)
- if (!get_relocbase(map->l_addr, &relocbase)) return;
+ if (!get_relocbase(map->l_addr, &relocbase))
+ return STATUS_NOT_SUPPORTED;
#endif
switch (dyn->d_tag)
{
--
2.31.1
1
0
res_init and res_query don't need lresolv on glibc 2.34.
Added another test for ns_initparse and friends.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=51635
Signed-off-by: Fabian Maurer <dark.shadow4(a)web.de>
---
configure.ac | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/configure.ac b/configure.ac
index a143f6d3d2a..b4e66435f92 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1499,7 +1499,7 @@ then
AC_LINK_IFELSE([AC_LANG_PROGRAM([[#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
-#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0)]])],
+#include <resolv.h>]],[[if (!(_res.options & RES_INIT)) res_init(); res_query("foo",ns_c_in,0,0,0); ns_initparse(0,0,0)]])],
[ac_cv_have_resolv=${lib:-"none required"}],[ac_cv_have_resolv="not found"])
test "x$ac_cv_have_resolv" = "xnot found" || break
done
--
2.33.0
1
0
[PATCH v5 1/5] ntdll: Check for unsupported socket protocol+option combinations
by Alex Henrie 18 Aug '21
by Alex Henrie 18 Aug '21
18 Aug '21
Windows supports none of these options on TCP. Linux supports all of
them on TCP. Mac OS supports some of them on TCP, but sets EOPNOTSUPP
instead of EINVAL for the ones that it doesn't support. So, Wine needs
to do its own check for whether the option may be used with the socket.
Signed-off-by: Alex Henrie <alexhenrie24(a)gmail.com>
---
v5:
- Allow these options to work with raw sockets in addition to UDP
sockets
- Whether getting or setting the option, always do the check
- Don't touch the IO status block
---
dlls/ntdll/unix/socket.c | 99 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 98 insertions(+), 1 deletion(-)
diff --git a/dlls/ntdll/unix/socket.c b/dlls/ntdll/unix/socket.c
index 1ac4365c012..2382794a830 100644
--- a/dlls/ntdll/unix/socket.c
+++ b/dlls/ntdll/unix/socket.c
@@ -1179,7 +1179,7 @@ static NTSTATUS do_getsockopt( HANDLE handle, IO_STATUS_BLOCK *io, int level,
ret = getsockopt( fd, level, option, out_buffer, &len );
if (needs_close) close( fd );
if (ret) return sock_errno_to_status( errno );
- io->Information = len;
+ if (io) io->Information = len;
return STATUS_SUCCESS;
}
@@ -1200,6 +1200,15 @@ static NTSTATUS do_setsockopt( HANDLE handle, IO_STATUS_BLOCK *io, int level,
}
+static int get_sock_type( HANDLE handle )
+{
+ int sock_type;
+ if (do_getsockopt( handle, NULL, SOL_SOCKET, SO_TYPE, &sock_type, sizeof(sock_type) ) != STATUS_SUCCESS)
+ return -1;
+ return sock_type;
+}
+
+
NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc_user, IO_STATUS_BLOCK *io,
ULONG code, void *in_buffer, ULONG in_size, void *out_buffer, ULONG out_size )
{
@@ -1767,22 +1776,46 @@ NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc
#endif
case IOCTL_AFD_WINE_GET_IP_MULTICAST_IF:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_IF, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IP_MULTICAST_IF:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_IF, in_buffer, in_size );
+ }
case IOCTL_AFD_WINE_GET_IP_MULTICAST_LOOP:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_LOOP, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IP_MULTICAST_LOOP:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_LOOP, in_buffer, in_size );
+ }
case IOCTL_AFD_WINE_GET_IP_MULTICAST_TTL:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_TTL, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IP_MULTICAST_TTL:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IP, IP_MULTICAST_TTL, in_buffer, in_size );
+ }
case IOCTL_AFD_WINE_GET_IP_OPTIONS:
return do_getsockopt( handle, io, IPPROTO_IP, IP_OPTIONS, out_buffer, out_size );
@@ -1792,16 +1825,32 @@ NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc
#ifdef IP_PKTINFO
case IOCTL_AFD_WINE_GET_IP_PKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IP, IP_PKTINFO, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IP_PKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IP, IP_PKTINFO, in_buffer, in_size );
+ }
#elif defined(IP_RECVDSTADDR)
case IOCTL_AFD_WINE_GET_IP_PKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IP, IP_RECVDSTADDR, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IP_PKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IP, IP_RECVDSTADDR, in_buffer, in_size );
+ }
#endif
case IOCTL_AFD_WINE_GET_IP_TOS:
@@ -1890,45 +1939,93 @@ NTSTATUS sock_ioctl( HANDLE handle, HANDLE event, PIO_APC_ROUTINE apc, void *apc
#endif
case IOCTL_AFD_WINE_GET_IPV6_MULTICAST_HOPS:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_MULTICAST_HOPS:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, in_buffer, in_size );
+ }
case IOCTL_AFD_WINE_GET_IPV6_MULTICAST_IF:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_IF, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_MULTICAST_IF:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_IF, in_buffer, in_size );
+ }
case IOCTL_AFD_WINE_GET_IPV6_MULTICAST_LOOP:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_MULTICAST_LOOP:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_MULTICAST_LOOP, in_buffer, in_size );
+ }
#ifdef IPV6_RECVHOPLIMIT
case IOCTL_AFD_WINE_GET_IPV6_RECVHOPLIMIT:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_RECVHOPLIMIT:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVHOPLIMIT, in_buffer, in_size );
+ }
#endif
#ifdef IPV6_RECVPKTINFO
case IOCTL_AFD_WINE_GET_IPV6_RECVPKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVPKTINFO, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_RECVPKTINFO:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVPKTINFO, in_buffer, in_size );
+ }
#endif
#ifdef IPV6_RECVTCLASS
case IOCTL_AFD_WINE_GET_IPV6_RECVTCLASS:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_getsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVTCLASS, out_buffer, out_size );
+ }
case IOCTL_AFD_WINE_SET_IPV6_RECVTCLASS:
+ {
+ int sock_type = get_sock_type( handle );
+ if (sock_type != SOCK_DGRAM && sock_type != SOCK_RAW) return STATUS_INVALID_PARAMETER;
return do_setsockopt( handle, io, IPPROTO_IPV6, IPV6_RECVTCLASS, in_buffer, in_size );
+ }
#endif
case IOCTL_AFD_WINE_GET_IPV6_UNICAST_HOPS:
--
2.32.0
3
11
[PATCH v2 1/3] setupapi: Use a struct driver instead of individual local variables.
by Rémi Bernon 18 Aug '21
by Rémi Bernon 18 Aug '21
18 Aug '21
In enum_compat_drivers_from_file.
Signed-off-by: Rémi Bernon <rbernon(a)codeweavers.com>
---
v2: Rewording PATCH 1 (hopefully it's better).
dlls/setupapi/devinst.c | 37 ++++++++++++++++++++-----------------
1 file changed, 20 insertions(+), 17 deletions(-)
diff --git a/dlls/setupapi/devinst.c b/dlls/setupapi/devinst.c
index 91001976edd..baef28ac130 100644
--- a/dlls/setupapi/devinst.c
+++ b/dlls/setupapi/devinst.c
@@ -4644,9 +4644,10 @@ static BOOL version_is_compatible(const WCHAR *version)
static void enum_compat_drivers_from_file(struct device *device, const WCHAR *path)
{
static const WCHAR manufacturerW[] = {'M','a','n','u','f','a','c','t','u','r','e','r',0};
- WCHAR mfg_name[LINE_LEN], mfg_key[LINE_LEN], mfg_key_ext[LINE_LEN], id[MAX_DEVICE_ID_LEN], version[MAX_DEVICE_ID_LEN];
+ WCHAR mfg_key[LINE_LEN], id[MAX_DEVICE_ID_LEN], version[MAX_DEVICE_ID_LEN];
+ DWORD i, j, k, driver_count = device->driver_count;
+ struct driver driver, *drivers = device->drivers;
INFCONTEXT ctx;
- DWORD i, j, k;
HINF hinf;
TRACE("Enumerating drivers from %s.\n", debugstr_w(path));
@@ -4654,11 +4655,13 @@ static void enum_compat_drivers_from_file(struct device *device, const WCHAR *pa
if ((hinf = SetupOpenInfFileW(path, NULL, INF_STYLE_WIN4, NULL)) == INVALID_HANDLE_VALUE)
return;
+ lstrcpyW(driver.inf_path, path);
+
for (i = 0; SetupGetLineByIndexW(hinf, manufacturerW, i, &ctx); ++i)
{
- SetupGetStringFieldW(&ctx, 0, mfg_name, ARRAY_SIZE(mfg_name), NULL);
+ SetupGetStringFieldW(&ctx, 0, driver.manufacturer, ARRAY_SIZE(driver.manufacturer), NULL);
if (!SetupGetStringFieldW(&ctx, 1, mfg_key, ARRAY_SIZE(mfg_key), NULL))
- lstrcpyW(mfg_key, mfg_name);
+ lstrcpyW(mfg_key, driver.manufacturer);
if (SetupGetFieldCount(&ctx) >= 2)
{
@@ -4675,37 +4678,37 @@ static void enum_compat_drivers_from_file(struct device *device, const WCHAR *pa
continue;
}
- if (!SetupDiGetActualSectionToInstallW(hinf, mfg_key, mfg_key_ext, ARRAY_SIZE(mfg_key_ext), NULL, NULL))
+ if (!SetupDiGetActualSectionToInstallW(hinf, mfg_key, driver.mfg_key,
+ ARRAY_SIZE(driver.mfg_key), NULL, NULL))
{
WARN("Failed to find section for %s, skipping.\n", debugstr_w(mfg_key));
continue;
}
- for (j = 0; SetupGetLineByIndexW(hinf, mfg_key_ext, j, &ctx); ++j)
+ for (j = 0; SetupGetLineByIndexW(hinf, driver.mfg_key, j, &ctx); ++j)
{
for (k = 2; SetupGetStringFieldW(&ctx, k, id, ARRAY_SIZE(id), NULL); ++k)
{
if (device_matches_id(device, HardwareId, id) || device_matches_id(device, CompatibleIDs, id))
{
- unsigned int count = ++device->driver_count;
-
- device->drivers = heap_realloc(device->drivers, count * sizeof(*device->drivers));
- lstrcpyW(device->drivers[count - 1].inf_path, path);
- lstrcpyW(device->drivers[count - 1].manufacturer, mfg_name);
- lstrcpyW(device->drivers[count - 1].mfg_key, mfg_key_ext);
- SetupGetStringFieldW(&ctx, 0, device->drivers[count - 1].description,
- ARRAY_SIZE(device->drivers[count - 1].description), NULL);
- SetupGetStringFieldW(&ctx, 1, device->drivers[count - 1].section,
- ARRAY_SIZE(device->drivers[count - 1].section), NULL);
+ SetupGetStringFieldW(&ctx, 0, driver.description, ARRAY_SIZE(driver.description), NULL);
+ SetupGetStringFieldW(&ctx, 1, driver.section, ARRAY_SIZE(driver.section), NULL);
TRACE("Found compatible driver: manufacturer %s, desc %s.\n",
- debugstr_w(mfg_name), debugstr_w(device->drivers[count - 1].description));
+ debugstr_w(driver.manufacturer), debugstr_w(driver.description));
+
+ driver_count++;
+ drivers = heap_realloc(drivers, driver_count * sizeof(*drivers));
+ drivers[driver_count - 1] = driver;
}
}
}
}
SetupCloseInfFile(hinf);
+
+ device->drivers = drivers;
+ device->driver_count = driver_count;
}
/***********************************************************************
--
2.32.0
2
5
[PATCH v2 1/2] dsound: Commit next audio chunk between play cursor and write cursor to playing.
by Eduard Permyakov 18 Aug '21
by Eduard Permyakov 18 Aug '21
18 Aug '21
This region of the audio buffer is forbidden to be written to by the
DirectSound specification. The documentation states: "The write cursor
is the point after which it is safe to write data into the buffer. The
block between the play cursor and the write cursor is already committed
to be played, and cannot be changed safely." However, some applications
still do this, which has lead to audio glitches only when using the Wine
DirectSound implementation. Experiments showed that the native DirctSound
implementation will still play the old audio the first time around when the
buffer region gets overwritten. Use an approach of copying the next forbidden
region into a "committed buffer" to add the same behavior to the Wine
implementation.
Signed-off-by: Eduard Permyakov <epermyakov(a)codeweavers.com>
---
dlls/dsound/buffer.c | 8 ++++++++
dlls/dsound/dsound_convert.c | 30 ++++++++++++++++++++----------
dlls/dsound/dsound_private.h | 5 ++++-
dlls/dsound/mixer.c | 19 +++++++++++++++++++
4 files changed, 51 insertions(+), 11 deletions(-)
diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c
index dc3b54906ce..df8962f1c0f 100644
--- a/dlls/dsound/buffer.c
+++ b/dlls/dsound/buffer.c
@@ -1081,6 +1081,13 @@ HRESULT secondarybuffer_create(DirectSoundDevice *device, const DSBUFFERDESC *ds
/* calculate fragment size and write lead */
DSOUND_RecalcFormat(dsb);
+ dsb->committedbuff = HeapAlloc(GetProcessHeap(), 0, dsb->writelead);
+ if(!dsb->committedbuff) {
+ IDirectSoundBuffer8_Release(&dsb->IDirectSoundBuffer8_iface);
+ return DSERR_OUTOFMEMORY;
+ }
+ FillMemory(dsb->committedbuff, dsb->writelead, dsbd->lpwfxFormat->wBitsPerSample == 8 ? 128 : 0);
+
if (dsb->dsbd.dwFlags & DSBCAPS_CTRL3D) {
dsb->ds3db_ds3db.dwSize = sizeof(DS3DBUFFER);
dsb->ds3db_ds3db.vPosition.x = 0.0;
@@ -1135,6 +1142,7 @@ void secondarybuffer_destroy(IDirectSoundBufferImpl *This)
HeapFree(GetProcessHeap(), 0, This->notifies);
HeapFree(GetProcessHeap(), 0, This->pwfx);
+ HeapFree(GetProcessHeap(), 0, This->committedbuff);
if (This->filters) {
int i;
diff --git a/dlls/dsound/dsound_convert.c b/dlls/dsound/dsound_convert.c
index 4735178a9a8..fc2b0cd0797 100644
--- a/dlls/dsound/dsound_convert.c
+++ b/dlls/dsound/dsound_convert.c
@@ -55,17 +55,27 @@ WINE_DEFAULT_DEBUG_CHANNEL(dsound);
#define le32(x) (x)
#endif
+static BYTE *buff_byte(const IDirectSoundBufferImpl *dsb, DWORD offset)
+{
+ if(offset >= dsb->sec_mixpos && offset < dsb->sec_mixpos + dsb->writelead) {
+ return (BYTE*)dsb->committedbuff + (offset - dsb->sec_mixpos);
+ }else if(offset < (dsb->sec_mixpos + dsb->writelead) % dsb->buflen) {
+ return (BYTE*)dsb->committedbuff + (dsb->buflen - dsb->sec_mixpos + offset);
+ }else{
+ return dsb->buffer->memory + offset;
+ }
+}
+
static float get8(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
{
- const BYTE* buf = dsb->buffer->memory;
- buf += pos + channel;
+ const BYTE *buf = buff_byte(dsb, pos + channel);
return (buf[0] - 0x80) / (float)0x80;
}
static float get16(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
{
- const BYTE* buf = dsb->buffer->memory;
- const SHORT *sbuf = (const SHORT*)(buf + pos + 2 * channel);
+ const BYTE *buf = buff_byte(dsb, pos + 2 * channel);
+ const SHORT *sbuf = (const SHORT*)(buf);
SHORT sample = (SHORT)le16(*sbuf);
return sample / (float)0x8000;
}
@@ -73,8 +83,8 @@ static float get16(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
static float get24(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
{
LONG sample;
- const BYTE* buf = dsb->buffer->memory;
- buf += pos + 3 * channel;
+ const BYTE *buf = buff_byte(dsb, pos + 3 * channel);
+
/* The next expression deliberately has an overflow for buf[2] >= 0x80,
this is how negative values are made.
*/
@@ -84,16 +94,16 @@ static float get24(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
static float get32(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
{
- const BYTE* buf = dsb->buffer->memory;
- const LONG *sbuf = (const LONG*)(buf + pos + 4 * channel);
+ const BYTE *buf = buff_byte(dsb, pos + 4 * channel);
+ const LONG *sbuf = (const LONG*)(buf);
LONG sample = le32(*sbuf);
return sample / (float)0x80000000U;
}
static float getieee32(const IDirectSoundBufferImpl *dsb, DWORD pos, DWORD channel)
{
- const BYTE* buf = dsb->buffer->memory;
- const float *sbuf = (const float*)(buf + pos + 4 * channel);
+ const BYTE *buf = buff_byte(dsb, pos + 4 * channel);
+ const float *sbuf = (const float*)(buf);
/* The value will be clipped later, when put into some non-float buffer */
return *sbuf;
}
diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h
index bdb9ebee544..a79d62c54da 100644
--- a/dlls/dsound/dsound_private.h
+++ b/dlls/dsound/dsound_private.h
@@ -153,7 +153,10 @@ struct IDirectSoundBufferImpl
LONG64 freqAccNum;
/* used for mixing */
DWORD sec_mixpos;
-
+ /* Holds a copy of the next 'writelead' bytes, to be used for mixing. This makes it
+ * so that these bytes get played once even if this region of the buffer gets overwritten,
+ * which is more in-line with native DirectSound behavior. */
+ LPVOID committedbuff;
/* IDirectSoundNotify fields */
LPDSBPOSITIONNOTIFY notifies;
int nrofnotifies;
diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c
index 124d1e4fba1..32656fbd618 100644
--- a/dlls/dsound/mixer.c
+++ b/dlls/dsound/mixer.c
@@ -391,6 +391,18 @@ static void cp_fields(IDirectSoundBufferImpl *dsb, UINT count, LONG64 *freqAccNu
dsb->sec_mixpos = ipos;
}
+static void copy_circular(VOID *dstbuff, VOID *srcbuff, DWORD srcoff, DWORD srcsize, DWORD cpysize)
+{
+ DWORD overflow;
+ if(cpysize > srcsize - srcoff) {
+ overflow = cpysize - (srcsize - srcoff);
+ memcpy(dstbuff, (BYTE*)srcbuff + srcoff, srcsize - srcoff);
+ memcpy((BYTE*)dstbuff + (srcsize - srcoff), srcbuff, overflow);
+ }else{
+ memcpy(dstbuff, (BYTE*)srcbuff + srcoff, cpysize);
+ }
+}
+
/**
* Calculate the distance between two buffer offsets, taking wraparound
* into account.
@@ -518,6 +530,8 @@ static DWORD DSOUND_MixInBuffer(IDirectSoundBufferImpl *dsb, float *mix_buffer,
INT ilen = DSOUND_BufPtrDiff(dsb->buflen, dsb->sec_mixpos, oldpos);
DSOUND_CheckEvent(dsb, oldpos, ilen);
}
+ TRACE("committing %u bytes from offset %u\n", dsb->writelead, dsb->sec_mixpos);
+ copy_circular(dsb->committedbuff, dsb->buffer->memory, dsb->sec_mixpos, dsb->buflen, dsb->writelead);
return frames;
}
@@ -551,6 +565,11 @@ static DWORD DSOUND_MixOne(IDirectSoundBufferImpl *dsb, float *mix_buffer, DWORD
}
}
+ if(dsb->leadin) {
+ TRACE("committing %u bytes from offset %u\n", dsb->writelead, dsb->sec_mixpos);
+ copy_circular(dsb->committedbuff, dsb->buffer->memory, dsb->sec_mixpos, dsb->buflen, dsb->writelead);
+ }
+
dsb->leadin = FALSE;
TRACE("frames (primary) = %i\n", frames);
--
2.17.1
2
2
18 Aug '21
Signed-off-by: Atharva Nimbalkar <atharvakn(a)gmail.com>
---
include/vkd3d_shader.h | 4 ++++
libs/vkd3d-shader/vkd3d_shader_main.c | 10 ++++++++++
libs/vkd3d-shader/vkd3d_shader_private.h | 2 ++
programs/vkd3d-compiler/main.c | 3 +++
4 files changed, 19 insertions(+)
diff --git a/include/vkd3d_shader.h b/include/vkd3d_shader.h
index 5092fac..58e507b 100644
--- a/include/vkd3d_shader.h
+++ b/include/vkd3d_shader.h
@@ -491,6 +491,10 @@ enum vkd3d_shader_target_type
* the format used for Direct3D shader model 4 and 5 shaders.
*/
VKD3D_SHADER_TARGET_DXBC_TPF,
+ /**
+ * An 'OpenGL Shading Language' shader.
+ */
+ VKD3D_SHADER_TARGET_GLSL,
VKD3D_FORCE_32_BIT_ENUM(VKD3D_SHADER_TARGET_TYPE),
};
diff --git a/libs/vkd3d-shader/vkd3d_shader_main.c b/libs/vkd3d-shader/vkd3d_shader_main.c
index 78312a1..a9b5d0a 100644
--- a/libs/vkd3d-shader/vkd3d_shader_main.c
+++ b/libs/vkd3d-shader/vkd3d_shader_main.c
@@ -1032,6 +1032,15 @@ static int compile_dxbc_tpf(const struct vkd3d_shader_compile_info *compile_info
return ret;
}
+ if (compile_info->target_type == VKD3D_SHADER_TARGET_GLSL)
+ {
+ vkd3d_shader_error(message_context, NULL, VKD3D_SHADER_ERROR_GLSL_INTERNAL,
+ "Internal compiler error: Unhandled instruction.");
+ vkd3d_shader_parser_destroy(&parser);
+ vkd3d_shader_free_scan_descriptor_info(&scan_descriptor_info);
+ return VKD3D_ERROR;
+ }
+
if (!(spirv_compiler = vkd3d_dxbc_compiler_create(&parser.shader_version,
&parser.shader_desc, compile_info, &scan_descriptor_info, message_context)))
{
@@ -1280,6 +1289,7 @@ const enum vkd3d_shader_target_type *vkd3d_shader_get_supported_target_types(
VKD3D_SHADER_TARGET_SPIRV_TEXT,
#endif
VKD3D_SHADER_TARGET_D3D_ASM,
+ VKD3D_SHADER_TARGET_GLSL,
};
static const enum vkd3d_shader_target_type hlsl_types[] =
diff --git a/libs/vkd3d-shader/vkd3d_shader_private.h b/libs/vkd3d-shader/vkd3d_shader_private.h
index 8550380..b490b9c 100644
--- a/libs/vkd3d-shader/vkd3d_shader_private.h
+++ b/libs/vkd3d-shader/vkd3d_shader_private.h
@@ -115,6 +115,8 @@ enum vkd3d_shader_error
VKD3D_SHADER_ERROR_HLSL_NOT_IMPLEMENTED = 5017,
VKD3D_SHADER_WARNING_HLSL_IMPLICIT_TRUNCATION = 5300,
+
+ VKD3D_SHADER_ERROR_GLSL_INTERNAL = 6000,
};
enum vkd3d_shader_opcode
diff --git a/programs/vkd3d-compiler/main.c b/programs/vkd3d-compiler/main.c
index fb19a70..71f90f8 100644
--- a/programs/vkd3d-compiler/main.c
+++ b/programs/vkd3d-compiler/main.c
@@ -90,6 +90,9 @@ target_type_info[] =
"dxbc-tpf", "A 'Tokenized Program Format' shader embedded in a DXBC container.\n"
" This is the format used for Direct3D shader model 4 and 5 shaders.\n",
true},
+ {VKD3D_SHADER_TARGET_GLSL,
+ "glsl", "An 'OpenGL Shading Language' shader.\n",
+ false}
};
static bool read_shader(struct vkd3d_shader_code *shader, FILE *f)
--
2.32.0
5
21
18 Aug '21
If the source and destination are both in a specific PCM format (1 channel, 16bit), acmStreamOpen will select the GSM 6.10 driver in preference to the built-in, causing incorrect conversion.
Signed-off-by: Hiroki Awata <castaneai(a)by.black>
---
dlls/msacm32/tests/msacm.c | 1 +
dlls/msgsm32.acm/msgsm32.c | 3 +++
2 files changed, 4 insertions(+)
diff --git a/dlls/msacm32/tests/msacm.c b/dlls/msacm32/tests/msacm.c
index 04b4e090820..82ddb430cd7 100644
--- a/dlls/msacm32/tests/msacm.c
+++ b/dlls/msacm32/tests/msacm.c
@@ -1056,6 +1056,7 @@ struct stream_output
static const struct stream_output expected_output[] = {
/* #0: Identical conversion */
{{WAVE_FORMAT_PCM, 1, 8000, 8000, 1, 8}, {WAVE_FORMAT_PCM, 1, 8000, 8000, 1, 8}, {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}, 64, FALSE},
+ {{WAVE_FORMAT_PCM, 1, 44100, 88200, 2, 16}, {WAVE_FORMAT_PCM, 1, 44100, 88200, 2, 16}, {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63}, 64, FALSE},
/* #1: 1 -> 2 channels */
{{WAVE_FORMAT_PCM, 1, 8000, 8000, 1, 8}, {WAVE_FORMAT_PCM, 2, 8000, 16000, 2, 8}, {0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,49,49,50,50,51,51,52,52,53,53,54,54,55,55,56,56,57,57,58,58,59,59,60,60,61,61,62,62,63,63}, 128, FALSE},
diff --git a/dlls/msgsm32.acm/msgsm32.c b/dlls/msgsm32.acm/msgsm32.c
index bd54aa4fb36..d1d4c01d0e7 100644
--- a/dlls/msgsm32.acm/msgsm32.c
+++ b/dlls/msgsm32.acm/msgsm32.c
@@ -364,6 +364,9 @@ static LRESULT GSM_StreamOpen(PACMDRVSTREAMINSTANCE adsi)
{
int used = 1;
gsm r;
+ if (adsi->pwfxSrc->wFormatTag != WAVE_FORMAT_GSM610 && adsi->pwfxDst->wFormatTag != WAVE_FORMAT_GSM610)
+ return MMSYSERR_NOTSUPPORTED;
+
if (!GSM_FormatValidate(adsi->pwfxSrc) || !GSM_FormatValidate(adsi->pwfxDst))
return MMSYSERR_NOTSUPPORTED;
--
2.27.0
2
1
Signed-off-by: Piotr Caban <piotr(a)codeweavers.com>
---
dlls/msvcr100/msvcr100.spec | 4 ++--
dlls/msvcr110/msvcr110.spec | 4 ++--
dlls/msvcr120/msvcr120.spec | 4 ++--
dlls/msvcrt/concurrency.c | 19 +++++++++++++++++++
dlls/msvcrt/cpp.c | 23 -----------------------
5 files changed, 25 insertions(+), 29 deletions(-)
1
0