You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
1.3 KiB
73 lines
1.3 KiB
/** |
|
* 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 <zephyr/net/socket.h> |
|
#define ERR(_name) \ |
|
{ DNS_ ## _name, NSOS_MID_ ## _name } |
|
|
|
#else |
|
|
|
#include <netdb.h> |
|
#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; |
|
}
|
|
|