On 2017-03-05 01:40, hbelusca@svn.reactos.org wrote:
- /*
* Check whether we actually just retrieved the needed buffer size* because our previous local allocation did fail. If so, allocate* a new buffer and retry again.*/- if ( (!UnicodeQuerySet) && (*lpdwBufferLength >= sizeof(WSAQUERYSETW)) &&
(ErrorCode == SOCKET_ERROR) && (GetLastError() == WSAEFAULT) )
Seems like you'd want to check WSAGetLastError when looking for WSA* error codes.
- {
/* Allocate the buffer we'll use */UnicodeQuerySet = HeapAlloc(WsSockHeap, 0, UnicodeQuerySetSize);if (UnicodeQuerySet){/* Call the Unicode Function */ErrorCode = WSALookupServiceNextW(hLookup,dwControlFlags,&UnicodeQuerySetSize,UnicodeQuerySet);}/** Otherwise the allocation failed and we* fall back into the error checks below.*/- }
- if (ErrorCode == ERROR_SUCCESS) {
/* Not convert to ANSI */
/* Now convert back to ANSI */ ErrorCode = MapUnicodeQuerySetToAnsi(UnicodeQuerySet, lpdwBufferLength, lpqsResults);
if (ErrorCode != ERROR_SUCCESS) SetLastError(ErrorCode);
if (ErrorCode != ERROR_SUCCESS) } else {SetLastError(ErrorCode);@@ -499,10 +542,11 @@ }
/* If we had a local buffer, free it */
- if (UnicodeQuerySet) HeapFree(WsSockHeap, 0, UnicodeQuerySet);
- if (UnicodeQuerySet)
HeapFree(WsSockHeap, 0, UnicodeQuerySet);
HeapFree(NULL) is fine by the way.
/* Return to caller */
- return ErrorCode == ERROR_SUCCESS ? ErrorCode : SOCKET_ERROR;
- return (ErrorCode == ERROR_SUCCESS) ? ErrorCode : SOCKET_ERROR;
}