Added htoun16/32 and untoh16/32 to read/write unaligned network order integers

This commit is contained in:
Martin Willi 2009-12-15 13:39:01 +01:00
parent fc85786921
commit 0be12e3546
1 changed files with 54 additions and 0 deletions

View File

@ -26,6 +26,8 @@
#include <stdlib.h>
#include <stddef.h>
#include <sys/time.h>
#include <arpa/inet.h>
#include <string.h>
#include <enum.h>
@ -320,6 +322,58 @@ bool return_true();
*/
bool return_false();
/**
* Write a 16-bit host order value in network order to an unaligned address.
*
* @param host host order 16-bit value
* @param network unaligned address to write network order value to
*/
static inline void htoun16(void *network, u_int16_t host)
{
host = htons(host);
memcpy(network, &host, sizeof(host));
}
/**
* Write a 32-bit host order value in network order to an unaligned address.
*
* @param host host order 32-bit value
* @param network unaligned address to write network order value to
*/
static inline void htoun32(void *network, u_int32_t host)
{
host = htonl(host);
memcpy(network, &host, sizeof(host));
}
/**
* Read a 16-bit value in network order from an unaligned address to host order.
*
* @param network unaligned address to read network order value from
* @return host order value
*/
static inline u_int16_t untoh16(void *network)
{
u_int16_t tmp;
memcpy(&tmp, network, sizeof(tmp));
return ntohs(tmp);
}
/**
* Read a 32-bit value in network order from an unaligned address to host order.
*
* @param network unaligned address to read network order value from
* @return host order value
*/
static inline u_int32_t untoh32(void *network)
{
u_int32_t tmp;
memcpy(&tmp, network, sizeof(tmp));
return ntohs(tmp);
}
/**
* Special type to count references
*/