[Libguestfs] [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.

Nir Soffer nsoffer at redhat.com
Wed Aug 1 13:24:58 UTC 2018


On Wed, Aug 1, 2018 at 2:14 PM Richard W.M. Jones <rjones at redhat.com> wrote:

> Currently this adds two useful header files containing functions which
> will be consumed by filters in later commits.
> ---
>  Makefile.am                 |  5 +++-
>  common/include/Makefile.am  | 39 ++++++++++++++++++++++++
>  common/include/ispowerof2.h | 50 +++++++++++++++++++++++++++++++
>  common/include/iszero.h     | 60 +++++++++++++++++++++++++++++++++++++
>  configure.ac                |  1 +
>  5 files changed, 154 insertions(+), 1 deletion(-)
>
> diff --git a/Makefile.am b/Makefile.am
> index 6a3a377..09dbdb9 100644
> --- a/Makefile.am
> +++ b/Makefile.am
> @@ -53,7 +53,10 @@ SUBDIRS = \
>         src
>
>  if HAVE_PLUGINS
> -SUBDIRS += plugins filters
> +SUBDIRS += \
> +       common/include \
> +       plugins \
> +       filters
>  endif
>
>  SUBDIRS += tests
> diff --git a/common/include/Makefile.am b/common/include/Makefile.am
> new file mode 100644
> index 0000000..4ce1723
> --- /dev/null
> +++ b/common/include/Makefile.am
> @@ -0,0 +1,39 @@
> +# nbdkit
> +# Copyright (C) 2018 Red Hat Inc.
> +# All rights reserved.
> +#
> +# Redistribution and use in source and binary forms, with or without
> +# modification, are permitted provided that the following conditions are
> +# met:
> +#
> +# * Redistributions of source code must retain the above copyright
> +# notice, this list of conditions and the following disclaimer.
> +#
> +# * 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.
> +#
> +# * Neither the name of Red Hat nor the names of its contributors may be
> +# used to endorse or promote products derived from this software without
> +# specific prior written permission.
> +#
> +# THIS SOFTWARE IS PROVIDED BY RED HAT 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 RED HAT 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.
> +
> +include $(top_srcdir)/common-rules.mk
> +
> +# These headers contain only common code shared by plugins and
> +# filters.  They are not installed.
> +EXTRA_DIST = \
> +       ispowerof2.h \
> +       iszero.h
> diff --git a/common/include/ispowerof2.h b/common/include/ispowerof2.h
> new file mode 100644
> index 0000000..41844b3
> --- /dev/null
> +++ b/common/include/ispowerof2.h
> @@ -0,0 +1,50 @@
> +/* nbdkit
> + * Copyright (C) 2018 Red Hat Inc.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + *
> + * * Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + *
> + * * 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.
> + *
> + * * Neither the name of Red Hat nor the names of its contributors may be
> + * used to endorse or promote products derived from this software without
> + * specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY RED HAT 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 RED HAT 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.
> + */
> +
> +#ifndef NBDKIT_ISPOWEROF2_H
> +#define NBDKIT_ISPOWEROF2_H
> +
> +#include <stdbool.h>
> +
> +/* Returns true if v is a power of 2.
> + *
> + * Uses the algorithm described at
> + *
> http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2
> + */
> +static inline bool
> +is_power_of_2 (unsigned long v)
> +{
> +  return v && ((v & (v - 1)) == 0);
> +}
> +
> +#endif /* NBDKIT_ISPOWEROF2_H */
> diff --git a/common/include/iszero.h b/common/include/iszero.h
> new file mode 100644
> index 0000000..331614c
> --- /dev/null
> +++ b/common/include/iszero.h
> @@ -0,0 +1,60 @@
> +/* nbdkit
> + * Copyright (C) 2018 Red Hat Inc.
> + * All rights reserved.
> + *
> + * Redistribution and use in source and binary forms, with or without
> + * modification, are permitted provided that the following conditions are
> + * met:
> + *
> + * * Redistributions of source code must retain the above copyright
> + * notice, this list of conditions and the following disclaimer.
> + *
> + * * 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.
> + *
> + * * Neither the name of Red Hat nor the names of its contributors may be
> + * used to endorse or promote products derived from this software without
> + * specific prior written permission.
> + *
> + * THIS SOFTWARE IS PROVIDED BY RED HAT 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 RED HAT 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.
> + */
> +
> +#ifndef NBDKIT_ISZERO_H
> +#define NBDKIT_ISZERO_H
> +
> +#include <string.h>
> +#include <stdbool.h>
> +
> +/* Return true iff the buffer is all zero bytes.
> + *
> + * The clever approach here was suggested by Eric Blake.  See:
> + * https://www.redhat.com/archives/libguestfs/2017-April/msg00171.html


It would be nice to mention the original author:
http://rusty.ozlabs.org/?p=560


>
> + */
> +static inline bool
> +is_zero (const char *buffer, size_t size)
> +{
> +  size_t i;
> +  const size_t limit = size < 16 ? size : 16;
> +
> +  for (i = 0; i < limit; ++i)
> +    if (buffer[i])
> +      return false;
> +  if (size != limit)
> +    return ! memcmp (buffer, buffer + 16, size - 16);
> +
> +  return true;
> +}
> +
> +#endif /* NBDKIT_ISZERO_H */
> diff --git a/configure.ac b/configure.ac
> index b87efb9..774f290 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -538,6 +538,7 @@ AC_CONFIG_FILES([podwrapper.pl],
>                  [chmod +x,-w podwrapper.pl])
>  AC_CONFIG_FILES([Makefile
>                   bash/Makefile
> +                 common/include/Makefile
>                   docs/Makefile
>                   include/Makefile
>                   plugins/Makefile
> --
> 2.18.0
>
> _______________________________________________
> Libguestfs mailing list
> Libguestfs at redhat.com
> https://www.redhat.com/mailman/listinfo/libguestfs
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180801/2f566c5c/attachment.htm>


More information about the Libguestfs mailing list