Skip to content

Commit 96e9e61

Browse files
committed
Networking (Windows): print readable error message
1 parent dbc6f70 commit 96e9e61

File tree

4 files changed

+37
-6
lines changed

4 files changed

+37
-6
lines changed

CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,7 @@ elseif(WIN32)
10341034
src/util/windows/version.c
10351035
src/util/platform/FFPlatform_windows.c
10361036
src/util/binary_windows.c
1037+
src/util/debug_windows.c
10371038
)
10381039
elseif(SunOS)
10391040
list(APPEND LIBFASTFETCH_SRC

src/common/networking/networking_windows.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
109109
#ifdef TCP_NODELAY
110110
// Enable TCP_NODELAY to disable Nagle's algorithm
111111
if (setsockopt(state->sockfd, IPPROTO_TCP, TCP_NODELAY, (char*)&flag, sizeof(flag)) != 0) {
112-
FF_DEBUG("Failed to set TCP_NODELAY: %d", WSAGetLastError());
112+
FF_DEBUG("Failed to set TCP_NODELAY: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
113113
} else {
114114
FF_DEBUG("Successfully disabled Nagle's algorithm");
115115
}
@@ -118,7 +118,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
118118
#ifdef TCP_FASTOPEN
119119
// Set TCP Fast Open
120120
if (setsockopt(state->sockfd, IPPROTO_TCP, TCP_FASTOPEN, (char*)&flag, sizeof(flag)) != 0) {
121-
FF_DEBUG("Failed to set TCP_FASTOPEN option: %d", WSAGetLastError());
121+
FF_DEBUG("Failed to set TCP_FASTOPEN option: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
122122
} else {
123123
FF_DEBUG("Successfully set TCP_FASTOPEN option");
124124
}
@@ -141,7 +141,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
141141
.sin_addr.s_addr = INADDR_ANY,
142142
}, sizeof(struct sockaddr_in))) != 0)
143143
{
144-
FF_DEBUG("bind() failed: %d", WSAGetLastError());
144+
FF_DEBUG("bind() failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
145145
closesocket(state->sockfd);
146146
freeaddrinfo(addr);
147147
state->sockfd = INVALID_SOCKET;
@@ -177,7 +177,7 @@ const char* ffNetworkingSendHttpRequest(FFNetworkingState* state, const char* ho
177177

178178
if(!result && WSAGetLastError() != WSA_IO_PENDING)
179179
{
180-
FF_DEBUG("ConnectEx() failed: %d", WSAGetLastError());
180+
FF_DEBUG("ConnectEx() failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
181181
closesocket(state->sockfd);
182182
state->sockfd = INVALID_SOCKET;
183183
return "ConnectEx() failed";
@@ -213,7 +213,7 @@ const char* ffNetworkingRecvHttpResponse(FFNetworkingState* state, FFstrbuf* buf
213213
DWORD transfer, flags;
214214
if (!WSAGetOverlappedResult(state->sockfd, &state->overlapped, &transfer, TRUE, &flags))
215215
{
216-
FF_DEBUG("WSAGetOverlappedResult failed: %d", WSAGetLastError());
216+
FF_DEBUG("WSAGetOverlappedResult failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
217217
closesocket(state->sockfd);
218218
return "WSAGetOverlappedResult() failed";
219219
}
@@ -243,7 +243,7 @@ const char* ffNetworkingRecvHttpResponse(FFNetworkingState* state, FFstrbuf* buf
243243
if (received == 0) {
244244
FF_DEBUG("Connection closed (received=0)");
245245
} else {
246-
FF_DEBUG("Reception failed: %d", WSAGetLastError());
246+
FF_DEBUG("Reception failed: %s", ffDebugWin32Error((DWORD) WSAGetLastError()));
247247
}
248248
break;
249249
}

src/util/debug.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,5 @@ static inline const char* ffFindFileName(const char* file)
2424
#endif
2525

2626
#define FF_DEBUG(format, ...) FF_DEBUG_PRINT(__FILE__, __LINE__, format, ##__VA_ARGS__)
27+
28+
const char* ffDebugWin32Error(unsigned long errorCode);

src/util/debug_windows.c

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
#include "debug.h"
2+
3+
#include <windows.h>
4+
5+
const char* ffDebugWin32Error(DWORD errorCode)
6+
{
7+
static char buffer[256];
8+
9+
DWORD len = FormatMessageA(
10+
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
11+
NULL,
12+
(DWORD) errorCode,
13+
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
14+
buffer,
15+
sizeof(buffer),
16+
NULL);
17+
18+
if (len == 0) {
19+
snprintf(buffer, sizeof(buffer), "Unknown error code (%lu)", errorCode);
20+
} else {
21+
// Remove trailing newline
22+
if (buffer[len - 1] == '\n') buffer[len - 1] = '\0';
23+
if (buffer[len - 2] == '\r') buffer[len - 2] = '\0';
24+
snprintf(buffer + len - 2, sizeof(buffer) - len + 2, " (%lu)", errorCode);
25+
}
26+
27+
return buffer;
28+
}

0 commit comments

Comments
 (0)