Author: pfg
Date: Mon Jan 13 15:28:39 2014
New Revision: 260591
URL: http://svnweb.freebsd.org/changeset/base/260591

Log:
  MFC r258573:
  
  Removes strict-aliasing warnings from newer GCC in tcpdump.

Modified:
  stable/8/contrib/tcpdump/extract.h
Directory Properties:
  stable/8/contrib/   (props changed)
  stable/8/contrib/tcpdump/   (props changed)

Modified: stable/8/contrib/tcpdump/extract.h
==============================================================================
--- stable/8/contrib/tcpdump/extract.h  Mon Jan 13 15:22:37 2014        
(r260590)
+++ stable/8/contrib/tcpdump/extract.h  Mon Jan 13 15:28:39 2014        
(r260591)
@@ -51,13 +51,25 @@ typedef struct {
        u_int32_t       val;
 } __attribute__((packed)) unaligned_u_int32_t;
 
-#define EXTRACT_16BITS(p) \
-       ((u_int16_t)ntohs(((const unaligned_u_int16_t *)(p))->val))
-#define EXTRACT_32BITS(p) \
-       ((u_int32_t)ntohl(((const unaligned_u_int32_t *)(p))->val))
-#define EXTRACT_64BITS(p) \
-       ((u_int64_t)(((u_int64_t)ntohl(((const unaligned_u_int32_t *)(p) + 
0)->val)) << 32 | \
-                    ((u_int64_t)ntohl(((const unaligned_u_int32_t *)(p) + 
1)->val)) << 0))
+static inline u_int16_t
+EXTRACT_16BITS(const void *p)
+{
+       return ((u_int16_t)ntohs(((const unaligned_u_int16_t *)(p))->val));
+}
+
+static inline u_int32_t
+EXTRACT_32BITS(const void *p)
+{
+       return ((u_int32_t)ntohl(((const unaligned_u_int32_t *)(p))->val));
+}
+
+static inline u_int64_t
+EXTRACT_64BITS(const void *p)
+{
+       return ((u_int64_t)(((u_int64_t)ntohl(((const unaligned_u_int32_t *)(p) 
+ 0)->val)) << 32 | \
+               ((u_int64_t)ntohl(((const unaligned_u_int32_t *)(p) + 1)->val)) 
<< 0));
+
+}
 
 #else /* HAVE___ATTRIBUTE__ */
 /*
@@ -88,13 +100,26 @@ typedef struct {
  * The processor natively handles unaligned loads, so we can just
  * cast the pointer and fetch through it.
  */
-#define EXTRACT_16BITS(p) \
-       ((u_int16_t)ntohs(*(const u_int16_t *)(p)))
-#define EXTRACT_32BITS(p) \
-       ((u_int32_t)ntohl(*(const u_int32_t *)(p)))
-#define EXTRACT_64BITS(p) \
-       ((u_int64_t)(((u_int64_t)ntohl(*((const u_int32_t *)(p) + 0))) << 32 | \
-                    ((u_int64_t)ntohl(*((const u_int32_t *)(p) + 1))) << 0))
+static inline u_int16_t
+EXTRACT_16BITS(const void *p)
+{
+       return ((u_int16_t)ntohs(*(const u_int16_t *)(p)));
+}
+
+static inline u_int32_t
+EXTRACT_32BITS(const void *p)
+{
+       return ((u_int32_t)ntohl(*(const u_int32_t *)(p)));
+}
+
+static inline u_int64_t
+EXTRACT_64BITS(const void *p)
+{
+       return ((u_int64_t)(((u_int64_t)ntohl(*((const u_int32_t *)(p) + 0))) 
<< 32 | \
+               ((u_int64_t)ntohl(*((const u_int32_t *)(p) + 1))) << 0));
+
+}
+
 #endif /* LBL_ALIGN */
 
 #define EXTRACT_24BITS(p) \
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to