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:
Eric Blake 2010-08-18 15:54:11 -06:00
parent 57ae4c0435
commit 4bcac75bd0
2 changed files with 59 additions and 23 deletions

View File

@ -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;
}

View File

@ -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