Swatantra-66 opened a new pull request, #20693:
URL: https://github.com/apache/nuttx/pull/20693
## Summary
Resolves #15752.
`gethostentbyname_r()` previously set `*h_errnop` to `EAI_NONAME` when
`AI_NUMERICHOST` was specified and the hostname was non-numeric. Because
`*h_errnop` is an `h_errno` output parameter used by `gethostbyname_r()` and
`gethostbyname2_r()`, setting `EAI_NONAME` (6) corrupted `h_errno` with an
invalid value.
Additionally, `getaddrinfo()` passed `&ret` as the `h_errnop` argument to
`gethostentbyname_r()`, ignored `gethostentbyname_r()`'s actual return status
(`OK`/`ERROR`), and returned `ret` directly. As a result, `getaddrinfo()`
returned raw `h_errno` values (e.g., `HOST_NOT_FOUND` = 1, `TRY_AGAIN` = 4)
instead of standard POSIX `EAI_xxx` error codes (`EAI_NONAME` = 6, `EAI_AGAIN`
= 2).
This patch:
1. Sets `*h_errnop` to `HOST_NOT_FOUND` (or `TRY_AGAIN` on transient DNS
timeouts/errors) in `gethostentbyname_r()`.
2. Passes a dedicated `&herrno` variable from `getaddrinfo()` to
`gethostentbyname_r()` and checks the function return value.
3. Explicitly maps `h_errno` codes to POSIX `EAI_xxx` codes:
- `HOST_NOT_FOUND` and `NO_DATA` -> `EAI_NONAME`
- `TRY_AGAIN` -> `EAI_AGAIN`
- `NO_RECOVERY` -> `EAI_FAIL`
## Impact
- Corrects `h_errno` reporting in `gethostbyname_r()`, `gethostbyname2_r()`,
`gethostbyname()`, and `gethostbyname2()`.
- Restores POSIX-compliant `EAI_xxx` return codes in `getaddrinfo()`.
## Testing
- Verified code formatting with `tools/checkpatch.sh` (0 errors, 0 warnings).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]