/** * Copyright (c) 2023-2024 Marcin Niestroj * * SPDX-License-Identifier: Apache-2.0 * * netdb.h related code common to Zephyr (top: nsos_sockets.c) and Linux * (bottom: nsos_adapt.c). * * It is needed by both sides to share the same macro definitions/values * (prefixed with NSOS_MID_), which is not possible to achieve with two separate * standard libc libraries, since they use different values for the same * symbols. */ #include "nsos_netdb.h" #ifdef __ZEPHYR__ #include #define ERR(_name) \ { DNS_ ## _name, NSOS_MID_ ## _name } #else #include #define ERR(_name) \ { _name, NSOS_MID_ ## _name } #endif #ifndef ARRAY_SIZE #define ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0])) #endif struct nsos_eai_map { int err; int mid_err; }; static const struct nsos_eai_map map[] = { ERR(EAI_BADFLAGS), ERR(EAI_NONAME), ERR(EAI_AGAIN), ERR(EAI_FAIL), ERR(EAI_FAMILY), ERR(EAI_SOCKTYPE), ERR(EAI_SERVICE), ERR(EAI_MEMORY), ERR(EAI_SYSTEM), ERR(EAI_OVERFLOW), }; int eai_to_nsos_mid(int err) { for (int i = 0; i < ARRAY_SIZE(map); i++) { if (map[i].err == err) { return map[i].mid_err; } } return err; } int eai_from_nsos_mid(int err) { for (int i = 0; i < ARRAY_SIZE(map); i++) { if (map[i].mid_err == err) { return map[i].err; } } return err; }