diff -r 8a3f14eda1c5 -r 1044405ba1d1 tools/libxl/libxl_utils.c --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -43,6 +43,20 @@ static struct schedid_name schedid_name[ { NULL, -1 } }; +const char *libxl_basename(const char *name) +{ + const char *filename; + if (name == NULL) + return strdup("."); + if (name[0] == '\0') + return strdup("."); + + filename = strrchr(name, '/'); + if (filename) + return strdup(filename+1); + return strdup(name); +} + unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, unsigned int smp_cpus) { /* 256 pages (1MB) per vcpu, diff -r 8a3f14eda1c5 -r 1044405ba1d1 tools/libxl/libxl_utils.h --- a/tools/libxl/libxl_utils.h +++ b/tools/libxl/libxl_utils.h @@ -18,6 +18,7 @@ #include "libxl.h" +const char *libxl_basename(const char *name); unsigned long libxl_get_required_shadow_memory(unsigned long maxmem_kb, unsigned int smp_cpus); int libxl_name_to_domid(libxl_ctx *ctx, const char *name, uint32_t *domid); char *libxl_domid_to_name(libxl_ctx *ctx, uint32_t domid); diff -r 8a3f14eda1c5 -r 1044405ba1d1 tools/libxl/xl_cmdimpl.c --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -5365,7 +5365,7 @@ int main_cpupoolcreate(int argc, char ** int config_len = 0; XLU_Config *config; const char *buf; - char *name; + const char *name; const char *sched; uint32_t poolid; int schedid = -1; @@ -5455,7 +5455,7 @@ int main_cpupoolcreate(int argc, char ** if (!xlu_cfg_get_string (config, "name", &buf)) name = strdup(buf); else - name = basename(filename); + name = libxl_basename(filename); if (!libxl_name_to_cpupoolid(&ctx, name, &poolid)) { fprintf(stderr, "Pool name \"%s\" already exists\n", name); return -ERROR_FAIL;