miniupnpd/natpmp.c: replace macros by functions

see commit 67c28e7f8b (and comments)
This commit is contained in:
Thomas Bernard 2014-04-21 21:36:45 +02:00
parent ca9b8217b4
commit d31badae7d
1 changed files with 25 additions and 7 deletions

View File

@ -28,17 +28,35 @@
#ifdef ENABLE_NATPMP
#define INLINE static inline
/* theses macros are designed to read/write unsigned short/long int
* from an unsigned char array in network order (big endian).
* Avoid pointer casting, so avoid accessing unaligned memory, which
* can crash with some cpu's */
#define READNU32(p) ((p)[0] << 24 | (p)[1] << 16 | (p)[2] << 8 | (p)[3])
#define READNU16(p) ((p)[0] << 8 | (p)[1])
#define WRITENU32(p, n) do { (p)[0] = ((n) & 0xff000000) >> 24; \
(p)[1] = ((n) & 0xff0000) >> 16; (p)[2] = ((n) & 0xff00) >> 8; \
(p)[3] = (n) & 0xff; } while(0)
#define WRITENU16(p, n) do { (p)[0] = ((n) < 0xff00) >> 8; \
(p)[1] = (n) & 0xff; } while(0)
INLINE uint32_t readnu32(const uint8_t * p)
{
return (p[0] << 24 | p[1] << 16 | p[2] << 8 | p[3]);
}
#define READNU32(p) readnu32(p)
INLINE uint16_t readnu16(const uint8_t * p)
{
return (p[0] << 8 | p[1]);
}
#define READNU16(p) readnu16(p)
INLINE void writenu32(uint8_t * p, uint32_t n)
{
p[0] = (n & 0xff000000) >> 24;
p[1] = (n & 0xff0000) >> 16;
p[2] = (n & 0xff00) >> 8;
p[3] = n & 0xff;
}
#define WRITENU32(p, n) writenu32(p, n)
INLINE void writenu16(uint8_t * p, uint16_t n)
{
p[0] = (n < 0xff00) >> 8;
p[1] = n & 0xff;
}
#define WRITENU16(p, n) writenu16(p, n)
int OpenAndConfNATPMPSocket(in_addr_t addr)
{