mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 15:27:47 +00:00
storage: avoid s[n]printf
* src/storage/storage_backend.c (virStorageBackendCreateQemuImg) (virStorageBackendCreateQcowCreate): Use virAsprintf instead. * src/storage/storage_backend_disk.c (virStorageBackendDiskCreateVol, virStorageBackendDiskPartFormat): Likewise.
This commit is contained in:
parent
57ae4c0435
commit
4bcac75bd0
@ -636,7 +636,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
|
||||
unsigned int flags ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int ret = -1;
|
||||
char size[100];
|
||||
char *size = NULL;
|
||||
char *create_tool;
|
||||
|
||||
const char *type = virStorageFileFormatTypeToString(vol->target.format);
|
||||
@ -726,7 +726,10 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
|
||||
}
|
||||
|
||||
/* Size in KB */
|
||||
snprintf(size, sizeof(size), "%lluK", vol->capacity/1024);
|
||||
if (virAsprintf(&size, "%lluK", vol->capacity / 1024) < 0) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
/* KVM is usually ahead of qemu on features, so try that first */
|
||||
create_tool = virFindFileInPath("kvm-img");
|
||||
@ -821,6 +824,7 @@ virStorageBackendCreateQemuImg(virConnectPtr conn,
|
||||
}
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(size);
|
||||
VIR_FREE(create_tool);
|
||||
|
||||
return ret;
|
||||
@ -838,7 +842,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
unsigned int flags ATTRIBUTE_UNUSED)
|
||||
{
|
||||
int ret;
|
||||
char size[100];
|
||||
char *size;
|
||||
const char *imgargv[4];
|
||||
|
||||
if (inputvol) {
|
||||
@ -867,7 +871,10 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
}
|
||||
|
||||
/* Size in MB - yes different units to qemu-img :-( */
|
||||
snprintf(size, sizeof(size), "%llu", vol->capacity/1024/1024);
|
||||
if (virAsprintf(&size, "%llu", vol->capacity / 1024 / 1024) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
|
||||
imgargv[0] = virFindFileInPath("qcow-create");
|
||||
imgargv[1] = size;
|
||||
@ -876,6 +883,7 @@ virStorageBackendCreateQcowCreate(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
|
||||
ret = virStorageBackendCreateExecCommand(pool, vol, imgargv);
|
||||
VIR_FREE(imgargv[0]);
|
||||
VIR_FREE(size);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -381,7 +381,7 @@ virStorageBackendDiskPartTypeToCreate(virStoragePoolObjPtr pool)
|
||||
static int
|
||||
virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
|
||||
virStorageVolDefPtr vol,
|
||||
char* partFormat)
|
||||
char** partFormat)
|
||||
{
|
||||
int i;
|
||||
if (pool->def->source.format == VIR_STORAGE_POOL_DISK_DOS) {
|
||||
@ -402,7 +402,10 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
sprintf(partFormat, "%s", partedFormat);
|
||||
if ((*partFormat = strdup(partedFormat)) == NULL) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
} else {
|
||||
/* create primary partition as long as it is possible
|
||||
and after that check if an extended partition exists
|
||||
@ -410,14 +413,21 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
|
||||
/* XXX Only support one extended partition */
|
||||
switch (virStorageBackendDiskPartTypeToCreate(pool)) {
|
||||
case VIR_STORAGE_VOL_DISK_TYPE_PRIMARY:
|
||||
sprintf(partFormat, "primary %s", partedFormat);
|
||||
if (virAsprintf(partFormat, "primary %s", partedFormat) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
case VIR_STORAGE_VOL_DISK_TYPE_LOGICAL:
|
||||
/* make sure we have a extended partition */
|
||||
for (i = 0; i < pool->volumes.count; i++) {
|
||||
if (pool->volumes.objs[i]->target.format ==
|
||||
VIR_STORAGE_VOL_DISK_EXTENDED) {
|
||||
sprintf(partFormat, "logical %s", partedFormat);
|
||||
if (virAsprintf(partFormat, "logical %s",
|
||||
partedFormat) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -428,11 +438,16 @@ virStorageBackendDiskPartFormat(virStoragePoolObjPtr pool,
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
virStorageReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
"%s", _("unknown partition type"));
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
sprintf(partFormat, "primary");
|
||||
if ((*partFormat = strdup("primary")) == NULL) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -538,16 +553,19 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
virStoragePoolObjPtr pool,
|
||||
virStorageVolDefPtr vol)
|
||||
{
|
||||
char start[100], end[100], partFormat[100];
|
||||
int res = -1;
|
||||
char *start = NULL;
|
||||
char *end = NULL;
|
||||
char *partFormat;
|
||||
unsigned long long startOffset = 0, endOffset = 0;
|
||||
const char *cmdargv[] = {
|
||||
PARTED,
|
||||
pool->def->source.devices[0].path,
|
||||
"mkpart",
|
||||
"--script",
|
||||
partFormat,
|
||||
start,
|
||||
end,
|
||||
NULL /*partFormat*/,
|
||||
NULL /*start*/,
|
||||
NULL /*end*/,
|
||||
NULL
|
||||
};
|
||||
|
||||
@ -558,23 +576,27 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (virStorageBackendDiskPartFormat(pool, vol, partFormat) != 0) {
|
||||
if (virStorageBackendDiskPartFormat(pool, vol, &partFormat) != 0) {
|
||||
return -1;
|
||||
}
|
||||
cmdargv[4] = partFormat;
|
||||
|
||||
if (virStorageBackendDiskPartBoundries(pool, &startOffset,
|
||||
&endOffset,
|
||||
vol->capacity) != 0) {
|
||||
return -1;
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
snprintf(start, sizeof(start)-1, "%lluB", startOffset);
|
||||
start[sizeof(start)-1] = '\0';
|
||||
snprintf(end, sizeof(end)-1, "%lluB", endOffset);
|
||||
end[sizeof(end)-1] = '\0';
|
||||
if (virAsprintf(&start, "%lluB", startOffset) < 0 ||
|
||||
virAsprintf(&end, "%lluB", endOffset) < 0) {
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
cmdargv[5] = start;
|
||||
cmdargv[6] = end;
|
||||
|
||||
if (virRun(cmdargv, NULL) < 0)
|
||||
return -1;
|
||||
goto cleanup;
|
||||
|
||||
/* wait for device node to show up */
|
||||
virFileWaitForDevices();
|
||||
@ -588,9 +610,15 @@ virStorageBackendDiskCreateVol(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
|
||||
/* Fetch actual extent info, generate key */
|
||||
if (virStorageBackendDiskReadPartitions(pool, vol) < 0)
|
||||
return -1;
|
||||
goto cleanup;
|
||||
|
||||
return 0;
|
||||
res = 0;
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(partFormat);
|
||||
VIR_FREE(start);
|
||||
VIR_FREE(end);
|
||||
return res;
|
||||
}
|
||||
|
||||
static int
|
||||
|
Loading…
Reference in New Issue
Block a user