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

Richard W.M. Jones rjones at redhat.com
Wed Aug 1 13:28:36 UTC 2018


On Wed, Aug 01, 2018 at 04:24:58PM +0300, Nir Soffer wrote:
> 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

Thanks - I didn't know that.  I will add the link to the comment.

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
libguestfs lets you edit virtual machines.  Supports shell scripting,
bindings from many languages.  http://libguestfs.org




More information about the Libguestfs mailing list