mirror of
https://github.com/curl/curl.git
synced 2025-04-18 16:30:45 +08:00
Before this patch, standard `E*` errno codes were redefined on Windows, onto matching winsock2 `WSA*` error codes, which have different values. This broke uses where using the `E*` value in non-socket context, or other places expecting a POSIX `errno`, e.g. file I/O, threads, IDN or interfacing with dependencies. Fix it by introducing a curl-specific `SOCKE*` set of macros that map to `WSA*` on Windows and standard POSIX codes on other platforms. Then verify and update the code to use `SOCKE*` or `E*` macro depending on context. - Add `SOCKE*` macros that map to either winsock2 or POSIX error codes. And use them with `SOCKERRNO` or in contexts requiring platform-dependent socket error codes. This fixes `E*` uses which were supposed be POSIX values, not `WSA*` socket errors, on Windows: - lib/curl_multibyte.c - lib/curl_threads.c - lib/idn.c - lib/vtls/gtls.c - lib/vtls/rustls.c - src/tool_cb_wrt.c - src/tool_dirhie.c - Ban `E*` codes having a `SOCKE*` mapping, via checksrc. Authored-by: Daniel Stenberg - Add exceptions for `E*` codes used in file I/O, or other contexts requiring POSIX error codes. Also: - ftp: fix missing `SOCKEACCES` mapping for Windows. - add `SOCKENOMEM` for `Curl_getaddrinfo()` via `asyn-thread.c`. - tests/server/sockfilt: fix to set `SOCKERRNO` in local `select()` override on Windows. - lib/inet_ntop: fix to return `WSAEINVAL` on Windows, where `ENOSPC` is used on other platforms. To simulate Windows' built-in `inet_ntop()`, as tested on a Win10 machine. Note: - WINE returns `STATUS_INVALID_PARAMETER` = `0xC000000D`. - Microsoft documentation says it returns `WSA_INVALID_PARAMETER` (= `ERROR_INVALID_PARAMETER`) 87: https://learn.microsoft.com/windows/win32/api/ws2tcpip/nf-ws2tcpip-inet_ntop#return-value - lib/inet_ntop: drop redundant `CURL_SETERRNO(ENOSPC)`. `inet_ntop4()` already sets it before returning `NULL`. - replace stray `WSAEWOULDBLOCK` with `USE_WINSOCK` macro to detect winsock2. - move existing `SOCKE*` mappings from `tests/server` to `curl_setup_once.h`. - add missing `EINTR`, `EINVAL` constants for WinCE. Follow-up to abf80aae384319ef9b19ffbd0d69a1fbe7421f1f #16612 Follow-up to d69425ed7d0918aceddd96048b146a9df85638ec #16615 Bug: https://github.com/curl/curl/pull/16553#issuecomment-2704679377 Closes #16621
Packages
This directory and all its subdirectories are for special package information, templates, scripts and docs. The files herein should be of use for those of you who want to package curl in a binary or source format for these platforms.