Ondrej Zajicek <santiago@crfreenet.org> wrote on 2010/04/30 10:19:15:
On Thu, Apr 29, 2010 at 11:57:32PM +0200, Joakim Tjernlund wrote:
Ondrej Zajicek <santiago@crfreenet.org> wrote on 2010/04/29 23:15:22:
On Thu, Apr 29, 2010 at 11:03:32PM +0200, Joakim Tjernlund wrote:
Ondrej, this looks buggy:
+static inline void htonlsab(void *h, void *n, u16 len) { memcpy(n, h, len); }; +static inline void ntohlsab(void *n, void *h, u16 len) { memcpy(h, n, len); };
memcpy is not defined to handle overlapping memory. Best to add: if (n != h) memcpy(...)
Yes, but all usages of htonlsab()/ntohlsab() are non-overlapping. (overlapping/on place usage was replaced with htonlsab1()/ntohlsab1()).
I see, but it would be safer to have that check in case you used them in the wrong way?
I think this is no issue. Even if someone used them in a wrong way (which is improbable, as these functions are used just in a few places), memcpy() would probably do nothing when src==dst (although it is unspecified).
gcc mail list does not agree, memcpy(p, p, len) is a bug and you cannot rely on it. Jocke