virsh: Add wrapper for virStorageVolFree

Similarly to virshDomainFree add a wrapper for the snapshot object
freeing function.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Acked-by: Jonathon Jongsma <jjongsma@redhat.com>
This commit is contained in:
Michal Privoznik 2021-09-26 10:28:06 +02:00
parent 663a29f42e
commit 717b6549d5
6 changed files with 40 additions and 57 deletions

View File

@ -868,7 +868,7 @@ sc_gettext_init:
$(_sc_search_regexp)
sc_prohibit_obj_free_apis_in_virsh:
@prohibit='\bvir(Domain|DomainSnapshot|Interface|Secret|StoragePool)Free\b' \
@prohibit='\bvir(Domain|DomainSnapshot|Interface|Secret|StoragePool|StorageVol)Free\b' \
in_vc_files='virsh.*\.[ch]$$' \
exclude='sc_prohibit_obj_free_apis_in_virsh' \
halt='avoid using public virXXXFree in virsh, use virsh-prefixed wrappers instead' \

View File

@ -65,7 +65,7 @@ virshStorageVolNameCompleter(vshControl *ctl,
cleanup:
for (i = 0; i < nvols; i++)
virStorageVolFree(vols[i]);
virshStorageVolFree(vols[i]);
g_free(vols);
return ret;
}
@ -104,7 +104,7 @@ virshStorageVolKeyCompleter(vshControl *ctl,
const char *key = virStorageVolGetKey(vols[j]);
tmp[nvols] = g_strdup(key);
nvols++;
virStorageVolFree(vols[j]);
virshStorageVolFree(vols[j]);
}
g_free(vols);

View File

@ -3942,8 +3942,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
for (i = 0; i < nvols; i++) {
VIR_FREE(vols[i].source);
VIR_FREE(vols[i].target);
if (vols[i].vol)
virStorageVolFree(vols[i].vol);
virshStorageVolFree(vols[i].vol);
}
VIR_FREE(vols);

View File

