I didn't know about, or had forgotten, the GCC builtin. But we're not using uint32_byteswap() anywhere in an inner loop, so I think I'll just leave this code as-is for now.
I'll push this in a minute, thank you! On Tue, Nov 26, 2013 at 03:21:05PM -0800, Jarno Rajahalme wrote: > LGTM, and maybe it?s not worth trying to use a GCC builtin for this. > > Acked-by: Jarno Rajahalme <jrajaha...@nicira.com> > > Jarno > > On Nov 22, 2013, at 1:37 PM, Ben Pfaff <b...@nicira.com> wrote: > > > pcap_read() can use it whether we're big-endian or not. > > > > Signed-off-by: Ben Pfaff <b...@nicira.com> > > --- > > lib/byte-order.h | 4 +--- > > lib/pcap-file.c | 6 ++---- > > 2 files changed, 3 insertions(+), 7 deletions(-) > > > > diff --git a/lib/byte-order.h b/lib/byte-order.h > > index f9be78b..352f91e 100644 > > --- a/lib/byte-order.h > > +++ b/lib/byte-order.h > > @@ -1,5 +1,5 @@ > > /* > > - * Copyright (c) 2008, 2010, 2011 Nicira, Inc. > > + * Copyright (c) 2008, 2010, 2011, 2013 Nicira, Inc. > > * > > * Licensed under the Apache License, Version 2.0 (the "License"); > > * you may not use this file except in compliance with the License. > > @@ -40,7 +40,6 @@ ovs_be64 htonll(uint64_t); > > uint64_t ntohll(ovs_be64); > > #endif > > > > -#if defined(WORDS_BIGENDIAN) > > static inline uint32_t > > uint32_byteswap(uint32_t crc) { > > return (((crc & 0x000000ff) << 24) | > > @@ -48,7 +47,6 @@ uint32_byteswap(uint32_t crc) { > > ((crc & 0x00ff0000) >> 8) | > > ((crc & 0xff000000) >> 24)); > > } > > -#endif > > > > /* These macros may substitute for htons(), htonl(), and htonll() in > > contexts > > * where function calls are not allowed, such as case labels. They should > > not > > diff --git a/lib/pcap-file.c b/lib/pcap-file.c > > index 700cdea..fbb0751 100644 > > --- a/lib/pcap-file.c > > +++ b/lib/pcap-file.c > > @@ -21,6 +21,7 @@ > > #include <stdlib.h> > > #include <string.h> > > #include <sys/stat.h> > > +#include "byte-order.h" > > #include "compiler.h" > > #include "ofpbuf.h" > > #include "vlog.h" > > @@ -151,10 +152,7 @@ pcap_read(FILE *file, struct ofpbuf **bufp) > > /* Calculate length. */ > > len = prh.incl_len; > > if (len > 0xffff) { > > - uint32_t swapped_len = (((len & 0xff000000) >> 24) | > > - ((len & 0x00ff0000) >> 8) | > > - ((len & 0x0000ff00) << 8) | > > - ((len & 0x000000ff) << 24)); > > + uint32_t swapped_len = uint32_byteswap(len); > > if (swapped_len > 0xffff) { > > VLOG_WARN("bad packet length %zu or %"PRIu32" " > > "reading pcap file", > > -- > > 1.7.10.4 > > > > _______________________________________________ > > dev mailing list > > dev@openvswitch.org > > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev