extern void safeputs(const char *, int);
extern void unaligned_memcpy(void *, const void *, size_t);
+extern int unaligned_memcmp(void *, const void *, size_t);
extern const char *isonsap_string(const u_char *, register u_int);
extern const char *protoid_string(const u_char *);
extern void safeputs(const char *, int);
extern void unaligned_memcpy(void *, const void *, size_t);
+extern int unaligned_memcmp(void *, const void *, size_t);
#define PLURAL_SUFFIX(n) \
(((n) != 1) ? "s" : "")
#endif /*INET6*/
register struct tcp_seq_hash *th;
struct tcp_seq_hash *tcp_seq_hash;
- const void *src, *dst;
+ const struct in_addr *src, *dst;
struct tha tha;
tcp_seq_hash = tcp_seq_hash4;
- /*
- * We use "void *" to keep the compiler from
- * assuming the structures are aligned and
- * generating non-unaligned-safe code for
- * the copies.
- */
- src = (const void *)&ip->ip_src;
- dst = (const void *)&ip->ip_dst;
+ src = &ip->ip_src;
+ dst = &ip->ip_dst;
if (sport > dport)
rev = 1;
else if (sport == dport) {
- if (memcmp(src, dst, sizeof ip->ip_dst) > 0)
+ if (unaligned_memcmp(src, dst, sizeof ip->ip_dst) > 0)
rev = 1;
}
if (rev) {
- memcpy(&tha.src, dst, sizeof ip->ip_dst);
- memcpy(&tha.dst, src, sizeof ip->ip_src);
+ unaligned_memcpy(&tha.src, dst, sizeof ip->ip_dst);
+ unaligned_memcpy(&tha.dst, src, sizeof ip->ip_src);
tha.port = dport << 16 | sport;
} else {
- memcpy(&tha.dst, dst, sizeof ip->ip_dst);
- memcpy(&tha.src, src, sizeof ip->ip_src);
+ unaligned_memcpy(&tha.dst, dst, sizeof ip->ip_dst);
+ unaligned_memcpy(&tha.src, src, sizeof ip->ip_src);
tha.port = sport << 16 | dport;
}
{
memcpy(p, q, l);
}
+
+/* As with memcpy(), so with memcmp(). */
+int
+unaligned_memcmp(void *p, const void *q, size_t l)
+{
+ return (memcmp(p, q, l));
+}
+