74 lines
1.3 KiB
C
74 lines
1.3 KiB
C
|
/**
|
||
|
* 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;
|
||
|
}
|