diff -r bbf009817ffb tools/libxl/libxl.c --- a/tools/libxl/libxl.c Fri May 07 19:22:28 2010 +0100 +++ b/tools/libxl/libxl.c Tue May 11 07:45:01 2010 +0200 @@ -169,7 +169,8 @@ retry_transaction: xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/uuid", vm_path), uuid_string, strlen(uuid_string)); xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/name", vm_path), info->name, strlen(info->name)); - xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/pool_name", vm_path), info->poolname, strlen(info->poolname)); + if (info->poolname) + xs_write(ctx->xsh, t, libxl_sprintf(ctx, "%s/pool_name", vm_path), info->poolname, strlen(info->poolname)); libxl_xs_writev(ctx, t, dom_path, info->xsdata); libxl_xs_writev(ctx, t, libxl_sprintf(ctx, "%s/platform", dom_path), info->platformdata); diff -r bbf009817ffb tools/libxl/libxl_utils.c --- a/tools/libxl/libxl_utils.c Fri May 07 19:22:28 2010 +0100 +++ b/tools/libxl/libxl_utils.c Tue May 11 07:45:01 2010 +0200 @@ -84,6 +84,8 @@ char *libxl_poolid_to_name(struct libxl_ char path[strlen("/local/pool") + 12]; char *s; + if (poolid == 0) + return "Pool-0"; snprintf(path, sizeof(path), "/local/pool/%d/name", poolid); s = xs_read(ctx->xsh, XBT_NULL, path, &len); libxl_ptr_add(ctx, s); diff -r bbf009817ffb tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c Fri May 07 19:22:28 2010 +0100 +++ b/tools/libxl/xl_cmdimpl.c Tue May 11 07:45:01 2010 +0200 @@ -453,9 +453,15 @@ static void parse_config_data(const char if (!xlu_cfg_get_long(config, "oos", &l)) c_info->oos = l; - if (!xlu_cfg_get_string (config, "pool", &buf)) + if (!xlu_cfg_get_string (config, "pool", &buf)) { + c_info->poolid = -1; pool_qualifier_to_poolid(buf, &c_info->poolid, NULL); + } c_info->poolname = libxl_poolid_to_name(&ctx, c_info->poolid); + if (!c_info->poolname) { + fprintf(stderr, "Illegal pool specified\n"); + exit(1); + } init_build_info(b_info, c_info);