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