Hi Jukka,

> The alignment macros are copied from Bluez.
> ---
>  Makefile.am       |   2 +-
>  gdhcp/unaligned.h | 116 
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 117 insertions(+), 1 deletion(-)
>  create mode 100644 gdhcp/unaligned.h
> 
> diff --git a/Makefile.am b/Makefile.am
> index 31a42e4..b845d6e 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -26,7 +26,7 @@ gdbus_sources = gdbus/gdbus.h gdbus/mainloop.c 
> gdbus/watch.c \
>                                       gdbus/object.c gdbus/polkit.c
>  
>  gdhcp_sources = gdhcp/gdhcp.h gdhcp/common.h gdhcp/common.c gdhcp/client.c \
> -             gdhcp/server.c gdhcp/ipv4ll.h gdhcp/ipv4ll.c
> +             gdhcp/server.c gdhcp/ipv4ll.h gdhcp/ipv4ll.c gdhcp/unaligned.h
>  
>  gweb_sources = gweb/gweb.h gweb/gweb.c gweb/gresolv.h gweb/gresolv.c
>  
> diff --git a/gdhcp/unaligned.h b/gdhcp/unaligned.h
> new file mode 100644
> index 0000000..5a4cce3
> --- /dev/null
> +++ b/gdhcp/unaligned.h
> @@ -0,0 +1,116 @@
> +/*
> + *
> + *  Connection Manager
> + *
> + *  Copyright (C) 2012  Intel Corporation. All rights reserved.
> + *
> + *  This program is free software; you can redistribute it and/or modify
> + *  it under the terms of the GNU General Public License version 2 as
> + *  published by the Free Software Foundation.
> + *
> + *  This program is distributed in the hope that it will be useful,
> + *  but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *  GNU General Public License for more details.
> + *
> + *  You should have received a copy of the GNU General Public License
> + *  along with this program; if not, write to the Free Software
> + *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  
> USA
> + *
> + */
> +
> +#ifndef __CONNMAN_UNALIGNED_H
> +#define __CONNMAN_UNALIGNED_H
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif

no protectors for private includes. Neither circular inclusion, not C++.

> +
> +#include <endian.h>
> +#include <byteswap.h>
> +
> +#define get_unaligned(ptr)                   \
> +({                                           \
> +     struct __attribute__((packed)) {        \
> +             typeof(*(ptr)) __v;             \
> +     } *__p = (typeof(__p)) (ptr);           \
> +     __p->__v;                               \
> +})
> +
> +#define put_unaligned(val, ptr)                      \
> +do {                                         \
> +     struct __attribute__((packed)) {        \
> +             typeof(*(ptr)) __v;             \
> +     } *__p = (typeof(__p)) (ptr);           \
> +     __p->__v = (val);                       \
> +} while(0)
> +
> +#if __BYTE_ORDER == __LITTLE_ENDIAN
> +static inline uint64_t get_le64(const void *ptr)
> +{
> +     return get_unaligned((const uint64_t *) ptr);
> +}
> +
> +static inline uint64_t get_be64(const void *ptr)
> +{
> +     return bswap_64(get_unaligned((const uint64_t *) ptr));
> +}
> +
> +static inline uint32_t get_le32(const void *ptr)
> +{
> +     return get_unaligned((const uint32_t *) ptr);
> +}
> +
> +static inline uint32_t get_be32(const void *ptr)
> +{
> +     return bswap_32(get_unaligned((const uint32_t *) ptr));
> +}
> +
> +static inline uint16_t get_le16(const void *ptr)
> +{
> +     return get_unaligned((const uint16_t *) ptr);
> +}
> +
> +static inline uint16_t get_be16(const void *ptr)
> +{
> +     return bswap_16(get_unaligned((const uint16_t *) ptr));
> +}
> +#elif __BYTE_ORDER == __BIG_ENDIAN
> +static inline uint64_t get_le64(const void *ptr)
> +{
> +     return bswap_64(get_unaligned((const uint64_t *) ptr));
> +}
> +
> +static inline uint64_t get_be64(const void *ptr)
> +{
> +     return get_unaligned((const uint64_t *) ptr);
> +}
> +
> +static inline uint32_t get_le32(const void *ptr)
> +{
> +     return bswap_32(get_unaligned((const uint32_t *) ptr));
> +}
> +
> +static inline uint32_t get_be32(const void *ptr)
> +{
> +     return get_unaligned((const uint32_t *) ptr);
> +}
> +
> +static inline uint16_t get_le16(const void *ptr)
> +{
> +     return bswap_16(get_unaligned((const uint16_t *) ptr));
> +}
> +
> +static inline uint16_t get_be16(const void *ptr)
> +{
> +     return get_unaligned((const uint16_t *) ptr);
> +}
> +#else
> +#error "Unknown byte order"
> +#endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* __CONNMAN_UNALIGNED_H */

Otherwise is nicely clean.

Regards

Marcel


_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to