diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index 41d6e8db6c..291c1909f9 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -477,6 +477,16 @@ typedef struct libxl__ctx libxl_ctx; #define LIBXL_HAVE_NONCONST_EVENT_OCCURS_EVENT_ARG 1 #endif +/* + * LIBXL_HAVE_CONST_LIBXL_BASENAME_RETURN_VALUE + * + * The return value of libxl_basename is malloc'ed but the erroneously + * marked as "const" in releases before 4.5. + */ +#if defined(LIBXL_API_VERSION) && LIBXL_API_VERSION < 0x040500 +#define LIBXL_HAVE_CONST_LIBXL_BASENAME_RETURN_VALUE 1 +#endif + /* * LIBXL_HAVE_PHYSINFO_OUTSTANDING_PAGES * diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c index 3e1ba170bd..22119fcb8a 100644 --- a/tools/libxl/libxl_utils.c +++ b/tools/libxl/libxl_utils.c @@ -19,7 +19,10 @@ #include "libxl_internal.h" -const char *libxl_basename(const char *name) +#ifdef LIBXL_HAVE_CONST_LIBXL_BASENAME_RETURN_VALUE +const +#endif +char *libxl_basename(const char *name) { const char *filename; if (name == NULL) diff --git a/tools/libxl/libxl_utils.h b/tools/libxl/libxl_utils.h index 117b22924c..8277eb9ec9 100644 --- a/tools/libxl/libxl_utils.h +++ b/tools/libxl/libxl_utils.h @@ -18,7 +18,11 @@ #include "libxl.h" -const char *libxl_basename(const char *name); /* returns string from strdup */ +#ifdef LIBXL_HAVE_CONST_LIBXL_BASENAME_RETURN_VALUE +const +#endif +char *libxl_basename(const char *name); /* returns string from strdup */ + 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); int libxl_domain_qualifier_to_domid(libxl_ctx *ctx, const char *name, uint32_t *domid);