/*
* xen_unified.c: Unified Xen driver.
*
- * Copyright (C) 2007, 2010 Red Hat, Inc.
+ * Copyright (C) 2007, 2010-2011 Red Hat, Inc.
*
* See COPYING.LIB for the License of this software
*
typedef struct xenXMConfCache *xenXMConfCachePtr;
typedef struct xenXMConfCache {
time_t refreshedAt;
- char filename[PATH_MAX];
+ char *filename;
virDomainDefPtr def;
} xenXMConfCache;
static void xenXMConfigFree(void *payload, const void *key ATTRIBUTE_UNUSED) {
xenXMConfCachePtr entry = (xenXMConfCachePtr)payload;
virDomainDefFree(entry->def);
+ VIR_FREE(entry->filename);
VIR_FREE(entry);
}
virReportOOMError();
return -1;
}
- memcpy(entry->filename, filename, PATH_MAX);
+ if ((entry->filename = strdup(filename)) == NULL) {
+ virReportOOMError();
+ VIR_FREE(entry);
+ return -1;
+ }
}
entry->refreshedAt = now;
VIR_DEBUG("Failed to read %s", entry->filename);
if (!newborn)
virHashSteal(priv->configCache, filename);
+ VIR_FREE(entry->filename);
VIR_FREE(entry);
return -1;
}
if (newborn) {
if (virHashAddEntry(priv->configCache, entry->filename, entry) < 0) {
virDomainDefFree(entry->def);
+ VIR_FREE(entry->filename);
VIR_FREE(entry);
xenXMError(VIR_ERR_INTERNAL_ERROR,
"%s", _("xenXMConfigCacheRefresh: virHashAddEntry"));
* of the domain in question
*/
if (!virHashLookup(priv->nameConfigMap, entry->def->name)) {
- if (virHashAddEntry(priv->nameConfigMap, entry->def->name, entry->filename) < 0) {
+ if (virHashAddEntry(priv->nameConfigMap, entry->def->name,
+ entry->filename) < 0) {
virHashSteal(priv->configCache, filename);
virDomainDefFree(entry->def);
+ VIR_FREE(entry->filename);
VIR_FREE(entry);
}
}
goto error;
}
- memmove(entry->filename, filename, PATH_MAX);
+ if ((entry->filename = strdup(filename)) == NULL) {
+ virReportOOMError();
+ goto error;
+ }
entry->def = def;
if (virHashAddEntry(priv->configCache, filename, entry) < 0) {
error:
VIR_FREE(filename);
+ VIR_FREE(entry->filename);
VIR_FREE(entry);
virDomainDefFree(def);
xenUnifiedUnlock(priv);