[PATCH 4/8] Introduce swap_uint{16, 32} functions, used in swap{l, s}

Matt Turner mattst88 at gmail.com
Wed Sep 28 14:20:52 PDT 2011


On Tue, Aug 16, 2011 at 10:58 PM, Matt Turner <mattst88 at gmail.com> wrote:
> Signed-off-by: Matt Turner <mattst88 at gmail.com>
> ---
>  include/misc.h |   30 ++++++++++++++++++++----------
>  1 files changed, 20 insertions(+), 10 deletions(-)
>
> diff --git a/include/misc.h b/include/misc.h
> index d991c0a..6034c72 100644
> --- a/include/misc.h
> +++ b/include/misc.h
> @@ -259,20 +259,30 @@ version_compare(uint16_t a_major, uint16_t a_minor,
>     SwapLongs((CARD32 *)(stuff + 1), LengthRestL(stuff))
>
>  /* byte swap a 32-bit value */
> +static inline void swap_uint32(uint32_t *x)
> +{
> +       char n = ((char *) &x)[0];
                             ^
Incorrect &, I think? Looks like the char* cast was hiding it.

> +       ((char *) x)[0] = ((char *) x)[3];
> +       ((char *) x)[3] = n;
> +       n = ((char *) x)[1];
> +       ((char *) x)[1] = ((char *) x)[2];
> +       ((char *) x)[2] = n;
> +}
> +
>  #define swapl(x) do { \
> -                char n = ((char *) (x))[0];\
> -                ((char *) (x))[0] = ((char *) (x))[3];\
> -                ((char *) (x))[3] = n;\
> -                n = ((char *) (x))[1];\
> -                ((char *) (x))[1] = ((char *) (x))[2];\
> -                ((char *) (x))[2] = n;\
> +               swap_uint32((uint32_t *)(x)); \
>        } while (0)
>
> -/* byte swap a short */
> +/* byte swap a 16-bit value */
> +static inline void swap_uint16(uint16_t *x)
> +{
> +       char  n = ((char *) x)[0];
> +       ((char *) x)[0] = ((char *) x)[1];
> +       ((char *) x)[1] = n;
> +}
> +
>  #define swaps(x) do { \
> -                char  n = ((char *) (x))[0];\
> -                ((char *) (x))[0] = ((char *) (x))[1];\
> -                ((char *) (x))[1] = n;\
> +               swap_uint16((uint16_t *)(x)); \
>        } while (0)
>
>  /* copy 32-bit value from src to dst byteswapping on the way */
> --
> 1.7.3.4


More information about the xorg-devel mailing list