[Libguestfs] [PATCH nbdkit 4/6] eval, sh: Implement block_size method
Eric Blake
eblake at redhat.com
Wed Feb 16 18:16:57 UTC 2022
On Wed, Feb 16, 2022 at 04:20:39PM +0000, Richard W.M. Jones wrote:
> The main reason to implement block_size in these plugins first is so
> we then have an easy way to implement tests of the feature.
> ---
> plugins/eval/nbdkit-eval-plugin.pod | 2 +
> plugins/sh/nbdkit-sh-plugin.pod | 10 +++++
> plugins/sh/methods.h | 3 ++
> plugins/eval/eval.c | 2 +
> plugins/sh/methods.c | 66 +++++++++++++++++++++++++++++
> plugins/sh/sh.c | 1 +
> 6 files changed, 84 insertions(+)
>
> +int
> +sh_block_size (void *handle,
> + uint32_t *minimum, uint32_t *preferred, uint32_t *maximum)
> +{
> + const char *method = "block_size";
> + const char *script = get_script (method);
> + struct sh_handle *h = handle;
> + const char *args[] = { script, method, h->h, NULL };
> + CLEANUP_FREE char *s = NULL;
> + size_t slen;
> + const char *delim = " \t\n";
> + char *sp, *p;
> + int64_t r;
> +
> + switch (call_read (&s, &slen, args)) {
> + case OK:
> + if ((p = strtok_r (s, delim, &sp)) == NULL) {
> + parse_error:
> + nbdkit_error ("%s: %s method cannot be parsed", script, method);
> + return -1;
> + }
> + r = nbdkit_parse_size (p);
> + if (r == -1 || r > UINT32_MAX)
> + goto parse_error;
> + *minimum = r;
> +
> + if ((p = strtok_r (NULL, delim, &sp)) == NULL)
> + goto parse_error;
> + r = nbdkit_parse_size (p);
> + if (r == -1 || r > UINT32_MAX)
> + goto parse_error;
> + *preferred = r;
> +
> + if ((p = strtok_r (NULL, delim, &sp)) == NULL)
> + goto parse_error;
> + r = nbdkit_parse_size (p);
> + if (r == -1 || r > UINT32_MAX)
> + goto parse_error;
> + *maximum = r;
> +
> +#if 0
> + nbdkit_debug ("setting block_size: "
> + "minimum=%" PRIu32 " "
> + "preferred=%" PRIu32 " "
> + "maximum=%" PRIu32,
> + *minimum, *preferred, *maximum);
> +#endif
> + return 0;
Do we care about checking that there is no trailing garbage after the
three numbers?
Otherwise, yes, this makes a good first plugin for an implementation ;)
--
Eric Blake, Principal Software Engineer
Red Hat, Inc. +1-919-301-3266
Virtualization: qemu.org | libvirt.org
More information about the Libguestfs
mailing list