|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 4/7] xenstore: enhance control command support
On Wed, Feb 22, 2017 at 04:28:48PM +0100, Juergen Gross wrote:
> The Xenstore protocol supports the XS_CONTROL command for triggering
> various actions in the Xenstore daemon. Enhance that support by using
> a command table and adding a help function.
>
> Support multiple control commands in the associated xenstore-control
> program used to issue XS_CONTROL commands.
>
> Signed-off-by: Juergen Gross <jgross@xxxxxxxx>
> ---
> tools/xenstore/xenstore_control.c | 65 +++++++++++++++++-------
> tools/xenstore/xenstored_control.c | 100
> +++++++++++++++++++++++++++++++++----
> 2 files changed, 135 insertions(+), 30 deletions(-)
>
> diff --git a/tools/xenstore/xenstore_control.c
> b/tools/xenstore/xenstore_control.c
> index 0a108df..e42d478 100644
> --- a/tools/xenstore/xenstore_control.c
> +++ b/tools/xenstore/xenstore_control.c
> @@ -7,29 +7,56 @@
>
> int main(int argc, char **argv)
> {
> - struct xs_handle * xsh;
> + struct xs_handle *xsh;
> + char *par = NULL;
> + char *ret;
> + unsigned int p, len = 0;
> + int rc = 0;
>
> - if (argc < 2 ||
> - strcmp(argv[1], "check"))
> - {
> - fprintf(stderr,
> - "Usage:\n"
> - "\n"
> - " %s check\n"
> - "\n", argv[0]);
> - return 2;
> - }
> + if (argc < 2) {
> + fprintf(stderr, "Usage:\n"
> + "%s <command> [<arg>...]\n", argv[0]);
> + return 2;
> + }
>
> - xsh = xs_daemon_open();
> + for (p = 2; p < argc; p++)
> + len += strlen(argv[p]) + 1;
> + if (len) {
> + par = malloc(len);
par is never freed.
I would also suggest to use goto style error handling.
> + if (!par) {
> + fprintf(stderr, "Allocation error.\n");
> + return 1;
> + }
> + len = 0;
> + for (p = 2; p < argc; p++) {
> + memcpy(par + len, argv[p], strlen(argv[p]) + 1);
> + len += strlen(argv[p]) + 1;
> + }
> + }
>
> - if (xsh == NULL) {
> - fprintf(stderr, "Failed to contact Xenstored.\n");
> - return 1;
> - }
> + xsh = xs_open(0);
> + if (xsh == NULL) {
> + fprintf(stderr, "Failed to contact Xenstored.\n");
> + return 1;
> + }
>
> - xs_debug_command(xsh, argv[1], NULL, 0);
> + ret = xs_debug_command(xsh, argv[1], par, len);
Should be xs_control_command now.
> + if (!ret) {
> + rc = 3;
> + if (errno == EINVAL) {
> + ret = xs_debug_command(xsh, "help", NULL, 0);
The rest looks good.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |