Nir Soffer
2018-Aug-01 13:24 UTC
Re: [Libguestfs] [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.
On Wed, Aug 1, 2018 at 2:14 PM Richard W.M. Jones <rjones@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.htmlIt 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@redhat.com > https://www.redhat.com/mailman/listinfo/libguestfs >
Richard W.M. Jones
2018-Aug-01 13:28 UTC
[Libguestfs] [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.
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=560Thanks - 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
Eric Blake
2018-Aug-01 14:18 UTC
Re: [Libguestfs] [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.
On 08/01/2018 08:28 AM, Richard W.M. Jones wrote:>>> + >>> +/* 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.Yes - I didn't invent the approach, but pointed it out based on earlier qemu list traffic that had the link to Rusty's blog. -- Eric Blake, Principal Software Engineer Red Hat, Inc. +1-919-301-3266 Virtualization: qemu.org | libvirt.org
Reasonably Related Threads
- [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.
- Re: [PATCH v2 nbdkit 4/6] common: Add a directory for common code shared by plugins and filters.
- [PATCH nbdkit v2 1/4] common/bitmap: Add bitmap_next function and tests.
- [PATCH nbdkit v3 2/3] common: Introduce round up, down; and divide round up functions.
- [PATCH nbdkit v2] common: Introduce round up, down; and divide round up functions.