[Libguestfs] [PATCH nbdkit filters-v2 2/5] Introduce filters.

Eric Blake eblake at redhat.com
Fri Jan 19 20:47:02 UTC 2018


On 01/19/2018 09:23 AM, Richard W.M. Jones wrote:
> Filters can be placed in front of plugins to modify their behaviour.
> 
> This commit adds the <nbdkit-filter.h> header file, the manual page,
> the ‘filterdir’ directory (like ‘plugindir’), the ‘filters/’ source
> directory which will contain the actual filters, the ‘--filters’
> parameter, and the filters backend logic.
> ---

>  include/Makefile.am     |   4 +-
>  include/nbdkit-filter.h | 149 +++++++++++
>  include/nbdkit-plugin.h |   2 +

> +++ b/include/nbdkit-filter.h

> +
> +#ifndef NBDKIT_FILTER_H
> +#define NBDKIT_FILTER_H
> +
> +/* This header also defines some useful functions like nbdkit_debug
> + * and nbdkit_parse_size which are appropriate for filters to use.
> + */
> +#include <nbdkit-plugin.h>

Should we stick the useful functions in a new header <nbdkit-common.h>
that both nbdkit-plugin.h and nbdkit-filter.h include?  I'm worried that
the games we play with NBDKIT_API_VERSION in nbdkit-plugin.h for
maintaining back-compat there may someday have awkward interactions in
this file.

> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#define NBDKIT_FILTER_API_VERSION 1

On the other hand, you're setting NBDKIT_FILTER_API_VERSION separately
from NBDKIT_API_VERSION (for plugins), as we could bump one but not the
other in a given nbdkit release (and if so, it makes for our next
release to have PLUGIN version 2 but FILTER version 1, once filters and
FUA flags settle, where the highest version in each file shares the same
backend semantics).

Does it ever make sense for a single .so file to call both
NBDKIT_REGISTER_PLUGIN() and NBDKIT_REGISTER_FILTER() in the same
library?  If not, one benefit of having the common code in a separate
nbdkit-common.h is that we could do things like:

nbdkit-common.h:
#if !defined NBDKIT_PLUGIN_H || !defined NBDKIT_FILTER_H
#error this file should not be directly included
#endif

nbdkit-plugin.h:
#ifdef NBDKIT_FILTER_H
#error cannot mix filter and plugin in one code base
#endif

nbdkit-filter.h:
#ifdef NBDKIT_PLUGIN_H
#error cannot mix filter and plugin in one code base
#endif

> +
> +#ifndef NBDKIT_CXX_LANG_C
> +#ifdef __cplusplus
> +#define NBDKIT_CXX_LANG_C extern "C"
> +#else
> +#define NBDKIT_CXX_LANG_C /* nothing */
> +#endif
> +#endif

and a common header would be a nicer place for things like
NBDKIT_CXX_LANG_C, rather than having to repeat our #ifndef definitions
in two files.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3266
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20180119/c41a4653/attachment.sig>


More information about the Libguestfs mailing list