mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
storage: Avoid unnecessary ternary operators and refactor the code
Setting of local variables in virStorageBackendCreateQemuImgCmd was unnecessarily cluttered with ternary operators and repeated testing of of conditions. This patch refactors the function to use if statements and improves error reporting in case inputvol is specified but does not contain target path. Previously we would complain about "unknown storage vol type 0" instead of the actual problem.
This commit is contained in:
parent
5d39a491ff
commit
b0c3ee0c85
@ -663,53 +663,58 @@ virStorageBackendCreateQemuImgCmd(virConnectPtr conn,
|
|||||||
virCommandPtr cmd = NULL;
|
virCommandPtr cmd = NULL;
|
||||||
bool do_encryption = (vol->target.encryption != NULL);
|
bool do_encryption = (vol->target.encryption != NULL);
|
||||||
unsigned long long int size_arg;
|
unsigned long long int size_arg;
|
||||||
bool preallocate = false;
|
bool preallocate = !!(flags & VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA);
|
||||||
|
const char *type;
|
||||||
/* Treat output block devices as 'raw' format */
|
const char *backingType = NULL;
|
||||||
const char *type =
|
const char *inputPath = NULL;
|
||||||
virStorageFileFormatTypeToString(vol->type == VIR_STORAGE_VOL_BLOCK ?
|
const char *inputType = NULL;
|
||||||
VIR_STORAGE_FILE_RAW :
|
|
||||||
vol->target.format);
|
|
||||||
|
|
||||||
const char *backingType = vol->backingStore.path ?
|
|
||||||
virStorageFileFormatTypeToString(vol->backingStore.format) : NULL;
|
|
||||||
|
|
||||||
const char *inputBackingPath = (inputvol ? inputvol->backingStore.path
|
|
||||||
: NULL);
|
|
||||||
const char *inputPath = inputvol ? inputvol->target.path : NULL;
|
|
||||||
/* Treat input block devices as 'raw' format */
|
|
||||||
const char *inputType = inputPath ?
|
|
||||||
virStorageFileFormatTypeToString(inputvol->type == VIR_STORAGE_VOL_BLOCK ?
|
|
||||||
VIR_STORAGE_FILE_RAW :
|
|
||||||
inputvol->target.format) :
|
|
||||||
NULL;
|
|
||||||
|
|
||||||
virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
|
virCheckFlags(VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA, NULL);
|
||||||
|
|
||||||
preallocate = !!(flags & VIR_STORAGE_VOL_CREATE_PREALLOC_METADATA);
|
/* Treat output block devices as 'raw' format */
|
||||||
|
type = virStorageFileFormatTypeToString(vol->type == VIR_STORAGE_VOL_BLOCK ?
|
||||||
|
VIR_STORAGE_FILE_RAW :
|
||||||
|
vol->target.format);
|
||||||
|
|
||||||
if (type == NULL) {
|
if (!type) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
_("unknown storage vol type %d"),
|
_("unknown storage vol type %d"),
|
||||||
vol->target.format);
|
vol->target.format);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (inputvol && inputType == NULL) {
|
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
|
||||||
_("unknown storage vol type %d"),
|
|
||||||
inputvol->target.format);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
if (preallocate && vol->target.format != VIR_STORAGE_FILE_QCOW2) {
|
if (preallocate && vol->target.format != VIR_STORAGE_FILE_QCOW2) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("metadata preallocation only available with qcow2"));
|
_("metadata preallocation only available with qcow2"));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (inputvol) {
|
||||||
|
if (!(inputPath = inputvol->target.path)) {
|
||||||
|
virReportError(VIR_ERR_INVALID_ARG, "%s",
|
||||||
|
_("missing input volume target path"));
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
inputType = virStorageFileFormatTypeToString(inputvol->type == VIR_STORAGE_VOL_BLOCK ?
|
||||||
|
VIR_STORAGE_FILE_RAW :
|
||||||
|
inputvol->target.format);
|
||||||
|
|
||||||
|
if (!inputType) {
|
||||||
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
_("unknown storage vol type %d"),
|
||||||
|
inputvol->target.format);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (vol->backingStore.path) {
|
if (vol->backingStore.path) {
|
||||||
int accessRetCode = -1;
|
int accessRetCode = -1;
|
||||||
char *absolutePath = NULL;
|
char *absolutePath = NULL;
|
||||||
|
|
||||||
|
backingType = virStorageFileFormatTypeToString(vol->backingStore.format);
|
||||||
|
|
||||||
if (preallocate) {
|
if (preallocate) {
|
||||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||||
_("metadata preallocation conflicts with backing"
|
_("metadata preallocation conflicts with backing"
|
||||||
@ -722,11 +727,9 @@ virStorageBackendCreateQemuImgCmd(virConnectPtr conn,
|
|||||||
* may cause issues with lvm. Untested essentially.
|
* may cause issues with lvm. Untested essentially.
|
||||||
*/
|
*/
|
||||||
if (inputvol &&
|
if (inputvol &&
|
||||||
(!inputBackingPath ||
|
STRNEQ_NULLABLE(inputvol->backingStore.path, vol->backingStore.path)) {
|
||||||
STRNEQ(inputBackingPath, vol->backingStore.path))) {
|
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
_("a different backing store cannot be specified."));
|
||||||
"%s", _("a different backing store cannot "
|
|
||||||
"be specified."));
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user