Skip to content
Snippets Groups Projects
Commit 1b146e9d authored by Paul Sokolovsky's avatar Paul Sokolovsky
Browse files

py/mpconfig: Introduce reusable MP_HTOBE32(), etc. macros.

Macros to convert big-endian values to host byte order and vice-versa.
These were defined in adhoc way for some ports (e.g. esp8266), allow
reuse, provide default implementations, while allow ports to override.
parent 5b1b80a8
No related branches found
No related tags found
No related merge requests found
......@@ -55,14 +55,13 @@ void *realloc(void *ptr, size_t size) {
return p;
}
#define PLATFORM_HTONL(_n) ((uint32_t)( (((_n) & 0xff) << 24) | (((_n) & 0xff00) << 8) | (((_n) >> 8) & 0xff00) | (((_n) >> 24) & 0xff) ))
#undef htonl
#undef ntohl
uint32_t ntohl(uint32_t netlong) {
return PLATFORM_HTONL(netlong);
return MP_BE32TOH(netlong);
}
uint32_t htonl(uint32_t netlong) {
return PLATFORM_HTONL(netlong);
return MP_HTOBE32(netlong);
}
time_t time(time_t *t) {
......
......@@ -1293,4 +1293,24 @@ typedef double mp_float_t;
#define MP_UNLIKELY(x) __builtin_expect((x), 0)
#endif
#ifndef MP_HTOBE16
#if MP_ENDIANNESS_LITTLE
# define MP_HTOBE16(x) ((uint16_t)( (((x) & 0xff) << 8) | (((x) >> 8) & 0xff) ))
# define MP_BE16TOH(x) MP_HTOBE16(x)
#else
# define MP_HTOBE16(x) (x)
# define MP_BE16TOH(x) (x)
#endif
#endif
#ifndef MP_HTOBE32
#if MP_ENDIANNESS_LITTLE
# define MP_HTOBE32(x) ((uint32_t)( (((x) & 0xff) << 24) | (((x) & 0xff00) << 8) | (((x) >> 8) & 0xff00) | (((x) >> 24) & 0xff) ))
# define MP_BE32TOH(x) MP_HTOBE32(x)
#else
# define MP_HTOBE32(x) (x)
# define MP_BE32TOH(x) (x)
#endif
#endif
#endif // MICROPY_INCLUDED_PY_MPCONFIG_H
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment