diff --git a/src/datatypes.c b/src/datatypes.c index 4c4cbd0239..f0b50259f9 100644 --- a/src/datatypes.c +++ b/src/datatypes.c @@ -738,10 +738,10 @@ virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, virReportOOMError(); goto error; } - if (virStrcpyStatic(ret->key, key) == NULL) { + ret->key = strdup(key); + if (ret->key == NULL) { virMutexUnlock(&conn->lock); - virLibConnError(VIR_ERR_INTERNAL_ERROR, - _("Volume key %s too large for destination"), key); + virReportOOMError(); goto error; } ret->magic = VIR_STORAGE_VOL_MAGIC; @@ -754,6 +754,7 @@ virGetStorageVol(virConnectPtr conn, const char *pool, const char *name, error: if (ret != NULL) { + VIR_FREE(ret->key); VIR_FREE(ret->name); VIR_FREE(ret->pool); VIR_FREE(ret); @@ -780,6 +781,7 @@ virReleaseStorageVol(virStorageVolPtr vol) { VIR_DEBUG("release vol %p %s", vol, vol->name); vol->magic = -1; + VIR_FREE(vol->key); VIR_FREE(vol->name); VIR_FREE(vol->pool); VIR_FREE(vol); diff --git a/src/datatypes.h b/src/datatypes.h index ebda9928cd..f114360b51 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -1,7 +1,7 @@ /* * datatypes.h: management of structs for public data types * - * Copyright (C) 2006-2008, 2010 Red Hat, Inc. + * Copyright (C) 2006-2008, 2010-2011 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -254,8 +254,7 @@ struct _virStorageVol { virConnectPtr conn; /* pointer back to the connection */ char *pool; /* Pool name of owner */ char *name; /* the storage vol external name */ - /* XXX currently abusing path for this. Ought not to be so evil */ - char key[PATH_MAX]; /* unique key for storage vol */ + char *key; /* unique key for storage vol */ }; /**