Stefano Stabellini
2010-Aug-13 18:52 UTC
[Xen-devel] [PATCH 1 of 4] libxl_device_generic_add: handle NULL fents or bents
libxl_device_generic_add: handle NULL fents or bents. This is going to be used by libxl_console_add in the next patch to avoid creating the device/console path on xenstore for console 0. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> diff -r 85bd0f6e8fed tools/libxl/libxl_device.c --- a/tools/libxl/libxl_device.c Fri Aug 13 13:55:51 2010 +0100 +++ b/tools/libxl/libxl_device.c Fri Aug 13 19:23:05 2010 +0100 @@ -76,21 +76,21 @@ retry_transaction: t = xs_transaction_start(ctx->xsh); /* FIXME: read frontend_path and check state before removing stuff */ - xs_rm(ctx->xsh, t, frontend_path); - xs_rm(ctx->xsh, t, backend_path); + if (fents) { + xs_rm(ctx->xsh, t, frontend_path); + xs_mkdir(ctx->xsh, t, frontend_path); + xs_set_permissions(ctx->xsh, t, frontend_path, frontend_perms, ARRAY_SIZE(frontend_perms)); + xs_write(ctx->xsh, t, libxl_sprintf(&gc, "%s/backend", frontend_path), backend_path, strlen(backend_path)); + libxl_xs_writev(&gc, t, frontend_path, fents); + } - xs_mkdir(ctx->xsh, t, frontend_path); - xs_set_permissions(ctx->xsh, t, frontend_path, frontend_perms, ARRAY_SIZE(frontend_perms)); - - xs_mkdir(ctx->xsh, t, backend_path); - xs_set_permissions(ctx->xsh, t, backend_path, backend_perms, ARRAY_SIZE(backend_perms)); - - xs_write(ctx->xsh, t, libxl_sprintf(&gc, "%s/backend", frontend_path), backend_path, strlen(backend_path)); - xs_write(ctx->xsh, t, libxl_sprintf(&gc, "%s/frontend", backend_path), frontend_path, strlen(frontend_path)); - - /* and write frontend kvs and backend kvs */ - libxl_xs_writev(&gc, t, backend_path, bents); - libxl_xs_writev(&gc, t, frontend_path, fents); + if (bents) { + xs_rm(ctx->xsh, t, backend_path); + xs_mkdir(ctx->xsh, t, backend_path); + xs_set_permissions(ctx->xsh, t, backend_path, backend_perms, ARRAY_SIZE(backend_perms)); + xs_write(ctx->xsh, t, libxl_sprintf(&gc, "%s/frontend", backend_path), frontend_path, strlen(frontend_path)); + libxl_xs_writev(&gc, t, backend_path, bents); + } if (!xs_transaction_end(ctx->xsh, t, 0)) { if (errno == EAGAIN) diff -r 85bd0f6e8fed tools/libxl/libxl_xshelp.c --- a/tools/libxl/libxl_xshelp.c Fri Aug 13 13:55:51 2010 +0100 +++ b/tools/libxl/libxl_xshelp.c Fri Aug 13 19:23:05 2010 +0100 @@ -49,6 +49,9 @@ char **libxl_xs_kvs_of_flexarray(libxl_g char **kvs; int i; + if (!length) + return NULL; + kvs = libxl_calloc(gc, length + 2, sizeof(char *)); if (kvs) { for (i = 0; i < length; i += 2) { _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel