mirror of
https://github.com/openappsec/openappsec.git
synced 2025-09-30 19:47:44 +03:00
First release of open-appsec source code
This commit is contained in:
48
components/include/byteorder.h
Executable file
48
components/include/byteorder.h
Executable file
@@ -0,0 +1,48 @@
|
||||
#ifndef __BYTEORDER_H__
|
||||
#define __BYTEORDER_H__
|
||||
|
||||
// Byte Order (Net-to-Host, Host-to-Net) operations
|
||||
//
|
||||
// C provides htons, ntohs, htonl, ntohl, but they're not "constexpr" so are unusable in case labels.
|
||||
// C++ proposal N3620 adds some function, but it's not accepted (yet?). It uses templates which are,
|
||||
// IMO, a bit complicated so I chose not to adapt it.
|
||||
|
||||
static inline constexpr uint16_t
|
||||
constHTONS(uint16_t h_ord)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
return ((h_ord>>8) & 0xff) |
|
||||
((h_ord&0xff) << 8);
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
return h_ord;
|
||||
#else
|
||||
#error unknown byte order
|
||||
#endif // __BYTE_ORDER
|
||||
}
|
||||
|
||||
static inline constexpr uint16_t
|
||||
constNTOHS(uint16_t n_ord)
|
||||
{
|
||||
return constHTONS(n_ord); // Same thing
|
||||
}
|
||||
|
||||
static inline constexpr uint32_t
|
||||
constHTONL(uint32_t h_ord)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
return ((constHTONS(h_ord>>16)) & 0xffff) |
|
||||
((constHTONS(h_ord&0xffff)) << 16);
|
||||
#elif __BYTE_ORDER == __BIG_ENDIAN
|
||||
return h_ord;
|
||||
#else
|
||||
#error unknown byte order
|
||||
#endif // __BYTE_ORDER
|
||||
}
|
||||
|
||||
static inline constexpr uint32_t
|
||||
constNTOHL(uint32_t n_ord)
|
||||
{
|
||||
return constHTONL(n_ord); // Same thing
|
||||
}
|
||||
|
||||
#endif // __BYTEORDER_H__
|
Reference in New Issue
Block a user