Skip to content

Commit

Permalink
Merge pull request #771 from etcimon/win32-fix
Browse files Browse the repository at this point in the history
Change array declaration style from C to D and fix freeing of ADDRINFOEXW*.
  • Loading branch information
s-ludwig committed Aug 7, 2014
2 parents d788c8d + 1d19cf8 commit d5d934e
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 12 deletions.
2 changes: 1 addition & 1 deletion source/vibe/core/drivers/win32.d
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ final class Win32EventDriver : EventDriver {
case AF_INET: addr.sockAddrInet4 = *cast(sockaddr_in*)addr_ret.ai_addr; break;
case AF_INET6: addr.sockAddrInet6 = *cast(sockaddr_in6*)addr_ret.ai_addr; break;
}
FreeAddrInfoW(addr_ret);
FreeAddrInfoExW(addr_ret);
} else {
auto he = gethostbyname(toUTFz!(immutable(char)*)(host));
socketEnforce(he !is null, "Failed to look up host "~host);
Expand Down
44 changes: 33 additions & 11 deletions source/vibe/internal/win32.d
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ extern(System) nothrow
DWORD NextEntryOffset;
DWORD Action;
DWORD FileNameLength;
WCHAR FileName[1];
WCHAR[1] FileName;
}

BOOL ReadDirectoryChangesW(HANDLE hDirectory, void* lpBuffer, DWORD nBufferLength, BOOL bWatchSubtree, DWORD dwNotifyFilter, LPDWORD lpBytesReturned, void* lpOverlapped, void* lpCompletionRoutine);
Expand Down Expand Up @@ -95,12 +95,12 @@ extern(System) nothrow
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
wchar szProtocol[WSAPROTOCOL_LEN+1];
WCHAR[WSAPROTOCOL_LEN+1] szProtocol;
};

struct WSAPROTOCOLCHAIN {
int ChainLen;
DWORD ChainEntries[MAX_PROTOCOL_CHAIN];
DWORD[MAX_PROTOCOL_CHAIN] ChainEntries;
};

struct WSABUF {
Expand Down Expand Up @@ -179,8 +179,28 @@ extern(System) nothrow
NS_DNS = 12
}


struct WSAPROTOCOL_INFO;
struct WSAPROTOCOL_INFO {
DWORD dwServiceFlags1;
DWORD dwServiceFlags2;
DWORD dwServiceFlags3;
DWORD dwServiceFlags4;
DWORD dwProviderFlags;
GUID ProviderId;
DWORD dwCatalogEntryId;
WSAPROTOCOLCHAIN ProtocolChain;
int iVersion;
int iAddressFamily;
int iMaxSockAddr;
int iMinSockAddr;
int iSocketType;
int iProtocol;
int iProtocolMaxOffset;
int iNetworkByteOrder;
int iSecurityScheme;
DWORD dwMessageSize;
DWORD dwProviderReserved;
CHAR[WSAPROTOCOL_LEN+1] szProtocol;
}
alias sockaddr SOCKADDR;

alias void function(DWORD, DWORD, WSAOVERLAPPEDX*, DWORD) LPWSAOVERLAPPED_COMPLETION_ROUTINEX;
Expand All @@ -194,22 +214,24 @@ extern(System) nothrow
int WSARecv(SOCKET s, WSABUF* lpBuffers, DWORD dwBufferCount, DWORD* lpNumberOfBytesRecvd, DWORD* lpFlags, in WSAOVERLAPPEDX* lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINEX lpCompletionRoutine);
int WSASend(SOCKET s, in WSABUF* lpBuffers, DWORD dwBufferCount, DWORD* lpNumberOfBytesSent, DWORD dwFlags, in WSAOVERLAPPEDX* lpOverlapped, LPWSAOVERLAPPED_COMPLETION_ROUTINEX lpCompletionRoutine);
int WSASendDisconnect(SOCKET s, WSABUF* lpOutboundDisconnectData);
INT WSAStringToAddressW(in LPWSTR AddressString, INT AddressFamily, in WSAPROTOCOL_INFO* lpProtocolInfo, SOCKADDR* lpAddress, INT* lpAddressLength);
INT WSAStringToAddressA(in LPTSTR AddressString, INT AddressFamily, in WSAPROTOCOL_INFO* lpProtocolInfo, SOCKADDR* lpAddress, INT* lpAddressLength);
INT WSAStringToAddressW(in LPWSTR AddressString, INT AddressFamily, in WSAPROTOCOL_INFOW* lpProtocolInfo, SOCKADDR* lpAddress, INT* lpAddressLength);
INT WSAAddressToStringW(in SOCKADDR* lpsaAddress, DWORD dwAddressLength, in WSAPROTOCOL_INFO* lpProtocolInfo, LPWSTR lpszAddressString, DWORD* lpdwAddressStringLength);
int GetAddrInfoExW(LPCWSTR pName, LPCWSTR pServiceName, DWORD dwNameSpace, GUID* lpNspId, const ADDRINFOEXW *pHints, ADDRINFOEXW **ppResult, timeval *timeout, WSAOVERLAPPEDX* lpOverlapped, LPLOOKUPSERVICE_COMPLETION_ROUTINE lpCompletionRoutine, HANDLE* lpNameHandle);
int GetAddrInfoW(LPCWSTR pName, LPCWSTR pServiceName, const ADDRINFOW *pHints, ADDRINFOW **ppResult);
int getaddrinfo(LPCSTR pName, LPCSTR pServiceName, const ADDRINFOA *pHints, ADDRINFOA **ppResult);
void FreeAddrInfoW(ADDRINFOEXW* pAddrInfo);
void FreeAddrInfoW(ADDRINFOW* pAddrInfo);
void FreeAddrInfoExW(ADDRINFOEXW* pAddrInfo);
void freeaddrinfo(ADDRINFOA* ai);
BOOL TransmitFile(SOCKET hSocket, HANDLE hFile, DWORD nNumberOfBytesToWrite, DWORD nNumberOfBytesPerSend, OVERLAPPED* lpOverlapped, LPTRANSMIT_FILE_BUFFERS lpTransmitBuffers, DWORD dwFlags);


struct GUID
{
uint Data1;
ushort Data2;
ushort Data3;
ubyte Data4[8];
DWORD Data1;
WORD Data2;
WORD Data3;
BYTE[8] Data4;
};

enum WM_USER = 0x0400;
Expand Down

0 comments on commit d5d934e

Please sign in to comment.