Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 25 Sep 2016 19:13:18 -0700
From:      Adrian Chadd <adrian.chadd@gmail.com>
To:        Marcel Moolenaar <marcel@freebsd.org>
Cc:        "src-committers@freebsd.org" <src-committers@freebsd.org>,  "svn-src-all@freebsd.org" <svn-src-all@freebsd.org>,  "svn-src-head@freebsd.org" <svn-src-head@freebsd.org>
Subject:   Re: svn commit: r306330 - head/usr.bin/mkimg
Message-ID:  <CAJ-Vmo=X-4=gJDyfKarSHkQxNaAQ3znXRTGrpP03j5bR3kn%2BBg@mail.gmail.com>
In-Reply-To: <201609260106.u8Q16Wuv095454@repo.freebsd.org>
References:  <201609260106.u8Q16Wuv095454@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Hi,

Yeah, for portable-y stuff, I'd recommend:

#include "endian.h" -> #ifdef __FreeBSD__ #include <sys/endian.h>
#elif __Apple__ etc, etc.

That way we don't duplicate contents.

Same with sys/queue.h, etc.



-adrian


On 25 September 2016 at 18:06, Marcel Moolenaar <marcel@freebsd.org> wrote:
> Author: marcel
> Date: Mon Sep 26 01:06:32 2016
> New Revision: 306330
> URL: https://svnweb.freebsd.org/changeset/base/306330
>
> Log:
>   Avoid depending on the <sys/endian.h> header for le*enc and be*enc.
>   Not only is the header unportable, the encoding/decoding functions
>   are as well.  Instead, duplicate the handful of small inlines we
>   need into a private header called endian.h.
>
>   Aside: an alternative approach is to move the encoding/decoding
>   functions to a separate system header.  While the header is still
>   nonportable, such an approach would make it possible to re-use the
>   definitions by playing games with include paths. This may be the
>   preferred approach if more (build) utilities need this.  This
>   change does not preclude that.  In fact, it makes it easier.
>
> Added:
>   head/usr.bin/mkimg/endian.h   (contents, props changed)
> Modified:
>   head/usr.bin/mkimg/apm.c
>   head/usr.bin/mkimg/bsd.c
>   head/usr.bin/mkimg/ebr.c
>   head/usr.bin/mkimg/gpt.c
>   head/usr.bin/mkimg/mbr.c
>   head/usr.bin/mkimg/pc98.c
>   head/usr.bin/mkimg/qcow.c
>   head/usr.bin/mkimg/raw.c
>   head/usr.bin/mkimg/vhd.c
>   head/usr.bin/mkimg/vmdk.c
>   head/usr.bin/mkimg/vtoc8.c
>
> Modified: head/usr.bin/mkimg/apm.c
> ==============================================================================
> --- head/usr.bin/mkimg/apm.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/apm.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,12 +29,12 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/apm.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Modified: head/usr.bin/mkimg/bsd.c
> ==============================================================================
> --- head/usr.bin/mkimg/bsd.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/bsd.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,12 +29,12 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/disklabel.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Modified: head/usr.bin/mkimg/ebr.c
> ==============================================================================
> --- head/usr.bin/mkimg/ebr.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/ebr.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,12 +29,12 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/diskmbr.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Added: head/usr.bin/mkimg/endian.h
> ==============================================================================
> --- /dev/null   00:00:00 1970   (empty, because file is newly added)
> +++ head/usr.bin/mkimg/endian.h Mon Sep 26 01:06:32 2016        (r306330)
> @@ -0,0 +1,106 @@
> +/*-
> + * Copyright (c) 2002 Thomas Moestl <tmm@FreeBSD.org>
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions
> + * are met:
> + * 1. Redistributions of source code must retain the above copyright
> + *    notice, this list of conditions and the following disclaimer.
> + * 2. Redistributions in binary form must reproduce the above copyright
> + *    notice, this list of conditions and the following disclaimer in the
> + *    documentation and/or other materials provided with the distribution.
> + *
> + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
> + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
> + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
> + * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
> + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
> + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
> + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
> + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
> + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
> + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> + * SUCH DAMAGE.
> + *
> + * $FreeBSD$
> + */
> +
> +#ifndef _MKIMG_ENDIAN_H_
> +#define _MKIMG_ENDIAN_H_
> +
> +static __inline uint16_t
> +be16dec(const void *pp)
> +{
> +       uint8_t const *p = (uint8_t const *)pp;
> +
> +       return ((p[0] << 8) | p[1]);
> +}
> +
> +static __inline void
> +be16enc(void *pp, uint16_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       p[0] = (u >> 8) & 0xff;
> +       p[1] = u & 0xff;
> +}
> +
> +static __inline void
> +be32enc(void *pp, uint32_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       p[0] = (u >> 24) & 0xff;
> +       p[1] = (u >> 16) & 0xff;
> +       p[2] = (u >> 8) & 0xff;
> +       p[3] = u & 0xff;
> +}
> +
> +static __inline void
> +be64enc(void *pp, uint64_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       be32enc(p, (uint32_t)(u >> 32));
> +       be32enc(p + 4, (uint32_t)(u & 0xffffffffU));
> +}
> +
> +static __inline uint16_t
> +le16dec(const void *pp)
> +{
> +       uint8_t const *p = (uint8_t const *)pp;
> +
> +       return ((p[1] << 8) | p[0]);
> +}
> +
> +static __inline void
> +le16enc(void *pp, uint16_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       p[0] = u & 0xff;
> +       p[1] = (u >> 8) & 0xff;
> +}
> +
> +static __inline void
> +le32enc(void *pp, uint32_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       p[0] = u & 0xff;
> +       p[1] = (u >> 8) & 0xff;
> +       p[2] = (u >> 16) & 0xff;
> +       p[3] = (u >> 24) & 0xff;
> +}
> +
> +static __inline void
> +le64enc(void *pp, uint64_t u)
> +{
> +       uint8_t *p = (uint8_t *)pp;
> +
> +       le32enc(p, (uint32_t)(u & 0xffffffffU));
> +       le32enc(p + 4, (uint32_t)(u >> 32));
> +}
> +
> +#endif /* _MKIMG_ENDIAN_H_ */
>
> Modified: head/usr.bin/mkimg/gpt.c
> ==============================================================================
> --- head/usr.bin/mkimg/gpt.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/gpt.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,7 +29,6 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/diskmbr.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <sys/gpt.h>
>  #include <stddef.h>
> @@ -39,6 +38,7 @@ __FBSDID("$FreeBSD$");
>  #include <unistd.h>
>  #include <uuid.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Modified: head/usr.bin/mkimg/mbr.c
> ==============================================================================
> --- head/usr.bin/mkimg/mbr.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/mbr.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,12 +29,12 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/diskmbr.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Modified: head/usr.bin/mkimg/pc98.c
> ==============================================================================
> --- head/usr.bin/mkimg/pc98.c   Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/pc98.c   Mon Sep 26 01:06:32 2016        (r306330)
> @@ -29,12 +29,12 @@ __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
>  #include <sys/diskpc98.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>
> Modified: head/usr.bin/mkimg/qcow.c
> ==============================================================================
> --- head/usr.bin/mkimg/qcow.c   Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/qcow.c   Mon Sep 26 01:06:32 2016        (r306330)
> @@ -28,7 +28,6 @@
>  __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <assert.h>
>  #include <stdint.h>
> @@ -37,6 +36,7 @@ __FBSDID("$FreeBSD$");
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "format.h"
>  #include "mkimg.h"
>
> Modified: head/usr.bin/mkimg/raw.c
> ==============================================================================
> --- head/usr.bin/mkimg/raw.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/raw.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -28,7 +28,6 @@
>  __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
>
> Modified: head/usr.bin/mkimg/vhd.c
> ==============================================================================
> --- head/usr.bin/mkimg/vhd.c    Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/vhd.c    Mon Sep 26 01:06:32 2016        (r306330)
> @@ -28,7 +28,6 @@
>  __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdlib.h>
>  #include <string.h>
> @@ -36,6 +35,7 @@ __FBSDID("$FreeBSD$");
>  #include <unistd.h>
>  #include <uuid.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "format.h"
>  #include "mkimg.h"
>
> Modified: head/usr.bin/mkimg/vmdk.c
> ==============================================================================
> --- head/usr.bin/mkimg/vmdk.c   Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/vmdk.c   Mon Sep 26 01:06:32 2016        (r306330)
> @@ -28,7 +28,6 @@
>  __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <stdint.h>
>  #include <stdio.h>
> @@ -36,6 +35,7 @@ __FBSDID("$FreeBSD$");
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "format.h"
>  #include "mkimg.h"
>
> Modified: head/usr.bin/mkimg/vtoc8.c
> ==============================================================================
> --- head/usr.bin/mkimg/vtoc8.c  Mon Sep 26 00:41:08 2016        (r306329)
> +++ head/usr.bin/mkimg/vtoc8.c  Mon Sep 26 01:06:32 2016        (r306330)
> @@ -28,7 +28,6 @@
>  __FBSDID("$FreeBSD$");
>
>  #include <sys/types.h>
> -#include <sys/endian.h>
>  #include <sys/errno.h>
>  #include <sys/vtoc.h>
>  #include <stdio.h>
> @@ -36,6 +35,7 @@ __FBSDID("$FreeBSD$");
>  #include <string.h>
>  #include <unistd.h>
>
> +#include "endian.h"
>  #include "image.h"
>  #include "mkimg.h"
>  #include "scheme.h"
>



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAJ-Vmo=X-4=gJDyfKarSHkQxNaAQ3znXRTGrpP03j5bR3kn%2BBg>