[Libguestfs] [PATCH nbdkit v2 2/3] Refactor plugin_* functions into a backend struct.

Eric Blake eblake at redhat.com
Tue Jan 16 16:56:25 UTC 2018


On 01/16/2018 10:32 AM, Richard W.M. Jones wrote:
> Introduce the concept of a backend.  Currently the only type of
> backend is a plugin, and there can only be one of them.  Instead of
> calling functions like ‘plugin_pwrite’ you call the backend method
> ‘backend->pwrite (backend, ...)’.
> 
> The change is largely mechanical.  I was able to remove ‘assert (dl)’
> statements throughout since we can now prove they will never be
> called.
> 
> Note this does not lift the restriction of one plugin per server, and
> it can *never* do that because plugins can use global variables.
> ---

> +struct backend {
> +  void (*free) (struct backend *);
> +  int (*thread_model) (struct backend *);
> +  const char *(*name) (struct backend *);
> +  void (*usage) (struct backend *);
> +  const char *(*version) (struct backend *);
> +  void (*dump_fields) (struct backend *);
> +  void (*config) (struct backend *, const char *key, const char *value);
> +  void (*config_complete) (struct backend *);
> +  int (*errno_is_preserved) (struct backend *);
> +  int (*open) (struct backend *, struct connection *conn, int readonly);

Is it worth using 'bool' instead of 'int' where we are really using a
truth value?  We can't change the nbdkit-plugin.h API (well, at least
not without plugins opting in), but the new stuff (including filters)
could be sane from the get-go instead of overloading int.

> +  void (*close) (struct backend *, struct connection *conn);
> +  int64_t (*get_size) (struct backend *, struct connection *conn);
> +  int (*can_write) (struct backend *, struct connection *conn);

However, functions like this still need to return int because they are
tri-state (true, false, or -1 for error).

-- 
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/20180116/89421801/attachment.sig>


More information about the Libguestfs mailing list