@ -318,6 +318,17 @@ virshStoragePoolFree(virStoragePoolPtr pool)
}
void
virshStorageVolFree(virStorageVolPtr vol)
{
if (!vol)
return;
vshSaveLibvirtHelperError();
virStorageVolFree(vol); /* sc_prohibit_obj_free_apis_in_virsh */
}
int
virshDomainGetXMLFromDom(vshControl *ctl,
virDomainPtr dom,

View File

@ -69,6 +69,11 @@ void
virshStoragePoolFree(virStoragePoolPtr pool);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virshStoragePool, virshStoragePoolFree);
typedef virStorageVol virshStorageVol;
void
virshStorageVolFree(virStorageVolPtr vol);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virshStorageVol, virshStorageVolFree);
int
virshDomainState(vshControl *ctl,
virDomainPtr dom,

View File

@ -153,8 +153,7 @@ virshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
vshError(ctl,
_("Requested volume '%s' is not in pool '%s'"),
n, virStoragePoolGetName(pool));
virStorageVolFree(vol);
vol = NULL;
g_clear_pointer(&vol, virshStorageVolFree);
}
}
}
@ -230,7 +229,7 @@ static bool
cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
{
g_autoptr(virshStoragePool) pool = NULL;
virStorageVolPtr vol = NULL;
g_autoptr(virshStorageVol) vol = NULL;
g_autofree char *xml = NULL;
bool printXML = vshCommandOptBool(cmd, "print-xml");
const char *name, *capacityStr = NULL, *allocationStr = NULL, *format = NULL;
@ -287,7 +286,7 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
/* Convert the snapshot parameters into backingStore XML */
if (snapshotStrVol) {
virStorageVolPtr snapVol;
g_autoptr(virshStorageVol) snapVol = NULL;
g_autofree char *snapshotStrVolPath = NULL;
/* Lookup snapshot backing volume. Try the backing-vol
* parameter as a name */
@ -330,7 +329,6 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
}
if ((snapshotStrVolPath = virStorageVolGetPath(snapVol)) == NULL) {
virStorageVolFree(snapVol);
goto cleanup;
}
@ -343,9 +341,6 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
snapshotStrFormat);
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</backingStore>\n");
/* Cleanup snapshot allocations */
virStorageVolFree(snapVol);
}
virBufferAdjustIndent(&buf, -2);
@ -366,8 +361,6 @@ cmdVolCreateAs(vshControl *ctl, const vshCmd *cmd)
ret = true;
cleanup:
if (vol)
virStorageVolFree(vol);
return ret;
}
@ -398,7 +391,7 @@ static bool
cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
{
g_autoptr(virshStoragePool) pool = NULL;
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
const char *from = NULL;
bool ret = false;
unsigned int flags = 0;
@ -421,7 +414,6 @@ cmdVolCreate(vshControl *ctl, const vshCmd *cmd)
if ((vol = virStorageVolCreateXML(pool, buffer, flags))) {
vshPrintExtra(ctl, _("Vol %s created from %s\n"),
virStorageVolGetName(vol), from);
virStorageVolFree(vol);
ret = true;
} else {
vshError(ctl, _("Failed to create vol from %s"), from);
@ -468,7 +460,8 @@ static bool
cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
{
g_autoptr(virshStoragePool) pool = NULL;
virStorageVolPtr newvol = NULL, inputvol = NULL;
g_autoptr(virshStorageVol) newvol = NULL;
g_autoptr(virshStorageVol) inputvol = NULL;
const char *from = NULL;
bool ret = false;
g_autofree char *buffer = NULL;
@ -506,10 +499,6 @@ cmdVolCreateFrom(vshControl *ctl, const vshCmd *cmd)
ret = true;
cleanup:
if (inputvol)
virStorageVolFree(inputvol);
if (newvol)
virStorageVolFree(newvol);
return ret;
}
@ -574,7 +563,8 @@ static bool
cmdVolClone(vshControl *ctl, const vshCmd *cmd)
{
g_autoptr(virshStoragePool) origpool = NULL;
virStorageVolPtr origvol = NULL, newvol = NULL;
g_autoptr(virshStorageVol) origvol = NULL;
g_autoptr(virshStorageVol) newvol = NULL;
const char *name = NULL;
g_autofree char *origxml = NULL;
xmlChar *newxml = NULL;
@ -624,10 +614,6 @@ cmdVolClone(vshControl *ctl, const vshCmd *cmd)
cleanup:
xmlFree(newxml);
if (origvol)
virStorageVolFree(origvol);
if (newvol)
virStorageVolFree(newvol);
return ret;
}
@ -667,7 +653,7 @@ static bool
cmdVolUpload(vshControl *ctl, const vshCmd *cmd)
{
const char *file = NULL;
virStorageVolPtr vol = NULL;
g_autoptr(virshStorageVol) vol = NULL;
bool ret = false;
int fd = -1;
virStreamPtr st = NULL;
@ -745,8 +731,6 @@ cmdVolUpload(vshControl *ctl, const vshCmd *cmd)
ret = true;
cleanup:
if (vol)
virStorageVolFree(vol);
if (st)
virStreamFree(st);
VIR_FORCE_CLOSE(fd);
@ -789,7 +773,7 @@ static bool
cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
{
const char *file = NULL;
virStorageVolPtr vol = NULL;
g_autoptr(virshStorageVol) vol = NULL;
bool ret = false;
int fd = -1;
virStreamPtr st = NULL;
@ -867,8 +851,6 @@ cmdVolDownload(vshControl *ctl, const vshCmd *cmd)
VIR_FORCE_CLOSE(fd);
if (!ret && created)
unlink(file);
if (vol)
virStorageVolFree(vol);
if (st)
virStreamFree(st);
return ret;
@ -901,7 +883,7 @@ static const vshCmdOptDef opts_vol_delete[] = {
static bool
cmdVolDelete(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
bool ret = true;
const char *name;
bool delete_snapshots = vshCommandOptBool(cmd, "delete-snapshots");
@ -920,7 +902,6 @@ cmdVolDelete(vshControl *ctl, const vshCmd *cmd)
ret = false;
}
virStorageVolFree(vol);
return ret;
}
@ -956,7 +937,7 @@ VIR_ENUM_IMPL(virshStorageVolWipeAlgorithm,
static bool
cmdVolWipe(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
bool ret = false;
const char *name;
const char *algorithm_str = NULL;
@ -989,7 +970,6 @@ cmdVolWipe(vshControl *ctl, const vshCmd *cmd)
vshPrintExtra(ctl, _("Vol %s wiped\n"), name);
ret = true;
out:
virStorageVolFree(vol);
return ret;
}
@ -1043,7 +1023,7 @@ static bool
cmdVolInfo(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolInfo info;
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
bool bytes = vshCommandOptBool(cmd, "bytes");
bool physical = vshCommandOptBool(cmd, "physical");
int rc;
@ -1063,7 +1043,6 @@ cmdVolInfo(vshControl *ctl, const vshCmd *cmd)
rc = virStorageVolGetInfo(vol, &info);
if (rc < 0) {
virStorageVolFree(vol);
return false;
}
@ -1090,7 +1069,6 @@ cmdVolInfo(vshControl *ctl, const vshCmd *cmd)
vshPrint(ctl, "%-15s %2.2lf %s\n", _("Allocation:"), val, unit);
}
virStorageVolFree(vol);
return true;
}
@ -1136,7 +1114,7 @@ static const vshCmdOptDef opts_vol_resize[] = {
static bool
cmdVolResize(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
const char *capacityStr = NULL;
unsigned long long capacity = 0;
unsigned int flags = 0;
@ -1190,7 +1168,6 @@ cmdVolResize(vshControl *ctl, const vshCmd *cmd)
}
cleanup:
virStorageVolFree(vol);
return ret;
}
@ -1216,7 +1193,7 @@ static const vshCmdOptDef opts_vol_dumpxml[] = {
static bool
cmdVolDumpXML(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
bool ret = true;
char *dump;
@ -1231,7 +1208,6 @@ cmdVolDumpXML(vshControl *ctl, const vshCmd *cmd)
ret = false;
}
virStorageVolFree(vol);
return ret;
}
@ -1263,8 +1239,7 @@ virshStorageVolListFree(struct virshStorageVolList *list)
if (list && list->vols) {
for (i = 0; i < list->nvols; i++) {
if (list->vols[i])
virStorageVolFree(list->vols[i]);
virshStorageVolFree(list->vols[i]);
}
g_free(list->vols);
}
@ -1537,14 +1512,13 @@ static const vshCmdOptDef opts_vol_name[] = {
static bool
cmdVolName(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
if (!(vol = virshCommandOptVolBy(ctl, cmd, "vol", NULL, NULL,
VIRSH_BYUUID)))
return false;
vshPrint(ctl, "%s\n", virStorageVolGetName(vol));
virStorageVolFree(vol);
return true;
}
@ -1574,7 +1548,7 @@ static bool
cmdVolPool(vshControl *ctl, const vshCmd *cmd)
{
g_autoptr(virshStoragePool) pool = NULL;
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
char uuid[VIR_UUID_STRING_BUFLEN];
/* Use the supplied string to locate the volume */
@ -1587,7 +1561,6 @@ cmdVolPool(vshControl *ctl, const vshCmd *cmd)
pool = virStoragePoolLookupByVolume(vol);
if (pool == NULL) {
vshError(ctl, "%s", _("failed to get parent pool"));
virStorageVolFree(vol);
return false;
}
@ -1601,8 +1574,6 @@ cmdVolPool(vshControl *ctl, const vshCmd *cmd)
vshPrint(ctl, "%s\n", virStoragePoolGetName(pool));
}
/* Cleanup */
virStorageVolFree(vol);
return true;
}
@ -1628,13 +1599,12 @@ static const vshCmdOptDef opts_vol_key[] = {
static bool
cmdVolKey(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
if (!(vol = virshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
return false;
vshPrint(ctl, "%s\n", virStorageVolGetKey(vol));
virStorageVolFree(vol);
return true;
}
@ -1660,19 +1630,17 @@ static const vshCmdOptDef opts_vol_path[] = {
static bool
cmdVolPath(vshControl *ctl, const vshCmd *cmd)
{
virStorageVolPtr vol;
g_autoptr(virshStorageVol) vol = NULL;
g_autofree char *StorageVolPath = NULL;
if (!(vol = virshCommandOptVol(ctl, cmd, "vol", "pool", NULL)))
return false;
if ((StorageVolPath = virStorageVolGetPath(vol)) == NULL) {
virStorageVolFree(vol);
return false;
}
vshPrint(ctl, "%s\n", StorageVolPath);
virStorageVolFree(vol);
return true;
}